Hello, world!
\n' def test_render_html_with_extensions(): text = u"Hello, https://pypa.io!" result = cmark.markdown_to_html_with_extensions( text, extensions=['autolink']) expected = """Hello, https://pypa.io!
""" assert _normalize_ws(result) == _normalize_ws(expected) def test_github_flavored_markdown_to_html(): text = u"Hello, https://pypa.io!" result = cmark.github_flavored_markdown_to_html(text) expected = """Hello, https://pypa.io!
""" assert _normalize_ws(result) == _normalize_ws(expected) def test_github_flavored_markdown_to_html_pre_tag(): text = u"```python\nprint('hello')\n```" result = cmark.github_flavored_markdown_to_html(text) expected = """print('hello')
"""
assert _normalize_ws(result) == _normalize_ws(expected)
def test_github_flavored_markdown_to_html_tasklist():
text = u"- [X] Task 1 Done\n- [ ] Task 2 Incomplete"
result = cmark.github_flavored_markdown_to_html(text)
expected = """
Hello, world!
\n' def test_parser_interface(): text = u"Hello, **world**!" parser = cmark.parser_new() cmark.parser_feed(parser, text) root = cmark.parser_finish(parser) result = cmark.render_html(root) cmark.parser_free(parser) assert result == 'Hello, world!
\n' def test_core_extensions_ensure_registered(): cmark.core_extensions_ensure_registered() def test_find_syntax_extension(): extension = cmark.find_syntax_extension('table') assert extension is not None def test_find_syntax_extension_doesnt_exist(): extension = cmark.find_syntax_extension('notarealext') assert extension is None ././@PaxHeader 0000000 0000000 0000000 00000000034 00000000000 010212 x ustar 00 28 mtime=1732140290.8777678 cmarkgfm-2024.11.20/third_party/ 0000755 0001751 0000177 00000000000 14717456403 015643 5 ustar 00runner docker ././@PaxHeader 0000000 0000000 0000000 00000000033 00000000000 010211 x ustar 00 27 mtime=1732140290.881768 cmarkgfm-2024.11.20/third_party/cmark/ 0000755 0001751 0000177 00000000000 14717456403 016740 5 ustar 00runner docker ././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0 cmarkgfm-2024.11.20/third_party/cmark/COPYING 0000644 0001751 0000177 00000016617 14717450313 020000 0 ustar 00runner docker 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. ----- houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c 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 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. ----- utf8.c and utf8.c are derived from utf8proc ( tags for code blocks instead of .
*/
#define CMARK_OPT_GITHUB_PRE_LANG (1 << 11)
/** Be liberal in interpreting inline HTML tags.
*/
#define CMARK_OPT_LIBERAL_HTML_TAG (1 << 12)
/** Parse footnotes.
*/
#define CMARK_OPT_FOOTNOTES (1 << 13)
/** Only parse strikethroughs if surrounded by exactly 2 tildes.
* Gives some compatibility with redcarpet.
*/
#define CMARK_OPT_STRIKETHROUGH_DOUBLE_TILDE (1 << 14)
/** Use style attributes to align table cells instead of align attributes.
*/
#define CMARK_OPT_TABLE_PREFER_STYLE_ATTRIBUTES (1 << 15)
/** Include the remainder of the info string in code blocks in
* a separate attribute.
*/
#define CMARK_OPT_FULL_INFO_STRING (1 << 16)
/**
* ## Version information
*/
/** The library version as integer for runtime checks. Also available as
* macro CMARK_VERSION for compile time checks.
*
* * Bits 16-23 contain the major version.
* * Bits 8-15 contain the minor version.
* * Bits 0-7 contain the patchlevel.
*
* In hexadecimal format, the number 0x010203 represents version 1.2.3.
*/
CMARK_GFM_EXPORT
int cmark_version(void);
/** The library version string for runtime checks. Also available as
* macro CMARK_VERSION_STRING for compile time checks.
*/
CMARK_GFM_EXPORT
const char *cmark_version_string(void);
/** # AUTHORS
*
* John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
*/
#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_BLOCK CMARK_NODE_HTML_BLOCK
#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK
#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
#define NODE_HEADING CMARK_NODE_HEADING
#define NODE_HEADER CMARK_NODE_HEADER
#define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK
#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_HTML_INLINE CMARK_NODE_HTML_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
#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
typedef int32_t bufsize_t;
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/cmark.c 0000644 0001751 0000177 00000002455 14717450313 020770 0 ustar 00runner docker #include
#include
#include
#include "registry.h"
#include "node.h"
#include "houdini.h"
#include "cmark-gfm.h"
#include "buffer.h"
cmark_node_type CMARK_NODE_LAST_BLOCK = CMARK_NODE_FOOTNOTE_DEFINITION;
cmark_node_type CMARK_NODE_LAST_INLINE = CMARK_NODE_FOOTNOTE_REFERENCE;
int cmark_version(void) { return CMARK_GFM_VERSION; }
const char *cmark_version_string(void) { return CMARK_GFM_VERSION_STRING; }
static void *xcalloc(size_t nmem, size_t size) {
void *ptr = calloc(nmem, size);
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) {
fprintf(stderr, "[cmark] realloc returned null pointer, aborting\n");
abort();
}
return new_ptr;
}
static void xfree(void *ptr) {
free(ptr);
}
cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, xfree};
cmark_mem *cmark_get_default_mem_allocator(void) {
return &CMARK_DEFAULT_MEM_ALLOCATOR;
}
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);
result = cmark_render_html(doc, options, NULL);
cmark_node_free(doc);
return result;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/cmark_ctype.c 0000644 0001751 0000177 00000003321 14717450313 022165 0 ustar 00runner docker #include
#include "cmark_ctype.h"
/** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other
*/
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,
/* 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[(uint8_t)c] == 1; }
/**
* Returns 1 if c is an ascii punctuation character.
*/
int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; }
int cmark_isalnum(char 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[(uint8_t)c] == 3; }
int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; }
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/cmark_ctype.h 0000644 0001751 0000177 00000001013 14717450313 022166 0 ustar 00runner docker #ifndef CMARK_CMARK_CTYPE_H
#define CMARK_CMARK_CTYPE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "cmark-gfm_export.h"
/** Locale-independent versions of functions from ctype.h.
* We want cmark to behave the same no matter what the system locale.
*/
CMARK_GFM_EXPORT
int cmark_isspace(char c);
CMARK_GFM_EXPORT
int cmark_ispunct(char c);
CMARK_GFM_EXPORT
int cmark_isalnum(char c);
CMARK_GFM_EXPORT
int cmark_isdigit(char c);
CMARK_GFM_EXPORT
int cmark_isalpha(char c);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/commonmark.c 0000644 0001751 0000177 00000034045 14717450313 022036 0 ustar 00runner docker #include
#include
#include
#include
#include
#include "config.h"
#include "cmark-gfm.h"
#include "node.h"
#include "buffer.h"
#include "utf8.h"
#include "scanners.h"
#include "render.h"
#include "syntax_extension.h"
#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
#define LIT(s) renderer->out(renderer, node, 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.
static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_node *node,
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]);
char encoded[ENCODED_SIZE];
needs_escaping =
c < 0x80 && escape != LITERAL &&
((escape == NORMAL &&
(c < 0x20 ||
c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' ||
c == '>' || c == '\\' || c == '`' || c == '~' || c == '!' ||
(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 == '>' || cmark_isspace((char)c) || c == '\\' ||
c == ')' || c == '(')) ||
(escape == TITLE &&
(c == '`' || c == '<' || c == '>' || c == '"' || c == '\\')));
if (needs_escaping) {
if (escape == URL && cmark_isspace((char)c)) {
// use percent encoding for spaces
snprintf(encoded, ENCODED_SIZE, "%%%2X", c);
cmark_strbuf_puts(renderer->buffer, encoded);
renderer->column += 3;
} else if (cmark_ispunct((char)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 += (int)strlen(encoded);
}
} 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 = 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) {
// 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);
while (i <= code_len) {
if (code[i] == '`') {
current++;
} else {
if (current > 0 && current < 32) {
used |= (1U << current);
}
current = 0;
}
i++;
}
// return number of first bit that is 0:
i = 0;
while (i < 32 && used & 1) {
used = used >> 1;
i++;
}
return (int)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;
if (link_text == NULL) {
return false;
}
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 int S_render_node(cmark_renderer *renderer, cmark_node *node,
cmark_event_type ev_type, int options) {
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;
char fencechar[2] = {'\0', '\0'};
size_t info_len, code_len;
char listmarker[LISTMARKER_SIZE];
const 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);
// 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 (entering) {
if (node->parent && node->parent->type == CMARK_NODE_ITEM) {
renderer->in_tight_list_item = node->parent->parent->as.list.tight;
}
} else {
if (node->type == CMARK_NODE_LIST) {
renderer->in_tight_list_item =
node->parent &&
node->parent->type == CMARK_NODE_ITEM &&
node->parent->parent->as.list.tight;
}
}
if (node->extension && node->extension->commonmark_render_func) {
node->extension->commonmark_render_func(node->extension, renderer, node, ev_type, options);
return 1;
}
switch (node->type) {
case CMARK_NODE_DOCUMENT:
break;
case CMARK_NODE_BLOCK_QUOTE:
if (entering) {
LIT("> ");
renderer->begin_content = true;
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 that a following indented code block or list will be
// inteprereted correctly.
CR();
LIT("");
BLANKLINE();
}
break;
case CMARK_NODE_ITEM:
if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
marker_width = 4;
} else {
list_number = cmark_node_get_item_index(node);
list_delim = cmark_node_get_list_delim(node->parent);
// we ensure a width of at least 4 so
// we get nice transition from single digits
// to double
snprintf(listmarker, LISTMARKER_SIZE, "%d%s%s", list_number,
list_delim == CMARK_PAREN_DELIM ? ")" : ".",
list_number < 10 ? " " : " ");
marker_width = (bufsize_t)strlen(listmarker);
}
if (entering) {
if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
LIT(" - ");
renderer->begin_content = true;
} else {
LIT(listmarker);
renderer->begin_content = true;
}
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_HEADING:
if (entering) {
for (i = cmark_node_get_heading_level(node); i > 0; i--) {
LIT("#");
}
LIT(" ");
renderer->begin_content = true;
renderer->no_linebreaks = true;
} else {
renderer->no_linebreaks = false;
BLANKLINE();
}
break;
case CMARK_NODE_CODE_BLOCK:
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 = 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
// begin or end with a blank line, and code isn't
// first thing in a list item
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, " ");
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(fencechar);
}
LIT(" ");
OUT(info, false, LITERAL);
CR();
OUT(cmark_node_get_literal(node), false, LITERAL);
CR();
for (i = 0; i < numticks; i++) {
LIT(fencechar);
}
}
BLANKLINE();
break;
case CMARK_NODE_HTML_BLOCK:
BLANKLINE();
OUT(cmark_node_get_literal(node), false, LITERAL);
BLANKLINE();
break;
case CMARK_NODE_CUSTOM_BLOCK:
BLANKLINE();
OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
false, LITERAL);
BLANKLINE();
break;
case CMARK_NODE_THEMATIC_BREAK:
BLANKLINE();
LIT("-----");
BLANKLINE();
break;
case CMARK_NODE_PARAGRAPH:
if (!entering) {
BLANKLINE();
}
break;
case CMARK_NODE_TEXT:
OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
break;
case CMARK_NODE_LINEBREAK:
if (!(CMARK_OPT_HARDBREAKS & options)) {
LIT(" ");
}
CR();
break;
case CMARK_NODE_SOFTBREAK:
if (CMARK_OPT_HARDBREAKS & options) {
LIT(" ");
CR();
} else if (!renderer->no_linebreaks && renderer->width == 0 &&
!(CMARK_OPT_HARDBREAKS & options) &&
!(CMARK_OPT_NOBREAKS & options)) {
CR();
} else {
OUT(" ", allow_wrap, LITERAL);
}
break;
case CMARK_NODE_CODE:
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 (extra_spaces) {
LIT(" ");
}
OUT(cmark_node_get_literal(node), allow_wrap, LITERAL);
if (extra_spaces) {
LIT(" ");
}
for (i = 0; i < numticks; i++) {
LIT("`");
}
break;
case CMARK_NODE_HTML_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 (node->parent == NULL || node->parent->type != 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((const char *)cmark_node_get_url(node) + 7);
} else {
LIT((const 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 (strlen(title) > 0) {
LIT(" \"");
OUT(title, false, TITLE);
LIT("\"");
}
LIT(")");
}
}
break;
case CMARK_NODE_IMAGE:
if (entering) {
LIT(";
OUT(cmark_node_get_url(node), false, URL);
title = cmark_node_get_title(node);
if (strlen(title) > 0) {
OUT(" \"", allow_wrap, LITERAL);
OUT(title, false, TITLE);
LIT("\"");
}
LIT(")");
}
break;
case CMARK_NODE_FOOTNOTE_REFERENCE:
if (entering) {
LIT("[^");
char *footnote_label = renderer->mem->calloc(node->parent_footnote_def->as.literal.len + 1, sizeof(char));
memmove(footnote_label, node->parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len);
OUT(footnote_label, false, LITERAL);
renderer->mem->free(footnote_label);
LIT("]");
}
break;
case CMARK_NODE_FOOTNOTE_DEFINITION:
if (entering) {
renderer->footnote_ix += 1;
LIT("[^");
char *footnote_label = renderer->mem->calloc(node->as.literal.len + 1, sizeof(char));
memmove(footnote_label, node->as.literal.data, node->as.literal.len);
OUT(footnote_label, false, LITERAL);
renderer->mem->free(footnote_label);
LIT("]:\n");
cmark_strbuf_puts(renderer->prefix, " ");
} else {
cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4);
}
break;
default:
assert(false);
break;
}
return 1;
}
char *cmark_render_commonmark(cmark_node *root, int options, int width) {
return cmark_render_commonmark_with_mem(root, options, width, cmark_node_mem(root));
}
char *cmark_render_commonmark_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
if (options & CMARK_OPT_HARDBREAKS) {
// disable breaking on width, since it has
// a different meaning with OPT_HARDBREAKS
width = 0;
}
return cmark_render(mem, root, options, width, outc, S_render_node);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/entities.inc 0000644 0001751 0000177 00000310476 14717450313 022053 0 ustar 00runner docker /* 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 32
#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}},
};
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/footnotes.c 0000644 0001751 0000177 00000003370 14717450313 021710 0 ustar 00runner docker #include "cmark-gfm.h"
#include "parser.h"
#include "footnotes.h"
#include "inlines.h"
#include "chunk.h"
static void footnote_free(cmark_map *map, cmark_map_entry *_ref) {
cmark_footnote *ref = (cmark_footnote *)_ref;
cmark_mem *mem = map->mem;
if (ref != NULL) {
mem->free(ref->entry.label);
if (ref->node)
cmark_node_free(ref->node);
mem->free(ref);
}
}
void cmark_footnote_create(cmark_map *map, cmark_node *node) {
cmark_footnote *ref;
unsigned char *reflabel = normalize_map_label(map->mem, &node->as.literal);
/* empty footnote name, or composed from only whitespace */
if (reflabel == NULL)
return;
assert(map->sorted == NULL);
ref = (cmark_footnote *)map->mem->calloc(1, sizeof(*ref));
ref->entry.label = reflabel;
ref->node = node;
ref->entry.age = map->size;
ref->entry.next = map->refs;
map->refs = (cmark_map_entry *)ref;
map->size++;
}
cmark_map *cmark_footnote_map_new(cmark_mem *mem) {
return cmark_map_new(mem, footnote_free);
}
// Before calling `cmark_map_free` on a map with `cmark_footnotes`, first
// unlink all of the footnote nodes before freeing their memory.
//
// Sometimes, two (unused) footnote nodes can end up referencing each other,
// which as they get freed up by calling `cmark_map_free` -> `footnote_free` ->
// etc, can lead to a use-after-free error.
//
// Better to `unlink` every footnote node first, setting their next, prev, and
// parent pointers to NULL, and only then walk thru & free them up.
void cmark_unlink_footnotes_map(cmark_map *map) {
cmark_map_entry *ref;
cmark_map_entry *next;
ref = map->refs;
while(ref) {
next = ref->next;
if (((cmark_footnote *)ref)->node) {
cmark_node_unlink(((cmark_footnote *)ref)->node);
}
ref = next;
}
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/footnotes.h 0000644 0001751 0000177 00000000702 14717450313 021711 0 ustar 00runner docker #ifndef CMARK_FOOTNOTES_H
#define CMARK_FOOTNOTES_H
#include "map.h"
#ifdef __cplusplus
extern "C" {
#endif
struct cmark_footnote {
cmark_map_entry entry;
cmark_node *node;
unsigned int ix;
};
typedef struct cmark_footnote cmark_footnote;
void cmark_footnote_create(cmark_map *map, cmark_node *node);
cmark_map *cmark_footnote_map_new(cmark_mem *mem);
void cmark_unlink_footnotes_map(cmark_map *map);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/houdini.h 0000644 0001751 0000177 00000003012 14717450313 021325 0 ustar 00runner docker #ifndef CMARK_HOUDINI_H
#define CMARK_HOUDINI_H
#ifdef __cplusplus
extern "C" {
#endif
#include
#include "config.h"
#include "buffer.h"
#ifdef HAVE___BUILTIN_EXPECT
#define likely(x) __builtin_expect((x), 1)
#define unlikely(x) __builtin_expect((x), 0)
#else
#define likely(x) (x)
#define unlikely(x) (x)
#endif
#ifdef HOUDINI_USE_LOCALE
#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')
#endif
#define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10)
#define HOUDINI_UNESCAPED_SIZE(x) (x)
CMARK_GFM_EXPORT
bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
bufsize_t size);
CMARK_GFM_EXPORT
int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src,
bufsize_t size);
CMARK_GFM_EXPORT
int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src,
bufsize_t size, int secure);
CMARK_GFM_EXPORT
int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
bufsize_t size);
CMARK_GFM_EXPORT
void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
bufsize_t size);
CMARK_GFM_EXPORT
int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src,
bufsize_t size);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/houdini_href_e.c 0000644 0001751 0000177 00000005707 14717450313 022645 0 ustar 00runner docker #include
#include
#include
#include "houdini.h"
/*
* The following characters will not be escaped:
*
* -_.+!*'(),%#@?=;:/,+&$~ alphanum
*
* Note that this character set is the addition of:
*
* - The characters which are safe to be in an URL
* - The characters which are *not* safe to be in
* an URL because they are RESERVED characters.
*
* 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.
*
* There are two exceptions: the chacters & (amp)
* and ' (single quote) do not appear in the table.
* They are meant to appear in the URL as components,
* yet they require special HTML-entity escaping
* to generate valid HTML markup.
*
* All other characters will be escaped to %XX.
*
*/
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, 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,
};
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] = '%';
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);
/* 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;
/* 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 */
#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);
}
i++;
}
return 1;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/houdini_html_e.c 0000644 0001751 0000177 00000004060 14717450313 022654 0 ustar 00runner docker #include
#include
#include
#include "houdini.h"
/**
* According to the OWASP rules:
*
* & --> &
* < --> <
* > --> >
* " --> "
* ' --> ' ' is not recommended
* / --> / forward slash is included as it helps end an HTML entity
*
*/
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,
};
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;
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);
/* escaping */
if (unlikely(i >= size))
break;
/* The forward slash and single quote are 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++;
}
return 1;
}
int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
return houdini_escape_html0(ob, src, size, 1);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/houdini_html_u.c 0000644 0001751 0000177 00000006756 14717450313 022712 0 ustar 00runner docker #include
#include
#include
#include "buffer.h"
#include "houdini.h"
#include "utf8.h"
#include "entities.inc"
/* 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) {
int j;
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) {
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 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);
}
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;
}
cmark_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;
while (i < size) {
org = i;
while (i < size && src[i] != '&')
i++;
if (likely(i > org)) {
if (unlikely(org == 0)) {
if (i >= size)
return 0;
cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size));
}
cmark_strbuf_put(ob, src + org, i - org);
}
/* escaping */
if (i >= size)
break;
i++;
ent = houdini_unescape_ent(ob, src + i, size - i);
i += ent;
/* not really an entity */
if (ent == 0)
cmark_strbuf_putc(ob, '&');
}
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);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/html.c 0000644 0001751 0000177 00000036270 14717450313 020641 0 ustar 00runner docker #include
#include
#include
#include
#include "cmark_ctype.h"
#include "config.h"
#include "cmark-gfm.h"
#include "houdini.h"
#include "scanners.h"
#include "syntax_extension.h"
#include "html.h"
#include "render.h"
// 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 filter_html_block(cmark_html_renderer *renderer, uint8_t *data, size_t len) {
cmark_strbuf *html = renderer->html;
cmark_llist *it;
cmark_syntax_extension *ext;
bool filtered;
uint8_t *match;
while (len) {
match = (uint8_t *) memchr(data, '<', len);
if (!match)
break;
if (match != data) {
cmark_strbuf_put(html, data, (bufsize_t)(match - data));
len -= (match - data);
data = match;
}
filtered = false;
for (it = renderer->filter_extensions; it; it = it->next) {
ext = ((cmark_syntax_extension *) it->data);
if (!ext->html_filter_func(ext, data, len)) {
filtered = true;
break;
}
}
if (!filtered) {
cmark_strbuf_putc(html, '<');
} else {
cmark_strbuf_puts(html, "<");
}
++data;
--len;
}
if (len)
cmark_strbuf_put(html, data, (bufsize_t)len);
}
static bool S_put_footnote_backref(cmark_html_renderer *renderer, cmark_strbuf *html, cmark_node *node) {
if (renderer->written_footnote_ix >= renderer->footnote_ix)
return false;
renderer->written_footnote_ix = renderer->footnote_ix;
char m[32];
snprintf(m, sizeof(m), "%d", renderer->written_footnote_ix);
cmark_strbuf_puts(html, "as.literal.data, node->as.literal.len);
cmark_strbuf_puts(html, "\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"");
cmark_strbuf_puts(html, m);
cmark_strbuf_puts(html, "\" aria-label=\"Back to reference ");
cmark_strbuf_puts(html, m);
cmark_strbuf_puts(html, "\">↩");
if (node->footnote.def_count > 1)
{
for(int i = 2; i <= node->footnote.def_count; i++) {
char n[32];
snprintf(n, sizeof(n), "%d", i);
cmark_strbuf_puts(html, " as.literal.data, node->as.literal.len);
cmark_strbuf_puts(html, "-");
cmark_strbuf_puts(html, n);
cmark_strbuf_puts(html, "\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"");
cmark_strbuf_puts(html, m);
cmark_strbuf_puts(html, "-");
cmark_strbuf_puts(html, n);
cmark_strbuf_puts(html, "\" aria-label=\"Back to reference ");
cmark_strbuf_puts(html, m);
cmark_strbuf_puts(html, "-");
cmark_strbuf_puts(html, n);
cmark_strbuf_puts(html, "\">↩");
cmark_strbuf_puts(html, n);
cmark_strbuf_puts(html, "");
}
}
return true;
}
static int S_render_node(cmark_html_renderer *renderer, cmark_node *node,
cmark_event_type ev_type, int options) {
cmark_node *parent;
cmark_node *grandparent;
cmark_strbuf *html = renderer->html;
cmark_llist *it;
cmark_syntax_extension *ext;
char start_heading[] = "plain == node) { // back at original node
renderer->plain = NULL;
}
if (renderer->plain != NULL) {
switch (node->type) {
case CMARK_NODE_TEXT:
case CMARK_NODE_CODE:
case CMARK_NODE_HTML_INLINE:
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;
}
if (node->extension && node->extension->html_render_func) {
node->extension->html_render_func(node->extension, renderer, node, ev_type, options);
return 1;
}
switch (node->type) {
case CMARK_NODE_DOCUMENT:
break;
case CMARK_NODE_BLOCK_QUOTE:
if (entering) {
cmark_html_render_cr(html);
cmark_strbuf_puts(html, "\n");
} else {
cmark_html_render_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) {
cmark_html_render_cr(html);
if (list_type == CMARK_BULLET_LIST) {
cmark_strbuf_puts(html, "\n");
} else if (start == 1) {
cmark_strbuf_puts(html, "\n");
} else {
snprintf(buffer, BUFFER_SIZE, "\n");
}
} else {
cmark_strbuf_puts(html,
list_type == CMARK_BULLET_LIST ? "
\n" : "\n");
}
break;
}
case CMARK_NODE_ITEM:
if (entering) {
cmark_html_render_cr(html);
cmark_strbuf_puts(html, "');
} else {
cmark_strbuf_puts(html, " \n");
}
break;
case CMARK_NODE_HEADING:
if (entering) {
cmark_html_render_cr(html);
start_heading[2] = (char)('0' + node->as.heading.level);
cmark_strbuf_puts(html, start_heading);
cmark_html_render_sourcepos(node, html, options);
cmark_strbuf_putc(html, '>');
} else {
end_heading[3] = (char)('0' + node->as.heading.level);
cmark_strbuf_puts(html, end_heading);
cmark_strbuf_puts(html, ">\n");
}
break;
case CMARK_NODE_CODE_BLOCK:
cmark_html_render_cr(html);
if (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;
}
if (options & CMARK_OPT_GITHUB_PRE_LANG) {
cmark_strbuf_puts(html, "as.code.info.data, first_tag);
if (first_tag < node->as.code.info.len && (options & CMARK_OPT_FULL_INFO_STRING)) {
cmark_strbuf_puts(html, "\" data-meta=\"");
escape_html(html, node->as.code.info.data + first_tag + 1, node->as.code.info.len - first_tag - 1);
}
cmark_strbuf_puts(html, "\">");
} else {
cmark_strbuf_puts(html, "as.code.info.data, first_tag);
if (first_tag < node->as.code.info.len && (options & CMARK_OPT_FULL_INFO_STRING)) {
cmark_strbuf_puts(html, "\" data-meta=\"");
escape_html(html, node->as.code.info.data + first_tag + 1, node->as.code.info.len - first_tag - 1);
}
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_BLOCK:
cmark_html_render_cr(html);
if (!(options & CMARK_OPT_UNSAFE)) {
cmark_strbuf_puts(html, "");
} else if (renderer->filter_extensions) {
filter_html_block(renderer, node->as.literal.data, node->as.literal.len);
} else {
cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
}
cmark_html_render_cr(html);
break;
case CMARK_NODE_CUSTOM_BLOCK:
cmark_html_render_cr(html);
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);
}
cmark_html_render_cr(html);
break;
case CMARK_NODE_THEMATIC_BREAK:
cmark_html_render_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) {
cmark_html_render_cr(html);
cmark_strbuf_puts(html, "');
} else {
if (parent->type == CMARK_NODE_FOOTNOTE_DEFINITION && node->next == NULL) {
cmark_strbuf_putc(html, ' ');
S_put_footnote_backref(renderer, html, parent);
}
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 if (options & CMARK_OPT_NOBREAKS) {
cmark_strbuf_putc(html, ' ');
} 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_HTML_INLINE:
if (!(options & CMARK_OPT_UNSAFE)) {
cmark_strbuf_puts(html, "");
} else {
filtered = false;
for (it = renderer->filter_extensions; it; it = it->next) {
ext = (cmark_syntax_extension *) it->data;
if (!ext->html_filter_func(ext, node->as.literal.data, node->as.literal.len)) {
filtered = true;
break;
}
}
if (!filtered) {
cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
} else {
cmark_strbuf_puts(html, "<");
cmark_strbuf_put(html, node->as.literal.data + 1, node->as.literal.len - 1);
}
}
break;
case CMARK_NODE_CUSTOM_INLINE:
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:
if (node->parent == NULL || node->parent->type != 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=\"");
renderer->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;
case CMARK_NODE_FOOTNOTE_DEFINITION:
if (entering) {
if (renderer->footnote_ix == 0) {
cmark_strbuf_puts(html, "\n\n");
}
++renderer->footnote_ix;
cmark_strbuf_puts(html, "- as.literal.data, node->as.literal.len);
cmark_strbuf_puts(html, "\">\n");
} else {
if (S_put_footnote_backref(renderer, html, node)) {
cmark_strbuf_putc(html, '\n');
}
cmark_strbuf_puts(html, "
\n");
}
break;
case CMARK_NODE_FOOTNOTE_REFERENCE:
if (entering) {
cmark_strbuf_puts(html, "parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len);
cmark_strbuf_puts(html, "\" id=\"fnref-");
houdini_escape_href(html, node->parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len);
if (node->footnote.ref_ix > 1) {
char n[32];
snprintf(n, sizeof(n), "%d", node->footnote.ref_ix);
cmark_strbuf_puts(html, "-");
cmark_strbuf_puts(html, n);
}
cmark_strbuf_puts(html, "\" data-footnote-ref>");
houdini_escape_href(html, node->as.literal.data, node->as.literal.len);
cmark_strbuf_puts(html, "");
}
break;
default:
assert(false);
break;
}
return 1;
}
char *cmark_render_html(cmark_node *root, int options, cmark_llist *extensions) {
return cmark_render_html_with_mem(root, options, extensions, cmark_node_mem(root));
}
char *cmark_render_html_with_mem(cmark_node *root, int options, cmark_llist *extensions, cmark_mem *mem) {
char *result;
cmark_strbuf html = CMARK_BUF_INIT(mem);
cmark_event_type ev_type;
cmark_node *cur;
cmark_html_renderer renderer = {&html, NULL, NULL, 0, 0, NULL};
cmark_iter *iter = cmark_iter_new(root);
for (; extensions; extensions = extensions->next)
if (((cmark_syntax_extension *) extensions->data)->html_filter_func)
renderer.filter_extensions = cmark_llist_append(
mem,
renderer.filter_extensions,
(cmark_syntax_extension *) extensions->data);
while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
cur = cmark_iter_get_node(iter);
S_render_node(&renderer, cur, ev_type, options);
}
if (renderer.footnote_ix) {
cmark_strbuf_puts(&html, "
\n \n");
}
result = (char *)cmark_strbuf_detach(&html);
cmark_llist_free(mem, renderer.filter_extensions);
cmark_iter_free(iter);
return result;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/html.h 0000644 0001751 0000177 00000001322 14717450313 020634 0 ustar 00runner docker #ifndef CMARK_HTML_H
#define CMARK_HTML_H
#include "buffer.h"
#include "node.h"
CMARK_INLINE
static void cmark_html_render_cr(cmark_strbuf *html) {
if (html->size && html->ptr[html->size - 1] != '\n')
cmark_strbuf_putc(html, '\n');
}
#define BUFFER_SIZE 100
CMARK_INLINE
static void cmark_html_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options) {
char buffer[BUFFER_SIZE];
if (CMARK_OPT_SOURCEPOS & options) {
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);
}
}
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/inlines.c 0000644 0001751 0000177 00000156024 14717450313 021336 0 ustar 00runner docker #include
#include
#include
#include "cmark_ctype.h"
#include "config.h"
#include "node.h"
#include "parser.h"
#include "references.h"
#include "cmark-gfm.h"
#include "houdini.h"
#include "utf8.h"
#include "scanners.h"
#include "inlines.h"
#include "syntax_extension.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(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)
#define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG)
#define MAXBACKTICKS 80
typedef struct bracket {
struct bracket *previous;
cmark_node *inl_text;
bufsize_t position;
bool image;
bool active;
bool bracket_after;
bool in_bracket_image0;
bool in_bracket_image1;
} bracket;
#define FLAG_SKIP_HTML_CDATA (1u << 0)
#define FLAG_SKIP_HTML_DECLARATION (1u << 1)
#define FLAG_SKIP_HTML_PI (1u << 2)
#define FLAG_SKIP_HTML_COMMENT (1u << 3)
typedef struct subject{
cmark_mem *mem;
cmark_chunk input;
unsigned flags;
int line;
bufsize_t pos;
int block_offset;
int column_offset;
cmark_map *refmap;
delimiter *last_delim;
bracket *last_bracket;
bufsize_t backticks[MAXBACKTICKS + 1];
bool scanned_for_backticks;
bool no_link_openers;
} subject;
// Extensions may populate this.
static int8_t SKIP_CHARS[256];
static CMARK_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 int parse_inline(cmark_parser *parser, subject *subj, cmark_node *parent, int options);
static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e,
cmark_chunk *buffer, cmark_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(subject *subj, cmark_node_type t,
int start_column, int end_column,
cmark_chunk s) {
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;
}
// Create an inline with no value.
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 = (uint16_t)t;
return e;
}
// Like make_str, but parses entities.
static cmark_node *make_str_with_entities(subject *subj,
int start_column, int end_column,
cmark_chunk *content) {
cmark_strbuf unescaped = CMARK_BUF_INIT(subj->mem);
if (houdini_unescape_html(&unescaped, content->data, content->len)) {
return make_str(subj, start_column, end_column, cmark_chunk_buf_detach(&unescaped));
} else {
return make_str(subj, start_column, end_column, *content);
}
}
// Like cmark_node_append_child but without costly sanity checks.
// Assumes that child was newly created.
static void append_child(cmark_node *node, cmark_node *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;
}
}
// 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_mem *mem, cmark_chunk *src) {
cmark_chunk c;
bufsize_t len = src->len;
c.len = len;
c.data = (unsigned char *)mem->calloc(len + 1, 1);
c.alloc = 1;
if (len)
memcpy(c.data, src->data, len);
c.data[len] = '\0';
return c;
}
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);
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 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("");
link->start_line = link->end_line = subj->line;
link->start_column = start_column + 1;
link->end_column = end_column + 1;
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, int line_number, int block_offset, subject *e,
cmark_chunk *chunk, cmark_map *refmap) {
int i;
e->mem = mem;
e->input = *chunk;
e->flags = 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;
for (i = 0; i <= MAXBACKTICKS; i++) {
e->backticks[i] = 0;
}
e->scanned_for_backticks = false;
e->no_link_openers = true;
}
static CMARK_INLINE int isbacktick(int c) { return (c == '`'); }
static CMARK_INLINE unsigned char peek_char_n(subject *subj, bufsize_t n) {
// NULL bytes should have been stripped out by now. If they're
// present, it's a programming error:
assert(!(subj->pos + n < subj->input.len && subj->input.data[subj->pos + n] == 0));
return (subj->pos + n < subj->input.len) ? subj->input.data[subj->pos + n] : 0;
}
static CMARK_INLINE unsigned char peek_char(subject *subj) {
return peek_char_n(subj, 0);
}
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 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 CMARK_INLINE bool skip_spaces(subject *subj) {
bool skipped = false;
while (peek_char(subj) == ' ' || peek_char(subj) == '\t') {
advance(subj);
skipped = true;
}
return skipped;
}
static CMARK_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 CMARK_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++;
}
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 options) {
if (!(options & CMARK_OPT_SOURCEPOS)) {
return;
}
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
// backticks, otherwise return the position in the subject
// after the closing backticks.
static bufsize_t scan_to_closing_backticks(subject *subj,
bufsize_t openticklength) {
bool found = false;
if (openticklength > MAXBACKTICKS) {
// we limit backtick string length because of the array subj->backticks:
return 0;
}
if (subj->scanned_for_backticks &&
subj->backticks[openticklength] <= subj->pos) {
// return if we already know there's no closer
return 0;
}
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);
}
}
// got through whole input without finding closer
subj->scanned_for_backticks = true;
return 0;
}
// Destructively modify string, converting newlines to
// 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]) {
case '\r':
if (s->ptr[r + 1] != '\n') {
s->ptr[w++] = ' ';
}
break;
case '\n':
s->ptr[w++] = ' ';
break;
default:
s->ptr[w++] = s->ptr[r];
}
if (s->ptr[r] != ' ') {
contains_nonspace = true;
}
}
// begins and ends with space?
if (contains_nonspace &&
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) {
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(subj, subj->pos, subj->pos, openticks);
} else {
cmark_strbuf buf = CMARK_BUF_INIT(subj->mem);
cmark_strbuf_set(&buf, subj->input.data + startpos,
endpos - startpos - openticks.len);
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);
return node;
}
}
// 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, after_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 || SKIP_CHARS[peek_at(subj, before_char_pos)]) && before_char_pos > 0) {
before_char_pos -= 1;
}
len = cmark_utf8proc_iterate(subj->input.data + before_char_pos,
subj->pos - before_char_pos, &before_char);
if (len == -1 || (before_char < 256 && SKIP_CHARS[(unsigned char) before_char])) {
before_char = 10;
}
}
if (c == '\'' || c == '"') {
numdelims++;
advance(subj); // limit to 1 delim for quotes
} else {
while (peek_char(subj) == c) {
numdelims++;
advance(subj);
}
}
if (subj->pos == subj->input.len) {
after_char = 10;
} else {
after_char_pos = subj->pos;
while (SKIP_CHARS[peek_at(subj, after_char_pos)] && after_char_pos < subj->input.len) {
after_char_pos += 1;
}
len = cmark_utf8proc_iterate(subj->input.data + after_char_pos,
subj->input.len - after_char_pos, &after_char);
if (len == -1 || (after_char < 256 && SKIP_CHARS[(unsigned char) after_char])) {
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));
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));
*can_close = right_flanking &&
(!left_flanking || cmark_utf8proc_is_punctuation(after_char));
} else if (c == '\'' || c == '"') {
*can_open = left_flanking && !right_flanking &&
before_char != ']' && before_char != ')';
*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: %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;
}
}
*/
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;
}
subj->mem->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;
subj->mem->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));
delim->delim_char = c;
delim->can_open = can_open;
delim->can_close = can_close;
delim->inl_text = inl_text;
delim->position = subj->pos;
delim->length = inl_text->as.literal.len;
delim->previous = subj->last_delim;
delim->next = NULL;
if (delim->previous != NULL) {
delim->previous->next = delim;
}
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->in_bracket_image0 = subj->last_bracket->in_bracket_image0;
b->in_bracket_image1 = subj->last_bracket->in_bracket_image1;
}
b->image = image;
b->active = true;
b->inl_text = inl_text;
b->previous = subj->last_bracket;
b->position = subj->pos;
b->bracket_after = false;
if (image) {
b->in_bracket_image1 = true;
} else {
b->in_bracket_image0 = true;
}
subj->last_bracket = b;
if (!image) {
subj->no_link_openers = false;
}
}
// 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(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);
}
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(subj, subj->pos - 1, subj->pos - 1, 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 = CMARK_BUF_INIT(subj->mem);
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(subj, startpos, subj->pos - 1, 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(subj, subj->pos - 3, subj->pos - 1, cmark_chunk_literal(ELLIPSES));
} else {
return make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_literal(".."));
}
} else {
return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("."));
}
}
static cmark_syntax_extension *get_extension_for_special_char(cmark_parser *parser, unsigned char c) {
cmark_llist *tmp_ext;
for (tmp_ext = parser->inline_syntax_extensions; tmp_ext; tmp_ext=tmp_ext->next) {
cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp_ext->data;
cmark_llist *tmp_char;
for (tmp_char = ext->special_inline_chars; tmp_char; tmp_char=tmp_char->next) {
unsigned char tmp_c = (unsigned char)(size_t)tmp_char->data;
if (tmp_c == c) {
return ext;
}
}
}
return NULL;
}
static void process_emphasis(cmark_parser *parser, subject *subj, bufsize_t stack_bottom) {
delimiter *candidate;
delimiter *closer = NULL;
delimiter *opener;
delimiter *old_closer;
bool opener_found;
bufsize_t openers_bottom[3][128];
int i;
// initialize openers_bottom:
memset(&openers_bottom, 0, sizeof(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;
}
// move back to first relevant delim.
candidate = subj->last_delim;
while (candidate != NULL && candidate->position >= stack_bottom) {
closer = candidate;
candidate = candidate->previous;
}
// now move forward, looking for closers, and handling each
while (closer != NULL) {
cmark_syntax_extension *extension = get_extension_for_special_char(parser, closer->delim_char);
if (closer->can_close) {
// Now look backwards for first matching opener:
opener = closer->previous;
opener_found = false;
while (opener != NULL && opener->position >= stack_bottom &&
opener->position >= 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
if (!(closer->can_open || opener->can_close) ||
closer->length % 3 == 0 ||
(opener->length + closer->length) % 3 != 0) {
opener_found = true;
break;
}
}
opener = opener->previous;
}
old_closer = closer;
if (extension) {
if (opener_found)
closer = extension->insert_inline_from_delim(extension, parser, subj, opener, closer);
else
closer = closer->next;
} else 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 == '\'' || closer->delim_char == '"') {
cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
if (closer->delim_char == '\'') {
closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE);
} else {
closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE);
}
closer = closer->next;
if (opener_found) {
cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
if (old_closer->delim_char == '\'') {
opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE);
} else {
opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE);
}
remove_delimiter(subj, opener);
remove_delimiter(subj, old_closer);
}
}
if (!opener_found) {
// set lower bound for future searches for openers
openers_bottom[old_closer->length % 3][old_closer->delim_char] =
old_closer->position;
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 != NULL &&
subj->last_delim->position >= 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, *tmpnext, *emph;
// calculate the actual number of characters used from this closer
use_delims = (closer_num_chars >= 2 && opener_num_chars >= 2) ? 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;
}
// create new emph or strong, and splice it in to our inlines
// between the opener and closer
emph = use_delims == 1 ? make_emph(subj->mem) : make_strong(subj->mem);
tmp = opener_inl->next;
while (tmp && tmp != closer_inl) {
tmpnext = tmp->next;
cmark_node_unlink(tmp);
append_child(emph, tmp);
tmp = tmpnext;
}
cmark_node_insert_after(opener_inl, emph);
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) {
cmark_node_free(opener_inl);
remove_delimiter(subj, opener);
}
// 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(cmark_parser *parser, subject *subj) {
advance(subj);
unsigned char nextchar = peek_char(subj);
if ((parser->backslash_ispunct ? parser->backslash_ispunct : cmark_ispunct)(nextchar)) {
// only ascii symbols and newline can be escaped
advance(subj);
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, subj->pos - 1, subj->pos - 1, 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 = CMARK_BUF_INIT(subj->mem);
bufsize_t len;
advance(subj);
len = houdini_unescape_ent(&ent, subj->input.data + subj->pos,
subj->input.len - subj->pos);
if (len == 0)
return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("&"));
subj->pos += len;
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
// punctuation.
cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) {
cmark_strbuf buf = CMARK_BUF_INIT(mem);
cmark_chunk_trim(url);
if (url->len == 0) {
cmark_chunk result = CMARK_CHUNK_EMPTY;
return result;
}
houdini_unescape_html_f(&buf, url->data, url->len);
cmark_strbuf_unescape(&buf);
return cmark_chunk_buf_detach(&buf);
}
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) {
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, int options) {
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(subj, subj->pos - 1 - matchlen, subj->pos - 1, 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(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents, 1);
}
// finally, try to match an html tag
if (subj->pos + 2 <= subj->input.len) {
int c = subj->input.data[subj->pos];
if (c == '!' && (subj->flags & FLAG_SKIP_HTML_COMMENT) == 0) {
c = subj->input.data[subj->pos+1];
if (c == '-' && subj->input.data[subj->pos+2] == '-') {
if (subj->input.data[subj->pos+3] == '>') {
matchlen = 4;
} else if (subj->input.data[subj->pos+3] == '-' &&
subj->input.data[subj->pos+4] == '>') {
matchlen = 5;
} else {
matchlen = scan_html_comment(&subj->input, subj->pos + 1);
if (matchlen > 0) {
matchlen += 1; // prefix "<"
} else { // no match through end of input: set a flag so
// we don't reparse looking for -->:
subj->flags |= FLAG_SKIP_HTML_COMMENT;
}
}
} else if (c == '[') {
if ((subj->flags & FLAG_SKIP_HTML_CDATA) == 0) {
matchlen = scan_html_cdata(&subj->input, subj->pos + 2);
if (matchlen > 0) {
// The regex doesn't require the final "]]>". But if we're not at
// the end of input, it must come after the match. Otherwise,
// disable subsequent scans to avoid quadratic behavior.
matchlen += 5; // prefix "![", suffix "]]>"
if (subj->pos + matchlen > subj->input.len) {
subj->flags |= FLAG_SKIP_HTML_CDATA;
matchlen = 0;
}
}
}
} else if ((subj->flags & FLAG_SKIP_HTML_DECLARATION) == 0) {
matchlen = scan_html_declaration(&subj->input, subj->pos + 1);
if (matchlen > 0) {
matchlen += 2; // prefix "!", suffix ">"
if (subj->pos + matchlen > subj->input.len) {
subj->flags |= FLAG_SKIP_HTML_DECLARATION;
matchlen = 0;
}
}
}
} else if (c == '?') {
if ((subj->flags & FLAG_SKIP_HTML_PI) == 0) {
// Note that we allow an empty match.
matchlen = scan_html_pi(&subj->input, subj->pos + 1);
matchlen += 3; // prefix "?", suffix "?>"
if (subj->pos + matchlen > subj->input.len) {
subj->flags |= FLAG_SKIP_HTML_PI;
matchlen = 0;
}
}
} else {
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;
cmark_node *node = make_raw_html(subj, subj->pos - matchlen - 1, subj->pos - 1, contents);
adjust_subj_node_newlines(subj, node, matchlen, 1, options);
return node;
}
if (options & CMARK_OPT_LIBERAL_HTML_TAG) {
matchlen = scan_liberal_html_tag(&subj->input, subj->pos);
if (matchlen > 0) {
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, options);
return node;
}
}
// if nothing matches, just return the opening <:
return make_str(subj, subj->pos - 1, subj->pos - 1, 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;
}
noMatch:
subj->pos = startpos; // rewind
return 0;
}
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;
if (nb_p > 32)
return -1;
} else if (input->data[i] == ')') {
if (nb_p == 0)
break;
--nb_p;
++i;
} else if (cmark_isspace(input->data[i])) {
if (i == offset) {
return -1;
}
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) {
if (input->data[i] == '>') {
++i;
break;
} else if (input->data[i] == '\\')
i += 2;
else if (input->data[i] == '\n' || input->data[i] == '<')
return -1;
else
++i;
}
} else {
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(cmark_parser *parser, subject *subj) {
bufsize_t initial_pos, after_link_text_pos;
bufsize_t endurl, starttitle, endtitle, endall;
bufsize_t sps, n;
cmark_reference *ref = NULL;
cmark_chunk url_chunk, title_chunk;
cmark_chunk url, title;
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;
// get last [ or ![
opener = subj->last_bracket;
if (opener == NULL) {
return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]"));
}
// If we got here, we matched a potential link/image text.
// Now we check to see if it's a link/image.
is_image = opener->image;
if (!is_image && subj->no_link_openers) {
// take delimiter off stack
pop_bracket(subj);
return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]"));
}
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) &&
((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;
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;
title_chunk =
cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle);
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 {
// it could still be a shortcut reference link
subj->pos = after_link_text_pos;
}
}
// Next, look for a following [link label] that matches in refmap.
// skip spaces
raw_label = cmark_chunk_literal("");
found_label = link_label(subj, &raw_label);
if (!found_label) {
// If we have a shortcut reference link, back up
// to before the spacse we skipped.
subj->pos = initial_pos;
}
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 *)cmark_map_lookup(subj->refmap, &raw_label);
cmark_chunk_free(subj->mem, &raw_label);
}
if (ref != NULL) { // found
url = chunk_clone(subj->mem, &ref->url);
title = chunk_clone(subj->mem, &ref->title);
goto match;
} else {
goto noMatch;
}
noMatch:
// If we fall through to here, it means we didn't match a link.
// What if we're a footnote link?
if (parser->options & CMARK_OPT_FOOTNOTES &&
opener->inl_text->next &&
opener->inl_text->next->type == CMARK_NODE_TEXT) {
cmark_chunk *literal = &opener->inl_text->next->as.literal;
// look back to the opening '[', and skip ahead to the next character
// if we're looking at a '[^' sequence, and there is other text or nodes
// after the ^, let's call it a footnote reference.
if ((literal->len > 0 && literal->data[0] == '^') && (literal->len > 1 || opener->inl_text->next->next)) {
// Before we got this far, the `handle_close_bracket` function may have
// advanced the current state beyond our footnote's actual closing
// bracket, ie if it went looking for a `link_label`.
// Let's just rewind the subject's position:
subj->pos = initial_pos;
cmark_node *fnref = make_simple(subj->mem, CMARK_NODE_FOOTNOTE_REFERENCE);
// the start and end of the footnote ref is the opening and closing brace
// i.e. the subject's current position, and the opener's start_column
int fnref_end_column = subj->pos + subj->column_offset + subj->block_offset;
int fnref_start_column = opener->inl_text->start_column;
// any given node delineates a substring of the line being processed,
// with the remainder of the line being pointed to thru its 'literal'
// struct member.
// here, we copy the literal's pointer, moving it past the '^' character
// for a length equal to the size of footnote reference text.
// i.e. end_col minus start_col, minus the [ and the ^ characters
//
// this copies the footnote reference string, even if between the
// `opener` and the subject's current position there are other nodes
//
// (first, check for underflows)
if ((fnref_start_column + 2) <= fnref_end_column) {
fnref->as.literal = cmark_chunk_dup(literal, 1, (fnref_end_column - fnref_start_column) - 2);
} else {
fnref->as.literal = cmark_chunk_dup(literal, 1, 0);
}
fnref->start_line = fnref->end_line = subj->line;
fnref->start_column = fnref_start_column;
fnref->end_column = fnref_end_column;
// we then replace the opener with this new fnref node, the net effect
// being replacing the opening '[' text node with a `^footnote-ref]` node.
cmark_node_insert_before(opener->inl_text, fnref);
process_emphasis(parser, subj, opener->position);
// sometimes, the footnote reference text gets parsed into multiple nodes
// i.e. '[^example]' parsed into '[', '^exam', 'ple]'.
// this happens for ex with the autolink extension. when the autolinker
// finds the 'w' character, it will split the text into multiple nodes
// in hopes of being able to match a 'www.' substring.
//
// because this function is called one character at a time via the
// `parse_inlines` function, and the current subj->pos is pointing at the
// closing ] brace, and because we copy all the text between the [ ]
// braces, we should be able to safely ignore and delete any nodes after
// the opener->inl_text->next.
//
// therefore, here we walk thru the list and free them all up
cmark_node *next_node;
cmark_node *current_node = opener->inl_text->next;
while(current_node) {
next_node = current_node->next;
cmark_node_free(current_node);
current_node = next_node;
}
cmark_node_free(opener->inl_text);
pop_bracket(subj);
return NULL;
}
}
pop_bracket(subj); // remove this opener from delimiter list
subj->pos = initial_pos;
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;
while (tmp) {
tmpnext = tmp->next;
cmark_node_unlink(tmp);
append_child(inl, tmp);
tmp = tmpnext;
}
// Free the bracket [:
cmark_node_free(opener->inl_text);
process_emphasis(parser, subj, opener->position);
pop_bracket(subj);
// Now, if we have a link, we also want to deactivate links until
// we get a new opener. (This code can be removed if we decide to allow links
// inside links.)
if (!is_image) {
subj->no_link_openers = true;
}
return NULL;
}
// Parse a hard or soft linebreak, returning an inline.
// 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 cr, crlf, or lf:
if (peek_at(subj, subj->pos) == '\r') {
advance(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) == ' ' &&
peek_at(subj, nlpos - 2) == ' ') {
return make_linebreak(subj->mem);
} else {
return make_softbreak(subj->mem);
}
}
// "\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;
}
void cmark_inlines_add_special_character(unsigned char c, bool emphasis) {
SPECIAL_CHARS[c] = 1;
if (emphasis)
SKIP_CHARS[c] = 1;
}
void cmark_inlines_remove_special_character(unsigned char c, bool emphasis) {
SPECIAL_CHARS[c] = 0;
if (emphasis)
SKIP_CHARS[c] = 0;
}
static cmark_node *try_extensions(cmark_parser *parser,
cmark_node *parent,
unsigned char c,
subject *subj) {
cmark_node *res = NULL;
cmark_llist *tmp;
for (tmp = parser->inline_syntax_extensions; tmp; tmp = tmp->next) {
cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp->data;
res = ext->match_inline(ext, parser, parent, c, subj);
if (res)
break;
}
return res;
}
// 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(cmark_parser *parser, subject *subj, cmark_node *parent, int options) {
cmark_node *new_inl = NULL;
cmark_chunk contents;
unsigned char c;
bufsize_t startpos, 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, options);
break;
case '\\':
new_inl = handle_backslash(parser, subj);
break;
case '&':
new_inl = handle_entity(subj);
break;
case '<':
new_inl = handle_pointy_brace(subj, options);
break;
case '*':
case '_':
case '\'':
case '"':
new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0);
break;
case '-':
new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0);
break;
case '.':
new_inl = handle_period(subj, (options & CMARK_OPT_SMART) != 0);
break;
case '[':
advance(subj);
new_inl = make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("["));
push_bracket(subj, false, new_inl);
break;
case ']':
new_inl = handle_close_bracket(parser, subj);
break;
case '!':
advance(subj);
if (peek_char(subj) == '[' && peek_char_n(subj, 1) != '^') {
advance(subj);
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, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("!"));
}
break;
default:
new_inl = try_extensions(parser, parent, c, subj);
if (new_inl != NULL)
break;
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.
if (S_is_line_end_char(peek_char(subj))) {
cmark_chunk_rtrim(&contents);
}
new_inl = make_str(subj, startpos, endpos - 1, contents);
}
if (new_inl != NULL) {
append_child(parent, new_inl);
}
return 1;
}
// Parse inlines from parent's string_content, adding as children of parent.
void cmark_parse_inlines(cmark_parser *parser,
cmark_node *parent,
cmark_map *refmap,
int options) {
subject subj;
cmark_chunk content = {parent->content.ptr, parent->content.size, 0};
subject_from_buf(parser->mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &content, refmap);
cmark_chunk_rtrim(&subj.input);
while (!is_eof(&subj) && parse_inline(parser, &subj, parent, options))
;
process_emphasis(parser, &subj, 0);
// free bracket and delim stack
while (subj.last_delim) {
remove_delimiter(&subj, subj.last_delim);
}
while (subj.last_bracket) {
pop_bracket(&subj);
}
}
// 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);
}
}
// 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_mem *mem, cmark_chunk *input,
cmark_map *refmap) {
subject subj;
cmark_chunk lab;
cmark_chunk url;
cmark_chunk title;
bufsize_t matchlen = 0;
bufsize_t beforetitle;
subject_from_buf(mem, -1, 0, &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);
if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1) {
subj.pos += matchlen;
} else {
return 0;
}
// parse optional link_title
beforetitle = subj.pos;
spnl(&subj);
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;
} 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;
}
unsigned char cmark_inline_parser_peek_char(cmark_inline_parser *parser) {
return peek_char(parser);
}
unsigned char cmark_inline_parser_peek_at(cmark_inline_parser *parser, bufsize_t pos) {
return peek_at(parser, pos);
}
int cmark_inline_parser_is_eof(cmark_inline_parser *parser) {
return is_eof(parser);
}
static char *
my_strndup (const char *s, size_t n)
{
char *result;
size_t len = strlen (s);
if (n < len)
len = n;
result = (char *) malloc (len + 1);
if (!result)
return 0;
result[len] = '\0';
return (char *) memcpy (result, s, len);
}
char *cmark_inline_parser_take_while(cmark_inline_parser *parser, cmark_inline_predicate pred) {
unsigned char c;
bufsize_t startpos = parser->pos;
bufsize_t len = 0;
while ((c = peek_char(parser)) && (*pred)(c)) {
advance(parser);
len++;
}
return my_strndup((const char *) parser->input.data + startpos, len);
}
void cmark_inline_parser_push_delimiter(cmark_inline_parser *parser,
unsigned char c,
int can_open,
int can_close,
cmark_node *inl_text) {
push_delimiter(parser, c, can_open != 0, can_close != 0, inl_text);
}
void cmark_inline_parser_remove_delimiter(cmark_inline_parser *parser, delimiter *delim) {
remove_delimiter(parser, delim);
}
int cmark_inline_parser_scan_delimiters(cmark_inline_parser *parser,
int max_delims,
unsigned char c,
int *left_flanking,
int *right_flanking,
int *punct_before,
int *punct_after) {
int numdelims = 0;
bufsize_t before_char_pos;
int32_t after_char = 0;
int32_t before_char = 0;
int len;
bool space_before, space_after;
if (parser->pos == 0) {
before_char = 10;
} else {
before_char_pos = parser->pos - 1;
// walk back to the beginning of the UTF_8 sequence:
while (peek_at(parser, before_char_pos) >> 6 == 2 && before_char_pos > 0) {
before_char_pos -= 1;
}
len = cmark_utf8proc_iterate(parser->input.data + before_char_pos,
parser->pos - before_char_pos, &before_char);
if (len == -1) {
before_char = 10;
}
}
while (peek_char(parser) == c && numdelims < max_delims) {
numdelims++;
advance(parser);
}
len = cmark_utf8proc_iterate(parser->input.data + parser->pos,
parser->input.len - parser->pos, &after_char);
if (len == -1) {
after_char = 10;
}
*punct_before = cmark_utf8proc_is_punctuation(before_char);
*punct_after = cmark_utf8proc_is_punctuation(after_char);
space_before = cmark_utf8proc_is_space(before_char) != 0;
space_after = cmark_utf8proc_is_space(after_char) != 0;
*left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) &&
!(*punct_after && !space_before && !*punct_before);
*right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) &&
!(*punct_before && !space_after && !*punct_after);
return numdelims;
}
void cmark_inline_parser_advance_offset(cmark_inline_parser *parser) {
advance(parser);
}
int cmark_inline_parser_get_offset(cmark_inline_parser *parser) {
return parser->pos;
}
void cmark_inline_parser_set_offset(cmark_inline_parser *parser, int offset) {
parser->pos = offset;
}
int cmark_inline_parser_get_column(cmark_inline_parser *parser) {
return parser->pos + 1 + parser->column_offset + parser->block_offset;
}
cmark_chunk *cmark_inline_parser_get_chunk(cmark_inline_parser *parser) {
return &parser->input;
}
int cmark_inline_parser_in_bracket(cmark_inline_parser *parser, int image) {
bracket *b = parser->last_bracket;
if (!b) {
return 0;
}
if (image != 0) {
return b->in_bracket_image1;
} else {
return b->in_bracket_image0;
}
}
void cmark_node_unput(cmark_node *node, int n) {
node = node->last_child;
while (n > 0 && node && node->type == CMARK_NODE_TEXT) {
if (node->as.literal.len < n) {
n -= node->as.literal.len;
node->as.literal.len = 0;
} else {
node->as.literal.len -= n;
n = 0;
}
node = node->prev;
}
}
delimiter *cmark_inline_parser_get_last_delimiter(cmark_inline_parser *parser) {
return parser->last_delim;
}
int cmark_inline_parser_get_line(cmark_inline_parser *parser) {
return parser->line;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/inlines.h 0000644 0001751 0000177 00000001371 14717450313 021335 0 ustar 00runner docker #ifndef CMARK_INLINES_H
#define CMARK_INLINES_H
#ifdef __cplusplus
extern "C" {
#endif
#include "references.h"
cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url);
cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title);
CMARK_GFM_EXPORT
void cmark_parse_inlines(cmark_parser *parser,
cmark_node *parent,
cmark_map *refmap,
int options);
bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input,
cmark_map *refmap);
void cmark_inlines_add_special_character(unsigned char c, bool emphasis);
void cmark_inlines_remove_special_character(unsigned char c, bool emphasis);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/iterator.c 0000644 0001751 0000177 00000010547 14717450313 021525 0 ustar 00runner docker #include
#include
#include "config.h"
#include "node.h"
#include "cmark-gfm.h"
#include "iterator.h"
cmark_iter *cmark_iter_new(cmark_node *root) {
if (root == NULL) {
return NULL;
}
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;
iter->next.ev_type = CMARK_EVENT_ENTER;
iter->next.node = root;
return iter;
}
void cmark_iter_free(cmark_iter *iter) { iter->mem->free(iter); }
static bool S_is_leaf(cmark_node *node) {
switch (node->type) {
case CMARK_NODE_HTML_BLOCK:
case CMARK_NODE_THEMATIC_BREAK:
case CMARK_NODE_CODE_BLOCK:
case CMARK_NODE_TEXT:
case CMARK_NODE_SOFTBREAK:
case CMARK_NODE_LINEBREAK:
case CMARK_NODE_CODE:
case CMARK_NODE_HTML_INLINE:
return 1;
}
return 0;
}
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);
}
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_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 = CMARK_BUF_INIT(iter->mem);
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);
cur->end_column = tmp->end_column;
next = tmp->next;
cmark_node_free(tmp);
tmp = next;
}
cmark_chunk_free(iter->mem, &cur->as.literal);
cur->as.literal = cmark_chunk_buf_detach(&buf);
}
}
cmark_strbuf_free(&buf);
cmark_iter_free(iter);
}
void cmark_node_own(cmark_node *root) {
if (root == NULL) {
return;
}
cmark_iter *iter = cmark_iter_new(root);
cmark_event_type ev_type;
cmark_node *cur;
while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
cur = cmark_iter_get_node(iter);
if (ev_type == CMARK_EVENT_ENTER) {
switch (cur->type) {
case CMARK_NODE_TEXT:
case CMARK_NODE_HTML_INLINE:
case CMARK_NODE_CODE:
case CMARK_NODE_HTML_BLOCK:
cmark_chunk_to_cstr(iter->mem, &cur->as.literal);
break;
case CMARK_NODE_LINK:
cmark_chunk_to_cstr(iter->mem, &cur->as.link.url);
cmark_chunk_to_cstr(iter->mem, &cur->as.link.title);
break;
case CMARK_NODE_CUSTOM_INLINE:
cmark_chunk_to_cstr(iter->mem, &cur->as.custom.on_enter);
cmark_chunk_to_cstr(iter->mem, &cur->as.custom.on_exit);
break;
}
}
}
cmark_iter_free(iter);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/iterator.h 0000644 0001751 0000177 00000000534 14717450313 021525 0 ustar 00runner docker #ifndef CMARK_ITERATOR_H
#define CMARK_ITERATOR_H
#ifdef __cplusplus
extern "C" {
#endif
#include "cmark-gfm.h"
typedef struct {
cmark_event_type ev_type;
cmark_node *node;
} cmark_iter_state;
struct cmark_iter {
cmark_mem *mem;
cmark_node *root;
cmark_iter_state cur;
cmark_iter_state next;
};
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/latex.c 0000644 0001751 0000177 00000025476 14717450313 021020 0 ustar 00runner docker #include
#include
#include
#include
#include "config.h"
#include "cmark-gfm.h"
#include "node.h"
#include "buffer.h"
#include "utf8.h"
#include "scanners.h"
#include "render.h"
#include "syntax_extension.h"
#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
#define LIT(s) renderer->out(renderer, node, 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_node *node,
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,
INTERNAL_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);
if (url && *url == '#') {
return INTERNAL_LINK;
}
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 = strlen(title);
// if it has a title, we can't treat it as an autolink:
if (title_len == 0) {
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) {
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;
}
}
}
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_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;
bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options);
if (node->extension && node->extension->latex_render_func) {
node->extension->latex_render_func(node->extension, renderer, node, ev_type, options);
return 1;
}
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) {
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 {
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_HEADING:
if (entering) {
switch (cmark_node_get_heading_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_BLOCK:
break;
case CMARK_NODE_CUSTOM_BLOCK:
CR();
OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
false, LITERAL);
CR();
break;
case CMARK_NODE_THEMATIC_BREAK:
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), allow_wrap, NORMAL);
break;
case CMARK_NODE_LINEBREAK:
LIT("\\\\");
CR();
break;
case CMARK_NODE_SOFTBREAK:
if (options & CMARK_OPT_HARDBREAKS) {
LIT("\\\\");
CR();
} else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) {
CR();
} else {
OUT(" ", allow_wrap, NORMAL);
}
break;
case CMARK_NODE_CODE:
LIT("\\texttt{");
OUT(cmark_node_get_literal(node), false, NORMAL);
LIT("}");
break;
case CMARK_NODE_HTML_INLINE:
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 (node->parent == NULL || node->parent->type != 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);
LIT("}");
return 0; // Don't process further nodes to avoid double-rendering artefacts
case EMAIL_AUTOLINK:
LIT("\\href{");
OUT(url, false, URL);
LIT("}\\nolinkurl{");
break;
case NORMAL_LINK:
LIT("\\href{");
OUT(url, false, URL);
LIT("}{");
break;
case INTERNAL_LINK:
LIT("\\protect\\hyperlink{");
OUT(url + 1, 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;
case CMARK_NODE_FOOTNOTE_DEFINITION:
case CMARK_NODE_FOOTNOTE_REFERENCE:
// TODO
break;
default:
assert(false);
break;
}
return 1;
}
char *cmark_render_latex(cmark_node *root, int options, int width) {
return cmark_render_latex_with_mem(root, options, width, cmark_node_mem(root));
}
char *cmark_render_latex_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
return cmark_render(mem, root, options, width, outc, S_render_node);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/linked_list.c 0000644 0001751 0000177 00000001401 14717450313 022162 0 ustar 00runner docker #include
#include "cmark-gfm.h"
cmark_llist *cmark_llist_append(cmark_mem *mem, cmark_llist *head, void *data) {
cmark_llist *tmp;
cmark_llist *new_node = (cmark_llist *) mem->calloc(1, sizeof(cmark_llist));
new_node->data = data;
new_node->next = NULL;
if (!head)
return new_node;
for (tmp = head; tmp->next; tmp=tmp->next);
tmp->next = new_node;
return head;
}
void cmark_llist_free_full(cmark_mem *mem, cmark_llist *head, cmark_free_func free_func) {
cmark_llist *tmp, *prev;
for (tmp = head; tmp;) {
if (free_func)
free_func(mem, tmp->data);
prev = tmp;
tmp = tmp->next;
mem->free(prev);
}
}
void cmark_llist_free(cmark_mem *mem, cmark_llist *head) {
cmark_llist_free_full(mem, head, NULL);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/main.c 0000644 0001751 0000177 00000023176 14717450313 020622 0 ustar 00runner docker #include
#include
#include
#include
#include "config.h"
#include "cmark-gfm.h"
#include "node.h"
#include "cmark-gfm-extension_api.h"
#include "syntax_extension.h"
#include "parser.h"
#include "registry.h"
#include "../extensions/cmark-gfm-core-extensions.h"
#if defined(__OpenBSD__)
# include
# if OpenBSD >= 201605
# define USE_PLEDGE
# include
# endif
#endif
#if defined(__OpenBSD__)
# include
# if OpenBSD >= 201605
# define USE_PLEDGE
# include
# endif
#endif
#if defined(_WIN32) && !defined(__CYGWIN__)
#include
#include
#endif
typedef enum {
FORMAT_NONE,
FORMAT_HTML,
FORMAT_XML,
FORMAT_MAN,
FORMAT_COMMONMARK,
FORMAT_PLAINTEXT,
FORMAT_LATEX
} writer_format;
void print_usage() {
printf("Usage: cmark-gfm [FILE*]\n");
printf("Options:\n");
printf(" --to, -t FORMAT Specify output format (html, xml, man, "
"commonmark, plaintext, 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(" --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(" --github-pre-lang Use GitHub-style for code blocks\n");
printf(" --extension, -e EXTENSION_NAME Specify an extension name to use\n");
printf(" --list-extensions List available extensions and quit\n");
printf(" --strikethrough-double-tilde Only parse strikethrough (if enabled)\n");
printf(" with two tildes\n");
printf(" --table-prefer-style-attributes Use style attributes to align table cells\n"
" instead of align attributes.\n");
printf(" --full-info-string Include remainder of code block info\n"
" string in a separate attribute.\n");
printf(" --help, -h Print usage information\n");
printf(" --version Print version\n");
}
static bool print_document(cmark_node *document, writer_format writer,
int options, int width, cmark_parser *parser) {
char *result;
cmark_mem *mem = cmark_get_default_mem_allocator();
switch (writer) {
case FORMAT_HTML:
result = cmark_render_html_with_mem(document, options, parser->syntax_extensions, mem);
break;
case FORMAT_XML:
result = cmark_render_xml_with_mem(document, options, mem);
break;
case FORMAT_MAN:
result = cmark_render_man_with_mem(document, options, width, mem);
break;
case FORMAT_COMMONMARK:
result = cmark_render_commonmark_with_mem(document, options, width, mem);
break;
case FORMAT_PLAINTEXT:
result = cmark_render_plaintext_with_mem(document, options, width, mem);
break;
case FORMAT_LATEX:
result = cmark_render_latex_with_mem(document, options, width, mem);
break;
default:
fprintf(stderr, "Unknown format %d\n", writer);
return false;
}
printf("%s", result);
mem->free(result);
return true;
}
static void print_extensions(void) {
cmark_llist *syntax_extensions;
cmark_llist *tmp;
printf ("Available extensions:\nfootnotes\n");
cmark_mem *mem = cmark_get_default_mem_allocator();
syntax_extensions = cmark_list_syntax_extensions(mem);
for (tmp = syntax_extensions; tmp; tmp=tmp->next) {
cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp->data;
printf("%s\n", ext->name);
}
cmark_llist_free(mem, syntax_extensions);
}
int main(int argc, char *argv[]) {
int i, numfps = 0;
int *files;
char buffer[4096];
cmark_parser *parser = NULL;
size_t bytes;
cmark_node *document = NULL;
int width = 0;
char *unparsed;
writer_format writer = FORMAT_HTML;
int options = CMARK_OPT_DEFAULT;
int res = 1;
#ifdef USE_PLEDGE
if (pledge("stdio rpath", NULL) != 0) {
perror("pledge");
return 1;
}
#endif
cmark_gfm_core_extensions_ensure_registered();
#ifdef USE_PLEDGE
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);
#endif
files = (int *)calloc(argc, sizeof(*files));
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "--version") == 0) {
printf("cmark-gfm %s", CMARK_GFM_VERSION_STRING);
printf(" - CommonMark with GitHub Flavored Markdown converter\n(C) 2014-2016 John MacFarlane\n");
goto success;
} else if (strcmp(argv[i], "--list-extensions") == 0) {
print_extensions();
goto success;
} else if (strcmp(argv[i], "--full-info-string") == 0) {
options |= CMARK_OPT_FULL_INFO_STRING;
} else if (strcmp(argv[i], "--table-prefer-style-attributes") == 0) {
options |= CMARK_OPT_TABLE_PREFER_STYLE_ATTRIBUTES;
} else if (strcmp(argv[i], "--strikethrough-double-tilde") == 0) {
options |= CMARK_OPT_STRIKETHROUGH_DOUBLE_TILDE;
} 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], "--nobreaks") == 0) {
options |= CMARK_OPT_NOBREAKS;
} else if (strcmp(argv[i], "--smart") == 0) {
options |= CMARK_OPT_SMART;
} else if (strcmp(argv[i], "--github-pre-lang") == 0) {
options |= CMARK_OPT_GITHUB_PRE_LANG;
} 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], "--liberal-html-tag") == 0) {
options |= CMARK_OPT_LIBERAL_HTML_TAG;
} else if ((strcmp(argv[i], "--help") == 0) ||
(strcmp(argv[i], "-h") == 0)) {
print_usage();
goto success;
} 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);
goto failure;
}
} else {
fprintf(stderr, "--width requires an argument\n");
goto failure;
}
} 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], "plaintext") == 0) {
writer = FORMAT_PLAINTEXT;
} else if (strcmp(argv[i], "latex") == 0) {
writer = FORMAT_LATEX;
} else {
fprintf(stderr, "Unknown format %s\n", argv[i]);
goto failure;
}
} else {
fprintf(stderr, "No argument provided for %s\n", argv[i - 1]);
goto failure;
}
} else if ((strcmp(argv[i], "-e") == 0) || (strcmp(argv[i], "--extension") == 0)) {
i += 1; // Simpler to handle extensions in a second pass, as we can directly register
// them with the parser.
if (i < argc && strcmp(argv[i], "footnotes") == 0) {
options |= CMARK_OPT_FOOTNOTES;
}
} else if (*argv[i] == '-') {
print_usage();
goto failure;
} else { // treat as file argument
files[numfps++] = i;
}
}
#if DEBUG
parser = cmark_parser_new(options);
#else
parser = cmark_parser_new_with_mem(options, cmark_get_arena_mem_allocator());
#endif
for (i = 1; i < argc; i++) {
if ((strcmp(argv[i], "-e") == 0) || (strcmp(argv[i], "--extension") == 0)) {
i += 1;
if (i < argc) {
if (strcmp(argv[i], "footnotes") == 0) {
continue;
}
cmark_syntax_extension *syntax_extension = cmark_find_syntax_extension(argv[i]);
if (!syntax_extension) {
fprintf(stderr, "Unknown extension %s\n", argv[i]);
goto failure;
}
cmark_parser_attach_syntax_extension(parser, syntax_extension);
} else {
fprintf(stderr, "No argument provided for %s\n", argv[i - 1]);
goto failure;
}
}
}
for (i = 0; i < numfps; i++) {
FILE *fp = fopen(argv[files[i]], "rb");
if (fp == NULL) {
fprintf(stderr, "Error opening file %s: %s\n", argv[files[i]],
strerror(errno));
goto failure;
}
while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
cmark_parser_feed(parser, buffer, bytes);
if (bytes < sizeof(buffer)) {
break;
}
}
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;
}
}
}
#ifdef USE_PLEDGE
if (pledge("stdio", NULL) != 0) {
perror("pledge");
return 1;
}
#endif
document = cmark_parser_finish(parser);
if (!document || !print_document(document, writer, options, width, parser))
goto failure;
success:
res = 0;
failure:
#if DEBUG
if (parser)
cmark_parser_free(parser);
if (document)
cmark_node_free(document);
#else
cmark_arena_reset();
#endif
cmark_release_plugins();
free(files);
return res;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/man.c 0000644 0001751 0000177 00000014036 14717450313 020444 0 ustar 00runner docker #include
#include
#include
#include
#include "config.h"
#include "cmark-gfm.h"
#include "node.h"
#include "buffer.h"
#include "utf8.h"
#include "render.h"
#include "syntax_extension.h"
#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
#define LIT(s) renderer->out(renderer, node, 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_node *node,
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) {
int list_number;
bool entering = (ev_type == CMARK_EVENT_ENTER);
bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options);
if (node->extension && node->extension->man_render_func) {
node->extension->man_render_func(node->extension, renderer, node, ev_type, options);
return 1;
}
switch (node->type) {
case CMARK_NODE_DOCUMENT:
if (entering) {
/* Define a strikethrough macro */
/* Commenting out because this makes tests fail
LIT(".de ST");
CR();
LIT(".nr ww \\w'\\\\$1'");
CR();
LIT("\\Z@\\v'-.25m'\\l'\\\\n[ww]u'@\\\\$1");
CR();
LIT("..");
CR();
*/
}
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_item_index(node);
char list_number_s[LIST_NUMBER_SIZE];
snprintf(list_number_s, LIST_NUMBER_SIZE, "\"%d.\" 4", list_number);
LIT(list_number_s);
}
CR();
} else {
CR();
}
break;
case CMARK_NODE_HEADING:
if (entering) {
CR();
LIT(cmark_node_get_heading_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_BLOCK:
break;
case CMARK_NODE_CUSTOM_BLOCK:
CR();
OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
false, LITERAL);
CR();
break;
case CMARK_NODE_THEMATIC_BREAK:
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), allow_wrap, NORMAL);
break;
case CMARK_NODE_LINEBREAK:
LIT(".PD 0\n.P\n.PD");
CR();
break;
case CMARK_NODE_SOFTBREAK:
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(" ", allow_wrap, LITERAL);
}
break;
case CMARK_NODE_CODE:
LIT("\\f[C]");
OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
LIT("\\f[]");
break;
case CMARK_NODE_HTML_INLINE:
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 (node->parent == NULL || node->parent->type != 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), allow_wrap, URL);
LIT(")");
}
break;
case CMARK_NODE_IMAGE:
if (entering) {
LIT("[IMAGE: ");
} else {
LIT("]");
}
break;
case CMARK_NODE_FOOTNOTE_DEFINITION:
case CMARK_NODE_FOOTNOTE_REFERENCE:
// TODO
break;
default:
assert(false);
break;
}
return 1;
}
char *cmark_render_man(cmark_node *root, int options, int width) {
return cmark_render_man_with_mem(root, options, width, cmark_node_mem(root));
}
char *cmark_render_man_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
return cmark_render(mem, root, options, width, S_outc, S_render_node);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/map.c 0000644 0001751 0000177 00000006005 14717450313 020443 0 ustar 00runner docker #include "map.h"
#include "utf8.h"
#include "parser.h"
// normalize map label: collapse internal whitespace to single space,
// remove leading/trailing whitespace, case fold
// Return NULL if the label is actually empty (i.e. composed solely from
// whitespace)
unsigned char *normalize_map_label(cmark_mem *mem, cmark_chunk *ref) {
cmark_strbuf normalized = CMARK_BUF_INIT(mem);
unsigned char *result;
if (ref == NULL)
return NULL;
if (ref->len == 0)
return NULL;
cmark_utf8proc_case_fold(&normalized, ref->data, ref->len);
cmark_strbuf_trim(&normalized);
cmark_strbuf_normalize_whitespace(&normalized);
result = cmark_strbuf_detach(&normalized);
assert(result);
if (result[0] == '\0') {
mem->free(result);
return NULL;
}
return result;
}
static int
labelcmp(const unsigned char *a, const unsigned char *b) {
return strcmp((const char *)a, (const char *)b);
}
static int
refcmp(const void *p1, const void *p2) {
cmark_map_entry *r1 = *(cmark_map_entry **)p1;
cmark_map_entry *r2 = *(cmark_map_entry **)p2;
int res = labelcmp(r1->label, r2->label);
return res ? res : ((int)r1->age - (int)r2->age);
}
static int
refsearch(const void *label, const void *p2) {
cmark_map_entry *ref = *(cmark_map_entry **)p2;
return labelcmp((const unsigned char *)label, ref->label);
}
static void sort_map(cmark_map *map) {
size_t i = 0, last = 0, size = map->size;
cmark_map_entry *r = map->refs, **sorted = NULL;
sorted = (cmark_map_entry **)map->mem->calloc(size, sizeof(cmark_map_entry *));
while (r) {
sorted[i++] = r;
r = r->next;
}
qsort(sorted, size, sizeof(cmark_map_entry *), refcmp);
for (i = 1; i < size; i++) {
if (labelcmp(sorted[i]->label, sorted[last]->label) != 0)
sorted[++last] = sorted[i];
}
map->sorted = sorted;
map->size = last + 1;
}
cmark_map_entry *cmark_map_lookup(cmark_map *map, cmark_chunk *label) {
cmark_map_entry **ref = NULL;
cmark_map_entry *r = NULL;
unsigned char *norm;
if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH)
return NULL;
if (map == NULL || !map->size)
return NULL;
norm = normalize_map_label(map->mem, label);
if (norm == NULL)
return NULL;
if (!map->sorted)
sort_map(map);
ref = (cmark_map_entry **)bsearch(norm, map->sorted, map->size, sizeof(cmark_map_entry *), refsearch);
map->mem->free(norm);
if (ref != NULL) {
r = ref[0];
/* Check for expansion limit */
if (r->size > map->max_ref_size - map->ref_size)
return NULL;
map->ref_size += r->size;
}
return r;
}
void cmark_map_free(cmark_map *map) {
cmark_map_entry *ref;
if (map == NULL)
return;
ref = map->refs;
while (ref) {
cmark_map_entry *next = ref->next;
map->free(map, ref);
ref = next;
}
map->mem->free(map->sorted);
map->mem->free(map);
}
cmark_map *cmark_map_new(cmark_mem *mem, cmark_map_free_f free) {
cmark_map *map = (cmark_map *)mem->calloc(1, sizeof(cmark_map));
map->mem = mem;
map->free = free;
map->max_ref_size = UINT_MAX;
return map;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/map.h 0000644 0001751 0000177 00000001522 14717450313 020447 0 ustar 00runner docker #ifndef CMARK_MAP_H
#define CMARK_MAP_H
#include "chunk.h"
#ifdef __cplusplus
extern "C" {
#endif
struct cmark_map_entry {
struct cmark_map_entry *next;
unsigned char *label;
size_t age;
size_t size;
};
typedef struct cmark_map_entry cmark_map_entry;
struct cmark_map;
typedef void (*cmark_map_free_f)(struct cmark_map *, cmark_map_entry *);
struct cmark_map {
cmark_mem *mem;
cmark_map_entry *refs;
cmark_map_entry **sorted;
size_t size;
size_t ref_size;
size_t max_ref_size;
cmark_map_free_f free;
};
typedef struct cmark_map cmark_map;
unsigned char *normalize_map_label(cmark_mem *mem, cmark_chunk *ref);
cmark_map *cmark_map_new(cmark_mem *mem, cmark_map_free_f free);
void cmark_map_free(cmark_map *map);
cmark_map_entry *cmark_map_lookup(cmark_map *map, cmark_chunk *label);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/node.c 0000644 0001751 0000177 00000053335 14717450313 020623 0 ustar 00runner docker #include
#include
#include "config.h"
#include "node.h"
#include "syntax_extension.h"
/**
* Expensive safety checks are off by default, but can be enabled
* by calling cmark_enable_safety_checks().
*/
static bool enable_safety_checks = false;
void cmark_enable_safety_checks(bool enable) {
enable_safety_checks = enable;
}
static void S_node_unlink(cmark_node *node);
#define NODE_MEM(node) cmark_node_mem(node)
void cmark_register_node_flag(cmark_node_internal_flags *flags) {
static cmark_node_internal_flags nextflag = CMARK_NODE__REGISTER_FIRST;
// flags should be a pointer to a global variable and this function
// should only be called once to initialize its value.
if (*flags) {
fprintf(stderr, "flag initialization error in cmark_register_node_flag\n");
abort();
}
// Check that we haven't run out of bits.
if (nextflag == 0) {
fprintf(stderr, "too many flags in cmark_register_node_flag\n");
abort();
}
*flags = nextflag;
nextflag <<= 1;
}
void cmark_init_standard_node_flags(void) {}
bool cmark_node_can_contain_type(cmark_node *node, cmark_node_type child_type) {
if (child_type == CMARK_NODE_DOCUMENT) {
return false;
}
if (node->extension && node->extension->can_contain_func) {
return node->extension->can_contain_func(node->extension, node, child_type) != 0;
}
switch (node->type) {
case CMARK_NODE_DOCUMENT:
case CMARK_NODE_BLOCK_QUOTE:
case CMARK_NODE_FOOTNOTE_DEFINITION:
case CMARK_NODE_ITEM:
return CMARK_NODE_TYPE_BLOCK_P(child_type) && child_type != CMARK_NODE_ITEM;
case CMARK_NODE_LIST:
return child_type == CMARK_NODE_ITEM;
case CMARK_NODE_CUSTOM_BLOCK:
return true;
case CMARK_NODE_PARAGRAPH:
case CMARK_NODE_HEADING:
case CMARK_NODE_EMPH:
case CMARK_NODE_STRONG:
case CMARK_NODE_LINK:
case CMARK_NODE_IMAGE:
case CMARK_NODE_CUSTOM_INLINE:
return CMARK_NODE_TYPE_INLINE_P(child_type);
default:
break;
}
return false;
}
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;
}
if (enable_safety_checks) {
// Verify that child is not an ancestor of node or equal to node.
cmark_node *cur = node;
do {
if (cur == child) {
return false;
}
cur = cur->parent;
} while (cur != NULL);
}
return cmark_node_can_contain_type(node, (cmark_node_type) child->type);
}
cmark_node *cmark_node_new_with_mem_and_ext(cmark_node_type type, cmark_mem *mem, cmark_syntax_extension *extension) {
cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node));
cmark_strbuf_init(mem, &node->content, 0);
node->type = (uint16_t)type;
node->extension = extension;
switch (node->type) {
case CMARK_NODE_HEADING:
node->as.heading.level = 1;
break;
case CMARK_NODE_LIST: {
cmark_list *list = &node->as.list;
list->list_type = CMARK_BULLET_LIST;
list->start = 0;
list->tight = false;
break;
}
default:
break;
}
if (node->extension && node->extension->opaque_alloc_func) {
node->extension->opaque_alloc_func(node->extension, mem, node);
}
return node;
}
cmark_node *cmark_node_new_with_ext(cmark_node_type type, cmark_syntax_extension *extension) {
extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
return cmark_node_new_with_mem_and_ext(type, &CMARK_DEFAULT_MEM_ALLOCATOR, extension);
}
cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem)
{
return cmark_node_new_with_mem_and_ext(type, mem, NULL);
}
cmark_node *cmark_node_new(cmark_node_type type) {
return cmark_node_new_with_ext(type, NULL);
}
static void free_node_as(cmark_node *node) {
switch (node->type) {
case CMARK_NODE_CODE_BLOCK:
cmark_chunk_free(NODE_MEM(node), &node->as.code.info);
cmark_chunk_free(NODE_MEM(node), &node->as.code.literal);
break;
case CMARK_NODE_TEXT:
case CMARK_NODE_HTML_INLINE:
case CMARK_NODE_CODE:
case CMARK_NODE_HTML_BLOCK:
case CMARK_NODE_FOOTNOTE_REFERENCE:
case CMARK_NODE_FOOTNOTE_DEFINITION:
cmark_chunk_free(NODE_MEM(node), &node->as.literal);
break;
case CMARK_NODE_LINK:
case CMARK_NODE_IMAGE:
cmark_chunk_free(NODE_MEM(node), &node->as.link.url);
cmark_chunk_free(NODE_MEM(node), &node->as.link.title);
break;
case CMARK_NODE_CUSTOM_BLOCK:
case CMARK_NODE_CUSTOM_INLINE:
cmark_chunk_free(NODE_MEM(node), &node->as.custom.on_enter);
cmark_chunk_free(NODE_MEM(node), &node->as.custom.on_exit);
break;
default:
break;
}
}
// Free a cmark_node list and any children.
static void S_free_nodes(cmark_node *e) {
cmark_node *next;
while (e != NULL) {
cmark_strbuf_free(&e->content);
if (e->user_data && e->user_data_free_func)
e->user_data_free_func(NODE_MEM(e), e->user_data);
if (e->as.opaque && e->extension && e->extension->opaque_free_func)
e->extension->opaque_free_func(e->extension, NODE_MEM(e), e);
free_node_as(e);
if (e->last_child) {
// Splice children into list
e->last_child->next = e->next;
e->next = e->first_child;
}
next = e->next;
NODE_MEM(e)->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 (cmark_node_type)node->type;
}
}
int cmark_node_set_type(cmark_node * node, cmark_node_type type) {
cmark_node_type initial_type;
if (type == node->type)
return 1;
initial_type = (cmark_node_type) node->type;
node->type = (uint16_t)type;
if (!S_can_contain(node->parent, node)) {
node->type = (uint16_t)initial_type;
return 0;
}
/* We rollback the type to free the union members appropriately */
node->type = (uint16_t)initial_type;
free_node_as(node);
node->type = (uint16_t)type;
return 1;
}
const char *cmark_node_get_type_string(cmark_node *node) {
if (node == NULL) {
return "NONE";
}
if (node->extension && node->extension->get_type_string_func) {
return node->extension->get_type_string_func(node->extension, 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_BLOCK:
return "html_block";
case CMARK_NODE_CUSTOM_BLOCK:
return "custom_block";
case CMARK_NODE_PARAGRAPH:
return "paragraph";
case CMARK_NODE_HEADING:
return "heading";
case CMARK_NODE_THEMATIC_BREAK:
return "thematic_break";
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_HTML_INLINE:
return "html_inline";
case CMARK_NODE_CUSTOM_INLINE:
return "custom_inline";
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;
}
}
cmark_node *cmark_node_parent_footnote_def(cmark_node *node) {
if (node == NULL) {
return NULL;
} else {
return node->parent_footnote_def;
}
}
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;
}
int cmark_node_set_user_data_free_func(cmark_node *node,
cmark_free_func free_func) {
if (node == NULL) {
return 0;
}
node->user_data_free_func = free_func;
return 1;
}
const char *cmark_node_get_literal(cmark_node *node) {
if (node == NULL) {
return NULL;
}
switch (node->type) {
case CMARK_NODE_HTML_BLOCK:
case CMARK_NODE_TEXT:
case CMARK_NODE_HTML_INLINE:
case CMARK_NODE_CODE:
case CMARK_NODE_FOOTNOTE_REFERENCE:
case CMARK_NODE_FOOTNOTE_DEFINITION:
return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.literal);
case CMARK_NODE_CODE_BLOCK:
return cmark_chunk_to_cstr(NODE_MEM(node), &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 CMARK_NODE_HTML_BLOCK:
case CMARK_NODE_TEXT:
case CMARK_NODE_HTML_INLINE:
case CMARK_NODE_CODE:
case CMARK_NODE_FOOTNOTE_REFERENCE:
cmark_chunk_set_cstr(NODE_MEM(node), &node->as.literal, content);
return 1;
case CMARK_NODE_CODE_BLOCK:
cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.literal, content);
return 1;
default:
break;
}
return 0;
}
const char *cmark_node_get_string_content(cmark_node *node) {
return (char *) node->content.ptr;
}
int cmark_node_set_string_content(cmark_node *node, const char *content) {
cmark_strbuf_sets(&node->content, content);
return true;
}
int cmark_node_get_heading_level(cmark_node *node) {
if (node == NULL) {
return 0;
}
switch (node->type) {
case CMARK_NODE_HEADING:
return node->as.heading.level;
default:
break;
}
return 0;
}
int cmark_node_set_heading_level(cmark_node *node, int level) {
if (node == NULL || level < 1 || level > 6) {
return 0;
}
switch (node->type) {
case CMARK_NODE_HEADING:
node->as.heading.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 == 1;
return 1;
} else {
return 0;
}
}
int cmark_node_get_item_index(cmark_node *node) {
if (node == NULL) {
return 0;
}
if (node->type == CMARK_NODE_ITEM) {
return node->as.list.start;
} else {
return 0;
}
}
int cmark_node_set_item_index(cmark_node *node, int idx) {
if (node == NULL || idx < 0) {
return 0;
}
if (node->type == CMARK_NODE_ITEM) {
node->as.list.start = idx;
return 1;
} else {
return 0;
}
}
const char *cmark_node_get_fence_info(cmark_node *node) {
if (node == NULL) {
return NULL;
}
if (node->type == CMARK_NODE_CODE_BLOCK) {
return cmark_chunk_to_cstr(NODE_MEM(node), &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 == CMARK_NODE_CODE_BLOCK) {
cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.info, info);
return 1;
} else {
return 0;
}
}
int cmark_node_get_fenced(cmark_node *node, int *length, int *offset, char *character) {
if (node == NULL) {
return 0;
}
if (node->type == CMARK_NODE_CODE_BLOCK) {
*length = node->as.code.fence_length;
*offset = node->as.code.fence_offset;
*character = node->as.code.fence_char;
return node->as.code.fenced;
} else {
return 0;
}
}
int cmark_node_set_fenced(cmark_node * node, int fenced,
int length, int offset, char character) {
if (node == NULL) {
return 0;
}
if (node->type == CMARK_NODE_CODE_BLOCK) {
node->as.code.fenced = (int8_t)fenced;
node->as.code.fence_length = (uint8_t)length;
node->as.code.fence_offset = (uint8_t)offset;
node->as.code.fence_char = character;
return 1;
} else {
return 0;
}
}
const char *cmark_node_get_url(cmark_node *node) {
if (node == NULL) {
return NULL;
}
switch (node->type) {
case CMARK_NODE_LINK:
case CMARK_NODE_IMAGE:
return cmark_chunk_to_cstr(NODE_MEM(node), &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 CMARK_NODE_LINK:
case CMARK_NODE_IMAGE:
cmark_chunk_set_cstr(NODE_MEM(node), &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 CMARK_NODE_LINK:
case CMARK_NODE_IMAGE:
return cmark_chunk_to_cstr(NODE_MEM(node), &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 CMARK_NODE_LINK:
case CMARK_NODE_IMAGE:
cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.title, title);
return 1;
default:
break;
}
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_MEM(node), &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_MEM(node), &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_MEM(node), &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_MEM(node), &node->as.custom.on_exit, on_exit);
return 1;
default:
break;
}
return 0;
}
cmark_syntax_extension *cmark_node_get_syntax_extension(cmark_node *node) {
if (node == NULL) {
return NULL;
}
return node->extension;
}
int cmark_node_set_syntax_extension(cmark_node *node, cmark_syntax_extension *extension) {
if (node == NULL) {
return 0;
}
node->extension = extension;
return 1;
}
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;
}
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;
}
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;
}
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_replace(cmark_node *oldnode, cmark_node *newnode) {
if (!cmark_node_insert_before(oldnode, newnode)) {
return 0;
}
cmark_node_unlink(oldnode);
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;
for (;;) {
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;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/node.h 0000644 0001751 0000177 00000007742 14717450313 020631 0 ustar 00runner docker #ifndef CMARK_NODE_H
#define CMARK_NODE_H
#ifdef __cplusplus
extern "C" {
#endif
#include
#include
#include "cmark-gfm.h"
#include "cmark-gfm-extension_api.h"
#include "buffer.h"
#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;
bool checked; // For task list extension
} cmark_list;
typedef struct {
cmark_chunk info;
cmark_chunk literal;
uint8_t fence_length;
uint8_t fence_offset;
unsigned char fence_char;
int8_t fenced;
} cmark_code;
typedef struct {
int level;
bool setext;
} cmark_heading;
typedef struct {
cmark_chunk url;
cmark_chunk title;
} cmark_link;
typedef struct {
cmark_chunk on_enter;
cmark_chunk on_exit;
} cmark_custom;
enum cmark_node__internal_flags {
CMARK_NODE__OPEN = (1 << 0),
CMARK_NODE__LAST_LINE_BLANK = (1 << 1),
CMARK_NODE__LAST_LINE_CHECKED = (1 << 2),
// Extensions can register custom flags by calling `cmark_register_node_flag`.
// This is the starting value for the custom flags.
CMARK_NODE__REGISTER_FIRST = (1 << 3),
};
typedef uint16_t cmark_node_internal_flags;
struct cmark_node {
cmark_strbuf content;
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;
cmark_free_func user_data_free_func;
int start_line;
int start_column;
int end_line;
int end_column;
int internal_offset;
uint16_t type;
cmark_node_internal_flags flags;
cmark_syntax_extension *extension;
/**
* Used during cmark_render() to cache the most recent non-NULL
* extension, if you go up the parent chain like this:
*
* node->parent->...parent->extension
*/
cmark_syntax_extension *ancestor_extension;
union {
int ref_ix;
int def_count;
} footnote;
cmark_node *parent_footnote_def;
union {
cmark_chunk literal;
cmark_list list;
cmark_code code;
cmark_heading heading;
cmark_link link;
cmark_custom custom;
int html_block_type;
int cell_index; // For keeping track of TABLE_CELL table alignments
void *opaque;
} as;
};
/**
* Syntax extensions can use this function to register a custom node
* flag. The flags are stored in the `flags` field of the `cmark_node`
* struct. The `flags` parameter should be the address of a global variable
* which will store the flag value.
*/
CMARK_GFM_EXPORT
void cmark_register_node_flag(cmark_node_internal_flags *flags);
/**
* DEPRECATED.
*
* This function was added in cmark-gfm version 0.29.0.gfm.7, and was
* required to be called at program start time, which caused
* backwards-compatibility issues in applications that use cmark-gfm as a
* library. It is now a no-op.
*/
CMARK_GFM_EXPORT
void cmark_init_standard_node_flags(void);
static CMARK_INLINE cmark_mem *cmark_node_mem(cmark_node *node) {
return node->content.mem;
}
CMARK_GFM_EXPORT int cmark_node_check(cmark_node *node, FILE *out);
static CMARK_INLINE bool CMARK_NODE_TYPE_BLOCK_P(cmark_node_type node_type) {
return (node_type & CMARK_NODE_TYPE_MASK) == CMARK_NODE_TYPE_BLOCK;
}
static CMARK_INLINE bool CMARK_NODE_BLOCK_P(cmark_node *node) {
return node != NULL && CMARK_NODE_TYPE_BLOCK_P((cmark_node_type) node->type);
}
static CMARK_INLINE bool CMARK_NODE_TYPE_INLINE_P(cmark_node_type node_type) {
return (node_type & CMARK_NODE_TYPE_MASK) == CMARK_NODE_TYPE_INLINE;
}
static CMARK_INLINE bool CMARK_NODE_INLINE_P(cmark_node *node) {
return node != NULL && CMARK_NODE_TYPE_INLINE_P((cmark_node_type) node->type);
}
CMARK_GFM_EXPORT bool cmark_node_can_contain_type(cmark_node *node, cmark_node_type child_type);
/**
* Enable (or disable) extra safety checks. These extra checks cause
* extra performance overhead (in some cases quadratic), so they are only
* intended to be used during testing.
*/
CMARK_GFM_EXPORT void cmark_enable_safety_checks(bool enable);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/parser.h 0000644 0001751 0000177 00000003600 14717450313 021165 0 ustar 00runner docker #ifndef CMARK_PARSER_H
#define CMARK_PARSER_H
#include
#include "references.h"
#include "node.h"
#include "buffer.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MAX_LINK_LABEL_LENGTH 1000
struct cmark_parser {
struct cmark_mem *mem;
/* A hashtable of urls in the current document for cross-references */
struct cmark_map *refmap;
/* The root node of the parser, always a CMARK_NODE_DOCUMENT */
struct cmark_node *root;
/* The last open block after a line is fully processed */
struct cmark_node *current;
/* See the documentation for cmark_parser_get_line_number() in cmark.h */
int line_number;
/* See the documentation for cmark_parser_get_offset() in cmark.h */
bufsize_t offset;
/* See the documentation for cmark_parser_get_column() in cmark.h */
bufsize_t column;
/* See the documentation for cmark_parser_get_first_nonspace() in cmark.h */
bufsize_t first_nonspace;
/* See the documentation for cmark_parser_get_first_nonspace_column() in cmark.h */
bufsize_t first_nonspace_column;
bufsize_t thematic_break_kill_pos;
/* See the documentation for cmark_parser_get_indent() in cmark.h */
int indent;
/* See the documentation for cmark_parser_is_blank() in cmark.h */
bool blank;
/* See the documentation for cmark_parser_has_partially_consumed_tab() in cmark.h */
bool partially_consumed_tab;
/* Contains the currently processed line */
cmark_strbuf curline;
/* See the documentation for cmark_parser_get_last_line_length() in cmark.h */
bufsize_t last_line_length;
/* FIXME: not sure about the difference with curline */
cmark_strbuf linebuf;
/* Options set by the user, see the Options section in cmark.h */
int options;
bool last_buffer_ended_with_cr;
size_t total_size;
cmark_llist *syntax_extensions;
cmark_llist *inline_syntax_extensions;
cmark_ispunct_func backslash_ispunct;
};
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/plaintext.c 0000644 0001751 0000177 00000013401 14717450313 021674 0 ustar 00runner docker #include "node.h"
#include "syntax_extension.h"
#include "render.h"
#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
#define LIT(s) renderer->out(renderer, node, s, false, LITERAL)
#define CR() renderer->cr(renderer)
#define BLANKLINE() renderer->blankline(renderer)
#define LISTMARKER_SIZE 20
// Functions to convert cmark_nodes to plain text strings.
static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_node *node,
cmark_escaping escape,
int32_t c, unsigned char nextc) {
cmark_render_code_point(renderer, c);
}
static int S_render_node(cmark_renderer *renderer, cmark_node *node,
cmark_event_type ev_type, int options) {
int list_number;
cmark_delim_type list_delim;
int i;
bool entering = (ev_type == CMARK_EVENT_ENTER);
char listmarker[LISTMARKER_SIZE];
bool first_in_list_item;
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
// a following list.
if (entering) {
if (node->parent && node->parent->type == CMARK_NODE_ITEM) {
renderer->in_tight_list_item = node->parent->parent->as.list.tight;
}
} else {
if (node->type == CMARK_NODE_LIST) {
renderer->in_tight_list_item =
node->parent &&
node->parent->type == CMARK_NODE_ITEM &&
node->parent->parent->as.list.tight;
}
}
if (node->extension && node->extension->plaintext_render_func) {
node->extension->plaintext_render_func(node->extension, renderer, node, ev_type, options);
return 1;
}
switch (node->type) {
case CMARK_NODE_DOCUMENT:
break;
case CMARK_NODE_BLOCK_QUOTE:
break;
case CMARK_NODE_LIST:
if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK ||
node->next->type == CMARK_NODE_LIST)) {
CR();
}
break;
case CMARK_NODE_ITEM:
if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
marker_width = 4;
} else {
list_number = cmark_node_get_item_index(node);
list_delim = cmark_node_get_list_delim(node->parent);
// we ensure a width of at least 4 so
// we get nice transition from single digits
// to double
snprintf(listmarker, LISTMARKER_SIZE, "%d%s%s", list_number,
list_delim == CMARK_PAREN_DELIM ? ")" : ".",
list_number < 10 ? " " : " ");
marker_width = (bufsize_t)strlen(listmarker);
}
if (entering) {
if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
LIT(" - ");
renderer->begin_content = true;
} else {
LIT(listmarker);
renderer->begin_content = true;
}
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_HEADING:
if (entering) {
renderer->begin_content = true;
renderer->no_linebreaks = true;
} else {
renderer->no_linebreaks = false;
BLANKLINE();
}
break;
case CMARK_NODE_CODE_BLOCK:
first_in_list_item = node->prev == NULL && node->parent &&
node->parent->type == CMARK_NODE_ITEM;
if (!first_in_list_item) {
BLANKLINE();
}
OUT(cmark_node_get_literal(node), false, LITERAL);
BLANKLINE();
break;
case CMARK_NODE_HTML_BLOCK:
break;
case CMARK_NODE_CUSTOM_BLOCK:
break;
case CMARK_NODE_THEMATIC_BREAK:
BLANKLINE();
break;
case CMARK_NODE_PARAGRAPH:
if (!entering) {
BLANKLINE();
}
break;
case CMARK_NODE_TEXT:
OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
break;
case CMARK_NODE_LINEBREAK:
CR();
break;
case CMARK_NODE_SOFTBREAK:
if (CMARK_OPT_HARDBREAKS & options) {
CR();
} else if (!renderer->no_linebreaks && renderer->width == 0 &&
!(CMARK_OPT_HARDBREAKS & options) &&
!(CMARK_OPT_NOBREAKS & options)) {
CR();
} else {
OUT(" ", allow_wrap, LITERAL);
}
break;
case CMARK_NODE_CODE:
OUT(cmark_node_get_literal(node), allow_wrap, LITERAL);
break;
case CMARK_NODE_HTML_INLINE:
break;
case CMARK_NODE_CUSTOM_INLINE:
break;
case CMARK_NODE_STRONG:
break;
case CMARK_NODE_EMPH:
break;
case CMARK_NODE_LINK:
break;
case CMARK_NODE_IMAGE:
break;
case CMARK_NODE_FOOTNOTE_REFERENCE:
if (entering) {
LIT("[^");
OUT(cmark_chunk_to_cstr(renderer->mem, &node->as.literal), false, LITERAL);
LIT("]");
}
break;
case CMARK_NODE_FOOTNOTE_DEFINITION:
if (entering) {
renderer->footnote_ix += 1;
LIT("[^");
char n[32];
snprintf(n, sizeof(n), "%d", renderer->footnote_ix);
OUT(n, false, LITERAL);
LIT("]: ");
cmark_strbuf_puts(renderer->prefix, " ");
} else {
cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4);
}
break;
default:
assert(false);
break;
}
return 1;
}
char *cmark_render_plaintext(cmark_node *root, int options, int width) {
return cmark_render_plaintext_with_mem(root, options, width, cmark_node_mem(root));
}
char *cmark_render_plaintext_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
if (options & CMARK_OPT_HARDBREAKS) {
// disable breaking on width, since it has
// a different meaning with OPT_HARDBREAKS
width = 0;
}
return cmark_render(mem, root, options, width, outc, S_render_node);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/plugin.c 0000644 0001751 0000177 00000001760 14717450313 021167 0 ustar 00runner docker #include
#include "plugin.h"
extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
int cmark_plugin_register_syntax_extension(cmark_plugin * plugin,
cmark_syntax_extension * extension) {
plugin->syntax_extensions = cmark_llist_append(&CMARK_DEFAULT_MEM_ALLOCATOR, plugin->syntax_extensions, extension);
return 1;
}
cmark_plugin *
cmark_plugin_new(void) {
cmark_plugin *res = (cmark_plugin *) CMARK_DEFAULT_MEM_ALLOCATOR.calloc(1, sizeof(cmark_plugin));
res->syntax_extensions = NULL;
return res;
}
void
cmark_plugin_free(cmark_plugin *plugin) {
cmark_llist_free_full(&CMARK_DEFAULT_MEM_ALLOCATOR,
plugin->syntax_extensions,
(cmark_free_func) cmark_syntax_extension_free);
CMARK_DEFAULT_MEM_ALLOCATOR.free(plugin);
}
cmark_llist *
cmark_plugin_steal_syntax_extensions(cmark_plugin *plugin) {
cmark_llist *res = plugin->syntax_extensions;
plugin->syntax_extensions = NULL;
return res;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/plugin.h 0000644 0001751 0000177 00000000777 14717450313 021203 0 ustar 00runner docker #ifndef CMARK_PLUGIN_H
#define CMARK_PLUGIN_H
#ifdef __cplusplus
extern "C" {
#endif
#include "cmark-gfm.h"
#include "cmark-gfm-extension_api.h"
/**
* cmark_plugin:
*
* A plugin structure, which should be filled by plugin's
* init functions.
*/
struct cmark_plugin {
cmark_llist *syntax_extensions;
};
cmark_llist *
cmark_plugin_steal_syntax_extensions(cmark_plugin *plugin);
cmark_plugin *
cmark_plugin_new(void);
void
cmark_plugin_free(cmark_plugin *plugin);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/references.c 0000644 0001751 0000177 00000002313 14717450313 022005 0 ustar 00runner docker #include "cmark-gfm.h"
#include "parser.h"
#include "references.h"
#include "inlines.h"
#include "chunk.h"
static void reference_free(cmark_map *map, cmark_map_entry *_ref) {
cmark_reference *ref = (cmark_reference *)_ref;
cmark_mem *mem = map->mem;
if (ref != NULL) {
mem->free(ref->entry.label);
cmark_chunk_free(mem, &ref->url);
cmark_chunk_free(mem, &ref->title);
mem->free(ref);
}
}
void cmark_reference_create(cmark_map *map, cmark_chunk *label,
cmark_chunk *url, cmark_chunk *title) {
cmark_reference *ref;
unsigned char *reflabel = normalize_map_label(map->mem, label);
/* empty reference name, or composed from only whitespace */
if (reflabel == NULL)
return;
assert(map->sorted == NULL);
ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref));
ref->entry.label = reflabel;
ref->url = cmark_clean_url(map->mem, url);
ref->title = cmark_clean_title(map->mem, title);
ref->entry.age = map->size;
ref->entry.next = map->refs;
ref->entry.size = ref->url.len + ref->title.len;
map->refs = (cmark_map_entry *)ref;
map->size++;
}
cmark_map *cmark_reference_map_new(cmark_mem *mem) {
return cmark_map_new(mem, reference_free);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/references.h 0000644 0001751 0000177 00000000734 14717450313 022017 0 ustar 00runner docker #ifndef CMARK_REFERENCES_H
#define CMARK_REFERENCES_H
#include "map.h"
#ifdef __cplusplus
extern "C" {
#endif
struct cmark_reference {
cmark_map_entry entry;
cmark_chunk url;
cmark_chunk title;
};
typedef struct cmark_reference cmark_reference;
void cmark_reference_create(cmark_map *map, cmark_chunk *label,
cmark_chunk *url, cmark_chunk *title);
cmark_map *cmark_reference_map_new(cmark_mem *mem);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/registry.c 0000644 0001751 0000177 00000003076 14717450313 021543 0 ustar 00runner docker #include
#include
#include
#include "config.h"
#include "cmark-gfm.h"
#include "syntax_extension.h"
#include "registry.h"
#include "plugin.h"
extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
static cmark_llist *syntax_extensions = NULL;
void cmark_register_plugin(cmark_plugin_init_func reg_fn) {
cmark_plugin *plugin = cmark_plugin_new();
if (!reg_fn(plugin)) {
cmark_plugin_free(plugin);
return;
}
cmark_llist *syntax_extensions_list = cmark_plugin_steal_syntax_extensions(plugin),
*it;
for (it = syntax_extensions_list; it; it = it->next) {
syntax_extensions = cmark_llist_append(&CMARK_DEFAULT_MEM_ALLOCATOR, syntax_extensions, it->data);
}
cmark_llist_free(&CMARK_DEFAULT_MEM_ALLOCATOR, syntax_extensions_list);
cmark_plugin_free(plugin);
}
void cmark_release_plugins(void) {
if (syntax_extensions) {
cmark_llist_free_full(
&CMARK_DEFAULT_MEM_ALLOCATOR,
syntax_extensions,
(cmark_free_func) cmark_syntax_extension_free);
syntax_extensions = NULL;
}
}
cmark_llist *cmark_list_syntax_extensions(cmark_mem *mem) {
cmark_llist *it;
cmark_llist *res = NULL;
for (it = syntax_extensions; it; it = it->next) {
res = cmark_llist_append(mem, res, it->data);
}
return res;
}
cmark_syntax_extension *cmark_find_syntax_extension(const char *name) {
cmark_llist *tmp;
for (tmp = syntax_extensions; tmp; tmp = tmp->next) {
cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp->data;
if (!strcmp(ext->name, name))
return ext;
}
return NULL;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/registry.h 0000644 0001751 0000177 00000000571 14717450313 021545 0 ustar 00runner docker #ifndef CMARK_REGISTRY_H
#define CMARK_REGISTRY_H
#ifdef __cplusplus
extern "C" {
#endif
#include "cmark-gfm.h"
#include "plugin.h"
CMARK_GFM_EXPORT
void cmark_register_plugin(cmark_plugin_init_func reg_fn);
CMARK_GFM_EXPORT
void cmark_release_plugins(void);
CMARK_GFM_EXPORT
cmark_llist *cmark_list_syntax_extensions(cmark_mem *mem);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/render.c 0000644 0001751 0000177 00000016122 14717450313 021146 0 ustar 00runner docker #include
#include "buffer.h"
#include "chunk.h"
#include "cmark-gfm.h"
#include "utf8.h"
#include "render.h"
#include "node.h"
#include "syntax_extension.h"
static CMARK_INLINE void S_cr(cmark_renderer *renderer) {
if (renderer->need_cr < 1) {
renderer->need_cr = 1;
}
}
static CMARK_INLINE void S_blankline(cmark_renderer *renderer) {
if (renderer->need_cr < 2) {
renderer->need_cr = 2;
}
}
static void S_out(cmark_renderer *renderer, cmark_node *node,
const char *source, bool wrap,
cmark_escaping escape) {
int length = (int)strlen(source);
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;
cmark_syntax_extension *ext = node->ancestor_extension;
if (ext && !ext->commonmark_escape_func)
ext = NULL;
wrap = wrap && !renderer->no_linebreaks;
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->last_breakable = 0;
renderer->begin_line = true;
renderer->begin_content = 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 = cmark_utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
if (len == -1) { // error condition
return; // return without rendering rest of string
}
if (ext && ext->commonmark_escape_func(ext, node, c))
cmark_strbuf_putc(renderer->buffer, '\\');
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;
// 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 (escape == LITERAL) {
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((char)c) == 1;
}
} else {
(renderer->outc)(renderer, node, escape, c, nextc);
renderer->begin_line = false;
renderer->begin_content =
renderer->begin_content && cmark_isdigit((char)c) == 1;
}
// 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(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
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(renderer->mem, &remainder);
renderer->last_breakable = 0;
renderer->begin_line = false;
renderer->begin_content = 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_code_point(cmark_renderer *renderer, uint32_t c) {
cmark_utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
}
char *cmark_render(cmark_mem *mem, cmark_node *root, int options, int width,
void (*outc)(cmark_renderer *, cmark_node *,
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 = 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 = {mem, &buf, &pref, 0, width,
0, 0, true, true, false,
false, outc, S_cr, S_blankline, S_out,
0};
while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
cur = cmark_iter_get_node(iter);
if (cur->extension) {
cur->ancestor_extension = cur->extension;
} else if (cur->parent) {
cur->ancestor_extension = cur->parent->ancestor_extension;
}
if (cur->type == CMARK_NODE_ITEM) {
// Calculate the list item's index, for the benefit of output formats
// like commonmark and plaintext.
if (cur->prev) {
cmark_node_set_item_index(cur, 1 + cmark_node_get_item_index(cur->prev));
} else {
cmark_node_set_item_index(cur, cmark_node_get_list_start(cur->parent));
}
}
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->size == 0 || 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;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/render.h 0000644 0001751 0000177 00000003211 14717450313 021146 0 ustar 00runner docker #ifndef CMARK_RENDER_H
#define CMARK_RENDER_H
#ifdef __cplusplus
extern "C" {
#endif
#include
#include "buffer.h"
#include "chunk.h"
typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping;
struct cmark_renderer {
cmark_mem *mem;
cmark_strbuf *buffer;
cmark_strbuf *prefix;
int column;
int width;
int need_cr;
bufsize_t last_breakable;
bool begin_line;
bool begin_content;
bool no_linebreaks;
bool in_tight_list_item;
void (*outc)(struct cmark_renderer *, cmark_node *, cmark_escaping, int32_t, unsigned char);
void (*cr)(struct cmark_renderer *);
void (*blankline)(struct cmark_renderer *);
void (*out)(struct cmark_renderer *, cmark_node *, const char *, bool, cmark_escaping);
unsigned int footnote_ix;
};
typedef struct cmark_renderer cmark_renderer;
struct cmark_html_renderer {
cmark_strbuf *html;
cmark_node *plain;
cmark_llist *filter_extensions;
unsigned int footnote_ix;
unsigned int written_footnote_ix;
void *opaque;
};
typedef struct cmark_html_renderer cmark_html_renderer;
void cmark_render_ascii(cmark_renderer *renderer, const char *s);
void cmark_render_code_point(cmark_renderer *renderer, uint32_t c);
char *cmark_render(cmark_mem *mem, cmark_node *root, int options, int width,
void (*outc)(cmark_renderer *, cmark_node *,
cmark_escaping, int32_t,
unsigned char),
int (*render_node)(cmark_renderer *renderer,
cmark_node *node,
cmark_event_type ev_type, int options));
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/scanners.c 0000644 0001751 0000177 00001064343 14717450313 021514 0 ustar 00runner docker /* Generated by re2c 3.0 */
#include "scanners.h"
#include "chunk.h"
#include
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;
if (ptr == NULL || offset > c->len) {
return 0;
} else {
unsigned char lim = ptr[c->len];
ptr[c->len] = '\0';
res = scanner(ptr + offset);
ptr[c->len] = lim;
}
return res;
}
// Try to match a scheme including colon.
bufsize_t _scan_scheme(const unsigned char *p) {
const unsigned char *marker = NULL;
const unsigned char *start = p;
{
unsigned char yych;
yych = *p;
if (yych <= '@')
goto yy1;
if (yych <= 'Z')
goto yy3;
if (yych <= '`')
goto yy1;
if (yych <= 'z')
goto yy3;
yy1:
++p;
yy2 : { return 0; }
yy3:
yych = *(marker = ++p);
if (yych <= '/') {
if (yych <= '+') {
if (yych <= '*')
goto yy2;
} else {
if (yych <= ',')
goto yy2;
if (yych >= '/')
goto yy2;
}
} else {
if (yych <= 'Z') {
if (yych <= '9')
goto yy4;
if (yych <= '@')
goto yy2;
} else {
if (yych <= '`')
goto yy2;
if (yych >= '{')
goto yy2;
}
}
yy4:
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych == '+')
goto yy6;
} else {
if (yych != '/')
goto yy6;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych >= 'A')
goto yy6;
} else {
if (yych <= '`')
goto yy5;
if (yych <= 'z')
goto yy6;
}
}
yy5:
p = marker;
goto yy2;
yy6:
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych == '+')
goto yy8;
goto yy5;
} else {
if (yych == '/')
goto yy5;
goto yy8;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
goto yy8;
} else {
if (yych <= '`')
goto yy5;
if (yych <= 'z')
goto yy8;
goto yy5;
}
}
yy7:
++p;
{ return (bufsize_t)(p - start); }
yy8:
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy5;
} else {
if (yych == '/')
goto yy5;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy7;
if (yych <= '@')
goto yy5;
} else {
if (yych <= '`')
goto yy5;
if (yych >= '{')
goto yy5;
}
}
yych = *++p;
if (yych == ':')
goto yy7;
goto yy5;
}
}
// Try to match URI autolink after first <, returning number of chars matched.
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 = *p;
if (yych <= '@')
goto yy10;
if (yych <= 'Z')
goto yy12;
if (yych <= '`')
goto yy10;
if (yych <= 'z')
goto yy12;
yy10:
++p;
yy11 : { return 0; }
yy12:
yych = *(marker = ++p);
if (yych <= '/') {
if (yych <= '+') {
if (yych <= '*')
goto yy11;
} else {
if (yych <= ',')
goto yy11;
if (yych >= '/')
goto yy11;
}
} else {
if (yych <= 'Z') {
if (yych <= '9')
goto yy13;
if (yych <= '@')
goto yy11;
} else {
if (yych <= '`')
goto yy11;
if (yych >= '{')
goto yy11;
}
}
yy13:
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych == '+')
goto yy15;
} else {
if (yych != '/')
goto yy15;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych >= 'A')
goto yy15;
} else {
if (yych <= '`')
goto yy14;
if (yych <= 'z')
goto yy15;
}
}
yy14:
p = marker;
goto yy11;
yy15:
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych == '+')
goto yy17;
goto yy14;
} else {
if (yych == '/')
goto yy14;
goto yy17;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
goto yy17;
} else {
if (yych <= '`')
goto yy14;
if (yych <= 'z')
goto yy17;
goto yy14;
}
}
yy16:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy16;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '<')
goto yy14;
if (yych <= '>')
goto yy18;
goto yy14;
} else {
if (yych <= 0xDF)
goto yy19;
if (yych <= 0xE0)
goto yy20;
goto yy21;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy22;
if (yych <= 0xEF)
goto yy21;
goto yy23;
} else {
if (yych <= 0xF3)
goto yy24;
if (yych <= 0xF4)
goto yy25;
goto yy14;
}
}
yy17:
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych == '+')
goto yy26;
goto yy14;
} else {
if (yych == '/')
goto yy14;
goto yy26;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
goto yy26;
} else {
if (yych <= '`')
goto yy14;
if (yych <= 'z')
goto yy26;
goto yy14;
}
}
yy18:
++p;
{ return (bufsize_t)(p - start); }
yy19:
yych = *++p;
if (yych <= 0x7F)
goto yy14;
if (yych <= 0xBF)
goto yy16;
goto yy14;
yy20:
yych = *++p;
if (yych <= 0x9F)
goto yy14;
if (yych <= 0xBF)
goto yy19;
goto yy14;
yy21:
yych = *++p;
if (yych <= 0x7F)
goto yy14;
if (yych <= 0xBF)
goto yy19;
goto yy14;
yy22:
yych = *++p;
if (yych <= 0x7F)
goto yy14;
if (yych <= 0x9F)
goto yy19;
goto yy14;
yy23:
yych = *++p;
if (yych <= 0x8F)
goto yy14;
if (yych <= 0xBF)
goto yy21;
goto yy14;
yy24:
yych = *++p;
if (yych <= 0x7F)
goto yy14;
if (yych <= 0xBF)
goto yy21;
goto yy14;
yy25:
yych = *++p;
if (yych <= 0x7F)
goto yy14;
if (yych <= 0x8F)
goto yy21;
goto yy14;
yy26:
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych <= '9') {
if (yych <= ',') {
if (yych != '+')
goto yy14;
} else {
if (yych == '/')
goto yy14;
}
} else {
if (yych <= 'Z') {
if (yych <= ':')
goto yy16;
if (yych <= '@')
goto yy14;
} else {
if (yych <= '`')
goto yy14;
if (yych >= '{')
goto yy14;
}
}
yych = *++p;
if (yych == ':')
goto yy16;
goto yy14;
}
}
// 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, 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 <= '9') {
if (yych <= '\'') {
if (yych == '!')
goto yy30;
if (yych >= '#')
goto yy30;
} else {
if (yych <= ')')
goto yy28;
if (yych != ',')
goto yy30;
}
} else {
if (yych <= '?') {
if (yych == '=')
goto yy30;
if (yych >= '?')
goto yy30;
} else {
if (yych <= 'Z') {
if (yych >= 'A')
goto yy30;
} else {
if (yych <= ']')
goto yy28;
if (yych <= '~')
goto yy30;
}
}
}
yy28:
++p;
yy29 : { return 0; }
yy30:
yych = *(marker = ++p);
if (yych <= ',') {
if (yych <= '"') {
if (yych == '!')
goto yy32;
goto yy29;
} else {
if (yych <= '\'')
goto yy32;
if (yych <= ')')
goto yy29;
if (yych <= '+')
goto yy32;
goto yy29;
}
} else {
if (yych <= '>') {
if (yych <= '9')
goto yy32;
if (yych == '=')
goto yy32;
goto yy29;
} else {
if (yych <= 'Z')
goto yy32;
if (yych <= ']')
goto yy29;
if (yych <= '~')
goto yy32;
goto yy29;
}
}
yy31:
yych = *++p;
yy32:
if (yybm[0 + yych] & 128) {
goto yy31;
}
if (yych <= '>')
goto yy33;
if (yych <= '@')
goto yy34;
yy33:
p = marker;
goto yy29;
yy34:
yych = *++p;
if (yych <= '@') {
if (yych <= '/')
goto yy33;
if (yych >= ':')
goto yy33;
} else {
if (yych <= 'Z')
goto yy35;
if (yych <= '`')
goto yy33;
if (yych >= '{')
goto yy33;
}
yy35:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy36;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy36;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy36;
goto yy33;
}
}
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy38;
if (yych <= '/')
goto yy33;
goto yy39;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy39;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy39;
goto yy33;
}
}
yy36:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych <= '-')
goto yy38;
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy39;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy39;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy39;
goto yy33;
}
}
yy37:
++p;
{ return (bufsize_t)(p - start); }
yy38:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy40;
if (yych <= '/')
goto yy33;
goto yy41;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy41;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy41;
goto yy33;
}
}
yy39:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy41;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy41;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy41;
goto yy33;
}
}
yy40:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy42;
if (yych <= '/')
goto yy33;
goto yy43;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy43;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy43;
goto yy33;
}
}
yy41:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy43;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy43;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy43;
goto yy33;
}
}
yy42:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy44;
if (yych <= '/')
goto yy33;
goto yy45;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy45;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy45;
goto yy33;
}
}
yy43:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy45;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy45;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy45;
goto yy33;
}
}
yy44:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy46;
if (yych <= '/')
goto yy33;
goto yy47;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy47;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy47;
goto yy33;
}
}
yy45:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy47;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy47;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy47;
goto yy33;
}
}
yy46:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy48;
if (yych <= '/')
goto yy33;
goto yy49;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy49;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy49;
goto yy33;
}
}
yy47:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy49;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy49;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy49;
goto yy33;
}
}
yy48:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy50;
if (yych <= '/')
goto yy33;
goto yy51;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy51;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy51;
goto yy33;
}
}
yy49:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy51;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy51;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy51;
goto yy33;
}
}
yy50:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy52;
if (yych <= '/')
goto yy33;
goto yy53;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy53;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy53;
goto yy33;
}
}
yy51:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy53;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy53;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy53;
goto yy33;
}
}
yy52:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy54;
if (yych <= '/')
goto yy33;
goto yy55;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy55;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy55;
goto yy33;
}
}
yy53:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy55;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy55;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy55;
goto yy33;
}
}
yy54:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy56;
if (yych <= '/')
goto yy33;
goto yy57;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy57;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy57;
goto yy33;
}
}
yy55:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy57;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy57;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy57;
goto yy33;
}
}
yy56:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy58;
if (yych <= '/')
goto yy33;
goto yy59;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy59;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy59;
goto yy33;
}
}
yy57:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy59;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy59;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy59;
goto yy33;
}
}
yy58:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy60;
if (yych <= '/')
goto yy33;
goto yy61;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy61;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy61;
goto yy33;
}
}
yy59:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy61;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy61;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy61;
goto yy33;
}
}
yy60:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy62;
if (yych <= '/')
goto yy33;
goto yy63;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy63;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy63;
goto yy33;
}
}
yy61:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy63;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy63;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy63;
goto yy33;
}
}
yy62:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy64;
if (yych <= '/')
goto yy33;
goto yy65;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy65;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy65;
goto yy33;
}
}
yy63:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy65;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy65;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy65;
goto yy33;
}
}
yy64:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy66;
if (yych <= '/')
goto yy33;
goto yy67;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy67;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy67;
goto yy33;
}
}
yy65:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy67;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy67;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy67;
goto yy33;
}
}
yy66:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy68;
if (yych <= '/')
goto yy33;
goto yy69;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy69;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy69;
goto yy33;
}
}
yy67:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy69;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy69;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy69;
goto yy33;
}
}
yy68:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy70;
if (yych <= '/')
goto yy33;
goto yy71;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy71;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy71;
goto yy33;
}
}
yy69:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy71;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy71;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy71;
goto yy33;
}
}
yy70:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy72;
if (yych <= '/')
goto yy33;
goto yy73;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy73;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy73;
goto yy33;
}
}
yy71:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy73;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy73;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy73;
goto yy33;
}
}
yy72:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy74;
if (yych <= '/')
goto yy33;
goto yy75;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy75;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy75;
goto yy33;
}
}
yy73:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy75;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy75;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy75;
goto yy33;
}
}
yy74:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy76;
if (yych <= '/')
goto yy33;
goto yy77;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy77;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy77;
goto yy33;
}
}
yy75:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy77;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy77;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy77;
goto yy33;
}
}
yy76:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy78;
if (yych <= '/')
goto yy33;
goto yy79;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy79;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy79;
goto yy33;
}
}
yy77:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy79;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy79;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy79;
goto yy33;
}
}
yy78:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy80;
if (yych <= '/')
goto yy33;
goto yy81;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy81;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy81;
goto yy33;
}
}
yy79:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy81;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy81;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy81;
goto yy33;
}
}
yy80:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy82;
if (yych <= '/')
goto yy33;
goto yy83;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy83;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy83;
goto yy33;
}
}
yy81:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy83;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy83;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy83;
goto yy33;
}
}
yy82:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy84;
if (yych <= '/')
goto yy33;
goto yy85;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy85;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy85;
goto yy33;
}
}
yy83:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy85;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy85;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy85;
goto yy33;
}
}
yy84:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy86;
if (yych <= '/')
goto yy33;
goto yy87;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy87;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy87;
goto yy33;
}
}
yy85:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy87;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy87;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy87;
goto yy33;
}
}
yy86:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy88;
if (yych <= '/')
goto yy33;
goto yy89;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy89;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy89;
goto yy33;
}
}
yy87:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy89;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy89;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy89;
goto yy33;
}
}
yy88:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy90;
if (yych <= '/')
goto yy33;
goto yy91;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy91;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy91;
goto yy33;
}
}
yy89:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy91;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy91;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy91;
goto yy33;
}
}
yy90:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy92;
if (yych <= '/')
goto yy33;
goto yy93;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy93;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy93;
goto yy33;
}
}
yy91:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy93;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy93;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy93;
goto yy33;
}
}
yy92:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy94;
if (yych <= '/')
goto yy33;
goto yy95;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy95;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy95;
goto yy33;
}
}
yy93:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy95;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy95;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy95;
goto yy33;
}
}
yy94:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy96;
if (yych <= '/')
goto yy33;
goto yy97;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy97;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy97;
goto yy33;
}
}
yy95:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy97;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy97;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy97;
goto yy33;
}
}
yy96:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy98;
if (yych <= '/')
goto yy33;
goto yy99;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy99;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy99;
goto yy33;
}
}
yy97:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy99;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy99;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy99;
goto yy33;
}
}
yy98:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy100;
if (yych <= '/')
goto yy33;
goto yy101;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy101;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy101;
goto yy33;
}
}
yy99:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy101;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy101;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy101;
goto yy33;
}
}
yy100:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy102;
if (yych <= '/')
goto yy33;
goto yy103;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy103;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy103;
goto yy33;
}
}
yy101:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy103;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy103;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy103;
goto yy33;
}
}
yy102:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy104;
if (yych <= '/')
goto yy33;
goto yy105;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy105;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy105;
goto yy33;
}
}
yy103:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy105;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy105;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy105;
goto yy33;
}
}
yy104:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy106;
if (yych <= '/')
goto yy33;
goto yy107;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy107;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy107;
goto yy33;
}
}
yy105:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy107;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy107;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy107;
goto yy33;
}
}
yy106:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy108;
if (yych <= '/')
goto yy33;
goto yy109;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy109;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy109;
goto yy33;
}
}
yy107:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy109;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy109;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy109;
goto yy33;
}
}
yy108:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy110;
if (yych <= '/')
goto yy33;
goto yy111;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy111;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy111;
goto yy33;
}
}
yy109:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy111;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy111;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy111;
goto yy33;
}
}
yy110:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy112;
if (yych <= '/')
goto yy33;
goto yy113;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy113;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy113;
goto yy33;
}
}
yy111:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy113;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy113;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy113;
goto yy33;
}
}
yy112:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy114;
if (yych <= '/')
goto yy33;
goto yy115;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy115;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy115;
goto yy33;
}
}
yy113:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy115;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy115;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy115;
goto yy33;
}
}
yy114:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy116;
if (yych <= '/')
goto yy33;
goto yy117;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy117;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy117;
goto yy33;
}
}
yy115:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy117;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy117;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy117;
goto yy33;
}
}
yy116:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy118;
if (yych <= '/')
goto yy33;
goto yy119;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy119;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy119;
goto yy33;
}
}
yy117:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy119;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy119;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy119;
goto yy33;
}
}
yy118:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy120;
if (yych <= '/')
goto yy33;
goto yy121;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy121;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy121;
goto yy33;
}
}
yy119:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy121;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy121;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy121;
goto yy33;
}
}
yy120:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy122;
if (yych <= '/')
goto yy33;
goto yy123;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy123;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy123;
goto yy33;
}
}
yy121:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy123;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy123;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy123;
goto yy33;
}
}
yy122:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy124;
if (yych <= '/')
goto yy33;
goto yy125;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy125;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy125;
goto yy33;
}
}
yy123:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy125;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy125;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy125;
goto yy33;
}
}
yy124:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy126;
if (yych <= '/')
goto yy33;
goto yy127;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy127;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy127;
goto yy33;
}
}
yy125:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy127;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy127;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy127;
goto yy33;
}
}
yy126:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy128;
if (yych <= '/')
goto yy33;
goto yy129;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy129;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy129;
goto yy33;
}
}
yy127:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy129;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy129;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy129;
goto yy33;
}
}
yy128:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy130;
if (yych <= '/')
goto yy33;
goto yy131;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy131;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy131;
goto yy33;
}
}
yy129:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy131;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy131;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy131;
goto yy33;
}
}
yy130:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy132;
if (yych <= '/')
goto yy33;
goto yy133;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy133;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy133;
goto yy33;
}
}
yy131:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy133;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy133;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy133;
goto yy33;
}
}
yy132:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy134;
if (yych <= '/')
goto yy33;
goto yy135;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy135;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy135;
goto yy33;
}
}
yy133:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy135;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy135;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy135;
goto yy33;
}
}
yy134:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy136;
if (yych <= '/')
goto yy33;
goto yy137;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy137;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy137;
goto yy33;
}
}
yy135:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy137;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy137;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy137;
goto yy33;
}
}
yy136:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy138;
if (yych <= '/')
goto yy33;
goto yy139;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy139;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy139;
goto yy33;
}
}
yy137:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy139;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy139;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy139;
goto yy33;
}
}
yy138:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy140;
if (yych <= '/')
goto yy33;
goto yy141;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy141;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy141;
goto yy33;
}
}
yy139:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy141;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy141;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy141;
goto yy33;
}
}
yy140:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy142;
if (yych <= '/')
goto yy33;
goto yy143;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy143;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy143;
goto yy33;
}
}
yy141:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy143;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy143;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy143;
goto yy33;
}
}
yy142:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy144;
if (yych <= '/')
goto yy33;
goto yy145;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy145;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy145;
goto yy33;
}
}
yy143:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy145;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy145;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy145;
goto yy33;
}
}
yy144:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy146;
if (yych <= '/')
goto yy33;
goto yy147;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy147;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy147;
goto yy33;
}
}
yy145:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy147;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy147;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy147;
goto yy33;
}
}
yy146:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy148;
if (yych <= '/')
goto yy33;
goto yy149;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy149;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy149;
goto yy33;
}
}
yy147:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy149;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy149;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy149;
goto yy33;
}
}
yy148:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy150;
if (yych <= '/')
goto yy33;
goto yy151;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy151;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy151;
goto yy33;
}
}
yy149:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy151;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy151;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy151;
goto yy33;
}
}
yy150:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy152;
if (yych <= '/')
goto yy33;
goto yy153;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy153;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy153;
goto yy33;
}
}
yy151:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy153;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy153;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy153;
goto yy33;
}
}
yy152:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy154;
if (yych <= '/')
goto yy33;
goto yy155;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy155;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy155;
goto yy33;
}
}
yy153:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy155;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy155;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy155;
goto yy33;
}
}
yy154:
yych = *++p;
if (yych <= '9') {
if (yych == '-')
goto yy156;
if (yych <= '/')
goto yy33;
goto yy157;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy33;
goto yy157;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy157;
goto yy33;
}
}
yy155:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= ',')
goto yy33;
if (yych >= '.')
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy157;
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
goto yy157;
} else {
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy157;
goto yy33;
}
}
yy156:
yych = *++p;
if (yych <= '@') {
if (yych <= '/')
goto yy33;
if (yych <= '9')
goto yy158;
goto yy33;
} else {
if (yych <= 'Z')
goto yy158;
if (yych <= '`')
goto yy33;
if (yych <= 'z')
goto yy158;
goto yy33;
}
yy157:
yych = *++p;
if (yych <= '=') {
if (yych <= '.') {
if (yych <= '-')
goto yy33;
goto yy34;
} else {
if (yych <= '/')
goto yy33;
if (yych >= ':')
goto yy33;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy37;
if (yych <= '@')
goto yy33;
} else {
if (yych <= '`')
goto yy33;
if (yych >= '{')
goto yy33;
}
}
yy158:
yych = *++p;
if (yych == '.')
goto yy34;
if (yych == '>')
goto yy37;
goto yy33;
}
}
// 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[] = {
0, 224, 224, 224, 224, 224, 224, 224, 224, 200, 200, 200, 200, 200,
224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 200, 224, 128, 224, 224, 224, 224, 64, 224, 224,
224, 224, 224, 244, 240, 224, 244, 244, 244, 244, 244, 244, 244, 244,
244, 244, 240, 224, 192, 192, 192, 224, 224, 244, 244, 244, 244, 244,
244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
244, 244, 244, 244, 244, 244, 244, 224, 224, 224, 224, 240, 192, 244,
244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 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 == '/')
goto yy162;
} else {
if (yych <= 'Z')
goto yy163;
if (yych <= '`')
goto yy160;
if (yych <= 'z')
goto yy163;
}
yy160:
++p;
yy161 : { return 0; }
yy162:
yych = *(marker = ++p);
if (yych <= '@')
goto yy161;
if (yych <= 'Z')
goto yy164;
if (yych <= '`')
goto yy161;
if (yych <= 'z')
goto yy164;
goto yy161;
yy163:
yych = *(marker = ++p);
if (yych <= '.') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy161;
if (yych <= '\r')
goto yy168;
goto yy161;
} else {
if (yych <= ' ')
goto yy168;
if (yych == '-')
goto yy168;
goto yy161;
}
} else {
if (yych <= '@') {
if (yych <= '9')
goto yy168;
if (yych == '>')
goto yy168;
goto yy161;
} else {
if (yych <= 'Z')
goto yy168;
if (yych <= '`')
goto yy161;
if (yych <= 'z')
goto yy168;
goto yy161;
}
}
yy164:
yych = *++p;
if (yybm[0 + yych] & 4) {
goto yy164;
}
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy165;
if (yych <= '\r')
goto yy171;
} else {
if (yych <= ' ')
goto yy171;
if (yych == '>')
goto yy170;
}
yy165:
p = marker;
goto yy161;
yy166:
yych = *++p;
if (yybm[0 + yych] & 8) {
goto yy166;
}
if (yych <= '>') {
if (yych <= '9') {
if (yych == '/')
goto yy169;
goto yy165;
} else {
if (yych <= ':')
goto yy172;
if (yych <= '=')
goto yy165;
goto yy170;
}
} else {
if (yych <= '^') {
if (yych <= '@')
goto yy165;
if (yych <= 'Z')
goto yy172;
goto yy165;
} else {
if (yych == '`')
goto yy165;
if (yych <= 'z')
goto yy172;
goto yy165;
}
}
yy167:
yych = *++p;
yy168:
if (yybm[0 + yych] & 8) {
goto yy166;
}
if (yych <= '=') {
if (yych <= '.') {
if (yych == '-')
goto yy167;
goto yy165;
} else {
if (yych <= '/')
goto yy169;
if (yych <= '9')
goto yy167;
goto yy165;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy170;
if (yych <= '@')
goto yy165;
goto yy167;
} else {
if (yych <= '`')
goto yy165;
if (yych <= 'z')
goto yy167;
goto yy165;
}
}
yy169:
yych = *++p;
if (yych != '>')
goto yy165;
yy170:
++p;
{ return (bufsize_t)(p - start); }
yy171:
yych = *++p;
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy165;
if (yych <= '\r')
goto yy171;
goto yy165;
} else {
if (yych <= ' ')
goto yy171;
if (yych == '>')
goto yy170;
goto yy165;
}
yy172:
yych = *++p;
if (yybm[0 + yych] & 16) {
goto yy172;
}
if (yych <= ',') {
if (yych <= '\r') {
if (yych <= 0x08)
goto yy165;
} else {
if (yych != ' ')
goto yy165;
}
} else {
if (yych <= '<') {
if (yych <= '/')
goto yy169;
goto yy165;
} else {
if (yych <= '=')
goto yy174;
if (yych <= '>')
goto yy170;
goto yy165;
}
}
yy173:
yych = *++p;
if (yych <= '<') {
if (yych <= ' ') {
if (yych <= 0x08)
goto yy165;
if (yych <= '\r')
goto yy173;
if (yych <= 0x1F)
goto yy165;
goto yy173;
} else {
if (yych <= '/') {
if (yych <= '.')
goto yy165;
goto yy169;
} else {
if (yych == ':')
goto yy172;
goto yy165;
}
}
} else {
if (yych <= 'Z') {
if (yych <= '=')
goto yy174;
if (yych <= '>')
goto yy170;
if (yych <= '@')
goto yy165;
goto yy172;
} else {
if (yych <= '_') {
if (yych <= '^')
goto yy165;
goto yy172;
} else {
if (yych <= '`')
goto yy165;
if (yych <= 'z')
goto yy172;
goto yy165;
}
}
}
yy174:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy175;
}
if (yych <= 0xE0) {
if (yych <= '"') {
if (yych <= 0x00)
goto yy165;
if (yych <= ' ')
goto yy174;
goto yy176;
} else {
if (yych <= '\'')
goto yy177;
if (yych <= 0xC1)
goto yy165;
if (yych <= 0xDF)
goto yy178;
goto yy179;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy181;
goto yy180;
} else {
if (yych <= 0xF0)
goto yy182;
if (yych <= 0xF3)
goto yy183;
if (yych <= 0xF4)
goto yy184;
goto yy165;
}
}
yy175:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy175;
}
if (yych <= 0xE0) {
if (yych <= '=') {
if (yych <= 0x00)
goto yy165;
if (yych <= ' ')
goto yy166;
goto yy165;
} else {
if (yych <= '>')
goto yy170;
if (yych <= 0xC1)
goto yy165;
if (yych <= 0xDF)
goto yy178;
goto yy179;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy181;
goto yy180;
} else {
if (yych <= 0xF0)
goto yy182;
if (yych <= 0xF3)
goto yy183;
if (yych <= 0xF4)
goto yy184;
goto yy165;
}
}
yy176:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy176;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy165;
if (yych <= '"')
goto yy185;
goto yy165;
} else {
if (yych <= 0xDF)
goto yy186;
if (yych <= 0xE0)
goto yy187;
goto yy188;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy189;
if (yych <= 0xEF)
goto yy188;
goto yy190;
} else {
if (yych <= 0xF3)
goto yy191;
if (yych <= 0xF4)
goto yy192;
goto yy165;
}
}
yy177:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy177;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy165;
if (yych <= '\'')
goto yy185;
goto yy165;
} else {
if (yych <= 0xDF)
goto yy193;
if (yych <= 0xE0)
goto yy194;
goto yy195;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy196;
if (yych <= 0xEF)
goto yy195;
goto yy197;
} else {
if (yych <= 0xF3)
goto yy198;
if (yych <= 0xF4)
goto yy199;
goto yy165;
}
}
yy178:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy175;
goto yy165;
yy179:
yych = *++p;
if (yych <= 0x9F)
goto yy165;
if (yych <= 0xBF)
goto yy178;
goto yy165;
yy180:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy178;
goto yy165;
yy181:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0x9F)
goto yy178;
goto yy165;
yy182:
yych = *++p;
if (yych <= 0x8F)
goto yy165;
if (yych <= 0xBF)
goto yy180;
goto yy165;
yy183:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy180;
goto yy165;
yy184:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0x8F)
goto yy180;
goto yy165;
yy185:
yych = *++p;
if (yybm[0 + yych] & 8) {
goto yy166;
}
if (yych == '/')
goto yy169;
if (yych == '>')
goto yy170;
goto yy165;
yy186:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy176;
goto yy165;
yy187:
yych = *++p;
if (yych <= 0x9F)
goto yy165;
if (yych <= 0xBF)
goto yy186;
goto yy165;
yy188:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy186;
goto yy165;
yy189:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0x9F)
goto yy186;
goto yy165;
yy190:
yych = *++p;
if (yych <= 0x8F)
goto yy165;
if (yych <= 0xBF)
goto yy188;
goto yy165;
yy191:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy188;
goto yy165;
yy192:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0x8F)
goto yy188;
goto yy165;
yy193:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy177;
goto yy165;
yy194:
yych = *++p;
if (yych <= 0x9F)
goto yy165;
if (yych <= 0xBF)
goto yy193;
goto yy165;
yy195:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy193;
goto yy165;
yy196:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0x9F)
goto yy193;
goto yy165;
yy197:
yych = *++p;
if (yych <= 0x8F)
goto yy165;
if (yych <= 0xBF)
goto yy195;
goto yy165;
yy198:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0xBF)
goto yy195;
goto yy165;
yy199:
yych = *++p;
if (yych <= 0x7F)
goto yy165;
if (yych <= 0x8F)
goto yy195;
goto yy165;
}
}
// Try to (liberally) match an HTML tag after first <, returning num of chars
// matched.
bufsize_t _scan_liberal_html_tag(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, 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 (yych <= 0xE0) {
if (yych <= '\n') {
if (yych <= 0x00)
goto yy201;
if (yych <= '\t')
goto yy203;
} else {
if (yych <= 0x7F)
goto yy203;
if (yych <= 0xC1)
goto yy201;
if (yych <= 0xDF)
goto yy204;
goto yy205;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy207;
goto yy206;
} else {
if (yych <= 0xF0)
goto yy208;
if (yych <= 0xF3)
goto yy209;
if (yych <= 0xF4)
goto yy210;
}
}
yy201:
++p;
yy202 : { return 0; }
yy203:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '\n') {
if (yych <= 0x00)
goto yy202;
if (yych <= '\t')
goto yy212;
goto yy202;
} else {
if (yych <= 0x7F)
goto yy212;
if (yych <= 0xC1)
goto yy202;
if (yych <= 0xF4)
goto yy212;
goto yy202;
}
yy204:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy202;
if (yych <= 0xBF)
goto yy211;
goto yy202;
yy205:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x9F)
goto yy202;
if (yych <= 0xBF)
goto yy216;
goto yy202;
yy206:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy202;
if (yych <= 0xBF)
goto yy216;
goto yy202;
yy207:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy202;
if (yych <= 0x9F)
goto yy216;
goto yy202;
yy208:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x8F)
goto yy202;
if (yych <= 0xBF)
goto yy218;
goto yy202;
yy209:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy202;
if (yych <= 0xBF)
goto yy218;
goto yy202;
yy210:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy202;
if (yych <= 0x8F)
goto yy218;
goto yy202;
yy211:
yych = *++p;
yy212:
if (yybm[0 + yych] & 64) {
goto yy211;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy213;
if (yych <= '>')
goto yy214;
} else {
if (yych <= 0xDF)
goto yy216;
if (yych <= 0xE0)
goto yy217;
goto yy218;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy219;
if (yych <= 0xEF)
goto yy218;
goto yy220;
} else {
if (yych <= 0xF3)
goto yy221;
if (yych <= 0xF4)
goto yy222;
}
}
yy213:
p = marker;
if (yyaccept == 0) {
goto yy202;
} else {
goto yy215;
}
yy214:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy211;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy215;
if (yych <= '>')
goto yy214;
} else {
if (yych <= 0xDF)
goto yy216;
if (yych <= 0xE0)
goto yy217;
goto yy218;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy219;
if (yych <= 0xEF)
goto yy218;
goto yy220;
} else {
if (yych <= 0xF3)
goto yy221;
if (yych <= 0xF4)
goto yy222;
}
}
yy215 : { return (bufsize_t)(p - start); }
yy216:
yych = *++p;
if (yych <= 0x7F)
goto yy213;
if (yych <= 0xBF)
goto yy211;
goto yy213;
yy217:
yych = *++p;
if (yych <= 0x9F)
goto yy213;
if (yych <= 0xBF)
goto yy216;
goto yy213;
yy218:
yych = *++p;
if (yych <= 0x7F)
goto yy213;
if (yych <= 0xBF)
goto yy216;
goto yy213;
yy219:
yych = *++p;
if (yych <= 0x7F)
goto yy213;
if (yych <= 0x9F)
goto yy216;
goto yy213;
yy220:
yych = *++p;
if (yych <= 0x8F)
goto yy213;
if (yych <= 0xBF)
goto yy218;
goto yy213;
yy221:
yych = *++p;
if (yych <= 0x7F)
goto yy213;
if (yych <= 0xBF)
goto yy218;
goto yy213;
yy222:
yych = *++p;
if (yych <= 0x7F)
goto yy213;
if (yych <= 0x8F)
goto yy218;
goto yy213;
}
}
bufsize_t _scan_html_comment(const unsigned char *p) {
const unsigned char *marker = NULL;
const unsigned char *start = p;
{
unsigned char yych;
static const unsigned char yybm[] = {
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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 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 yy225;
++p;
yy224 : { return 0; }
yy225:
yych = *(marker = ++p);
if (yych != '-')
goto yy224;
yy226:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy226;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy227;
if (yych <= '-')
goto yy228;
} else {
if (yych <= 0xDF)
goto yy229;
if (yych <= 0xE0)
goto yy230;
goto yy231;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy232;
if (yych <= 0xEF)
goto yy231;
goto yy233;
} else {
if (yych <= 0xF3)
goto yy234;
if (yych <= 0xF4)
goto yy235;
}
}
yy227:
p = marker;
goto yy224;
yy228:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy226;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy227;
if (yych <= '-')
goto yy236;
goto yy227;
} else {
if (yych <= 0xDF)
goto yy229;
if (yych <= 0xE0)
goto yy230;
goto yy231;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy232;
if (yych <= 0xEF)
goto yy231;
goto yy233;
} else {
if (yych <= 0xF3)
goto yy234;
if (yych <= 0xF4)
goto yy235;
goto yy227;
}
}
yy229:
yych = *++p;
if (yych <= 0x7F)
goto yy227;
if (yych <= 0xBF)
goto yy226;
goto yy227;
yy230:
yych = *++p;
if (yych <= 0x9F)
goto yy227;
if (yych <= 0xBF)
goto yy229;
goto yy227;
yy231:
yych = *++p;
if (yych <= 0x7F)
goto yy227;
if (yych <= 0xBF)
goto yy229;
goto yy227;
yy232:
yych = *++p;
if (yych <= 0x7F)
goto yy227;
if (yych <= 0x9F)
goto yy229;
goto yy227;
yy233:
yych = *++p;
if (yych <= 0x8F)
goto yy227;
if (yych <= 0xBF)
goto yy231;
goto yy227;
yy234:
yych = *++p;
if (yych <= 0x7F)
goto yy227;
if (yych <= 0xBF)
goto yy231;
goto yy227;
yy235:
yych = *++p;
if (yych <= 0x7F)
goto yy227;
if (yych <= 0x8F)
goto yy231;
goto yy227;
yy236:
yych = *++p;
if (yych <= 0xE0) {
if (yych <= '>') {
if (yych <= 0x00)
goto yy227;
if (yych <= '=')
goto yy226;
} else {
if (yych <= 0x7F)
goto yy226;
if (yych <= 0xC1)
goto yy227;
if (yych <= 0xDF)
goto yy229;
goto yy230;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy232;
goto yy231;
} else {
if (yych <= 0xF0)
goto yy233;
if (yych <= 0xF3)
goto yy234;
if (yych <= 0xF4)
goto yy235;
goto yy227;
}
}
++p;
{ return (bufsize_t)(p - start); }
}
}
bufsize_t _scan_html_pi(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, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 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, 128, 128, 128, 128, 128, 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 (yybm[0 + yych] & 128) {
goto yy240;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy238;
if (yych <= '?')
goto yy243;
} else {
if (yych <= 0xDF)
goto yy244;
if (yych <= 0xE0)
goto yy245;
goto yy246;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy247;
if (yych <= 0xEF)
goto yy246;
goto yy248;
} else {
if (yych <= 0xF3)
goto yy249;
if (yych <= 0xF4)
goto yy250;
}
}
yy238:
++p;
yy239 : { return 0; }
yy240:
yyaccept = 0;
yych = *(marker = ++p);
yy241:
if (yybm[0 + yych] & 128) {
goto yy240;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy242;
if (yych <= '?')
goto yy251;
} else {
if (yych <= 0xDF)
goto yy253;
if (yych <= 0xE0)
goto yy254;
goto yy255;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy256;
if (yych <= 0xEF)
goto yy255;
goto yy257;
} else {
if (yych <= 0xF3)
goto yy258;
if (yych <= 0xF4)
goto yy259;
}
}
yy242 : { return (bufsize_t)(p - start); }
yy243:
yyaccept = 1;
yych = *(marker = ++p);
if (yych <= '?') {
if (yych <= 0x00)
goto yy239;
if (yych <= '=')
goto yy241;
if (yych <= '>')
goto yy239;
goto yy240;
} else {
if (yych <= 0x7F)
goto yy241;
if (yych <= 0xC1)
goto yy239;
if (yych <= 0xF4)
goto yy241;
goto yy239;
}
yy244:
yych = *++p;
if (yych <= 0x7F)
goto yy239;
if (yych <= 0xBF)
goto yy240;
goto yy239;
yy245:
yyaccept = 1;
yych = *(marker = ++p);
if (yych <= 0x9F)
goto yy239;
if (yych <= 0xBF)
goto yy253;
goto yy239;
yy246:
yyaccept = 1;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy239;
if (yych <= 0xBF)
goto yy253;
goto yy239;
yy247:
yyaccept = 1;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy239;
if (yych <= 0x9F)
goto yy253;
goto yy239;
yy248:
yyaccept = 1;
yych = *(marker = ++p);
if (yych <= 0x8F)
goto yy239;
if (yych <= 0xBF)
goto yy255;
goto yy239;
yy249:
yyaccept = 1;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy239;
if (yych <= 0xBF)
goto yy255;
goto yy239;
yy250:
yyaccept = 1;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy239;
if (yych <= 0x8F)
goto yy255;
goto yy239;
yy251:
yych = *++p;
if (yych <= 0xE0) {
if (yych <= '>') {
if (yych <= 0x00)
goto yy252;
if (yych <= '=')
goto yy240;
} else {
if (yych <= 0x7F)
goto yy240;
if (yych <= 0xC1)
goto yy252;
if (yych <= 0xDF)
goto yy253;
goto yy254;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy256;
goto yy255;
} else {
if (yych <= 0xF0)
goto yy257;
if (yych <= 0xF3)
goto yy258;
if (yych <= 0xF4)
goto yy259;
}
}
yy252:
p = marker;
if (yyaccept == 0) {
goto yy242;
} else {
goto yy239;
}
yy253:
yych = *++p;
if (yych <= 0x7F)
goto yy252;
if (yych <= 0xBF)
goto yy240;
goto yy252;
yy254:
yych = *++p;
if (yych <= 0x9F)
goto yy252;
if (yych <= 0xBF)
goto yy253;
goto yy252;
yy255:
yych = *++p;
if (yych <= 0x7F)
goto yy252;
if (yych <= 0xBF)
goto yy253;
goto yy252;
yy256:
yych = *++p;
if (yych <= 0x7F)
goto yy252;
if (yych <= 0x9F)
goto yy253;
goto yy252;
yy257:
yych = *++p;
if (yych <= 0x8F)
goto yy252;
if (yych <= 0xBF)
goto yy255;
goto yy252;
yy258:
yych = *++p;
if (yych <= 0x7F)
goto yy252;
if (yych <= 0xBF)
goto yy255;
goto yy252;
yy259:
yych = *++p;
if (yych <= 0x7F)
goto yy252;
if (yych <= 0x8F)
goto yy255;
goto yy252;
}
}
bufsize_t _scan_html_declaration(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, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 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, 64, 64, 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, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 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 (yych <= '@')
goto yy261;
if (yych <= 'Z')
goto yy263;
yy261:
++p;
yy262 : { return 0; }
yy263:
yyaccept = 0;
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy266;
}
if (yych <= 0x08)
goto yy262;
if (yych <= '\r')
goto yy264;
if (yych != ' ')
goto yy262;
yy264:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy264;
}
if (yych <= 0xED) {
if (yych <= 0xDF) {
if (yych >= 0xC2)
goto yy268;
} else {
if (yych <= 0xE0)
goto yy269;
if (yych <= 0xEC)
goto yy270;
goto yy271;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy270;
goto yy272;
} else {
if (yych <= 0xF3)
goto yy273;
if (yych <= 0xF4)
goto yy274;
}
}
yy265 : { return (bufsize_t)(p - start); }
yy266:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy266;
}
if (yych <= 0x08)
goto yy267;
if (yych <= '\r')
goto yy264;
if (yych == ' ')
goto yy264;
yy267:
p = marker;
if (yyaccept == 0) {
goto yy262;
} else {
goto yy265;
}
yy268:
yych = *++p;
if (yych <= 0x7F)
goto yy267;
if (yych <= 0xBF)
goto yy264;
goto yy267;
yy269:
yych = *++p;
if (yych <= 0x9F)
goto yy267;
if (yych <= 0xBF)
goto yy268;
goto yy267;
yy270:
yych = *++p;
if (yych <= 0x7F)
goto yy267;
if (yych <= 0xBF)
goto yy268;
goto yy267;
yy271:
yych = *++p;
if (yych <= 0x7F)
goto yy267;
if (yych <= 0x9F)
goto yy268;
goto yy267;
yy272:
yych = *++p;
if (yych <= 0x8F)
goto yy267;
if (yych <= 0xBF)
goto yy270;
goto yy267;
yy273:
yych = *++p;
if (yych <= 0x7F)
goto yy267;
if (yych <= 0xBF)
goto yy270;
goto yy267;
yy274:
yych = *++p;
if (yych <= 0x7F)
goto yy267;
if (yych <= 0x8F)
goto yy270;
goto yy267;
}
}
bufsize_t _scan_html_cdata(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, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 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 == 'C')
goto yy277;
if (yych == 'c')
goto yy277;
++p;
yy276 : { return 0; }
yy277:
yyaccept = 0;
yych = *(marker = ++p);
if (yych == 'D')
goto yy278;
if (yych != 'd')
goto yy276;
yy278:
yych = *++p;
if (yych == 'A')
goto yy280;
if (yych == 'a')
goto yy280;
yy279:
p = marker;
if (yyaccept == 0) {
goto yy276;
} else {
goto yy284;
}
yy280:
yych = *++p;
if (yych == 'T')
goto yy281;
if (yych != 't')
goto yy279;
yy281:
yych = *++p;
if (yych == 'A')
goto yy282;
if (yych != 'a')
goto yy279;
yy282:
yych = *++p;
if (yych != '[')
goto yy279;
yy283:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy283;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy284;
if (yych <= ']')
goto yy285;
} else {
if (yych <= 0xDF)
goto yy286;
if (yych <= 0xE0)
goto yy287;
goto yy288;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy289;
if (yych <= 0xEF)
goto yy288;
goto yy290;
} else {
if (yych <= 0xF3)
goto yy291;
if (yych <= 0xF4)
goto yy292;
}
}
yy284 : { return (bufsize_t)(p - start); }
yy285:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy283;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy279;
if (yych <= ']')
goto yy293;
goto yy279;
} else {
if (yych <= 0xDF)
goto yy286;
if (yych <= 0xE0)
goto yy287;
goto yy288;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy289;
if (yych <= 0xEF)
goto yy288;
goto yy290;
} else {
if (yych <= 0xF3)
goto yy291;
if (yych <= 0xF4)
goto yy292;
goto yy279;
}
}
yy286:
yych = *++p;
if (yych <= 0x7F)
goto yy279;
if (yych <= 0xBF)
goto yy283;
goto yy279;
yy287:
yych = *++p;
if (yych <= 0x9F)
goto yy279;
if (yych <= 0xBF)
goto yy286;
goto yy279;
yy288:
yych = *++p;
if (yych <= 0x7F)
goto yy279;
if (yych <= 0xBF)
goto yy286;
goto yy279;
yy289:
yych = *++p;
if (yych <= 0x7F)
goto yy279;
if (yych <= 0x9F)
goto yy286;
goto yy279;
yy290:
yych = *++p;
if (yych <= 0x8F)
goto yy279;
if (yych <= 0xBF)
goto yy288;
goto yy279;
yy291:
yych = *++p;
if (yych <= 0x7F)
goto yy279;
if (yych <= 0xBF)
goto yy288;
goto yy279;
yy292:
yych = *++p;
if (yych <= 0x7F)
goto yy279;
if (yych <= 0x8F)
goto yy288;
goto yy279;
yy293:
yych = *++p;
if (yych <= 0xE0) {
if (yych <= '>') {
if (yych <= 0x00)
goto yy279;
if (yych <= '=')
goto yy283;
goto yy279;
} else {
if (yych <= 0x7F)
goto yy283;
if (yych <= 0xC1)
goto yy279;
if (yych <= 0xDF)
goto yy286;
goto yy287;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy289;
goto yy288;
} else {
if (yych <= 0xF0)
goto yy290;
if (yych <= 0xF3)
goto yy291;
if (yych <= 0xF4)
goto yy292;
goto yy279;
}
}
}
}
// 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;
{
unsigned char yych;
yych = *p;
if (yych == '<')
goto yy296;
++p;
yy295 : { return 0; }
yy296:
yych = *(marker = ++p);
switch (yych) {
case '!':
goto yy297;
case '/':
goto yy299;
case '?':
goto yy300;
case 'A':
case 'a':
goto yy301;
case 'B':
case 'b':
goto yy302;
case 'C':
case 'c':
goto yy303;
case 'D':
case 'd':
goto yy304;
case 'F':
case 'f':
goto yy305;
case 'H':
case 'h':
goto yy306;
case 'I':
case 'i':
goto yy307;
case 'L':
case 'l':
goto yy308;
case 'M':
case 'm':
goto yy309;
case 'N':
case 'n':
goto yy310;
case 'O':
case 'o':
goto yy311;
case 'P':
case 'p':
goto yy312;
case 'S':
case 's':
goto yy313;
case 'T':
case 't':
goto yy314;
case 'U':
case 'u':
goto yy315;
default:
goto yy295;
}
yy297:
yych = *++p;
if (yych <= '@') {
if (yych == '-')
goto yy316;
} else {
if (yych <= 'Z')
goto yy317;
if (yych <= '[')
goto yy318;
}
yy298:
p = marker;
goto yy295;
yy299:
yych = *++p;
switch (yych) {
case 'A':
case 'a':
goto yy301;
case 'B':
case 'b':
goto yy302;
case 'C':
case 'c':
goto yy303;
case 'D':
case 'd':
goto yy304;
case 'F':
case 'f':
goto yy305;
case 'H':
case 'h':
goto yy306;
case 'I':
case 'i':
goto yy307;
case 'L':
case 'l':
goto yy308;
case 'M':
case 'm':
goto yy309;
case 'N':
case 'n':
goto yy310;
case 'O':
case 'o':
goto yy311;
case 'P':
case 'p':
goto yy319;
case 'S':
case 's':
goto yy320;
case 'T':
case 't':
goto yy321;
case 'U':
case 'u':
goto yy315;
default:
goto yy298;
}
yy300:
++p;
{ return 3; }
yy301:
yych = *++p;
if (yych <= 'S') {
if (yych <= 'D') {
if (yych <= 'C')
goto yy298;
goto yy322;
} else {
if (yych <= 'Q')
goto yy298;
if (yych <= 'R')
goto yy323;
goto yy324;
}
} else {
if (yych <= 'q') {
if (yych == 'd')
goto yy322;
goto yy298;
} else {
if (yych <= 'r')
goto yy323;
if (yych <= 's')
goto yy324;
goto yy298;
}
}
yy302:
yych = *++p;
if (yych <= 'O') {
if (yych <= 'K') {
if (yych == 'A')
goto yy325;
goto yy298;
} else {
if (yych <= 'L')
goto yy326;
if (yych <= 'N')
goto yy298;
goto yy327;
}
} else {
if (yych <= 'k') {
if (yych == 'a')
goto yy325;
goto yy298;
} else {
if (yych <= 'l')
goto yy326;
if (yych == 'o')
goto yy327;
goto yy298;
}
}
yy303:
yych = *++p;
if (yych <= 'O') {
if (yych <= 'D') {
if (yych == 'A')
goto yy328;
goto yy298;
} else {
if (yych <= 'E')
goto yy329;
if (yych <= 'N')
goto yy298;
goto yy330;
}
} else {
if (yych <= 'd') {
if (yych == 'a')
goto yy328;
goto yy298;
} else {
if (yych <= 'e')
goto yy329;
if (yych == 'o')
goto yy330;
goto yy298;
}
}
yy304:
yych = *++p;
switch (yych) {
case 'D':
case 'L':
case 'T':
case 'd':
case 'l':
case 't':
goto yy331;
case 'E':
case 'e':
goto yy332;
case 'I':
case 'i':
goto yy333;
default:
goto yy298;
}
yy305:
yych = *++p;
if (yych <= 'R') {
if (yych <= 'N') {
if (yych == 'I')
goto yy334;
goto yy298;
} else {
if (yych <= 'O')
goto yy335;
if (yych <= 'Q')
goto yy298;
goto yy336;
}
} else {
if (yych <= 'n') {
if (yych == 'i')
goto yy334;
goto yy298;
} else {
if (yych <= 'o')
goto yy335;
if (yych == 'r')
goto yy336;
goto yy298;
}
}
yy306:
yych = *++p;
if (yych <= 'S') {
if (yych <= 'D') {
if (yych <= '0')
goto yy298;
if (yych <= '6')
goto yy331;
goto yy298;
} else {
if (yych <= 'E')
goto yy337;
if (yych == 'R')
goto yy331;
goto yy298;
}
} else {
if (yych <= 'q') {
if (yych <= 'T')
goto yy338;
if (yych == 'e')
goto yy337;
goto yy298;
} else {
if (yych <= 'r')
goto yy331;
if (yych == 't')
goto yy338;
goto yy298;
}
}
yy307:
yych = *++p;
if (yych == 'F')
goto yy339;
if (yych == 'f')
goto yy339;
goto yy298;
yy308:
yych = *++p;
if (yych <= 'I') {
if (yych == 'E')
goto yy340;
if (yych <= 'H')
goto yy298;
goto yy341;
} else {
if (yych <= 'e') {
if (yych <= 'd')
goto yy298;
goto yy340;
} else {
if (yych == 'i')
goto yy341;
goto yy298;
}
}
yy309:
yych = *++p;
if (yych <= 'E') {
if (yych == 'A')
goto yy342;
if (yych <= 'D')
goto yy298;
goto yy343;
} else {
if (yych <= 'a') {
if (yych <= '`')
goto yy298;
goto yy342;
} else {
if (yych == 'e')
goto yy343;
goto yy298;
}
}
yy310:
yych = *++p;
if (yych <= 'O') {
if (yych == 'A')
goto yy344;
if (yych <= 'N')
goto yy298;
goto yy345;
} else {
if (yych <= 'a') {
if (yych <= '`')
goto yy298;
goto yy344;
} else {
if (yych == 'o')
goto yy345;
goto yy298;
}
}
yy311:
yych = *++p;
if (yych <= 'P') {
if (yych == 'L')
goto yy331;
if (yych <= 'O')
goto yy298;
goto yy346;
} else {
if (yych <= 'l') {
if (yych <= 'k')
goto yy298;
goto yy331;
} else {
if (yych == 'p')
goto yy346;
goto yy298;
}
}
yy312:
yych = *++p;
if (yych <= '>') {
if (yych <= ' ') {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
if (yych <= 0x1F)
goto yy298;
goto yy347;
} else {
if (yych == '/')
goto yy348;
if (yych <= '=')
goto yy298;
goto yy347;
}
} else {
if (yych <= 'R') {
if (yych == 'A')
goto yy349;
if (yych <= 'Q')
goto yy298;
goto yy350;
} else {
if (yych <= 'a') {
if (yych <= '`')
goto yy298;
goto yy349;
} else {
if (yych == 'r')
goto yy350;
goto yy298;
}
}
}
yy313:
yych = *++p;
switch (yych) {
case 'C':
case 'c':
goto yy351;
case 'E':
case 'e':
goto yy352;
case 'O':
case 'o':
goto yy353;
case 'T':
case 't':
goto yy354;
case 'U':
case 'u':
goto yy355;
default:
goto yy298;
}
yy314:
yych = *++p;
switch (yych) {
case 'A':
case 'a':
goto yy356;
case 'B':
case 'b':
goto yy357;
case 'D':
case 'd':
goto yy331;
case 'E':
case 'e':
goto yy358;
case 'F':
case 'f':
goto yy359;
case 'H':
case 'h':
goto yy360;
case 'I':
case 'i':
goto yy361;
case 'R':
case 'r':
goto yy362;
default:
goto yy298;
}
yy315:
yych = *++p;
if (yych == 'L')
goto yy331;
if (yych == 'l')
goto yy331;
goto yy298;
yy316:
yych = *++p;
if (yych == '-')
goto yy363;
goto yy298;
yy317:
++p;
{ return 4; }
yy318:
yych = *++p;
if (yych == 'C')
goto yy364;
if (yych == 'c')
goto yy364;
goto yy298;
yy319:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= '@') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'A')
goto yy349;
if (yych == 'a')
goto yy349;
goto yy298;
}
}
yy320:
yych = *++p;
if (yych <= 'U') {
if (yych <= 'N') {
if (yych == 'E')
goto yy352;
goto yy298;
} else {
if (yych <= 'O')
goto yy353;
if (yych <= 'T')
goto yy298;
goto yy355;
}
} else {
if (yych <= 'n') {
if (yych == 'e')
goto yy352;
goto yy298;
} else {
if (yych <= 'o')
goto yy353;
if (yych == 'u')
goto yy355;
goto yy298;
}
}
yy321:
yych = *++p;
switch (yych) {
case 'A':
case 'a':
goto yy356;
case 'B':
case 'b':
goto yy357;
case 'D':
case 'd':
goto yy331;
case 'F':
case 'f':
goto yy359;
case 'H':
case 'h':
goto yy360;
case 'I':
case 'i':
goto yy361;
case 'R':
case 'r':
goto yy362;
default:
goto yy298;
}
yy322:
yych = *++p;
if (yych == 'D')
goto yy365;
if (yych == 'd')
goto yy365;
goto yy298;
yy323:
yych = *++p;
if (yych == 'T')
goto yy366;
if (yych == 't')
goto yy366;
goto yy298;
yy324:
yych = *++p;
if (yych == 'I')
goto yy367;
if (yych == 'i')
goto yy367;
goto yy298;
yy325:
yych = *++p;
if (yych == 'S')
goto yy368;
if (yych == 's')
goto yy368;
goto yy298;
yy326:
yych = *++p;
if (yych == 'O')
goto yy369;
if (yych == 'o')
goto yy369;
goto yy298;
yy327:
yych = *++p;
if (yych == 'D')
goto yy370;
if (yych == 'd')
goto yy370;
goto yy298;
yy328:
yych = *++p;
if (yych == 'P')
goto yy371;
if (yych == 'p')
goto yy371;
goto yy298;
yy329:
yych = *++p;
if (yych == 'N')
goto yy372;
if (yych == 'n')
goto yy372;
goto yy298;
yy330:
yych = *++p;
if (yych == 'L')
goto yy373;
if (yych == 'l')
goto yy373;
goto yy298;
yy331:
yych = *++p;
if (yych <= ' ') {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
if (yych <= 0x1F)
goto yy298;
goto yy347;
} else {
if (yych <= '/') {
if (yych <= '.')
goto yy298;
goto yy348;
} else {
if (yych == '>')
goto yy347;
goto yy298;
}
}
yy332:
yych = *++p;
if (yych == 'T')
goto yy374;
if (yych == 't')
goto yy374;
goto yy298;
yy333:
yych = *++p;
if (yych <= 'V') {
if (yych <= 'Q') {
if (yych == 'A')
goto yy375;
goto yy298;
} else {
if (yych <= 'R')
goto yy331;
if (yych <= 'U')
goto yy298;
goto yy331;
}
} else {
if (yych <= 'q') {
if (yych == 'a')
goto yy375;
goto yy298;
} else {
if (yych <= 'r')
goto yy331;
if (yych == 'v')
goto yy331;
goto yy298;
}
}
yy334:
yych = *++p;
if (yych <= 'G') {
if (yych == 'E')
goto yy376;
if (yych <= 'F')
goto yy298;
goto yy377;
} else {
if (yych <= 'e') {
if (yych <= 'd')
goto yy298;
goto yy376;
} else {
if (yych == 'g')
goto yy377;
goto yy298;
}
}
yy335:
yych = *++p;
if (yych <= 'R') {
if (yych == 'O')
goto yy372;
if (yych <= 'Q')
goto yy298;
goto yy378;
} else {
if (yych <= 'o') {
if (yych <= 'n')
goto yy298;
goto yy372;
} else {
if (yych == 'r')
goto yy378;
goto yy298;
}
}
yy336:
yych = *++p;
if (yych == 'A')
goto yy379;
if (yych == 'a')
goto yy379;
goto yy298;
yy337:
yych = *++p;
if (yych == 'A')
goto yy380;
if (yych == 'a')
goto yy380;
goto yy298;
yy338:
yych = *++p;
if (yych == 'M')
goto yy315;
if (yych == 'm')
goto yy315;
goto yy298;
yy339:
yych = *++p;
if (yych == 'R')
goto yy381;
if (yych == 'r')
goto yy381;
goto yy298;
yy340:
yych = *++p;
if (yych == 'G')
goto yy382;
if (yych == 'g')
goto yy382;
goto yy298;
yy341:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= 'M') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'N')
goto yy383;
if (yych == 'n')
goto yy383;
goto yy298;
}
}
yy342:
yych = *++p;
if (yych == 'I')
goto yy384;
if (yych == 'i')
goto yy384;
goto yy298;
yy343:
yych = *++p;
if (yych == 'N')
goto yy385;
if (yych == 'n')
goto yy385;
goto yy298;
yy344:
yych = *++p;
if (yych == 'V')
goto yy331;
if (yych == 'v')
goto yy331;
goto yy298;
yy345:
yych = *++p;
if (yych == 'F')
goto yy386;
if (yych == 'f')
goto yy386;
goto yy298;
yy346:
yych = *++p;
if (yych == 'T')
goto yy387;
if (yych == 't')
goto yy387;
goto yy298;
yy347:
++p;
{ return 6; }
yy348:
yych = *++p;
if (yych == '>')
goto yy347;
goto yy298;
yy349:
yych = *++p;
if (yych == 'R')
goto yy388;
if (yych == 'r')
goto yy388;
goto yy298;
yy350:
yych = *++p;
if (yych == 'E')
goto yy389;
if (yych == 'e')
goto yy389;
goto yy298;
yy351:
yych = *++p;
if (yych == 'R')
goto yy390;
if (yych == 'r')
goto yy390;
goto yy298;
yy352:
yych = *++p;
if (yych == 'C')
goto yy371;
if (yych == 'c')
goto yy371;
goto yy298;
yy353:
yych = *++p;
if (yych == 'U')
goto yy391;
if (yych == 'u')
goto yy391;
goto yy298;
yy354:
yych = *++p;
if (yych == 'Y')
goto yy392;
if (yych == 'y')
goto yy392;
goto yy298;
yy355:
yych = *++p;
if (yych == 'M')
goto yy393;
if (yych == 'm')
goto yy393;
goto yy298;
yy356:
yych = *++p;
if (yych == 'B')
goto yy394;
if (yych == 'b')
goto yy394;
goto yy298;
yy357:
yych = *++p;
if (yych == 'O')
goto yy327;
if (yych == 'o')
goto yy327;
goto yy298;
yy358:
yych = *++p;
if (yych == 'X')
goto yy395;
if (yych == 'x')
goto yy395;
goto yy298;
yy359:
yych = *++p;
if (yych == 'O')
goto yy396;
if (yych == 'o')
goto yy396;
goto yy298;
yy360:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= 'D') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'E')
goto yy397;
if (yych == 'e')
goto yy397;
goto yy298;
}
}
yy361:
yych = *++p;
if (yych == 'T')
goto yy394;
if (yych == 't')
goto yy394;
goto yy298;
yy362:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= '@') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'A')
goto yy398;
if (yych == 'a')
goto yy398;
goto yy298;
}
}
yy363:
++p;
{ return 2; }
yy364:
yych = *++p;
if (yych == 'D')
goto yy399;
if (yych == 'd')
goto yy399;
goto yy298;
yy365:
yych = *++p;
if (yych == 'R')
goto yy400;
if (yych == 'r')
goto yy400;
goto yy298;
yy366:
yych = *++p;
if (yych == 'I')
goto yy401;
if (yych == 'i')
goto yy401;
goto yy298;
yy367:
yych = *++p;
if (yych == 'D')
goto yy402;
if (yych == 'd')
goto yy402;
goto yy298;
yy368:
yych = *++p;
if (yych == 'E')
goto yy403;
if (yych == 'e')
goto yy403;
goto yy298;
yy369:
yych = *++p;
if (yych == 'C')
goto yy404;
if (yych == 'c')
goto yy404;
goto yy298;
yy370:
yych = *++p;
if (yych == 'Y')
goto yy331;
if (yych == 'y')
goto yy331;
goto yy298;
yy371:
yych = *++p;
if (yych == 'T')
goto yy405;
if (yych == 't')
goto yy405;
goto yy298;
yy372:
yych = *++p;
if (yych == 'T')
goto yy406;
if (yych == 't')
goto yy406;
goto yy298;
yy373:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= 'F') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'G')
goto yy407;
if (yych == 'g')
goto yy407;
goto yy298;
}
}
yy374:
yych = *++p;
if (yych == 'A')
goto yy408;
if (yych == 'a')
goto yy408;
goto yy298;
yy375:
yych = *++p;
if (yych == 'L')
goto yy409;
if (yych == 'l')
goto yy409;
goto yy298;
yy376:
yych = *++p;
if (yych == 'L')
goto yy410;
if (yych == 'l')
goto yy410;
goto yy298;
yy377:
yych = *++p;
if (yych <= 'U') {
if (yych == 'C')
goto yy411;
if (yych <= 'T')
goto yy298;
goto yy412;
} else {
if (yych <= 'c') {
if (yych <= 'b')
goto yy298;
goto yy411;
} else {
if (yych == 'u')
goto yy412;
goto yy298;
}
}
yy378:
yych = *++p;
if (yych == 'M')
goto yy331;
if (yych == 'm')
goto yy331;
goto yy298;
yy379:
yych = *++p;
if (yych == 'M')
goto yy413;
if (yych == 'm')
goto yy413;
goto yy298;
yy380:
yych = *++p;
if (yych == 'D')
goto yy414;
if (yych == 'd')
goto yy414;
goto yy298;
yy381:
yych = *++p;
if (yych == 'A')
goto yy415;
if (yych == 'a')
goto yy415;
goto yy298;
yy382:
yych = *++p;
if (yych == 'E')
goto yy416;
if (yych == 'e')
goto yy416;
goto yy298;
yy383:
yych = *++p;
if (yych == 'K')
goto yy331;
if (yych == 'k')
goto yy331;
goto yy298;
yy384:
yych = *++p;
if (yych == 'N')
goto yy331;
if (yych == 'n')
goto yy331;
goto yy298;
yy385:
yych = *++p;
if (yych == 'U')
goto yy417;
if (yych == 'u')
goto yy417;
goto yy298;
yy386:
yych = *++p;
if (yych == 'R')
goto yy418;
if (yych == 'r')
goto yy418;
goto yy298;
yy387:
yych = *++p;
if (yych <= 'I') {
if (yych == 'G')
goto yy407;
if (yych <= 'H')
goto yy298;
goto yy419;
} else {
if (yych <= 'g') {
if (yych <= 'f')
goto yy298;
goto yy407;
} else {
if (yych == 'i')
goto yy419;
goto yy298;
}
}
yy388:
yych = *++p;
if (yych == 'A')
goto yy378;
if (yych == 'a')
goto yy378;
goto yy298;
yy389:
yych = *++p;
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy420;
goto yy298;
} else {
if (yych <= ' ')
goto yy420;
if (yych == '>')
goto yy420;
goto yy298;
}
yy390:
yych = *++p;
if (yych == 'I')
goto yy421;
if (yych == 'i')
goto yy421;
goto yy298;
yy391:
yych = *++p;
if (yych == 'R')
goto yy422;
if (yych == 'r')
goto yy422;
goto yy298;
yy392:
yych = *++p;
if (yych == 'L')
goto yy350;
if (yych == 'l')
goto yy350;
goto yy298;
yy393:
yych = *++p;
if (yych == 'M')
goto yy423;
if (yych == 'm')
goto yy423;
goto yy298;
yy394:
yych = *++p;
if (yych == 'L')
goto yy402;
if (yych == 'l')
goto yy402;
goto yy298;
yy395:
yych = *++p;
if (yych == 'T')
goto yy424;
if (yych == 't')
goto yy424;
goto yy298;
yy396:
yych = *++p;
if (yych == 'O')
goto yy425;
if (yych == 'o')
goto yy425;
goto yy298;
yy397:
yych = *++p;
if (yych == 'A')
goto yy426;
if (yych == 'a')
goto yy426;
goto yy298;
yy398:
yych = *++p;
if (yych == 'C')
goto yy383;
if (yych == 'c')
goto yy383;
goto yy298;
yy399:
yych = *++p;
if (yych == 'A')
goto yy427;
if (yych == 'a')
goto yy427;
goto yy298;
yy400:
yych = *++p;
if (yych == 'E')
goto yy428;
if (yych == 'e')
goto yy428;
goto yy298;
yy401:
yych = *++p;
if (yych == 'C')
goto yy394;
if (yych == 'c')
goto yy394;
goto yy298;
yy402:
yych = *++p;
if (yych == 'E')
goto yy331;
if (yych == 'e')
goto yy331;
goto yy298;
yy403:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= 'E') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'F')
goto yy429;
if (yych == 'f')
goto yy429;
goto yy298;
}
}
yy404:
yych = *++p;
if (yych == 'K')
goto yy430;
if (yych == 'k')
goto yy430;
goto yy298;
yy405:
yych = *++p;
if (yych == 'I')
goto yy419;
if (yych == 'i')
goto yy419;
goto yy298;
yy406:
yych = *++p;
if (yych == 'E')
goto yy431;
if (yych == 'e')
goto yy431;
goto yy298;
yy407:
yych = *++p;
if (yych == 'R')
goto yy432;
if (yych == 'r')
goto yy432;
goto yy298;
yy408:
yych = *++p;
if (yych == 'I')
goto yy433;
if (yych == 'i')
goto yy433;
goto yy298;
yy409:
yych = *++p;
if (yych == 'O')
goto yy434;
if (yych == 'o')
goto yy434;
goto yy298;
yy410:
yych = *++p;
if (yych == 'D')
goto yy435;
if (yych == 'd')
goto yy435;
goto yy298;
yy411:
yych = *++p;
if (yych == 'A')
goto yy328;
if (yych == 'a')
goto yy328;
goto yy298;
yy412:
yych = *++p;
if (yych == 'R')
goto yy402;
if (yych == 'r')
goto yy402;
goto yy298;
yy413:
yych = *++p;
if (yych == 'E')
goto yy436;
if (yych == 'e')
goto yy436;
goto yy298;
yy414:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= 'D') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'E')
goto yy431;
if (yych == 'e')
goto yy431;
goto yy298;
}
}
yy415:
yych = *++p;
if (yych == 'M')
goto yy402;
if (yych == 'm')
goto yy402;
goto yy298;
yy416:
yych = *++p;
if (yych == 'N')
goto yy426;
if (yych == 'n')
goto yy426;
goto yy298;
yy417:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= 'H') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'I')
goto yy437;
if (yych == 'i')
goto yy437;
goto yy298;
}
}
yy418:
yych = *++p;
if (yych == 'A')
goto yy438;
if (yych == 'a')
goto yy438;
goto yy298;
yy419:
yych = *++p;
if (yych == 'O')
goto yy384;
if (yych == 'o')
goto yy384;
goto yy298;
yy420:
++p;
{ return 1; }
yy421:
yych = *++p;
if (yych == 'P')
goto yy439;
if (yych == 'p')
goto yy439;
goto yy298;
yy422:
yych = *++p;
if (yych == 'C')
goto yy402;
if (yych == 'c')
goto yy402;
goto yy298;
yy423:
yych = *++p;
if (yych == 'A')
goto yy440;
if (yych == 'a')
goto yy440;
goto yy298;
yy424:
yych = *++p;
if (yych == 'A')
goto yy441;
if (yych == 'a')
goto yy441;
goto yy298;
yy425:
yych = *++p;
if (yych == 'T')
goto yy331;
if (yych == 't')
goto yy331;
goto yy298;
yy426:
yych = *++p;
if (yych == 'D')
goto yy331;
if (yych == 'd')
goto yy331;
goto yy298;
yy427:
yych = *++p;
if (yych == 'T')
goto yy442;
if (yych == 't')
goto yy442;
goto yy298;
yy428:
yych = *++p;
if (yych == 'S')
goto yy443;
if (yych == 's')
goto yy443;
goto yy298;
yy429:
yych = *++p;
if (yych == 'O')
goto yy444;
if (yych == 'o')
goto yy444;
goto yy298;
yy430:
yych = *++p;
if (yych == 'Q')
goto yy445;
if (yych == 'q')
goto yy445;
goto yy298;
yy431:
yych = *++p;
if (yych == 'R')
goto yy331;
if (yych == 'r')
goto yy331;
goto yy298;
yy432:
yych = *++p;
if (yych == 'O')
goto yy446;
if (yych == 'o')
goto yy446;
goto yy298;
yy433:
yych = *++p;
if (yych == 'L')
goto yy443;
if (yych == 'l')
goto yy443;
goto yy298;
yy434:
yych = *++p;
if (yych == 'G')
goto yy331;
if (yych == 'g')
goto yy331;
goto yy298;
yy435:
yych = *++p;
if (yych == 'S')
goto yy447;
if (yych == 's')
goto yy447;
goto yy298;
yy436:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy298;
if (yych <= '\r')
goto yy347;
goto yy298;
} else {
if (yych <= ' ')
goto yy347;
if (yych <= '.')
goto yy298;
goto yy348;
}
} else {
if (yych <= 'R') {
if (yych == '>')
goto yy347;
goto yy298;
} else {
if (yych <= 'S')
goto yy447;
if (yych == 's')
goto yy447;
goto yy298;
}
}
yy437:
yych = *++p;
if (yych == 'T')
goto yy448;
if (yych == 't')
goto yy448;
goto yy298;
yy438:
yych = *++p;
if (yych == 'M')
goto yy449;
if (yych == 'm')
goto yy449;
goto yy298;
yy439:
yych = *++p;
if (yych == 'T')
goto yy389;
if (yych == 't')
goto yy389;
goto yy298;
yy440:
yych = *++p;
if (yych == 'R')
goto yy370;
if (yych == 'r')
goto yy370;
goto yy298;
yy441:
yych = *++p;
if (yych == 'R')
goto yy450;
if (yych == 'r')
goto yy450;
goto yy298;
yy442:
yych = *++p;
if (yych == 'A')
goto yy451;
if (yych == 'a')
goto yy451;
goto yy298;
yy443:
yych = *++p;
if (yych == 'S')
goto yy331;
if (yych == 's')
goto yy331;
goto yy298;
yy444:
yych = *++p;
if (yych == 'N')
goto yy425;
if (yych == 'n')
goto yy425;
goto yy298;
yy445:
yych = *++p;
if (yych == 'U')
goto yy452;
if (yych == 'u')
goto yy452;
goto yy298;
yy446:
yych = *++p;
if (yych == 'U')
goto yy453;
if (yych == 'u')
goto yy453;
goto yy298;
yy447:
yych = *++p;
if (yych == 'E')
goto yy425;
if (yych == 'e')
goto yy425;
goto yy298;
yy448:
yych = *++p;
if (yych == 'E')
goto yy378;
if (yych == 'e')
goto yy378;
goto yy298;
yy449:
yych = *++p;
if (yych == 'E')
goto yy443;
if (yych == 'e')
goto yy443;
goto yy298;
yy450:
yych = *++p;
if (yych == 'E')
goto yy454;
if (yych == 'e')
goto yy454;
goto yy298;
yy451:
yych = *++p;
if (yych == '[')
goto yy455;
goto yy298;
yy452:
yych = *++p;
if (yych == 'O')
goto yy456;
if (yych == 'o')
goto yy456;
goto yy298;
yy453:
yych = *++p;
if (yych == 'P')
goto yy331;
if (yych == 'p')
goto yy331;
goto yy298;
yy454:
yych = *++p;
if (yych == 'A')
goto yy389;
if (yych == 'a')
goto yy389;
goto yy298;
yy455:
++p;
{ return 5; }
yy456:
yych = *++p;
if (yych == 'T')
goto yy402;
if (yych == 't')
goto yy402;
goto yy298;
}
}
// 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, 210, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 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 yy459;
++p;
yy458 : { return 0; }
yy459:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '@') {
if (yych != '/')
goto yy458;
} else {
if (yych <= 'Z')
goto yy461;
if (yych <= '`')
goto yy458;
if (yych <= 'z')
goto yy461;
goto yy458;
}
yych = *++p;
if (yych <= '@')
goto yy460;
if (yych <= 'Z')
goto yy462;
if (yych <= '`')
goto yy460;
if (yych <= 'z')
goto yy462;
yy460:
p = marker;
if (yyaccept == 0) {
goto yy458;
} else {
goto yy469;
}
yy461:
yych = *++p;
if (yybm[0 + yych] & 2) {
goto yy463;
}
if (yych <= '=') {
if (yych <= '.') {
if (yych == '-')
goto yy461;
goto yy460;
} else {
if (yych <= '/')
goto yy464;
if (yych <= '9')
goto yy461;
goto yy460;
}
} else {
if (yych <= 'Z') {
if (yych <= '>')
goto yy465;
if (yych <= '@')
goto yy460;
goto yy461;
} else {
if (yych <= '`')
goto yy460;
if (yych <= 'z')
goto yy461;
goto yy460;
}
}
yy462:
yych = *++p;
if (yych <= '/') {
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy460;
if (yych <= '\r')
goto yy466;
goto yy460;
} else {
if (yych <= ' ')
goto yy466;
if (yych == '-')
goto yy462;
goto yy460;
}
} else {
if (yych <= '@') {
if (yych <= '9')
goto yy462;
if (yych == '>')
goto yy465;
goto yy460;
} else {
if (yych <= 'Z')
goto yy462;
if (yych <= '`')
goto yy460;
if (yych <= 'z')
goto yy462;
goto yy460;
}
}
yy463:
yych = *++p;
if (yybm[0 + yych] & 2) {
goto yy463;
}
if (yych <= '>') {
if (yych <= '9') {
if (yych != '/')
goto yy460;
} else {
if (yych <= ':')
goto yy467;
if (yych <= '=')
goto yy460;
goto yy465;
}
} else {
if (yych <= '^') {
if (yych <= '@')
goto yy460;
if (yych <= 'Z')
goto yy467;
goto yy460;
} else {
if (yych == '`')
goto yy460;
if (yych <= 'z')
goto yy467;
goto yy460;
}
}
yy464:
yych = *++p;
if (yych != '>')
goto yy460;
yy465:
yych = *++p;
if (yybm[0 + yych] & 4) {
goto yy465;
}
if (yych <= 0x08)
goto yy460;
if (yych <= '\n')
goto yy468;
if (yych <= '\v')
goto yy460;
if (yych <= '\r')
goto yy470;
goto yy460;
yy466:
yych = *++p;
if (yych <= 0x1F) {
if (yych <= 0x08)
goto yy460;
if (yych <= '\r')
goto yy466;
goto yy460;
} else {
if (yych <= ' ')
goto yy466;
if (yych == '>')
goto yy465;
goto yy460;
}
yy467:
yych = *++p;
if (yybm[0 + yych] & 8) {
goto yy467;
}
if (yych <= ',') {
if (yych <= '\r') {
if (yych <= 0x08)
goto yy460;
goto yy471;
} else {
if (yych == ' ')
goto yy471;
goto yy460;
}
} else {
if (yych <= '<') {
if (yych <= '/')
goto yy464;
goto yy460;
} else {
if (yych <= '=')
goto yy472;
if (yych <= '>')
goto yy465;
goto yy460;
}
}
yy468:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 4) {
goto yy465;
}
if (yych <= 0x08)
goto yy469;
if (yych <= '\n')
goto yy468;
if (yych <= '\v')
goto yy469;
if (yych <= '\r')
goto yy470;
yy469 : { return 7; }
yy470:
++p;
goto yy469;
yy471:
yych = *++p;
if (yych <= '<') {
if (yych <= ' ') {
if (yych <= 0x08)
goto yy460;
if (yych <= '\r')
goto yy471;
if (yych <= 0x1F)
goto yy460;
goto yy471;
} else {
if (yych <= '/') {
if (yych <= '.')
goto yy460;
goto yy464;
} else {
if (yych == ':')
goto yy467;
goto yy460;
}
}
} else {
if (yych <= 'Z') {
if (yych <= '=')
goto yy472;
if (yych <= '>')
goto yy465;
if (yych <= '@')
goto yy460;
goto yy467;
} else {
if (yych <= '_') {
if (yych <= '^')
goto yy460;
goto yy467;
} else {
if (yych <= '`')
goto yy460;
if (yych <= 'z')
goto yy467;
goto yy460;
}
}
}
yy472:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy473;
}
if (yych <= 0xE0) {
if (yych <= '"') {
if (yych <= 0x00)
goto yy460;
if (yych <= ' ')
goto yy472;
goto yy474;
} else {
if (yych <= '\'')
goto yy475;
if (yych <= 0xC1)
goto yy460;
if (yych <= 0xDF)
goto yy476;
goto yy477;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy479;
goto yy478;
} else {
if (yych <= 0xF0)
goto yy480;
if (yych <= 0xF3)
goto yy481;
if (yych <= 0xF4)
goto yy482;
goto yy460;
}
}
yy473:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy473;
}
if (yych <= 0xE0) {
if (yych <= '=') {
if (yych <= 0x00)
goto yy460;
if (yych <= ' ')
goto yy463;
goto yy460;
} else {
if (yych <= '>')
goto yy465;
if (yych <= 0xC1)
goto yy460;
if (yych <= 0xDF)
goto yy476;
goto yy477;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy479;
goto yy478;
} else {
if (yych <= 0xF0)
goto yy480;
if (yych <= 0xF3)
goto yy481;
if (yych <= 0xF4)
goto yy482;
goto yy460;
}
}
yy474:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy474;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy460;
if (yych <= '"')
goto yy483;
goto yy460;
} else {
if (yych <= 0xDF)
goto yy484;
if (yych <= 0xE0)
goto yy485;
goto yy486;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy487;
if (yych <= 0xEF)
goto yy486;
goto yy488;
} else {
if (yych <= 0xF3)
goto yy489;
if (yych <= 0xF4)
goto yy490;
goto yy460;
}
}
yy475:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy475;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy460;
if (yych <= '\'')
goto yy483;
goto yy460;
} else {
if (yych <= 0xDF)
goto yy491;
if (yych <= 0xE0)
goto yy492;
goto yy493;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy494;
if (yych <= 0xEF)
goto yy493;
goto yy495;
} else {
if (yych <= 0xF3)
goto yy496;
if (yych <= 0xF4)
goto yy497;
goto yy460;
}
}
yy476:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy473;
goto yy460;
yy477:
yych = *++p;
if (yych <= 0x9F)
goto yy460;
if (yych <= 0xBF)
goto yy476;
goto yy460;
yy478:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy476;
goto yy460;
yy479:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0x9F)
goto yy476;
goto yy460;
yy480:
yych = *++p;
if (yych <= 0x8F)
goto yy460;
if (yych <= 0xBF)
goto yy478;
goto yy460;
yy481:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy478;
goto yy460;
yy482:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0x8F)
goto yy478;
goto yy460;
yy483:
yych = *++p;
if (yybm[0 + yych] & 2) {
goto yy463;
}
if (yych == '/')
goto yy464;
if (yych == '>')
goto yy465;
goto yy460;
yy484:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy474;
goto yy460;
yy485:
yych = *++p;
if (yych <= 0x9F)
goto yy460;
if (yych <= 0xBF)
goto yy484;
goto yy460;
yy486:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy484;
goto yy460;
yy487:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0x9F)
goto yy484;
goto yy460;
yy488:
yych = *++p;
if (yych <= 0x8F)
goto yy460;
if (yych <= 0xBF)
goto yy486;
goto yy460;
yy489:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy486;
goto yy460;
yy490:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0x8F)
goto yy486;
goto yy460;
yy491:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy475;
goto yy460;
yy492:
yych = *++p;
if (yych <= 0x9F)
goto yy460;
if (yych <= 0xBF)
goto yy491;
goto yy460;
yy493:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy491;
goto yy460;
yy494:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0x9F)
goto yy491;
goto yy460;
yy495:
yych = *++p;
if (yych <= 0x8F)
goto yy460;
if (yych <= 0xBF)
goto yy493;
goto yy460;
yy496:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0xBF)
goto yy493;
goto yy460;
yy497:
yych = *++p;
if (yych <= 0x7F)
goto yy460;
if (yych <= 0x8F)
goto yy493;
goto yy460;
}
}
// 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[] = {
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,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 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 (yych <= 0xDF) {
if (yych <= ';') {
if (yych <= 0x00)
goto yy499;
if (yych != '\n')
goto yy501;
} else {
if (yych <= '<')
goto yy502;
if (yych <= 0x7F)
goto yy501;
if (yych >= 0xC2)
goto yy503;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy504;
if (yych == 0xED)
goto yy506;
goto yy505;
} else {
if (yych <= 0xF0)
goto yy507;
if (yych <= 0xF3)
goto yy508;
if (yych <= 0xF4)
goto yy509;
}
}
yy499:
++p;
yy500 : { return 0; }
yy501:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '\n') {
if (yych <= 0x00)
goto yy500;
if (yych <= '\t')
goto yy511;
goto yy500;
} else {
if (yych <= 0x7F)
goto yy511;
if (yych <= 0xC1)
goto yy500;
if (yych <= 0xF4)
goto yy511;
goto yy500;
}
yy502:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '.') {
if (yych <= 0x00)
goto yy500;
if (yych == '\n')
goto yy500;
goto yy511;
} else {
if (yych <= 0x7F) {
if (yych <= '/')
goto yy521;
goto yy511;
} else {
if (yych <= 0xC1)
goto yy500;
if (yych <= 0xF4)
goto yy511;
goto yy500;
}
}
yy503:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy500;
if (yych <= 0xBF)
goto yy510;
goto yy500;
yy504:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x9F)
goto yy500;
if (yych <= 0xBF)
goto yy514;
goto yy500;
yy505:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy500;
if (yych <= 0xBF)
goto yy514;
goto yy500;
yy506:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy500;
if (yych <= 0x9F)
goto yy514;
goto yy500;
yy507:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x8F)
goto yy500;
if (yych <= 0xBF)
goto yy516;
goto yy500;
yy508:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy500;
if (yych <= 0xBF)
goto yy516;
goto yy500;
yy509:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy500;
if (yych <= 0x8F)
goto yy516;
goto yy500;
yy510:
yych = *++p;
yy511:
if (yybm[0 + yych] & 64) {
goto yy510;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy512;
if (yych <= '<')
goto yy513;
} else {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
goto yy516;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy517;
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
}
}
yy512:
p = marker;
if (yyaccept == 0) {
goto yy500;
} else {
goto yy534;
}
yy513:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xDF) {
if (yych <= '.') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= '/')
goto yy521;
if (yych <= 0x7F)
goto yy510;
if (yych <= 0xC1)
goto yy512;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy515;
if (yych == 0xED)
goto yy517;
goto yy516;
} else {
if (yych <= 0xF0)
goto yy518;
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
yy514:
yych = *++p;
if (yych <= 0x7F)
goto yy512;
if (yych <= 0xBF)
goto yy510;
goto yy512;
yy515:
yych = *++p;
if (yych <= 0x9F)
goto yy512;
if (yych <= 0xBF)
goto yy514;
goto yy512;
yy516:
yych = *++p;
if (yych <= 0x7F)
goto yy512;
if (yych <= 0xBF)
goto yy514;
goto yy512;
yy517:
yych = *++p;
if (yych <= 0x7F)
goto yy512;
if (yych <= 0x9F)
goto yy514;
goto yy512;
yy518:
yych = *++p;
if (yych <= 0x8F)
goto yy512;
if (yych <= 0xBF)
goto yy516;
goto yy512;
yy519:
yych = *++p;
if (yych <= 0x7F)
goto yy512;
if (yych <= 0xBF)
goto yy516;
goto yy512;
yy520:
yych = *++p;
if (yych <= 0x7F)
goto yy512;
if (yych <= 0x8F)
goto yy516;
goto yy512;
yy521:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 's') {
if (yych <= 'R') {
if (yych <= '\n') {
if (yych <= 0x00)
goto yy512;
if (yych <= '\t')
goto yy510;
goto yy512;
} else {
if (yych != 'P')
goto yy510;
}
} else {
if (yych <= 'o') {
if (yych <= 'S')
goto yy523;
if (yych <= 'T')
goto yy524;
goto yy510;
} else {
if (yych <= 'p')
goto yy522;
if (yych <= 'r')
goto yy510;
goto yy523;
}
}
} else {
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 't')
goto yy524;
if (yych <= 0x7F)
goto yy510;
goto yy512;
} else {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
goto yy516;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy517;
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy522:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'Q') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'q') {
if (yych <= 'R')
goto yy525;
goto yy510;
} else {
if (yych <= 'r')
goto yy525;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy523:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 't') {
if (yych <= 'C') {
if (yych <= '\t') {
if (yych <= 0x00)
goto yy512;
goto yy510;
} else {
if (yych <= '\n')
goto yy512;
if (yych <= 'B')
goto yy510;
goto yy526;
}
} else {
if (yych <= 'b') {
if (yych == 'T')
goto yy527;
goto yy510;
} else {
if (yych <= 'c')
goto yy526;
if (yych <= 's')
goto yy510;
goto yy527;
}
}
} else {
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x7F)
goto yy510;
goto yy512;
} else {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
goto yy516;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy517;
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy524:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'D') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'd') {
if (yych <= 'E')
goto yy528;
goto yy510;
} else {
if (yych <= 'e')
goto yy528;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy525:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'D') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'd') {
if (yych <= 'E')
goto yy529;
goto yy510;
} else {
if (yych <= 'e')
goto yy529;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy526:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'Q') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'q') {
if (yych <= 'R')
goto yy530;
goto yy510;
} else {
if (yych <= 'r')
goto yy530;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy527:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'X') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'x') {
if (yych <= 'Y')
goto yy531;
goto yy510;
} else {
if (yych <= 'y')
goto yy531;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy528:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'W') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'w') {
if (yych <= 'X')
goto yy532;
goto yy510;
} else {
if (yych <= 'x')
goto yy532;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy529:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xDF) {
if (yych <= '=') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= '>')
goto yy533;
if (yych <= 0x7F)
goto yy510;
if (yych <= 0xC1)
goto yy512;
goto yy514;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy515;
if (yych == 0xED)
goto yy517;
goto yy516;
} else {
if (yych <= 0xF0)
goto yy518;
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
yy530:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'H') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'h') {
if (yych <= 'I')
goto yy535;
goto yy510;
} else {
if (yych <= 'i')
goto yy535;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy531:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'K') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'k') {
if (yych <= 'L')
goto yy525;
goto yy510;
} else {
if (yych <= 'l')
goto yy525;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy532:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'S') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 's') {
if (yych <= 'T')
goto yy536;
goto yy510;
} else {
if (yych <= 't')
goto yy536;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy533:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy510;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy534;
if (yych <= '<')
goto yy513;
} else {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
goto yy516;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy517;
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
}
}
yy534 : { return (bufsize_t)(p - start); }
yy535:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'O') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'o') {
if (yych <= 'P')
goto yy537;
goto yy510;
} else {
if (yych <= 'p')
goto yy537;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy536:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= '@') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= '`') {
if (yych <= 'A')
goto yy538;
goto yy510;
} else {
if (yych <= 'a')
goto yy538;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy537:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'S') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 's') {
if (yych <= 'T')
goto yy529;
goto yy510;
} else {
if (yych <= 't')
goto yy529;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy538:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'Q') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'q') {
if (yych >= 'S')
goto yy510;
} else {
if (yych <= 'r')
goto yy539;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy539:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= 'D') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= 'd') {
if (yych >= 'F')
goto yy510;
} else {
if (yych <= 'e')
goto yy540;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
yy540:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy513;
}
if (yych <= 0xC1) {
if (yych <= '@') {
if (yych <= 0x00)
goto yy512;
if (yych == '\n')
goto yy512;
goto yy510;
} else {
if (yych <= '`') {
if (yych <= 'A')
goto yy529;
goto yy510;
} else {
if (yych <= 'a')
goto yy529;
if (yych <= 0x7F)
goto yy510;
goto yy512;
}
}
} else {
if (yych <= 0xED) {
if (yych <= 0xDF)
goto yy514;
if (yych <= 0xE0)
goto yy515;
if (yych <= 0xEC)
goto yy516;
goto yy517;
} else {
if (yych <= 0xF0) {
if (yych <= 0xEF)
goto yy516;
goto yy518;
} else {
if (yych <= 0xF3)
goto yy519;
if (yych <= 0xF4)
goto yy520;
goto yy512;
}
}
}
}
}
// 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[] = {
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,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 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 (yych <= 0xDF) {
if (yych <= ',') {
if (yych <= 0x00)
goto yy542;
if (yych != '\n')
goto yy544;
} else {
if (yych <= '-')
goto yy545;
if (yych <= 0x7F)
goto yy544;
if (yych >= 0xC2)
goto yy546;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy547;
if (yych == 0xED)
goto yy549;
goto yy548;
} else {
if (yych <= 0xF0)
goto yy550;
if (yych <= 0xF3)
goto yy551;
if (yych <= 0xF4)
goto yy552;
}
}
yy542:
++p;
yy543 : { return 0; }
yy544:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '\n') {
if (yych <= 0x00)
goto yy543;
if (yych <= '\t')
goto yy554;
goto yy543;
} else {
if (yych <= 0x7F)
goto yy554;
if (yych <= 0xC1)
goto yy543;
if (yych <= 0xF4)
goto yy554;
goto yy543;
}
yy545:
yyaccept = 0;
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy564;
}
if (yych <= '\n') {
if (yych <= 0x00)
goto yy543;
if (yych <= '\t')
goto yy554;
goto yy543;
} else {
if (yych <= 0x7F)
goto yy554;
if (yych <= 0xC1)
goto yy543;
if (yych <= 0xF4)
goto yy554;
goto yy543;
}
yy546:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy543;
if (yych <= 0xBF)
goto yy553;
goto yy543;
yy547:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x9F)
goto yy543;
if (yych <= 0xBF)
goto yy557;
goto yy543;
yy548:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy543;
if (yych <= 0xBF)
goto yy557;
goto yy543;
yy549:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy543;
if (yych <= 0x9F)
goto yy557;
goto yy543;
yy550:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x8F)
goto yy543;
if (yych <= 0xBF)
goto yy559;
goto yy543;
yy551:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy543;
if (yych <= 0xBF)
goto yy559;
goto yy543;
yy552:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy543;
if (yych <= 0x8F)
goto yy559;
goto yy543;
yy553:
yych = *++p;
yy554:
if (yybm[0 + yych] & 64) {
goto yy553;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy555;
if (yych <= '-')
goto yy556;
} else {
if (yych <= 0xDF)
goto yy557;
if (yych <= 0xE0)
goto yy558;
goto yy559;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy560;
if (yych <= 0xEF)
goto yy559;
goto yy561;
} else {
if (yych <= 0xF3)
goto yy562;
if (yych <= 0xF4)
goto yy563;
}
}
yy555:
p = marker;
if (yyaccept == 0) {
goto yy543;
} else {
goto yy566;
}
yy556:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy553;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy555;
if (yych <= '-')
goto yy564;
goto yy555;
} else {
if (yych <= 0xDF)
goto yy557;
if (yych <= 0xE0)
goto yy558;
goto yy559;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy560;
if (yych <= 0xEF)
goto yy559;
goto yy561;
} else {
if (yych <= 0xF3)
goto yy562;
if (yych <= 0xF4)
goto yy563;
goto yy555;
}
}
yy557:
yych = *++p;
if (yych <= 0x7F)
goto yy555;
if (yych <= 0xBF)
goto yy553;
goto yy555;
yy558:
yych = *++p;
if (yych <= 0x9F)
goto yy555;
if (yych <= 0xBF)
goto yy557;
goto yy555;
yy559:
yych = *++p;
if (yych <= 0x7F)
goto yy555;
if (yych <= 0xBF)
goto yy557;
goto yy555;
yy560:
yych = *++p;
if (yych <= 0x7F)
goto yy555;
if (yych <= 0x9F)
goto yy557;
goto yy555;
yy561:
yych = *++p;
if (yych <= 0x8F)
goto yy555;
if (yych <= 0xBF)
goto yy559;
goto yy555;
yy562:
yych = *++p;
if (yych <= 0x7F)
goto yy555;
if (yych <= 0xBF)
goto yy559;
goto yy555;
yy563:
yych = *++p;
if (yych <= 0x7F)
goto yy555;
if (yych <= 0x8F)
goto yy559;
goto yy555;
yy564:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy564;
}
if (yych <= 0xDF) {
if (yych <= '=') {
if (yych <= 0x00)
goto yy555;
if (yych == '\n')
goto yy555;
goto yy553;
} else {
if (yych <= '>')
goto yy565;
if (yych <= 0x7F)
goto yy553;
if (yych <= 0xC1)
goto yy555;
goto yy557;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy558;
if (yych == 0xED)
goto yy560;
goto yy559;
} else {
if (yych <= 0xF0)
goto yy561;
if (yych <= 0xF3)
goto yy562;
if (yych <= 0xF4)
goto yy563;
goto yy555;
}
}
yy565:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy553;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy566;
if (yych <= '-')
goto yy556;
} else {
if (yych <= 0xDF)
goto yy557;
if (yych <= 0xE0)
goto yy558;
goto yy559;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy560;
if (yych <= 0xEF)
goto yy559;
goto yy561;
} else {
if (yych <= 0xF3)
goto yy562;
if (yych <= 0xF4)
goto yy563;
}
}
yy566 : { 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[] = {
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,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 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 (yych <= 0xDF) {
if (yych <= '>') {
if (yych <= 0x00)
goto yy568;
if (yych != '\n')
goto yy570;
} else {
if (yych <= '?')
goto yy571;
if (yych <= 0x7F)
goto yy570;
if (yych >= 0xC2)
goto yy572;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy573;
if (yych == 0xED)
goto yy575;
goto yy574;
} else {
if (yych <= 0xF0)
goto yy576;
if (yych <= 0xF3)
goto yy577;
if (yych <= 0xF4)
goto yy578;
}
}
yy568:
++p;
yy569 : { return 0; }
yy570:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '\n') {
if (yych <= 0x00)
goto yy569;
if (yych <= '\t')
goto yy580;
goto yy569;
} else {
if (yych <= 0x7F)
goto yy580;
if (yych <= 0xC1)
goto yy569;
if (yych <= 0xF4)
goto yy580;
goto yy569;
}
yy571:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '=') {
if (yych <= 0x00)
goto yy569;
if (yych == '\n')
goto yy569;
goto yy580;
} else {
if (yych <= 0x7F) {
if (yych <= '>')
goto yy590;
goto yy580;
} else {
if (yych <= 0xC1)
goto yy569;
if (yych <= 0xF4)
goto yy580;
goto yy569;
}
}
yy572:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy569;
if (yych <= 0xBF)
goto yy579;
goto yy569;
yy573:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x9F)
goto yy569;
if (yych <= 0xBF)
goto yy583;
goto yy569;
yy574:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy569;
if (yych <= 0xBF)
goto yy583;
goto yy569;
yy575:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy569;
if (yych <= 0x9F)
goto yy583;
goto yy569;
yy576:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x8F)
goto yy569;
if (yych <= 0xBF)
goto yy585;
goto yy569;
yy577:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy569;
if (yych <= 0xBF)
goto yy585;
goto yy569;
yy578:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy569;
if (yych <= 0x8F)
goto yy585;
goto yy569;
yy579:
yych = *++p;
yy580:
if (yybm[0 + yych] & 64) {
goto yy579;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy581;
if (yych <= '?')
goto yy582;
} else {
if (yych <= 0xDF)
goto yy583;
if (yych <= 0xE0)
goto yy584;
goto yy585;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy586;
if (yych <= 0xEF)
goto yy585;
goto yy587;
} else {
if (yych <= 0xF3)
goto yy588;
if (yych <= 0xF4)
goto yy589;
}
}
yy581:
p = marker;
if (yyaccept == 0) {
goto yy569;
} else {
goto yy591;
}
yy582:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy582;
}
if (yych <= 0xDF) {
if (yych <= '=') {
if (yych <= 0x00)
goto yy581;
if (yych == '\n')
goto yy581;
goto yy579;
} else {
if (yych <= '>')
goto yy590;
if (yych <= 0x7F)
goto yy579;
if (yych <= 0xC1)
goto yy581;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy584;
if (yych == 0xED)
goto yy586;
goto yy585;
} else {
if (yych <= 0xF0)
goto yy587;
if (yych <= 0xF3)
goto yy588;
if (yych <= 0xF4)
goto yy589;
goto yy581;
}
}
yy583:
yych = *++p;
if (yych <= 0x7F)
goto yy581;
if (yych <= 0xBF)
goto yy579;
goto yy581;
yy584:
yych = *++p;
if (yych <= 0x9F)
goto yy581;
if (yych <= 0xBF)
goto yy583;
goto yy581;
yy585:
yych = *++p;
if (yych <= 0x7F)
goto yy581;
if (yych <= 0xBF)
goto yy583;
goto yy581;
yy586:
yych = *++p;
if (yych <= 0x7F)
goto yy581;
if (yych <= 0x9F)
goto yy583;
goto yy581;
yy587:
yych = *++p;
if (yych <= 0x8F)
goto yy581;
if (yych <= 0xBF)
goto yy585;
goto yy581;
yy588:
yych = *++p;
if (yych <= 0x7F)
goto yy581;
if (yych <= 0xBF)
goto yy585;
goto yy581;
yy589:
yych = *++p;
if (yych <= 0x7F)
goto yy581;
if (yych <= 0x8F)
goto yy585;
goto yy581;
yy590:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy579;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy591;
if (yych <= '?')
goto yy582;
} else {
if (yych <= 0xDF)
goto yy583;
if (yych <= 0xE0)
goto yy584;
goto yy585;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy586;
if (yych <= 0xEF)
goto yy585;
goto yy587;
} else {
if (yych <= 0xF3)
goto yy588;
if (yych <= 0xF4)
goto yy589;
}
}
yy591 : { return (bufsize_t)(p - start); }
}
}
// 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[] = {
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 (yybm[0 + yych] & 64) {
goto yy596;
}
if (yych <= 0xE0) {
if (yych <= '\n') {
if (yych <= 0x00)
goto yy593;
if (yych <= '\t')
goto yy595;
} else {
if (yych <= 0x7F)
goto yy595;
if (yych <= 0xC1)
goto yy593;
if (yych <= 0xDF)
goto yy598;
goto yy599;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy601;
goto yy600;
} else {
if (yych <= 0xF0)
goto yy602;
if (yych <= 0xF3)
goto yy603;
if (yych <= 0xF4)
goto yy604;
}
}
yy593:
++p;
yy594 : { return 0; }
yy595:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '\n') {
if (yych <= 0x00)
goto yy594;
if (yych <= '\t')
goto yy606;
goto yy594;
} else {
if (yych <= 0x7F)
goto yy606;
if (yych <= 0xC1)
goto yy594;
if (yych <= 0xF4)
goto yy606;
goto yy594;
}
yy596:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy605;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy597;
if (yych <= '>')
goto yy596;
} else {
if (yych <= 0xDF)
goto yy608;
if (yych <= 0xE0)
goto yy609;
goto yy610;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy611;
if (yych <= 0xEF)
goto yy610;
goto yy612;
} else {
if (yych <= 0xF3)
goto yy613;
if (yych <= 0xF4)
goto yy614;
}
}
yy597 : { return (bufsize_t)(p - start); }
yy598:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy594;
if (yych <= 0xBF)
goto yy605;
goto yy594;
yy599:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x9F)
goto yy594;
if (yych <= 0xBF)
goto yy608;
goto yy594;
yy600:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy594;
if (yych <= 0xBF)
goto yy608;
goto yy594;
yy601:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy594;
if (yych <= 0x9F)
goto yy608;
goto yy594;
yy602:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x8F)
goto yy594;
if (yych <= 0xBF)
goto yy610;
goto yy594;
yy603:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy594;
if (yych <= 0xBF)
goto yy610;
goto yy594;
yy604:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy594;
if (yych <= 0x8F)
goto yy610;
goto yy594;
yy605:
yych = *++p;
yy606:
if (yybm[0 + yych] & 128) {
goto yy605;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy607;
if (yych <= '>')
goto yy596;
} else {
if (yych <= 0xDF)
goto yy608;
if (yych <= 0xE0)
goto yy609;
goto yy610;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy611;
if (yych <= 0xEF)
goto yy610;
goto yy612;
} else {
if (yych <= 0xF3)
goto yy613;
if (yych <= 0xF4)
goto yy614;
}
}
yy607:
p = marker;
if (yyaccept == 0) {
goto yy594;
} else {
goto yy597;
}
yy608:
yych = *++p;
if (yych <= 0x7F)
goto yy607;
if (yych <= 0xBF)
goto yy605;
goto yy607;
yy609:
yych = *++p;
if (yych <= 0x9F)
goto yy607;
if (yych <= 0xBF)
goto yy608;
goto yy607;
yy610:
yych = *++p;
if (yych <= 0x7F)
goto yy607;
if (yych <= 0xBF)
goto yy608;
goto yy607;
yy611:
yych = *++p;
if (yych <= 0x7F)
goto yy607;
if (yych <= 0x9F)
goto yy608;
goto yy607;
yy612:
yych = *++p;
if (yych <= 0x8F)
goto yy607;
if (yych <= 0xBF)
goto yy610;
goto yy607;
yy613:
yych = *++p;
if (yych <= 0x7F)
goto yy607;
if (yych <= 0xBF)
goto yy610;
goto yy607;
yy614:
yych = *++p;
if (yych <= 0x7F)
goto yy607;
if (yych <= 0x8F)
goto yy610;
goto yy607;
}
}
// 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[] = {
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,
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 = *p;
if (yych <= 0xDF) {
if (yych <= '\\') {
if (yych <= 0x00)
goto yy616;
if (yych != '\n')
goto yy618;
} else {
if (yych <= ']')
goto yy619;
if (yych <= 0x7F)
goto yy618;
if (yych >= 0xC2)
goto yy620;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy621;
if (yych == 0xED)
goto yy623;
goto yy622;
} else {
if (yych <= 0xF0)
goto yy624;
if (yych <= 0xF3)
goto yy625;
if (yych <= 0xF4)
goto yy626;
}
}
yy616:
++p;
yy617 : { return 0; }
yy618:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '\n') {
if (yych <= 0x00)
goto yy617;
if (yych <= '\t')
goto yy628;
goto yy617;
} else {
if (yych <= 0x7F)
goto yy628;
if (yych <= 0xC1)
goto yy617;
if (yych <= 0xF4)
goto yy628;
goto yy617;
}
yy619:
yyaccept = 0;
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy638;
}
if (yych <= '\n') {
if (yych <= 0x00)
goto yy617;
if (yych <= '\t')
goto yy628;
goto yy617;
} else {
if (yych <= 0x7F)
goto yy628;
if (yych <= 0xC1)
goto yy617;
if (yych <= 0xF4)
goto yy628;
goto yy617;
}
yy620:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy617;
if (yych <= 0xBF)
goto yy627;
goto yy617;
yy621:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x9F)
goto yy617;
if (yych <= 0xBF)
goto yy631;
goto yy617;
yy622:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy617;
if (yych <= 0xBF)
goto yy631;
goto yy617;
yy623:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy617;
if (yych <= 0x9F)
goto yy631;
goto yy617;
yy624:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x8F)
goto yy617;
if (yych <= 0xBF)
goto yy633;
goto yy617;
yy625:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy617;
if (yych <= 0xBF)
goto yy633;
goto yy617;
yy626:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x7F)
goto yy617;
if (yych <= 0x8F)
goto yy633;
goto yy617;
yy627:
yych = *++p;
yy628:
if (yybm[0 + yych] & 64) {
goto yy627;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy629;
if (yych <= ']')
goto yy630;
} else {
if (yych <= 0xDF)
goto yy631;
if (yych <= 0xE0)
goto yy632;
goto yy633;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy634;
if (yych <= 0xEF)
goto yy633;
goto yy635;
} else {
if (yych <= 0xF3)
goto yy636;
if (yych <= 0xF4)
goto yy637;
}
}
yy629:
p = marker;
if (yyaccept == 0) {
goto yy617;
} else {
goto yy640;
}
yy630:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy627;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy629;
if (yych <= ']')
goto yy638;
goto yy629;
} else {
if (yych <= 0xDF)
goto yy631;
if (yych <= 0xE0)
goto yy632;
goto yy633;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy634;
if (yych <= 0xEF)
goto yy633;
goto yy635;
} else {
if (yych <= 0xF3)
goto yy636;
if (yych <= 0xF4)
goto yy637;
goto yy629;
}
}
yy631:
yych = *++p;
if (yych <= 0x7F)
goto yy629;
if (yych <= 0xBF)
goto yy627;
goto yy629;
yy632:
yych = *++p;
if (yych <= 0x9F)
goto yy629;
if (yych <= 0xBF)
goto yy631;
goto yy629;
yy633:
yych = *++p;
if (yych <= 0x7F)
goto yy629;
if (yych <= 0xBF)
goto yy631;
goto yy629;
yy634:
yych = *++p;
if (yych <= 0x7F)
goto yy629;
if (yych <= 0x9F)
goto yy631;
goto yy629;
yy635:
yych = *++p;
if (yych <= 0x8F)
goto yy629;
if (yych <= 0xBF)
goto yy633;
goto yy629;
yy636:
yych = *++p;
if (yych <= 0x7F)
goto yy629;
if (yych <= 0xBF)
goto yy633;
goto yy629;
yy637:
yych = *++p;
if (yych <= 0x7F)
goto yy629;
if (yych <= 0x8F)
goto yy633;
goto yy629;
yy638:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy638;
}
if (yych <= 0xDF) {
if (yych <= '=') {
if (yych <= 0x00)
goto yy629;
if (yych == '\n')
goto yy629;
goto yy627;
} else {
if (yych <= '>')
goto yy639;
if (yych <= 0x7F)
goto yy627;
if (yych <= 0xC1)
goto yy629;
goto yy631;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy632;
if (yych == 0xED)
goto yy634;
goto yy633;
} else {
if (yych <= 0xF0)
goto yy635;
if (yych <= 0xF3)
goto yy636;
if (yych <= 0xF4)
goto yy637;
goto yy629;
}
}
yy639:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy627;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\n')
goto yy640;
if (yych <= ']')
goto yy630;
} else {
if (yych <= 0xDF)
goto yy631;
if (yych <= 0xE0)
goto yy632;
goto yy633;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy634;
if (yych <= 0xEF)
goto yy633;
goto yy635;
} else {
if (yych <= 0xF3)
goto yy636;
if (yych <= 0xF4)
goto yy637;
}
}
yy640 : { return (bufsize_t)(p - start); }
}
}
// 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, 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,
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,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 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 yy643;
} else {
if (yych <= '\'')
goto yy644;
if (yych <= '(')
goto yy645;
}
++p;
yy642 : { return 0; }
yy643:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x00)
goto yy642;
if (yych <= 0x7F)
goto yy647;
if (yych <= 0xC1)
goto yy642;
if (yych <= 0xF4)
goto yy647;
goto yy642;
yy644:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= 0x00)
goto yy642;
if (yych <= 0x7F)
goto yy660;
if (yych <= 0xC1)
goto yy642;
if (yych <= 0xF4)
goto yy660;
goto yy642;
yy645:
yyaccept = 0;
yych = *(marker = ++p);
if (yych <= '(') {
if (yych <= 0x00)
goto yy642;
if (yych <= '\'')
goto yy672;
goto yy642;
} else {
if (yych <= 0x7F)
goto yy672;
if (yych <= 0xC1)
goto yy642;
if (yych <= 0xF4)
goto yy672;
goto yy642;
}
yy646:
yych = *++p;
yy647:
if (yybm[0 + yych] & 16) {
goto yy646;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= 0x00)
goto yy648;
if (yych <= '"')
goto yy649;
goto yy651;
} else {
if (yych <= 0xC1)
goto yy648;
if (yych <= 0xDF)
goto yy652;
goto yy653;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy655;
goto yy654;
} else {
if (yych <= 0xF0)
goto yy656;
if (yych <= 0xF3)
goto yy657;
if (yych <= 0xF4)
goto yy658;
}
}
yy648:
p = marker;
if (yyaccept <= 1) {
if (yyaccept == 0) {
goto yy642;
} else {
goto yy650;
}
} else {
if (yyaccept == 2) {
goto yy662;
} else {
goto yy674;
}
}
yy649:
++p;
yy650 : { return (bufsize_t)(p - start); }
yy651:
yych = *++p;
if (yybm[0 + yych] & 16) {
goto yy646;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= 0x00)
goto yy648;
if (yych <= '"')
goto yy683;
goto yy651;
} else {
if (yych <= 0xC1)
goto yy648;
if (yych >= 0xE0)
goto yy653;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy655;
goto yy654;
} else {
if (yych <= 0xF0)
goto yy656;
if (yych <= 0xF3)
goto yy657;
if (yych <= 0xF4)
goto yy658;
goto yy648;
}
}
yy652:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy646;
goto yy648;
yy653:
yych = *++p;
if (yych <= 0x9F)
goto yy648;
if (yych <= 0xBF)
goto yy652;
goto yy648;
yy654:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy652;
goto yy648;
yy655:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0x9F)
goto yy652;
goto yy648;
yy656:
yych = *++p;
if (yych <= 0x8F)
goto yy648;
if (yych <= 0xBF)
goto yy654;
goto yy648;
yy657:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy654;
goto yy648;
yy658:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0x8F)
goto yy654;
goto yy648;
yy659:
yych = *++p;
yy660:
if (yybm[0 + yych] & 64) {
goto yy659;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= 0x00)
goto yy648;
if (yych >= '(')
goto yy663;
} else {
if (yych <= 0xC1)
goto yy648;
if (yych <= 0xDF)
goto yy664;
goto yy665;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy667;
goto yy666;
} else {
if (yych <= 0xF0)
goto yy668;
if (yych <= 0xF3)
goto yy669;
if (yych <= 0xF4)
goto yy670;
goto yy648;
}
}
yy661:
++p;
yy662 : { return (bufsize_t)(p - start); }
yy663:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy659;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= 0x00)
goto yy648;
if (yych <= '\'')
goto yy684;
goto yy663;
} else {
if (yych <= 0xC1)
goto yy648;
if (yych >= 0xE0)
goto yy665;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy667;
goto yy666;
} else {
if (yych <= 0xF0)
goto yy668;
if (yych <= 0xF3)
goto yy669;
if (yych <= 0xF4)
goto yy670;
goto yy648;
}
}
yy664:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy659;
goto yy648;
yy665:
yych = *++p;
if (yych <= 0x9F)
goto yy648;
if (yych <= 0xBF)
goto yy664;
goto yy648;
yy666:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy664;
goto yy648;
yy667:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0x9F)
goto yy664;
goto yy648;
yy668:
yych = *++p;
if (yych <= 0x8F)
goto yy648;
if (yych <= 0xBF)
goto yy666;
goto yy648;
yy669:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy666;
goto yy648;
yy670:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0x8F)
goto yy666;
goto yy648;
yy671:
yych = *++p;
yy672:
if (yybm[0 + yych] & 128) {
goto yy671;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= '(')
goto yy648;
if (yych >= '*')
goto yy675;
} else {
if (yych <= 0xC1)
goto yy648;
if (yych <= 0xDF)
goto yy676;
goto yy677;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy679;
goto yy678;
} else {
if (yych <= 0xF0)
goto yy680;
if (yych <= 0xF3)
goto yy681;
if (yych <= 0xF4)
goto yy682;
goto yy648;
}
}
yy673:
++p;
yy674 : { return (bufsize_t)(p - start); }
yy675:
yych = *++p;
if (yych <= 0xDF) {
if (yych <= '[') {
if (yych <= 0x00)
goto yy648;
if (yych == ')')
goto yy685;
goto yy671;
} else {
if (yych <= '\\')
goto yy675;
if (yych <= 0x7F)
goto yy671;
if (yych <= 0xC1)
goto yy648;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0)
goto yy677;
if (yych == 0xED)
goto yy679;
goto yy678;
} else {
if (yych <= 0xF0)
goto yy680;
if (yych <= 0xF3)
goto yy681;
if (yych <= 0xF4)
goto yy682;
goto yy648;
}
}
yy676:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy671;
goto yy648;
yy677:
yych = *++p;
if (yych <= 0x9F)
goto yy648;
if (yych <= 0xBF)
goto yy676;
goto yy648;
yy678:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy676;
goto yy648;
yy679:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0x9F)
goto yy676;
goto yy648;
yy680:
yych = *++p;
if (yych <= 0x8F)
goto yy648;
if (yych <= 0xBF)
goto yy678;
goto yy648;
yy681:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0xBF)
goto yy678;
goto yy648;
yy682:
yych = *++p;
if (yych <= 0x7F)
goto yy648;
if (yych <= 0x8F)
goto yy678;
goto yy648;
yy683:
yyaccept = 1;
yych = *(marker = ++p);
if (yybm[0 + yych] & 16) {
goto yy646;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= 0x00)
goto yy650;
if (yych <= '"')
goto yy649;
goto yy651;
} else {
if (yych <= 0xC1)
goto yy650;
if (yych <= 0xDF)
goto yy652;
goto yy653;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy655;
goto yy654;
} else {
if (yych <= 0xF0)
goto yy656;
if (yych <= 0xF3)
goto yy657;
if (yych <= 0xF4)
goto yy658;
goto yy650;
}
}
yy684:
yyaccept = 2;
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy659;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= 0x00)
goto yy662;
if (yych <= '\'')
goto yy661;
goto yy663;
} else {
if (yych <= 0xC1)
goto yy662;
if (yych <= 0xDF)
goto yy664;
goto yy665;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy667;
goto yy666;
} else {
if (yych <= 0xF0)
goto yy668;
if (yych <= 0xF3)
goto yy669;
if (yych <= 0xF4)
goto yy670;
goto yy662;
}
}
yy685:
yyaccept = 3;
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy671;
}
if (yych <= 0xE0) {
if (yych <= '\\') {
if (yych <= '(')
goto yy674;
if (yych <= ')')
goto yy673;
goto yy675;
} else {
if (yych <= 0xC1)
goto yy674;
if (yych <= 0xDF)
goto yy676;
goto yy677;
}
} else {
if (yych <= 0xEF) {
if (yych == 0xED)
goto yy679;
goto yy678;
} else {
if (yych <= 0xF0)
goto yy680;
if (yych <= 0xF3)
goto yy681;
if (yych <= 0xF4)
goto yy682;
goto yy674;
}
}
}
}
// Match space characters, including newlines.
bufsize_t _scan_spacechars(const unsigned char *p) {
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 = *p;
if (yybm[0 + yych] & 128) {
goto yy687;
}
++p;
{ return 0; }
yy687:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy687;
}
{ return (bufsize_t)(p - start); }
}
}
// Match ATX heading start.
bufsize_t _scan_atx_heading_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, 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 = *p;
if (yych == '#')
goto yy690;
++p;
yy689 : { return 0; }
yy690:
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy691;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy689;
if (yych <= '\n')
goto yy693;
goto yy689;
} else {
if (yych <= '\r')
goto yy693;
if (yych == '#')
goto yy694;
goto yy689;
}
yy691:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy691;
}
yy692 : { return (bufsize_t)(p - start); }
yy693:
++p;
goto yy692;
yy694:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy691;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy695;
if (yych <= '\n')
goto yy693;
} else {
if (yych <= '\r')
goto yy693;
if (yych == '#')
goto yy696;
}
yy695:
p = marker;
goto yy689;
yy696:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy691;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy695;
if (yych <= '\n')
goto yy693;
goto yy695;
} else {
if (yych <= '\r')
goto yy693;
if (yych != '#')
goto yy695;
}
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy691;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy695;
if (yych <= '\n')
goto yy693;
goto yy695;
} else {
if (yych <= '\r')
goto yy693;
if (yych != '#')
goto yy695;
}
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy691;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy695;
if (yych <= '\n')
goto yy693;
goto yy695;
} else {
if (yych <= '\r')
goto yy693;
if (yych != '#')
goto yy695;
}
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy691;
}
if (yych <= 0x08)
goto yy695;
if (yych <= '\n')
goto yy693;
if (yych == '\r')
goto yy693;
goto yy695;
}
}
// Match setext heading line. Return 1 for level-1 heading,
// 2 for level-2, 0 for no match.
bufsize_t _scan_setext_heading_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, 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 yy699;
if (yych == '=')
goto yy700;
++p;
yy698 : { return 0; }
yy699:
yych = *(marker = ++p);
if (yybm[0 + yych] & 64) {
goto yy705;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy698;
if (yych <= '\n')
goto yy702;
goto yy698;
} else {
if (yych <= '\r')
goto yy702;
if (yych == ' ')
goto yy702;
goto yy698;
}
yy700:
yych = *(marker = ++p);
if (yybm[0 + yych] & 128) {
goto yy709;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy698;
if (yych <= '\n')
goto yy707;
goto yy698;
} else {
if (yych <= '\r')
goto yy707;
if (yych == ' ')
goto yy707;
goto yy698;
}
yy701:
yych = *++p;
yy702:
if (yybm[0 + yych] & 32) {
goto yy701;
}
if (yych <= 0x08)
goto yy703;
if (yych <= '\n')
goto yy704;
if (yych == '\r')
goto yy704;
yy703:
p = marker;
goto yy698;
yy704:
++p;
{ return 2; }
yy705:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy701;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy703;
if (yych <= '\n')
goto yy704;
goto yy703;
} else {
if (yych <= '\r')
goto yy704;
if (yych == '-')
goto yy705;
goto yy703;
}
yy706:
yych = *++p;
yy707:
if (yych <= '\f') {
if (yych <= 0x08)
goto yy703;
if (yych <= '\t')
goto yy706;
if (yych >= '\v')
goto yy703;
} else {
if (yych <= '\r')
goto yy708;
if (yych == ' ')
goto yy706;
goto yy703;
}
yy708:
++p;
{ return 1; }
yy709:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy709;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy703;
if (yych <= '\t')
goto yy706;
if (yych <= '\n')
goto yy708;
goto yy703;
} else {
if (yych <= '\r')
goto yy708;
if (yych == ' ')
goto yy706;
goto yy703;
}
}
}
// Scan an opening code fence.
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, 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,
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,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 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 yy712;
if (yych == '~')
goto yy713;
++p;
yy711 : { return 0; }
yy712:
yych = *(marker = ++p);
if (yych == '`')
goto yy714;
goto yy711;
yy713:
yych = *(marker = ++p);
if (yych == '~')
goto yy716;
goto yy711;
yy714:
yych = *++p;
if (yybm[0 + yych] & 16) {
goto yy717;
}
yy715:
p = marker;
goto yy711;
yy716:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy718;
}
goto yy715;
yy717:
yych = *++p;
if (yybm[0 + yych] & 16) {
goto yy717;
}
if (yych <= 0xDF) {
if (yych <= '\f') {
if (yych <= 0x00)
goto yy715;
if (yych == '\n') {
marker = p;
goto yy720;
}
marker = p;
goto yy719;
} else {
if (yych <= '\r') {
marker = p;
goto yy720;
}
if (yych <= 0x7F) {
marker = p;
goto yy719;
}
if (yych <= 0xC1)
goto yy715;
marker = p;
goto yy721;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0) {
marker = p;
goto yy722;
}
if (yych == 0xED) {
marker = p;
goto yy724;
}
marker = p;
goto yy723;
} else {
if (yych <= 0xF0) {
marker = p;
goto yy725;
}
if (yych <= 0xF3) {
marker = p;
goto yy726;
}
if (yych <= 0xF4) {
marker = p;
goto yy727;
}
goto yy715;
}
}
yy718:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy718;
}
if (yych <= 0xDF) {
if (yych <= '\f') {
if (yych <= 0x00)
goto yy715;
if (yych == '\n') {
marker = p;
goto yy729;
}
marker = p;
goto yy728;
} else {
if (yych <= '\r') {
marker = p;
goto yy729;
}
if (yych <= 0x7F) {
marker = p;
goto yy728;
}
if (yych <= 0xC1)
goto yy715;
marker = p;
goto yy730;
}
} else {
if (yych <= 0xEF) {
if (yych <= 0xE0) {
marker = p;
goto yy731;
}
if (yych == 0xED) {
marker = p;
goto yy733;
}
marker = p;
goto yy732;
} else {
if (yych <= 0xF0) {
marker = p;
goto yy734;
}
if (yych <= 0xF3) {
marker = p;
goto yy735;
}
if (yych <= 0xF4) {
marker = p;
goto yy736;
}
goto yy715;
}
}
yy719:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy719;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy715;
if (yych >= 0x0E)
goto yy715;
} else {
if (yych <= 0xDF)
goto yy721;
if (yych <= 0xE0)
goto yy722;
goto yy723;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy724;
if (yych <= 0xEF)
goto yy723;
goto yy725;
} else {
if (yych <= 0xF3)
goto yy726;
if (yych <= 0xF4)
goto yy727;
goto yy715;
}
}
yy720:
++p;
p = marker;
{ return (bufsize_t)(p - start); }
yy721:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0xBF)
goto yy719;
goto yy715;
yy722:
yych = *++p;
if (yych <= 0x9F)
goto yy715;
if (yych <= 0xBF)
goto yy721;
goto yy715;
yy723:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0xBF)
goto yy721;
goto yy715;
yy724:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0x9F)
goto yy721;
goto yy715;
yy725:
yych = *++p;
if (yych <= 0x8F)
goto yy715;
if (yych <= 0xBF)
goto yy723;
goto yy715;
yy726:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0xBF)
goto yy723;
goto yy715;
yy727:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0x8F)
goto yy723;
goto yy715;
yy728:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy728;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= 0x00)
goto yy715;
if (yych >= 0x0E)
goto yy715;
} else {
if (yych <= 0xDF)
goto yy730;
if (yych <= 0xE0)
goto yy731;
goto yy732;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy733;
if (yych <= 0xEF)
goto yy732;
goto yy734;
} else {
if (yych <= 0xF3)
goto yy735;
if (yych <= 0xF4)
goto yy736;
goto yy715;
}
}
yy729:
++p;
p = marker;
{ return (bufsize_t)(p - start); }
yy730:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0xBF)
goto yy728;
goto yy715;
yy731:
yych = *++p;
if (yych <= 0x9F)
goto yy715;
if (yych <= 0xBF)
goto yy730;
goto yy715;
yy732:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0xBF)
goto yy730;
goto yy715;
yy733:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0x9F)
goto yy730;
goto yy715;
yy734:
yych = *++p;
if (yych <= 0x8F)
goto yy715;
if (yych <= 0xBF)
goto yy732;
goto yy715;
yy735:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0xBF)
goto yy732;
goto yy715;
yy736:
yych = *++p;
if (yych <= 0x7F)
goto yy715;
if (yych <= 0x8F)
goto yy732;
goto yy715;
}
}
// Scan a closing code fence with length at least len.
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, 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 yy739;
if (yych == '~')
goto yy740;
++p;
yy738 : { return 0; }
yy739:
yych = *(marker = ++p);
if (yych == '`')
goto yy741;
goto yy738;
yy740:
yych = *(marker = ++p);
if (yych == '~')
goto yy743;
goto yy738;
yy741:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy744;
}
yy742:
p = marker;
goto yy738;
yy743:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy745;
}
goto yy742;
yy744:
yych = *++p;
if (yybm[0 + yych] & 32) {
goto yy744;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy742;
if (yych <= '\t') {
marker = p;
goto yy746;
}
if (yych <= '\n') {
marker = p;
goto yy747;
}
goto yy742;
} else {
if (yych <= '\r') {
marker = p;
goto yy747;
}
if (yych == ' ') {
marker = p;
goto yy746;
}
goto yy742;
}
yy745:
yych = *++p;
if (yybm[0 + yych] & 64) {
goto yy745;
}
if (yych <= '\f') {
if (yych <= 0x08)
goto yy742;
if (yych <= '\t') {
marker = p;
goto yy748;
}
if (yych <= '\n') {
marker = p;
goto yy749;
}
goto yy742;
} else {
if (yych <= '\r') {
marker = p;
goto yy749;
}
if (yych == ' ') {
marker = p;
goto yy748;
}
goto yy742;
}
yy746:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy746;
}
if (yych <= 0x08)
goto yy742;
if (yych <= '\n')
goto yy747;
if (yych != '\r')
goto yy742;
yy747:
++p;
p = marker;
{ return (bufsize_t)(p - start); }
yy748:
yych = *++p;
if (yych <= '\f') {
if (yych <= 0x08)
goto yy742;
if (yych <= '\t')
goto yy748;
if (yych >= '\v')
goto yy742;
} else {
if (yych <= '\r')
goto yy749;
if (yych == ' ')
goto yy748;
goto yy742;
}
yy749:
++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 = *p;
if (yych == '&')
goto yy752;
++p;
yy751 : { return 0; }
yy752:
yych = *(marker = ++p);
if (yych <= '@') {
if (yych != '#')
goto yy751;
} else {
if (yych <= 'Z')
goto yy754;
if (yych <= '`')
goto yy751;
if (yych <= 'z')
goto yy754;
goto yy751;
}
yych = *++p;
if (yych <= 'W') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy755;
} else {
if (yych <= 'X')
goto yy756;
if (yych == 'x')
goto yy756;
}
yy753:
p = marker;
goto yy751;
yy754:
yych = *++p;
if (yych <= '@') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy757;
goto yy753;
} else {
if (yych <= 'Z')
goto yy757;
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy757;
goto yy753;
}
yy755:
yych = *++p;
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy758;
if (yych == ';')
goto yy759;
goto yy753;
yy756:
yych = *++p;
if (yych <= '@') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy760;
goto yy753;
} else {
if (yych <= 'F')
goto yy760;
if (yych <= '`')
goto yy753;
if (yych <= 'f')
goto yy760;
goto yy753;
}
yy757:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy761;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
goto yy761;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy761;
goto yy753;
}
}
yy758:
yych = *++p;
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy762;
if (yych != ';')
goto yy753;
yy759:
++p;
{ return (bufsize_t)(p - start); }
yy760:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy763;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'F') {
if (yych <= '@')
goto yy753;
goto yy763;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'f')
goto yy763;
goto yy753;
}
}
yy761:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy764;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
goto yy764;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy764;
goto yy753;
}
}
yy762:
yych = *++p;
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy765;
if (yych == ';')
goto yy759;
goto yy753;
yy763:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy766;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'F') {
if (yych <= '@')
goto yy753;
goto yy766;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'f')
goto yy766;
goto yy753;
}
}
yy764:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy767;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
goto yy767;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy767;
goto yy753;
}
}
yy765:
yych = *++p;
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy768;
if (yych == ';')
goto yy759;
goto yy753;
yy766:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy769;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'F') {
if (yych <= '@')
goto yy753;
goto yy769;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'f')
goto yy769;
goto yy753;
}
}
yy767:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy770;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
goto yy770;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy770;
goto yy753;
}
}
yy768:
yych = *++p;
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy771;
if (yych == ';')
goto yy759;
goto yy753;
yy769:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy772;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'F') {
if (yych <= '@')
goto yy753;
goto yy772;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'f')
goto yy772;
goto yy753;
}
}
yy770:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy773;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
goto yy773;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy773;
goto yy753;
}
}
yy771:
yych = *++p;
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy774;
if (yych == ';')
goto yy759;
goto yy753;
yy772:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy774;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'F') {
if (yych <= '@')
goto yy753;
goto yy774;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'f')
goto yy774;
goto yy753;
}
}
yy773:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy775;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
goto yy775;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy775;
goto yy753;
}
}
yy774:
yych = *++p;
if (yych == ';')
goto yy759;
goto yy753;
yy775:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy776;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy776:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy777;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy777:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy778;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy778:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy779;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy779:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy780;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy780:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy781;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy781:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy782;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy782:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy783;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy783:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy784;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy784:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy785;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy785:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy786;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy786:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy787;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy787:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy788;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy788:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy789;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy789:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy790;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy790:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy791;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy791:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy792;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy792:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy793;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy793:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy794;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy794:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy795;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy795:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy796;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy796:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy797;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy797:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy798;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
} else {
if (yych <= '`')
goto yy753;
if (yych >= '{')
goto yy753;
}
}
yy798:
yych = *++p;
if (yych <= ';') {
if (yych <= '/')
goto yy753;
if (yych <= '9')
goto yy774;
if (yych <= ':')
goto yy753;
goto yy759;
} else {
if (yych <= 'Z') {
if (yych <= '@')
goto yy753;
goto yy774;
} else {
if (yych <= '`')
goto yy753;
if (yych <= 'z')
goto yy774;
goto yy753;
}
}
}
}
// 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) {
const unsigned char *marker = NULL;
const unsigned char *start = p;
{
unsigned char yych;
unsigned int yyaccept = 0;
yych = *p;
if (yych <= 'V') {
if (yych <= 'F') {
if (yych == 'D')
goto yy801;
if (yych >= 'F')
goto yy802;
} else {
if (yych == 'J')
goto yy803;
if (yych >= 'V')
goto yy804;
}
} else {
if (yych <= 'f') {
if (yych == 'd')
goto yy801;
if (yych >= 'f')
goto yy802;
} else {
if (yych <= 'j') {
if (yych >= 'j')
goto yy803;
} else {
if (yych == 'v')
goto yy804;
}
}
}
++p;
yy800 : { return 0; }
yy801:
yyaccept = 0;
yych = *(marker = ++p);
if (yych == 'A')
goto yy805;
if (yych == 'a')
goto yy805;
goto yy800;
yy802:
yyaccept = 0;
yych = *(marker = ++p);
if (yych == 'I')
goto yy807;
if (yych == 'i')
goto yy807;
goto yy800;
yy803:
yyaccept = 0;
yych = *(marker = ++p);
if (yych == 'A')
goto yy808;
if (yych == 'a')
goto yy808;
goto yy800;
yy804:
yyaccept = 0;
yych = *(marker = ++p);
if (yych == 'B')
goto yy809;
if (yych == 'b')
goto yy809;
goto yy800;
yy805:
yych = *++p;
if (yych == 'T')
goto yy810;
if (yych == 't')
goto yy810;
yy806:
p = marker;
if (yyaccept == 0) {
goto yy800;
} else {
goto yy818;
}
yy807:
yych = *++p;
if (yych == 'L')
goto yy811;
if (yych == 'l')
goto yy811;
goto yy806;
yy808:
yych = *++p;
if (yych == 'V')
goto yy812;
if (yych == 'v')
goto yy812;
goto yy806;
yy809:
yych = *++p;
if (yych == 'S')
goto yy813;
if (yych == 's')
goto yy813;
goto yy806;
yy810:
yych = *++p;
if (yych == 'A')
goto yy814;
if (yych == 'a')
goto yy814;
goto yy806;
yy811:
yych = *++p;
if (yych == 'E')
goto yy815;
if (yych == 'e')
goto yy815;
goto yy806;
yy812:
yych = *++p;
if (yych == 'A')
goto yy809;
if (yych == 'a')
goto yy809;
goto yy806;
yy813:
yych = *++p;
if (yych == 'C')
goto yy816;
if (yych == 'c')
goto yy816;
goto yy806;
yy814:
yych = *++p;
if (yych == ':')
goto yy817;
goto yy806;
yy815:
yych = *++p;
if (yych == ':')
goto yy819;
goto yy806;
yy816:
yych = *++p;
if (yych == 'R')
goto yy820;
if (yych == 'r')
goto yy820;
goto yy806;
yy817:
yyaccept = 1;
yych = *(marker = ++p);
if (yych == 'I')
goto yy821;
if (yych == 'i')
goto yy821;
yy818 : { return (bufsize_t)(p - start); }
yy819:
++p;
goto yy818;
yy820:
yych = *++p;
if (yych == 'I')
goto yy822;
if (yych == 'i')
goto yy822;
goto yy806;
yy821:
yych = *++p;
if (yych == 'M')
goto yy823;
if (yych == 'm')
goto yy823;
goto yy806;
yy822:
yych = *++p;
if (yych == 'P')
goto yy824;
if (yych == 'p')
goto yy824;
goto yy806;
yy823:
yych = *++p;
if (yych == 'A')
goto yy825;
if (yych == 'a')
goto yy825;
goto yy806;
yy824:
yych = *++p;
if (yych == 'T')
goto yy815;
if (yych == 't')
goto yy815;
goto yy806;
yy825:
yych = *++p;
if (yych == 'G')
goto yy826;
if (yych != 'g')
goto yy806;
yy826:
yych = *++p;
if (yych == 'E')
goto yy827;
if (yych != 'e')
goto yy806;
yy827:
yych = *++p;
if (yych != '/')
goto yy806;
yych = *++p;
if (yych <= 'W') {
if (yych <= 'J') {
if (yych == 'G')
goto yy828;
if (yych <= 'I')
goto yy806;
goto yy829;
} else {
if (yych == 'P')
goto yy830;
if (yych <= 'V')
goto yy806;
goto yy831;
}
} else {
if (yych <= 'j') {
if (yych == 'g')
goto yy828;
if (yych <= 'i')
goto yy806;
goto yy829;
} else {
if (yych <= 'p') {
if (yych <= 'o')
goto yy806;
goto yy830;
} else {
if (yych == 'w')
goto yy831;
goto yy806;
}
}
}
yy828:
yych = *++p;
if (yych == 'I')
goto yy832;
if (yych == 'i')
goto yy832;
goto yy806;
yy829:
yych = *++p;
if (yych == 'P')
goto yy833;
if (yych == 'p')
goto yy833;
goto yy806;
yy830:
yych = *++p;
if (yych == 'N')
goto yy834;
if (yych == 'n')
goto yy834;
goto yy806;
yy831:
yych = *++p;
if (yych == 'E')
goto yy835;
if (yych == 'e')
goto yy835;
goto yy806;
yy832:
yych = *++p;
if (yych == 'F')
goto yy836;
if (yych == 'f')
goto yy836;
goto yy806;
yy833:
yych = *++p;
if (yych == 'E')
goto yy834;
if (yych != 'e')
goto yy806;
yy834:
yych = *++p;
if (yych == 'G')
goto yy836;
if (yych == 'g')
goto yy836;
goto yy806;
yy835:
yych = *++p;
if (yych == 'B')
goto yy837;
if (yych == 'b')
goto yy837;
goto yy806;
yy836:
++p;
{ return 0; }
yy837:
yych = *++p;
if (yych == 'P')
goto yy836;
if (yych == 'p')
goto yy836;
goto yy806;
}
}
// Scans a footnote definition opening.
bufsize_t _scan_footnote_definition(const unsigned char *p) {
const unsigned char *marker = NULL;
const unsigned char *start = p;
{
unsigned char yych;
static const unsigned char yybm[] = {
0, 64, 64, 64, 64, 64, 64, 64, 64, 128, 0, 64, 64, 0, 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, 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,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 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 yy840;
++p;
yy839 : { return 0; }
yy840:
yych = *(marker = ++p);
if (yych != '^')
goto yy839;
yych = *++p;
if (yych != ']')
goto yy843;
yy841:
p = marker;
goto yy839;
yy842:
yych = *++p;
yy843:
if (yybm[0 + yych] & 64) {
goto yy842;
}
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= ' ')
goto yy841;
if (yych <= ']')
goto yy851;
goto yy841;
} else {
if (yych <= 0xDF)
goto yy844;
if (yych <= 0xE0)
goto yy845;
goto yy846;
}
} else {
if (yych <= 0xF0) {
if (yych <= 0xED)
goto yy847;
if (yych <= 0xEF)
goto yy846;
goto yy848;
} else {
if (yych <= 0xF3)
goto yy849;
if (yych <= 0xF4)
goto yy850;
goto yy841;
}
}
yy844:
yych = *++p;
if (yych <= 0x7F)
goto yy841;
if (yych <= 0xBF)
goto yy842;
goto yy841;
yy845:
yych = *++p;
if (yych <= 0x9F)
goto yy841;
if (yych <= 0xBF)
goto yy844;
goto yy841;
yy846:
yych = *++p;
if (yych <= 0x7F)
goto yy841;
if (yych <= 0xBF)
goto yy844;
goto yy841;
yy847:
yych = *++p;
if (yych <= 0x7F)
goto yy841;
if (yych <= 0x9F)
goto yy844;
goto yy841;
yy848:
yych = *++p;
if (yych <= 0x8F)
goto yy841;
if (yych <= 0xBF)
goto yy846;
goto yy841;
yy849:
yych = *++p;
if (yych <= 0x7F)
goto yy841;
if (yych <= 0xBF)
goto yy846;
goto yy841;
yy850:
yych = *++p;
if (yych <= 0x7F)
goto yy841;
if (yych <= 0x8F)
goto yy846;
goto yy841;
yy851:
yych = *++p;
if (yych != ':')
goto yy841;
yy852:
yych = *++p;
if (yybm[0 + yych] & 128) {
goto yy852;
}
{ return (bufsize_t)(p - start); }
}
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/scanners.h 0000644 0001751 0000177 00000006660 14717450313 021516 0 ustar 00runner docker #ifndef CMARK_SCANNERS_H
#define CMARK_SCANNERS_H
#include "cmark-gfm.h"
#include "chunk.h"
#ifdef __cplusplus
extern "C" {
#endif
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_liberal_html_tag(const unsigned char *p);
bufsize_t _scan_html_comment(const unsigned char *p);
bufsize_t _scan_html_pi(const unsigned char *p);
bufsize_t _scan_html_declaration(const unsigned char *p);
bufsize_t _scan_html_cdata(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_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_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);
bufsize_t _scan_dangerous_url(const unsigned char *p);
bufsize_t _scan_footnote_definition(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)
#define scan_liberal_html_tag(c, n) _scan_at(&_scan_liberal_html_tag, c, n)
#define scan_html_comment(c, n) _scan_at(&_scan_html_comment, c, n)
#define scan_html_pi(c, n) _scan_at(&_scan_html_pi, c, n)
#define scan_html_declaration(c, n) _scan_at(&_scan_html_declaration, c, n)
#define scan_html_cdata(c, n) _scan_at(&_scan_html_cdata, 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_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)
#define scan_setext_heading_line(c, n) \
_scan_at(&_scan_setext_heading_line, 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)
#define scan_dangerous_url(c, n) _scan_at(&_scan_dangerous_url, c, n)
#define scan_footnote_definition(c, n) _scan_at(&_scan_footnote_definition, c, n)
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/syntax_extension.c 0000644 0001751 0000177 00000013152 14717450313 023311 0 ustar 00runner docker #include
#include
#include "cmark-gfm.h"
#include "syntax_extension.h"
#include "buffer.h"
extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
static cmark_mem *_mem = &CMARK_DEFAULT_MEM_ALLOCATOR;
void cmark_syntax_extension_free(cmark_mem *mem, cmark_syntax_extension *extension) {
if (extension->free_function && extension->priv) {
extension->free_function(mem, extension->priv);
}
cmark_llist_free(mem, extension->special_inline_chars);
mem->free(extension->name);
mem->free(extension);
}
cmark_syntax_extension *cmark_syntax_extension_new(const char *name) {
cmark_syntax_extension *res = (cmark_syntax_extension *) _mem->calloc(1, sizeof(cmark_syntax_extension));
res->name = (char *) _mem->calloc(1, sizeof(char) * (strlen(name)) + 1);
strcpy(res->name, name);
return res;
}
cmark_node_type cmark_syntax_extension_add_node(int is_inline) {
cmark_node_type *ref = !is_inline ? &CMARK_NODE_LAST_BLOCK : &CMARK_NODE_LAST_INLINE;
if ((*ref & CMARK_NODE_VALUE_MASK) == CMARK_NODE_VALUE_MASK) {
assert(false);
return (cmark_node_type) 0;
}
return *ref = (cmark_node_type) ((int) *ref + 1);
}
void cmark_syntax_extension_set_emphasis(cmark_syntax_extension *extension,
int emphasis) {
extension->emphasis = emphasis == 1;
}
void cmark_syntax_extension_set_open_block_func(cmark_syntax_extension *extension,
cmark_open_block_func func) {
extension->try_opening_block = func;
}
void cmark_syntax_extension_set_match_block_func(cmark_syntax_extension *extension,
cmark_match_block_func func) {
extension->last_block_matches = func;
}
void cmark_syntax_extension_set_match_inline_func(cmark_syntax_extension *extension,
cmark_match_inline_func func) {
extension->match_inline = func;
}
void cmark_syntax_extension_set_inline_from_delim_func(cmark_syntax_extension *extension,
cmark_inline_from_delim_func func) {
extension->insert_inline_from_delim = func;
}
void cmark_syntax_extension_set_special_inline_chars(cmark_syntax_extension *extension,
cmark_llist *special_chars) {
extension->special_inline_chars = special_chars;
}
void cmark_syntax_extension_set_get_type_string_func(cmark_syntax_extension *extension,
cmark_get_type_string_func func) {
extension->get_type_string_func = func;
}
void cmark_syntax_extension_set_can_contain_func(cmark_syntax_extension *extension,
cmark_can_contain_func func) {
extension->can_contain_func = func;
}
void cmark_syntax_extension_set_contains_inlines_func(cmark_syntax_extension *extension,
cmark_contains_inlines_func func) {
extension->contains_inlines_func = func;
}
void cmark_syntax_extension_set_commonmark_render_func(cmark_syntax_extension *extension,
cmark_common_render_func func) {
extension->commonmark_render_func = func;
}
void cmark_syntax_extension_set_plaintext_render_func(cmark_syntax_extension *extension,
cmark_common_render_func func) {
extension->plaintext_render_func = func;
}
void cmark_syntax_extension_set_latex_render_func(cmark_syntax_extension *extension,
cmark_common_render_func func) {
extension->latex_render_func = func;
}
void cmark_syntax_extension_set_xml_attr_func(cmark_syntax_extension *extension,
cmark_xml_attr_func func) {
extension->xml_attr_func = func;
}
void cmark_syntax_extension_set_man_render_func(cmark_syntax_extension *extension,
cmark_common_render_func func) {
extension->man_render_func = func;
}
void cmark_syntax_extension_set_html_render_func(cmark_syntax_extension *extension,
cmark_html_render_func func) {
extension->html_render_func = func;
}
void cmark_syntax_extension_set_html_filter_func(cmark_syntax_extension *extension,
cmark_html_filter_func func) {
extension->html_filter_func = func;
}
void cmark_syntax_extension_set_postprocess_func(cmark_syntax_extension *extension,
cmark_postprocess_func func) {
extension->postprocess_func = func;
}
void cmark_syntax_extension_set_private(cmark_syntax_extension *extension,
void *priv,
cmark_free_func free_func) {
extension->priv = priv;
extension->free_function = free_func;
}
void *cmark_syntax_extension_get_private(cmark_syntax_extension *extension) {
return extension->priv;
}
void cmark_syntax_extension_set_opaque_alloc_func(cmark_syntax_extension *extension,
cmark_opaque_alloc_func func) {
extension->opaque_alloc_func = func;
}
void cmark_syntax_extension_set_opaque_free_func(cmark_syntax_extension *extension,
cmark_opaque_free_func func) {
extension->opaque_free_func = func;
}
void cmark_syntax_extension_set_commonmark_escape_func(cmark_syntax_extension *extension,
cmark_commonmark_escape_func func) {
extension->commonmark_escape_func = func;
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/syntax_extension.h 0000644 0001751 0000177 00000002553 14717450313 023321 0 ustar 00runner docker #ifndef CMARK_SYNTAX_EXTENSION_H
#define CMARK_SYNTAX_EXTENSION_H
#include "cmark-gfm.h"
#include "cmark-gfm-extension_api.h"
#include "config.h"
struct cmark_syntax_extension {
cmark_match_block_func last_block_matches;
cmark_open_block_func try_opening_block;
cmark_match_inline_func match_inline;
cmark_inline_from_delim_func insert_inline_from_delim;
cmark_llist * special_inline_chars;
char * name;
void * priv;
bool emphasis;
cmark_free_func free_function;
cmark_get_type_string_func get_type_string_func;
cmark_can_contain_func can_contain_func;
cmark_contains_inlines_func contains_inlines_func;
cmark_common_render_func commonmark_render_func;
cmark_common_render_func plaintext_render_func;
cmark_common_render_func latex_render_func;
cmark_xml_attr_func xml_attr_func;
cmark_common_render_func man_render_func;
cmark_html_render_func html_render_func;
cmark_html_filter_func html_filter_func;
cmark_postprocess_func postprocess_func;
cmark_opaque_alloc_func opaque_alloc_func;
cmark_opaque_free_func opaque_free_func;
cmark_commonmark_escape_func commonmark_escape_func;
};
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/utf8.c 0000644 0001751 0000177 00000023611 14717450313 020556 0 ustar 00runner docker #include
#include
#include
#include "cmark_ctype.h"
#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);
}
static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) {
int length, i;
if (!str_len)
return 0;
length = utf8proc_utf8class[str[0]];
if (!length)
return -1;
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;
}
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;
}
void cmark_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 cmark_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 cmark_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] = (uint8_t)(uc);
len = 1;
} else if (uc < 0x800) {
dst[0] = (uint8_t)(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] = (uint8_t)(0xE0 + (uc >> 12));
dst[1] = 0x80 + ((uc >> 6) & 0x3F);
dst[2] = 0x80 + (uc & 0x3F);
len = 3;
} else if (uc < 0x110000) {
dst[0] = (uint8_t)(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 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)
while (len > 0) {
bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c);
if (char_len >= 0) {
#include "case_fold_switch.inc"
} 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 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 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 ||
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);
}
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/utf8.h 0000644 0001751 0000177 00000001327 14717450313 020563 0 ustar 00runner docker #ifndef CMARK_UTF8_H
#define CMARK_UTF8_H
#include
#include "buffer.h"
#ifdef __cplusplus
extern "C" {
#endif
CMARK_GFM_EXPORT
void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
bufsize_t len);
CMARK_GFM_EXPORT
void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf);
CMARK_GFM_EXPORT
int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst);
CMARK_GFM_EXPORT
void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line,
bufsize_t size);
CMARK_GFM_EXPORT
int cmark_utf8proc_is_space(int32_t uc);
CMARK_GFM_EXPORT
int cmark_utf8proc_is_punctuation(int32_t uc);
#ifdef __cplusplus
}
#endif
#endif
././@PaxHeader 0000000 0000000 0000000 00000000026 00000000000 010213 x ustar 00 22 mtime=1732137163.0
cmarkgfm-2024.11.20/third_party/cmark/src/xml.c 0000644 0001751 0000177 00000013244 14717450313 020471 0 ustar 00runner docker #include
#include
#include
#include
#include "config.h"
#include "cmark-gfm.h"
#include "node.h"
#include "buffer.h"
#include "houdini.h"
#include "syntax_extension.h"
#define BUFFER_SIZE 100
#define MAX_INDENT 40
// 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);
}
struct render_state {
cmark_strbuf *xml;
int indent;
};
static CMARK_INLINE void indent(struct render_state *state) {
int i;
for (i = 0; i < state->indent && i < MAX_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[BUFFER_SIZE];
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) {
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);
}
if (node->extension && node->extension->xml_attr_func) {
const char* r = node->extension->xml_attr_func(node->extension, node);
if (r != NULL)
cmark_strbuf_puts(xml, r);
}
literal = false;
switch (node->type) {
case CMARK_NODE_DOCUMENT:
cmark_strbuf_puts(xml, " xmlns=\"http://commonmark.org/xml/1.0\"");
break;
case CMARK_NODE_TEXT:
case CMARK_NODE_CODE:
case CMARK_NODE_HTML_BLOCK:
case CMARK_NODE_HTML_INLINE:
cmark_strbuf_puts(xml, " xml:space=\"preserve\">");
escape_xml(xml, node->as.literal.data, node->as.literal.len);
cmark_strbuf_puts(xml, "");
cmark_strbuf_puts(xml, 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\"");
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) {
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;
}
snprintf(buffer, BUFFER_SIZE, " tight=\"%s\"",
(cmark_node_get_list_tight(node) ? "true" : "false"));
cmark_strbuf_puts(xml, buffer);
break;
case CMARK_NODE_HEADING:
snprintf(buffer, BUFFER_SIZE, " level=\"%d\"", node->as.heading.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, " xml:space=\"preserve\">");
escape_xml(xml, node->as.code.literal.data, node->as.code.literal.len);
cmark_strbuf_puts(xml, "");
cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
literal = true;
break;
case CMARK_NODE_CUSTOM_BLOCK:
case CMARK_NODE_CUSTOM_INLINE:
cmark_strbuf_puts(xml, " on_enter=\"");
escape_xml(xml, node->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=\"");
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.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, "");
cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
cmark_strbuf_puts(xml, ">\n");
}
return 1;
}
char *cmark_render_xml(cmark_node *root, int options) {
return cmark_render_xml_with_mem(root, options, cmark_node_mem(root));
}
char *cmark_render_xml_with_mem(cmark_node *root, int options, cmark_mem *mem) {
char *result;
cmark_strbuf xml = CMARK_BUF_INIT(mem);
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;
}