"`.
+ */
+CMARK_GFM_EXPORT
+const char *cmark_node_get_type_string(cmark_node *node);
+
+/** Returns the string contents of 'node', or an empty
+ string if none is set. Returns NULL if called on a
+ node that does not have string content.
+ */
+CMARK_GFM_EXPORT const char *cmark_node_get_literal(cmark_node *node);
+
+/** Sets the string contents of 'node'. Returns 1 on success,
+ * 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content);
+
+/** Returns the heading level of 'node', or 0 if 'node' is not a heading.
+ */
+CMARK_GFM_EXPORT int cmark_node_get_heading_level(cmark_node *node);
+
+/* For backwards compatibility */
+#define cmark_node_get_header_level cmark_node_get_heading_level
+#define cmark_node_set_header_level cmark_node_set_heading_level
+
+/** Sets the heading level of 'node', returning 1 on success and 0 on error.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level);
+
+/** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node'
+ * is not a list.
+ */
+CMARK_GFM_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node);
+
+/** Sets the list type of 'node', returning 1 on success and 0 on error.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_list_type(cmark_node *node,
+ cmark_list_type type);
+
+/** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node'
+ * is not a list.
+ */
+CMARK_GFM_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node);
+
+/** Sets the list delimiter type of 'node', returning 1 on success and 0
+ * on error.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_list_delim(cmark_node *node,
+ cmark_delim_type delim);
+
+/** Returns starting number of 'node', if it is an ordered list, otherwise 0.
+ */
+CMARK_GFM_EXPORT int cmark_node_get_list_start(cmark_node *node);
+
+/** Sets starting number of 'node', if it is an ordered list. Returns 1
+ * on success, 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_list_start(cmark_node *node, int start);
+
+/** Returns 1 if 'node' is a tight list, 0 otherwise.
+ */
+CMARK_GFM_EXPORT int cmark_node_get_list_tight(cmark_node *node);
+
+/** Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight);
+
+/** Returns the info string from a fenced code block.
+ */
+CMARK_GFM_EXPORT const char *cmark_node_get_fence_info(cmark_node *node);
+
+/** Sets the info string in a fenced code block, returning 1 on
+ * success and 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info);
+
+/** Sets code blocks fencing details
+ */
+CMARK_GFM_EXPORT int cmark_node_set_fenced(cmark_node * node, int fenced,
+ int length, int offset, char character);
+
+/** Returns code blocks fencing details
+ */
+CMARK_GFM_EXPORT int cmark_node_get_fenced(cmark_node *node, int *length, int *offset, char *character);
+
+/** Returns the URL of a link or image 'node', or an empty string
+ if no URL is set. Returns NULL if called on a node that is
+ not a link or image.
+ */
+CMARK_GFM_EXPORT const char *cmark_node_get_url(cmark_node *node);
+
+/** Sets the URL of a link or image 'node'. Returns 1 on success,
+ * 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_url(cmark_node *node, const char *url);
+
+/** Returns the title of a link or image 'node', or an empty
+ string if no title is set. Returns NULL if called on a node
+ that is not a link or image.
+ */
+CMARK_GFM_EXPORT const char *cmark_node_get_title(cmark_node *node);
+
+/** Sets the title of a link or image 'node'. Returns 1 on success,
+ * 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_title(cmark_node *node, const char *title);
+
+/** Returns the literal "on enter" text for a custom 'node', or
+ an empty string if no on_enter is set. Returns NULL if called
+ on a non-custom node.
+ */
+CMARK_GFM_EXPORT const char *cmark_node_get_on_enter(cmark_node *node);
+
+/** Sets the literal text to render "on enter" for a custom 'node'.
+ Any children of the node will be rendered after this text.
+ Returns 1 on success 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_on_enter(cmark_node *node,
+ const char *on_enter);
+
+/** Returns the literal "on exit" text for a custom 'node', or
+ an empty string if no on_exit is set. Returns NULL if
+ called on a non-custom node.
+ */
+CMARK_GFM_EXPORT const char *cmark_node_get_on_exit(cmark_node *node);
+
+/** Sets the literal text to render "on exit" for a custom 'node'.
+ Any children of the node will be rendered before this text.
+ Returns 1 on success 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit);
+
+/** Returns the line on which 'node' begins.
+ */
+CMARK_GFM_EXPORT int cmark_node_get_start_line(cmark_node *node);
+
+/** Returns the column at which 'node' begins.
+ */
+CMARK_GFM_EXPORT int cmark_node_get_start_column(cmark_node *node);
+
+/** Returns the line on which 'node' ends.
+ */
+CMARK_GFM_EXPORT int cmark_node_get_end_line(cmark_node *node);
+
+/** Returns the column at which 'node' ends.
+ */
+CMARK_GFM_EXPORT int cmark_node_get_end_column(cmark_node *node);
+
+/**
+ * ## Tree Manipulation
+ */
+
+/** Unlinks a 'node', removing it from the tree, but not freeing its
+ * memory. (Use 'cmark_node_free' for that.)
+ */
+CMARK_GFM_EXPORT void cmark_node_unlink(cmark_node *node);
+
+/** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_insert_before(cmark_node *node,
+ cmark_node *sibling);
+
+/** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
+
+/** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does
+ * not free its memory).
+ * Returns 1 on success, 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode);
+
+/** Adds 'child' to the beginning of the children of 'node'.
+ * Returns 1 on success, 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child);
+
+/** Adds 'child' to the end of the children of 'node'.
+ * Returns 1 on success, 0 on failure.
+ */
+CMARK_GFM_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child);
+
+/** Consolidates adjacent text nodes.
+ */
+CMARK_GFM_EXPORT void cmark_consolidate_text_nodes(cmark_node *root);
+
+/** Ensures a node and all its children own their own chunk memory.
+ */
+CMARK_GFM_EXPORT void cmark_node_own(cmark_node *root);
+
+/**
+ * ## Parsing
+ *
+ * Simple interface:
+ *
+ * cmark_node *document = cmark_parse_document("Hello *world*", 13,
+ * CMARK_OPT_DEFAULT);
+ *
+ * Streaming interface:
+ *
+ * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
+ * FILE *fp = fopen("myfile.md", "rb");
+ * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
+ * cmark_parser_feed(parser, buffer, bytes);
+ * if (bytes < sizeof(buffer)) {
+ * break;
+ * }
+ * }
+ * document = cmark_parser_finish(parser);
+ * cmark_parser_free(parser);
+ */
+
+/** Creates a new parser object.
+ */
+CMARK_GFM_EXPORT
+cmark_parser *cmark_parser_new(int options);
+
+/** Creates a new parser object with the given memory allocator
+ */
+CMARK_GFM_EXPORT
+cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem);
+
+/** Frees memory allocated for a parser object.
+ */
+CMARK_GFM_EXPORT
+void cmark_parser_free(cmark_parser *parser);
+
+/** Feeds a string of length 'len' to 'parser'.
+ */
+CMARK_GFM_EXPORT
+void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len);
+
+/** Finish parsing and return a pointer to a tree of nodes.
+ */
+CMARK_GFM_EXPORT
+cmark_node *cmark_parser_finish(cmark_parser *parser);
+
+/** Parse a CommonMark document in 'buffer' of length 'len'.
+ * Returns a pointer to a tree of nodes. The memory allocated for
+ * the node tree should be released using 'cmark_node_free'
+ * when it is no longer needed.
+ */
+CMARK_GFM_EXPORT
+cmark_node *cmark_parse_document(const char *buffer, size_t len, int options);
+
+/** Parse a CommonMark document in file 'f', returning a pointer to
+ * a tree of nodes. The memory allocated for the node tree should be
+ * released using 'cmark_node_free' when it is no longer needed.
+ */
+CMARK_GFM_EXPORT
+cmark_node *cmark_parse_file(FILE *f, int options);
+
+/**
+ * ## Rendering
+ */
+
+/** Render a 'node' tree as XML. It is the caller's responsibility
+ * to free the returned buffer.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_xml(cmark_node *root, int options);
+
+/** As for 'cmark_render_xml', but specifying the allocator to use for
+ * the resulting string.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_xml_with_mem(cmark_node *root, int options, cmark_mem *mem);
+
+/** Render a 'node' tree as an HTML fragment. It is up to the user
+ * to add an appropriate header and footer. It is the caller's
+ * responsibility to free the returned buffer.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_html(cmark_node *root, int options, cmark_llist *extensions);
+
+/** As for 'cmark_render_html', but specifying the allocator to use for
+ * the resulting string.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_html_with_mem(cmark_node *root, int options, cmark_llist *extensions, cmark_mem *mem);
+
+/** Render a 'node' tree as a groff man page, without the header.
+ * It is the caller's responsibility to free the returned buffer.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_man(cmark_node *root, int options, int width);
+
+/** As for 'cmark_render_man', but specifying the allocator to use for
+ * the resulting string.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_man_with_mem(cmark_node *root, int options, int width, cmark_mem *mem);
+
+/** Render a 'node' tree as a commonmark document.
+ * It is the caller's responsibility to free the returned buffer.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_commonmark(cmark_node *root, int options, int width);
+
+/** As for 'cmark_render_commonmark', but specifying the allocator to use for
+ * the resulting string.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_commonmark_with_mem(cmark_node *root, int options, int width, cmark_mem *mem);
+
+/** Render a 'node' tree as a plain text document.
+ * It is the caller's responsibility to free the returned buffer.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_plaintext(cmark_node *root, int options, int width);
+
+/** As for 'cmark_render_plaintext', but specifying the allocator to use for
+ * the resulting string.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_plaintext_with_mem(cmark_node *root, int options, int width, cmark_mem *mem);
+
+/** Render a 'node' tree as a LaTeX document.
+ * It is the caller's responsibility to free the returned buffer.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_latex(cmark_node *root, int options, int width);
+
+/** As for 'cmark_render_latex', but specifying the allocator to use for
+ * the resulting string.
+ */
+CMARK_GFM_EXPORT
+char *cmark_render_latex_with_mem(cmark_node *root, int options, int width, cmark_mem *mem);
+
+/**
+ * ## Options
+ */
+
+/** Default options.
+ */
+#define CMARK_OPT_DEFAULT 0
+
+/**
+ * ### Options affecting rendering
+ */
+
+/** Include a `data-sourcepos` attribute on all block elements.
+ */
+#define CMARK_OPT_SOURCEPOS (1 << 1)
+
+/** Render `softbreak` elements as hard line breaks.
+ */
+#define CMARK_OPT_HARDBREAKS (1 << 2)
+
+/** Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`,
+ * `file:`, and `data:`, except for `image/png`, `image/gif`,
+ * `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced
+ * by a placeholder HTML comment. Unsafe links are replaced by
+ * empty strings.
+ */
+#define CMARK_OPT_SAFE (1 << 3)
+
+/** Render `softbreak` elements as spaces.
+ */
+#define CMARK_OPT_NOBREAKS (1 << 4)
+
+/**
+ * ### Options affecting parsing
+ */
+
+/** Legacy option (no effect).
+ */
+#define CMARK_OPT_NORMALIZE (1 << 8)
+
+/** Validate UTF-8 in the input before parsing, replacing illegal
+ * sequences with the replacement character U+FFFD.
+ */
+#define CMARK_OPT_VALIDATE_UTF8 (1 << 9)
+
+/** Convert straight quotes to curly, --- to em dashes, -- to en dashes.
+ */
+#define CMARK_OPT_SMART (1 << 10)
+
+/** Use GitHub-style 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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark-gfm_export.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark-gfm_export.h
new file mode 100644
index 000000000000..699d737f722d
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark-gfm_export.h
@@ -0,0 +1,42 @@
+
+#ifndef CMARK_GFM_EXPORT_H
+#define CMARK_GFM_EXPORT_H
+
+#ifdef CMARK_GFM_STATIC_DEFINE
+# define CMARK_GFM_EXPORT
+# define CMARK_GFM_NO_EXPORT
+#else
+# ifndef CMARK_GFM_EXPORT
+# ifdef libcmark_gfm_EXPORTS
+ /* We are building this library */
+# define CMARK_GFM_EXPORT __attribute__((visibility("default")))
+# else
+ /* We are using this library */
+# define CMARK_GFM_EXPORT __attribute__((visibility("default")))
+# endif
+# endif
+
+# ifndef CMARK_GFM_NO_EXPORT
+# define CMARK_GFM_NO_EXPORT __attribute__((visibility("hidden")))
+# endif
+#endif
+
+#ifndef CMARK_GFM_DEPRECATED
+# define CMARK_GFM_DEPRECATED __attribute__ ((__deprecated__))
+#endif
+
+#ifndef CMARK_GFM_DEPRECATED_EXPORT
+# define CMARK_GFM_DEPRECATED_EXPORT CMARK_GFM_EXPORT CMARK_GFM_DEPRECATED
+#endif
+
+#ifndef CMARK_GFM_DEPRECATED_NO_EXPORT
+# define CMARK_GFM_DEPRECATED_NO_EXPORT CMARK_GFM_NO_EXPORT CMARK_GFM_DEPRECATED
+#endif
+
+#if 0 /* DEFINE_NO_DEPRECATED */
+# ifndef CMARK_GFM_NO_DEPRECATED
+# define CMARK_GFM_NO_DEPRECATED
+# endif
+#endif
+
+#endif /* CMARK_GFM_EXPORT_H */
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark-gfm_version.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark-gfm_version.h
new file mode 100644
index 000000000000..03db40df3e71
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark-gfm_version.h
@@ -0,0 +1,7 @@
+#ifndef CMARK_GFM_VERSION_H
+#define CMARK_GFM_VERSION_H
+
+#define CMARK_GFM_VERSION ((0 << 24) | (28 << 16) | (3 << 8) | 16)
+#define CMARK_GFM_VERSION_STRING "0.28.3.gfm.16"
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark.c
new file mode 100644
index 000000000000..b3fad4b08441
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark.c
@@ -0,0 +1,55 @@
+#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() { return CMARK_GFM_VERSION; }
+
+const char *cmark_version_string() { 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() {
+ 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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark.o
new file mode 100644
index 000000000000..486ec265181d
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.c
new file mode 100644
index 000000000000..c0c4d5b037b7
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.c
@@ -0,0 +1,44 @@
+#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; }
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.h
new file mode 100644
index 000000000000..67c1cb037e3c
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.h
@@ -0,0 +1,33 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.o
new file mode 100644
index 000000000000..4babcba3025f
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/cmark_ctype.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmark.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmark.c
new file mode 100644
index 000000000000..9943e4c53d9f
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmark.c
@@ -0,0 +1,508 @@
+#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 == '*' || 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 (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 {
+ cmark_render_ascii(renderer, "\\");
+ cmark_render_code_point(renderer, c);
+ }
+ } else {
+ cmark_render_code_point(renderer, c);
+ }
+}
+
+static int longest_backtick_sequence(const char *code) {
+ int longest = 0;
+ int current = 0;
+ size_t i = 0;
+ size_t code_len = 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);
+}
+
+// if node is a block node, returns node.
+// otherwise returns first block-level node that is an ancestor of node.
+// if there is no block-level ancestor, returns NULL.
+static cmark_node *get_containing_block(cmark_node *node) {
+ while (node) {
+ if (CMARK_NODE_BLOCK_P(node)) {
+ return node;
+ } else {
+ node = node->parent;
+ }
+ }
+ return NULL;
+}
+
+static int S_render_node(cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ cmark_node *tmp;
+ int list_number;
+ cmark_delim_type list_delim;
+ int numticks;
+ int i;
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+ const char *info, *code, *title;
+ size_t info_len, code_len;
+ char listmarker[LISTMARKER_SIZE];
+ char *emph_delim;
+ bool first_in_list_item;
+ bufsize_t marker_width;
+ bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options) &&
+ !(CMARK_OPT_HARDBREAKS & options);
+
+ // Don't adjust tight list status til we've started the list.
+ // Otherwise we loose the blank line between a paragraph and
+ // a following list.
+ if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) {
+ tmp = get_containing_block(node);
+ renderer->in_tight_list_item =
+ tmp && // tmp might be NULL if there is no containing block
+ ((tmp->type == CMARK_NODE_ITEM &&
+ cmark_node_get_list_tight(tmp->parent)) ||
+ (tmp && tmp->parent && tmp->parent->type == CMARK_NODE_ITEM &&
+ cmark_node_get_list_tight(tmp->parent->parent)));
+ }
+
+ 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_list_start(node->parent);
+ list_delim = cmark_node_get_list_delim(node->parent);
+ tmp = node;
+ while (tmp->prev) {
+ tmp = tmp->prev;
+ list_number += 1;
+ }
+ // we ensure a width of at least 4 so
+ // we get nice transition from single digits
+ // to double
+ snprintf(listmarker, 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);
+ 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("`");
+ }
+ LIT(" ");
+ OUT(info, false, LITERAL);
+ CR();
+ OUT(cmark_node_get_literal(node), false, LITERAL);
+ CR();
+ for (i = 0; i < numticks; i++) {
+ LIT("`");
+ }
+ }
+ BLANKLINE();
+ break;
+
+ case CMARK_NODE_HTML_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);
+ for (i = 0; i < numticks; i++) {
+ LIT("`");
+ }
+ if (code_len == 0 || code[0] == '`') {
+ LIT(" ");
+ }
+ OUT(cmark_node_get_literal(node), allow_wrap, LITERAL);
+ if (code_len == 0 || code[code_len - 1] == '`') {
+ 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 (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("[^");
+ 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("]:\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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmark.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmark.o
new file mode 100644
index 000000000000..1f3dd4540a82
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmark.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.c
new file mode 100644
index 000000000000..8f2c85886eff
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.c
@@ -0,0 +1,1197 @@
+#include "commonmarker.h"
+#include "cmark-gfm.h"
+#include "houdini.h"
+#include "node.h"
+#include "registry.h"
+#include "parser.h"
+#include "syntax_extension.h"
+#include "cmark-gfm-core-extensions.h"
+
+static VALUE rb_mNodeError;
+static VALUE rb_mNode;
+
+static VALUE sym_document;
+static VALUE sym_blockquote;
+static VALUE sym_list;
+static VALUE sym_list_item;
+static VALUE sym_code_block;
+static VALUE sym_html;
+static VALUE sym_paragraph;
+static VALUE sym_header;
+static VALUE sym_hrule;
+static VALUE sym_text;
+static VALUE sym_softbreak;
+static VALUE sym_linebreak;
+static VALUE sym_code;
+static VALUE sym_inline_html;
+static VALUE sym_emph;
+static VALUE sym_strong;
+static VALUE sym_link;
+static VALUE sym_image;
+static VALUE sym_footnote_reference;
+static VALUE sym_footnote_definition;
+
+static VALUE sym_bullet_list;
+static VALUE sym_ordered_list;
+
+static VALUE sym_left;
+static VALUE sym_right;
+static VALUE sym_center;
+
+static VALUE encode_utf8_string(const char *c_string) {
+ VALUE string = rb_str_new2(c_string);
+ int enc = rb_enc_find_index("UTF-8");
+ rb_enc_associate_index(string, enc);
+ return string;
+}
+
+static void rb_mark_c_struct(void *data) {
+ cmark_node *node = data;
+ cmark_node *child;
+
+ /* Mark the parent to make sure that the tree won't be freed as
+ long as a child node is referenced. */
+ cmark_node *parent = cmark_node_parent(node);
+ if (parent) {
+ void *user_data = cmark_node_get_user_data(parent);
+ if (!user_data) {
+ /* This should never happen. Child can nodes can only
+ be returned from parents that already are
+ associated with a Ruby object. */
+ fprintf(stderr, "parent without user_data\n");
+ abort();
+ }
+ rb_gc_mark((VALUE)user_data);
+ }
+
+ /* Mark all children to make sure their cached Ruby objects won't
+ be freed. */
+ for (child = cmark_node_first_child(node); child != NULL;
+ child = cmark_node_next(child)) {
+ void *user_data = cmark_node_get_user_data(child);
+ if (user_data)
+ rb_gc_mark((VALUE)user_data);
+ }
+}
+
+static void rb_free_c_struct(void *data) {
+ /* It's important that the `free` function does not inspect the
+ node data, as it may be part of a tree that was already freed. */
+ cmark_node_free(data);
+}
+
+static VALUE rb_node_to_value(cmark_node *node) {
+ void *user_data;
+ RUBY_DATA_FUNC free_func;
+ VALUE val;
+
+ if (node == NULL)
+ return Qnil;
+
+ user_data = cmark_node_get_user_data(node);
+ if (user_data)
+ return (VALUE)user_data;
+
+ /* Only free tree roots. */
+ free_func = cmark_node_parent(node) ? NULL : rb_free_c_struct;
+ val = Data_Wrap_Struct(rb_mNode, rb_mark_c_struct, free_func, node);
+ cmark_node_set_user_data(node, (void *)val);
+
+ return val;
+}
+
+/* If the node structure is changed, the finalizers must be updated. */
+
+static void rb_parent_added(VALUE val) { RDATA(val)->dfree = NULL; }
+
+static void rb_parent_removed(VALUE val) {
+ RDATA(val)->dfree = rb_free_c_struct;
+}
+
+static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions, cmark_mem *mem) {
+ int options;
+ int extensions_len;
+ VALUE rb_ext_name;
+ int i;
+
+ Check_Type(rb_options, T_FIXNUM);
+ Check_Type(rb_extensions, T_ARRAY);
+
+ options = FIX2INT(rb_options);
+ extensions_len = RARRAY_LEN(rb_extensions);
+
+ cmark_parser *parser = cmark_parser_new_with_mem(options, mem);
+ for (i = 0; i < extensions_len; ++i) {
+ rb_ext_name = RARRAY_PTR(rb_extensions)[i];
+
+ if (!SYMBOL_P(rb_ext_name)) {
+ cmark_parser_free(parser);
+ cmark_arena_reset();
+ rb_raise(rb_eTypeError, "extension names should be Symbols; got a %"PRIsVALUE"", rb_obj_class(rb_ext_name));
+ }
+
+ cmark_syntax_extension *syntax_extension =
+ cmark_find_syntax_extension(rb_id2name(SYM2ID(rb_ext_name)));
+
+ if (!syntax_extension) {
+ cmark_parser_free(parser);
+ cmark_arena_reset();
+ rb_raise(rb_eArgError, "extension %s not found", rb_id2name(SYM2ID(rb_ext_name)));
+ }
+
+ cmark_parser_attach_syntax_extension(parser, syntax_extension);
+ }
+
+ return parser;
+}
+
+/*
+ * Internal: Parses a Markdown string into an HTML string.
+ *
+ */
+static VALUE rb_markdown_to_html(VALUE self, VALUE rb_text, VALUE rb_options, VALUE rb_extensions) {
+ char *str, *html;
+ int len;
+ cmark_parser *parser;
+ cmark_node *doc;
+ Check_Type(rb_text, T_STRING);
+ Check_Type(rb_options, T_FIXNUM);
+
+ parser = prepare_parser(rb_options, rb_extensions, cmark_get_arena_mem_allocator());
+
+ str = (char *)RSTRING_PTR(rb_text);
+ len = RSTRING_LEN(rb_text);
+
+ cmark_parser_feed(parser, str, len);
+ doc = cmark_parser_finish(parser);
+ if (doc == NULL) {
+ cmark_arena_reset();
+ rb_raise(rb_mNodeError, "error parsing document");
+ }
+
+ cmark_mem *default_mem = cmark_get_default_mem_allocator();
+ html = cmark_render_html_with_mem(doc, FIX2INT(rb_options), parser->syntax_extensions, default_mem);
+ cmark_arena_reset();
+
+ VALUE ruby_html = rb_str_new2(html);
+ default_mem->free(html);
+
+ return ruby_html;
+}
+
+/*
+ * Internal: Creates a node based on a node type.
+ *
+ * type - A {Symbol} representing the node to be created. Must be one of the
+ * following:
+ * - `:document`
+ * - `:blockquote`
+ * - `:list`
+ * - `:list_item`
+ * - `:code_block`
+ * - `:html`
+ * - `:paragraph`
+ * - `:header`
+ * - `:hrule`
+ * - `:text`
+ * - `:softbreak`
+ * - `:linebreak`
+ * - `:code`
+ * - `:inline_html`
+ * - `:emph`
+ * - `:strong`
+ * - `:link`
+ * - `:image`
+ */
+static VALUE rb_node_new(VALUE self, VALUE type) {
+ cmark_node_type node_type = 0;
+ cmark_node *node;
+
+ Check_Type(type, T_SYMBOL);
+
+ if (type == sym_document)
+ node_type = CMARK_NODE_DOCUMENT;
+ else if (type == sym_blockquote)
+ node_type = CMARK_NODE_BLOCK_QUOTE;
+ else if (type == sym_list)
+ node_type = CMARK_NODE_LIST;
+ else if (type == sym_list_item)
+ node_type = CMARK_NODE_ITEM;
+ else if (type == sym_code_block)
+ node_type = CMARK_NODE_CODE_BLOCK;
+ else if (type == sym_html)
+ node_type = CMARK_NODE_HTML;
+ else if (type == sym_paragraph)
+ node_type = CMARK_NODE_PARAGRAPH;
+ else if (type == sym_header)
+ node_type = CMARK_NODE_HEADER;
+ else if (type == sym_hrule)
+ node_type = CMARK_NODE_HRULE;
+ else if (type == sym_text)
+ node_type = CMARK_NODE_TEXT;
+ else if (type == sym_softbreak)
+ node_type = CMARK_NODE_SOFTBREAK;
+ else if (type == sym_linebreak)
+ node_type = CMARK_NODE_LINEBREAK;
+ else if (type == sym_code)
+ node_type = CMARK_NODE_CODE;
+ else if (type == sym_inline_html)
+ node_type = CMARK_NODE_INLINE_HTML;
+ else if (type == sym_emph)
+ node_type = CMARK_NODE_EMPH;
+ else if (type == sym_strong)
+ node_type = CMARK_NODE_STRONG;
+ else if (type == sym_link)
+ node_type = CMARK_NODE_LINK;
+ else if (type == sym_image)
+ node_type = CMARK_NODE_IMAGE;
+ else if (type == sym_footnote_reference)
+ node_type = CMARK_NODE_FOOTNOTE_REFERENCE;
+ else if (type == sym_footnote_definition)
+ node_type = CMARK_NODE_FOOTNOTE_DEFINITION;
+ else
+ rb_raise(rb_mNodeError, "invalid node of type %d", node_type);
+
+ node = cmark_node_new(node_type);
+ if (node == NULL) {
+ rb_raise(rb_mNodeError, "could not create node of type %d", node_type);
+ }
+
+ return rb_node_to_value(node);
+}
+
+/*
+ * Internal: Parses a Markdown string into a document.
+ *
+ */
+static VALUE rb_parse_document(VALUE self, VALUE rb_text, VALUE rb_len,
+ VALUE rb_options, VALUE rb_extensions) {
+ char *text;
+ int len, options;
+ cmark_parser *parser;
+ cmark_node *doc;
+ Check_Type(rb_text, T_STRING);
+ Check_Type(rb_len, T_FIXNUM);
+ Check_Type(rb_options, T_FIXNUM);
+
+ parser = prepare_parser(rb_options, rb_extensions, cmark_get_default_mem_allocator());
+
+ text = (char *)RSTRING_PTR(rb_text);
+ len = FIX2INT(rb_len);
+ options = FIX2INT(rb_options);
+
+ cmark_parser_feed(parser, text, len);
+ doc = cmark_parser_finish(parser);
+ if (doc == NULL) {
+ rb_raise(rb_mNodeError, "error parsing document");
+ }
+ cmark_parser_free(parser);
+
+ return rb_node_to_value(doc);
+}
+
+/*
+ * Public: Fetch the string contents of the node.
+ *
+ * Returns a {String}.
+ */
+static VALUE rb_node_get_string_content(VALUE self) {
+ const char *text;
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ text = cmark_node_get_literal(node);
+ if (text == NULL) {
+ rb_raise(rb_mNodeError, "could not get string content");
+ }
+
+ return encode_utf8_string(text);
+}
+
+/*
+ * Public: Sets the string content of the node.
+ *
+ * string - A {String} containing new content.
+ *
+ * Raises NodeError if the string content can't be set.
+ */
+static VALUE rb_node_set_string_content(VALUE self, VALUE s) {
+ char *text;
+ cmark_node *node;
+ Check_Type(s, T_STRING);
+
+ Data_Get_Struct(self, cmark_node, node);
+ text = StringValueCStr(s);
+
+ if (!cmark_node_set_literal(node, text)) {
+ rb_raise(rb_mNodeError, "could not set string content");
+ }
+
+ return Qnil;
+}
+
+/*
+ * Public: Fetches the list type of the node.
+ *
+ * Returns a {Symbol} representing the node's type.
+ */
+static VALUE rb_node_get_type(VALUE self) {
+ int node_type;
+ cmark_node *node;
+ VALUE symbol;
+ const char *s;
+
+ Data_Get_Struct(self, cmark_node, node);
+
+ node_type = cmark_node_get_type(node);
+ symbol = Qnil;
+
+ switch (node_type) {
+ case CMARK_NODE_DOCUMENT:
+ symbol = sym_document;
+ break;
+ case CMARK_NODE_BLOCK_QUOTE:
+ symbol = sym_blockquote;
+ break;
+ case CMARK_NODE_LIST:
+ symbol = sym_list;
+ break;
+ case CMARK_NODE_ITEM:
+ symbol = sym_list_item;
+ break;
+ case CMARK_NODE_CODE_BLOCK:
+ symbol = sym_code_block;
+ break;
+ case CMARK_NODE_HTML:
+ symbol = sym_html;
+ break;
+ case CMARK_NODE_PARAGRAPH:
+ symbol = sym_paragraph;
+ break;
+ case CMARK_NODE_HEADER:
+ symbol = sym_header;
+ break;
+ case CMARK_NODE_HRULE:
+ symbol = sym_hrule;
+ break;
+ case CMARK_NODE_TEXT:
+ symbol = sym_text;
+ break;
+ case CMARK_NODE_SOFTBREAK:
+ symbol = sym_softbreak;
+ break;
+ case CMARK_NODE_LINEBREAK:
+ symbol = sym_linebreak;
+ break;
+ case CMARK_NODE_CODE:
+ symbol = sym_code;
+ break;
+ case CMARK_NODE_INLINE_HTML:
+ symbol = sym_inline_html;
+ break;
+ case CMARK_NODE_EMPH:
+ symbol = sym_emph;
+ break;
+ case CMARK_NODE_STRONG:
+ symbol = sym_strong;
+ break;
+ case CMARK_NODE_LINK:
+ symbol = sym_link;
+ break;
+ case CMARK_NODE_IMAGE:
+ symbol = sym_image;
+ break;
+ case CMARK_NODE_FOOTNOTE_REFERENCE:
+ symbol = sym_footnote_reference;
+ break;
+ case CMARK_NODE_FOOTNOTE_DEFINITION:
+ symbol = sym_footnote_definition;
+ break;
+ default:
+ if (node->extension) {
+ s = node->extension->get_type_string_func(node->extension, node);
+ return ID2SYM(rb_intern(s));
+ }
+ rb_raise(rb_mNodeError, "invalid node type %d", node_type);
+ }
+
+ return symbol;
+}
+
+/*
+ * Public: Fetches the sourcepos of the node.
+ *
+ * Returns a {Hash} containing {Symbol} keys of the positions.
+ */
+static VALUE rb_node_get_sourcepos(VALUE self) {
+ int start_line, start_column, end_line, end_column;
+ VALUE result;
+
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ start_line = cmark_node_get_start_line(node);
+ start_column = cmark_node_get_start_column(node);
+ end_line = cmark_node_get_end_line(node);
+ end_column = cmark_node_get_end_column(node);
+
+ result = rb_hash_new();
+ rb_hash_aset(result, CSTR2SYM("start_line"), INT2NUM(start_line));
+ rb_hash_aset(result, CSTR2SYM("start_column"), INT2NUM(start_column));
+ rb_hash_aset(result, CSTR2SYM("end_line"), INT2NUM(end_line));
+ rb_hash_aset(result, CSTR2SYM("end_column"), INT2NUM(end_column));
+
+ return result;
+}
+
+/*
+ * Public: Returns the type of the current pointer as a string.
+ *
+ * Returns a {String}.
+ */
+static VALUE rb_node_get_type_string(VALUE self) {
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ return rb_str_new2(cmark_node_get_type_string(node));
+}
+
+/*
+ * Internal: Unlinks the node from the tree (fixing pointers in
+ * parents and siblings appropriately).
+ */
+static VALUE rb_node_unlink(VALUE self) {
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ cmark_node_unlink(node);
+
+ rb_parent_removed(self);
+
+ return Qnil;
+}
+
+/* Public: Fetches the first child of the node.
+ *
+ * Returns a {Node} if a child exists, `nil` otherise.
+ */
+static VALUE rb_node_first_child(VALUE self) {
+ cmark_node *node, *child;
+ Data_Get_Struct(self, cmark_node, node);
+
+ child = cmark_node_first_child(node);
+
+ return rb_node_to_value(child);
+}
+
+/* Public: Fetches the next sibling of the node.
+ *
+ * Returns a {Node} if a sibling exists, `nil` otherwise.
+ */
+static VALUE rb_node_next(VALUE self) {
+ cmark_node *node, *next;
+ Data_Get_Struct(self, cmark_node, node);
+
+ next = cmark_node_next(node);
+
+ return rb_node_to_value(next);
+}
+
+/*
+ * Public: Inserts a node as a sibling before the current node.
+ *
+ * sibling - A sibling {Node} to insert.
+ *
+ * Returns `true` if successful.
+ * Raises NodeError if the node can't be inserted.
+ */
+static VALUE rb_node_insert_before(VALUE self, VALUE sibling) {
+ cmark_node *node1, *node2;
+ Data_Get_Struct(self, cmark_node, node1);
+
+ Data_Get_Struct(sibling, cmark_node, node2);
+
+ if (!cmark_node_insert_before(node1, node2)) {
+ rb_raise(rb_mNodeError, "could not insert before");
+ }
+
+ rb_parent_added(sibling);
+
+ return Qtrue;
+}
+
+/* Internal: Convert the node to an HTML string.
+ *
+ * Returns a {String}.
+ */
+static VALUE rb_render_html(VALUE self, VALUE rb_options, VALUE rb_extensions) {
+ int options, extensions_len;
+ VALUE rb_ext_name;
+ int i;
+ cmark_node *node;
+ cmark_llist *extensions = NULL;
+ cmark_mem *mem = cmark_get_default_mem_allocator();
+ Check_Type(rb_options, T_FIXNUM);
+ Check_Type(rb_extensions, T_ARRAY);
+
+ options = FIX2INT(rb_options);
+ extensions_len = RARRAY_LEN(rb_extensions);
+
+ Data_Get_Struct(self, cmark_node, node);
+
+ for (i = 0; i < extensions_len; ++i) {
+ rb_ext_name = RARRAY_PTR(rb_extensions)[i];
+
+ if (!SYMBOL_P(rb_ext_name)) {
+ cmark_llist_free(mem, extensions);
+ rb_raise(rb_eTypeError, "extension names should be Symbols; got a %"PRIsVALUE"", rb_obj_class(rb_ext_name));
+ }
+
+ cmark_syntax_extension *syntax_extension =
+ cmark_find_syntax_extension(rb_id2name(SYM2ID(rb_ext_name)));
+
+ if (!syntax_extension) {
+ cmark_llist_free(mem, extensions);
+ rb_raise(rb_eArgError, "extension %s not found\n", rb_id2name(SYM2ID(rb_ext_name)));
+ }
+
+ extensions = cmark_llist_append(mem, extensions, syntax_extension);
+ }
+
+ char *html = cmark_render_html(node, options, extensions);
+ VALUE ruby_html = rb_str_new2(html);
+
+ cmark_llist_free(mem, extensions);
+ free(html);
+
+ return ruby_html;
+}
+
+/* Internal: Convert the node to a CommonMark string.
+ *
+ * Returns a {String}.
+ */
+static VALUE rb_render_commonmark(int argc, VALUE *argv, VALUE self) {
+ VALUE rb_options, rb_width;
+ rb_scan_args(argc, argv, "11", &rb_options, &rb_width);
+
+ int width = 120;
+ if (!NIL_P(rb_width)) {
+ Check_Type(rb_width, T_FIXNUM);
+ width = FIX2INT(rb_width);
+ }
+
+ int options;
+ cmark_node *node;
+ Check_Type(rb_options, T_FIXNUM);
+
+ options = FIX2INT(rb_options);
+ Data_Get_Struct(self, cmark_node, node);
+
+ char *cmark = cmark_render_commonmark(node, options, width);
+ VALUE ruby_cmark = rb_str_new2(cmark);
+ free(cmark);
+
+ return ruby_cmark;
+}
+
+/* Internal: Convert the node to a plain textstring.
+ *
+ * Returns a {String}.
+ */
+static VALUE rb_render_plaintext(int argc, VALUE *argv, VALUE self) {
+ VALUE rb_options, rb_width;
+ rb_scan_args(argc, argv, "11", &rb_options, &rb_width);
+
+ int width = 120;
+ if (!NIL_P(rb_width)) {
+ Check_Type(rb_width, T_FIXNUM);
+ width = FIX2INT(rb_width);
+ }
+
+ int options;
+ cmark_node *node;
+ Check_Type(rb_options, T_FIXNUM);
+
+ options = FIX2INT(rb_options);
+ Data_Get_Struct(self, cmark_node, node);
+
+ char *text = cmark_render_plaintext(node, options, width);
+ VALUE ruby_text = rb_str_new2(text);
+ free(text);
+
+ return ruby_text;
+}
+
+/*
+ * Public: Inserts a node as a sibling after the current node.
+ *
+ * sibling - A sibling {Node} to insert.
+ *
+ * Returns `true` if successful.
+ * Raises NodeError if the node can't be inserted.
+ */
+static VALUE rb_node_insert_after(VALUE self, VALUE sibling) {
+ cmark_node *node1, *node2;
+ Data_Get_Struct(self, cmark_node, node1);
+
+ Data_Get_Struct(sibling, cmark_node, node2);
+
+ if (!cmark_node_insert_after(node1, node2)) {
+ rb_raise(rb_mNodeError, "could not insert after");
+ }
+
+ rb_parent_added(sibling);
+
+ return Qtrue;
+}
+
+/*
+ * Public: Inserts a node as the first child of the current node.
+ *
+ * child - A child {Node} to insert.
+ *
+ * Returns `true` if successful.
+ * Raises NodeError if the node can't be inserted.
+ */
+static VALUE rb_node_prepend_child(VALUE self, VALUE child) {
+ cmark_node *node1, *node2;
+ Data_Get_Struct(self, cmark_node, node1);
+
+ Data_Get_Struct(child, cmark_node, node2);
+
+ if (!cmark_node_prepend_child(node1, node2)) {
+ rb_raise(rb_mNodeError, "could not prepend child");
+ }
+
+ rb_parent_added(child);
+
+ return Qtrue;
+}
+
+/*
+ * Public: Inserts a node as the last child of the current node.
+ *
+ * child - A child {Node} to insert.
+ *
+ * Returns `true` if successful.
+ * Raises NodeError if the node can't be inserted.
+ */
+static VALUE rb_node_append_child(VALUE self, VALUE child) {
+ cmark_node *node1, *node2;
+ Data_Get_Struct(self, cmark_node, node1);
+
+ Data_Get_Struct(child, cmark_node, node2);
+
+ if (!cmark_node_append_child(node1, node2)) {
+ rb_raise(rb_mNodeError, "could not append child");
+ }
+
+ rb_parent_added(child);
+
+ return Qtrue;
+}
+
+/* Public: Fetches the first child of the current node.
+ *
+ * Returns a {Node} if a child exists, `nil` otherise.
+ */
+static VALUE rb_node_last_child(VALUE self) {
+ cmark_node *node, *child;
+ Data_Get_Struct(self, cmark_node, node);
+
+ child = cmark_node_last_child(node);
+
+ return rb_node_to_value(child);
+}
+
+/* Public: Fetches the parent of the current node.
+ *
+ * Returns a {Node} if a parent exists, `nil` otherise.
+ */
+static VALUE rb_node_parent(VALUE self) {
+ cmark_node *node, *parent;
+ Data_Get_Struct(self, cmark_node, node);
+
+ parent = cmark_node_parent(node);
+
+ return rb_node_to_value(parent);
+}
+
+/* Public: Fetches the previous sibling of the current node.
+ *
+ * Returns a {Node} if a parent exists, `nil` otherise.
+ */
+static VALUE rb_node_previous(VALUE self) {
+ cmark_node *node, *previous;
+ Data_Get_Struct(self, cmark_node, node);
+
+ previous = cmark_node_previous(node);
+
+ return rb_node_to_value(previous);
+}
+
+/*
+ * Public: Gets the URL of the current node (must be a `:link` or `:image`).
+ *
+ * Returns a {String}.
+ * Raises a NodeError if the URL can't be retrieved.
+ */
+static VALUE rb_node_get_url(VALUE self) {
+ const char *text;
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ text = cmark_node_get_url(node);
+ if (text == NULL) {
+ rb_raise(rb_mNodeError, "could not get url");
+ }
+
+ return rb_str_new2(text);
+}
+
+/*
+ * Public: Sets the URL of the current node (must be a `:link` or `:image`).
+ *
+ * url - A {String} representing the new URL
+ *
+ * Raises a NodeError if the URL can't be set.
+ */
+static VALUE rb_node_set_url(VALUE self, VALUE url) {
+ cmark_node *node;
+ char *text;
+ Check_Type(url, T_STRING);
+
+ Data_Get_Struct(self, cmark_node, node);
+ text = StringValueCStr(url);
+
+ if (!cmark_node_set_url(node, text)) {
+ rb_raise(rb_mNodeError, "could not set url");
+ }
+
+ return Qnil;
+}
+
+/*
+ * Public: Gets the title of the current node (must be a `:link` or `:image`).
+ *
+ * Returns a {String}.
+ * Raises a NodeError if the title can't be retrieved.
+ */
+static VALUE rb_node_get_title(VALUE self) {
+ const char *text;
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ text = cmark_node_get_title(node);
+ if (text == NULL) {
+ rb_raise(rb_mNodeError, "could not get title");
+ }
+
+ return rb_str_new2(text);
+}
+
+/*
+ * Public: Sets the title of the current node (must be a `:link` or `:image`).
+ *
+ * title - A {String} representing the new title
+ *
+ * Raises a NodeError if the title can't be set.
+ */
+static VALUE rb_node_set_title(VALUE self, VALUE title) {
+ char *text;
+ cmark_node *node;
+ Check_Type(title, T_STRING);
+
+ Data_Get_Struct(self, cmark_node, node);
+ text = StringValueCStr(title);
+
+ if (!cmark_node_set_title(node, text)) {
+ rb_raise(rb_mNodeError, "could not set title");
+ }
+
+ return Qnil;
+}
+
+/*
+ * Public: Gets the header level of the current node (must be a `:header`).
+ *
+ * Returns a {Number} representing the header level.
+ * Raises a NodeError if the header level can't be retrieved.
+ */
+static VALUE rb_node_get_header_level(VALUE self) {
+ int header_level;
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ header_level = cmark_node_get_header_level(node);
+
+ if (header_level == 0) {
+ rb_raise(rb_mNodeError, "could not get header_level");
+ }
+
+ return INT2NUM(header_level);
+}
+
+/*
+ * Public: Sets the header level of the current node (must be a `:header`).
+ *
+ * level - A {Number} representing the new header level
+ *
+ * Raises a NodeError if the header level can't be set.
+ */
+static VALUE rb_node_set_header_level(VALUE self, VALUE level) {
+ int l;
+ cmark_node *node;
+ Check_Type(level, T_FIXNUM);
+
+ Data_Get_Struct(self, cmark_node, node);
+ l = FIX2INT(level);
+
+ if (!cmark_node_set_header_level(node, l)) {
+ rb_raise(rb_mNodeError, "could not set header_level");
+ }
+
+ return Qnil;
+}
+
+/*
+ * Public: Gets the list type of the current node (must be a `:list`).
+ *
+ * Returns a {Symbol}.
+ * Raises a NodeError if the title can't be retrieved.
+ */
+static VALUE rb_node_get_list_type(VALUE self) {
+ int list_type;
+ cmark_node *node;
+ VALUE symbol;
+ Data_Get_Struct(self, cmark_node, node);
+
+ list_type = cmark_node_get_list_type(node);
+
+ if (list_type == CMARK_BULLET_LIST) {
+ symbol = sym_bullet_list;
+ } else if (list_type == CMARK_ORDERED_LIST) {
+ symbol = sym_ordered_list;
+ } else {
+ rb_raise(rb_mNodeError, "could not get list_type");
+ }
+
+ return symbol;
+}
+
+/*
+ * Public: Sets the list type of the current node (must be a `:list`).
+ *
+ * level - A {Symbol} representing the new list type
+ *
+ * Raises a NodeError if the list type can't be set.
+ */
+static VALUE rb_node_set_list_type(VALUE self, VALUE list_type) {
+ int type = 0;
+ cmark_node *node;
+ Check_Type(list_type, T_SYMBOL);
+
+ Data_Get_Struct(self, cmark_node, node);
+
+ if (list_type == sym_bullet_list) {
+ type = CMARK_BULLET_LIST;
+ } else if (list_type == sym_ordered_list) {
+ type = CMARK_ORDERED_LIST;
+ } else {
+ rb_raise(rb_mNodeError, "invalid list_type");
+ }
+
+ if (!cmark_node_set_list_type(node, type)) {
+ rb_raise(rb_mNodeError, "could not set list_type");
+ }
+
+ return Qnil;
+}
+
+/*
+ * Public: Gets the starting number the current node (must be an
+ * `:ordered_list`).
+ *
+ * Returns a {Number} representing the starting number.
+ * Raises a NodeError if the starting number can't be retrieved.
+ */
+static VALUE rb_node_get_list_start(VALUE self) {
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ if (cmark_node_get_type(node) != CMARK_NODE_LIST ||
+ cmark_node_get_list_type(node) != CMARK_ORDERED_LIST) {
+ rb_raise(rb_mNodeError, "can't get list_start for non-ordered list %d",
+ cmark_node_get_list_type(node));
+ }
+
+ return INT2NUM(cmark_node_get_list_start(node));
+}
+
+/*
+ * Public: Sets the starting number of the current node (must be an
+ * `:ordered_list`).
+ *
+ * level - A {Number} representing the new starting number
+ *
+ * Raises a NodeError if the starting number can't be set.
+ */
+static VALUE rb_node_set_list_start(VALUE self, VALUE start) {
+ int s;
+ cmark_node *node;
+ Check_Type(start, T_FIXNUM);
+
+ Data_Get_Struct(self, cmark_node, node);
+ s = FIX2INT(start);
+
+ if (!cmark_node_set_list_start(node, s)) {
+ rb_raise(rb_mNodeError, "could not set list_start");
+ }
+
+ return Qnil;
+}
+
+/*
+ * Public: Gets the tight status the current node (must be a `:list`).
+ *
+ * Returns a `true` if the list is tight, `false` otherwise.
+ * Raises a NodeError if the starting number can't be retrieved.
+ */
+static VALUE rb_node_get_list_tight(VALUE self) {
+ int flag;
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ if (cmark_node_get_type(node) != CMARK_NODE_LIST) {
+ rb_raise(rb_mNodeError, "can't get list_tight for non-list");
+ }
+
+ flag = cmark_node_get_list_tight(node);
+
+ return flag ? Qtrue : Qfalse;
+}
+
+/*
+ * Public: Sets the tight status of the current node (must be a `:list`).
+ *
+ * tight - A {Boolean} representing the new tightness
+ *
+ * Raises a NodeError if the tightness can't be set.
+ */
+static VALUE rb_node_set_list_tight(VALUE self, VALUE tight) {
+ int t;
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+ t = RTEST(tight);
+
+ if (!cmark_node_set_list_tight(node, t)) {
+ rb_raise(rb_mNodeError, "could not set list_tight");
+ }
+
+ return Qnil;
+}
+
+/*
+ * Public: Gets the fence info of the current node (must be a `:code_block`).
+ *
+ * Returns a {String} representing the fence info.
+ * Raises a NodeError if the fence info can't be retrieved.
+ */
+static VALUE rb_node_get_fence_info(VALUE self) {
+ const char *fence_info;
+ cmark_node *node;
+ Data_Get_Struct(self, cmark_node, node);
+
+ fence_info = cmark_node_get_fence_info(node);
+
+ if (fence_info == NULL) {
+ rb_raise(rb_mNodeError, "could not get fence_info");
+ }
+
+ return rb_str_new2(fence_info);
+}
+
+/*
+ * Public: Sets the fence info of the current node (must be a `:code_block`).
+ *
+ * info - A {String} representing the new fence info
+ *
+ * Raises a NodeError if the fence info can't be set.
+ */
+static VALUE rb_node_set_fence_info(VALUE self, VALUE info) {
+ char *text;
+ cmark_node *node;
+ Check_Type(info, T_STRING);
+
+ Data_Get_Struct(self, cmark_node, node);
+ text = StringValueCStr(info);
+
+ if (!cmark_node_set_fence_info(node, text)) {
+ rb_raise(rb_mNodeError, "could not set fence_info");
+ }
+
+ return Qnil;
+}
+
+static VALUE rb_node_get_table_alignments(VALUE self) {
+ uint16_t column_count, i;
+ uint8_t *alignments;
+ cmark_node *node;
+ VALUE ary;
+ Data_Get_Struct(self, cmark_node, node);
+
+ column_count = cmark_gfm_extensions_get_table_columns(node);
+ alignments = cmark_gfm_extensions_get_table_alignments(node);
+
+ if (!column_count || !alignments) {
+ rb_raise(rb_mNodeError, "could not get column_count or alignments");
+ }
+
+ ary = rb_ary_new();
+ for (i = 0; i < column_count; ++i) {
+ if (alignments[i] == 'l')
+ rb_ary_push(ary, sym_left);
+ else if (alignments[i] == 'c')
+ rb_ary_push(ary, sym_center);
+ else if (alignments[i] == 'r')
+ rb_ary_push(ary, sym_right);
+ else
+ rb_ary_push(ary, Qnil);
+ }
+ return ary;
+}
+
+/* Internal: Escapes href URLs safely. */
+static VALUE rb_html_escape_href(VALUE self, VALUE rb_text) {
+ char *result;
+ cmark_node *node;
+ Check_Type(rb_text, T_STRING);
+
+ Data_Get_Struct(self, cmark_node, node);
+
+ cmark_mem *mem = cmark_node_mem(node);
+ cmark_strbuf buf = CMARK_BUF_INIT(mem);
+
+ if (houdini_escape_href(&buf, (const uint8_t *)RSTRING_PTR(rb_text),
+ RSTRING_LEN(rb_text))) {
+ result = (char *)cmark_strbuf_detach(&buf);
+ return rb_str_new2(result);
+ }
+
+ return rb_text;
+}
+
+/* Internal: Escapes HTML content safely. */
+static VALUE rb_html_escape_html(VALUE self, VALUE rb_text) {
+ char *result;
+ cmark_node *node;
+ Check_Type(rb_text, T_STRING);
+
+ Data_Get_Struct(self, cmark_node, node);
+
+ cmark_mem *mem = cmark_node_mem(node);
+ cmark_strbuf buf = CMARK_BUF_INIT(mem);
+
+ if (houdini_escape_html0(&buf, (const uint8_t *)RSTRING_PTR(rb_text),
+ RSTRING_LEN(rb_text), 0)) {
+ result = (char *)cmark_strbuf_detach(&buf);
+ return rb_str_new2(result);
+ }
+
+ return rb_text;
+}
+
+VALUE rb_extensions(VALUE self) {
+ cmark_llist *exts, *it;
+ cmark_syntax_extension *ext;
+ VALUE ary = rb_ary_new();
+
+ cmark_mem *mem = cmark_get_default_mem_allocator();
+ exts = cmark_list_syntax_extensions(mem);
+ for (it = exts; it; it = it->next) {
+ ext = it->data;
+ rb_ary_push(ary, rb_str_new2(ext->name));
+ }
+ cmark_llist_free(mem, exts);
+
+ return ary;
+}
+
+__attribute__((visibility("default"))) void Init_commonmarker() {
+ VALUE module;
+ sym_document = ID2SYM(rb_intern("document"));
+ sym_blockquote = ID2SYM(rb_intern("blockquote"));
+ sym_list = ID2SYM(rb_intern("list"));
+ sym_list_item = ID2SYM(rb_intern("list_item"));
+ sym_code_block = ID2SYM(rb_intern("code_block"));
+ sym_html = ID2SYM(rb_intern("html"));
+ sym_paragraph = ID2SYM(rb_intern("paragraph"));
+ sym_header = ID2SYM(rb_intern("header"));
+ sym_hrule = ID2SYM(rb_intern("hrule"));
+ sym_text = ID2SYM(rb_intern("text"));
+ sym_softbreak = ID2SYM(rb_intern("softbreak"));
+ sym_linebreak = ID2SYM(rb_intern("linebreak"));
+ sym_code = ID2SYM(rb_intern("code"));
+ sym_inline_html = ID2SYM(rb_intern("inline_html"));
+ sym_emph = ID2SYM(rb_intern("emph"));
+ sym_strong = ID2SYM(rb_intern("strong"));
+ sym_link = ID2SYM(rb_intern("link"));
+ sym_image = ID2SYM(rb_intern("image"));
+ sym_footnote_reference = ID2SYM(rb_intern("footnote_reference"));
+ sym_footnote_definition = ID2SYM(rb_intern("footnote_definition"));
+
+ sym_bullet_list = ID2SYM(rb_intern("bullet_list"));
+ sym_ordered_list = ID2SYM(rb_intern("ordered_list"));
+
+ sym_left = ID2SYM(rb_intern("left"));
+ sym_right = ID2SYM(rb_intern("right"));
+ sym_center = ID2SYM(rb_intern("center"));
+
+ module = rb_define_module("CommonMarker");
+ rb_define_singleton_method(module, "extensions", rb_extensions, 0);
+ rb_mNodeError = rb_define_class_under(module, "NodeError", rb_eStandardError);
+ rb_mNode = rb_define_class_under(module, "Node", rb_cObject);
+ rb_define_singleton_method(rb_mNode, "markdown_to_html", rb_markdown_to_html,
+ 3);
+ rb_define_singleton_method(rb_mNode, "new", rb_node_new, 1);
+ rb_define_singleton_method(rb_mNode, "parse_document", rb_parse_document, 4);
+ rb_define_method(rb_mNode, "string_content", rb_node_get_string_content, 0);
+ rb_define_method(rb_mNode, "string_content=", rb_node_set_string_content, 1);
+ rb_define_method(rb_mNode, "type", rb_node_get_type, 0);
+ rb_define_method(rb_mNode, "type_string", rb_node_get_type_string, 0);
+ rb_define_method(rb_mNode, "sourcepos", rb_node_get_sourcepos, 0);
+ rb_define_method(rb_mNode, "delete", rb_node_unlink, 0);
+ rb_define_method(rb_mNode, "first_child", rb_node_first_child, 0);
+ rb_define_method(rb_mNode, "next", rb_node_next, 0);
+ rb_define_method(rb_mNode, "insert_before", rb_node_insert_before, 1);
+ rb_define_method(rb_mNode, "_render_html", rb_render_html, 2);
+ rb_define_method(rb_mNode, "_render_commonmark", rb_render_commonmark, -1);
+ rb_define_method(rb_mNode, "_render_plaintext", rb_render_plaintext, -1);
+ rb_define_method(rb_mNode, "insert_after", rb_node_insert_after, 1);
+ rb_define_method(rb_mNode, "prepend_child", rb_node_prepend_child, 1);
+ rb_define_method(rb_mNode, "append_child", rb_node_append_child, 1);
+ rb_define_method(rb_mNode, "last_child", rb_node_last_child, 0);
+ rb_define_method(rb_mNode, "parent", rb_node_parent, 0);
+ rb_define_method(rb_mNode, "previous", rb_node_previous, 0);
+ rb_define_method(rb_mNode, "url", rb_node_get_url, 0);
+ rb_define_method(rb_mNode, "url=", rb_node_set_url, 1);
+ rb_define_method(rb_mNode, "title", rb_node_get_title, 0);
+ rb_define_method(rb_mNode, "title=", rb_node_set_title, 1);
+ rb_define_method(rb_mNode, "header_level", rb_node_get_header_level, 0);
+ rb_define_method(rb_mNode, "header_level=", rb_node_set_header_level, 1);
+ rb_define_method(rb_mNode, "list_type", rb_node_get_list_type, 0);
+ rb_define_method(rb_mNode, "list_type=", rb_node_set_list_type, 1);
+ rb_define_method(rb_mNode, "list_start", rb_node_get_list_start, 0);
+ rb_define_method(rb_mNode, "list_start=", rb_node_set_list_start, 1);
+ rb_define_method(rb_mNode, "list_tight", rb_node_get_list_tight, 0);
+ rb_define_method(rb_mNode, "list_tight=", rb_node_set_list_tight, 1);
+ rb_define_method(rb_mNode, "fence_info", rb_node_get_fence_info, 0);
+ rb_define_method(rb_mNode, "fence_info=", rb_node_set_fence_info, 1);
+ rb_define_method(rb_mNode, "table_alignments", rb_node_get_table_alignments, 0);
+
+ rb_define_method(rb_mNode, "html_escape_href", rb_html_escape_href, 1);
+ rb_define_method(rb_mNode, "html_escape_html", rb_html_escape_html, 1);
+
+ cmark_gfm_core_extensions_ensure_registered();
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.h
new file mode 100644
index 000000000000..da05dc4ad453
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.h
@@ -0,0 +1,16 @@
+#ifndef COMMONMARKER_H
+#define COMMONMARKER_H
+
+#ifndef __MSXML_LIBRARY_DEFINED__
+#define __MSXML_LIBRARY_DEFINED__
+#endif
+
+#include "cmark-gfm.h"
+#include "ruby.h"
+#include "ruby/encoding.h"
+
+#define CSTR2SYM(s) (ID2SYM(rb_intern((s))))
+
+void Init_commonmarker();
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.o
new file mode 100644
index 000000000000..9697758132be
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.so b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.so
new file mode 100644
index 000000000000..bf52e3dd8f3f
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/commonmarker.so differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/config.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/config.h
new file mode 100644
index 000000000000..d38c7c7a5991
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/config.h
@@ -0,0 +1,76 @@
+#ifndef CMARK_CONFIG_H
+#define CMARK_CONFIG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define HAVE_STDBOOL_H
+
+#ifdef HAVE_STDBOOL_H
+ #include
+#elif !defined(__cplusplus)
+ typedef char bool;
+#endif
+
+#define HAVE___BUILTIN_EXPECT
+
+#define HAVE___ATTRIBUTE__
+
+#ifdef HAVE___ATTRIBUTE__
+ #define CMARK_ATTRIBUTE(list) __attribute__ (list)
+#else
+ #define CMARK_ATTRIBUTE(list)
+#endif
+
+#ifndef CMARK_INLINE
+ #if defined(_MSC_VER) && !defined(__cplusplus)
+ #define CMARK_INLINE __inline
+ #else
+ #define CMARK_INLINE inline
+ #endif
+#endif
+
+/* snprintf and vsnprintf fallbacks for MSVC before 2015,
+ due to Valentin Milea http://stackoverflow.com/questions/2915672/
+*/
+
+#if defined(_MSC_VER) && _MSC_VER < 1900
+
+#include
+#include
+
+#define snprintf c99_snprintf
+#define vsnprintf c99_vsnprintf
+
+CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap)
+{
+ int count = -1;
+
+ if (size != 0)
+ count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
+ if (count == -1)
+ count = _vscprintf(format, ap);
+
+ return count;
+}
+
+CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...)
+{
+ int count;
+ va_list ap;
+
+ va_start(ap, format);
+ count = c99_vsnprintf(outBuf, size, format, ap);
+ va_end(ap);
+
+ return count;
+}
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/core-extensions.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/core-extensions.c
new file mode 100644
index 000000000000..e436a5d151c9
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/core-extensions.c
@@ -0,0 +1,25 @@
+#include "cmark-gfm-core-extensions.h"
+#include "autolink.h"
+#include "strikethrough.h"
+#include "table.h"
+#include "tagfilter.h"
+#include "registry.h"
+#include "plugin.h"
+
+static int core_extensions_registration(cmark_plugin *plugin) {
+ cmark_plugin_register_syntax_extension(plugin, create_table_extension());
+ cmark_plugin_register_syntax_extension(plugin,
+ create_strikethrough_extension());
+ cmark_plugin_register_syntax_extension(plugin, create_autolink_extension());
+ cmark_plugin_register_syntax_extension(plugin, create_tagfilter_extension());
+ return 1;
+}
+
+void cmark_gfm_core_extensions_ensure_registered(void) {
+ static int registered = 0;
+
+ if (!registered) {
+ cmark_register_plugin(core_extensions_registration);
+ registered = 1;
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/core-extensions.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/core-extensions.o
new file mode 100644
index 000000000000..6eb5016490d7
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/core-extensions.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/entities.inc b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/entities.inc
new file mode 100644
index 000000000000..a7c36e26da0b
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/entities.inc
@@ -0,0 +1,2138 @@
+/* Autogenerated by tools/make_headers_inc.py */
+
+struct cmark_entity_node {
+ unsigned char *entity;
+ unsigned char bytes[8];
+};
+
+#define CMARK_ENTITY_MIN_LENGTH 2
+#define CMARK_ENTITY_MAX_LENGTH 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}},
+};
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.c
new file mode 100644
index 000000000000..7e0f5f23b41a
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.c
@@ -0,0 +1,941 @@
+/* Generated by re2c 0.15.3 */
+#include
+#include "ext_scanners.h"
+
+bufsize_t _ext_scan_at(bufsize_t (*scanner)(const unsigned char *),
+ unsigned char *ptr, int len, bufsize_t offset) {
+ bufsize_t res;
+
+ if (ptr == NULL || offset > len) {
+ return 0;
+ } else {
+ unsigned char lim = ptr[len];
+
+ ptr[len] = '\0';
+ res = scanner(ptr + offset);
+ ptr[len] = lim;
+ }
+
+ return res;
+}
+
+bufsize_t _scan_table_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, 64, 0, 64, 64, 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, 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,
+ };
+ yych = *(marker = p);
+ if (yych <= '{') {
+ if (yych <= 0x1F) {
+ if (yych <= '\t') {
+ if (yych <= 0x08)
+ goto yy6;
+ goto yy3;
+ } else {
+ if (yych <= '\n')
+ goto yy2;
+ if (yych <= '\f')
+ goto yy3;
+ goto yy6;
+ }
+ } else {
+ if (yych <= '-') {
+ if (yych <= ' ')
+ goto yy3;
+ if (yych <= ',')
+ goto yy6;
+ goto yy5;
+ } else {
+ if (yych == ':')
+ goto yy4;
+ goto yy6;
+ }
+ }
+ } else {
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '|')
+ goto yy3;
+ if (yych <= 0x7F)
+ goto yy6;
+ } else {
+ if (yych <= 0xDF)
+ goto yy7;
+ if (yych <= 0xE0)
+ goto yy9;
+ goto yy10;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED)
+ goto yy14;
+ if (yych <= 0xEF)
+ goto yy10;
+ goto yy11;
+ } else {
+ if (yych <= 0xF3)
+ goto yy12;
+ if (yych <= 0xF4)
+ goto yy13;
+ }
+ }
+ }
+ yy2 : { return 0; }
+ yy3:
+ yych = *(marker = ++p);
+ if (yybm[0 + yych] & 128) {
+ goto yy22;
+ }
+ if (yych <= '\f') {
+ if (yych == '\t')
+ goto yy29;
+ if (yych <= '\n')
+ goto yy2;
+ goto yy29;
+ } else {
+ if (yych <= ' ') {
+ if (yych <= 0x1F)
+ goto yy2;
+ goto yy29;
+ } else {
+ if (yych == ':')
+ goto yy31;
+ goto yy2;
+ }
+ }
+ yy4:
+ yych = *(marker = ++p);
+ if (yybm[0 + yych] & 128) {
+ goto yy22;
+ }
+ goto yy2;
+ yy5:
+ yych = *(marker = ++p);
+ if (yybm[0 + yych] & 128) {
+ goto yy22;
+ }
+ if (yych <= ' ') {
+ if (yych <= 0x08)
+ goto yy2;
+ if (yych <= '\r')
+ goto yy16;
+ if (yych <= 0x1F)
+ goto yy2;
+ goto yy16;
+ } else {
+ if (yych <= ':') {
+ if (yych <= '9')
+ goto yy2;
+ goto yy15;
+ } else {
+ if (yych == '|')
+ goto yy16;
+ goto yy2;
+ }
+ }
+ yy6:
+ yych = *++p;
+ goto yy2;
+ yy7:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy8;
+ if (yych <= 0xBF)
+ goto yy6;
+ yy8:
+ p = marker;
+ goto yy2;
+ yy9:
+ yych = *++p;
+ if (yych <= 0x9F)
+ goto yy8;
+ if (yych <= 0xBF)
+ goto yy7;
+ goto yy8;
+ yy10:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy8;
+ if (yych <= 0xBF)
+ goto yy7;
+ goto yy8;
+ yy11:
+ yych = *++p;
+ if (yych <= 0x8F)
+ goto yy8;
+ if (yych <= 0xBF)
+ goto yy10;
+ goto yy8;
+ yy12:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy8;
+ if (yych <= 0xBF)
+ goto yy10;
+ goto yy8;
+ yy13:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy8;
+ if (yych <= 0x8F)
+ goto yy10;
+ goto yy8;
+ yy14:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy8;
+ if (yych <= 0x9F)
+ goto yy7;
+ goto yy8;
+ yy15:
+ ++p;
+ yych = *p;
+ yy16:
+ if (yybm[0 + yych] & 64) {
+ goto yy15;
+ }
+ if (yych <= '\r') {
+ if (yych <= 0x08)
+ goto yy8;
+ if (yych <= '\n')
+ goto yy20;
+ goto yy19;
+ } else {
+ if (yych != '|')
+ goto yy8;
+ }
+ yy17:
+ ++p;
+ yych = *p;
+ if (yych <= 0x1F) {
+ if (yych <= '\n') {
+ if (yych <= 0x08)
+ goto yy8;
+ if (yych <= '\t')
+ goto yy17;
+ goto yy20;
+ } else {
+ if (yych <= '\f')
+ goto yy17;
+ if (yych >= 0x0E)
+ goto yy8;
+ }
+ } else {
+ if (yych <= '-') {
+ if (yych <= ' ')
+ goto yy17;
+ if (yych <= ',')
+ goto yy8;
+ goto yy25;
+ } else {
+ if (yych == ':')
+ goto yy24;
+ goto yy8;
+ }
+ }
+ yy19:
+ yych = *++p;
+ if (yych != '\n')
+ goto yy8;
+ yy20:
+ ++p;
+ { return (bufsize_t)(p - start); }
+ yy22:
+ ++p;
+ yych = *p;
+ if (yybm[0 + yych] & 128) {
+ goto yy22;
+ }
+ if (yych <= 0x1F) {
+ if (yych <= '\n') {
+ if (yych <= 0x08)
+ goto yy8;
+ if (yych <= '\t')
+ goto yy15;
+ goto yy20;
+ } else {
+ if (yych <= '\f')
+ goto yy15;
+ if (yych <= '\r')
+ goto yy19;
+ goto yy8;
+ }
+ } else {
+ if (yych <= ':') {
+ if (yych <= ' ')
+ goto yy15;
+ if (yych <= '9')
+ goto yy8;
+ goto yy15;
+ } else {
+ if (yych == '|')
+ goto yy17;
+ goto yy8;
+ }
+ }
+ yy24:
+ ++p;
+ yych = *p;
+ if (yych != '-')
+ goto yy8;
+ yy25:
+ ++p;
+ yych = *p;
+ if (yych <= ' ') {
+ if (yych <= '\n') {
+ if (yych <= 0x08)
+ goto yy8;
+ if (yych >= '\n')
+ goto yy20;
+ } else {
+ if (yych <= '\f')
+ goto yy27;
+ if (yych <= '\r')
+ goto yy19;
+ if (yych <= 0x1F)
+ goto yy8;
+ }
+ } else {
+ if (yych <= '9') {
+ if (yych == '-')
+ goto yy25;
+ goto yy8;
+ } else {
+ if (yych <= ':')
+ goto yy27;
+ if (yych == '|')
+ goto yy17;
+ goto yy8;
+ }
+ }
+ yy27:
+ ++p;
+ yych = *p;
+ if (yych <= '\r') {
+ if (yych <= '\t') {
+ if (yych <= 0x08)
+ goto yy8;
+ goto yy27;
+ } else {
+ if (yych <= '\n')
+ goto yy20;
+ if (yych <= '\f')
+ goto yy27;
+ goto yy19;
+ }
+ } else {
+ if (yych <= ' ') {
+ if (yych <= 0x1F)
+ goto yy8;
+ goto yy27;
+ } else {
+ if (yych == '|')
+ goto yy17;
+ goto yy8;
+ }
+ }
+ yy29:
+ ++p;
+ yych = *p;
+ if (yybm[0 + yych] & 128) {
+ goto yy22;
+ }
+ if (yych <= '\f') {
+ if (yych == '\t')
+ goto yy29;
+ if (yych <= '\n')
+ goto yy8;
+ goto yy29;
+ } else {
+ if (yych <= ' ') {
+ if (yych <= 0x1F)
+ goto yy8;
+ goto yy29;
+ } else {
+ if (yych != ':')
+ goto yy8;
+ }
+ }
+ yy31:
+ ++p;
+ if (yybm[0 + (yych = *p)] & 128) {
+ goto yy22;
+ }
+ goto yy8;
+ }
+}
+
+bufsize_t _scan_table_cell(const unsigned char *p) {
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+
+ {
+ unsigned char yych;
+ static const unsigned char yybm[] = {
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 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, 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, 0, 128,
+ 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ };
+ yych = *(marker = p);
+ if (yych <= 0x7F) {
+ if (yych <= '\r') {
+ if (yych == '\n')
+ goto yy34;
+ if (yych <= '\f')
+ goto yy36;
+ goto yy45;
+ } else {
+ if (yych <= '\\') {
+ if (yych <= '[')
+ goto yy36;
+ goto yy35;
+ } else {
+ if (yych == '|')
+ goto yy45;
+ goto yy36;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) {
+ if (yych >= 0xC2)
+ goto yy37;
+ } else {
+ if (yych <= 0xE0)
+ goto yy39;
+ if (yych <= 0xEC)
+ goto yy40;
+ goto yy44;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF)
+ goto yy40;
+ goto yy41;
+ } else {
+ if (yych <= 0xF3)
+ goto yy42;
+ if (yych <= 0xF4)
+ goto yy43;
+ }
+ }
+ }
+ yy34 : { return (bufsize_t)(p - start); }
+ yy35:
+ yych = *(marker = ++p);
+ if (yych == '|')
+ goto yy49;
+ goto yy50;
+ yy36:
+ yych = *(marker = ++p);
+ goto yy50;
+ yy37:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy36;
+ yy38:
+ p = marker;
+ goto yy34;
+ yy39:
+ yych = *++p;
+ if (yych <= 0x9F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy37;
+ goto yy38;
+ yy40:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy37;
+ goto yy38;
+ yy41:
+ yych = *++p;
+ if (yych <= 0x8F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy40;
+ goto yy38;
+ yy42:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy40;
+ goto yy38;
+ yy43:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0x8F)
+ goto yy40;
+ goto yy38;
+ yy44:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0x9F)
+ goto yy37;
+ goto yy38;
+ yy45:
+ ++p;
+ { return 0; }
+ yy47:
+ marker = ++p;
+ yych = *p;
+ if (yybm[0 + yych] & 64) {
+ goto yy47;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '\f') {
+ if (yych == '\n')
+ goto yy34;
+ } else {
+ if (yych <= '\r')
+ goto yy34;
+ if (yych <= 0x7F)
+ goto yy49;
+ if (yych <= 0xC1)
+ goto yy34;
+ goto yy51;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0)
+ goto yy52;
+ if (yych == 0xED)
+ goto yy57;
+ goto yy53;
+ } else {
+ if (yych <= 0xF0)
+ goto yy54;
+ if (yych <= 0xF3)
+ goto yy55;
+ if (yych <= 0xF4)
+ goto yy56;
+ goto yy34;
+ }
+ }
+ yy49:
+ marker = ++p;
+ yych = *p;
+ yy50:
+ if (yybm[0 + yych] & 128) {
+ goto yy49;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\r')
+ goto yy34;
+ if (yych <= '\\')
+ goto yy47;
+ goto yy34;
+ } else {
+ if (yych <= 0xDF)
+ goto yy51;
+ if (yych <= 0xE0)
+ goto yy52;
+ goto yy53;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED)
+ goto yy57;
+ if (yych <= 0xEF)
+ goto yy53;
+ goto yy54;
+ } else {
+ if (yych <= 0xF3)
+ goto yy55;
+ if (yych <= 0xF4)
+ goto yy56;
+ goto yy34;
+ }
+ }
+ yy51:
+ ++p;
+ yych = *p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy49;
+ goto yy38;
+ yy52:
+ ++p;
+ yych = *p;
+ if (yych <= 0x9F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy51;
+ goto yy38;
+ yy53:
+ ++p;
+ yych = *p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy51;
+ goto yy38;
+ yy54:
+ ++p;
+ yych = *p;
+ if (yych <= 0x8F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy53;
+ goto yy38;
+ yy55:
+ ++p;
+ yych = *p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0xBF)
+ goto yy53;
+ goto yy38;
+ yy56:
+ ++p;
+ yych = *p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0x8F)
+ goto yy53;
+ goto yy38;
+ yy57:
+ ++p;
+ yych = *p;
+ if (yych <= 0x7F)
+ goto yy38;
+ if (yych <= 0x9F)
+ goto yy51;
+ goto yy38;
+ }
+}
+
+bufsize_t _scan_table_cell_end(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, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ yych = *(marker = p);
+ if (yych <= 0xDF) {
+ if (yych <= '{') {
+ if (yych != '\n')
+ goto yy63;
+ } else {
+ if (yych <= '|')
+ goto yy61;
+ if (yych <= 0x7F)
+ goto yy63;
+ if (yych >= 0xC2)
+ goto yy64;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0)
+ goto yy66;
+ if (yych == 0xED)
+ goto yy71;
+ goto yy67;
+ } else {
+ if (yych <= 0xF0)
+ goto yy68;
+ if (yych <= 0xF3)
+ goto yy69;
+ if (yych <= 0xF4)
+ goto yy70;
+ }
+ }
+ yy60 : { return 0; }
+ yy61:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ goto yy73;
+ yy62 : { return (bufsize_t)(p - start); }
+ yy63:
+ yych = *++p;
+ goto yy60;
+ yy64:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy65;
+ if (yych <= 0xBF)
+ goto yy63;
+ yy65:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy60;
+ } else {
+ goto yy62;
+ }
+ yy66:
+ yych = *++p;
+ if (yych <= 0x9F)
+ goto yy65;
+ if (yych <= 0xBF)
+ goto yy64;
+ goto yy65;
+ yy67:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy65;
+ if (yych <= 0xBF)
+ goto yy64;
+ goto yy65;
+ yy68:
+ yych = *++p;
+ if (yych <= 0x8F)
+ goto yy65;
+ if (yych <= 0xBF)
+ goto yy67;
+ goto yy65;
+ yy69:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy65;
+ if (yych <= 0xBF)
+ goto yy67;
+ goto yy65;
+ yy70:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy65;
+ if (yych <= 0x8F)
+ goto yy67;
+ goto yy65;
+ yy71:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy65;
+ if (yych <= 0x9F)
+ goto yy64;
+ goto yy65;
+ yy72:
+ yyaccept = 1;
+ marker = ++p;
+ yych = *p;
+ yy73:
+ if (yybm[0 + yych] & 128) {
+ goto yy72;
+ }
+ if (yych <= 0x08)
+ goto yy62;
+ if (yych <= '\n')
+ goto yy75;
+ if (yych >= 0x0E)
+ goto yy62;
+ yych = *++p;
+ if (yych != '\n')
+ goto yy65;
+ yy75:
+ ++p;
+ yych = *p;
+ goto yy62;
+ }
+}
+
+bufsize_t _scan_table_row_end(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, 128, 128, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ yych = *(marker = p);
+ if (yych <= 0xC1) {
+ if (yych <= '\f') {
+ if (yych <= 0x08)
+ goto yy83;
+ if (yych == '\n')
+ goto yy81;
+ goto yy79;
+ } else {
+ if (yych <= 0x1F) {
+ if (yych <= '\r')
+ goto yy80;
+ goto yy83;
+ } else {
+ if (yych <= ' ')
+ goto yy79;
+ if (yych <= 0x7F)
+ goto yy83;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF)
+ goto yy84;
+ if (yych <= 0xE0)
+ goto yy86;
+ if (yych <= 0xEC)
+ goto yy87;
+ goto yy91;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF)
+ goto yy87;
+ goto yy88;
+ } else {
+ if (yych <= 0xF3)
+ goto yy89;
+ if (yych <= 0xF4)
+ goto yy90;
+ }
+ }
+ }
+ yy78 : { return 0; }
+ yy79:
+ yych = *(marker = ++p);
+ if (yych <= 0x08)
+ goto yy78;
+ if (yych <= '\r')
+ goto yy94;
+ if (yych == ' ')
+ goto yy94;
+ goto yy78;
+ yy80:
+ yych = *++p;
+ if (yych != '\n')
+ goto yy78;
+ yy81:
+ ++p;
+ { return (bufsize_t)(p - start); }
+ yy83:
+ yych = *++p;
+ goto yy78;
+ yy84:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy85;
+ if (yych <= 0xBF)
+ goto yy83;
+ yy85:
+ p = marker;
+ goto yy78;
+ yy86:
+ yych = *++p;
+ if (yych <= 0x9F)
+ goto yy85;
+ if (yych <= 0xBF)
+ goto yy84;
+ goto yy85;
+ yy87:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy85;
+ if (yych <= 0xBF)
+ goto yy84;
+ goto yy85;
+ yy88:
+ yych = *++p;
+ if (yych <= 0x8F)
+ goto yy85;
+ if (yych <= 0xBF)
+ goto yy87;
+ goto yy85;
+ yy89:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy85;
+ if (yych <= 0xBF)
+ goto yy87;
+ goto yy85;
+ yy90:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy85;
+ if (yych <= 0x8F)
+ goto yy87;
+ goto yy85;
+ yy91:
+ yych = *++p;
+ if (yych <= 0x7F)
+ goto yy85;
+ if (yych <= 0x9F)
+ goto yy84;
+ goto yy85;
+ yy92:
+ yych = *++p;
+ if (yych == '\n')
+ goto yy81;
+ goto yy85;
+ yy93:
+ ++p;
+ yych = *p;
+ yy94:
+ if (yybm[0 + yych] & 128) {
+ goto yy93;
+ }
+ if (yych <= 0x08)
+ goto yy85;
+ if (yych <= '\n')
+ goto yy81;
+ if (yych <= '\r')
+ goto yy92;
+ goto yy85;
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.h
new file mode 100644
index 000000000000..3bfe586c1923
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.h
@@ -0,0 +1,22 @@
+#include "chunk.h"
+#include "cmark-gfm.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+bufsize_t _ext_scan_at(bufsize_t (*scanner)(const unsigned char *),
+ unsigned char *ptr, int len, bufsize_t offset);
+bufsize_t _scan_table_start(const unsigned char *p);
+bufsize_t _scan_table_cell(const unsigned char *p);
+bufsize_t _scan_table_cell_end(const unsigned char *p);
+bufsize_t _scan_table_row_end(const unsigned char *p);
+
+#define scan_table_start(c, l, n) _ext_scan_at(&_scan_table_start, c, l, n)
+#define scan_table_cell(c, l, n) _ext_scan_at(&_scan_table_cell, c, l, n)
+#define scan_table_cell_end(c, l, n) _ext_scan_at(&_scan_table_cell_end, c, l, n)
+#define scan_table_row_end(c, l, n) _ext_scan_at(&_scan_table_row_end, c, l, n)
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.o
new file mode 100644
index 000000000000..02bcecc26b06
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/ext_scanners.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/extconf.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/extconf.rb
new file mode 100644
index 000000000000..8283fcf2929d
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/extconf.rb
@@ -0,0 +1,5 @@
+require 'mkmf'
+
+$CFLAGS << " -std=c99"
+
+create_makefile('commonmarker/commonmarker')
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.c
new file mode 100644
index 000000000000..f2d2765f4fec
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.c
@@ -0,0 +1,40 @@
+#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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.h
new file mode 100644
index 000000000000..43dd64ff60c8
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.h
@@ -0,0 +1,25 @@
+#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);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.o
new file mode 100644
index 000000000000..fc3581d01654
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/footnotes.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini.h
new file mode 100644
index 000000000000..7625b045b463
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini.h
@@ -0,0 +1,57 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_href_e.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_href_e.c
new file mode 100644
index 000000000000..8c38d2fb9e23
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_href_e.c
@@ -0,0 +1,100 @@
+#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 asume (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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_href_e.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_href_e.o
new file mode 100644
index 000000000000..c43ff18cd9fc
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_href_e.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_e.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_e.c
new file mode 100644
index 000000000000..da0b15c53a38
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_e.c
@@ -0,0 +1,66 @@
+#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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_e.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_e.o
new file mode 100644
index 000000000000..e10c82b02041
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_e.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_u.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_u.c
new file mode 100644
index 000000000000..30d08aa4a4a4
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_u.c
@@ -0,0 +1,149 @@
+#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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_u.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_u.o
new file mode 100644
index 000000000000..ef663ebb5deb
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/houdini_html_u.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.c
new file mode 100644
index 000000000000..7a34f7e91bfc
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.c
@@ -0,0 +1,465 @@
+#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) {
+ if (renderer->written_footnote_ix >= renderer->footnote_ix)
+ return false;
+ renderer->written_footnote_ix = renderer->footnote_ix;
+
+ cmark_strbuf_puts(html, "footnote_ix);
+ cmark_strbuf_puts(html, n);
+ cmark_strbuf_puts(html, "\" class=\"footnote-backref\">↩");
+
+ 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_SAFE) {
+ 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);
+ }
+ 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_SAFE) {
+ 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 (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");
+ }
+
+ result = (char *)cmark_strbuf_detach(&html);
+
+ cmark_llist_free(mem, renderer.filter_extensions);
+
+ cmark_iter_free(iter);
+ return result;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.h
new file mode 100644
index 000000000000..aeba7bcdad22
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.h
@@ -0,0 +1,27 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.o
new file mode 100644
index 000000000000..3d8ade3fd015
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/html.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.c
new file mode 100644
index 000000000000..45a634877d92
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.c
@@ -0,0 +1,1594 @@
+#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;
+ struct delimiter *previous_delimiter;
+ cmark_node *inl_text;
+ bufsize_t position;
+ bool image;
+ bool active;
+ bool bracket_after;
+} bracket;
+
+typedef struct subject{
+ cmark_mem *mem;
+ cmark_chunk input;
+ 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;
+} 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);
+ }
+}
+
+// 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;
+ cmark_node_append_child(link, make_str_with_entities(subj, start_column + 1, end_column - 1, &url));
+ return link;
+}
+
+static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e,
+ cmark_chunk *chunk, cmark_map *refmap) {
+ int i;
+ e->mem = mem;
+ e->input = *chunk;
+ 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;
+}
+
+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;
+}
+
+// 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);
+ cmark_strbuf_trim(&buf);
+ cmark_strbuf_normalize_whitespace(&buf);
+
+ cmark_node *node = make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf));
+ adjust_subj_node_newlines(subj, node, endpos - startpos, openticks.len, 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->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->image = image;
+ b->active = true;
+ b->inl_text = inl_text;
+ b->previous = subj->last_bracket;
+ b->previous_delimiter = subj->last_delim;
+ b->position = subj->pos;
+ b->bracket_after = false;
+ subj->last_bracket = b;
+}
+
+// Assumes the subject has a c at the current position.
+static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) {
+ bufsize_t numdelims;
+ 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, delimiter *stack_bottom) {
+ delimiter *closer = subj->last_delim;
+ delimiter *opener;
+ delimiter *old_closer;
+ bool opener_found;
+ bool odd_match;
+ delimiter *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.
+ while (closer != NULL && closer->previous != stack_bottom) {
+ closer = closer->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;
+ odd_match = false;
+ while (opener != NULL && opener != stack_bottom &&
+ opener != openers_bottom[closer->length % 3][closer->delim_char]) {
+ if (opener->can_open && opener->delim_char == closer->delim_char) {
+ // interior closer of size 2 can't match opener of size 1
+ // or of size 1 can't match 2
+ odd_match = (closer->can_open || opener->can_close) &&
+ ((opener->length + closer->length) % 3 == 0);
+ if (!odd_match) {
+ opener_found = true;
+ break;
+ }
+ }
+ opener = opener->previous;
+ }
+ old_closer = closer;
+
+ 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 == '\'') {
+ cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
+ closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE);
+ if (opener_found) {
+ cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
+ opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE);
+ }
+ closer = closer->next;
+ } else if (closer->delim_char == '"') {
+ cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
+ closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE);
+ if (opener_found) {
+ cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
+ opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE);
+ }
+ closer = closer->next;
+ }
+ if (!opener_found) {
+ // set lower bound for future searches for openers
+ openers_bottom[old_closer->length % 3][old_closer->delim_char] =
+ old_closer->previous;
+ if (!old_closer->can_open) {
+ // we can remove a closer that can't be an
+ // opener, once we've seen there's no
+ // 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 != 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_append_child(emph, tmp);
+ tmp = tmpnext;
+ }
+ cmark_node_insert_after(opener_inl, emph);
+
+ emph->start_line = emph->end_line = subj->line;
+ emph->start_column = opener_inl->start_column + subj->column_offset;
+ emph->end_column = closer_inl->end_column + subj->column_offset;
+
+ // if opener has 0 characters, remove it and its associated inline
+ if (opener_num_chars == 0) {
+ cmark_node_free(opener_inl);
+ 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
+ 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]))
+ 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 manual_scan_link_url_2(input, offset, output);
+ 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 (!opener->active) {
+ // take delimiter off stack
+ pop_bracket(subj);
+ 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;
+
+ 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 &&
+ !opener->inl_text->next->next) {
+ cmark_chunk *literal = &opener->inl_text->next->as.literal;
+ if (literal->len > 1 && literal->data[0] == '^') {
+ inl = make_simple(subj->mem, CMARK_NODE_FOOTNOTE_REFERENCE);
+ inl->as.literal = cmark_chunk_dup(literal, 1, literal->len - 1);
+ 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);
+ cmark_node_free(opener->inl_text->next);
+ cmark_node_free(opener->inl_text);
+ process_emphasis(parser, subj, opener->previous_delimiter);
+ 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_append_child(inl, tmp);
+ tmp = tmpnext;
+ }
+
+ // Free the bracket [:
+ cmark_node_free(opener->inl_text);
+
+ process_emphasis(parser, subj, opener->previous_delimiter);
+ pop_bracket(subj);
+
+ // Now, if we have a link, we also want to deactivate earlier link
+ // delimiters. (This code can be removed if we decide to allow links
+ // inside links.)
+ if (!is_image) {
+ opener = subj->last_bracket;
+ while (opener != NULL) {
+ if (!opener->image) {
+ if (!opener->active) {
+ break;
+ } else {
+ opener->active = false;
+ }
+ }
+ opener = opener->previous;
+ }
+ }
+
+ return NULL;
+}
+
+// Parse a hard or soft linebreak, returning an inline.
+// Assumes the subject has a 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) {
+ cmark_node_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, NULL);
+ // 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 &&
+ url.len > 0) {
+ subj.pos += matchlen;
+ } else {
+ return 0;
+ }
+
+ // parse optional link_title
+ beforetitle = subj.pos;
+ spnl(&subj);
+ matchlen = scan_link_title(&subj.input, subj.pos);
+ if (matchlen) {
+ title = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
+ subj.pos += matchlen;
+ } else {
+ subj.pos = beforetitle;
+ title = cmark_chunk_literal("");
+ }
+
+ // parse final spaces and newline:
+ skip_spaces(&subj);
+ if (!skip_line_end(&subj)) {
+ if (matchlen) { // try rewinding before title
+ subj.pos = beforetitle;
+ skip_spaces(&subj);
+ if (!skip_line_end(&subj)) {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ }
+ // insert reference into refmap
+ cmark_reference_create(refmap, &lab, &url, &title);
+ return subj.pos;
+}
+
+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) {
+ for (bracket *b = parser->last_bracket; b; b = b->previous)
+ if (b->active && b->image == (image != 0))
+ return 1;
+ return 0;
+}
+
+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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.h
new file mode 100644
index 000000000000..7dd91bf52e7d
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.h
@@ -0,0 +1,29 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.o
new file mode 100644
index 000000000000..9e18965dadb0
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/inlines.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.c
new file mode 100644
index 000000000000..13fdb7616561
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.c
@@ -0,0 +1,159 @@
+#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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.h
new file mode 100644
index 000000000000..1155593df61e
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.h
@@ -0,0 +1,27 @@
+#ifndef CMARK_ITERATOR_H
+#define CMARK_ITERATOR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "cmark-gfm.h"
+#include "memory.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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.o
new file mode 100644
index 000000000000..024ea0f648b0
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/iterator.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/latex.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/latex.c
new file mode 100644
index 000000000000..8be15b0d57f6
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/latex.c
@@ -0,0 +1,466 @@
+#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 (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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/latex.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/latex.o
new file mode 100644
index 000000000000..1f0dac6985b7
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/latex.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/linked_list.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/linked_list.c
new file mode 100644
index 000000000000..8c26dc55753f
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/linked_list.c
@@ -0,0 +1,37 @@
+#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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/linked_list.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/linked_list.o
new file mode 100644
index 000000000000..fd6a97b535c4
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/linked_list.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/man.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/man.c
new file mode 100644
index 000000000000..441a96e4936a
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/man.c
@@ -0,0 +1,278 @@
+#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) {
+ cmark_node *tmp;
+ 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_list_start(node->parent);
+ tmp = node;
+ while (tmp->prev) {
+ tmp = tmp->prev;
+ list_number += 1;
+ }
+ 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 (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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/man.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/man.o
new file mode 100644
index 000000000000..82121dc5c3ee
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/man.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.c
new file mode 100644
index 000000000000..9a418dfd4694
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.c
@@ -0,0 +1,122 @@
+#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) {
+ unsigned int 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;
+ 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)
+ return NULL;
+
+ return ref[0];
+}
+
+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;
+ return map;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.h
new file mode 100644
index 000000000000..00307be66906
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.h
@@ -0,0 +1,42 @@
+#ifndef CMARK_MAP_H
+#define CMARK_MAP_H
+
+#include "memory.h"
+#include "chunk.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct cmark_map_entry {
+ struct cmark_map_entry *next;
+ unsigned char *label;
+ unsigned int age;
+};
+
+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;
+ unsigned int 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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.o
new file mode 100644
index 000000000000..7db4efcf2991
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/map.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.c
new file mode 100644
index 000000000000..3f94834cf8b7
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.c
@@ -0,0 +1,965 @@
+#include
+#include
+
+#include "config.h"
+#include "node.h"
+#include "syntax_extension.h"
+
+static void S_node_unlink(cmark_node *node);
+
+#define NODE_MEM(node) cmark_node_mem(node)
+
+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) {
+ cmark_node *cur;
+
+ if (node == NULL || child == NULL) {
+ return false;
+ }
+ if (NODE_MEM(node) != NODE_MEM(child)) {
+ return 0;
+ }
+
+ // Verify that child is not an ancestor of node or equal to node.
+ cur = node;
+ 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(cmark_node_type type, cmark_mem *mem) {
+ cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node));
+ cmark_strbuf_init(mem, &node->content, 0);
+ node->type = (uint16_t)type;
+
+ 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;
+ }
+
+ return node;
+}
+
+cmark_node *cmark_node_new(cmark_node_type type) {
+ extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
+ return cmark_node_new_with_mem(type, &CMARK_DEFAULT_MEM_ALLOCATOR);
+}
+
+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;
+ }
+}
+
+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:
+ 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;
+ }
+}
+
+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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.h
new file mode 100644
index 000000000000..0a392555b53b
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.h
@@ -0,0 +1,116 @@
+#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;
+} 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),
+};
+
+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;
+ uint16_t flags;
+
+ cmark_syntax_extension *extension;
+
+ union {
+ cmark_chunk literal;
+ cmark_list list;
+ cmark_code code;
+ cmark_heading heading;
+ cmark_link link;
+ cmark_custom custom;
+ int html_block_type;
+ void *opaque;
+ } as;
+};
+
+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);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.o
new file mode 100644
index 000000000000..7914a9b81d52
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/node.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/parser.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/parser.h
new file mode 100644
index 000000000000..f87e309484fd
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/parser.h
@@ -0,0 +1,57 @@
+#ifndef CMARK_PARSER_H
+#define CMARK_PARSER_H
+
+#include
+#include "node.h"
+#include "buffer.h"
+#include "memory.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;
+ /* 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;
+ cmark_llist *syntax_extensions;
+ cmark_llist *inline_syntax_extensions;
+ cmark_ispunct_func backslash_ispunct;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plaintext.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plaintext.c
new file mode 100644
index 000000000000..910adf4666b3
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plaintext.c
@@ -0,0 +1,213 @@
+#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);
+}
+
+// if node is a block node, returns node.
+// otherwise returns first block-level node that is an ancestor of node.
+// if there is no block-level ancestor, returns NULL.
+static cmark_node *get_containing_block(cmark_node *node) {
+ while (node) {
+ if (CMARK_NODE_BLOCK_P(node)) {
+ return node;
+ } else {
+ node = node->parent;
+ }
+ }
+ return NULL;
+}
+
+static int S_render_node(cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ cmark_node *tmp;
+ int list_number;
+ cmark_delim_type list_delim;
+ int 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 (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) {
+ tmp = get_containing_block(node);
+ renderer->in_tight_list_item =
+ tmp && // tmp might be NULL if there is no containing block
+ ((tmp->type == CMARK_NODE_ITEM &&
+ cmark_node_get_list_tight(tmp->parent)) ||
+ (tmp && tmp->parent && tmp->parent->type == CMARK_NODE_ITEM &&
+ cmark_node_get_list_tight(tmp->parent->parent)));
+ }
+
+ 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_list_start(node->parent);
+ list_delim = cmark_node_get_list_delim(node->parent);
+ tmp = node;
+ while (tmp->prev) {
+ tmp = tmp->prev;
+ list_number += 1;
+ }
+ // we ensure a width of at least 4 so
+ // we get nice transition from single digits
+ // to double
+ snprintf(listmarker, 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;
+
+ 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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plaintext.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plaintext.o
new file mode 100644
index 000000000000..86ceb3f21250
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plaintext.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.c
new file mode 100644
index 000000000000..3992fe197071
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.c
@@ -0,0 +1,36 @@
+#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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.h
new file mode 100644
index 000000000000..7bcbd19a221b
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.h
@@ -0,0 +1,34 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.o
new file mode 100644
index 000000000000..3c128270fbf8
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/plugin.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.c
new file mode 100644
index 000000000000..7e7f34b3819e
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.c
@@ -0,0 +1,42 @@
+#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;
+
+ map->refs = (cmark_map_entry *)ref;
+ map->size++;
+}
+
+cmark_map *cmark_reference_map_new(cmark_mem *mem) {
+ return cmark_map_new(mem, reference_free);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.h
new file mode 100644
index 000000000000..def944dc7781
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.h
@@ -0,0 +1,26 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.o
new file mode 100644
index 000000000000..3444ea05d7cc
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/references.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.c
new file mode 100644
index 000000000000..f4f2040d6aeb
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.c
@@ -0,0 +1,63 @@
+#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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.h
new file mode 100644
index 000000000000..fece2b63f53b
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.h
@@ -0,0 +1,24 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.o
new file mode 100644
index 000000000000..cf026f6339a0
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/registry.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.c
new file mode 100644
index 000000000000..feb207544e9d
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.c
@@ -0,0 +1,202 @@
+#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 = NULL;
+ cmark_node *n = node;
+ while (n && !ext) {
+ ext = n->extension;
+ if (!ext)
+ n = n->parent;
+ }
+ 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->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 (c == 10) {
+ cmark_strbuf_putc(renderer->buffer, '\n');
+ renderer->column = 0;
+ renderer->begin_line = true;
+ renderer->begin_content = true;
+ renderer->last_breakable = 0;
+ } else if (escape == LITERAL) {
+ cmark_render_code_point(renderer, c);
+ renderer->begin_line = false;
+ // we don't set 'begin_content' to false til we've
+ // finished parsing a digit. Reason: in commonmark
+ // we need to escape a potential list marker after
+ // a digit:
+ renderer->begin_content =
+ renderer->begin_content && cmark_isdigit((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 (!render_node(&renderer, cur, ev_type, options)) {
+ // a false value causes us to skip processing
+ // the node's contents. this is used for
+ // autolinks.
+ cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT);
+ }
+ }
+
+ // ensure final newline
+ if (renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') {
+ cmark_strbuf_putc(renderer.buffer, '\n');
+ }
+
+ result = (char *)cmark_strbuf_detach(renderer.buffer);
+
+ cmark_iter_free(iter);
+ cmark_strbuf_free(renderer.prefix);
+ cmark_strbuf_free(renderer.buffer);
+
+ return result;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.h
new file mode 100644
index 000000000000..32005eabb6f5
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.h
@@ -0,0 +1,63 @@
+#ifndef CMARK_RENDER_H
+#define CMARK_RENDER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+#include "buffer.h"
+#include "chunk.h"
+#include "memory.h"
+
+typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping;
+
+struct cmark_renderer {
+ cmark_mem *mem;
+ cmark_strbuf *buffer;
+ cmark_strbuf *prefix;
+ int column;
+ 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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.o
new file mode 100644
index 000000000000..32dd33a0b7a4
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/render.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.c
new file mode 100644
index 000000000000..5a4264826cb1
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.c
@@ -0,0 +1,10694 @@
+/* Generated by re2c 1.0.3 */
+#include
+#include "chunk.h"
+#include "scanners.h"
+
+bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset)
+{
+ bufsize_t res;
+ unsigned char *ptr = (unsigned char *)c->data;
+
+ 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 yy2;
+ if (yych <= 'Z') goto yy4;
+ if (yych <= '`') goto yy2;
+ if (yych <= 'z') goto yy4;
+yy2:
+ ++p;
+yy3:
+ { return 0; }
+yy4:
+ yych = *(marker = ++p);
+ if (yych <= '/') {
+ if (yych <= '+') {
+ if (yych <= '*') goto yy3;
+ } else {
+ if (yych <= ',') goto yy3;
+ if (yych >= '/') goto yy3;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '9') goto yy5;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
+ }
+yy5:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych == '+') goto yy7;
+ } else {
+ if (yych != '/') goto yy7;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych >= 'A') goto yy7;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych <= 'z') goto yy7;
+ }
+ }
+yy6:
+ p = marker;
+ goto yy3;
+yy7:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych == '+') goto yy10;
+ goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ goto yy10;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ goto yy10;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych <= 'z') goto yy10;
+ goto yy6;
+ }
+ }
+yy8:
+ ++p;
+ { return (bufsize_t)(p - start); }
+yy10:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy6;
+ } else {
+ if (yych == '/') goto yy6;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy8;
+ if (yych <= '@') goto yy6;
+ } else {
+ if (yych <= '`') goto yy6;
+ if (yych >= '{') goto yy6;
+ }
+ }
+ yych = *++p;
+ if (yych == ':') goto yy8;
+ goto yy6;
+}
+
+}
+
+// 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 yy41;
+ if (yych <= 'Z') goto yy43;
+ if (yych <= '`') goto yy41;
+ if (yych <= 'z') goto yy43;
+yy41:
+ ++p;
+yy42:
+ { return 0; }
+yy43:
+ yych = *(marker = ++p);
+ if (yych <= '/') {
+ if (yych <= '+') {
+ if (yych <= '*') goto yy42;
+ } else {
+ if (yych <= ',') goto yy42;
+ if (yych >= '/') goto yy42;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '9') goto yy44;
+ if (yych <= '@') goto yy42;
+ } else {
+ if (yych <= '`') goto yy42;
+ if (yych >= '{') goto yy42;
+ }
+ }
+yy44:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych == '+') goto yy46;
+ } else {
+ if (yych != '/') goto yy46;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych >= 'A') goto yy46;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych <= 'z') goto yy46;
+ }
+ }
+yy45:
+ p = marker;
+ goto yy42;
+yy46:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych == '+') goto yy49;
+ goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ goto yy49;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ goto yy49;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych <= 'z') goto yy49;
+ goto yy45;
+ }
+ }
+yy47:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy47;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '<') goto yy45;
+ if (yych <= '>') goto yy50;
+ goto yy45;
+ } else {
+ if (yych <= 0xDF) goto yy52;
+ if (yych <= 0xE0) goto yy53;
+ goto yy54;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy55;
+ if (yych <= 0xEF) goto yy54;
+ goto yy56;
+ } else {
+ if (yych <= 0xF3) goto yy57;
+ if (yych <= 0xF4) goto yy58;
+ goto yy45;
+ }
+ }
+yy49:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych == '+') goto yy59;
+ goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ goto yy59;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ goto yy59;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych <= 'z') goto yy59;
+ goto yy45;
+ }
+ }
+yy50:
+ ++p;
+ { return (bufsize_t)(p - start); }
+yy52:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy45;
+ if (yych <= 0xBF) goto yy47;
+ goto yy45;
+yy53:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy45;
+ if (yych <= 0xBF) goto yy52;
+ goto yy45;
+yy54:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy45;
+ if (yych <= 0xBF) goto yy52;
+ goto yy45;
+yy55:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy45;
+ if (yych <= 0x9F) goto yy52;
+ goto yy45;
+yy56:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy45;
+ if (yych <= 0xBF) goto yy54;
+ goto yy45;
+yy57:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy45;
+ if (yych <= 0xBF) goto yy54;
+ goto yy45;
+yy58:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy45;
+ if (yych <= 0x8F) goto yy54;
+ goto yy45;
+yy59:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych != '+') goto yy45;
+ } else {
+ if (yych == '/') goto yy45;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ':') goto yy47;
+ if (yych <= '@') goto yy45;
+ } else {
+ if (yych <= '`') goto yy45;
+ if (yych >= '{') goto yy45;
+ }
+ }
+ yych = *++p;
+ if (yych == ':') goto yy47;
+ goto yy45;
+}
+
+}
+
+// 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 yy91;
+ if (yych >= '#') goto yy91;
+ } else {
+ if (yych <= ')') goto yy89;
+ if (yych != ',') goto yy91;
+ }
+ } else {
+ if (yych <= '?') {
+ if (yych == '=') goto yy91;
+ if (yych >= '?') goto yy91;
+ } else {
+ if (yych <= 'Z') {
+ if (yych >= 'A') goto yy91;
+ } else {
+ if (yych <= ']') goto yy89;
+ if (yych <= '~') goto yy91;
+ }
+ }
+ }
+yy89:
+ ++p;
+yy90:
+ { return 0; }
+yy91:
+ yych = *(marker = ++p);
+ if (yych <= ',') {
+ if (yych <= '"') {
+ if (yych == '!') goto yy93;
+ goto yy90;
+ } else {
+ if (yych <= '\'') goto yy93;
+ if (yych <= ')') goto yy90;
+ if (yych <= '+') goto yy93;
+ goto yy90;
+ }
+ } else {
+ if (yych <= '>') {
+ if (yych <= '9') goto yy93;
+ if (yych == '=') goto yy93;
+ goto yy90;
+ } else {
+ if (yych <= 'Z') goto yy93;
+ if (yych <= ']') goto yy90;
+ if (yych <= '~') goto yy93;
+ goto yy90;
+ }
+ }
+yy92:
+ yych = *++p;
+yy93:
+ if (yybm[0+yych] & 128) {
+ goto yy92;
+ }
+ if (yych <= '>') goto yy94;
+ if (yych <= '@') goto yy95;
+yy94:
+ p = marker;
+ goto yy90;
+yy95:
+ yych = *++p;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy94;
+ if (yych >= ':') goto yy94;
+ } else {
+ if (yych <= 'Z') goto yy96;
+ if (yych <= '`') goto yy94;
+ if (yych >= '{') goto yy94;
+ }
+yy96:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy98;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy98;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy98;
+ goto yy94;
+ }
+ }
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy101;
+ if (yych <= '/') goto yy94;
+ goto yy102;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy102;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy102;
+ goto yy94;
+ }
+ }
+yy98:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych <= '-') goto yy101;
+ goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy102;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy102;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy102;
+ goto yy94;
+ }
+ }
+yy99:
+ ++p;
+ { return (bufsize_t)(p - start); }
+yy101:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy103;
+ if (yych <= '/') goto yy94;
+ goto yy104;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy104;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy104;
+ goto yy94;
+ }
+ }
+yy102:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy104;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy104;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy104;
+ goto yy94;
+ }
+ }
+yy103:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy105;
+ if (yych <= '/') goto yy94;
+ goto yy106;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy106;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy106;
+ goto yy94;
+ }
+ }
+yy104:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy106;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy106;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy106;
+ goto yy94;
+ }
+ }
+yy105:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy107;
+ if (yych <= '/') goto yy94;
+ goto yy108;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy108;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy108;
+ goto yy94;
+ }
+ }
+yy106:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy108;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy108;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy108;
+ goto yy94;
+ }
+ }
+yy107:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy109;
+ if (yych <= '/') goto yy94;
+ goto yy110;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy110;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy110;
+ goto yy94;
+ }
+ }
+yy108:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy110;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy110;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy110;
+ goto yy94;
+ }
+ }
+yy109:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy111;
+ if (yych <= '/') goto yy94;
+ goto yy112;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy112;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy112;
+ goto yy94;
+ }
+ }
+yy110:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy112;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy112;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy112;
+ goto yy94;
+ }
+ }
+yy111:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy113;
+ if (yych <= '/') goto yy94;
+ goto yy114;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy114;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy114;
+ goto yy94;
+ }
+ }
+yy112:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy114;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy114;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy114;
+ goto yy94;
+ }
+ }
+yy113:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy115;
+ if (yych <= '/') goto yy94;
+ goto yy116;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy116;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy116;
+ goto yy94;
+ }
+ }
+yy114:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy116;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy116;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy116;
+ goto yy94;
+ }
+ }
+yy115:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy117;
+ if (yych <= '/') goto yy94;
+ goto yy118;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy118;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy118;
+ goto yy94;
+ }
+ }
+yy116:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy118;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy118;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy118;
+ goto yy94;
+ }
+ }
+yy117:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy119;
+ if (yych <= '/') goto yy94;
+ goto yy120;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy120;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy120;
+ goto yy94;
+ }
+ }
+yy118:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy120;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy120;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy120;
+ goto yy94;
+ }
+ }
+yy119:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy121;
+ if (yych <= '/') goto yy94;
+ goto yy122;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy122;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy122;
+ goto yy94;
+ }
+ }
+yy120:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy122;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy122;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy122;
+ goto yy94;
+ }
+ }
+yy121:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy123;
+ if (yych <= '/') goto yy94;
+ goto yy124;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy124;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy124;
+ goto yy94;
+ }
+ }
+yy122:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy124;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy124;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy124;
+ goto yy94;
+ }
+ }
+yy123:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy125;
+ if (yych <= '/') goto yy94;
+ goto yy126;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy126;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy126;
+ goto yy94;
+ }
+ }
+yy124:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy126;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy126;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy126;
+ goto yy94;
+ }
+ }
+yy125:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy127;
+ if (yych <= '/') goto yy94;
+ goto yy128;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy128;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy128;
+ goto yy94;
+ }
+ }
+yy126:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy128;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy128;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy128;
+ goto yy94;
+ }
+ }
+yy127:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy129;
+ if (yych <= '/') goto yy94;
+ goto yy130;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy130;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy130;
+ goto yy94;
+ }
+ }
+yy128:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy130;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy130;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy130;
+ goto yy94;
+ }
+ }
+yy129:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy131;
+ if (yych <= '/') goto yy94;
+ goto yy132;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy132;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy132;
+ goto yy94;
+ }
+ }
+yy130:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy132;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy132;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy132;
+ goto yy94;
+ }
+ }
+yy131:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy133;
+ if (yych <= '/') goto yy94;
+ goto yy134;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy134;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy134;
+ goto yy94;
+ }
+ }
+yy132:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy134;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy134;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy134;
+ goto yy94;
+ }
+ }
+yy133:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy135;
+ if (yych <= '/') goto yy94;
+ goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy136;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy136;
+ goto yy94;
+ }
+ }
+yy134:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy136;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy136;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy136;
+ goto yy94;
+ }
+ }
+yy135:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy137;
+ if (yych <= '/') goto yy94;
+ goto yy138;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy138;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy138;
+ goto yy94;
+ }
+ }
+yy136:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy138;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy138;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy138;
+ goto yy94;
+ }
+ }
+yy137:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy139;
+ if (yych <= '/') goto yy94;
+ goto yy140;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy140;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy140;
+ goto yy94;
+ }
+ }
+yy138:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy140;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy140;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy140;
+ goto yy94;
+ }
+ }
+yy139:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy141;
+ if (yych <= '/') goto yy94;
+ goto yy142;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy142;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy142;
+ goto yy94;
+ }
+ }
+yy140:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy142;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy142;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy142;
+ goto yy94;
+ }
+ }
+yy141:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy143;
+ if (yych <= '/') goto yy94;
+ goto yy144;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy144;
+ goto yy94;
+ }
+ }
+yy142:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy144;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy144;
+ goto yy94;
+ }
+ }
+yy143:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy145;
+ if (yych <= '/') goto yy94;
+ goto yy146;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy146;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy146;
+ goto yy94;
+ }
+ }
+yy144:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy146;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy146;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy146;
+ goto yy94;
+ }
+ }
+yy145:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy147;
+ if (yych <= '/') goto yy94;
+ goto yy148;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy148;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy148;
+ goto yy94;
+ }
+ }
+yy146:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy148;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy148;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy148;
+ goto yy94;
+ }
+ }
+yy147:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy149;
+ if (yych <= '/') goto yy94;
+ goto yy150;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy150;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy150;
+ goto yy94;
+ }
+ }
+yy148:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy150;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy150;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy150;
+ goto yy94;
+ }
+ }
+yy149:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy151;
+ if (yych <= '/') goto yy94;
+ goto yy152;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy152;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy152;
+ goto yy94;
+ }
+ }
+yy150:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy152;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy152;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy152;
+ goto yy94;
+ }
+ }
+yy151:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy153;
+ if (yych <= '/') goto yy94;
+ goto yy154;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy154;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy154;
+ goto yy94;
+ }
+ }
+yy152:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy154;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy154;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy154;
+ goto yy94;
+ }
+ }
+yy153:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy155;
+ if (yych <= '/') goto yy94;
+ goto yy156;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy156;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy156;
+ goto yy94;
+ }
+ }
+yy154:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy156;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy156;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy156;
+ goto yy94;
+ }
+ }
+yy155:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy157;
+ if (yych <= '/') goto yy94;
+ goto yy158;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy158;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy158;
+ goto yy94;
+ }
+ }
+yy156:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy158;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy158;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy158;
+ goto yy94;
+ }
+ }
+yy157:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy159;
+ if (yych <= '/') goto yy94;
+ goto yy160;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy160;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy160;
+ goto yy94;
+ }
+ }
+yy158:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy160;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy160;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy160;
+ goto yy94;
+ }
+ }
+yy159:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy161;
+ if (yych <= '/') goto yy94;
+ goto yy162;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy162;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy162;
+ goto yy94;
+ }
+ }
+yy160:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy162;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy162;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy162;
+ goto yy94;
+ }
+ }
+yy161:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy163;
+ if (yych <= '/') goto yy94;
+ goto yy164;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy164;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy164;
+ goto yy94;
+ }
+ }
+yy162:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy164;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy164;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy164;
+ goto yy94;
+ }
+ }
+yy163:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy165;
+ if (yych <= '/') goto yy94;
+ goto yy166;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy166;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy166;
+ goto yy94;
+ }
+ }
+yy164:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy166;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy166;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy166;
+ goto yy94;
+ }
+ }
+yy165:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy167;
+ if (yych <= '/') goto yy94;
+ goto yy168;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy168;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy168;
+ goto yy94;
+ }
+ }
+yy166:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy168;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy168;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy168;
+ goto yy94;
+ }
+ }
+yy167:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy169;
+ if (yych <= '/') goto yy94;
+ goto yy170;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy170;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy170;
+ goto yy94;
+ }
+ }
+yy168:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy170;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy170;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy170;
+ goto yy94;
+ }
+ }
+yy169:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy171;
+ if (yych <= '/') goto yy94;
+ goto yy172;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy172;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy172;
+ goto yy94;
+ }
+ }
+yy170:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy172;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy172;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy172;
+ goto yy94;
+ }
+ }
+yy171:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy173;
+ if (yych <= '/') goto yy94;
+ goto yy174;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy174;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy174;
+ goto yy94;
+ }
+ }
+yy172:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy174;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy174;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy174;
+ goto yy94;
+ }
+ }
+yy173:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy175;
+ if (yych <= '/') goto yy94;
+ goto yy176;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy176;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy176;
+ goto yy94;
+ }
+ }
+yy174:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy176;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy176;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy176;
+ goto yy94;
+ }
+ }
+yy175:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy177;
+ if (yych <= '/') goto yy94;
+ goto yy178;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy178;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy178;
+ goto yy94;
+ }
+ }
+yy176:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy178;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy178;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy178;
+ goto yy94;
+ }
+ }
+yy177:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy179;
+ if (yych <= '/') goto yy94;
+ goto yy180;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy180;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy180;
+ goto yy94;
+ }
+ }
+yy178:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy180;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy180;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy180;
+ goto yy94;
+ }
+ }
+yy179:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy181;
+ if (yych <= '/') goto yy94;
+ goto yy182;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy182;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy182;
+ goto yy94;
+ }
+ }
+yy180:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy182;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy182;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy182;
+ goto yy94;
+ }
+ }
+yy181:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy183;
+ if (yych <= '/') goto yy94;
+ goto yy184;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy184;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy184;
+ goto yy94;
+ }
+ }
+yy182:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy184;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy184;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy184;
+ goto yy94;
+ }
+ }
+yy183:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy185;
+ if (yych <= '/') goto yy94;
+ goto yy186;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy186;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy186;
+ goto yy94;
+ }
+ }
+yy184:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy186;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy186;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy186;
+ goto yy94;
+ }
+ }
+yy185:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy187;
+ if (yych <= '/') goto yy94;
+ goto yy188;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy188;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy188;
+ goto yy94;
+ }
+ }
+yy186:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy188;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy188;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy188;
+ goto yy94;
+ }
+ }
+yy187:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy189;
+ if (yych <= '/') goto yy94;
+ goto yy190;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy190;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy190;
+ goto yy94;
+ }
+ }
+yy188:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy190;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy190;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy190;
+ goto yy94;
+ }
+ }
+yy189:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy191;
+ if (yych <= '/') goto yy94;
+ goto yy192;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy192;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy192;
+ goto yy94;
+ }
+ }
+yy190:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy192;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy192;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy192;
+ goto yy94;
+ }
+ }
+yy191:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy193;
+ if (yych <= '/') goto yy94;
+ goto yy194;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy194;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy194;
+ goto yy94;
+ }
+ }
+yy192:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy194;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy194;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy194;
+ goto yy94;
+ }
+ }
+yy193:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy195;
+ if (yych <= '/') goto yy94;
+ goto yy196;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy196;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy196;
+ goto yy94;
+ }
+ }
+yy194:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy196;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy196;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy196;
+ goto yy94;
+ }
+ }
+yy195:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy197;
+ if (yych <= '/') goto yy94;
+ goto yy198;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy198;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy198;
+ goto yy94;
+ }
+ }
+yy196:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy198;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy198;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy198;
+ goto yy94;
+ }
+ }
+yy197:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy199;
+ if (yych <= '/') goto yy94;
+ goto yy200;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy200;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy200;
+ goto yy94;
+ }
+ }
+yy198:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy200;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy200;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy200;
+ goto yy94;
+ }
+ }
+yy199:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy201;
+ if (yych <= '/') goto yy94;
+ goto yy202;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy202;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy202;
+ goto yy94;
+ }
+ }
+yy200:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy202;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy202;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy202;
+ goto yy94;
+ }
+ }
+yy201:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy203;
+ if (yych <= '/') goto yy94;
+ goto yy204;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy204;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy204;
+ goto yy94;
+ }
+ }
+yy202:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy204;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy204;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy204;
+ goto yy94;
+ }
+ }
+yy203:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy205;
+ if (yych <= '/') goto yy94;
+ goto yy206;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy206;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy206;
+ goto yy94;
+ }
+ }
+yy204:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy206;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy206;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy206;
+ goto yy94;
+ }
+ }
+yy205:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy207;
+ if (yych <= '/') goto yy94;
+ goto yy208;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy208;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy208;
+ goto yy94;
+ }
+ }
+yy206:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy208;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy208;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy208;
+ goto yy94;
+ }
+ }
+yy207:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy209;
+ if (yych <= '/') goto yy94;
+ goto yy210;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy210;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy210;
+ goto yy94;
+ }
+ }
+yy208:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy210;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy210;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy210;
+ goto yy94;
+ }
+ }
+yy209:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy211;
+ if (yych <= '/') goto yy94;
+ goto yy212;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy212;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy212;
+ goto yy94;
+ }
+ }
+yy210:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy212;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy212;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy212;
+ goto yy94;
+ }
+ }
+yy211:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy213;
+ if (yych <= '/') goto yy94;
+ goto yy214;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy214;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy214;
+ goto yy94;
+ }
+ }
+yy212:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy214;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy214;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy214;
+ goto yy94;
+ }
+ }
+yy213:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy215;
+ if (yych <= '/') goto yy94;
+ goto yy216;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy216;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy216;
+ goto yy94;
+ }
+ }
+yy214:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy216;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy216;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy216;
+ goto yy94;
+ }
+ }
+yy215:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy217;
+ if (yych <= '/') goto yy94;
+ goto yy218;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy218;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy218;
+ goto yy94;
+ }
+ }
+yy216:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy218;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy218;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy218;
+ goto yy94;
+ }
+ }
+yy217:
+ yych = *++p;
+ if (yych <= '9') {
+ if (yych == '-') goto yy219;
+ if (yych <= '/') goto yy94;
+ goto yy220;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy94;
+ goto yy220;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy220;
+ goto yy94;
+ }
+ }
+yy218:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy94;
+ if (yych >= '.') goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy220;
+ goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ goto yy220;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy220;
+ goto yy94;
+ }
+ }
+yy219:
+ yych = *++p;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy94;
+ if (yych <= '9') goto yy221;
+ goto yy94;
+ } else {
+ if (yych <= 'Z') goto yy221;
+ if (yych <= '`') goto yy94;
+ if (yych <= 'z') goto yy221;
+ goto yy94;
+ }
+yy220:
+ yych = *++p;
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy94;
+ goto yy95;
+ } else {
+ if (yych <= '/') goto yy94;
+ if (yych >= ':') goto yy94;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy99;
+ if (yych <= '@') goto yy94;
+ } else {
+ if (yych <= '`') goto yy94;
+ if (yych >= '{') goto yy94;
+ }
+ }
+yy221:
+ yych = *++p;
+ if (yych == '.') goto yy95;
+ if (yych == '>') goto yy99;
+ goto yy94;
+}
+
+}
+
+// Try to match an HTML tag after first <, returning num of chars matched.
+bufsize_t _scan_html_tag(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+
+{
+ unsigned char yych;
+ static const unsigned char yybm[] = {
+ /* table 1 .. 8: 0 */
+ 0, 250, 250, 250, 250, 250, 250, 250,
+ 250, 235, 235, 235, 235, 235, 250, 250,
+ 250, 250, 250, 250, 250, 250, 250, 250,
+ 250, 250, 250, 250, 250, 250, 250, 250,
+ 235, 250, 202, 250, 250, 250, 250, 170,
+ 250, 250, 250, 250, 250, 246, 254, 250,
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 250, 234, 234, 232, 250,
+ 250, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 250, 250, 122, 250, 254,
+ 234, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 254, 254, 254, 254, 254,
+ 254, 254, 254, 250, 250, 250, 250, 250,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ /* table 9 .. 11: 256 */
+ 0, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 192, 128, 128,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 128, 128, 128, 128, 128, 0,
+ 128, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 128, 128, 128, 128, 128,
+ 128, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 128, 128, 128, 128, 128,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ yych = *p;
+ if (yych <= '>') {
+ if (yych <= '!') {
+ if (yych >= '!') goto yy226;
+ } else {
+ if (yych == '/') goto yy227;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '?') goto yy228;
+ if (yych >= 'A') goto yy229;
+ } else {
+ if (yych <= '`') goto yy224;
+ if (yych <= 'z') goto yy229;
+ }
+ }
+yy224:
+ ++p;
+yy225:
+ { return 0; }
+yy226:
+ yych = *(marker = ++p);
+ if (yybm[256+yych] & 32) {
+ goto yy232;
+ }
+ if (yych == '-') goto yy230;
+ if (yych <= '@') goto yy225;
+ if (yych <= '[') goto yy234;
+ goto yy225;
+yy227:
+ yych = *(marker = ++p);
+ if (yych <= '@') goto yy225;
+ if (yych <= 'Z') goto yy235;
+ if (yych <= '`') goto yy225;
+ if (yych <= 'z') goto yy235;
+ goto yy225;
+yy228:
+ yych = *(marker = ++p);
+ if (yych <= 0x00) goto yy225;
+ if (yych <= 0x7F) goto yy238;
+ if (yych <= 0xC1) goto yy225;
+ if (yych <= 0xF4) goto yy238;
+ goto yy225;
+yy229:
+ yych = *(marker = ++p);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy225;
+ if (yych <= '\r') goto yy250;
+ goto yy225;
+ } else {
+ if (yych <= ' ') goto yy250;
+ if (yych == '-') goto yy250;
+ goto yy225;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy250;
+ if (yych == '>') goto yy250;
+ goto yy225;
+ } else {
+ if (yych <= 'Z') goto yy250;
+ if (yych <= '`') goto yy225;
+ if (yych <= 'z') goto yy250;
+ goto yy225;
+ }
+ }
+yy230:
+ yych = *++p;
+ if (yych == '-') goto yy254;
+yy231:
+ p = marker;
+ goto yy225;
+yy232:
+ yych = *++p;
+ if (yybm[256+yych] & 32) {
+ goto yy232;
+ }
+ if (yych <= 0x08) goto yy231;
+ if (yych <= '\r') goto yy255;
+ if (yych == ' ') goto yy255;
+ goto yy231;
+yy234:
+ yych = *++p;
+ if (yych == 'C') goto yy257;
+ if (yych == 'c') goto yy257;
+ goto yy231;
+yy235:
+ yych = *++p;
+ if (yybm[256+yych] & 64) {
+ goto yy235;
+ }
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy231;
+ if (yych <= '\r') goto yy258;
+ goto yy231;
+ } else {
+ if (yych <= ' ') goto yy258;
+ if (yych == '>') goto yy252;
+ goto yy231;
+ }
+yy237:
+ yych = *++p;
+yy238:
+ if (yybm[256+yych] & 128) {
+ goto yy237;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych >= '@') goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy240;
+ if (yych <= 0xE0) goto yy241;
+ goto yy242;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy243;
+ if (yych <= 0xEF) goto yy242;
+ goto yy244;
+ } else {
+ if (yych <= 0xF3) goto yy245;
+ if (yych <= 0xF4) goto yy246;
+ goto yy231;
+ }
+ }
+ yych = *++p;
+ if (yych <= 0xE0) {
+ if (yych <= '>') {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= '=') goto yy237;
+ goto yy252;
+ } else {
+ if (yych <= 0x7F) goto yy237;
+ if (yych <= 0xC1) goto yy231;
+ if (yych >= 0xE0) goto yy241;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy243;
+ goto yy242;
+ } else {
+ if (yych <= 0xF0) goto yy244;
+ if (yych <= 0xF3) goto yy245;
+ if (yych <= 0xF4) goto yy246;
+ goto yy231;
+ }
+ }
+yy240:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy237;
+ goto yy231;
+yy241:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy231;
+ if (yych <= 0xBF) goto yy240;
+ goto yy231;
+yy242:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy240;
+ goto yy231;
+yy243:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x9F) goto yy240;
+ goto yy231;
+yy244:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy231;
+ if (yych <= 0xBF) goto yy242;
+ goto yy231;
+yy245:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy242;
+ goto yy231;
+yy246:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x8F) goto yy242;
+ goto yy231;
+yy247:
+ yych = *++p;
+ if (yybm[0+yych] & 1) {
+ goto yy247;
+ }
+ if (yych <= '>') {
+ if (yych <= '9') {
+ if (yych == '/') goto yy251;
+ goto yy231;
+ } else {
+ if (yych <= ':') goto yy260;
+ if (yych <= '=') goto yy231;
+ goto yy252;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '@') goto yy231;
+ if (yych <= 'Z') goto yy260;
+ goto yy231;
+ } else {
+ if (yych == '`') goto yy231;
+ if (yych <= 'z') goto yy260;
+ goto yy231;
+ }
+ }
+yy249:
+ yych = *++p;
+yy250:
+ if (yybm[0+yych] & 1) {
+ goto yy247;
+ }
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych == '-') goto yy249;
+ goto yy231;
+ } else {
+ if (yych <= '/') goto yy251;
+ if (yych <= '9') goto yy249;
+ goto yy231;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy252;
+ if (yych <= '@') goto yy231;
+ goto yy249;
+ } else {
+ if (yych <= '`') goto yy231;
+ if (yych <= 'z') goto yy249;
+ goto yy231;
+ }
+ }
+yy251:
+ yych = *++p;
+ if (yych != '>') goto yy231;
+yy252:
+ ++p;
+ { return (bufsize_t)(p - start); }
+yy254:
+ yych = *++p;
+ if (yych == '-') goto yy264;
+ if (yych == '>') goto yy231;
+ goto yy263;
+yy255:
+ yych = *++p;
+ if (yybm[0+yych] & 2) {
+ goto yy255;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= '>') goto yy252;
+ goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy272;
+ if (yych <= 0xE0) goto yy273;
+ goto yy274;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy275;
+ if (yych <= 0xEF) goto yy274;
+ goto yy276;
+ } else {
+ if (yych <= 0xF3) goto yy277;
+ if (yych <= 0xF4) goto yy278;
+ goto yy231;
+ }
+ }
+yy257:
+ yych = *++p;
+ if (yych == 'D') goto yy279;
+ if (yych == 'd') goto yy279;
+ goto yy231;
+yy258:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy231;
+ if (yych <= '\r') goto yy258;
+ goto yy231;
+ } else {
+ if (yych <= ' ') goto yy258;
+ if (yych == '>') goto yy252;
+ goto yy231;
+ }
+yy260:
+ yych = *++p;
+ if (yybm[0+yych] & 4) {
+ goto yy260;
+ }
+ if (yych <= ',') {
+ if (yych <= '\r') {
+ if (yych <= 0x08) goto yy231;
+ goto yy280;
+ } else {
+ if (yych == ' ') goto yy280;
+ goto yy231;
+ }
+ } else {
+ if (yych <= '<') {
+ if (yych <= '/') goto yy251;
+ goto yy231;
+ } else {
+ if (yych <= '=') goto yy282;
+ if (yych <= '>') goto yy252;
+ goto yy231;
+ }
+ }
+yy262:
+ yych = *++p;
+yy263:
+ if (yybm[0+yych] & 8) {
+ goto yy262;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= '-') goto yy284;
+ goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy265;
+ if (yych <= 0xE0) goto yy266;
+ goto yy267;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy268;
+ if (yych <= 0xEF) goto yy267;
+ goto yy269;
+ } else {
+ if (yych <= 0xF3) goto yy270;
+ if (yych <= 0xF4) goto yy271;
+ goto yy231;
+ }
+ }
+yy264:
+ yych = *++p;
+ if (yych == '-') goto yy251;
+ if (yych == '>') goto yy231;
+ goto yy263;
+yy265:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy262;
+ goto yy231;
+yy266:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy231;
+ if (yych <= 0xBF) goto yy265;
+ goto yy231;
+yy267:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy265;
+ goto yy231;
+yy268:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x9F) goto yy265;
+ goto yy231;
+yy269:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy231;
+ if (yych <= 0xBF) goto yy267;
+ goto yy231;
+yy270:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy267;
+ goto yy231;
+yy271:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x8F) goto yy267;
+ goto yy231;
+yy272:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy255;
+ goto yy231;
+yy273:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy231;
+ if (yych <= 0xBF) goto yy272;
+ goto yy231;
+yy274:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy272;
+ goto yy231;
+yy275:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x9F) goto yy272;
+ goto yy231;
+yy276:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy231;
+ if (yych <= 0xBF) goto yy274;
+ goto yy231;
+yy277:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy274;
+ goto yy231;
+yy278:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x8F) goto yy274;
+ goto yy231;
+yy279:
+ yych = *++p;
+ if (yych == 'A') goto yy285;
+ if (yych == 'a') goto yy285;
+ goto yy231;
+yy280:
+ yych = *++p;
+ if (yych <= '<') {
+ if (yych <= ' ') {
+ if (yych <= 0x08) goto yy231;
+ if (yych <= '\r') goto yy280;
+ if (yych <= 0x1F) goto yy231;
+ goto yy280;
+ } else {
+ if (yych <= '/') {
+ if (yych <= '.') goto yy231;
+ goto yy251;
+ } else {
+ if (yych == ':') goto yy260;
+ goto yy231;
+ }
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '=') goto yy282;
+ if (yych <= '>') goto yy252;
+ if (yych <= '@') goto yy231;
+ goto yy260;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy231;
+ goto yy260;
+ } else {
+ if (yych <= '`') goto yy231;
+ if (yych <= 'z') goto yy260;
+ goto yy231;
+ }
+ }
+ }
+yy282:
+ yych = *++p;
+ if (yybm[0+yych] & 16) {
+ goto yy286;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '"') {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= ' ') goto yy282;
+ goto yy288;
+ } else {
+ if (yych <= '\'') goto yy290;
+ if (yych <= 0xC1) goto yy231;
+ if (yych <= 0xDF) goto yy292;
+ goto yy293;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy295;
+ goto yy294;
+ } else {
+ if (yych <= 0xF0) goto yy296;
+ if (yych <= 0xF3) goto yy297;
+ if (yych <= 0xF4) goto yy298;
+ goto yy231;
+ }
+ }
+yy284:
+ yych = *++p;
+ if (yybm[0+yych] & 8) {
+ goto yy262;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= '-') goto yy251;
+ goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy265;
+ if (yych <= 0xE0) goto yy266;
+ goto yy267;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy268;
+ if (yych <= 0xEF) goto yy267;
+ goto yy269;
+ } else {
+ if (yych <= 0xF3) goto yy270;
+ if (yych <= 0xF4) goto yy271;
+ goto yy231;
+ }
+ }
+yy285:
+ yych = *++p;
+ if (yych == 'T') goto yy299;
+ if (yych == 't') goto yy299;
+ goto yy231;
+yy286:
+ yych = *++p;
+ if (yybm[0+yych] & 16) {
+ goto yy286;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '=') {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= ' ') goto yy247;
+ goto yy231;
+ } else {
+ if (yych <= '>') goto yy252;
+ if (yych <= 0xC1) goto yy231;
+ if (yych <= 0xDF) goto yy292;
+ goto yy293;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy295;
+ goto yy294;
+ } else {
+ if (yych <= 0xF0) goto yy296;
+ if (yych <= 0xF3) goto yy297;
+ if (yych <= 0xF4) goto yy298;
+ goto yy231;
+ }
+ }
+yy288:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy288;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= '"') goto yy300;
+ goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy301;
+ if (yych <= 0xE0) goto yy302;
+ goto yy303;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy304;
+ if (yych <= 0xEF) goto yy303;
+ goto yy305;
+ } else {
+ if (yych <= 0xF3) goto yy306;
+ if (yych <= 0xF4) goto yy307;
+ goto yy231;
+ }
+ }
+yy290:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy290;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= '\'') goto yy300;
+ goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy308;
+ if (yych <= 0xE0) goto yy309;
+ goto yy310;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy311;
+ if (yych <= 0xEF) goto yy310;
+ goto yy312;
+ } else {
+ if (yych <= 0xF3) goto yy313;
+ if (yych <= 0xF4) goto yy314;
+ goto yy231;
+ }
+ }
+yy292:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy286;
+ goto yy231;
+yy293:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy231;
+ if (yych <= 0xBF) goto yy292;
+ goto yy231;
+yy294:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy292;
+ goto yy231;
+yy295:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x9F) goto yy292;
+ goto yy231;
+yy296:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy231;
+ if (yych <= 0xBF) goto yy294;
+ goto yy231;
+yy297:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy294;
+ goto yy231;
+yy298:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x8F) goto yy294;
+ goto yy231;
+yy299:
+ yych = *++p;
+ if (yych == 'A') goto yy315;
+ if (yych == 'a') goto yy315;
+ goto yy231;
+yy300:
+ yych = *++p;
+ if (yybm[0+yych] & 1) {
+ goto yy247;
+ }
+ if (yych == '/') goto yy251;
+ if (yych == '>') goto yy252;
+ goto yy231;
+yy301:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy288;
+ goto yy231;
+yy302:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy231;
+ if (yych <= 0xBF) goto yy301;
+ goto yy231;
+yy303:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy301;
+ goto yy231;
+yy304:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x9F) goto yy301;
+ goto yy231;
+yy305:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy231;
+ if (yych <= 0xBF) goto yy303;
+ goto yy231;
+yy306:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy303;
+ goto yy231;
+yy307:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x8F) goto yy303;
+ goto yy231;
+yy308:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy290;
+ goto yy231;
+yy309:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy231;
+ if (yych <= 0xBF) goto yy308;
+ goto yy231;
+yy310:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy308;
+ goto yy231;
+yy311:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x9F) goto yy308;
+ goto yy231;
+yy312:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy231;
+ if (yych <= 0xBF) goto yy310;
+ goto yy231;
+yy313:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy310;
+ goto yy231;
+yy314:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x8F) goto yy310;
+ goto yy231;
+yy315:
+ yych = *++p;
+ if (yych != '[') goto yy231;
+yy316:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy316;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych >= '^') goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy319;
+ if (yych <= 0xE0) goto yy320;
+ goto yy321;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy322;
+ if (yych <= 0xEF) goto yy321;
+ goto yy323;
+ } else {
+ if (yych <= 0xF3) goto yy324;
+ if (yych <= 0xF4) goto yy325;
+ goto yy231;
+ }
+ }
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy316;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= ']') goto yy326;
+ goto yy231;
+ } else {
+ if (yych <= 0xDF) goto yy319;
+ if (yych <= 0xE0) goto yy320;
+ goto yy321;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy322;
+ if (yych <= 0xEF) goto yy321;
+ goto yy323;
+ } else {
+ if (yych <= 0xF3) goto yy324;
+ if (yych <= 0xF4) goto yy325;
+ goto yy231;
+ }
+ }
+yy319:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy316;
+ goto yy231;
+yy320:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy231;
+ if (yych <= 0xBF) goto yy319;
+ goto yy231;
+yy321:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy319;
+ goto yy231;
+yy322:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x9F) goto yy319;
+ goto yy231;
+yy323:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy231;
+ if (yych <= 0xBF) goto yy321;
+ goto yy231;
+yy324:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0xBF) goto yy321;
+ goto yy231;
+yy325:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy231;
+ if (yych <= 0x8F) goto yy321;
+ goto yy231;
+yy326:
+ yych = *++p;
+ if (yych <= 0xE0) {
+ if (yych <= '>') {
+ if (yych <= 0x00) goto yy231;
+ if (yych <= '=') goto yy316;
+ goto yy252;
+ } else {
+ if (yych <= 0x7F) goto yy316;
+ if (yych <= 0xC1) goto yy231;
+ if (yych <= 0xDF) goto yy319;
+ goto yy320;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy322;
+ goto yy321;
+ } else {
+ if (yych <= 0xF0) goto yy323;
+ if (yych <= 0xF3) goto yy324;
+ if (yych <= 0xF4) goto yy325;
+ goto yy231;
+ }
+ }
+}
+
+}
+
+// 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 yy329;
+ if (yych <= '\t') goto yy331;
+ } else {
+ if (yych <= 0x7F) goto yy331;
+ if (yych <= 0xC1) goto yy329;
+ if (yych <= 0xDF) goto yy332;
+ goto yy333;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy335;
+ goto yy334;
+ } else {
+ if (yych <= 0xF0) goto yy336;
+ if (yych <= 0xF3) goto yy337;
+ if (yych <= 0xF4) goto yy338;
+ }
+ }
+yy329:
+ ++p;
+yy330:
+ { return 0; }
+yy331:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy330;
+ if (yych <= '\t') goto yy340;
+ goto yy330;
+ } else {
+ if (yych <= 0x7F) goto yy340;
+ if (yych <= 0xC1) goto yy330;
+ if (yych <= 0xF4) goto yy340;
+ goto yy330;
+ }
+yy332:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy330;
+ if (yych <= 0xBF) goto yy339;
+ goto yy330;
+yy333:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x9F) goto yy330;
+ if (yych <= 0xBF) goto yy345;
+ goto yy330;
+yy334:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy330;
+ if (yych <= 0xBF) goto yy345;
+ goto yy330;
+yy335:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy330;
+ if (yych <= 0x9F) goto yy345;
+ goto yy330;
+yy336:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x8F) goto yy330;
+ if (yych <= 0xBF) goto yy347;
+ goto yy330;
+yy337:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy330;
+ if (yych <= 0xBF) goto yy347;
+ goto yy330;
+yy338:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy330;
+ if (yych <= 0x8F) goto yy347;
+ goto yy330;
+yy339:
+ yych = *++p;
+yy340:
+ if (yybm[0+yych] & 64) {
+ goto yy339;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy341;
+ if (yych <= '>') goto yy342;
+ } else {
+ if (yych <= 0xDF) goto yy345;
+ if (yych <= 0xE0) goto yy346;
+ goto yy347;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy348;
+ if (yych <= 0xEF) goto yy347;
+ goto yy349;
+ } else {
+ if (yych <= 0xF3) goto yy350;
+ if (yych <= 0xF4) goto yy351;
+ }
+ }
+yy341:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy330;
+ } else {
+ goto yy344;
+ }
+yy342:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 64) {
+ goto yy339;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy344;
+ if (yych <= '>') goto yy342;
+ } else {
+ if (yych <= 0xDF) goto yy345;
+ if (yych <= 0xE0) goto yy346;
+ goto yy347;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy348;
+ if (yych <= 0xEF) goto yy347;
+ goto yy349;
+ } else {
+ if (yych <= 0xF3) goto yy350;
+ if (yych <= 0xF4) goto yy351;
+ }
+ }
+yy344:
+ { return (bufsize_t)(p - start); }
+yy345:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy341;
+ if (yych <= 0xBF) goto yy339;
+ goto yy341;
+yy346:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy341;
+ if (yych <= 0xBF) goto yy345;
+ goto yy341;
+yy347:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy341;
+ if (yych <= 0xBF) goto yy345;
+ goto yy341;
+yy348:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy341;
+ if (yych <= 0x9F) goto yy345;
+ goto yy341;
+yy349:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy341;
+ if (yych <= 0xBF) goto yy347;
+ goto yy341;
+yy350:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy341;
+ if (yych <= 0xBF) goto yy347;
+ goto yy341;
+yy351:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy341;
+ if (yych <= 0x8F) goto yy347;
+ goto yy341;
+}
+
+}
+
+// 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 yy356;
+ ++p;
+yy355:
+ { return 0; }
+yy356:
+ yych = *(marker = ++p);
+ switch (yych) {
+ case '!': goto yy357;
+ case '/': goto yy359;
+ case '?': goto yy360;
+ case 'A':
+ case 'a': goto yy362;
+ case 'B':
+ case 'b': goto yy363;
+ case 'C':
+ case 'c': goto yy364;
+ case 'D':
+ case 'd': goto yy365;
+ case 'F':
+ case 'f': goto yy366;
+ case 'H':
+ case 'h': goto yy367;
+ case 'I':
+ case 'i': goto yy368;
+ case 'L':
+ case 'l': goto yy369;
+ case 'M':
+ case 'm': goto yy370;
+ case 'N':
+ case 'n': goto yy371;
+ case 'O':
+ case 'o': goto yy372;
+ case 'P':
+ case 'p': goto yy373;
+ case 'S':
+ case 's': goto yy374;
+ case 'T':
+ case 't': goto yy375;
+ case 'U':
+ case 'u': goto yy376;
+ default: goto yy355;
+ }
+yy357:
+ yych = *++p;
+ if (yych <= '@') {
+ if (yych == '-') goto yy377;
+ } else {
+ if (yych <= 'Z') goto yy378;
+ if (yych <= '[') goto yy380;
+ }
+yy358:
+ p = marker;
+ goto yy355;
+yy359:
+ yych = *++p;
+ switch (yych) {
+ case 'A':
+ case 'a': goto yy362;
+ case 'B':
+ case 'b': goto yy363;
+ case 'C':
+ case 'c': goto yy364;
+ case 'D':
+ case 'd': goto yy365;
+ case 'F':
+ case 'f': goto yy366;
+ case 'H':
+ case 'h': goto yy367;
+ case 'I':
+ case 'i': goto yy368;
+ case 'L':
+ case 'l': goto yy369;
+ case 'M':
+ case 'm': goto yy370;
+ case 'N':
+ case 'n': goto yy371;
+ case 'O':
+ case 'o': goto yy372;
+ case 'P':
+ case 'p': goto yy381;
+ case 'S':
+ case 's': goto yy382;
+ case 'T':
+ case 't': goto yy375;
+ case 'U':
+ case 'u': goto yy376;
+ default: goto yy358;
+ }
+yy360:
+ ++p;
+ { return 3; }
+yy362:
+ yych = *++p;
+ if (yych <= 'S') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy358;
+ goto yy383;
+ } else {
+ if (yych <= 'Q') goto yy358;
+ if (yych <= 'R') goto yy384;
+ goto yy385;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych == 'd') goto yy383;
+ goto yy358;
+ } else {
+ if (yych <= 'r') goto yy384;
+ if (yych <= 's') goto yy385;
+ goto yy358;
+ }
+ }
+yy363:
+ yych = *++p;
+ if (yych <= 'O') {
+ if (yych <= 'K') {
+ if (yych == 'A') goto yy386;
+ goto yy358;
+ } else {
+ if (yych <= 'L') goto yy387;
+ if (yych <= 'N') goto yy358;
+ goto yy388;
+ }
+ } else {
+ if (yych <= 'k') {
+ if (yych == 'a') goto yy386;
+ goto yy358;
+ } else {
+ if (yych <= 'l') goto yy387;
+ if (yych == 'o') goto yy388;
+ goto yy358;
+ }
+ }
+yy364:
+ yych = *++p;
+ if (yych <= 'O') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy389;
+ goto yy358;
+ } else {
+ if (yych <= 'E') goto yy390;
+ if (yych <= 'N') goto yy358;
+ goto yy391;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy389;
+ goto yy358;
+ } else {
+ if (yych <= 'e') goto yy390;
+ if (yych == 'o') goto yy391;
+ goto yy358;
+ }
+ }
+yy365:
+ yych = *++p;
+ switch (yych) {
+ case 'D':
+ case 'L':
+ case 'T':
+ case 'd':
+ case 'l':
+ case 't': goto yy392;
+ case 'E':
+ case 'e': goto yy393;
+ case 'I':
+ case 'i': goto yy394;
+ default: goto yy358;
+ }
+yy366:
+ yych = *++p;
+ if (yych <= 'R') {
+ if (yych <= 'N') {
+ if (yych == 'I') goto yy395;
+ goto yy358;
+ } else {
+ if (yych <= 'O') goto yy396;
+ if (yych <= 'Q') goto yy358;
+ goto yy397;
+ }
+ } else {
+ if (yych <= 'n') {
+ if (yych == 'i') goto yy395;
+ goto yy358;
+ } else {
+ if (yych <= 'o') goto yy396;
+ if (yych == 'r') goto yy397;
+ goto yy358;
+ }
+ }
+yy367:
+ yych = *++p;
+ if (yych <= 'S') {
+ if (yych <= 'D') {
+ if (yych <= '0') goto yy358;
+ if (yych <= '6') goto yy392;
+ goto yy358;
+ } else {
+ if (yych <= 'E') goto yy398;
+ if (yych == 'R') goto yy392;
+ goto yy358;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'T') goto yy399;
+ if (yych == 'e') goto yy398;
+ goto yy358;
+ } else {
+ if (yych <= 'r') goto yy392;
+ if (yych == 't') goto yy399;
+ goto yy358;
+ }
+ }
+yy368:
+ yych = *++p;
+ if (yych == 'F') goto yy400;
+ if (yych == 'f') goto yy400;
+ goto yy358;
+yy369:
+ yych = *++p;
+ if (yych <= 'I') {
+ if (yych == 'E') goto yy401;
+ if (yych <= 'H') goto yy358;
+ goto yy402;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy358;
+ goto yy401;
+ } else {
+ if (yych == 'i') goto yy402;
+ goto yy358;
+ }
+ }
+yy370:
+ yych = *++p;
+ if (yych <= 'E') {
+ if (yych == 'A') goto yy403;
+ if (yych <= 'D') goto yy358;
+ goto yy404;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy358;
+ goto yy403;
+ } else {
+ if (yych == 'e') goto yy404;
+ goto yy358;
+ }
+ }
+yy371:
+ yych = *++p;
+ if (yych <= 'O') {
+ if (yych == 'A') goto yy405;
+ if (yych <= 'N') goto yy358;
+ goto yy406;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy358;
+ goto yy405;
+ } else {
+ if (yych == 'o') goto yy406;
+ goto yy358;
+ }
+ }
+yy372:
+ yych = *++p;
+ if (yych <= 'P') {
+ if (yych == 'L') goto yy392;
+ if (yych <= 'O') goto yy358;
+ goto yy407;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy358;
+ goto yy392;
+ } else {
+ if (yych == 'p') goto yy407;
+ goto yy358;
+ }
+ }
+yy373:
+ yych = *++p;
+ if (yych <= '>') {
+ if (yych <= ' ') {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ if (yych <= 0x1F) goto yy358;
+ goto yy408;
+ } else {
+ if (yych == '/') goto yy410;
+ if (yych <= '=') goto yy358;
+ goto yy408;
+ }
+ } else {
+ if (yych <= 'R') {
+ if (yych == 'A') goto yy411;
+ if (yych <= 'Q') goto yy358;
+ goto yy412;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy358;
+ goto yy411;
+ } else {
+ if (yych == 'r') goto yy412;
+ goto yy358;
+ }
+ }
+ }
+yy374:
+ yych = *++p;
+ switch (yych) {
+ case 'C':
+ case 'c': goto yy413;
+ case 'E':
+ case 'e': goto yy414;
+ case 'O':
+ case 'o': goto yy415;
+ case 'T':
+ case 't': goto yy416;
+ case 'U':
+ case 'u': goto yy417;
+ default: goto yy358;
+ }
+yy375:
+ yych = *++p;
+ switch (yych) {
+ case 'A':
+ case 'a': goto yy418;
+ case 'B':
+ case 'b': goto yy419;
+ case 'D':
+ case 'd': goto yy392;
+ case 'F':
+ case 'f': goto yy420;
+ case 'H':
+ case 'h': goto yy421;
+ case 'I':
+ case 'i': goto yy422;
+ case 'R':
+ case 'r': goto yy423;
+ default: goto yy358;
+ }
+yy376:
+ yych = *++p;
+ if (yych == 'L') goto yy392;
+ if (yych == 'l') goto yy392;
+ goto yy358;
+yy377:
+ yych = *++p;
+ if (yych == '-') goto yy424;
+ goto yy358;
+yy378:
+ ++p;
+ { return 4; }
+yy380:
+ yych = *++p;
+ if (yych == 'C') goto yy426;
+ if (yych == 'c') goto yy426;
+ goto yy358;
+yy381:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'A') goto yy411;
+ if (yych == 'a') goto yy411;
+ goto yy358;
+ }
+ }
+yy382:
+ yych = *++p;
+ if (yych <= 'U') {
+ if (yych <= 'N') {
+ if (yych == 'E') goto yy414;
+ goto yy358;
+ } else {
+ if (yych <= 'O') goto yy415;
+ if (yych <= 'T') goto yy358;
+ goto yy417;
+ }
+ } else {
+ if (yych <= 'n') {
+ if (yych == 'e') goto yy414;
+ goto yy358;
+ } else {
+ if (yych <= 'o') goto yy415;
+ if (yych == 'u') goto yy417;
+ goto yy358;
+ }
+ }
+yy383:
+ yych = *++p;
+ if (yych == 'D') goto yy427;
+ if (yych == 'd') goto yy427;
+ goto yy358;
+yy384:
+ yych = *++p;
+ if (yych == 'T') goto yy428;
+ if (yych == 't') goto yy428;
+ goto yy358;
+yy385:
+ yych = *++p;
+ if (yych == 'I') goto yy429;
+ if (yych == 'i') goto yy429;
+ goto yy358;
+yy386:
+ yych = *++p;
+ if (yych == 'S') goto yy430;
+ if (yych == 's') goto yy430;
+ goto yy358;
+yy387:
+ yych = *++p;
+ if (yych == 'O') goto yy431;
+ if (yych == 'o') goto yy431;
+ goto yy358;
+yy388:
+ yych = *++p;
+ if (yych == 'D') goto yy432;
+ if (yych == 'd') goto yy432;
+ goto yy358;
+yy389:
+ yych = *++p;
+ if (yych == 'P') goto yy433;
+ if (yych == 'p') goto yy433;
+ goto yy358;
+yy390:
+ yych = *++p;
+ if (yych == 'N') goto yy434;
+ if (yych == 'n') goto yy434;
+ goto yy358;
+yy391:
+ yych = *++p;
+ if (yych == 'L') goto yy435;
+ if (yych == 'l') goto yy435;
+ goto yy358;
+yy392:
+ yych = *++p;
+ if (yych <= ' ') {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ if (yych <= 0x1F) goto yy358;
+ goto yy408;
+ } else {
+ if (yych <= '/') {
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ } else {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ }
+ }
+yy393:
+ yych = *++p;
+ if (yych == 'T') goto yy436;
+ if (yych == 't') goto yy436;
+ goto yy358;
+yy394:
+ yych = *++p;
+ if (yych <= 'V') {
+ if (yych <= 'Q') {
+ if (yych == 'A') goto yy437;
+ goto yy358;
+ } else {
+ if (yych <= 'R') goto yy392;
+ if (yych <= 'U') goto yy358;
+ goto yy392;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych == 'a') goto yy437;
+ goto yy358;
+ } else {
+ if (yych <= 'r') goto yy392;
+ if (yych == 'v') goto yy392;
+ goto yy358;
+ }
+ }
+yy395:
+ yych = *++p;
+ if (yych <= 'G') {
+ if (yych == 'E') goto yy438;
+ if (yych <= 'F') goto yy358;
+ goto yy439;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy358;
+ goto yy438;
+ } else {
+ if (yych == 'g') goto yy439;
+ goto yy358;
+ }
+ }
+yy396:
+ yych = *++p;
+ if (yych <= 'R') {
+ if (yych == 'O') goto yy434;
+ if (yych <= 'Q') goto yy358;
+ goto yy440;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy358;
+ goto yy434;
+ } else {
+ if (yych == 'r') goto yy440;
+ goto yy358;
+ }
+ }
+yy397:
+ yych = *++p;
+ if (yych == 'A') goto yy441;
+ if (yych == 'a') goto yy441;
+ goto yy358;
+yy398:
+ yych = *++p;
+ if (yych == 'A') goto yy442;
+ if (yych == 'a') goto yy442;
+ goto yy358;
+yy399:
+ yych = *++p;
+ if (yych == 'M') goto yy376;
+ if (yych == 'm') goto yy376;
+ goto yy358;
+yy400:
+ yych = *++p;
+ if (yych == 'R') goto yy443;
+ if (yych == 'r') goto yy443;
+ goto yy358;
+yy401:
+ yych = *++p;
+ if (yych == 'G') goto yy444;
+ if (yych == 'g') goto yy444;
+ goto yy358;
+yy402:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= 'M') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'N') goto yy445;
+ if (yych == 'n') goto yy445;
+ goto yy358;
+ }
+ }
+yy403:
+ yych = *++p;
+ if (yych == 'I') goto yy446;
+ if (yych == 'i') goto yy446;
+ goto yy358;
+yy404:
+ yych = *++p;
+ if (yych == 'N') goto yy447;
+ if (yych == 'n') goto yy447;
+ goto yy358;
+yy405:
+ yych = *++p;
+ if (yych == 'V') goto yy392;
+ if (yych == 'v') goto yy392;
+ goto yy358;
+yy406:
+ yych = *++p;
+ if (yych == 'F') goto yy448;
+ if (yych == 'f') goto yy448;
+ goto yy358;
+yy407:
+ yych = *++p;
+ if (yych == 'T') goto yy449;
+ if (yych == 't') goto yy449;
+ goto yy358;
+yy408:
+ ++p;
+ { return 6; }
+yy410:
+ yych = *++p;
+ if (yych == '>') goto yy408;
+ goto yy358;
+yy411:
+ yych = *++p;
+ if (yych == 'R') goto yy450;
+ if (yych == 'r') goto yy450;
+ goto yy358;
+yy412:
+ yych = *++p;
+ if (yych == 'E') goto yy451;
+ if (yych == 'e') goto yy451;
+ goto yy358;
+yy413:
+ yych = *++p;
+ if (yych == 'R') goto yy452;
+ if (yych == 'r') goto yy452;
+ goto yy358;
+yy414:
+ yych = *++p;
+ if (yych == 'C') goto yy433;
+ if (yych == 'c') goto yy433;
+ goto yy358;
+yy415:
+ yych = *++p;
+ if (yych == 'U') goto yy453;
+ if (yych == 'u') goto yy453;
+ goto yy358;
+yy416:
+ yych = *++p;
+ if (yych == 'Y') goto yy454;
+ if (yych == 'y') goto yy454;
+ goto yy358;
+yy417:
+ yych = *++p;
+ if (yych == 'M') goto yy455;
+ if (yych == 'm') goto yy455;
+ goto yy358;
+yy418:
+ yych = *++p;
+ if (yych == 'B') goto yy456;
+ if (yych == 'b') goto yy456;
+ goto yy358;
+yy419:
+ yych = *++p;
+ if (yych == 'O') goto yy388;
+ if (yych == 'o') goto yy388;
+ goto yy358;
+yy420:
+ yych = *++p;
+ if (yych == 'O') goto yy457;
+ if (yych == 'o') goto yy457;
+ goto yy358;
+yy421:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'E') goto yy458;
+ if (yych == 'e') goto yy458;
+ goto yy358;
+ }
+ }
+yy422:
+ yych = *++p;
+ if (yych == 'T') goto yy456;
+ if (yych == 't') goto yy456;
+ goto yy358;
+yy423:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'A') goto yy459;
+ if (yych == 'a') goto yy459;
+ goto yy358;
+ }
+ }
+yy424:
+ ++p;
+ { return 2; }
+yy426:
+ yych = *++p;
+ if (yych == 'D') goto yy460;
+ if (yych == 'd') goto yy460;
+ goto yy358;
+yy427:
+ yych = *++p;
+ if (yych == 'R') goto yy461;
+ if (yych == 'r') goto yy461;
+ goto yy358;
+yy428:
+ yych = *++p;
+ if (yych == 'I') goto yy462;
+ if (yych == 'i') goto yy462;
+ goto yy358;
+yy429:
+ yych = *++p;
+ if (yych == 'D') goto yy463;
+ if (yych == 'd') goto yy463;
+ goto yy358;
+yy430:
+ yych = *++p;
+ if (yych == 'E') goto yy464;
+ if (yych == 'e') goto yy464;
+ goto yy358;
+yy431:
+ yych = *++p;
+ if (yych == 'C') goto yy465;
+ if (yych == 'c') goto yy465;
+ goto yy358;
+yy432:
+ yych = *++p;
+ if (yych == 'Y') goto yy392;
+ if (yych == 'y') goto yy392;
+ goto yy358;
+yy433:
+ yych = *++p;
+ if (yych == 'T') goto yy466;
+ if (yych == 't') goto yy466;
+ goto yy358;
+yy434:
+ yych = *++p;
+ if (yych == 'T') goto yy467;
+ if (yych == 't') goto yy467;
+ goto yy358;
+yy435:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= 'F') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'G') goto yy468;
+ if (yych == 'g') goto yy468;
+ goto yy358;
+ }
+ }
+yy436:
+ yych = *++p;
+ if (yych == 'A') goto yy469;
+ if (yych == 'a') goto yy469;
+ goto yy358;
+yy437:
+ yych = *++p;
+ if (yych == 'L') goto yy470;
+ if (yych == 'l') goto yy470;
+ goto yy358;
+yy438:
+ yych = *++p;
+ if (yych == 'L') goto yy471;
+ if (yych == 'l') goto yy471;
+ goto yy358;
+yy439:
+ yych = *++p;
+ if (yych <= 'U') {
+ if (yych == 'C') goto yy472;
+ if (yych <= 'T') goto yy358;
+ goto yy473;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'b') goto yy358;
+ goto yy472;
+ } else {
+ if (yych == 'u') goto yy473;
+ goto yy358;
+ }
+ }
+yy440:
+ yych = *++p;
+ if (yych == 'M') goto yy392;
+ if (yych == 'm') goto yy392;
+ goto yy358;
+yy441:
+ yych = *++p;
+ if (yych == 'M') goto yy474;
+ if (yych == 'm') goto yy474;
+ goto yy358;
+yy442:
+ yych = *++p;
+ if (yych == 'D') goto yy475;
+ if (yych == 'd') goto yy475;
+ goto yy358;
+yy443:
+ yych = *++p;
+ if (yych == 'A') goto yy476;
+ if (yych == 'a') goto yy476;
+ goto yy358;
+yy444:
+ yych = *++p;
+ if (yych == 'E') goto yy477;
+ if (yych == 'e') goto yy477;
+ goto yy358;
+yy445:
+ yych = *++p;
+ if (yych == 'K') goto yy392;
+ if (yych == 'k') goto yy392;
+ goto yy358;
+yy446:
+ yych = *++p;
+ if (yych == 'N') goto yy392;
+ if (yych == 'n') goto yy392;
+ goto yy358;
+yy447:
+ yych = *++p;
+ if (yych == 'U') goto yy478;
+ if (yych == 'u') goto yy478;
+ goto yy358;
+yy448:
+ yych = *++p;
+ if (yych == 'R') goto yy479;
+ if (yych == 'r') goto yy479;
+ goto yy358;
+yy449:
+ yych = *++p;
+ if (yych <= 'I') {
+ if (yych == 'G') goto yy468;
+ if (yych <= 'H') goto yy358;
+ goto yy480;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'f') goto yy358;
+ goto yy468;
+ } else {
+ if (yych == 'i') goto yy480;
+ goto yy358;
+ }
+ }
+yy450:
+ yych = *++p;
+ if (yych == 'A') goto yy440;
+ if (yych == 'a') goto yy440;
+ goto yy358;
+yy451:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy481;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy481;
+ if (yych == '>') goto yy481;
+ goto yy358;
+ }
+yy452:
+ yych = *++p;
+ if (yych == 'I') goto yy483;
+ if (yych == 'i') goto yy483;
+ goto yy358;
+yy453:
+ yych = *++p;
+ if (yych == 'R') goto yy484;
+ if (yych == 'r') goto yy484;
+ goto yy358;
+yy454:
+ yych = *++p;
+ if (yych == 'L') goto yy412;
+ if (yych == 'l') goto yy412;
+ goto yy358;
+yy455:
+ yych = *++p;
+ if (yych == 'M') goto yy485;
+ if (yych == 'm') goto yy485;
+ goto yy358;
+yy456:
+ yych = *++p;
+ if (yych == 'L') goto yy463;
+ if (yych == 'l') goto yy463;
+ goto yy358;
+yy457:
+ yych = *++p;
+ if (yych == 'O') goto yy486;
+ if (yych == 'o') goto yy486;
+ goto yy358;
+yy458:
+ yych = *++p;
+ if (yych == 'A') goto yy487;
+ if (yych == 'a') goto yy487;
+ goto yy358;
+yy459:
+ yych = *++p;
+ if (yych == 'C') goto yy445;
+ if (yych == 'c') goto yy445;
+ goto yy358;
+yy460:
+ yych = *++p;
+ if (yych == 'A') goto yy488;
+ if (yych == 'a') goto yy488;
+ goto yy358;
+yy461:
+ yych = *++p;
+ if (yych == 'E') goto yy489;
+ if (yych == 'e') goto yy489;
+ goto yy358;
+yy462:
+ yych = *++p;
+ if (yych == 'C') goto yy456;
+ if (yych == 'c') goto yy456;
+ goto yy358;
+yy463:
+ yych = *++p;
+ if (yych == 'E') goto yy392;
+ if (yych == 'e') goto yy392;
+ goto yy358;
+yy464:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= 'E') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'F') goto yy490;
+ if (yych == 'f') goto yy490;
+ goto yy358;
+ }
+ }
+yy465:
+ yych = *++p;
+ if (yych == 'K') goto yy491;
+ if (yych == 'k') goto yy491;
+ goto yy358;
+yy466:
+ yych = *++p;
+ if (yych == 'I') goto yy480;
+ if (yych == 'i') goto yy480;
+ goto yy358;
+yy467:
+ yych = *++p;
+ if (yych == 'E') goto yy492;
+ if (yych == 'e') goto yy492;
+ goto yy358;
+yy468:
+ yych = *++p;
+ if (yych == 'R') goto yy493;
+ if (yych == 'r') goto yy493;
+ goto yy358;
+yy469:
+ yych = *++p;
+ if (yych == 'I') goto yy494;
+ if (yych == 'i') goto yy494;
+ goto yy358;
+yy470:
+ yych = *++p;
+ if (yych == 'O') goto yy495;
+ if (yych == 'o') goto yy495;
+ goto yy358;
+yy471:
+ yych = *++p;
+ if (yych == 'D') goto yy496;
+ if (yych == 'd') goto yy496;
+ goto yy358;
+yy472:
+ yych = *++p;
+ if (yych == 'A') goto yy389;
+ if (yych == 'a') goto yy389;
+ goto yy358;
+yy473:
+ yych = *++p;
+ if (yych == 'R') goto yy463;
+ if (yych == 'r') goto yy463;
+ goto yy358;
+yy474:
+ yych = *++p;
+ if (yych == 'E') goto yy497;
+ if (yych == 'e') goto yy497;
+ goto yy358;
+yy475:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'E') goto yy492;
+ if (yych == 'e') goto yy492;
+ goto yy358;
+ }
+ }
+yy476:
+ yych = *++p;
+ if (yych == 'M') goto yy463;
+ if (yych == 'm') goto yy463;
+ goto yy358;
+yy477:
+ yych = *++p;
+ if (yych == 'N') goto yy487;
+ if (yych == 'n') goto yy487;
+ goto yy358;
+yy478:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'I') goto yy498;
+ if (yych == 'i') goto yy498;
+ goto yy358;
+ }
+ }
+yy479:
+ yych = *++p;
+ if (yych == 'A') goto yy499;
+ if (yych == 'a') goto yy499;
+ goto yy358;
+yy480:
+ yych = *++p;
+ if (yych == 'O') goto yy446;
+ if (yych == 'o') goto yy446;
+ goto yy358;
+yy481:
+ ++p;
+ { return 1; }
+yy483:
+ yych = *++p;
+ if (yych == 'P') goto yy500;
+ if (yych == 'p') goto yy500;
+ goto yy358;
+yy484:
+ yych = *++p;
+ if (yych == 'C') goto yy463;
+ if (yych == 'c') goto yy463;
+ goto yy358;
+yy485:
+ yych = *++p;
+ if (yych == 'A') goto yy501;
+ if (yych == 'a') goto yy501;
+ goto yy358;
+yy486:
+ yych = *++p;
+ if (yych == 'T') goto yy392;
+ if (yych == 't') goto yy392;
+ goto yy358;
+yy487:
+ yych = *++p;
+ if (yych == 'D') goto yy392;
+ if (yych == 'd') goto yy392;
+ goto yy358;
+yy488:
+ yych = *++p;
+ if (yych == 'T') goto yy502;
+ if (yych == 't') goto yy502;
+ goto yy358;
+yy489:
+ yych = *++p;
+ if (yych == 'S') goto yy503;
+ if (yych == 's') goto yy503;
+ goto yy358;
+yy490:
+ yych = *++p;
+ if (yych == 'O') goto yy504;
+ if (yych == 'o') goto yy504;
+ goto yy358;
+yy491:
+ yych = *++p;
+ if (yych == 'Q') goto yy505;
+ if (yych == 'q') goto yy505;
+ goto yy358;
+yy492:
+ yych = *++p;
+ if (yych == 'R') goto yy392;
+ if (yych == 'r') goto yy392;
+ goto yy358;
+yy493:
+ yych = *++p;
+ if (yych == 'O') goto yy506;
+ if (yych == 'o') goto yy506;
+ goto yy358;
+yy494:
+ yych = *++p;
+ if (yych == 'L') goto yy503;
+ if (yych == 'l') goto yy503;
+ goto yy358;
+yy495:
+ yych = *++p;
+ if (yych == 'G') goto yy392;
+ if (yych == 'g') goto yy392;
+ goto yy358;
+yy496:
+ yych = *++p;
+ if (yych == 'S') goto yy507;
+ if (yych == 's') goto yy507;
+ goto yy358;
+yy497:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy358;
+ if (yych <= '\r') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= ' ') goto yy408;
+ if (yych <= '.') goto yy358;
+ goto yy410;
+ }
+ } else {
+ if (yych <= 'R') {
+ if (yych == '>') goto yy408;
+ goto yy358;
+ } else {
+ if (yych <= 'S') goto yy507;
+ if (yych == 's') goto yy507;
+ goto yy358;
+ }
+ }
+yy498:
+ yych = *++p;
+ if (yych == 'T') goto yy508;
+ if (yych == 't') goto yy508;
+ goto yy358;
+yy499:
+ yych = *++p;
+ if (yych == 'M') goto yy509;
+ if (yych == 'm') goto yy509;
+ goto yy358;
+yy500:
+ yych = *++p;
+ if (yych == 'T') goto yy451;
+ if (yych == 't') goto yy451;
+ goto yy358;
+yy501:
+ yych = *++p;
+ if (yych == 'R') goto yy432;
+ if (yych == 'r') goto yy432;
+ goto yy358;
+yy502:
+ yych = *++p;
+ if (yych == 'A') goto yy510;
+ if (yych == 'a') goto yy510;
+ goto yy358;
+yy503:
+ yych = *++p;
+ if (yych == 'S') goto yy392;
+ if (yych == 's') goto yy392;
+ goto yy358;
+yy504:
+ yych = *++p;
+ if (yych == 'N') goto yy486;
+ if (yych == 'n') goto yy486;
+ goto yy358;
+yy505:
+ yych = *++p;
+ if (yych == 'U') goto yy511;
+ if (yych == 'u') goto yy511;
+ goto yy358;
+yy506:
+ yych = *++p;
+ if (yych == 'U') goto yy512;
+ if (yych == 'u') goto yy512;
+ goto yy358;
+yy507:
+ yych = *++p;
+ if (yych == 'E') goto yy486;
+ if (yych == 'e') goto yy486;
+ goto yy358;
+yy508:
+ yych = *++p;
+ if (yych == 'E') goto yy440;
+ if (yych == 'e') goto yy440;
+ goto yy358;
+yy509:
+ yych = *++p;
+ if (yych == 'E') goto yy503;
+ if (yych == 'e') goto yy503;
+ goto yy358;
+yy510:
+ yych = *++p;
+ if (yych == '[') goto yy513;
+ goto yy358;
+yy511:
+ yych = *++p;
+ if (yych == 'O') goto yy515;
+ if (yych == 'o') goto yy515;
+ goto yy358;
+yy512:
+ yych = *++p;
+ if (yych == 'P') goto yy392;
+ if (yych == 'p') goto yy392;
+ goto yy358;
+yy513:
+ ++p;
+ { return 5; }
+yy515:
+ yych = *++p;
+ if (yych == 'T') goto yy463;
+ if (yych == 't') goto yy463;
+ goto yy358;
+}
+
+}
+
+// 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 yy520;
+ ++p;
+yy519:
+ { return 0; }
+yy520:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '@') {
+ if (yych != '/') goto yy519;
+ } else {
+ if (yych <= 'Z') goto yy523;
+ if (yych <= '`') goto yy519;
+ if (yych <= 'z') goto yy523;
+ goto yy519;
+ }
+ yych = *++p;
+ if (yych <= '@') goto yy522;
+ if (yych <= 'Z') goto yy525;
+ if (yych <= '`') goto yy522;
+ if (yych <= 'z') goto yy525;
+yy522:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy519;
+ } else {
+ goto yy538;
+ }
+yy523:
+ yych = *++p;
+ if (yybm[0+yych] & 2) {
+ goto yy527;
+ }
+ if (yych <= '=') {
+ if (yych <= '.') {
+ if (yych == '-') goto yy523;
+ goto yy522;
+ } else {
+ if (yych <= '/') goto yy529;
+ if (yych <= '9') goto yy523;
+ goto yy522;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '>') goto yy530;
+ if (yych <= '@') goto yy522;
+ goto yy523;
+ } else {
+ if (yych <= '`') goto yy522;
+ if (yych <= 'z') goto yy523;
+ goto yy522;
+ }
+ }
+yy525:
+ yych = *++p;
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy522;
+ if (yych <= '\r') goto yy532;
+ goto yy522;
+ } else {
+ if (yych <= ' ') goto yy532;
+ if (yych == '-') goto yy525;
+ goto yy522;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy525;
+ if (yych == '>') goto yy530;
+ goto yy522;
+ } else {
+ if (yych <= 'Z') goto yy525;
+ if (yych <= '`') goto yy522;
+ if (yych <= 'z') goto yy525;
+ goto yy522;
+ }
+ }
+yy527:
+ yych = *++p;
+ if (yybm[0+yych] & 2) {
+ goto yy527;
+ }
+ if (yych <= '>') {
+ if (yych <= '9') {
+ if (yych != '/') goto yy522;
+ } else {
+ if (yych <= ':') goto yy534;
+ if (yych <= '=') goto yy522;
+ goto yy530;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '@') goto yy522;
+ if (yych <= 'Z') goto yy534;
+ goto yy522;
+ } else {
+ if (yych == '`') goto yy522;
+ if (yych <= 'z') goto yy534;
+ goto yy522;
+ }
+ }
+yy529:
+ yych = *++p;
+ if (yych != '>') goto yy522;
+yy530:
+ yych = *++p;
+ if (yybm[0+yych] & 4) {
+ goto yy530;
+ }
+ if (yych <= 0x08) goto yy522;
+ if (yych <= '\n') goto yy536;
+ if (yych <= '\v') goto yy522;
+ if (yych <= '\r') goto yy539;
+ goto yy522;
+yy532:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych <= 0x08) goto yy522;
+ if (yych <= '\r') goto yy532;
+ goto yy522;
+ } else {
+ if (yych <= ' ') goto yy532;
+ if (yych == '>') goto yy530;
+ goto yy522;
+ }
+yy534:
+ yych = *++p;
+ if (yybm[0+yych] & 8) {
+ goto yy534;
+ }
+ if (yych <= ',') {
+ if (yych <= '\r') {
+ if (yych <= 0x08) goto yy522;
+ goto yy540;
+ } else {
+ if (yych == ' ') goto yy540;
+ goto yy522;
+ }
+ } else {
+ if (yych <= '<') {
+ if (yych <= '/') goto yy529;
+ goto yy522;
+ } else {
+ if (yych <= '=') goto yy542;
+ if (yych <= '>') goto yy530;
+ goto yy522;
+ }
+ }
+yy536:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 4) {
+ goto yy530;
+ }
+ if (yych <= 0x08) goto yy538;
+ if (yych <= '\n') goto yy536;
+ if (yych <= '\v') goto yy538;
+ if (yych <= '\r') goto yy539;
+yy538:
+ { return 7; }
+yy539:
+ ++p;
+ goto yy538;
+yy540:
+ yych = *++p;
+ if (yych <= '<') {
+ if (yych <= ' ') {
+ if (yych <= 0x08) goto yy522;
+ if (yych <= '\r') goto yy540;
+ if (yych <= 0x1F) goto yy522;
+ goto yy540;
+ } else {
+ if (yych <= '/') {
+ if (yych <= '.') goto yy522;
+ goto yy529;
+ } else {
+ if (yych == ':') goto yy534;
+ goto yy522;
+ }
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '=') goto yy542;
+ if (yych <= '>') goto yy530;
+ if (yych <= '@') goto yy522;
+ goto yy534;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy522;
+ goto yy534;
+ } else {
+ if (yych <= '`') goto yy522;
+ if (yych <= 'z') goto yy534;
+ goto yy522;
+ }
+ }
+ }
+yy542:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy544;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '"') {
+ if (yych <= 0x00) goto yy522;
+ if (yych <= ' ') goto yy542;
+ goto yy546;
+ } else {
+ if (yych <= '\'') goto yy548;
+ if (yych <= 0xC1) goto yy522;
+ if (yych <= 0xDF) goto yy550;
+ goto yy551;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy553;
+ goto yy552;
+ } else {
+ if (yych <= 0xF0) goto yy554;
+ if (yych <= 0xF3) goto yy555;
+ if (yych <= 0xF4) goto yy556;
+ goto yy522;
+ }
+ }
+yy544:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy544;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '=') {
+ if (yych <= 0x00) goto yy522;
+ if (yych <= ' ') goto yy527;
+ goto yy522;
+ } else {
+ if (yych <= '>') goto yy530;
+ if (yych <= 0xC1) goto yy522;
+ if (yych <= 0xDF) goto yy550;
+ goto yy551;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy553;
+ goto yy552;
+ } else {
+ if (yych <= 0xF0) goto yy554;
+ if (yych <= 0xF3) goto yy555;
+ if (yych <= 0xF4) goto yy556;
+ goto yy522;
+ }
+ }
+yy546:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy546;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy522;
+ if (yych <= '"') goto yy557;
+ goto yy522;
+ } else {
+ if (yych <= 0xDF) goto yy558;
+ if (yych <= 0xE0) goto yy559;
+ goto yy560;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy561;
+ if (yych <= 0xEF) goto yy560;
+ goto yy562;
+ } else {
+ if (yych <= 0xF3) goto yy563;
+ if (yych <= 0xF4) goto yy564;
+ goto yy522;
+ }
+ }
+yy548:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy548;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy522;
+ if (yych <= '\'') goto yy557;
+ goto yy522;
+ } else {
+ if (yych <= 0xDF) goto yy565;
+ if (yych <= 0xE0) goto yy566;
+ goto yy567;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy568;
+ if (yych <= 0xEF) goto yy567;
+ goto yy569;
+ } else {
+ if (yych <= 0xF3) goto yy570;
+ if (yych <= 0xF4) goto yy571;
+ goto yy522;
+ }
+ }
+yy550:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy544;
+ goto yy522;
+yy551:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy522;
+ if (yych <= 0xBF) goto yy550;
+ goto yy522;
+yy552:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy550;
+ goto yy522;
+yy553:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0x9F) goto yy550;
+ goto yy522;
+yy554:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy522;
+ if (yych <= 0xBF) goto yy552;
+ goto yy522;
+yy555:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy552;
+ goto yy522;
+yy556:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0x8F) goto yy552;
+ goto yy522;
+yy557:
+ yych = *++p;
+ if (yybm[0+yych] & 2) {
+ goto yy527;
+ }
+ if (yych == '/') goto yy529;
+ if (yych == '>') goto yy530;
+ goto yy522;
+yy558:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy546;
+ goto yy522;
+yy559:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy522;
+ if (yych <= 0xBF) goto yy558;
+ goto yy522;
+yy560:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy558;
+ goto yy522;
+yy561:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0x9F) goto yy558;
+ goto yy522;
+yy562:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy522;
+ if (yych <= 0xBF) goto yy560;
+ goto yy522;
+yy563:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy560;
+ goto yy522;
+yy564:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0x8F) goto yy560;
+ goto yy522;
+yy565:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy548;
+ goto yy522;
+yy566:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy522;
+ if (yych <= 0xBF) goto yy565;
+ goto yy522;
+yy567:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy565;
+ goto yy522;
+yy568:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0x9F) goto yy565;
+ goto yy522;
+yy569:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy522;
+ if (yych <= 0xBF) goto yy567;
+ goto yy522;
+yy570:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0xBF) goto yy567;
+ goto yy522;
+yy571:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy522;
+ if (yych <= 0x8F) goto yy567;
+ goto yy522;
+}
+
+}
+
+// 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 yy574;
+ if (yych != '\n') goto yy576;
+ } else {
+ if (yych <= '<') goto yy577;
+ if (yych <= 0x7F) goto yy576;
+ if (yych >= 0xC2) goto yy578;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy579;
+ if (yych == 0xED) goto yy581;
+ goto yy580;
+ } else {
+ if (yych <= 0xF0) goto yy582;
+ if (yych <= 0xF3) goto yy583;
+ if (yych <= 0xF4) goto yy584;
+ }
+ }
+yy574:
+ ++p;
+yy575:
+ { return 0; }
+yy576:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy575;
+ if (yych <= '\t') goto yy586;
+ goto yy575;
+ } else {
+ if (yych <= 0x7F) goto yy586;
+ if (yych <= 0xC1) goto yy575;
+ if (yych <= 0xF4) goto yy586;
+ goto yy575;
+ }
+yy577:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '.') {
+ if (yych <= 0x00) goto yy575;
+ if (yych == '\n') goto yy575;
+ goto yy586;
+ } else {
+ if (yych <= 0x7F) {
+ if (yych <= '/') goto yy597;
+ goto yy586;
+ } else {
+ if (yych <= 0xC1) goto yy575;
+ if (yych <= 0xF4) goto yy586;
+ goto yy575;
+ }
+ }
+yy578:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy575;
+ if (yych <= 0xBF) goto yy585;
+ goto yy575;
+yy579:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x9F) goto yy575;
+ if (yych <= 0xBF) goto yy590;
+ goto yy575;
+yy580:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy575;
+ if (yych <= 0xBF) goto yy590;
+ goto yy575;
+yy581:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy575;
+ if (yych <= 0x9F) goto yy590;
+ goto yy575;
+yy582:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x8F) goto yy575;
+ if (yych <= 0xBF) goto yy592;
+ goto yy575;
+yy583:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy575;
+ if (yych <= 0xBF) goto yy592;
+ goto yy575;
+yy584:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy575;
+ if (yych <= 0x8F) goto yy592;
+ goto yy575;
+yy585:
+ yych = *++p;
+yy586:
+ if (yybm[0+yych] & 64) {
+ goto yy585;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy587;
+ if (yych <= '<') goto yy588;
+ } else {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ goto yy592;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy593;
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ }
+ }
+yy587:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy575;
+ } else {
+ goto yy607;
+ }
+yy588:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '.') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= '/') goto yy597;
+ if (yych <= 0x7F) goto yy585;
+ if (yych <= 0xC1) goto yy587;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy591;
+ if (yych == 0xED) goto yy593;
+ goto yy592;
+ } else {
+ if (yych <= 0xF0) goto yy594;
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+yy590:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy587;
+ if (yych <= 0xBF) goto yy585;
+ goto yy587;
+yy591:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy587;
+ if (yych <= 0xBF) goto yy590;
+ goto yy587;
+yy592:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy587;
+ if (yych <= 0xBF) goto yy590;
+ goto yy587;
+yy593:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy587;
+ if (yych <= 0x9F) goto yy590;
+ goto yy587;
+yy594:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy587;
+ if (yych <= 0xBF) goto yy592;
+ goto yy587;
+yy595:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy587;
+ if (yych <= 0xBF) goto yy592;
+ goto yy587;
+yy596:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy587;
+ if (yych <= 0x8F) goto yy592;
+ goto yy587;
+yy597:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 's') {
+ if (yych <= 'P') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= '\n') goto yy587;
+ if (yych <= 'O') goto yy585;
+ }
+ } else {
+ if (yych <= 'o') {
+ if (yych == 'S') goto yy599;
+ goto yy585;
+ } else {
+ if (yych <= 'p') goto yy598;
+ if (yych <= 'r') goto yy585;
+ goto yy599;
+ }
+ }
+ } else {
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ } else {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ goto yy592;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy593;
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy598:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'Q') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'R') goto yy600;
+ goto yy585;
+ } else {
+ if (yych <= 'r') goto yy600;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy599:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 't') {
+ if (yych <= 'C') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= '\n') goto yy587;
+ if (yych <= 'B') goto yy585;
+ goto yy601;
+ }
+ } else {
+ if (yych <= 'b') {
+ if (yych == 'T') goto yy602;
+ goto yy585;
+ } else {
+ if (yych <= 'c') goto yy601;
+ if (yych <= 's') goto yy585;
+ goto yy602;
+ }
+ }
+ } else {
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ } else {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ goto yy592;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy593;
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy600:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'D') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'E') goto yy603;
+ goto yy585;
+ } else {
+ if (yych <= 'e') goto yy603;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy601:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'Q') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'R') goto yy604;
+ goto yy585;
+ } else {
+ if (yych <= 'r') goto yy604;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy602:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'X') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Y') goto yy605;
+ goto yy585;
+ } else {
+ if (yych <= 'y') goto yy605;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy603:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '=') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= '>') goto yy606;
+ if (yych <= 0x7F) goto yy585;
+ if (yych <= 0xC1) goto yy587;
+ goto yy590;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy591;
+ if (yych == 0xED) goto yy593;
+ goto yy592;
+ } else {
+ if (yych <= 0xF0) goto yy594;
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+yy604:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'H') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'I') goto yy608;
+ goto yy585;
+ } else {
+ if (yych <= 'i') goto yy608;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy605:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'K') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 'k') {
+ if (yych <= 'L') goto yy600;
+ goto yy585;
+ } else {
+ if (yych <= 'l') goto yy600;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy606:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 64) {
+ goto yy585;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy607;
+ if (yych <= '<') goto yy588;
+ } else {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ goto yy592;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy593;
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ }
+ }
+yy607:
+ { return (bufsize_t)(p - start); }
+yy608:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'O') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 'o') {
+ if (yych >= 'Q') goto yy585;
+ } else {
+ if (yych <= 'p') goto yy609;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+yy609:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy588;
+ }
+ if (yych <= 0xC1) {
+ if (yych <= 'S') {
+ if (yych <= 0x00) goto yy587;
+ if (yych == '\n') goto yy587;
+ goto yy585;
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'T') goto yy603;
+ goto yy585;
+ } else {
+ if (yych <= 't') goto yy603;
+ if (yych <= 0x7F) goto yy585;
+ goto yy587;
+ }
+ }
+ } else {
+ if (yych <= 0xED) {
+ if (yych <= 0xDF) goto yy590;
+ if (yych <= 0xE0) goto yy591;
+ if (yych <= 0xEC) goto yy592;
+ goto yy593;
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xEF) goto yy592;
+ goto yy594;
+ } else {
+ if (yych <= 0xF3) goto yy595;
+ if (yych <= 0xF4) goto yy596;
+ goto yy587;
+ }
+ }
+ }
+}
+
+}
+
+// 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 yy612;
+ if (yych != '\n') goto yy614;
+ } else {
+ if (yych <= '-') goto yy615;
+ if (yych <= 0x7F) goto yy614;
+ if (yych >= 0xC2) goto yy616;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy617;
+ if (yych == 0xED) goto yy619;
+ goto yy618;
+ } else {
+ if (yych <= 0xF0) goto yy620;
+ if (yych <= 0xF3) goto yy621;
+ if (yych <= 0xF4) goto yy622;
+ }
+ }
+yy612:
+ ++p;
+yy613:
+ { return 0; }
+yy614:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy613;
+ if (yych <= '\t') goto yy624;
+ goto yy613;
+ } else {
+ if (yych <= 0x7F) goto yy624;
+ if (yych <= 0xC1) goto yy613;
+ if (yych <= 0xF4) goto yy624;
+ goto yy613;
+ }
+yy615:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 128) {
+ goto yy634;
+ }
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy613;
+ if (yych <= '\t') goto yy624;
+ goto yy613;
+ } else {
+ if (yych <= 0x7F) goto yy624;
+ if (yych <= 0xC1) goto yy613;
+ if (yych <= 0xF4) goto yy624;
+ goto yy613;
+ }
+yy616:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy613;
+ if (yych <= 0xBF) goto yy623;
+ goto yy613;
+yy617:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x9F) goto yy613;
+ if (yych <= 0xBF) goto yy627;
+ goto yy613;
+yy618:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy613;
+ if (yych <= 0xBF) goto yy627;
+ goto yy613;
+yy619:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy613;
+ if (yych <= 0x9F) goto yy627;
+ goto yy613;
+yy620:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x8F) goto yy613;
+ if (yych <= 0xBF) goto yy629;
+ goto yy613;
+yy621:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy613;
+ if (yych <= 0xBF) goto yy629;
+ goto yy613;
+yy622:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy613;
+ if (yych <= 0x8F) goto yy629;
+ goto yy613;
+yy623:
+ yych = *++p;
+yy624:
+ if (yybm[0+yych] & 64) {
+ goto yy623;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy625;
+ if (yych <= '-') goto yy626;
+ } else {
+ if (yych <= 0xDF) goto yy627;
+ if (yych <= 0xE0) goto yy628;
+ goto yy629;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy630;
+ if (yych <= 0xEF) goto yy629;
+ goto yy631;
+ } else {
+ if (yych <= 0xF3) goto yy632;
+ if (yych <= 0xF4) goto yy633;
+ }
+ }
+yy625:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy613;
+ } else {
+ goto yy637;
+ }
+yy626:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy623;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy625;
+ if (yych <= '-') goto yy634;
+ goto yy625;
+ } else {
+ if (yych <= 0xDF) goto yy627;
+ if (yych <= 0xE0) goto yy628;
+ goto yy629;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy630;
+ if (yych <= 0xEF) goto yy629;
+ goto yy631;
+ } else {
+ if (yych <= 0xF3) goto yy632;
+ if (yych <= 0xF4) goto yy633;
+ goto yy625;
+ }
+ }
+yy627:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy625;
+ if (yych <= 0xBF) goto yy623;
+ goto yy625;
+yy628:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy625;
+ if (yych <= 0xBF) goto yy627;
+ goto yy625;
+yy629:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy625;
+ if (yych <= 0xBF) goto yy627;
+ goto yy625;
+yy630:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy625;
+ if (yych <= 0x9F) goto yy627;
+ goto yy625;
+yy631:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy625;
+ if (yych <= 0xBF) goto yy629;
+ goto yy625;
+yy632:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy625;
+ if (yych <= 0xBF) goto yy629;
+ goto yy625;
+yy633:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy625;
+ if (yych <= 0x8F) goto yy629;
+ goto yy625;
+yy634:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy634;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '=') {
+ if (yych <= 0x00) goto yy625;
+ if (yych == '\n') goto yy625;
+ goto yy623;
+ } else {
+ if (yych <= '>') goto yy636;
+ if (yych <= 0x7F) goto yy623;
+ if (yych <= 0xC1) goto yy625;
+ goto yy627;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy628;
+ if (yych == 0xED) goto yy630;
+ goto yy629;
+ } else {
+ if (yych <= 0xF0) goto yy631;
+ if (yych <= 0xF3) goto yy632;
+ if (yych <= 0xF4) goto yy633;
+ goto yy625;
+ }
+ }
+yy636:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 64) {
+ goto yy623;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy637;
+ if (yych <= '-') goto yy626;
+ } else {
+ if (yych <= 0xDF) goto yy627;
+ if (yych <= 0xE0) goto yy628;
+ goto yy629;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy630;
+ if (yych <= 0xEF) goto yy629;
+ goto yy631;
+ } else {
+ if (yych <= 0xF3) goto yy632;
+ if (yych <= 0xF4) goto yy633;
+ }
+ }
+yy637:
+ { 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 yy640;
+ if (yych != '\n') goto yy642;
+ } else {
+ if (yych <= '?') goto yy643;
+ if (yych <= 0x7F) goto yy642;
+ if (yych >= 0xC2) goto yy644;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy645;
+ if (yych == 0xED) goto yy647;
+ goto yy646;
+ } else {
+ if (yych <= 0xF0) goto yy648;
+ if (yych <= 0xF3) goto yy649;
+ if (yych <= 0xF4) goto yy650;
+ }
+ }
+yy640:
+ ++p;
+yy641:
+ { return 0; }
+yy642:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy641;
+ if (yych <= '\t') goto yy652;
+ goto yy641;
+ } else {
+ if (yych <= 0x7F) goto yy652;
+ if (yych <= 0xC1) goto yy641;
+ if (yych <= 0xF4) goto yy652;
+ goto yy641;
+ }
+yy643:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '=') {
+ if (yych <= 0x00) goto yy641;
+ if (yych == '\n') goto yy641;
+ goto yy652;
+ } else {
+ if (yych <= 0x7F) {
+ if (yych <= '>') goto yy663;
+ goto yy652;
+ } else {
+ if (yych <= 0xC1) goto yy641;
+ if (yych <= 0xF4) goto yy652;
+ goto yy641;
+ }
+ }
+yy644:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy641;
+ if (yych <= 0xBF) goto yy651;
+ goto yy641;
+yy645:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x9F) goto yy641;
+ if (yych <= 0xBF) goto yy656;
+ goto yy641;
+yy646:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy641;
+ if (yych <= 0xBF) goto yy656;
+ goto yy641;
+yy647:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy641;
+ if (yych <= 0x9F) goto yy656;
+ goto yy641;
+yy648:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x8F) goto yy641;
+ if (yych <= 0xBF) goto yy658;
+ goto yy641;
+yy649:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy641;
+ if (yych <= 0xBF) goto yy658;
+ goto yy641;
+yy650:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy641;
+ if (yych <= 0x8F) goto yy658;
+ goto yy641;
+yy651:
+ yych = *++p;
+yy652:
+ if (yybm[0+yych] & 64) {
+ goto yy651;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy653;
+ if (yych <= '?') goto yy654;
+ } else {
+ if (yych <= 0xDF) goto yy656;
+ if (yych <= 0xE0) goto yy657;
+ goto yy658;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy659;
+ if (yych <= 0xEF) goto yy658;
+ goto yy660;
+ } else {
+ if (yych <= 0xF3) goto yy661;
+ if (yych <= 0xF4) goto yy662;
+ }
+ }
+yy653:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy641;
+ } else {
+ goto yy664;
+ }
+yy654:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy654;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '=') {
+ if (yych <= 0x00) goto yy653;
+ if (yych == '\n') goto yy653;
+ goto yy651;
+ } else {
+ if (yych <= '>') goto yy663;
+ if (yych <= 0x7F) goto yy651;
+ if (yych <= 0xC1) goto yy653;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy657;
+ if (yych == 0xED) goto yy659;
+ goto yy658;
+ } else {
+ if (yych <= 0xF0) goto yy660;
+ if (yych <= 0xF3) goto yy661;
+ if (yych <= 0xF4) goto yy662;
+ goto yy653;
+ }
+ }
+yy656:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy653;
+ if (yych <= 0xBF) goto yy651;
+ goto yy653;
+yy657:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy653;
+ if (yych <= 0xBF) goto yy656;
+ goto yy653;
+yy658:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy653;
+ if (yych <= 0xBF) goto yy656;
+ goto yy653;
+yy659:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy653;
+ if (yych <= 0x9F) goto yy656;
+ goto yy653;
+yy660:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy653;
+ if (yych <= 0xBF) goto yy658;
+ goto yy653;
+yy661:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy653;
+ if (yych <= 0xBF) goto yy658;
+ goto yy653;
+yy662:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy653;
+ if (yych <= 0x8F) goto yy658;
+ goto yy653;
+yy663:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 64) {
+ goto yy651;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy664;
+ if (yych <= '?') goto yy654;
+ } else {
+ if (yych <= 0xDF) goto yy656;
+ if (yych <= 0xE0) goto yy657;
+ goto yy658;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy659;
+ if (yych <= 0xEF) goto yy658;
+ goto yy660;
+ } else {
+ if (yych <= 0xF3) goto yy661;
+ if (yych <= 0xF4) goto yy662;
+ }
+ }
+yy664:
+ { 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 yy670;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy667;
+ if (yych <= '\t') goto yy669;
+ } else {
+ if (yych <= 0x7F) goto yy669;
+ if (yych <= 0xC1) goto yy667;
+ if (yych <= 0xDF) goto yy673;
+ goto yy674;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy676;
+ goto yy675;
+ } else {
+ if (yych <= 0xF0) goto yy677;
+ if (yych <= 0xF3) goto yy678;
+ if (yych <= 0xF4) goto yy679;
+ }
+ }
+yy667:
+ ++p;
+yy668:
+ { return 0; }
+yy669:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy668;
+ if (yych <= '\t') goto yy681;
+ goto yy668;
+ } else {
+ if (yych <= 0x7F) goto yy681;
+ if (yych <= 0xC1) goto yy668;
+ if (yych <= 0xF4) goto yy681;
+ goto yy668;
+ }
+yy670:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 128) {
+ goto yy680;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy672;
+ if (yych <= '>') goto yy670;
+ } else {
+ if (yych <= 0xDF) goto yy683;
+ if (yych <= 0xE0) goto yy684;
+ goto yy685;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy686;
+ if (yych <= 0xEF) goto yy685;
+ goto yy687;
+ } else {
+ if (yych <= 0xF3) goto yy688;
+ if (yych <= 0xF4) goto yy689;
+ }
+ }
+yy672:
+ { return (bufsize_t)(p - start); }
+yy673:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy668;
+ if (yych <= 0xBF) goto yy680;
+ goto yy668;
+yy674:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x9F) goto yy668;
+ if (yych <= 0xBF) goto yy683;
+ goto yy668;
+yy675:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy668;
+ if (yych <= 0xBF) goto yy683;
+ goto yy668;
+yy676:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy668;
+ if (yych <= 0x9F) goto yy683;
+ goto yy668;
+yy677:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x8F) goto yy668;
+ if (yych <= 0xBF) goto yy685;
+ goto yy668;
+yy678:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy668;
+ if (yych <= 0xBF) goto yy685;
+ goto yy668;
+yy679:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy668;
+ if (yych <= 0x8F) goto yy685;
+ goto yy668;
+yy680:
+ yych = *++p;
+yy681:
+ if (yybm[0+yych] & 128) {
+ goto yy680;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy682;
+ if (yych <= '>') goto yy670;
+ } else {
+ if (yych <= 0xDF) goto yy683;
+ if (yych <= 0xE0) goto yy684;
+ goto yy685;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy686;
+ if (yych <= 0xEF) goto yy685;
+ goto yy687;
+ } else {
+ if (yych <= 0xF3) goto yy688;
+ if (yych <= 0xF4) goto yy689;
+ }
+ }
+yy682:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy668;
+ } else {
+ goto yy672;
+ }
+yy683:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy682;
+ if (yych <= 0xBF) goto yy680;
+ goto yy682;
+yy684:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy682;
+ if (yych <= 0xBF) goto yy683;
+ goto yy682;
+yy685:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy682;
+ if (yych <= 0xBF) goto yy683;
+ goto yy682;
+yy686:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy682;
+ if (yych <= 0x9F) goto yy683;
+ goto yy682;
+yy687:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy682;
+ if (yych <= 0xBF) goto yy685;
+ goto yy682;
+yy688:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy682;
+ if (yych <= 0xBF) goto yy685;
+ goto yy682;
+yy689:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy682;
+ if (yych <= 0x8F) goto yy685;
+ goto yy682;
+}
+
+}
+
+// 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 yy692;
+ if (yych != '\n') goto yy694;
+ } else {
+ if (yych <= ']') goto yy695;
+ if (yych <= 0x7F) goto yy694;
+ if (yych >= 0xC2) goto yy696;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy697;
+ if (yych == 0xED) goto yy699;
+ goto yy698;
+ } else {
+ if (yych <= 0xF0) goto yy700;
+ if (yych <= 0xF3) goto yy701;
+ if (yych <= 0xF4) goto yy702;
+ }
+ }
+yy692:
+ ++p;
+yy693:
+ { return 0; }
+yy694:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy693;
+ if (yych <= '\t') goto yy704;
+ goto yy693;
+ } else {
+ if (yych <= 0x7F) goto yy704;
+ if (yych <= 0xC1) goto yy693;
+ if (yych <= 0xF4) goto yy704;
+ goto yy693;
+ }
+yy695:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 128) {
+ goto yy714;
+ }
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto yy693;
+ if (yych <= '\t') goto yy704;
+ goto yy693;
+ } else {
+ if (yych <= 0x7F) goto yy704;
+ if (yych <= 0xC1) goto yy693;
+ if (yych <= 0xF4) goto yy704;
+ goto yy693;
+ }
+yy696:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy693;
+ if (yych <= 0xBF) goto yy703;
+ goto yy693;
+yy697:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x9F) goto yy693;
+ if (yych <= 0xBF) goto yy707;
+ goto yy693;
+yy698:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy693;
+ if (yych <= 0xBF) goto yy707;
+ goto yy693;
+yy699:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy693;
+ if (yych <= 0x9F) goto yy707;
+ goto yy693;
+yy700:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x8F) goto yy693;
+ if (yych <= 0xBF) goto yy709;
+ goto yy693;
+yy701:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy693;
+ if (yych <= 0xBF) goto yy709;
+ goto yy693;
+yy702:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x7F) goto yy693;
+ if (yych <= 0x8F) goto yy709;
+ goto yy693;
+yy703:
+ yych = *++p;
+yy704:
+ if (yybm[0+yych] & 64) {
+ goto yy703;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy705;
+ if (yych <= ']') goto yy706;
+ } else {
+ if (yych <= 0xDF) goto yy707;
+ if (yych <= 0xE0) goto yy708;
+ goto yy709;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy710;
+ if (yych <= 0xEF) goto yy709;
+ goto yy711;
+ } else {
+ if (yych <= 0xF3) goto yy712;
+ if (yych <= 0xF4) goto yy713;
+ }
+ }
+yy705:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy693;
+ } else {
+ goto yy717;
+ }
+yy706:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy703;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy705;
+ if (yych <= ']') goto yy714;
+ goto yy705;
+ } else {
+ if (yych <= 0xDF) goto yy707;
+ if (yych <= 0xE0) goto yy708;
+ goto yy709;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy710;
+ if (yych <= 0xEF) goto yy709;
+ goto yy711;
+ } else {
+ if (yych <= 0xF3) goto yy712;
+ if (yych <= 0xF4) goto yy713;
+ goto yy705;
+ }
+ }
+yy707:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy705;
+ if (yych <= 0xBF) goto yy703;
+ goto yy705;
+yy708:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy705;
+ if (yych <= 0xBF) goto yy707;
+ goto yy705;
+yy709:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy705;
+ if (yych <= 0xBF) goto yy707;
+ goto yy705;
+yy710:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy705;
+ if (yych <= 0x9F) goto yy707;
+ goto yy705;
+yy711:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy705;
+ if (yych <= 0xBF) goto yy709;
+ goto yy705;
+yy712:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy705;
+ if (yych <= 0xBF) goto yy709;
+ goto yy705;
+yy713:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy705;
+ if (yych <= 0x8F) goto yy709;
+ goto yy705;
+yy714:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy714;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '=') {
+ if (yych <= 0x00) goto yy705;
+ if (yych == '\n') goto yy705;
+ goto yy703;
+ } else {
+ if (yych <= '>') goto yy716;
+ if (yych <= 0x7F) goto yy703;
+ if (yych <= 0xC1) goto yy705;
+ goto yy707;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) goto yy708;
+ if (yych == 0xED) goto yy710;
+ goto yy709;
+ } else {
+ if (yych <= 0xF0) goto yy711;
+ if (yych <= 0xF3) goto yy712;
+ if (yych <= 0xF4) goto yy713;
+ goto yy705;
+ }
+ }
+yy716:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 64) {
+ goto yy703;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= '\n') goto yy717;
+ if (yych <= ']') goto yy706;
+ } else {
+ if (yych <= 0xDF) goto yy707;
+ if (yych <= 0xE0) goto yy708;
+ goto yy709;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy710;
+ if (yych <= 0xEF) goto yy709;
+ goto yy711;
+ } else {
+ if (yych <= 0xF3) goto yy712;
+ if (yych <= 0xF4) goto yy713;
+ }
+ }
+yy717:
+ { 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,
+ 208, 80, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 32, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 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 yy722;
+ } else {
+ if (yych <= '\'') goto yy723;
+ if (yych <= '(') goto yy724;
+ }
+ ++p;
+yy721:
+ { return 0; }
+yy722:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x00) goto yy721;
+ if (yych <= 0x7F) goto yy726;
+ if (yych <= 0xC1) goto yy721;
+ if (yych <= 0xF4) goto yy726;
+ goto yy721;
+yy723:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x00) goto yy721;
+ if (yych <= 0x7F) goto yy740;
+ if (yych <= 0xC1) goto yy721;
+ if (yych <= 0xF4) goto yy740;
+ goto yy721;
+yy724:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych <= 0x00) goto yy721;
+ if (yych <= 0x7F) goto yy753;
+ if (yych <= 0xC1) goto yy721;
+ if (yych <= 0xF4) goto yy753;
+ goto yy721;
+yy725:
+ yych = *++p;
+yy726:
+ if (yybm[0+yych] & 16) {
+ goto yy725;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy727;
+ if (yych <= '"') goto yy728;
+ goto yy730;
+ } else {
+ if (yych <= 0xC1) goto yy727;
+ if (yych <= 0xDF) goto yy732;
+ goto yy733;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy735;
+ goto yy734;
+ } else {
+ if (yych <= 0xF0) goto yy736;
+ if (yych <= 0xF3) goto yy737;
+ if (yych <= 0xF4) goto yy738;
+ }
+ }
+yy727:
+ p = marker;
+ if (yyaccept <= 1) {
+ if (yyaccept == 0) {
+ goto yy721;
+ } else {
+ goto yy729;
+ }
+ } else {
+ if (yyaccept == 2) {
+ goto yy742;
+ } else {
+ goto yy755;
+ }
+ }
+yy728:
+ ++p;
+yy729:
+ { return (bufsize_t)(p - start); }
+yy730:
+ yych = *++p;
+ if (yybm[0+yych] & 16) {
+ goto yy725;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy727;
+ if (yych <= '"') goto yy765;
+ goto yy730;
+ } else {
+ if (yych <= 0xC1) goto yy727;
+ if (yych >= 0xE0) goto yy733;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy735;
+ goto yy734;
+ } else {
+ if (yych <= 0xF0) goto yy736;
+ if (yych <= 0xF3) goto yy737;
+ if (yych <= 0xF4) goto yy738;
+ goto yy727;
+ }
+ }
+yy732:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy725;
+ goto yy727;
+yy733:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy727;
+ if (yych <= 0xBF) goto yy732;
+ goto yy727;
+yy734:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy732;
+ goto yy727;
+yy735:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0x9F) goto yy732;
+ goto yy727;
+yy736:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy727;
+ if (yych <= 0xBF) goto yy734;
+ goto yy727;
+yy737:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy734;
+ goto yy727;
+yy738:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0x8F) goto yy734;
+ goto yy727;
+yy739:
+ yych = *++p;
+yy740:
+ if (yybm[0+yych] & 64) {
+ goto yy739;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy727;
+ if (yych >= '(') goto yy743;
+ } else {
+ if (yych <= 0xC1) goto yy727;
+ if (yych <= 0xDF) goto yy745;
+ goto yy746;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy748;
+ goto yy747;
+ } else {
+ if (yych <= 0xF0) goto yy749;
+ if (yych <= 0xF3) goto yy750;
+ if (yych <= 0xF4) goto yy751;
+ goto yy727;
+ }
+ }
+yy741:
+ ++p;
+yy742:
+ { return (bufsize_t)(p - start); }
+yy743:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy739;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy727;
+ if (yych <= '\'') goto yy766;
+ goto yy743;
+ } else {
+ if (yych <= 0xC1) goto yy727;
+ if (yych >= 0xE0) goto yy746;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy748;
+ goto yy747;
+ } else {
+ if (yych <= 0xF0) goto yy749;
+ if (yych <= 0xF3) goto yy750;
+ if (yych <= 0xF4) goto yy751;
+ goto yy727;
+ }
+ }
+yy745:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy739;
+ goto yy727;
+yy746:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy727;
+ if (yych <= 0xBF) goto yy745;
+ goto yy727;
+yy747:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy745;
+ goto yy727;
+yy748:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0x9F) goto yy745;
+ goto yy727;
+yy749:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy727;
+ if (yych <= 0xBF) goto yy747;
+ goto yy727;
+yy750:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy747;
+ goto yy727;
+yy751:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0x8F) goto yy747;
+ goto yy727;
+yy752:
+ yych = *++p;
+yy753:
+ if (yybm[0+yych] & 128) {
+ goto yy752;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy727;
+ if (yych >= '*') goto yy756;
+ } else {
+ if (yych <= 0xC1) goto yy727;
+ if (yych <= 0xDF) goto yy758;
+ goto yy759;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy761;
+ goto yy760;
+ } else {
+ if (yych <= 0xF0) goto yy762;
+ if (yych <= 0xF3) goto yy763;
+ if (yych <= 0xF4) goto yy764;
+ goto yy727;
+ }
+ }
+yy754:
+ ++p;
+yy755:
+ { return (bufsize_t)(p - start); }
+yy756:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy752;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy727;
+ if (yych <= ')') goto yy767;
+ goto yy756;
+ } else {
+ if (yych <= 0xC1) goto yy727;
+ if (yych >= 0xE0) goto yy759;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy761;
+ goto yy760;
+ } else {
+ if (yych <= 0xF0) goto yy762;
+ if (yych <= 0xF3) goto yy763;
+ if (yych <= 0xF4) goto yy764;
+ goto yy727;
+ }
+ }
+yy758:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy752;
+ goto yy727;
+yy759:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy727;
+ if (yych <= 0xBF) goto yy758;
+ goto yy727;
+yy760:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy758;
+ goto yy727;
+yy761:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0x9F) goto yy758;
+ goto yy727;
+yy762:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy727;
+ if (yych <= 0xBF) goto yy760;
+ goto yy727;
+yy763:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0xBF) goto yy760;
+ goto yy727;
+yy764:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy727;
+ if (yych <= 0x8F) goto yy760;
+ goto yy727;
+yy765:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 16) {
+ goto yy725;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy729;
+ if (yych <= '"') goto yy728;
+ goto yy730;
+ } else {
+ if (yych <= 0xC1) goto yy729;
+ if (yych <= 0xDF) goto yy732;
+ goto yy733;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy735;
+ goto yy734;
+ } else {
+ if (yych <= 0xF0) goto yy736;
+ if (yych <= 0xF3) goto yy737;
+ if (yych <= 0xF4) goto yy738;
+ goto yy729;
+ }
+ }
+yy766:
+ yyaccept = 2;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 64) {
+ goto yy739;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy742;
+ if (yych <= '\'') goto yy741;
+ goto yy743;
+ } else {
+ if (yych <= 0xC1) goto yy742;
+ if (yych <= 0xDF) goto yy745;
+ goto yy746;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy748;
+ goto yy747;
+ } else {
+ if (yych <= 0xF0) goto yy749;
+ if (yych <= 0xF3) goto yy750;
+ if (yych <= 0xF4) goto yy751;
+ goto yy742;
+ }
+ }
+yy767:
+ yyaccept = 3;
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 128) {
+ goto yy752;
+ }
+ if (yych <= 0xE0) {
+ if (yych <= '\\') {
+ if (yych <= 0x00) goto yy755;
+ if (yych <= ')') goto yy754;
+ goto yy756;
+ } else {
+ if (yych <= 0xC1) goto yy755;
+ if (yych <= 0xDF) goto yy758;
+ goto yy759;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych == 0xED) goto yy761;
+ goto yy760;
+ } else {
+ if (yych <= 0xF0) goto yy762;
+ if (yych <= 0xF3) goto yy763;
+ if (yych <= 0xF4) goto yy764;
+ goto yy755;
+ }
+ }
+}
+
+}
+
+// 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 yy772;
+ }
+ ++p;
+ { return 0; }
+yy772:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy772;
+ }
+ { 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 yy779;
+ ++p;
+yy778:
+ { return 0; }
+yy779:
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 128) {
+ goto yy780;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy778;
+ if (yych <= '\n') goto yy783;
+ goto yy778;
+ } else {
+ if (yych <= '\r') goto yy783;
+ if (yych == '#') goto yy784;
+ goto yy778;
+ }
+yy780:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy780;
+ }
+yy782:
+ { return (bufsize_t)(p - start); }
+yy783:
+ ++p;
+ goto yy782;
+yy784:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy780;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy785;
+ if (yych <= '\n') goto yy783;
+ } else {
+ if (yych <= '\r') goto yy783;
+ if (yych == '#') goto yy786;
+ }
+yy785:
+ p = marker;
+ goto yy778;
+yy786:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy780;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy785;
+ if (yych <= '\n') goto yy783;
+ goto yy785;
+ } else {
+ if (yych <= '\r') goto yy783;
+ if (yych != '#') goto yy785;
+ }
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy780;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy785;
+ if (yych <= '\n') goto yy783;
+ goto yy785;
+ } else {
+ if (yych <= '\r') goto yy783;
+ if (yych != '#') goto yy785;
+ }
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy780;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy785;
+ if (yych <= '\n') goto yy783;
+ goto yy785;
+ } else {
+ if (yych <= '\r') goto yy783;
+ if (yych != '#') goto yy785;
+ }
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy780;
+ }
+ if (yych <= 0x08) goto yy785;
+ if (yych <= '\n') goto yy783;
+ if (yych == '\r') goto yy783;
+ goto yy785;
+}
+
+}
+
+// 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 yy794;
+ if (yych == '=') goto yy795;
+ ++p;
+yy793:
+ { return 0; }
+yy794:
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 64) {
+ goto yy801;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy793;
+ if (yych <= '\n') goto yy797;
+ goto yy793;
+ } else {
+ if (yych <= '\r') goto yy797;
+ if (yych == ' ') goto yy797;
+ goto yy793;
+ }
+yy795:
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 128) {
+ goto yy807;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy793;
+ if (yych <= '\n') goto yy804;
+ goto yy793;
+ } else {
+ if (yych <= '\r') goto yy804;
+ if (yych == ' ') goto yy804;
+ goto yy793;
+ }
+yy796:
+ yych = *++p;
+yy797:
+ if (yybm[0+yych] & 32) {
+ goto yy796;
+ }
+ if (yych <= 0x08) goto yy798;
+ if (yych <= '\n') goto yy799;
+ if (yych == '\r') goto yy799;
+yy798:
+ p = marker;
+ goto yy793;
+yy799:
+ ++p;
+ { return 2; }
+yy801:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy796;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy798;
+ if (yych <= '\n') goto yy799;
+ goto yy798;
+ } else {
+ if (yych <= '\r') goto yy799;
+ if (yych == '-') goto yy801;
+ goto yy798;
+ }
+yy803:
+ yych = *++p;
+yy804:
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy798;
+ if (yych <= '\t') goto yy803;
+ if (yych >= '\v') goto yy798;
+ } else {
+ if (yych <= '\r') goto yy805;
+ if (yych == ' ') goto yy803;
+ goto yy798;
+ }
+yy805:
+ ++p;
+ { return 1; }
+yy807:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy807;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy798;
+ if (yych <= '\t') goto yy803;
+ if (yych <= '\n') goto yy805;
+ goto yy798;
+ } else {
+ if (yych <= '\r') goto yy805;
+ if (yych == ' ') goto yy803;
+ goto yy798;
+ }
+}
+
+}
+
+// Scan a thematic break line: "...three or more hyphens, asterisks,
+// or underscores on a line by themselves. If you wish, you may use
+// spaces between the hyphens or asterisks."
+bufsize_t _scan_thematic_break(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+
+{
+ unsigned char yych;
+ static const unsigned char yybm[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 240, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 240, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32, 0, 0, 64, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 128,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ yych = *p;
+ if (yych <= ',') {
+ if (yych == '*') goto yy813;
+ } else {
+ if (yych <= '-') goto yy814;
+ if (yych == '_') goto yy815;
+ }
+ ++p;
+yy812:
+ { return 0; }
+yy813:
+ yych = *(marker = ++p);
+ if (yybm[0+yych] & 16) {
+ goto yy816;
+ }
+ if (yych == '*') goto yy819;
+ goto yy812;
+yy814:
+ yych = *(marker = ++p);
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy821;
+ goto yy812;
+ } else {
+ if (yych <= ' ') goto yy821;
+ if (yych == '-') goto yy823;
+ goto yy812;
+ }
+yy815:
+ yych = *(marker = ++p);
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy825;
+ goto yy812;
+ } else {
+ if (yych <= ' ') goto yy825;
+ if (yych == '_') goto yy827;
+ goto yy812;
+ }
+yy816:
+ yych = *++p;
+ if (yybm[0+yych] & 16) {
+ goto yy816;
+ }
+ if (yych == '*') goto yy819;
+yy818:
+ p = marker;
+ goto yy812;
+yy819:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy819;
+ goto yy818;
+ } else {
+ if (yych <= ' ') goto yy819;
+ if (yych == '*') goto yy829;
+ goto yy818;
+ }
+yy821:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy821;
+ goto yy818;
+ } else {
+ if (yych <= ' ') goto yy821;
+ if (yych != '-') goto yy818;
+ }
+yy823:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy823;
+ goto yy818;
+ } else {
+ if (yych <= ' ') goto yy823;
+ if (yych == '-') goto yy831;
+ goto yy818;
+ }
+yy825:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy825;
+ goto yy818;
+ } else {
+ if (yych <= ' ') goto yy825;
+ if (yych != '_') goto yy818;
+ }
+yy827:
+ yych = *++p;
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy827;
+ goto yy818;
+ } else {
+ if (yych <= ' ') goto yy827;
+ if (yych == '_') goto yy833;
+ goto yy818;
+ }
+yy829:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy829;
+ }
+ if (yych <= 0x08) goto yy818;
+ if (yych <= '\n') goto yy835;
+ if (yych == '\r') goto yy835;
+ goto yy818;
+yy831:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy831;
+ }
+ if (yych <= 0x08) goto yy818;
+ if (yych <= '\n') goto yy837;
+ if (yych == '\r') goto yy837;
+ goto yy818;
+yy833:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy833;
+ }
+ if (yych <= 0x08) goto yy818;
+ if (yych <= '\n') goto yy839;
+ if (yych == '\r') goto yy839;
+ goto yy818;
+yy835:
+ ++p;
+ { return (bufsize_t)(p - start); }
+yy837:
+ ++p;
+ { return (bufsize_t)(p - start); }
+yy839:
+ ++p;
+ { return (bufsize_t)(p - start); }
+}
+
+}
+
+// Scan an opening code fence.
+bufsize_t _scan_open_code_fence(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ 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, 96, 192,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 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 yy845;
+ if (yych == '~') goto yy846;
+ ++p;
+yy844:
+ { return 0; }
+yy845:
+ yych = *(marker = ++p);
+ if (yych == '`') goto yy847;
+ goto yy844;
+yy846:
+ yych = *(marker = ++p);
+ if (yych == '~') goto yy849;
+ goto yy844;
+yy847:
+ yych = *++p;
+ if (yybm[0+yych] & 16) {
+ goto yy850;
+ }
+yy848:
+ p = marker;
+ goto yy844;
+yy849:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy852;
+ }
+ goto yy848;
+yy850:
+ yych = *++p;
+ if (yybm[0+yych] & 16) {
+ goto yy850;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '\f') {
+ if (yych <= 0x00) goto yy848;
+ if (yych == '\n') {
+ marker = p;
+ goto yy856;
+ }
+ marker = p;
+ goto yy854;
+ } else {
+ if (yych <= '\r') {
+ marker = p;
+ goto yy856;
+ }
+ if (yych <= 0x7F) {
+ marker = p;
+ goto yy854;
+ }
+ if (yych <= 0xC1) goto yy848;
+ marker = p;
+ goto yy858;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) {
+ marker = p;
+ goto yy859;
+ }
+ if (yych == 0xED) {
+ marker = p;
+ goto yy861;
+ }
+ marker = p;
+ goto yy860;
+ } else {
+ if (yych <= 0xF0) {
+ marker = p;
+ goto yy862;
+ }
+ if (yych <= 0xF3) {
+ marker = p;
+ goto yy863;
+ }
+ if (yych <= 0xF4) {
+ marker = p;
+ goto yy864;
+ }
+ goto yy848;
+ }
+ }
+yy852:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy852;
+ }
+ if (yych <= 0xDF) {
+ if (yych <= '\f') {
+ if (yych <= 0x00) goto yy848;
+ if (yych == '\n') {
+ marker = p;
+ goto yy867;
+ }
+ marker = p;
+ goto yy865;
+ } else {
+ if (yych <= '\r') {
+ marker = p;
+ goto yy867;
+ }
+ if (yych <= 0x7F) {
+ marker = p;
+ goto yy865;
+ }
+ if (yych <= 0xC1) goto yy848;
+ marker = p;
+ goto yy869;
+ }
+ } else {
+ if (yych <= 0xEF) {
+ if (yych <= 0xE0) {
+ marker = p;
+ goto yy870;
+ }
+ if (yych == 0xED) {
+ marker = p;
+ goto yy872;
+ }
+ marker = p;
+ goto yy871;
+ } else {
+ if (yych <= 0xF0) {
+ marker = p;
+ goto yy873;
+ }
+ if (yych <= 0xF3) {
+ marker = p;
+ goto yy874;
+ }
+ if (yych <= 0xF4) {
+ marker = p;
+ goto yy875;
+ }
+ goto yy848;
+ }
+ }
+yy854:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy854;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy848;
+ if (yych >= 0x0E) goto yy848;
+ } else {
+ if (yych <= 0xDF) goto yy858;
+ if (yych <= 0xE0) goto yy859;
+ goto yy860;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy861;
+ if (yych <= 0xEF) goto yy860;
+ goto yy862;
+ } else {
+ if (yych <= 0xF3) goto yy863;
+ if (yych <= 0xF4) goto yy864;
+ goto yy848;
+ }
+ }
+yy856:
+ ++p;
+ p = marker;
+ { return (bufsize_t)(p - start); }
+yy858:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0xBF) goto yy854;
+ goto yy848;
+yy859:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy848;
+ if (yych <= 0xBF) goto yy858;
+ goto yy848;
+yy860:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0xBF) goto yy858;
+ goto yy848;
+yy861:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0x9F) goto yy858;
+ goto yy848;
+yy862:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy848;
+ if (yych <= 0xBF) goto yy860;
+ goto yy848;
+yy863:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0xBF) goto yy860;
+ goto yy848;
+yy864:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0x8F) goto yy860;
+ goto yy848;
+yy865:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy865;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= 0x00) goto yy848;
+ if (yych >= 0x0E) goto yy848;
+ } else {
+ if (yych <= 0xDF) goto yy869;
+ if (yych <= 0xE0) goto yy870;
+ goto yy871;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy872;
+ if (yych <= 0xEF) goto yy871;
+ goto yy873;
+ } else {
+ if (yych <= 0xF3) goto yy874;
+ if (yych <= 0xF4) goto yy875;
+ goto yy848;
+ }
+ }
+yy867:
+ ++p;
+ p = marker;
+ { return (bufsize_t)(p - start); }
+yy869:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0xBF) goto yy865;
+ goto yy848;
+yy870:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy848;
+ if (yych <= 0xBF) goto yy869;
+ goto yy848;
+yy871:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0xBF) goto yy869;
+ goto yy848;
+yy872:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0x9F) goto yy869;
+ goto yy848;
+yy873:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy848;
+ if (yych <= 0xBF) goto yy871;
+ goto yy848;
+yy874:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0xBF) goto yy871;
+ goto yy848;
+yy875:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy848;
+ if (yych <= 0x8F) goto yy871;
+ goto yy848;
+}
+
+}
+
+// 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 yy880;
+ if (yych == '~') goto yy881;
+ ++p;
+yy879:
+ { return 0; }
+yy880:
+ yych = *(marker = ++p);
+ if (yych == '`') goto yy882;
+ goto yy879;
+yy881:
+ yych = *(marker = ++p);
+ if (yych == '~') goto yy884;
+ goto yy879;
+yy882:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy885;
+ }
+yy883:
+ p = marker;
+ goto yy879;
+yy884:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy887;
+ }
+ goto yy883;
+yy885:
+ yych = *++p;
+ if (yybm[0+yych] & 32) {
+ goto yy885;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy883;
+ if (yych <= '\t') {
+ marker = p;
+ goto yy889;
+ }
+ if (yych <= '\n') {
+ marker = p;
+ goto yy891;
+ }
+ goto yy883;
+ } else {
+ if (yych <= '\r') {
+ marker = p;
+ goto yy891;
+ }
+ if (yych == ' ') {
+ marker = p;
+ goto yy889;
+ }
+ goto yy883;
+ }
+yy887:
+ yych = *++p;
+ if (yybm[0+yych] & 64) {
+ goto yy887;
+ }
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy883;
+ if (yych <= '\t') {
+ marker = p;
+ goto yy893;
+ }
+ if (yych <= '\n') {
+ marker = p;
+ goto yy895;
+ }
+ goto yy883;
+ } else {
+ if (yych <= '\r') {
+ marker = p;
+ goto yy895;
+ }
+ if (yych == ' ') {
+ marker = p;
+ goto yy893;
+ }
+ goto yy883;
+ }
+yy889:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy889;
+ }
+ if (yych <= 0x08) goto yy883;
+ if (yych <= '\n') goto yy891;
+ if (yych != '\r') goto yy883;
+yy891:
+ ++p;
+ p = marker;
+ { return (bufsize_t)(p - start); }
+yy893:
+ yych = *++p;
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy883;
+ if (yych <= '\t') goto yy893;
+ if (yych >= '\v') goto yy883;
+ } else {
+ if (yych <= '\r') goto yy895;
+ if (yych == ' ') goto yy893;
+ goto yy883;
+ }
+yy895:
+ ++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 yy901;
+ ++p;
+yy900:
+ { return 0; }
+yy901:
+ yych = *(marker = ++p);
+ if (yych <= '@') {
+ if (yych != '#') goto yy900;
+ } else {
+ if (yych <= 'Z') goto yy904;
+ if (yych <= '`') goto yy900;
+ if (yych <= 'z') goto yy904;
+ goto yy900;
+ }
+ yych = *++p;
+ if (yych <= 'W') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy905;
+ } else {
+ if (yych <= 'X') goto yy906;
+ if (yych == 'x') goto yy906;
+ }
+yy903:
+ p = marker;
+ goto yy900;
+yy904:
+ yych = *++p;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy907;
+ goto yy903;
+ } else {
+ if (yych <= 'Z') goto yy907;
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy907;
+ goto yy903;
+ }
+yy905:
+ yych = *++p;
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy908;
+ if (yych == ';') goto yy909;
+ goto yy903;
+yy906:
+ yych = *++p;
+ if (yych <= '@') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy911;
+ goto yy903;
+ } else {
+ if (yych <= 'F') goto yy911;
+ if (yych <= '`') goto yy903;
+ if (yych <= 'f') goto yy911;
+ goto yy903;
+ }
+yy907:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy912;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ goto yy912;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy912;
+ goto yy903;
+ }
+ }
+yy908:
+ yych = *++p;
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy913;
+ if (yych != ';') goto yy903;
+yy909:
+ ++p;
+ { return (bufsize_t)(p - start); }
+yy911:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy914;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'F') {
+ if (yych <= '@') goto yy903;
+ goto yy914;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'f') goto yy914;
+ goto yy903;
+ }
+ }
+yy912:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy915;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ goto yy915;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy915;
+ goto yy903;
+ }
+ }
+yy913:
+ yych = *++p;
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy916;
+ if (yych == ';') goto yy909;
+ goto yy903;
+yy914:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy917;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'F') {
+ if (yych <= '@') goto yy903;
+ goto yy917;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'f') goto yy917;
+ goto yy903;
+ }
+ }
+yy915:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy918;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ goto yy918;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy918;
+ goto yy903;
+ }
+ }
+yy916:
+ yych = *++p;
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy919;
+ if (yych == ';') goto yy909;
+ goto yy903;
+yy917:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy920;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'F') {
+ if (yych <= '@') goto yy903;
+ goto yy920;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'f') goto yy920;
+ goto yy903;
+ }
+ }
+yy918:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy921;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ goto yy921;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy921;
+ goto yy903;
+ }
+ }
+yy919:
+ yych = *++p;
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy922;
+ if (yych == ';') goto yy909;
+ goto yy903;
+yy920:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy923;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'F') {
+ if (yych <= '@') goto yy903;
+ goto yy923;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'f') goto yy923;
+ goto yy903;
+ }
+ }
+yy921:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy924;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ goto yy924;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy924;
+ goto yy903;
+ }
+ }
+yy922:
+ yych = *++p;
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy925;
+ if (yych == ';') goto yy909;
+ goto yy903;
+yy923:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy925;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'F') {
+ if (yych <= '@') goto yy903;
+ goto yy925;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'f') goto yy925;
+ goto yy903;
+ }
+ }
+yy924:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy926;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ goto yy926;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy926;
+ goto yy903;
+ }
+ }
+yy925:
+ yych = *++p;
+ if (yych == ';') goto yy909;
+ goto yy903;
+yy926:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy927;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy927:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy928;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy928:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy929;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy929:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy930;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy930:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy931;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy931:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy932;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy932:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy933;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy933:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy934;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy934:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy935;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy935:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy936;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy936:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy937;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy937:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy938;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy938:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy939;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy939:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy940;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy940:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy941;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy941:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy942;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy942:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy943;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy943:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy944;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy944:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy945;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy945:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy946;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy946:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy947;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy947:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy948;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy948:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy949;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych >= '{') goto yy903;
+ }
+ }
+yy949:
+ yych = *++p;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy903;
+ if (yych <= '9') goto yy925;
+ if (yych <= ':') goto yy903;
+ goto yy909;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy903;
+ goto yy925;
+ } else {
+ if (yych <= '`') goto yy903;
+ if (yych <= 'z') goto yy925;
+ goto yy903;
+ }
+ }
+}
+
+}
+
+// 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 yy954;
+ if (yych >= 'F') goto yy955;
+ } else {
+ if (yych == 'J') goto yy956;
+ if (yych >= 'V') goto yy957;
+ }
+ } else {
+ if (yych <= 'f') {
+ if (yych == 'd') goto yy954;
+ if (yych >= 'f') goto yy955;
+ } else {
+ if (yych <= 'j') {
+ if (yych >= 'j') goto yy956;
+ } else {
+ if (yych == 'v') goto yy957;
+ }
+ }
+ }
+ ++p;
+yy953:
+ { return 0; }
+yy954:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych == 'A') goto yy958;
+ if (yych == 'a') goto yy958;
+ goto yy953;
+yy955:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych == 'I') goto yy960;
+ if (yych == 'i') goto yy960;
+ goto yy953;
+yy956:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych == 'A') goto yy961;
+ if (yych == 'a') goto yy961;
+ goto yy953;
+yy957:
+ yyaccept = 0;
+ yych = *(marker = ++p);
+ if (yych == 'B') goto yy962;
+ if (yych == 'b') goto yy962;
+ goto yy953;
+yy958:
+ yych = *++p;
+ if (yych == 'T') goto yy963;
+ if (yych == 't') goto yy963;
+yy959:
+ p = marker;
+ if (yyaccept == 0) {
+ goto yy953;
+ } else {
+ goto yy971;
+ }
+yy960:
+ yych = *++p;
+ if (yych == 'L') goto yy964;
+ if (yych == 'l') goto yy964;
+ goto yy959;
+yy961:
+ yych = *++p;
+ if (yych == 'V') goto yy965;
+ if (yych == 'v') goto yy965;
+ goto yy959;
+yy962:
+ yych = *++p;
+ if (yych == 'S') goto yy966;
+ if (yych == 's') goto yy966;
+ goto yy959;
+yy963:
+ yych = *++p;
+ if (yych == 'A') goto yy967;
+ if (yych == 'a') goto yy967;
+ goto yy959;
+yy964:
+ yych = *++p;
+ if (yych == 'E') goto yy968;
+ if (yych == 'e') goto yy968;
+ goto yy959;
+yy965:
+ yych = *++p;
+ if (yych == 'A') goto yy962;
+ if (yych == 'a') goto yy962;
+ goto yy959;
+yy966:
+ yych = *++p;
+ if (yych == 'C') goto yy969;
+ if (yych == 'c') goto yy969;
+ goto yy959;
+yy967:
+ yych = *++p;
+ if (yych == ':') goto yy970;
+ goto yy959;
+yy968:
+ yych = *++p;
+ if (yych == ':') goto yy972;
+ goto yy959;
+yy969:
+ yych = *++p;
+ if (yych == 'R') goto yy973;
+ if (yych == 'r') goto yy973;
+ goto yy959;
+yy970:
+ yyaccept = 1;
+ yych = *(marker = ++p);
+ if (yych == 'I') goto yy974;
+ if (yych == 'i') goto yy974;
+yy971:
+ { return (bufsize_t)(p - start); }
+yy972:
+ ++p;
+ goto yy971;
+yy973:
+ yych = *++p;
+ if (yych == 'I') goto yy975;
+ if (yych == 'i') goto yy975;
+ goto yy959;
+yy974:
+ yych = *++p;
+ if (yych == 'M') goto yy976;
+ if (yych == 'm') goto yy976;
+ goto yy959;
+yy975:
+ yych = *++p;
+ if (yych == 'P') goto yy977;
+ if (yych == 'p') goto yy977;
+ goto yy959;
+yy976:
+ yych = *++p;
+ if (yych == 'A') goto yy978;
+ if (yych == 'a') goto yy978;
+ goto yy959;
+yy977:
+ yych = *++p;
+ if (yych == 'T') goto yy968;
+ if (yych == 't') goto yy968;
+ goto yy959;
+yy978:
+ yych = *++p;
+ if (yych == 'G') goto yy979;
+ if (yych != 'g') goto yy959;
+yy979:
+ yych = *++p;
+ if (yych == 'E') goto yy980;
+ if (yych != 'e') goto yy959;
+yy980:
+ yych = *++p;
+ if (yych != '/') goto yy959;
+ yych = *++p;
+ if (yych <= 'W') {
+ if (yych <= 'J') {
+ if (yych == 'G') goto yy982;
+ if (yych <= 'I') goto yy959;
+ goto yy983;
+ } else {
+ if (yych == 'P') goto yy984;
+ if (yych <= 'V') goto yy959;
+ goto yy985;
+ }
+ } else {
+ if (yych <= 'j') {
+ if (yych == 'g') goto yy982;
+ if (yych <= 'i') goto yy959;
+ goto yy983;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy959;
+ goto yy984;
+ } else {
+ if (yych == 'w') goto yy985;
+ goto yy959;
+ }
+ }
+ }
+yy982:
+ yych = *++p;
+ if (yych == 'I') goto yy986;
+ if (yych == 'i') goto yy986;
+ goto yy959;
+yy983:
+ yych = *++p;
+ if (yych == 'P') goto yy987;
+ if (yych == 'p') goto yy987;
+ goto yy959;
+yy984:
+ yych = *++p;
+ if (yych == 'N') goto yy988;
+ if (yych == 'n') goto yy988;
+ goto yy959;
+yy985:
+ yych = *++p;
+ if (yych == 'E') goto yy989;
+ if (yych == 'e') goto yy989;
+ goto yy959;
+yy986:
+ yych = *++p;
+ if (yych == 'F') goto yy990;
+ if (yych == 'f') goto yy990;
+ goto yy959;
+yy987:
+ yych = *++p;
+ if (yych == 'E') goto yy988;
+ if (yych != 'e') goto yy959;
+yy988:
+ yych = *++p;
+ if (yych == 'G') goto yy990;
+ if (yych == 'g') goto yy990;
+ goto yy959;
+yy989:
+ yych = *++p;
+ if (yych == 'B') goto yy992;
+ if (yych == 'b') goto yy992;
+ goto yy959;
+yy990:
+ ++p;
+ { return 0; }
+yy992:
+ yych = *++p;
+ if (yych == 'P') goto yy990;
+ if (yych == 'p') goto yy990;
+ goto yy959;
+}
+
+}
+
+// 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 yy997;
+ ++p;
+yy996:
+ { return 0; }
+yy997:
+ yych = *(marker = ++p);
+ if (yych != '^') goto yy996;
+ yych = *++p;
+ if (yych != ']') goto yy1001;
+yy999:
+ p = marker;
+ goto yy996;
+yy1000:
+ yych = *++p;
+yy1001:
+ if (yybm[0+yych] & 64) {
+ goto yy1000;
+ }
+ if (yych <= 0xEC) {
+ if (yych <= 0xC1) {
+ if (yych <= ' ') goto yy999;
+ if (yych <= ']') goto yy1009;
+ goto yy999;
+ } else {
+ if (yych <= 0xDF) goto yy1002;
+ if (yych <= 0xE0) goto yy1003;
+ goto yy1004;
+ }
+ } else {
+ if (yych <= 0xF0) {
+ if (yych <= 0xED) goto yy1005;
+ if (yych <= 0xEF) goto yy1004;
+ goto yy1006;
+ } else {
+ if (yych <= 0xF3) goto yy1007;
+ if (yych <= 0xF4) goto yy1008;
+ goto yy999;
+ }
+ }
+yy1002:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy999;
+ if (yych <= 0xBF) goto yy1000;
+ goto yy999;
+yy1003:
+ yych = *++p;
+ if (yych <= 0x9F) goto yy999;
+ if (yych <= 0xBF) goto yy1002;
+ goto yy999;
+yy1004:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy999;
+ if (yych <= 0xBF) goto yy1002;
+ goto yy999;
+yy1005:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy999;
+ if (yych <= 0x9F) goto yy1002;
+ goto yy999;
+yy1006:
+ yych = *++p;
+ if (yych <= 0x8F) goto yy999;
+ if (yych <= 0xBF) goto yy1004;
+ goto yy999;
+yy1007:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy999;
+ if (yych <= 0xBF) goto yy1004;
+ goto yy999;
+yy1008:
+ yych = *++p;
+ if (yych <= 0x7F) goto yy999;
+ if (yych <= 0x8F) goto yy1004;
+ goto yy999;
+yy1009:
+ yych = *++p;
+ if (yych != ':') goto yy999;
+yy1010:
+ yych = *++p;
+ if (yybm[0+yych] & 128) {
+ goto yy1010;
+ }
+ { return (bufsize_t)(p - start); }
+}
+
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.h
new file mode 100644
index 000000000000..1e5c8ccd800a
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.h
@@ -0,0 +1,64 @@
+#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_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_thematic_break(const unsigned char *p);
+bufsize_t _scan_open_code_fence(const unsigned char *p);
+bufsize_t _scan_close_code_fence(const unsigned char *p);
+bufsize_t _scan_entity(const unsigned char *p);
+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_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_thematic_break(c, n) _scan_at(&_scan_thematic_break, c, n)
+#define scan_open_code_fence(c, n) _scan_at(&_scan_open_code_fence, c, n)
+#define scan_close_code_fence(c, n) _scan_at(&_scan_close_code_fence, c, n)
+#define scan_entity(c, n) _scan_at(&_scan_entity, c, n)
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.o
new file mode 100644
index 000000000000..b2136de58e97
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.re b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.re
new file mode 100644
index 000000000000..5af8b7b1886c
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/scanners.re
@@ -0,0 +1,341 @@
+#include
+#include "chunk.h"
+#include "scanners.h"
+
+bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset)
+{
+ bufsize_t res;
+ unsigned char *ptr = (unsigned char *)c->data;
+
+ 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;
+}
+
+/*!re2c
+ re2c:define:YYCTYPE = "unsigned char";
+ re2c:define:YYCURSOR = p;
+ re2c:define:YYMARKER = marker;
+ re2c:define:YYCTXMARKER = marker;
+ re2c:yyfill:enable = 0;
+
+ wordchar = [^\x00-\x20];
+
+ spacechar = [ \t\v\f\r\n];
+
+ reg_char = [^\\()\x00-\x20];
+
+ escaped_char = [\\][!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-];
+
+ tagname = [A-Za-z][A-Za-z0-9-]*;
+
+ blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'head'|'header'|'hr'|'html'|'iframe'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul';
+
+ attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*;
+
+ unquotedvalue = [^"'=<>`\x00]+;
+ singlequotedvalue = ['][^'\x00]*['];
+ doublequotedvalue = ["][^"\x00]*["];
+
+ attributevalue = unquotedvalue | singlequotedvalue | doublequotedvalue;
+
+ attributevaluespec = spacechar* [=] spacechar* attributevalue;
+
+ attribute = spacechar+ attributename attributevaluespec?;
+
+ opentag = tagname attribute* spacechar* [/]? [>];
+ closetag = [/] tagname spacechar* [>];
+
+ htmlcomment = "!---->" | ("!--" ([-]? [^\x00>-]) ([-]? [^\x00-])* "-->");
+
+ processinginstruction = "?" ([^?>\x00]+ | [?][^>\x00] | [>])* "?>";
+
+ declaration = "!" [A-Z]+ spacechar+ [^>\x00]* ">";
+
+ cdata = "![CDATA[" ([^\]\x00]+ | "]" [^\]\x00] | "]]" [^>\x00])* "]]>";
+
+ htmltag = opentag | closetag | htmlcomment | processinginstruction |
+ declaration | cdata;
+
+ in_parens_nosp = [(] (reg_char|escaped_char|[\\])* [)];
+
+ in_double_quotes = ["] (escaped_char|[^"\x00])* ["];
+ in_single_quotes = ['] (escaped_char|[^'\x00])* ['];
+ in_parens = [(] (escaped_char|[^)\x00])* [)];
+
+ scheme = [A-Za-z][A-Za-z0-9.+-]{1,31};
+*/
+
+// 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;
+/*!re2c
+ scheme [:] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// 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;
+/*!re2c
+ scheme [:][^\x00-\x20<>]*[>] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// 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;
+/*!re2c
+ [a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+
+ [@]
+ [a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?
+ ([.][a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*
+ [>] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// 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;
+/*!re2c
+ htmltag { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// 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;
+/*!re2c
+ [^\n\x00]+ [>] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Try to match an HTML block tag start line, returning
+// an integer code for the type of block (1-6, matching the spec).
+// #7 is handled by a separate function, below.
+bufsize_t _scan_html_block_start(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+/*!re2c
+ [<] ('script'|'pre'|'style') (spacechar | [>]) { return 1; }
+ '' { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Try to match an HTML block end line of type 3
+bufsize_t _scan_html_block_end_3(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ [^\n\x00]* '?>' { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Try to match an HTML block end line of type 4
+bufsize_t _scan_html_block_end_4(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ [^\n\x00]* '>' { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Try to match an HTML block end line of type 5
+bufsize_t _scan_html_block_end_5(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ [^\n\x00]* ']]>' { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Try to match a link title (in single quotes, in double quotes, or
+// in parentheses), returning number of chars matched. Allow one
+// level of internal nesting (quotes within quotes).
+bufsize_t _scan_link_title(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ ["] (escaped_char|[^"\x00])* ["] { return (bufsize_t)(p - start); }
+ ['] (escaped_char|[^'\x00])* ['] { return (bufsize_t)(p - start); }
+ [(] (escaped_char|[^)\x00])* [)] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Match space characters, including newlines.
+bufsize_t _scan_spacechars(const unsigned char *p)
+{
+ const unsigned char *start = p; \
+/*!re2c
+ [ \t\v\f\r\n]+ { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Match ATX heading start.
+bufsize_t _scan_atx_heading_start(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ [#]{1,6} ([ \t]+|[\r\n]) { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// 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;
+/*!re2c
+ [=]+ [ \t]* [\r\n] { return 1; }
+ [-]+ [ \t]* [\r\n] { return 2; }
+ * { return 0; }
+*/
+}
+
+// Scan a thematic break line: "...three or more hyphens, asterisks,
+// or underscores on a line by themselves. If you wish, you may use
+// spaces between the hyphens or asterisks."
+bufsize_t _scan_thematic_break(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ ([*][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); }
+ ([_][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); }
+ ([-][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Scan an opening code fence.
+bufsize_t _scan_open_code_fence(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ [`]{3,} / [^`\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); }
+ [~]{3,} / [^~\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// 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;
+/*!re2c
+ [`]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); }
+ [~]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Scans an entity.
+// Returns number of chars matched.
+bufsize_t _scan_entity(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ [&] ([#] ([Xx][A-Fa-f0-9]{1,8}|[0-9]{1,8}) |[A-Za-z][A-Za-z0-9]{1,31} ) [;]
+ { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// 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;
+/*!re2c
+ 'data:image/' ('png'|'gif'|'jpeg'|'webp') { return 0; }
+ 'javascript:' | 'vbscript:' | 'file:' | 'data:' { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
+
+// Scans a footnote definition opening.
+bufsize_t _scan_footnote_definition(const unsigned char *p)
+{
+ const unsigned char *marker = NULL;
+ const unsigned char *start = p;
+/*!re2c
+ '[^' ([^\] \r\n\x00\t]+) ']:' [ \t]* { return (bufsize_t)(p - start); }
+ * { return 0; }
+*/
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.c
new file mode 100644
index 000000000000..87a2ac7c3c19
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.c
@@ -0,0 +1,164 @@
+#include "strikethrough.h"
+#include
+#include
+
+cmark_node_type CMARK_NODE_STRIKETHROUGH;
+
+static cmark_node *match(cmark_syntax_extension *self, cmark_parser *parser,
+ cmark_node *parent, unsigned char character,
+ cmark_inline_parser *inline_parser) {
+ cmark_node *res = NULL;
+ int left_flanking, right_flanking, punct_before, punct_after, delims;
+ char buffer[101];
+
+ if (character != '~')
+ return NULL;
+
+ delims = cmark_inline_parser_scan_delimiters(
+ inline_parser, sizeof(buffer) - 1, '~',
+ &left_flanking,
+ &right_flanking, &punct_before, &punct_after);
+
+ memset(buffer, '~', delims);
+ buffer[delims] = 0;
+
+ res = cmark_node_new_with_mem(CMARK_NODE_TEXT, parser->mem);
+ cmark_node_set_literal(res, buffer);
+ res->start_line = res->end_line = cmark_inline_parser_get_line(inline_parser);
+ res->start_column = cmark_inline_parser_get_column(inline_parser) - delims;
+
+ if ((left_flanking || right_flanking) &&
+ (!(parser->options & CMARK_OPT_STRIKETHROUGH_DOUBLE_TILDE) || delims == 2)) {
+ cmark_inline_parser_push_delimiter(inline_parser, character, left_flanking,
+ right_flanking, res);
+ }
+
+ return res;
+}
+
+static delimiter *insert(cmark_syntax_extension *self, cmark_parser *parser,
+ cmark_inline_parser *inline_parser, delimiter *opener,
+ delimiter *closer) {
+ cmark_node *strikethrough;
+ cmark_node *tmp, *next;
+ delimiter *delim, *tmp_delim;
+ delimiter *res = closer->next;
+
+ strikethrough = opener->inl_text;
+
+ if (!cmark_node_set_type(strikethrough, CMARK_NODE_STRIKETHROUGH))
+ goto done;
+
+ cmark_node_set_syntax_extension(strikethrough, self);
+
+ tmp = cmark_node_next(opener->inl_text);
+
+ while (tmp) {
+ if (tmp == closer->inl_text)
+ break;
+ next = cmark_node_next(tmp);
+ cmark_node_append_child(strikethrough, tmp);
+ tmp = next;
+ }
+
+ strikethrough->end_column = closer->inl_text->start_column + closer->inl_text->as.literal.len - 1;
+ cmark_node_free(closer->inl_text);
+
+ delim = closer;
+ while (delim != NULL && delim != opener) {
+ tmp_delim = delim->previous;
+ cmark_inline_parser_remove_delimiter(inline_parser, delim);
+ delim = tmp_delim;
+ }
+
+ cmark_inline_parser_remove_delimiter(inline_parser, opener);
+
+done:
+ return res;
+}
+
+static const char *get_type_string(cmark_syntax_extension *extension,
+ cmark_node *node) {
+ return node->type == CMARK_NODE_STRIKETHROUGH ? "strikethrough" : "";
+}
+
+static int can_contain(cmark_syntax_extension *extension, cmark_node *node,
+ cmark_node_type child_type) {
+ if (node->type != CMARK_NODE_STRIKETHROUGH)
+ return false;
+
+ return CMARK_NODE_TYPE_INLINE_P(child_type);
+}
+
+static void commonmark_render(cmark_syntax_extension *extension,
+ cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ renderer->out(renderer, node, "~~", false, LITERAL);
+}
+
+static void latex_render(cmark_syntax_extension *extension,
+ cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ // requires \usepackage{ulem}
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+ if (entering) {
+ renderer->out(renderer, node, "\\sout{", false, LITERAL);
+ } else {
+ renderer->out(renderer, node, "}", false, LITERAL);
+ }
+}
+
+static void man_render(cmark_syntax_extension *extension,
+ cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+ if (entering) {
+ renderer->cr(renderer);
+ renderer->out(renderer, node, ".ST \"", false, LITERAL);
+ } else {
+ renderer->out(renderer, node, "\"", false, LITERAL);
+ renderer->cr(renderer);
+ }
+}
+
+static void html_render(cmark_syntax_extension *extension,
+ cmark_html_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+ if (entering) {
+ cmark_strbuf_puts(renderer->html, "");
+ } else {
+ cmark_strbuf_puts(renderer->html, "");
+ }
+}
+
+static void plaintext_render(cmark_syntax_extension *extension,
+ cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ renderer->out(renderer, node, "~", false, LITERAL);
+}
+
+cmark_syntax_extension *create_strikethrough_extension(void) {
+ cmark_syntax_extension *ext = cmark_syntax_extension_new("strikethrough");
+ cmark_llist *special_chars = NULL;
+
+ cmark_syntax_extension_set_get_type_string_func(ext, get_type_string);
+ cmark_syntax_extension_set_can_contain_func(ext, can_contain);
+ cmark_syntax_extension_set_commonmark_render_func(ext, commonmark_render);
+ cmark_syntax_extension_set_latex_render_func(ext, latex_render);
+ cmark_syntax_extension_set_man_render_func(ext, man_render);
+ cmark_syntax_extension_set_html_render_func(ext, html_render);
+ cmark_syntax_extension_set_plaintext_render_func(ext, plaintext_render);
+ CMARK_NODE_STRIKETHROUGH = cmark_syntax_extension_add_node(1);
+
+ cmark_syntax_extension_set_match_inline_func(ext, match);
+ cmark_syntax_extension_set_inline_from_delim_func(ext, insert);
+
+ cmark_mem *mem = cmark_get_default_mem_allocator();
+ special_chars = cmark_llist_append(mem, special_chars, (void *)'~');
+ cmark_syntax_extension_set_special_inline_chars(ext, special_chars);
+
+ cmark_syntax_extension_set_emphasis(ext, 1);
+
+ return ext;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.h
new file mode 100644
index 000000000000..a52a2b4ac867
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.h
@@ -0,0 +1,9 @@
+#ifndef CMARK_GFM_STRIKETHROUGH_H
+#define CMARK_GFM_STRIKETHROUGH_H
+
+#include "cmark-gfm-core-extensions.h"
+
+extern cmark_node_type CMARK_NODE_STRIKETHROUGH;
+cmark_syntax_extension *create_strikethrough_extension(void);
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.o
new file mode 100644
index 000000000000..a808c970af41
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/strikethrough.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.c
new file mode 100644
index 000000000000..f5c00bb4a7ac
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.c
@@ -0,0 +1,139 @@
+#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_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_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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.h
new file mode 100644
index 000000000000..e0390b2a2344
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.h
@@ -0,0 +1,32 @@
+#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_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_free_func opaque_free_func;
+ cmark_commonmark_escape_func commonmark_escape_func;
+};
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.o
new file mode 100644
index 000000000000..5521986674e0
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/syntax_extension.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.c
new file mode 100644
index 000000000000..ef08a3ae88a6
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.c
@@ -0,0 +1,701 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "ext_scanners.h"
+#include "strikethrough.h"
+#include "table.h"
+
+cmark_node_type CMARK_NODE_TABLE, CMARK_NODE_TABLE_ROW,
+ CMARK_NODE_TABLE_CELL;
+
+typedef struct {
+ uint16_t n_columns;
+ cmark_llist *cells;
+} table_row;
+
+typedef struct {
+ uint16_t n_columns;
+ uint8_t *alignments;
+} node_table;
+
+typedef struct {
+ bool is_header;
+} node_table_row;
+
+typedef struct {
+ cmark_strbuf *buf;
+ int start_offset, end_offset, internal_offset;
+} node_cell;
+
+static void free_table_cell(cmark_mem *mem, void *data) {
+ node_cell *cell = (node_cell *)data;
+ cmark_strbuf_free((cmark_strbuf *)cell->buf);
+ mem->free(cell->buf);
+ mem->free(cell);
+}
+
+static void free_table_row(cmark_mem *mem, table_row *row) {
+ if (!row)
+ return;
+
+ cmark_llist_free_full(mem, row->cells, (cmark_free_func)free_table_cell);
+
+ mem->free(row);
+}
+
+static void free_node_table(cmark_mem *mem, void *ptr) {
+ node_table *t = (node_table *)ptr;
+ mem->free(t->alignments);
+ mem->free(t);
+}
+
+static void free_node_table_row(cmark_mem *mem, void *ptr) {
+ mem->free(ptr);
+}
+
+static int get_n_table_columns(cmark_node *node) {
+ if (!node || node->type != CMARK_NODE_TABLE)
+ return -1;
+
+ return (int)((node_table *)node->as.opaque)->n_columns;
+}
+
+static int set_n_table_columns(cmark_node *node, uint16_t n_columns) {
+ if (!node || node->type != CMARK_NODE_TABLE)
+ return 0;
+
+ ((node_table *)node->as.opaque)->n_columns = n_columns;
+ return 1;
+}
+
+static uint8_t *get_table_alignments(cmark_node *node) {
+ if (!node || node->type != CMARK_NODE_TABLE)
+ return 0;
+
+ return ((node_table *)node->as.opaque)->alignments;
+}
+
+static int set_table_alignments(cmark_node *node, uint8_t *alignments) {
+ if (!node || node->type != CMARK_NODE_TABLE)
+ return 0;
+
+ ((node_table *)node->as.opaque)->alignments = alignments;
+ return 1;
+}
+
+static cmark_strbuf *unescape_pipes(cmark_mem *mem, unsigned char *string, bufsize_t len)
+{
+ cmark_strbuf *res = (cmark_strbuf *)mem->calloc(1, sizeof(cmark_strbuf));
+ bufsize_t r, w;
+
+ cmark_strbuf_init(mem, res, len + 1);
+ cmark_strbuf_put(res, string, len);
+ cmark_strbuf_putc(res, '\0');
+
+ for (r = 0, w = 0; r < len; ++r) {
+ if (res->ptr[r] == '\\' && res->ptr[r + 1] == '|')
+ r++;
+
+ res->ptr[w++] = res->ptr[r];
+ }
+
+ cmark_strbuf_truncate(res, w);
+
+ return res;
+}
+
+static table_row *row_from_string(cmark_syntax_extension *self,
+ cmark_parser *parser, unsigned char *string,
+ int len) {
+ table_row *row = NULL;
+ bufsize_t cell_matched, pipe_matched, offset;
+
+ row = (table_row *)parser->mem->calloc(1, sizeof(table_row));
+ row->n_columns = 0;
+ row->cells = NULL;
+
+ offset = scan_table_cell_end(string, len, 0);
+
+ do {
+ cell_matched = scan_table_cell(string, len, offset);
+ pipe_matched = scan_table_cell_end(string, len, offset + cell_matched);
+
+ if (cell_matched || pipe_matched) {
+ cmark_strbuf *cell_buf = unescape_pipes(parser->mem, string + offset,
+ cell_matched);
+ cmark_strbuf_trim(cell_buf);
+
+ node_cell *cell = (node_cell *)parser->mem->calloc(1, sizeof(*cell));
+ cell->buf = cell_buf;
+ cell->start_offset = offset;
+ cell->end_offset = offset + cell_matched - 1;
+ while (cell->start_offset > 0 && string[cell->start_offset - 1] != '|') {
+ --cell->start_offset;
+ ++cell->internal_offset;
+ }
+ row->n_columns += 1;
+ row->cells = cmark_llist_append(parser->mem, row->cells, cell);
+ }
+
+ offset += cell_matched + pipe_matched;
+
+ if (!pipe_matched) {
+ pipe_matched = scan_table_row_end(string, len, offset);
+ offset += pipe_matched;
+ }
+ } while ((cell_matched || pipe_matched) && offset < len);
+
+ if (offset != len || !row->n_columns) {
+ free_table_row(parser->mem, row);
+ row = NULL;
+ }
+
+ return row;
+}
+
+static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
+ cmark_parser *parser,
+ cmark_node *parent_container,
+ unsigned char *input, int len) {
+ bufsize_t matched =
+ scan_table_start(input, len, cmark_parser_get_first_nonspace(parser));
+ cmark_node *table_header;
+ table_row *header_row = NULL;
+ table_row *marker_row = NULL;
+ node_table_row *ntr;
+ const char *parent_string;
+ uint16_t i;
+
+ if (!matched)
+ return parent_container;
+
+ parent_string = cmark_node_get_string_content(parent_container);
+
+ cmark_arena_push();
+
+ header_row = row_from_string(self, parser, (unsigned char *)parent_string,
+ (int)strlen(parent_string));
+
+ if (!header_row) {
+ free_table_row(parser->mem, header_row);
+ cmark_arena_pop();
+ return parent_container;
+ }
+
+ marker_row = row_from_string(self, parser,
+ input + cmark_parser_get_first_nonspace(parser),
+ len - cmark_parser_get_first_nonspace(parser));
+
+ assert(marker_row);
+
+ if (header_row->n_columns != marker_row->n_columns) {
+ free_table_row(parser->mem, header_row);
+ free_table_row(parser->mem, marker_row);
+ cmark_arena_pop();
+ return parent_container;
+ }
+
+ if (cmark_arena_pop()) {
+ header_row = row_from_string(self, parser, (unsigned char *)parent_string,
+ (int)strlen(parent_string));
+ marker_row = row_from_string(self, parser,
+ input + cmark_parser_get_first_nonspace(parser),
+ len - cmark_parser_get_first_nonspace(parser));
+ }
+
+ if (!cmark_node_set_type(parent_container, CMARK_NODE_TABLE)) {
+ free_table_row(parser->mem, header_row);
+ free_table_row(parser->mem, marker_row);
+ return parent_container;
+ }
+
+ cmark_node_set_syntax_extension(parent_container, self);
+
+ parent_container->as.opaque = parser->mem->calloc(1, sizeof(node_table));
+
+ set_n_table_columns(parent_container, header_row->n_columns);
+
+ uint8_t *alignments =
+ (uint8_t *)parser->mem->calloc(header_row->n_columns, sizeof(uint8_t));
+ cmark_llist *it = marker_row->cells;
+ for (i = 0; it; it = it->next, ++i) {
+ node_cell *node = (node_cell *)it->data;
+ bool left = node->buf->ptr[0] == ':', right = node->buf->ptr[node->buf->size - 1] == ':';
+
+ if (left && right)
+ alignments[i] = 'c';
+ else if (left)
+ alignments[i] = 'l';
+ else if (right)
+ alignments[i] = 'r';
+ }
+ set_table_alignments(parent_container, alignments);
+
+ table_header =
+ cmark_parser_add_child(parser, parent_container, CMARK_NODE_TABLE_ROW,
+ parent_container->start_column);
+ cmark_node_set_syntax_extension(table_header, self);
+ table_header->end_column = parent_container->start_column + (int)strlen(parent_string) - 2;
+ table_header->start_line = table_header->end_line = parent_container->start_line;
+
+ table_header->as.opaque = ntr = (node_table_row *)parser->mem->calloc(1, sizeof(node_table_row));
+ ntr->is_header = true;
+
+ {
+ cmark_llist *tmp;
+
+ for (tmp = header_row->cells; tmp; tmp = tmp->next) {
+ node_cell *cell = (node_cell *) tmp->data;
+ cmark_node *header_cell = cmark_parser_add_child(parser, table_header,
+ CMARK_NODE_TABLE_CELL, parent_container->start_column + cell->start_offset);
+ header_cell->start_line = header_cell->end_line = parent_container->start_line;
+ header_cell->internal_offset = cell->internal_offset;
+ header_cell->end_column = parent_container->start_column + cell->end_offset;
+ cmark_node_set_string_content(header_cell, (char *) cell->buf->ptr);
+ cmark_node_set_syntax_extension(header_cell, self);
+ }
+ }
+
+ cmark_parser_advance_offset(
+ parser, (char *)input,
+ (int)strlen((char *)input) - 1 - cmark_parser_get_offset(parser), false);
+
+ free_table_row(parser->mem, header_row);
+ free_table_row(parser->mem, marker_row);
+ return parent_container;
+}
+
+static cmark_node *try_opening_table_row(cmark_syntax_extension *self,
+ cmark_parser *parser,
+ cmark_node *parent_container,
+ unsigned char *input, int len) {
+ cmark_node *table_row_block;
+ table_row *row;
+
+ if (cmark_parser_is_blank(parser))
+ return NULL;
+
+ table_row_block =
+ cmark_parser_add_child(parser, parent_container, CMARK_NODE_TABLE_ROW,
+ parent_container->start_column);
+ cmark_node_set_syntax_extension(table_row_block, self);
+ table_row_block->end_column = parent_container->end_column;
+ table_row_block->as.opaque = parser->mem->calloc(1, sizeof(node_table_row));
+
+ row = row_from_string(self, parser, input + cmark_parser_get_first_nonspace(parser),
+ len - cmark_parser_get_first_nonspace(parser));
+
+ {
+ cmark_llist *tmp;
+ int i, table_columns = get_n_table_columns(parent_container);
+
+ for (tmp = row->cells, i = 0; tmp && i < table_columns; tmp = tmp->next, ++i) {
+ node_cell *cell = (node_cell *) tmp->data;
+ cmark_node *node = cmark_parser_add_child(parser, table_row_block,
+ CMARK_NODE_TABLE_CELL, parent_container->start_column + cell->start_offset);
+ node->internal_offset = cell->internal_offset;
+ node->end_column = parent_container->start_column + cell->end_offset;
+ cmark_node_set_string_content(node, (char *) cell->buf->ptr);
+ cmark_node_set_syntax_extension(node, self);
+ }
+
+ for (; i < table_columns; ++i) {
+ cmark_node *node = cmark_parser_add_child(
+ parser, table_row_block, CMARK_NODE_TABLE_CELL, 0);
+ cmark_node_set_syntax_extension(node, self);
+ }
+ }
+
+ free_table_row(parser->mem, row);
+
+ cmark_parser_advance_offset(parser, (char *)input,
+ len - 1 - cmark_parser_get_offset(parser), false);
+
+ return table_row_block;
+}
+
+static cmark_node *try_opening_table_block(cmark_syntax_extension *self,
+ int indented, cmark_parser *parser,
+ cmark_node *parent_container,
+ unsigned char *input, int len) {
+ cmark_node_type parent_type = cmark_node_get_type(parent_container);
+
+ if (!indented && parent_type == CMARK_NODE_PARAGRAPH) {
+ return try_opening_table_header(self, parser, parent_container, input, len);
+ } else if (!indented && parent_type == CMARK_NODE_TABLE) {
+ return try_opening_table_row(self, parser, parent_container, input, len);
+ }
+
+ return NULL;
+}
+
+static int matches(cmark_syntax_extension *self, cmark_parser *parser,
+ unsigned char *input, int len,
+ cmark_node *parent_container) {
+ int res = 0;
+
+ if (cmark_node_get_type(parent_container) == CMARK_NODE_TABLE) {
+ cmark_arena_push();
+ table_row *new_row = row_from_string(
+ self, parser, input + cmark_parser_get_first_nonspace(parser),
+ len - cmark_parser_get_first_nonspace(parser));
+ if (new_row && new_row->n_columns)
+ res = 1;
+ free_table_row(parser->mem, new_row);
+ cmark_arena_pop();
+ }
+
+ return res;
+}
+
+static const char *get_type_string(cmark_syntax_extension *self,
+ cmark_node *node) {
+ if (node->type == CMARK_NODE_TABLE) {
+ return "table";
+ } else if (node->type == CMARK_NODE_TABLE_ROW) {
+ if (((node_table_row *)node->as.opaque)->is_header)
+ return "table_header";
+ else
+ return "table_row";
+ } else if (node->type == CMARK_NODE_TABLE_CELL) {
+ return "table_cell";
+ }
+
+ return "";
+}
+
+static int can_contain(cmark_syntax_extension *extension, cmark_node *node,
+ cmark_node_type child_type) {
+ if (node->type == CMARK_NODE_TABLE) {
+ return child_type == CMARK_NODE_TABLE_ROW;
+ } else if (node->type == CMARK_NODE_TABLE_ROW) {
+ return child_type == CMARK_NODE_TABLE_CELL;
+ } else if (node->type == CMARK_NODE_TABLE_CELL) {
+ return child_type == CMARK_NODE_TEXT || child_type == CMARK_NODE_CODE ||
+ child_type == CMARK_NODE_EMPH || child_type == CMARK_NODE_STRONG ||
+ child_type == CMARK_NODE_LINK || child_type == CMARK_NODE_IMAGE ||
+ child_type == CMARK_NODE_STRIKETHROUGH ||
+ child_type == CMARK_NODE_HTML_INLINE ||
+ child_type == CMARK_NODE_FOOTNOTE_REFERENCE;
+ }
+ return false;
+}
+
+static int contains_inlines(cmark_syntax_extension *extension,
+ cmark_node *node) {
+ return node->type == CMARK_NODE_TABLE_CELL;
+}
+
+static void commonmark_render(cmark_syntax_extension *extension,
+ cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+
+ if (node->type == CMARK_NODE_TABLE) {
+ renderer->blankline(renderer);
+ } else if (node->type == CMARK_NODE_TABLE_ROW) {
+ if (entering) {
+ renderer->cr(renderer);
+ renderer->out(renderer, node, "|", false, LITERAL);
+ }
+ } else if (node->type == CMARK_NODE_TABLE_CELL) {
+ if (entering) {
+ renderer->out(renderer, node, " ", false, LITERAL);
+ } else {
+ renderer->out(renderer, node, " |", false, LITERAL);
+ if (((node_table_row *)node->parent->as.opaque)->is_header &&
+ !node->next) {
+ int i;
+ uint8_t *alignments = get_table_alignments(node->parent->parent);
+ uint16_t n_cols =
+ ((node_table *)node->parent->parent->as.opaque)->n_columns;
+ renderer->cr(renderer);
+ renderer->out(renderer, node, "|", false, LITERAL);
+ for (i = 0; i < n_cols; i++) {
+ switch (alignments[i]) {
+ case 0: renderer->out(renderer, node, " --- |", false, LITERAL); break;
+ case 'l': renderer->out(renderer, node, " :-- |", false, LITERAL); break;
+ case 'c': renderer->out(renderer, node, " :-: |", false, LITERAL); break;
+ case 'r': renderer->out(renderer, node, " --: |", false, LITERAL); break;
+ }
+ }
+ renderer->cr(renderer);
+ }
+ }
+ } else {
+ assert(false);
+ }
+}
+
+static void latex_render(cmark_syntax_extension *extension,
+ cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+
+ if (node->type == CMARK_NODE_TABLE) {
+ if (entering) {
+ int i;
+ uint16_t n_cols;
+ uint8_t *alignments = get_table_alignments(node);
+
+ renderer->cr(renderer);
+ renderer->out(renderer, node, "\\begin{table}", false, LITERAL);
+ renderer->cr(renderer);
+ renderer->out(renderer, node, "\\begin{tabular}{", false, LITERAL);
+
+ n_cols = ((node_table *)node->as.opaque)->n_columns;
+ for (i = 0; i < n_cols; i++) {
+ switch(alignments[i]) {
+ case 0:
+ case 'l':
+ renderer->out(renderer, node, "l", false, LITERAL);
+ break;
+ case 'c':
+ renderer->out(renderer, node, "c", false, LITERAL);
+ break;
+ case 'r':
+ renderer->out(renderer, node, "r", false, LITERAL);
+ break;
+ }
+ }
+ renderer->out(renderer, node, "}", false, LITERAL);
+ renderer->cr(renderer);
+ } else {
+ renderer->out(renderer, node, "\\end{tabular}", false, LITERAL);
+ renderer->cr(renderer);
+ renderer->out(renderer, node, "\\end{table}", false, LITERAL);
+ renderer->cr(renderer);
+ }
+ } else if (node->type == CMARK_NODE_TABLE_ROW) {
+ if (!entering) {
+ renderer->cr(renderer);
+ }
+ } else if (node->type == CMARK_NODE_TABLE_CELL) {
+ if (!entering) {
+ if (node->next) {
+ renderer->out(renderer, node, " & ", false, LITERAL);
+ } else {
+ renderer->out(renderer, node, " \\\\", false, LITERAL);
+ }
+ }
+ } else {
+ assert(false);
+ }
+}
+
+static void man_render(cmark_syntax_extension *extension,
+ cmark_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+
+ if (node->type == CMARK_NODE_TABLE) {
+ if (entering) {
+ int i;
+ uint16_t n_cols;
+ uint8_t *alignments = get_table_alignments(node);
+
+ renderer->cr(renderer);
+ renderer->out(renderer, node, ".TS", false, LITERAL);
+ renderer->cr(renderer);
+ renderer->out(renderer, node, "tab(@);", false, LITERAL);
+ renderer->cr(renderer);
+
+ n_cols = ((node_table *)node->as.opaque)->n_columns;
+
+ for (i = 0; i < n_cols; i++) {
+ switch (alignments[i]) {
+ case 'l':
+ renderer->out(renderer, node, "l", false, LITERAL);
+ break;
+ case 0:
+ case 'c':
+ renderer->out(renderer, node, "c", false, LITERAL);
+ break;
+ case 'r':
+ renderer->out(renderer, node, "r", false, LITERAL);
+ break;
+ }
+ }
+
+ if (n_cols) {
+ renderer->out(renderer, node, ".", false, LITERAL);
+ renderer->cr(renderer);
+ }
+ } else {
+ renderer->out(renderer, node, ".TE", false, LITERAL);
+ renderer->cr(renderer);
+ }
+ } else if (node->type == CMARK_NODE_TABLE_ROW) {
+ if (!entering) {
+ renderer->cr(renderer);
+ }
+ } else if (node->type == CMARK_NODE_TABLE_CELL) {
+ if (!entering && node->next) {
+ renderer->out(renderer, node, "@", false, LITERAL);
+ }
+ } else {
+ assert(false);
+ }
+}
+
+static void html_table_add_align(cmark_strbuf* html, const char* align, int options) {
+ if (options & CMARK_OPT_TABLE_PREFER_STYLE_ATTRIBUTES) {
+ cmark_strbuf_puts(html, " style=\"text-align: ");
+ cmark_strbuf_puts(html, align);
+ cmark_strbuf_puts(html, "\"");
+ } else {
+ cmark_strbuf_puts(html, " align=\"");
+ cmark_strbuf_puts(html, align);
+ cmark_strbuf_puts(html, "\"");
+ }
+}
+
+struct html_table_state {
+ unsigned need_closing_table_body : 1;
+ unsigned in_table_header : 1;
+};
+
+static void html_render(cmark_syntax_extension *extension,
+ cmark_html_renderer *renderer, cmark_node *node,
+ cmark_event_type ev_type, int options) {
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
+ cmark_strbuf *html = renderer->html;
+ cmark_node *n;
+
+ // XXX: we just monopolise renderer->opaque.
+ struct html_table_state *table_state =
+ (struct html_table_state *)&renderer->opaque;
+
+ if (node->type == CMARK_NODE_TABLE) {
+ if (entering) {
+ cmark_html_render_cr(html);
+ cmark_strbuf_puts(html, "');
+ table_state->need_closing_table_body = false;
+ } else {
+ if (table_state->need_closing_table_body) {
+ cmark_html_render_cr(html);
+ cmark_strbuf_puts(html, "");
+ cmark_html_render_cr(html);
+ }
+ table_state->need_closing_table_body = false;
+ cmark_html_render_cr(html);
+ cmark_strbuf_puts(html, "
");
+ cmark_html_render_cr(html);
+ }
+ } else if (node->type == CMARK_NODE_TABLE_ROW) {
+ if (entering) {
+ cmark_html_render_cr(html);
+ if (((node_table_row *)node->as.opaque)->is_header) {
+ table_state->in_table_header = 1;
+ cmark_strbuf_puts(html, "");
+ cmark_html_render_cr(html);
+ } else if (!table_state->need_closing_table_body) {
+ cmark_strbuf_puts(html, "");
+ cmark_html_render_cr(html);
+ table_state->need_closing_table_body = 1;
+ }
+ cmark_strbuf_puts(html, "');
+ } else {
+ cmark_html_render_cr(html);
+ cmark_strbuf_puts(html, "
");
+ if (((node_table_row *)node->as.opaque)->is_header) {
+ cmark_html_render_cr(html);
+ cmark_strbuf_puts(html, "");
+ table_state->in_table_header = false;
+ }
+ }
+ } else if (node->type == CMARK_NODE_TABLE_CELL) {
+ uint8_t *alignments = get_table_alignments(node->parent->parent);
+ if (entering) {
+ cmark_html_render_cr(html);
+ if (table_state->in_table_header) {
+ cmark_strbuf_puts(html, "parent->first_child; n; n = n->next, ++i)
+ if (n == node)
+ break;
+
+ switch (alignments[i]) {
+ case 'l': html_table_add_align(html, "left", options); break;
+ case 'c': html_table_add_align(html, "center", options); break;
+ case 'r': html_table_add_align(html, "right", options); break;
+ }
+
+ cmark_html_render_sourcepos(node, html, options);
+ cmark_strbuf_putc(html, '>');
+ } else {
+ if (table_state->in_table_header) {
+ cmark_strbuf_puts(html, " | ");
+ } else {
+ cmark_strbuf_puts(html, "");
+ }
+ }
+ } else {
+ assert(false);
+ }
+}
+
+static void opaque_free(cmark_syntax_extension *self, cmark_mem *mem, cmark_node *node) {
+ if (node->type == CMARK_NODE_TABLE) {
+ free_node_table(mem, node->as.opaque);
+ } else if (node->type == CMARK_NODE_TABLE_ROW) {
+ free_node_table_row(mem, node->as.opaque);
+ }
+}
+
+static int escape(cmark_syntax_extension *self, cmark_node *node, int c) {
+ return
+ node->type != CMARK_NODE_TABLE &&
+ node->type != CMARK_NODE_TABLE_ROW &&
+ node->type != CMARK_NODE_TABLE_CELL &&
+ c == '|';
+}
+
+cmark_syntax_extension *create_table_extension(void) {
+ cmark_syntax_extension *self = cmark_syntax_extension_new("table");
+
+ cmark_syntax_extension_set_match_block_func(self, matches);
+ cmark_syntax_extension_set_open_block_func(self, try_opening_table_block);
+ cmark_syntax_extension_set_get_type_string_func(self, get_type_string);
+ cmark_syntax_extension_set_can_contain_func(self, can_contain);
+ cmark_syntax_extension_set_contains_inlines_func(self, contains_inlines);
+ cmark_syntax_extension_set_commonmark_render_func(self, commonmark_render);
+ cmark_syntax_extension_set_plaintext_render_func(self, commonmark_render);
+ cmark_syntax_extension_set_latex_render_func(self, latex_render);
+ cmark_syntax_extension_set_man_render_func(self, man_render);
+ cmark_syntax_extension_set_html_render_func(self, html_render);
+ cmark_syntax_extension_set_opaque_free_func(self, opaque_free);
+ cmark_syntax_extension_set_commonmark_escape_func(self, escape);
+ CMARK_NODE_TABLE = cmark_syntax_extension_add_node(0);
+ CMARK_NODE_TABLE_ROW = cmark_syntax_extension_add_node(0);
+ CMARK_NODE_TABLE_CELL = cmark_syntax_extension_add_node(0);
+
+ return self;
+}
+
+uint16_t cmark_gfm_extensions_get_table_columns(cmark_node *node) {
+ if (node->type != CMARK_NODE_TABLE)
+ return 0;
+
+ return ((node_table *)node->as.opaque)->n_columns;
+}
+
+uint8_t *cmark_gfm_extensions_get_table_alignments(cmark_node *node) {
+ if (node->type != CMARK_NODE_TABLE)
+ return 0;
+
+ return ((node_table *)node->as.opaque)->alignments;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.h
new file mode 100644
index 000000000000..f6a0634f0262
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.h
@@ -0,0 +1,12 @@
+#ifndef CMARK_GFM_TABLE_H
+#define CMARK_GFM_TABLE_H
+
+#include "cmark-gfm-core-extensions.h"
+
+
+extern cmark_node_type CMARK_NODE_TABLE, CMARK_NODE_TABLE_ROW,
+ CMARK_NODE_TABLE_CELL;
+
+cmark_syntax_extension *create_table_extension(void);
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.o
new file mode 100644
index 000000000000..70c9a93a68a6
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/table.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.c
new file mode 100644
index 000000000000..262352e0c4c2
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.c
@@ -0,0 +1,60 @@
+#include "tagfilter.h"
+#include
+#include
+
+static const char *blacklist[] = {
+ "title", "textarea", "style", "xmp", "iframe",
+ "noembed", "noframes", "script", "plaintext", NULL,
+};
+
+static int is_tag(const unsigned char *tag_data, size_t tag_size,
+ const char *tagname) {
+ size_t i;
+
+ if (tag_size < 3 || tag_data[0] != '<')
+ return 0;
+
+ i = 1;
+
+ if (tag_data[i] == '/') {
+ i++;
+ }
+
+ for (; i < tag_size; ++i, ++tagname) {
+ if (*tagname == 0)
+ break;
+
+ if (tolower(tag_data[i]) != *tagname)
+ return 0;
+ }
+
+ if (i == tag_size)
+ return 0;
+
+ if (cmark_isspace(tag_data[i]) || tag_data[i] == '>')
+ return 1;
+
+ if (tag_data[i] == '/' && tag_size >= i + 2 && tag_data[i + 1] == '>')
+ return 1;
+
+ return 0;
+}
+
+static int filter(cmark_syntax_extension *ext, const unsigned char *tag,
+ size_t tag_len) {
+ const char **it;
+
+ for (it = blacklist; *it; ++it) {
+ if (is_tag(tag, tag_len, *it)) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+cmark_syntax_extension *create_tagfilter_extension(void) {
+ cmark_syntax_extension *ext = cmark_syntax_extension_new("tagfilter");
+ cmark_syntax_extension_set_html_filter_func(ext, filter);
+ return ext;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.h
new file mode 100644
index 000000000000..9a5f388d4e20
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.h
@@ -0,0 +1,8 @@
+#ifndef CMARK_GFM_TAGFILTER_H
+#define CMARK_GFM_TAGFILTER_H
+
+#include "cmark-gfm-core-extensions.h"
+
+cmark_syntax_extension *create_tagfilter_extension(void);
+
+#endif
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.o
new file mode 100644
index 000000000000..8e420c3dcee9
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/tagfilter.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.c
new file mode 100644
index 000000000000..c29bbf770b4d
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.c
@@ -0,0 +1,317 @@
+#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);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.h b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.h
new file mode 100644
index 000000000000..04ec1611b866
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.h
@@ -0,0 +1,35 @@
+#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
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.o
new file mode 100644
index 000000000000..6777f673372f
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/utf8.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/xml.c b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/xml.c
new file mode 100644
index 000000000000..920fe7171fd3
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/xml.c
@@ -0,0 +1,174 @@
+#include
+#include
+#include
+#include
+
+#include "config.h"
+#include "cmark-gfm.h"
+#include "node.h"
+#include "buffer.h"
+#include "houdini.h"
+
+#define BUFFER_SIZE 100
+
+// Functions to convert cmark_nodes to XML strings.
+
+static void escape_xml(cmark_strbuf *dest, const unsigned char *source,
+ 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++) {
+ 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);
+ }
+
+ 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, ">");
+ 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, ">");
+ 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;
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/xml.o b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/xml.o
new file mode 100644
index 000000000000..b54d5c3d40aa
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker/xml.o differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker.rb
new file mode 100644
index 000000000000..1a266ecc4377
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker.rb
@@ -0,0 +1,42 @@
+#!/usr/bin/env ruby
+require 'commonmarker/commonmarker'
+require 'commonmarker/config'
+require 'commonmarker/node'
+require 'commonmarker/renderer'
+require 'commonmarker/renderer/html_renderer'
+require 'commonmarker/version'
+
+begin
+ require 'awesome_print'
+rescue LoadError; end
+
+module CommonMarker
+ # Public: Parses a Markdown string into an HTML string.
+ #
+ # text - A {String} of text
+ # option - Either a {Symbol} or {Array of Symbol}s indicating the render options
+ # extensions - An {Array of Symbol}s indicating the extensions to use
+ #
+ # Returns a {String} of converted HTML.
+ def self.render_html(text, options = :DEFAULT, extensions = [])
+ fail TypeError, "text must be a String; got a #{text.class}!" unless text.is_a?(String)
+ opts = Config.process_options(options, :render)
+ text = text.encode('UTF-8')
+ html = Node.markdown_to_html(text, opts, extensions)
+ html.force_encoding('UTF-8')
+ end
+
+ # Public: Parses a Markdown string into a `document` node.
+ #
+ # string - {String} to be parsed
+ # option - A {Symbol} or {Array of Symbol}s indicating the parse options
+ # extensions - An {Array of Symbol}s indicating the extensions to use
+ #
+ # Returns the `document` node.
+ def self.render_doc(text, options = :DEFAULT, extensions = [])
+ fail TypeError, "text must be a String; got a #{text.class}!" unless text.is_a?(String)
+ opts = Config.process_options(options, :parse)
+ text = text.encode('UTF-8')
+ Node.parse_document(text, text.bytesize, opts, extensions)
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/commonmarker.so b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/commonmarker.so
new file mode 100644
index 000000000000..bf52e3dd8f3f
Binary files /dev/null and b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/commonmarker.so differ
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/config.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/config.rb
new file mode 100644
index 000000000000..f42ea07f38ac
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/config.rb
@@ -0,0 +1,49 @@
+require 'ruby-enum'
+module CommonMarker
+ # For Ruby::Enum, these must be classes, not modules
+ module Config
+ class Parse
+ include Ruby::Enum
+
+ define :DEFAULT, 0
+ define :VALIDATE_UTF8, (1 << 9)
+ define :SMART, (1 << 10)
+ define :LIBERAL_HTML_TAG, (1 << 12)
+ define :FOOTNOTES, (1 << 13)
+ define :STRIKETHROUGH_DOUBLE_TILDE, (1 << 14)
+ end
+
+ class Render
+ include Ruby::Enum
+
+ define :DEFAULT, 0
+ define :SOURCEPOS, (1 << 1)
+ define :HARDBREAKS, (1 << 2)
+ define :SAFE, (1 << 3)
+ define :NOBREAKS, (1 << 4)
+ define :GITHUB_PRE_LANG, (1 << 11)
+ define :TABLE_PREFER_STYLE_ATTRIBUTES, (1 << 15)
+ define :FULL_INFO_STRING, (1 << 16)
+ end
+
+ def self.process_options(option, type)
+ type = Config.const_get(type.capitalize)
+ if option.is_a?(Symbol)
+ check_option(option, type)
+ type.to_h[option]
+ elsif option.is_a?(Array)
+ option = [nil] if option.empty?
+ # neckbearding around. the map will both check the opts and then bitwise-OR it
+ option.map { |o| check_option(o, type); type.to_h[o] }.inject(0, :|)
+ else
+ raise TypeError, 'option type must be a valid symbol or array of symbols'
+ end
+ end
+
+ def self.check_option(option, type)
+ unless type.keys.include?(option)
+ raise TypeError, "option ':#{option}' does not exist for #{type}"
+ end
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/node.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/node.rb
new file mode 100644
index 000000000000..88512586c8f1
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/node.rb
@@ -0,0 +1,71 @@
+require 'commonmarker/node/inspect'
+
+module CommonMarker
+ class Node
+ include Enumerable
+ include Inspect
+
+ # Public: An iterator that "walks the tree," descending into children recursively.
+ #
+ # blk - A {Proc} representing the action to take for each child
+ def walk(&block)
+ return enum_for(:walk) unless block_given?
+
+ yield self
+ each do |child|
+ child.walk(&block)
+ end
+ end
+
+ # Public: Convert the node to an HTML string.
+ #
+ # options - A {Symbol} or {Array of Symbol}s indicating the render options
+ # extensions - An {Array of Symbol}s indicating the extensions to use
+ #
+ # Returns a {String}.
+ def to_html(options = :DEFAULT, extensions = [])
+ opts = Config.process_options(options, :render)
+ _render_html(opts, extensions).force_encoding('utf-8')
+ end
+
+ # Public: Convert the node to a CommonMark string.
+ #
+ # options - A {Symbol} or {Array of Symbol}s indicating the render options
+ # width - Column to wrap the output at
+ #
+ # Returns a {String}.
+ def to_commonmark(options = :DEFAULT, width = 120)
+ opts = Config.process_options(options, :render)
+ _render_commonmark(opts, width).force_encoding('utf-8')
+ end
+
+ # Public: Convert the node to a plain text string.
+ #
+ # options - A {Symbol} or {Array of Symbol}s indicating the render options
+ # width - Column to wrap the output at
+ #
+ # Returns a {String}.
+ def to_plaintext(options = :DEFAULT, width = 120)
+ opts = Config.process_options(options, :render)
+ _render_plaintext(opts, width).force_encoding('utf-8')
+ end
+
+ # Public: Iterate over the children (if any) of the current pointer.
+ def each(&block)
+ return enum_for(:each) unless block_given?
+
+ child = first_child
+ while child
+ nextchild = child.next
+ yield child
+ child = nextchild
+ end
+ end
+
+ # Deprecated: Please use `each` instead
+ def each_child(&block)
+ warn '[DEPRECATION] `each_child` is deprecated. Please use `each` instead.'
+ each(&block)
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/node/inspect.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/node/inspect.rb
new file mode 100644
index 000000000000..a20000a0e718
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/node/inspect.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+require 'pp'
+
+module CommonMarker
+ class Node
+ module Inspect
+ PP_INDENT_SIZE = 2
+
+ def inspect
+ PP.pp(self, String.new, Float::INFINITY)
+ end
+
+ # @param [PrettyPrint] pp
+ def pretty_print(pp)
+ pp.group(PP_INDENT_SIZE, "#<#{self.class}(#{type}):", '>') do
+ pp.breakable
+
+ attrs = %i[
+ sourcepos
+ string_content
+ url
+ title
+ header_level
+ list_type
+ list_start
+ list_tight
+ fence_info
+ ].map do |name|
+ begin
+ [name, __send__(name)]
+ rescue NodeError
+ nil
+ end
+ end.compact
+
+ pp.seplist(attrs) do |name, value|
+ pp.text "#{name}="
+ pp.pp value
+ end
+
+ if first_child
+ pp.breakable
+ pp.group(PP_INDENT_SIZE) do
+ children = []
+ node = first_child
+ while node
+ children << node
+ node = node.next
+ end
+ pp.text 'children='
+ pp.pp children
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/renderer.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/renderer.rb
new file mode 100644
index 000000000000..a121018be817
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/renderer.rb
@@ -0,0 +1,129 @@
+require 'set'
+require 'stringio'
+
+module CommonMarker
+ class Renderer
+ attr_accessor :in_tight, :warnings, :in_plain
+ def initialize(options: :DEFAULT, extensions: [])
+ @opts = Config.process_options(options, :render)
+ @stream = StringIO.new("".force_encoding("utf-8"))
+ @need_blocksep = false
+ @warnings = Set.new []
+ @in_tight = false
+ @in_plain = false
+ @tagfilter = extensions.include?(:tagfilter)
+ end
+
+ def out(*args)
+ args.each do |arg|
+ if arg == :children
+ @node.each { |child| out(child) }
+ elsif arg.is_a?(Array)
+ arg.each { |x| render(x) }
+ elsif arg.is_a?(Node)
+ render(arg)
+ else
+ @stream.write(arg)
+ end
+ end
+ end
+
+ def render(node)
+ @node = node
+ if node.type == :document
+ document(node)
+ return @stream.string
+ elsif @in_plain && node.type != :text && node.type != :softbreak
+ node.each { |child| render(child) }
+ else
+ begin
+ send(node.type, node)
+ rescue NoMethodError => e
+ @warnings.add("WARNING: #{node.type} not implemented.")
+ raise e
+ end
+ end
+ end
+
+ def document(_node)
+ out(:children)
+ end
+
+ def code_block(node)
+ code_block(node)
+ end
+
+ def reference_def(_node)
+ end
+
+ def cr
+ return if @stream.string.empty? || @stream.string[-1] == "\n"
+ out("\n")
+ end
+
+ def blocksep
+ out("\n")
+ end
+
+ def containersep
+ cr unless @in_tight
+ end
+
+ def block
+ cr
+ yield
+ cr
+ end
+
+ def container(starter, ender)
+ out(starter)
+ yield
+ out(ender)
+ end
+
+ def plain
+ old_in_plain = @in_plain
+ @in_plain = true
+ yield
+ @in_plain = old_in_plain
+ end
+
+ private
+
+ def escape_href(str)
+ @node.html_escape_href(str)
+ end
+
+ def escape_html(str)
+ @node.html_escape_html(str)
+ end
+
+ def tagfilter(str)
+ if @tagfilter
+ str.gsub(
+ %r{
+ <
+ (
+ title|textarea|style|xmp|iframe|
+ noembed|noframes|script|plaintext
+ )
+ (?=\s|>|/>)
+ }xi,
+ '<\1')
+ else
+ str
+ end
+ end
+
+ def sourcepos(node)
+ return "" unless option_enabled?(:SOURCEPOS)
+ s = node.sourcepos
+ " data-sourcepos=\"#{s[:start_line]}:#{s[:start_column]}-" \
+ "#{s[:end_line]}:#{s[:end_column]}\""
+ end
+
+ def option_enabled?(opt)
+ (@opts & CommonMarker::Config::Render.value(opt)) != 0
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/renderer/html_renderer.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/renderer/html_renderer.rb
new file mode 100644
index 000000000000..3bb7e60c8017
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/renderer/html_renderer.rb
@@ -0,0 +1,243 @@
+module CommonMarker
+ class HtmlRenderer < Renderer
+ def render(node)
+ super(node)
+ end
+
+ def document(_)
+ super
+ if @written_footnote_ix
+ out("\n\n")
+ end
+ end
+
+ def header(node)
+ block do
+ out('", :children,
+ '')
+ end
+ end
+
+ def paragraph(node)
+ if @in_tight && node.parent.type != :blockquote
+ out(:children)
+ else
+ block do
+ container("", '
') do
+ out(:children)
+ if node.parent.type == :footnote_definition && node.next.nil?
+ out(" ")
+ out_footnote_backref
+ end
+ end
+ end
+ end
+ end
+
+ def list(node)
+ old_in_tight = @in_tight
+ @in_tight = node.list_tight
+
+ block do
+ if node.list_type == :bullet_list
+ container("') do
+ out(:children)
+ end
+ else
+ start = if node.list_start == 1
+ "\n"
+ else
+ "\n"
+ end
+ container(start, '
') do
+ out(:children)
+ end
+ end
+ end
+
+ @in_tight = old_in_tight
+ end
+
+ def list_item(node)
+ block do
+ container("- ", '
') do
+ out(:children)
+ end
+ end
+ end
+
+ def blockquote(node)
+ block do
+ container("\n", '
') do
+ out(:children)
+ end
+ end
+ end
+
+ def hrule(node)
+ block do
+ out("
")
+ end
+ end
+
+ def code_block(node)
+ block do
+ if option_enabled?(:GITHUB_PRE_LANG)
+ out("')
+ else
+ out("')
+ else
+ out('>')
+ end
+ end
+ out(escape_html(node.string_content))
+ out('
')
+ end
+ end
+
+ def html(node)
+ block do
+ if option_enabled?(:SAFE)
+ out('')
+ else
+ out(tagfilter(node.string_content))
+ end
+ end
+ end
+
+ def inline_html(node)
+ if option_enabled?(:SAFE)
+ out('')
+ else
+ out(tagfilter(node.string_content))
+ end
+ end
+
+ def emph(_)
+ out('', :children, '')
+ end
+
+ def strong(_)
+ out('', :children, '')
+ end
+
+ def link(node)
+ out('', :children, '')
+ end
+
+ def image(node)
+ out('
')
+ end
+
+ def text(node)
+ out(escape_html(node.string_content))
+ end
+
+ def code(node)
+ out('')
+ out(escape_html(node.string_content))
+ out('
')
+ end
+
+ def linebreak(node)
+ out("
\n")
+ end
+
+ def softbreak(_)
+ if option_enabled?(:HARDBREAKS)
+ out("
\n")
+ elsif option_enabled?(:NOBREAKS)
+ out(' ')
+ else
+ out("\n")
+ end
+ end
+
+ def table(node)
+ @alignments = node.table_alignments
+ @needs_close_tbody = false
+ out("\n", :children)
+ out("\n") if @needs_close_tbody
+ out("
\n")
+ end
+
+ def table_header(node)
+ @column_index = 0
+
+ @in_header = true
+ out("\n\n", :children, "
\n\n")
+ @in_header = false
+ end
+
+ def table_row(node)
+ @column_index = 0
+ if !@in_header && !@needs_close_tbody
+ @needs_close_tbody = true
+ out("\n")
+ end
+ out("\n", :children, "
\n")
+ end
+
+ def table_cell(node)
+ align = case @alignments[@column_index]
+ when :left; ' align="left"'
+ when :right; ' align="right"'
+ when :center; ' align="center"'
+ else; ''
+ end
+ out(@in_header ? "" : " | ", :children, @in_header ? "\n" : " | \n")
+ @column_index += 1
+ end
+
+ def strikethrough(_)
+ out('', :children, '')
+ end
+
+ def footnote_reference(node)
+ out("")
+ end
+
+ def footnote_definition(_)
+ if !@footnote_ix
+ out("
+ end
+
+ private
+
+ def out_footnote_backref
+ return false if @written_footnote_ix == @footnote_ix
+ @written_footnote_ix = @footnote_ix
+
+ out("")
+ true
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/version.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/version.rb
new file mode 100644
index 000000000000..6341e69c9bc6
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/lib/commonmarker/version.rb
@@ -0,0 +1,3 @@
+module CommonMarker
+ VERSION = '0.17.13'.freeze
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/benchmark.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/benchmark.rb
new file mode 100644
index 000000000000..9ffb53a9c183
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/benchmark.rb
@@ -0,0 +1,34 @@
+require 'commonmarker'
+require 'github/markdown'
+require 'redcarpet'
+require 'kramdown'
+require 'benchmark'
+
+def dobench(name, &blk)
+ puts name
+ puts Benchmark.measure(&blk)
+end
+
+benchinput = File.open('test/benchinput.md', 'r').read()
+
+printf("input size = %d bytes\n\n", benchinput.bytesize)
+
+dobench('redcarpet') do
+ Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: false, tables: false).render(benchinput)
+end
+
+dobench('github-markdown') do
+ GitHub::Markdown.render(benchinput)
+end
+
+dobench('commonmarker with to_html') do
+ CommonMarker.render_html(benchinput)
+end
+
+dobench('commonmarker with ruby HtmlRenderer') do
+ CommonMarker::HtmlRenderer.new.render(CommonMarker.render_doc(benchinput))
+end
+
+dobench('kramdown') do
+ Kramdown::Document.new(benchinput).to_html(benchinput)
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/fixtures/curly.md b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/fixtures/curly.md
new file mode 100644
index 000000000000..314d6bf100a5
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/fixtures/curly.md
@@ -0,0 +1 @@
+This curly quote “makes commonmarker throw an exception”.
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/fixtures/dingus.md b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/fixtures/dingus.md
new file mode 100644
index 000000000000..a94623b77f66
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/fixtures/dingus.md
@@ -0,0 +1,10 @@
+## Try CommonMark
+
+You can try CommonMark here. This dingus is powered by
+[commonmark.js](https://github.com/jgm/commonmark.js), the
+JavaScript reference implementation.
+
+1. item one
+2. item two
+ - sublist
+ - sublist
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_attributes.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_attributes.rb
new file mode 100644
index 000000000000..f655637365b7
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_attributes.rb
@@ -0,0 +1,22 @@
+require 'test_helper'
+
+class TestAttributes < Minitest::Test
+ def setup
+ contents = File.read(File.join(FIXTURES_DIR, 'dingus.md'))
+ @doc = CommonMarker.render_doc(contents.strip)
+ end
+
+ def test_sourcepos
+ sourcepos = []
+
+ @doc.walk do |node|
+ sourcepos << node.sourcepos
+ end
+
+ sourcepos.delete_if { |h| h.values.all? { |v| v == 0 } }
+
+ result = [{:start_line=>1, :start_column=>1, :end_line=>10, :end_column=>12}, {:start_line=>1, :start_column=>1, :end_line=>1, :end_column=>17}, {:start_line=>1, :start_column=>4, :end_line=>1, :end_column=>17}, {:start_line=>3, :start_column=>1, :end_line=>5, :end_column=>36}, {:start_line=>3, :start_column=>1, :end_line=>3, :end_column=>55}, {:start_line=>4, :start_column=>1, :end_line=>4, :end_column=>53}, {:start_line=>4, :start_column=>2, :end_line=>4, :end_column=>14}, {:start_line=>4, :start_column=>54, :end_line=>4, :end_column=>58}, {:start_line=>5, :start_column=>1, :end_line=>5, :end_column=>36}, {:start_line=>7, :start_column=>1, :end_line=>10, :end_column=>12}, {:start_line=>7, :start_column=>1, :end_line=>7, :end_column=>11}, {:start_line=>7, :start_column=>4, :end_line=>7, :end_column=>11}, {:start_line=>7, :start_column=>4, :end_line=>7, :end_column=>11}, {:start_line=>8, :start_column=>1, :end_line=>10, :end_column=>12}, {:start_line=>8, :start_column=>4, :end_line=>8, :end_column=>11}, {:start_line=>8, :start_column=>4, :end_line=>8, :end_column=>11}, {:start_line=>9, :start_column=>4, :end_line=>10, :end_column=>12}, {:start_line=>9, :start_column=>4, :end_line=>9, :end_column=>12}, {:start_line=>9, :start_column=>6, :end_line=>9, :end_column=>12}, {:start_line=>9, :start_column=>6, :end_line=>9, :end_column=>12}, {:start_line=>10, :start_column=>4, :end_line=>10, :end_column=>12}, {:start_line=>10, :start_column=>6, :end_line=>10, :end_column=>12}, {:start_line=>10, :start_column=>6, :end_line=>10, :end_column=>12}]
+
+ assert_equal result, sourcepos
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_basics.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_basics.rb
new file mode 100644
index 000000000000..7376cde48088
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_basics.rb
@@ -0,0 +1,16 @@
+require 'test_helper'
+
+class TestBasics < Minitest::Test
+ def setup
+ @doc = CommonMarker.render_doc('Hi *there*')
+ end
+
+ def test_to_html
+ assert_equal "Hi there
\n", @doc.to_html
+ end
+
+ def test_markdown_to_html
+ html = CommonMarker.render_html('Hi *there*')
+ assert_equal "Hi there
\n", html
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_commonmark.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_commonmark.rb
new file mode 100644
index 000000000000..93ab66bac293
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_commonmark.rb
@@ -0,0 +1,34 @@
+require 'test_helper'
+
+class TestCommonmark < Minitest::Test
+ HTML_COMMENT = %r[\s?]
+
+ def setup
+ @markdown = <<-MD
+Hi *there*!
+
+1. I am a numeric list.
+2. I continue the list.
+* Suddenly, an unordered list!
+* What fun!
+
+Okay, _enough_.
+
+| a | b |
+| --- | --- |
+| c | d |
+ MD
+ end
+
+ def render_doc(doc)
+ CommonMarker.render_doc(doc, :DEFAULT, %i[table])
+ end
+
+ def test_to_commonmark
+ compare = render_doc(@markdown).to_commonmark
+
+ assert_equal \
+ render_doc(@markdown).to_html.gsub(/ +/, ' ').gsub(HTML_COMMENT, ''),
+ render_doc(compare).to_html.gsub(/ +/, ' ').gsub(HTML_COMMENT, '')
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_doc.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_doc.rb
new file mode 100644
index 000000000000..bedc791cd321
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_doc.rb
@@ -0,0 +1,128 @@
+require 'test_helper'
+
+class TestDocNode < Minitest::Test
+ def setup
+ @doc = CommonMarker.render_doc('Hi *there*. This has __many nodes__!')
+ @first_child = @doc.first_child
+ @last_child = @doc.last_child
+ @link = CommonMarker.render_doc('[GitHub](https://www.github.com)').first_child.first_child
+ @image = CommonMarker.render_doc('')
+ @image = @image.first_child.first_child
+ @header = CommonMarker.render_doc('### Header Three').first_child
+ @ul_list = CommonMarker.render_doc("* Bullet\n*Bullet").first_child
+ @ol_list = CommonMarker.render_doc("1. One\n2. Two").first_child
+ @fence = CommonMarker.render_doc("``` ruby\nputs 'wow'\n```").first_child
+ end
+
+ def test_get_type
+ assert_equal @doc.type, :document
+ end
+
+ def test_get_type_string
+ assert_equal @doc.type_string, 'document'
+ end
+
+ def test_get_first_child
+ assert_equal @first_child.type, :paragraph
+ end
+
+ def test_get_next
+ assert_equal @first_child.first_child.next.type, :emph
+ end
+
+ def test_insert_before
+ paragraph = Node.new(:paragraph)
+ assert_equal @first_child.insert_before(paragraph), true
+ assert_match "\nHi there.", @doc.to_html
+ end
+
+ def test_insert_after
+ paragraph = Node.new(:paragraph)
+ assert_equal @first_child.insert_after(paragraph), true
+ assert_match "many nodes!
\n\n", @doc.to_html
+ end
+
+ def test_prepend_child
+ code = Node.new(:code)
+ assert_equal @first_child.prepend_child(code), true
+ assert_match '
Hi there.', @doc.to_html
+ end
+
+ def test_append_child
+ strong = Node.new(:strong)
+ assert_equal @first_child.append_child(strong), true
+ assert_match "!
\n", @doc.to_html
+ end
+
+ def test_get_last_child
+ assert_equal @last_child.type, :paragraph
+ end
+
+ def test_get_parent
+ assert_equal @first_child.first_child.next.parent.type, :paragraph
+ end
+
+ def test_get_previous
+ assert_equal @first_child.first_child.next.previous.type, :text
+ end
+
+ def test_get_url
+ assert_equal @link.url, 'https://www.github.com'
+ end
+
+ def test_set_url
+ assert_equal @link.url = 'https://www.mozilla.org', 'https://www.mozilla.org'
+ end
+
+ def test_get_title
+ assert_equal @image.title, 'Favicon'
+ end
+
+ def test_set_title
+ assert_equal @image.title = 'Octocat', 'Octocat'
+ end
+
+ def test_get_header_level
+ assert_equal @header.header_level, 3
+ end
+
+ def test_set_header_level
+ assert_equal @header.header_level = 6, 6
+ end
+
+ def test_get_list_type
+ assert_equal @ul_list.list_type, :bullet_list
+ assert_equal @ol_list.list_type, :ordered_list
+ end
+
+ def test_set_list_type
+ assert_equal @ul_list.list_type = :ordered_list, :ordered_list
+ assert_equal @ol_list.list_type = :bullet_list, :bullet_list
+ end
+
+ def test_get_list_start
+ assert_equal @ol_list.list_start, 1
+ end
+
+ def test_set_list_start
+ assert_equal @ol_list.list_start = 8, 8
+ end
+
+ def test_get_list_tight
+ assert_equal @ul_list.list_tight, true
+ assert_equal @ol_list.list_tight, true
+ end
+
+ def test_set_list_tight
+ assert_equal @ul_list.list_tight = false, false
+ assert_equal @ol_list.list_tight = false, false
+ end
+
+ def test_get_fence_info
+ assert_equal @fence.fence_info, 'ruby'
+ end
+
+ def test_set_fence_info
+ assert_equal @fence.fence_info = 'javascript', 'javascript'
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_encoding.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_encoding.rb
new file mode 100644
index 000000000000..baa19b948f0b
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_encoding.rb
@@ -0,0 +1,19 @@
+# coding: utf-8
+require 'test_helper'
+
+class TestEncoding < Minitest::Test
+ # see http://git.io/vq4FR
+ def test_encoding
+ contents = File.read(File.join(FIXTURES_DIR, 'curly.md'), encoding: 'utf-8')
+ doc = CommonMarker.render_doc(contents, :SMART)
+ render = doc.to_html
+ assert_equal render.rstrip, 'This curly quote “makes commonmarker throw an exception”.
'
+ end
+
+ def test_string_content_is_utf8
+ doc = CommonMarker.render_doc('Hi *there*')
+ text = doc.first_child.last_child.first_child
+ assert_equal text.string_content, 'there'
+ assert_equal text.string_content.encoding.name, 'UTF-8'
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_extensions.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_extensions.rb
new file mode 100644
index 000000000000..f4848f5a9e82
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_extensions.rb
@@ -0,0 +1,123 @@
+require 'test_helper'
+
+class TestExtensions < Minitest::Test
+ def setup
+ @markdown = <<-MD
+One extension:
+
+| a | b |
+| --- | --- |
+| c | d |
+| **x** | |
+
+Another extension:
+
+~~hi~~
+ MD
+ end
+
+ def test_uses_specified_extensions
+ CommonMarker.render_html(@markdown, :DEFAULT, %i[]).tap do |out|
+ assert out.include?("| a")
+ assert out.include?("| x")
+ assert out.include?("~~hi~~")
+ end
+
+ CommonMarker.render_html(@markdown, :DEFAULT, %i[table]).tap do |out|
+ refute out.include?("| a")
+ %w( a | c | x).each {|html| assert out.include?(html) }
+ assert out.include?("~~hi~~")
+ end
+
+ CommonMarker.render_html(@markdown, :DEFAULT, %i[strikethrough]).tap do |out|
+ assert out.include?("| a")
+ refute out.include?("~~hi~~")
+ assert out.include?("hi")
+ end
+
+ doc = CommonMarker.render_doc("~a~ ~~b~~ ~~~c~~~", :STRIKETHROUGH_DOUBLE_TILDE, [:strikethrough])
+ assert_equal doc.to_html, "~a~ b ~~~c~~~
\n"
+
+ CommonMarker.render_html(@markdown, :DEFAULT, %i[table strikethrough]).tap do |out|
+ refute out.include?("| a")
+ refute out.include?("| x")
+ refute out.include?("~~hi~~")
+ end
+
+ end
+
+ def test_extensions_with_renderers
+ doc = CommonMarker.render_doc(@markdown, :DEFAULT, %i[table])
+
+ doc.to_html.tap do |out|
+ refute out.include?("| a")
+ %w( a | c | x).each {|html| assert out.include?(html) }
+ assert out.include?("~~hi~~")
+ end
+
+ HtmlRenderer.new.render(doc).tap do |out|
+ refute out.include?("| a")
+ %w( a | c | x).each {|html| assert out.include?(html) }
+ assert out.include?("~~hi~~")
+ end
+
+ doc = CommonMarker.render_doc("~a~ ~~b~~ ~~~c~~~", :STRIKETHROUGH_DOUBLE_TILDE, [:strikethrough])
+ assert_equal HtmlRenderer.new.render(doc), "~a~ b ~~~c~~~
\n"
+ end
+
+ def test_bad_extension_specifications
+ assert_raises(TypeError) { CommonMarker.render_html(@markdown, :DEFAULT, "nope") }
+ assert_raises(TypeError) { CommonMarker.render_html(@markdown, :DEFAULT, ["table"]) }
+ assert_raises(ArgumentError) { CommonMarker.render_html(@markdown, :DEFAULT, %i[table bad]) }
+ end
+
+ def test_comments_are_kept_as_expected
+ assert_equal " <xmp>\n",
+ CommonMarker.render_html(" \n", :DEFAULT, %i[tagfilter])
+ end
+
+ def test_table_prefer_style_attributes
+ assert_equal(<<-HTML, CommonMarker.render_html(<<-MD, :TABLE_PREFER_STYLE_ATTRIBUTES, %i[table]))
+
+
+
+aaa |
+bbb |
+ccc |
+ddd |
+eee |
+
+
+
+
+fff |
+ggg |
+hhh |
+iii |
+jjj |
+
+
+
+ HTML
+aaa | bbb | ccc | ddd | eee
+:-- | --- | :-: | --- | --:
+fff | ggg | hhh | iii | jjj
+ MD
+ end
+
+ def test_plaintext
+ assert_equal(<<-HTML, CommonMarker.render_doc(<<-MD, :DEFAULT, %i[table strikethrough]).to_plaintext)
+Hello ~there~.
+
+| a |
+| --- |
+| b |
+ HTML
+Hello ~~there~~.
+
+| a |
+| - |
+| b |
+ MD
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_footnotes.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_footnotes.rb
new file mode 100644
index 000000000000..2c3aa59f0317
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_footnotes.rb
@@ -0,0 +1,25 @@
+require 'test_helper'
+
+class TestFootnotes < Minitest::Test
+ def setup
+ @doc = CommonMarker.render_doc("Hello[^hi].\n\n[^hi]: Hey!\n", :FOOTNOTES)
+ @expected = <<-HTML
+Hello.
+
+ HTML
+ end
+
+ def test_to_html
+ assert_equal @expected, @doc.to_html
+ end
+
+ def test_html_renderer
+ assert_equal @expected, CommonMarker::HtmlRenderer.new.render(@doc)
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_gc.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_gc.rb
new file mode 100644
index 000000000000..f1212d716a44
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_gc.rb
@@ -0,0 +1,43 @@
+require 'test_helper'
+
+class TestNode < Minitest::Test
+ # These tests are somewhat fragile. It would be better to allocate lots
+ # of memory after a GC run to make sure that potentially freed memory
+ # isn't valid by accident.
+
+ def test_drop_parent_reference
+ doc = CommonMarker.render_doc('Hi *there*')
+ text = doc.first_child.last_child.first_child
+ doc = nil
+ GC.start
+ # Test that doc has not been freed.
+ assert_equal "there", text.string_content
+ end
+
+ def test_drop_child_reference
+ doc = CommonMarker.render_doc('Hi *there*')
+ text = doc.first_child.last_child.first_child
+ text = nil
+ GC.start
+ # Test that the cached child object is still valid.
+ text = doc.first_child.last_child.first_child
+ assert_equal "there", text.string_content
+ end
+
+ def test_remove_parent
+ doc = CommonMarker.render_doc('Hi *there*')
+ para = doc.first_child
+ para.delete
+ doc = nil
+ para = nil
+ # TODO: Test that the `para` node was actually freed after unlinking.
+ end
+
+ def test_add_parent
+ doc = Node.new(:document)
+ hrule = Node.new(:hrule)
+ doc.append_child(hrule)
+ # If the hrule node was erroneously freed, this would result in a double
+ # free.
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_helper.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_helper.rb
new file mode 100644
index 000000000000..cdfc57974f4c
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_helper.rb
@@ -0,0 +1,61 @@
+# coding: utf-8
+require 'commonmarker'
+require 'minitest/autorun'
+require 'minitest/pride'
+
+include CommonMarker
+
+FIXTURES_DIR = File.join(File.dirname(__FILE__), 'fixtures')
+
+def open_spec_file(filename)
+ line_number = 0
+ start_line = 0
+ end_line = 0
+ example_number = 0
+ markdown_lines = []
+ html_lines = []
+ state = 0 # 0 regular text, 1 markdown example, 2 html output
+ headertext = ''
+ tests = []
+ extensions = []
+
+ header_re = Regexp.new('#+ ')
+ filepath = File.join('ext', 'commonmarker', 'cmark-upstream', 'test', filename)
+
+ File.readlines(filepath, encoding: "utf-8").each do |line|
+ line_number += 1
+
+ l = line.strip
+ if l =~ /^`{32} example(.*)$/
+ state = 1
+ extensions = $1.split
+ elsif l == '`' * 32
+ state = 0
+ example_number += 1
+ end_line = line_number
+ tests << {
+ :markdown => markdown_lines.join('').tr('→', "\t"),
+ :html => html_lines.join('').tr('→', "\t").rstrip,
+ :example => example_number,
+ :start_line => start_line,
+ :end_line => end_line,
+ :section => headertext,
+ :extensions => extensions.map(&:to_sym),
+ }
+ start_line = 0
+ markdown_lines = []
+ html_lines = []
+ elsif l == '.'
+ state = 2
+ elsif state == 1
+ start_line = line_number - 1 if start_line == 0
+ markdown_lines << "#{line}"
+ elsif state == 2
+ html_lines << "#{line}"
+ elsif state == 0 && header_re.match(line)
+ headertext = line.sub(header_re, '').strip
+ end
+ end
+
+ tests
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_linebreaks.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_linebreaks.rb
new file mode 100644
index 000000000000..d601d98fabd2
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_linebreaks.rb
@@ -0,0 +1,13 @@
+require 'test_helper'
+
+class TestLinebreaks < Minitest::Test
+ def test_hardbreak_no_spaces
+ doc = CommonMarker.render_doc("foo\nbaz")
+ assert_equal "foo
\nbaz
\n", doc.to_html(:HARDBREAKS)
+ end
+
+ def test_hardbreak_with_spaces
+ doc = CommonMarker.render_doc("foo \nbaz")
+ assert_equal "foo
\nbaz
\n", doc.to_html(:HARDBREAKS)
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_maliciousness.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_maliciousness.rb
new file mode 100644
index 000000000000..5910c172a9bc
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_maliciousness.rb
@@ -0,0 +1,263 @@
+require 'test_helper'
+
+class CommonMarker::TestMaliciousness < Minitest::Test
+ def setup
+ @doc = CommonMarker.render_doc('Hi *there*')
+ end
+
+ def test_init_with_bad_type
+ assert_raises TypeError do
+ Node.new(123)
+ end
+
+ assert_raises NodeError do
+ Node.new(:totes_fake)
+ end
+
+ assert_raises TypeError do
+ Node.new([])
+ end
+
+ assert_raises TypeError do
+ Node.new([23])
+ end
+
+ assert_raises TypeError do
+ Node.new(nil)
+ end
+ end
+
+ def test_rendering_with_bad_type
+ assert_raises TypeError do
+ CommonMarker.render_html("foo \n baz", 123)
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html("foo \n baz", :totes_fake)
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html("foo \n baz", [])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html("foo \n baz", [23])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html("foo \n baz", nil)
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html("foo \n baz", [:SMART, 'totes_fake'])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html(123)
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html([123])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_html(nil)
+ end
+
+ err = assert_raises TypeError do
+ CommonMarker.render_html("foo \n baz", [:SMART])
+ end
+ assert_equal err.message, 'option \':SMART\' does not exist for CommonMarker::Config::Render'
+
+ assert_raises TypeError do
+ CommonMarker.render_doc("foo \n baz", 123)
+ end
+
+ err = assert_raises TypeError do
+ CommonMarker.render_doc("foo \n baz", :safe)
+ end
+ assert_equal err.message, 'option \':safe\' does not exist for CommonMarker::Config::Parse'
+
+ assert_raises TypeError do
+ CommonMarker.render_doc("foo \n baz", :totes_fake)
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_doc("foo \n baz", [])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_doc("foo \n baz", [23])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_doc("foo \n baz", nil)
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_doc("foo \n baz", [:SMART, 'totes_fake'])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_doc(123)
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_doc([123])
+ end
+
+ assert_raises TypeError do
+ CommonMarker.render_doc(nil)
+ end
+ end
+
+ def test_bad_set_string_content
+ assert_raises TypeError do
+ @doc.string_content = 123
+ end
+ end
+
+ def test_bad_walking
+ assert_nil @doc.parent
+ assert_nil @doc.previous
+ end
+
+ def test_bad_insertion
+ code = Node.new(:code)
+ assert_raises NodeError do
+ @doc.insert_before(code)
+ end
+
+ paragraph = Node.new(:paragraph)
+ assert_raises NodeError do
+ @doc.insert_after(paragraph)
+ end
+
+ document = Node.new(:document)
+ assert_raises NodeError do
+ @doc.prepend_child(document)
+ end
+
+ assert_raises NodeError do
+ @doc.append_child(document)
+ end
+ end
+
+ def test_bad_url_get
+ assert_raises NodeError do
+ @doc.url
+ end
+ end
+
+ def test_bad_url_set
+ assert_raises NodeError do
+ @doc.url = '123'
+ end
+
+ link = CommonMarker.render_doc('[GitHub](https://www.github.com)').first_child.first_child
+ assert_raises TypeError do
+ link.url = 123
+ end
+ end
+
+ def test_bad_title_get
+ assert_raises NodeError do
+ @doc.title
+ end
+ end
+
+ def test_bad_title_set
+ assert_raises NodeError do
+ @doc.title = '123'
+ end
+
+ image = CommonMarker.render_doc('')
+ image = image.first_child.first_child
+ assert_raises TypeError do
+ image.title = 123
+ end
+ end
+
+ def test_bad_header_level_get
+ assert_raises NodeError do
+ @doc.header_level
+ end
+ end
+
+ def test_bad_header_level_set
+ assert_raises NodeError do
+ @doc.header_level = 1
+ end
+
+ header = CommonMarker.render_doc('### Header Three').first_child
+ assert_raises TypeError do
+ header.header_level = '123'
+ end
+ end
+
+ def test_bad_list_type_get
+ assert_raises NodeError do
+ @doc.list_type
+ end
+ end
+
+ def test_bad_list_type_set
+ assert_raises NodeError do
+ @doc.list_type = :bullet_list
+ end
+
+ ul_list = CommonMarker.render_doc("* Bullet\n*Bullet").first_child
+ assert_raises NodeError do
+ ul_list.list_type = :fake
+ end
+ assert_raises TypeError do
+ ul_list.list_type = 1234
+ end
+ end
+
+ def test_bad_list_start_get
+ assert_raises NodeError do
+ @doc.list_start
+ end
+ end
+
+ def test_bad_list_start_set
+ assert_raises NodeError do
+ @doc.list_start = 12
+ end
+
+ ol_list = CommonMarker.render_doc("1. One\n2. Two").first_child
+ assert_raises TypeError do
+ ol_list.list_start = :fake
+ end
+ end
+
+ def test_bad_list_tight_get
+ assert_raises NodeError do
+ @doc.list_tight
+ end
+ end
+
+ def test_bad_list_tight_set
+ assert_raises NodeError do
+ @doc.list_tight = false
+ end
+ end
+
+ def test_bad_fence_info_get
+ assert_raises NodeError do
+ @doc.fence_info
+ end
+ end
+
+ def test_bad_fence_info_set
+ assert_raises NodeError do
+ @doc.fence_info = 'ruby'
+ end
+
+ fence = CommonMarker.render_doc("``` ruby\nputs 'wow'\n```").first_child
+ assert_raises TypeError do
+ fence.fence_info = 123
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_node.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_node.rb
new file mode 100644
index 000000000000..e3d9b65e4bd0
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_node.rb
@@ -0,0 +1,89 @@
+require 'test_helper'
+
+class TestNode < Minitest::Test
+ def setup
+ @doc = CommonMarker.render_doc('Hi *there*, I am mostly text!')
+ end
+
+ def test_walk
+ nodes = []
+ @doc.walk do |node|
+ nodes << node.type
+ end
+ assert_equal [:document, :paragraph, :text, :emph, :text, :text], nodes
+ end
+
+ def test_each
+ nodes = []
+ @doc.first_child.each do |node|
+ nodes << node.type
+ end
+ assert_equal [:text, :emph, :text], nodes
+ end
+
+ def test_deprecated_each_child
+ nodes = []
+ out, err = capture_io do
+ @doc.first_child.each_child do |node|
+ nodes << node.type
+ end
+ end
+ assert_equal [:text, :emph, :text], nodes
+ assert_match /`each_child` is deprecated/, err
+ end
+
+ def test_select
+ nodes = @doc.first_child.select { |node| node.type == :text }
+ assert_equal CommonMarker::Node, nodes.first.class
+ assert_equal [:text, :text], nodes.map(&:type)
+ end
+
+ def test_map
+ nodes = @doc.first_child.map(&:type)
+ assert_equal [:text, :emph, :text], nodes
+ end
+
+ def test_insert_illegal
+ assert_raises NodeError do
+ @doc.insert_before(@doc)
+ end
+ end
+
+ def test_to_html
+ assert_equal "Hi there, I am mostly text!
\n", @doc.to_html
+ end
+
+ def test_html_renderer
+ renderer = HtmlRenderer.new
+ result = renderer.render(@doc)
+ assert_equal "Hi there, I am mostly text!
\n", result
+ end
+
+ def test_walk_and_set_string_content
+ @doc.walk do |node|
+ if node.type == :text && node.string_content == 'there'
+ node.string_content = 'world'
+ end
+ end
+ result = HtmlRenderer.new.render(@doc)
+ assert_equal "Hi world, I am mostly text!
\n", result
+ end
+
+ def test_walk_and_delete_node
+ @doc.walk do |node|
+ if node.type == :emph
+ node.insert_before(node.first_child)
+ node.delete
+ end
+ end
+ assert_equal "Hi there, I am mostly text!
\n", @doc.to_html
+ end
+
+ def test_inspect
+ assert_match /#)
+ end
+
+ md = <<-MD
+```ruby my info string
+module Foo
+```
+ MD
+
+ CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
+ assert_includes out, %q()
+ end
+
+ md = <<-MD
+```ruby my \x00 string
+module Foo
+```
+ MD
+
+ CommonMarker.render_html(md, :FULL_INFO_STRING).tap do |out|
+ assert_includes out, %Q()
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_pathological_inputs.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_pathological_inputs.rb
new file mode 100644
index 000000000000..3cdeb14d1f93
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_pathological_inputs.rb
@@ -0,0 +1,92 @@
+require 'test_helper'
+require 'minitest/benchmark' if ENV['BENCH']
+
+def markdown(s)
+ CommonMarker.render_doc(s).to_html
+end
+
+# list of pairs consisting of input and a regex that must match the output.
+pathological = {
+ 'nested strong emph' =>
+ [('*a **a ' * 65_000) + 'b' + (' a** a*' * 65_000),
+ Regexp.compile('(a a ){65_000}b( a a){65_000}')],
+ 'many emph closers with no openers' =>
+ [('a_ ' * 65_000),
+ Regexp.compile('(a[_] ){64999}a_')],
+ 'many emph openers with no closers' =>
+ [('_a ' * 65_000),
+ Regexp.compile('(_a ){64999}_a')],
+ 'many link closers with no openers' =>
+ [('a]' * 65_000),
+ Regexp.compile('(a\]){65_000}')],
+ 'many link openers with no closers' =>
+ [('[a' * 65_000),
+ Regexp.compile('(\[a){65_000}')],
+ 'mismatched openers and closers' =>
+ [('*a_ ' * 50_000),
+ Regexp.compile('([*]a[_] ){49999}[*]a_')],
+ 'link openers and emph closers' =>
+ [('[ a_' * 50_000),
+ Regexp.compile('(\[ a_){50000}')],
+ 'hard link/emph case' =>
+ ['**x [a*b**c*](d)',
+ Regexp.compile('\\*\\*x abc')],
+ 'nested brackets' =>
+ [('[' * 50_000) + 'a' + (']' * 50_000),
+ Regexp.compile('\[{50000}a\]{50000}')],
+ 'nested block quotes' =>
+ [(('> ' * 50_000) + 'a'),
+ Regexp.compile('(\n){50000}')],
+ 'U+0000 in input' =>
+ ['abc\u0000de\u0000',
+ Regexp.compile('abc\ufffd?de\ufffd?')]
+}
+
+pathological.each_pair do |name, description|
+ define_method("test_#{name}") do
+ input, = description
+ assert markdown(input)
+ end
+end
+
+if ENV['BENCH']
+ class PathologicalInputsPerformanceTest < Minitest::Benchmark
+ def bench_pathological_1
+ assert_performance_linear 0.99 do |n|
+ star = '*' * (n * 10)
+ markdown("#{star}#{star}hi#{star}#{star}")
+ end
+ end
+
+ def bench_pathological_2
+ assert_performance_linear 0.99 do |n|
+ c = '`t`t`t`t`t`t' * (n * 10)
+ markdown(c)
+ end
+ end
+
+ def bench_pathological_3
+ assert_performance_linear 0.99 do |n|
+ markdown(" [a]: #{'A' * n}\n\n#{'[a][]' * n}\n")
+ end
+ end
+
+ def bench_pathological_4
+ assert_performance_linear 0.5 do |n|
+ markdown("#{'[' * n}a#{']' * n}")
+ end
+ end
+
+ def bench_pathological_5
+ assert_performance_linear 0.99 do |n|
+ markdown("#{'**a *a ' * n}#{'a* a**' * n}")
+ end
+ end
+
+ def bench_unbound_recursion
+ assert_performance_linear 0.99 do |n|
+ markdown(('[' * n) + 'foo' + ('](bar)' * n))
+ end
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_plaintext.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_plaintext.rb
new file mode 100644
index 000000000000..297457e84ea2
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_plaintext.rb
@@ -0,0 +1,44 @@
+require 'test_helper'
+
+class TestPlaintext < Minitest::Test
+ def setup
+ @markdown = <<-MD
+Hi *there*!
+
+1. I am a numeric list.
+2. I continue the list.
+* Suddenly, an unordered list!
+* What fun!
+
+Okay, _enough_.
+
+| a | b |
+| --- | --- |
+| c | d |
+ MD
+ end
+
+ def render_doc(doc)
+ CommonMarker.render_doc(doc, :DEFAULT, %i[table])
+ end
+
+ def test_to_commonmark
+ compare = render_doc(@markdown).to_plaintext
+
+ assert_equal <<-PLAINTEXT, compare
+Hi there!
+
+1. I am a numeric list.
+2. I continue the list.
+
+ - Suddenly, an unordered list!
+ - What fun!
+
+Okay, enough.
+
+| a | b |
+| --- | --- |
+| c | d |
+ PLAINTEXT
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_renderer.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_renderer.rb
new file mode 100644
index 000000000000..9a81f305ee49
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_renderer.rb
@@ -0,0 +1,28 @@
+require 'test_helper'
+
+class TestRenderer < Minitest::Test
+ def setup
+ @doc = CommonMarker.render_doc('Hi *there*')
+ end
+
+ def test_html_renderer
+ renderer = HtmlRenderer.new
+ result = renderer.render(@doc)
+ assert_equal "Hi there
\n", result
+ end
+
+ def test_multiple_tables
+ content = '''
+| Input | Expected | Actual |
+| ----------- | ---------------- | --------- |
+| One | Two | Three |
+
+| Header | Row | Example |
+| :------: | ---: | :------ |
+| Foo | Bar | Baz |
+'''
+ doc = CommonMarker.render_doc(content, :DEFAULT, [:autolink, :table, :tagfilter])
+ results = CommonMarker::HtmlRenderer.new.render(doc)
+ assert_equal 2, results.scan(//).size
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_smartpunct.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_smartpunct.rb
new file mode 100644
index 000000000000..aa8e77a0d22a
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_smartpunct.rb
@@ -0,0 +1,22 @@
+require 'test_helper'
+
+class SmartPunctTest < Minitest::Test
+ smart_punct = open_spec_file('smart_punct.txt')
+
+ smart_punct.each do |testcase|
+ doc = CommonMarker.render_doc(testcase[:markdown], :SMART)
+
+ define_method("test_smart_punct_example_#{testcase[:example]}") do
+ actual = doc.to_html.strip
+
+ assert_equal testcase[:html], actual, testcase[:markdown]
+ end
+ end
+
+ def test_smart_hardbreak_no_spaces_render_doc
+ markdown = "\"foo\"\nbaz"
+ result = "“foo”
\nbaz
\n"
+ doc = CommonMarker.render_doc(markdown, :SMART)
+ assert_equal result, doc.to_html([:HARDBREAKS])
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_spec.rb b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_spec.rb
new file mode 100644
index 000000000000..57eea9269d8a
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/commonmarker-0.17.13/test/test_spec.rb
@@ -0,0 +1,27 @@
+require 'test_helper'
+require 'json'
+
+class TestSpec < Minitest::Test
+ spec = open_spec_file('spec.txt')
+
+ spec.each do |testcase|
+ next if testcase[:extensions].include?(:disabled)
+ doc = CommonMarker.render_doc(testcase[:markdown], :DEFAULT, testcase[:extensions])
+
+ define_method("test_to_html_example_#{testcase[:example]}") do
+ actual = doc.to_html(:DEFAULT, testcase[:extensions]).rstrip
+ assert_equal testcase[:html], actual, testcase[:markdown]
+ end
+
+ define_method("test_html_renderer_example_#{testcase[:example]}") do
+ actual = HtmlRenderer.new(extensions: testcase[:extensions]).render(doc).rstrip
+ assert_equal testcase[:html], actual, testcase[:markdown]
+ end
+
+ define_method("test_sourcepos_example_#{testcase[:example]}") do
+ lhs = doc.to_html(:SOURCEPOS, testcase[:extensions]).rstrip
+ rhs = HtmlRenderer.new(options: :SOURCEPOS, extensions: testcase[:extensions]).render(doc).rstrip
+ assert_equal lhs, rhs, testcase[:markdown]
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/CHANGELOG.md b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/CHANGELOG.md
new file mode 100644
index 000000000000..9cde76382900
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/CHANGELOG.md
@@ -0,0 +1,516 @@
+## Current
+
+## Release v1.1.8 (20 January 2021)
+
+* (#885) Fix race condition in TVar for stale reads
+* (#884) RubyThreadLocalVar: Do not iterate over hash which might conflict with new pair addition
+
+## Release v1.1.7 (6 August 2020)
+
+concurrent-ruby:
+
+* (#879) Consider falsy value on `Concurrent::Map#compute_if_absent` for fast non-blocking path
+* (#876) Reset Async queue on forking, makes Async fork-safe
+* (#856) Avoid running problematic code in RubyThreadLocalVar on MRI that occasionally results in segfault
+* (#853) Introduce ThreadPoolExecutor without a Queue
+
+## Release v1.1.6, edge v0.6.0 (10 Feb 2020)
+
+concurrent-ruby:
+
+* (#841) Concurrent.disable_at_exit_handlers! is no longer needed and was deprecated.
+* (#841) AbstractExecutorService#auto_terminate= was deprecated and has no effect.
+ Set :auto_terminate option instead when executor is initialized.
+
+## Release v1.1.6.pre1, edge v0.6.0.pre1 (26 Jan 2020)
+
+concurrent-ruby:
+
+* (#828) Allow to name executors, the name is also used to name their threads
+* (#838) Implement #dup and #clone for structs
+* (#821) Safer finalizers for thread local variables
+* Documentation fixes
+* (#814) Use Ruby's Etc.nprocessors if available
+* (#812) Fix directory structure not to mess with packaging tools
+* (#840) Fix termination of pools on JRuby
+
+concurrent-ruby-edge:
+
+* Add WrappingExecutor (#830)
+
+## Release v1.1.5, edge v0.5.0 (10 Mar 2019)
+
+concurrent-ruby:
+
+* fix potential leak of context on JRuby and Java 7
+
+concurrent-ruby-edge:
+
+* Add finalized Concurrent::Cancellation
+* Add finalized Concurrent::Throttle
+* Add finalized Concurrent::Promises::Channel
+* Add new Concurrent::ErlangActor
+
+## Release v1.1.4 (14 Dec 2018)
+
+* (#780) Remove java_alias of 'submit' method of Runnable to let executor service work on java 11
+* (#776) Fix NameError on defining a struct with a name which is already taken in an ancestor
+
+## Release v1.1.3 (7 Nov 2018)
+
+* (#775) fix partial require of the gem (although not officially supported)
+
+## Release v1.1.2 (6 Nov 2018)
+
+* (#773) more defensive 1.9.3 support
+
+## Release v1.1.1, edge v0.4.1 (1 Nov 2018)
+
+* (#768) add support for 1.9.3 back
+
+## Release v1.1.0, edge v0.4.0 (31 OCt 2018) (yanked)
+
+* (#768) yanked because of issues with removed 1.9.3 support
+
+## Release v1.1.0.pre2, edge v0.4.0.pre2 (18 Sep 2018)
+
+concurrent-ruby:
+
+* fixed documentation and README links
+* fix Set for TruffleRuby and Rubinius
+* use properly supported TruffleRuby APIs
+
+concurrent-ruby-edge:
+
+* add Promises.zip_futures_over_on
+
+## Release v1.1.0.pre1, edge v0.4.0.pre1 (15 Aug 2018)
+
+concurrent-ruby:
+
+* requires at least Ruby 2.0
+* [Promises](http://ruby-concurrency.github.io/concurrent-ruby/1.1.0/Concurrent/Promises.html)
+ are moved from `concurrent-ruby-edge` to `concurrent-ruby`
+* Add support for TruffleRuby
+ * (#734) Fix Array/Hash/Set construction broken on TruffleRuby
+ * AtomicReference fixed
+* CI stabilization
+* remove sharp dependency edge -> core
+* remove warnings
+* documentation updates
+* Exchanger is no longer documented as edge since it was already available in
+ `concurrent-ruby`
+* (#644) Fix Map#each and #each_pair not returning enumerator outside of MRI
+* (#659) Edge promises fail during error handling
+* (#741) Raise on recursive Delay#value call
+* (#727) #717 fix global IO executor on JRuby
+* (#740) Drop support for CRuby 1.9, JRuby 1.7, Rubinius.
+* (#737) Move AtomicMarkableReference out of Edge
+* (#708) Prefer platform specific memory barriers
+* (#735) Fix wrong expected exception in channel spec assertion
+* (#729) Allow executor option in `Promise#then`
+* (#725) fix timeout check to use timeout_interval
+* (#719) update engine detection
+* (#660) Add specs for Promise#zip/Promise.zip ordering
+* (#654) Promise.zip execution changes
+* (#666) Add thread safe set implementation
+* (#651) #699 #to_s, #inspect should not output negative object IDs.
+* (#685) Avoid RSpec warnings about raise_error
+* (#680) Avoid RSpec monkey patching, persist spec results locally, use RSpec
+ v3.7.0
+* (#665) Initialize the monitor for new subarrays on Rubinius
+* (#661) Fix error handling in edge promises
+
+concurrent-ruby-edge:
+
+* (#659) Edge promises fail during error handling
+* Edge files clearly separated in `lib-edge`
+* added ReInclude
+
+## Release v1.0.5, edge v0.3.1 (26 Feb 2017)
+
+concurrent-ruby:
+
+* Documentation for Event and Semaphore
+* Use Unsafe#fullFence and #loadFence directly since the shortcuts were removed in JRuby
+* Do not depend on org.jruby.util.unsafe.UnsafeHolder
+
+concurrent-ruby-edge:
+
+* (#620) Actors on Pool raise an error
+* (#624) Delayed promises did not interact correctly with flatting
+ * Fix arguments yielded by callback methods
+* Overridable default executor in promises factory methods
+* Asking actor to terminate will always resolve to `true`
+
+## Release v1.0.4, edge v0.3.0 (27 Dec 2016)
+
+concurrent-ruby:
+
+* Nothing
+
+concurrent-ruby-edge:
+
+* New promises' API renamed, lots of improvements, edge bumped to 0.3.0
+ * **Incompatible** with previous 0.2.3 version
+ * see https://github.com/ruby-concurrency/concurrent-ruby/pull/522
+
+## Release v1.0.3 (17 Dec 2016)
+
+* Trigger execution of flattened delayed futures
+* Avoid forking for processor_count if possible
+* Semaphore Mutex and JRuby parity
+* Adds Map#each as alias to Map#each_pair
+* Fix uninitialized instance variables
+* Make Fixnum, Bignum merger ready
+* Allows Promise#then to receive an executor
+* TimerSet now survives a fork
+* Reject promise on any exception
+* Allow ThreadLocalVar to be initialized with a block
+* Support Alpha with `Concurrent::processor_count`
+* Fixes format-security error when compiling ruby_193_compatible.h
+* Concurrent::Atom#swap fixed: reraise the exceptions from block
+
+## Release v1.0.2 (2 May 2016)
+
+* Fix bug with `Concurrent::Map` MRI backend `#inspect` method
+* Fix bug with `Concurrent::Map` MRI backend using `Hash#value?`
+* Improved documentation and examples
+* Minor updates to Edge
+
+## Release v1.0.1 (27 February 2016)
+
+* Fix "uninitialized constant Concurrent::ReentrantReadWriteLock" error.
+* Better handling of `autoload` vs. `require`.
+* Improved API for Edge `Future` zipping.
+* Fix reference leak in Edge `Future` constructor .
+* Fix bug which prevented thread pools from surviving a `fork`.
+* Fix bug in which `TimerTask` did not correctly specify all its dependencies.
+* Improved support for JRuby+Truffle
+* Improved error messages.
+* Improved documentation.
+* Updated README and CONTRIBUTING.
+
+## Release v1.0.0 (13 November 2015)
+
+* Rename `attr_volatile_with_cas` to `attr_atomic`
+* Add `clear_each` to `LockFreeStack`
+* Update `AtomicReference` documentation
+* Further updates and improvements to the synchronization layer.
+* Performance and memory usage performance with `Actor` logging.
+* Fixed `ThreadPoolExecutor` task count methods.
+* Improved `Async` performance for both short and long-lived objects.
+* Fixed bug in `LockFreeLinkedSet`.
+* Fixed bug in which `Agent#await` triggered a validation failure.
+* Further `Channel` updates.
+* Adopted a project Code of Conduct
+* Cleared interpreter warnings
+* Fixed bug in `ThreadPoolExecutor` task count methods
+* Fixed bug in 'LockFreeLinkedSet'
+* Improved Java extension loading
+* Handle Exception children in Edge::Future
+* Continued improvements to channel
+* Removed interpreter warnings.
+* Shared constants now in `lib/concurrent/constants.rb`
+* Refactored many tests.
+* Improved synchronization layer/memory model documentation.
+* Bug fix in Edge `Future#flat`
+* Brand new `Channel` implementation in Edge gem.
+* Simplification of `RubySingleThreadExecutor`
+* `Async` improvements
+ - Each object uses its own `SingleThreadExecutor` instead of the global thread pool.
+ - No longers supports executor injection
+ - Much better documentation
+* `Atom` updates
+ - No longer `Dereferenceable`
+ - Now `Observable`
+ - Added a `#reset` method
+* Brand new `Agent` API and implementation. Now functionally equivalent to Clojure.
+* Continued improvements to the synchronization layer
+* Merged in the `thread_safe` gem
+ - `Concurrent::Array`
+ - `Concurrent::Hash`
+ - `Concurrent::Map` (formerly ThreadSafe::Cache)
+ - `Concurrent::Tuple`
+* Minor improvements to Concurrent::Map
+* Complete rewrite of `Exchanger`
+* Removed all deprecated code (classes, methods, constants, etc.)
+* Updated Agent, MutexAtomic, and BufferedChannel to inherit from Synchronization::Object.
+* Many improved tests
+* Some internal reorganization
+
+## Release v0.9.1 (09 August 2015)
+
+* Fixed a Rubiniux bug in synchronization object
+* Fixed all interpreter warnings (except circular references)
+* Fixed require statements when requiring `Atom` alone
+* Significantly improved `ThreadLocalVar` on non-JRuby platforms
+* Fixed error handling in Edge `Concurrent.zip`
+* `AtomicFixnum` methods `#increment` and `#decrement` now support optional delta
+* New `AtomicFixnum#update` method
+* Minor optimizations in `ReadWriteLock`
+* New `ReentrantReadWriteLock` class
+* `ThreadLocalVar#bind` method is now public
+* Refactored many tests
+
+## Release v0.9.0 (10 July 2015)
+
+* Updated `AtomicReference`
+ - `AtomicReference#try_update` now simply returns instead of raising exception
+ - `AtomicReference#try_update!` was added to raise exceptions if an update
+ fails. Note: this is the same behavior as the old `try_update`
+* Pure Java implementations of
+ - `AtomicBoolean`
+ - `AtomicFixnum`
+ - `Semaphore`
+* Fixed bug when pruning Ruby thread pools
+* Fixed bug in time calculations within `ScheduledTask`
+* Default `count` in `CountDownLatch` to 1
+* Use monotonic clock for all timers via `Concurrent.monotonic_time`
+ - Use `Process.clock_gettime(Process::CLOCK_MONOTONIC)` when available
+ - Fallback to `java.lang.System.nanoTime()` on unsupported JRuby versions
+ - Pure Ruby implementation for everything else
+ - Effects `Concurrent.timer`, `Concurrent.timeout`, `TimerSet`, `TimerTask`, and `ScheduledTask`
+* Deprecated all clock-time based timer scheduling
+ - Only support scheduling by delay
+ - Effects `Concurrent.timer`, `TimerSet`, and `ScheduledTask`
+* Added new `ReadWriteLock` class
+* Consistent `at_exit` behavior for Java and Ruby thread pools.
+* Added `at_exit` handler to Ruby thread pools (already in Java thread pools)
+ - Ruby handler stores the object id and retrieves from `ObjectSpace`
+ - JRuby disables `ObjectSpace` by default so that handler stores the object reference
+* Added a `:stop_on_exit` option to thread pools to enable/disable `at_exit` handler
+* Updated thread pool docs to better explain shutting down thread pools
+* Simpler `:executor` option syntax for all abstractions which support this option
+* Added `Executor#auto_terminate?` predicate method (for thread pools)
+* Added `at_exit` handler to `TimerSet`
+* Simplified auto-termination of the global executors
+ - Can now disable auto-termination of global executors
+ - Added shutdown/kill/wait_for_termination variants for global executors
+* Can now disable auto-termination for *all* executors (the nuclear option)
+* Simplified auto-termination of the global executors
+* Deprecated terms "task pool" and "operation pool"
+ - New terms are "io executor" and "fast executor"
+ - New functions added with new names
+ - Deprecation warnings added to functions referencing old names
+* Moved all thread pool related functions from `Concurrent::Configuration` to `Concurrent`
+ - Old functions still exist with deprecation warnings
+ - New functions have updated names as appropriate
+* All high-level abstractions default to the "io executor"
+* Fixed bug in `Actor` causing it to prematurely warm global thread pools on gem load
+ - This also fixed a `RejectedExecutionError` bug when running with minitest/autorun via JRuby
+* Moved global logger up to the `Concurrent` namespace and refactored the code
+* Optimized the performance of `Delay`
+ - Fixed a bug in which no executor option on construction caused block execution on a global thread pool
+* Numerous improvements and bug fixes to `TimerSet`
+* Fixed deadlock of `Future` when the handler raises Exception
+* Added shared specs for more classes
+* New concurrency abstractions including:
+ - `Atom`
+ - `Maybe`
+ - `ImmutableStruct`
+ - `MutableStruct`
+ - `SettableStruct`
+* Created an Edge gem for unstable abstractions including
+ - `Actor`
+ - `Agent`
+ - `Channel`
+ - `Exchanger`
+ - `LazyRegister`
+ - **new Future Framework** - unified
+ implementation of Futures and Promises which combines Features of previous `Future`,
+ `Promise`, `IVar`, `Event`, `Probe`, `dataflow`, `Delay`, `TimerTask` into single framework. It uses extensively
+ new synchronization layer to make all the paths **lock-free** with exception of blocking threads on `#wait`.
+ It offers better performance and does not block threads when not required.
+* Actor framework changes:
+ - fixed reset loop in Pool
+ - Pool can use any actor as a worker, abstract worker class is no longer needed.
+ - Actor events not have format `[:event_name, *payload]` instead of just the Symbol.
+ - Actor now uses new Future/Promise Framework instead of `IVar` for better interoperability
+ - Behaviour definition array was simplified to `[BehaviourClass1, [BehaviourClass2, *initialization_args]]`
+ - Linking behavior responds to :linked message by returning array of linked actors
+ - Supervised behavior is removed in favour of just Linking
+ - RestartingContext is supervised by default now, `supervise: true` is not required any more
+ - Events can be private and public, so far only difference is that Linking will
+ pass to linked actors only public messages. Adding private :restarting and
+ :resetting events which are send before the actor restarts or resets allowing
+ to add callbacks to cleanup current child actors.
+ - Print also object_id in Reference to_s
+ - Add AbstractContext#default_executor to be able to override executor class wide
+ - Add basic IO example
+ - Documentation somewhat improved
+ - All messages should have same priority. It's now possible to send `actor << job1 << job2 << :terminate!` and
+ be sure that both jobs are processed first.
+* Refactored `Channel` to use newer synchronization objects
+* Added `#reset` and `#cancel` methods to `TimerSet`
+* Added `#cancel` method to `Future` and `ScheduledTask`
+* Refactored `TimerSet` to use `ScheduledTask`
+* Updated `Async` with a factory that initializes the object
+* Deprecated `Concurrent.timer` and `Concurrent.timeout`
+* Reduced max threads on pure-Ruby thread pools (abends around 14751 threads)
+* Moved many private/internal classes/modules into "namespace" modules
+* Removed brute-force killing of threads in tests
+* Fixed a thread pool bug when the operating system cannot allocate more threads
+
+## Release v0.8.0 (25 January 2015)
+
+* C extension for MRI have been extracted into the `concurrent-ruby-ext` companion gem.
+ Please see the README for more detail.
+* Better variable isolation in `Promise` and `Future` via an `:args` option
+* Continued to update intermittently failing tests
+
+## Release v0.7.2 (24 January 2015)
+
+* New `Semaphore` class based on [java.util.concurrent.Semaphore](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html)
+* New `Promise.all?` and `Promise.any?` class methods
+* Renamed `:overflow_policy` on thread pools to `:fallback_policy`
+* Thread pools still accept the `:overflow_policy` option but display a warning
+* Thread pools now implement `fallback_policy` behavior when not running (rather than universally rejecting tasks)
+* Fixed minor `set_deref_options` constructor bug in `Promise` class
+* Fixed minor `require` bug in `ThreadLocalVar` class
+* Fixed race condition bug in `TimerSet` class
+* Fixed race condition bug in `TimerSet` class
+* Fixed signal bug in `TimerSet#post` method
+* Numerous non-functional updates to clear warning when running in debug mode
+* Fixed more intermittently failing tests
+* Tests now run on new Travis build environment
+* Multiple documentation updates
+
+## Release v0.7.1 (4 December 2014)
+
+Please see the [roadmap](https://github.com/ruby-concurrency/concurrent-ruby/issues/142) for more information on the next planned release.
+
+* Added `flat_map` method to `Promise`
+* Added `zip` method to `Promise`
+* Fixed bug with logging in `Actor`
+* Improvements to `Promise` tests
+* Removed actor-experimental warning
+* Added an `IndirectImmediateExecutor` class
+* Allow disabling auto termination of global executors
+* Fix thread leaking in `ThreadLocalVar` (uses `Ref` gem on non-JRuby systems)
+* Fix thread leaking when pruning pure-Ruby thread pools
+* Prevent `Actor` from using an `ImmediateExecutor` (causes deadlock)
+* Added missing synchronizations to `TimerSet`
+* Fixed bug with return value of `Concurrent::Actor::Utils::Pool#ask`
+* Fixed timing bug in `TimerTask`
+* Fixed bug when creating a `JavaThreadPoolExecutor` with minimum pool size of zero
+* Removed confusing warning when not using native extenstions
+* Improved documentation
+
+## Release v0.7.0 (13 August 2014)
+
+* Merge the [atomic](https://github.com/ruby-concurrency/atomic) gem
+ - Pure Ruby `MutexAtomic` atomic reference class
+ - Platform native atomic reference classes `CAtomic`, `JavaAtomic`, and `RbxAtomic`
+ - Automated [build process](https://github.com/ruby-concurrency/rake-compiler-dev-box)
+ - Fat binary releases for [multiple platforms](https://rubygems.org/gems/concurrent-ruby/versions) including Windows (32/64), Linux (32/64), OS X (64-bit), Solaris (64-bit), and JRuby
+* C native `CAtomicBoolean`
+* C native `CAtomicFixnum`
+* Refactored intermittently failing tests
+* Added `dataflow!` and `dataflow_with!` methods to match `Future#value!` method
+* Better handling of timeout in `Agent`
+* Actor Improvements
+ - Fine-grained implementation using chain of behaviors. Each behavior is responsible for single aspect like: `Termination`, `Pausing`, `Linking`, `Supervising`, etc. Users can create custom Actors easily based on their needs.
+ - Supervision was added. `RestartingContext` will pause on error waiting on its supervisor to decide what to do next ( options are `:terminate!`, `:resume!`, `:reset!`, `:restart!`). Supervising behavior also supports strategies `:one_for_one` and `:one_for_all`.
+ - Linking was added to be able to monitor actor's events like: `:terminated`, `:paused`, `:restarted`, etc.
+ - Dead letter routing added. Rejected envelopes are collected in a configurable actor (default: `Concurrent::Actor.root.ask!(:dead_letter_routing)`)
+ - Old `Actor` class removed and replaced by new implementation previously called `Actress`. `Actress` was kept as an alias for `Actor` to keep compatibility.
+ - `Utils::Broadcast` actor which allows Publish–subscribe pattern.
+* More executors for managing serialized operations
+ - `SerializedExecution` mixin module
+ - `SerializedExecutionDelegator` for serializing *any* executor
+* Updated `Async` with serialized execution
+* Updated `ImmediateExecutor` and `PerThreadExecutor` with full executor service lifecycle
+* Added a `Delay` to root `Actress` initialization
+* Minor bug fixes to thread pools
+* Refactored many intermittently failing specs
+* Removed Java interop warning `executor.rb:148 warning: ambiguous Java methods found, using submit(java.lang.Runnable)`
+* Fixed minor bug in `RubyCachedThreadPool` overflow policy
+* Updated tests to use [RSpec 3.0](http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3)
+* Removed deprecated `Actor` class
+* Better support for Rubinius
+
+## Release v0.6.1 (14 June 2014)
+
+* Many improvements to `Concurrent::Actress`
+* Bug fixes to `Concurrent::RubyThreadPoolExecutor`
+* Fixed several brittle tests
+* Moved documentation to http://ruby-concurrency.github.io/concurrent-ruby/frames.html
+
+## Release v0.6.0 (25 May 2014)
+
+* Added `Concurrent::Observable` to encapsulate our thread safe observer sets
+* Improvements to new `Channel`
+* Major improvements to `CachedThreadPool` and `FixedThreadPool`
+* Added `SingleThreadExecutor`
+* Added `Current::timer` function
+* Added `TimerSet` executor
+* Added `AtomicBoolean`
+* `ScheduledTask` refactoring
+* Pure Ruby and JRuby-optimized `PriorityQueue` classes
+* Updated `Agent` behavior to more closely match Clojure
+* Observer sets support block callbacks to the `add_observer` method
+* New algorithm for thread creation in `RubyThreadPoolExecutor`
+* Minor API updates to `Event`
+* Rewritten `TimerTask` now an `Executor` instead of a `Runnable`
+* Fixed many brittle specs
+* Renamed `FixedThreadPool` and `CachedThreadPool` to `RubyFixedThreadPool` and `RubyCachedThreadPool`
+* Created JRuby optimized `JavaFixedThreadPool` and `JavaCachedThreadPool`
+* Consolidated fixed thread pool tests into `spec/concurrent/fixed_thread_pool_shared.rb` and `spec/concurrent/cached_thread_pool_shared.rb`
+* `FixedThreadPool` now subclasses `RubyFixedThreadPool` or `JavaFixedThreadPool` as appropriate
+* `CachedThreadPool` now subclasses `RubyCachedThreadPool` or `JavaCachedThreadPool` as appropriate
+* New `Delay` class
+* `Concurrent::processor_count` helper function
+* New `Async` module
+* Renamed `NullThreadPool` to `PerThreadExecutor`
+* Deprecated `Channel` (we are planning a new implementation based on [Go](http://golangtutorials.blogspot.com/2011/06/channels-in-go.html))
+* Added gem-level [configuration](http://robots.thoughtbot.com/mygem-configure-block)
+* Deprecated `$GLOBAL_THREAD_POOL` in lieu of gem-level configuration
+* Removed support for Ruby [1.9.2](https://www.ruby-lang.org/en/news/2013/12/17/maintenance-of-1-8-7-and-1-9-2/)
+* New `RubyThreadPoolExecutor` and `JavaThreadPoolExecutor` classes
+* All thread pools now extend the appropriate thread pool executor classes
+* All thread pools now support `:overflow_policy` (based on Java's [reject policies](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html))
+* Deprecated `UsesGlobalThreadPool` in lieu of explicit `:executor` option (dependency injection) on `Future`, `Promise`, and `Agent`
+* Added `Concurrent::dataflow_with(executor, *inputs)` method to support executor dependency injection for dataflow
+* Software transactional memory with `TVar` and `Concurrent::atomically`
+* First implementation of [new, high-performance](https://github.com/ruby-concurrency/concurrent-ruby/pull/49) `Channel`
+* `Actor` is deprecated in favor of new experimental actor implementation [#73](https://github.com/ruby-concurrency/concurrent-ruby/pull/73). To avoid namespace collision it is living in `Actress` namespace until `Actor` is removed in next release.
+
+## Release v0.5.0
+
+This is the most significant release of this gem since its inception. This release includes many improvements and optimizations. It also includes several bug fixes. The major areas of focus for this release were:
+
+* Stability improvements on Ruby versions with thread-level parallelism ([JRuby](http://jruby.org/) and [Rubinius](http://rubini.us/))
+* Creation of new low-level concurrency abstractions
+* Internal refactoring to use the new low-level abstractions
+
+Most of these updates had no effect on the gem API. There are a few notable exceptions which were unavoidable. Please read the [release notes](API-Updates-in-v0.5.0) for more information.
+
+Specific changes include:
+
+* New class `IVar`
+* New class `MVar`
+* New class `ThreadLocalVar`
+* New class `AtomicFixnum`
+* New class method `dataflow`
+* New class `Condition`
+* New class `CountDownLatch`
+* New class `DependencyCounter`
+* New class `SafeTaskExecutor`
+* New class `CopyOnNotifyObserverSet`
+* New class `CopyOnWriteObserverSet`
+* `Future` updated with `execute` API
+* `ScheduledTask` updated with `execute` API
+* New `Promise` API
+* `Future` now extends `IVar`
+* `Postable#post?` now returns an `IVar`
+* Thread safety fixes to `Dereferenceable`
+* Thread safety fixes to `Obligation`
+* Thread safety fixes to `Supervisor`
+* Thread safety fixes to `Event`
+* Various other thread safety (race condition) fixes
+* Refactored brittle tests
+* Implemented pending tests
+* Added JRuby and Rubinius as Travis CI build targets
+* Added [CodeClimate](https://codeclimate.com/) code review
+* Improved YARD documentation
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/Gemfile b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/Gemfile
new file mode 100644
index 000000000000..1b8d9fd9b1d0
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/Gemfile
@@ -0,0 +1,42 @@
+source 'https://rubygems.org'
+
+require File.join(File.dirname(__FILE__), 'lib/concurrent-ruby/concurrent/version')
+require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby-edge/concurrent/edge/version')
+require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby/concurrent/utility/engine')
+
+no_path = ENV['NO_PATH']
+options = no_path ? {} : { path: '.' }
+
+gem 'concurrent-ruby', Concurrent::VERSION, options
+gem 'concurrent-ruby-edge', Concurrent::EDGE_VERSION, options
+gem 'concurrent-ruby-ext', Concurrent::VERSION, options.merge(platform: :mri)
+
+group :development do
+ gem 'rake', (Concurrent.ruby_version :<, 2, 2, 0) ? '~> 12.0' : '~> 13.0'
+ gem 'rake-compiler', '~> 1.0', '>= 1.0.7'
+ gem 'rake-compiler-dock', '~> 1.0'
+ gem 'pry', '~> 0.11', platforms: :mri
+end
+
+group :documentation, optional: true do
+ gem 'yard', '~> 0.9.0', require: false
+ gem 'redcarpet', '~> 3.0', platforms: :mri # understands github markdown
+ gem 'md-ruby-eval', '~> 0.6'
+end
+
+group :testing do
+ gem 'rspec', '~> 3.7'
+ gem 'timecop', '~> 0.7.4'
+ gem 'sigdump', require: false
+end
+
+# made opt-in since it will not install on jruby 1.7
+group :coverage, optional: !ENV['COVERAGE'] do
+ gem 'simplecov', '~> 0.16.0', require: false
+ gem 'coveralls', '~> 0.8.2', require: false
+end
+
+group :benchmarks, optional: true do
+ gem 'benchmark-ips', '~> 2.7'
+ gem 'bench9000'
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/LICENSE.txt b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/LICENSE.txt
new file mode 100644
index 000000000000..1026f28d0be9
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/LICENSE.txt
@@ -0,0 +1,21 @@
+Copyright (c) Jerry D'Antonio -- released under the MIT license.
+
+http://www.opensource.org/licenses/mit-license.php
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/README.md b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/README.md
new file mode 100644
index 000000000000..2e89c2a5affc
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/README.md
@@ -0,0 +1,384 @@
+# Concurrent Ruby
+
+[](http://badge.fury.io/rb/concurrent-ruby)
+[](https://travis-ci.org/ruby-concurrency/concurrent-ruby)
+[](https://ci.appveyor.com/project/rubyconcurrency/concurrent-ruby)
+[](http://opensource.org/licenses/MIT)
+[-devs%20%26%20users-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby)
+
+Modern concurrency tools for Ruby. Inspired by
+[Erlang](http://www.erlang.org/doc/reference_manual/processes.html),
+[Clojure](http://clojure.org/concurrent_programming),
+[Scala](http://akka.io/),
+[Haskell](http://www.haskell.org/haskellwiki/Applications_and_libraries/Concurrency_and_parallelism#Concurrent_Haskell),
+[F#](http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx),
+[C#](http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx),
+[Java](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html),
+and classic concurrency patterns.
+
+
+
+The design goals of this gem are:
+
+* Be an 'unopinionated' toolbox that provides useful utilities without debating which is better
+ or why
+* Remain free of external gem dependencies
+* Stay true to the spirit of the languages providing inspiration
+* But implement in a way that makes sense for Ruby
+* Keep the semantics as idiomatic Ruby as possible
+* Support features that make sense in Ruby
+* Exclude features that don't make sense in Ruby
+* Be small, lean, and loosely coupled
+* Thread-safety
+* Backward compatibility
+
+## Contributing
+
+**This gem depends on
+[contributions](https://github.com/ruby-concurrency/concurrent-ruby/graphs/contributors) and we
+appreciate your help. Would you like to contribute? Great! Have a look at
+[issues with `looking-for-contributor` label](https://github.com/ruby-concurrency/concurrent-ruby/issues?q=is%3Aissue+is%3Aopen+label%3Alooking-for-contributor).** And if you pick something up let us know on the issue.
+
+## Thread Safety
+
+*Concurrent Ruby makes one of the strongest thread safety guarantees of any Ruby concurrency
+library, providing consistent behavior and guarantees on all four of the main Ruby interpreters
+(MRI/CRuby, JRuby, Rubinius, TruffleRuby).*
+
+Every abstraction in this library is thread safe. Specific thread safety guarantees are documented
+with each abstraction.
+
+It is critical to remember, however, that Ruby is a language of mutable references. *No*
+concurrency library for Ruby can ever prevent the user from making thread safety mistakes (such as
+sharing a mutable object between threads and modifying it on both threads) or from creating
+deadlocks through incorrect use of locks. All the library can do is provide safe abstractions which
+encourage safe practices. Concurrent Ruby provides more safe concurrency abstractions than any
+other Ruby library, many of which support the mantra of
+["Do not communicate by sharing memory; instead, share memory by communicating"](https://blog.golang.org/share-memory-by-communicating).
+Concurrent Ruby is also the only Ruby library which provides a full suite of thread safe and
+immutable variable types and data structures.
+
+We've also initiated discussion to document [memory model](docs-source/synchronization.md) of Ruby which
+would provide consistent behaviour and guarantees on all four of the main Ruby interpreters
+(MRI/CRuby, JRuby, Rubinius, TruffleRuby).
+
+## Features & Documentation
+
+**The primary site for documentation is the automatically generated
+[API documentation](http://ruby-concurrency.github.io/concurrent-ruby/index.html) which is up to
+date with latest release.** This readme matches the master so may contain new stuff not yet
+released.
+
+We also have a [IRC (gitter)](https://gitter.im/ruby-concurrency/concurrent-ruby).
+
+### Versioning
+
+* `concurrent-ruby` uses [Semantic Versioning](http://semver.org/)
+* `concurrent-ruby-ext` has always same version as `concurrent-ruby`
+* `concurrent-ruby-edge` will always be 0.y.z therefore following
+ [point 4](http://semver.org/#spec-item-4) applies *"Major version zero
+ (0.y.z) is for initial development. Anything may change at any time. The
+ public API should not be considered stable."* However we additionally use
+ following rules:
+ * Minor version increment means incompatible changes were made
+ * Patch version increment means only compatible changes were made
+
+
+#### General-purpose Concurrency Abstractions
+
+* [Async](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Async.html):
+ A mixin module that provides simple asynchronous behavior to a class. Loosely based on Erlang's
+ [gen_server](http://www.erlang.org/doc/man/gen_server.html).
+* [ScheduledTask](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ScheduledTask.html):
+ Like a Future scheduled for a specific future time.
+* [TimerTask](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/TimerTask.html):
+ A Thread that periodically wakes up to perform work at regular intervals.
+* [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html):
+ Unified implementation of futures and promises which combines features of previous `Future`,
+ `Promise`, `IVar`, `Event`, `dataflow`, `Delay`, and (partially) `TimerTask` into a single
+ framework. It extensively uses the new synchronization layer to make all the features
+ **non-blocking** and **lock-free**, with the exception of obviously blocking operations like
+ `#wait`, `#value`. It also offers better performance.
+
+#### Thread-safe Value Objects, Structures, and Collections
+
+Collection classes that were originally part of the (deprecated) `thread_safe` gem:
+
+* [Array](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Array.html) A thread-safe
+ subclass of Ruby's standard [Array](http://ruby-doc.org/core/Array.html).
+* [Hash](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Hash.html) A thread-safe
+ subclass of Ruby's standard [Hash](http://ruby-doc.org/core/Hash.html).
+* [Set](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Set.html) A thread-safe
+ subclass of Ruby's standard [Set](http://ruby-doc.org/stdlib-2.4.0/libdoc/set/rdoc/Set.html).
+* [Map](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Map.html) A hash-like object
+ that should have much better performance characteristics, especially under high concurrency,
+ than `Concurrent::Hash`.
+* [Tuple](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Tuple.html) A fixed size
+ array with volatile (synchronized, thread safe) getters/setters.
+
+Value objects inspired by other languages:
+
+* [Maybe](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Maybe.html) A thread-safe,
+ immutable object representing an optional value, based on
+ [Haskell Data.Maybe](https://hackage.haskell.org/package/base-4.2.0.1/docs/Data-Maybe.html).
+
+Structure classes derived from Ruby's [Struct](http://ruby-doc.org/core/Struct.html):
+
+* [ImmutableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ImmutableStruct.html)
+ Immutable struct where values are set at construction and cannot be changed later.
+* [MutableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/MutableStruct.html)
+ Synchronized, mutable struct where values can be safely changed at any time.
+* [SettableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/SettableStruct.html)
+ Synchronized, write-once struct where values can be set at most once, either at construction
+ or any time thereafter.
+
+Thread-safe variables:
+
+* [Agent](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Agent.html): A way to
+ manage shared, mutable, *asynchronous*, independent state. Based on Clojure's
+ [Agent](http://clojure.org/agents).
+* [Atom](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Atom.html): A way to manage
+ shared, mutable, *synchronous*, independent state. Based on Clojure's
+ [Atom](http://clojure.org/atoms).
+* [AtomicBoolean](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicBoolean.html)
+ A boolean value that can be updated atomically.
+* [AtomicFixnum](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicFixnum.html)
+ A numeric value that can be updated atomically.
+* [AtomicReference](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicReference.html)
+ An object reference that may be updated atomically.
+* [Exchanger](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Exchanger.html)
+ A synchronization point at which threads can pair and swap elements within pairs. Based on
+ Java's [Exchanger](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.html).
+* [MVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/MVar.html) A synchronized
+ single element container. Based on Haskell's
+ [MVar](https://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Concurrent-MVar.html) and
+ Scala's [MVar](http://docs.typelevel.org/api/scalaz/nightly/index.html#scalaz.concurrent.MVar$).
+* [ThreadLocalVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ThreadLocalVar.html)
+ A variable where the value is different for each thread.
+* [TVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/TVar.html) A transactional
+ variable implementing software transactional memory (STM). Based on Clojure's
+ [Ref](http://clojure.org/refs).
+
+#### Java-inspired ThreadPools and Other Executors
+
+* See the [thread pool](http://ruby-concurrency.github.io/concurrent-ruby/master/file.thread_pools.html)
+ overview, which also contains a list of other Executors available.
+
+#### Thread Synchronization Classes and Algorithms
+
+* [CountDownLatch](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/CountDownLatch.html)
+ A synchronization object that allows one thread to wait on multiple other threads.
+* [CyclicBarrier](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/CyclicBarrier.html)
+ A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point.
+* [Event](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Event.html) Old school
+ kernel-style event.
+* [ReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ReadWriteLock.html)
+ A lock that supports multiple readers but only one writer.
+* [ReentrantReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ReentrantReadWriteLock.html)
+ A read/write lock with reentrant and upgrade features.
+* [Semaphore](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Semaphore.html)
+ A counting-based locking mechanism that uses permits.
+* [AtomicMarkableReference](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicMarkableReference.html)
+
+#### Deprecated
+
+Deprecated features are still available and bugs are being fixed, but new features will not be added.
+
+* ~~[Future](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Future.html):
+ An asynchronous operation that produces a value.~~ Replaced by
+ [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
+ * ~~[.dataflow](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent.html#dataflow-class_method):
+ Built on Futures, Dataflow allows you to create a task that will be scheduled when all of
+ its data dependencies are available.~~ Replaced by
+ [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
+* ~~[Promise](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promise.html): Similar
+ to Futures, with more features.~~ Replaced by
+ [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
+* ~~[Delay](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Delay.html) Lazy evaluation
+ of a block yielding an immutable result. Based on Clojure's
+ [delay](https://clojuredocs.org/clojure.core/delay).~~ Replaced by
+ [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
+* ~~[IVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/IVar.html) Similar to a
+ "future" but can be manually assigned once, after which it becomes immutable.~~ Replaced by
+ [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
+
+### Edge Features
+
+These are available in the `concurrent-ruby-edge` companion gem.
+
+These features are under active development and may change frequently. They are expected not to
+keep backward compatibility (there may also lack tests and documentation). Semantic versions will
+be obeyed though. Features developed in `concurrent-ruby-edge` are expected to move to
+`concurrent-ruby` when final.
+
+* [Actor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Actor.html): Implements
+ the Actor Model, where concurrent actors exchange messages.
+ *Status: Partial documentation and tests; depends on new future/promise framework; stability is good.*
+* [Channel](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Channel.html):
+ Communicating Sequential Processes ([CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)).
+ Functionally equivalent to Go [channels](https://tour.golang.org/concurrency/2) with additional
+ inspiration from Clojure [core.async](https://clojure.github.io/core.async/).
+ *Status: Partial documentation and tests.*
+* [LazyRegister](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/LazyRegister.html)
+* [LockFreeLinkedSet](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Edge/LockFreeLinkedSet.html)
+ *Status: will be moved to core soon.*
+* [LockFreeStack](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/LockFreeStack.html)
+ *Status: missing documentation and tests.*
+* [Promises::Channel](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises/Channel.html)
+ A first in first out channel that accepts messages with push family of methods and returns
+ messages with pop family of methods.
+ Pop and push operations can be represented as futures, see `#pop_op` and `#push_op`.
+ The capacity of the channel can be limited to support back pressure, use capacity option in `#initialize`.
+ `#pop` method blocks ans `#pop_op` returns pending future if there is no message in the channel.
+ If the capacity is limited the `#push` method blocks and `#push_op` returns pending future.
+* [Cancellation](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Cancellation.html)
+ The Cancellation abstraction provides cooperative cancellation.
+
+ The standard methods `Thread#raise` of `Thread#kill` available in Ruby
+ are very dangerous (see linked the blog posts bellow).
+ Therefore concurrent-ruby provides an alternative.
+
+ *
+ *
+ *
+
+ It provides an object which represents a task which can be executed,
+ the task has to get the reference to the object and periodically cooperatively check that it is not cancelled.
+ Good practices to make tasks cancellable:
+ * check cancellation every cycle of a loop which does significant work,
+ * do all blocking actions in a loop with a timeout then on timeout check cancellation
+ and if ok block again with the timeout
+* [Throttle](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Throttle.html)
+ A tool managing concurrency level of tasks.
+* [ErlangActor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ErlangActor.html)
+ Actor implementation which precisely matches Erlang actor behaviour.
+ Requires at least Ruby 2.1 otherwise it's not loaded.
+* [WrappingExecutor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/WrappingExecutor.html)
+ A delegating executor which modifies each task before the task is given to
+ the target executor it delegates to.
+
+## Supported Ruby versions
+
+* MRI 2.0 and above
+* JRuby 9000
+* TruffleRuby are supported.
+* Any Ruby interpreter that is compliant with Ruby 2.0 or newer.
+
+Actually we still support mri 1.9.3 and jruby 1.7.27 but we are looking at ways how to drop the support.
+Java 8 is preferred for JRuby but every Java version on which JRuby 9000 runs is supported.
+
+The legacy support for Rubinius is kept but it is no longer maintained, if you would like to help
+please respond to [#739](https://github.com/ruby-concurrency/concurrent-ruby/issues/739).
+
+## Usage
+
+Everything within this gem can be loaded simply by requiring it:
+
+```ruby
+require 'concurrent'
+```
+
+*Requiring only specific abstractions from Concurrent Ruby is not yet supported.*
+
+To use the tools in the Edge gem it must be required separately:
+
+```ruby
+require 'concurrent-edge'
+```
+
+If the library does not behave as expected, `Concurrent.use_stdlib_logger(Logger::DEBUG)` could
+help to reveal the problem.
+
+## Installation
+
+```shell
+gem install concurrent-ruby
+```
+
+or add the following line to Gemfile:
+
+```ruby
+gem 'concurrent-ruby', require: 'concurrent'
+```
+
+and run `bundle install` from your shell.
+
+### Edge Gem Installation
+
+The Edge gem must be installed separately from the core gem:
+
+```shell
+gem install concurrent-ruby-edge
+```
+
+or add the following line to Gemfile:
+
+```ruby
+gem 'concurrent-ruby-edge', require: 'concurrent-edge'
+```
+
+and run `bundle install` from your shell.
+
+
+### C Extensions for MRI
+
+Potential performance improvements may be achieved under MRI by installing optional C extensions.
+To minimise installation errors the C extensions are available in the `concurrent-ruby-ext`
+extension gem. `concurrent-ruby` and `concurrent-ruby-ext` are always released together with same
+version. Simply install the extension gem too:
+
+```ruby
+gem install concurrent-ruby-ext
+```
+
+or add the following line to Gemfile:
+
+```ruby
+gem 'concurrent-ruby-ext'
+```
+
+and run `bundle install` from your shell.
+
+In code it is only necessary to
+
+```ruby
+require 'concurrent'
+```
+
+The `concurrent-ruby` gem will automatically detect the presence of the `concurrent-ruby-ext` gem
+and load the appropriate C extensions.
+
+#### Note For gem developers
+
+No gems should depend on `concurrent-ruby-ext`. Doing so will force C extensions on your users. The
+best practice is to depend on `concurrent-ruby` and let users to decide if they want C extensions.
+
+## Maintainers
+
+* [Petr Chalupa](https://github.com/pitr-ch) (lead maintainer, point-of-contact)
+* [Jerry D'Antonio](https://github.com/jdantonio) (creator)
+* [Chris Seaton](https://github.com/chrisseaton)
+
+### Special Thanks to
+
+* [Brian Durand](https://github.com/bdurand) for the `ref` gem
+* [Charles Oliver Nutter](https://github.com/headius) for the `atomic` and `thread_safe` gems
+* [thedarkone](https://github.com/thedarkone) for the `thread_safe` gem
+
+and to the past maintainers
+
+* [Michele Della Torre](https://github.com/mighe)
+* [Paweł Obrok](https://github.com/obrok)
+* [Lucas Allan](https://github.com/lucasallan)
+
+and to [Ruby Association](https://www.ruby.or.jp/en/) for sponsoring a project
+["Enhancing Ruby’s concurrency tooling"](https://www.ruby.or.jp/en/news/20181106) in 2018.
+
+## License and Copyright
+
+*Concurrent Ruby* is free software released under the
+[MIT License](http://www.opensource.org/licenses/MIT).
+
+The *Concurrent Ruby* [logo](https://raw.githubusercontent.com/ruby-concurrency/concurrent-ruby/master/docs-source/logo/concurrent-ruby-logo-300x300.png) was
+designed by [David Jones](https://twitter.com/zombyboy). It is Copyright © 2014
+[Jerry D'Antonio](https://twitter.com/jerrydantonio). All Rights Reserved.
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/Rakefile b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/Rakefile
new file mode 100644
index 000000000000..7c0b4af9a538
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/Rakefile
@@ -0,0 +1,334 @@
+require_relative 'lib/concurrent-ruby/concurrent/version'
+require_relative 'lib/concurrent-ruby-edge/concurrent/edge/version'
+require_relative 'lib/concurrent-ruby/concurrent/utility/engine'
+
+if Concurrent.ruby_version :<, 2, 0, 0
+ # @!visibility private
+ module Kernel
+ def __dir__
+ File.dirname __FILE__
+ end
+ end
+end
+
+core_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby.gemspec')
+ext_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby-ext.gemspec')
+edge_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby-edge.gemspec')
+
+require 'rake/javaextensiontask'
+
+ENV['JRUBY_HOME'] = ENV['CONCURRENT_JRUBY_HOME'] if ENV['CONCURRENT_JRUBY_HOME'] && !Concurrent.on_jruby?
+
+Rake::JavaExtensionTask.new('concurrent_ruby', core_gemspec) do |ext|
+ ext.ext_dir = 'ext/concurrent-ruby'
+ ext.lib_dir = 'lib/concurrent-ruby/concurrent'
+end
+
+unless Concurrent.on_jruby?
+ require 'rake/extensiontask'
+
+ Rake::ExtensionTask.new('concurrent_ruby_ext', ext_gemspec) do |ext|
+ ext.ext_dir = 'ext/concurrent-ruby-ext'
+ ext.lib_dir = 'lib/concurrent-ruby/concurrent'
+ ext.source_pattern = '*.{c,h}'
+
+ ext.cross_compile = true
+ ext.cross_platform = ['x86-mingw32', 'x64-mingw32']
+ end
+end
+
+require 'rake_compiler_dock'
+namespace :repackage do
+ desc '* with Windows fat distributions'
+ task :all do
+ Dir.chdir(__dir__) do
+ # store gems in vendor cache for docker
+ sh 'bundle package'
+
+ # build only the jar file not the whole gem for java platform, the jar is part the concurrent-ruby-x.y.z.gem
+ Rake::Task['lib/concurrent-ruby/concurrent/concurrent_ruby.jar'].invoke
+
+ # build all gem files
+ %w[x86-mingw32 x64-mingw32].each do |plat|
+ RakeCompilerDock.sh "bundle install --local && bundle exec rake native:#{plat} gem --trace", platform: plat
+ end
+ end
+ end
+end
+
+require 'rubygems'
+require 'rubygems/package_task'
+
+Gem::PackageTask.new(core_gemspec) {} if core_gemspec
+Gem::PackageTask.new(ext_gemspec) {} if ext_gemspec && !Concurrent.on_jruby?
+Gem::PackageTask.new(edge_gemspec) {} if edge_gemspec
+
+CLEAN.include('lib/concurrent-ruby/concurrent/2.*', 'lib/concurrent-ruby/concurrent/*.jar')
+
+begin
+ require 'rspec'
+ require 'rspec/core/rake_task'
+
+ RSpec::Core::RakeTask.new(:spec)
+
+ namespace :spec do
+ desc '* Configured for ci'
+ RSpec::Core::RakeTask.new(:ci) do |t|
+ options = %w[ --color
+ --backtrace
+ --order defined
+ --format documentation
+ --tag ~notravis ]
+ t.rspec_opts = [*options].join(' ')
+ end
+
+ desc '* test packaged and installed gems instead of local files'
+ task :installed do
+ Dir.chdir(__dir__) do
+ sh "gem install pkg/concurrent-ruby-#{Concurrent::VERSION}.gem"
+ sh "gem install pkg/concurrent-ruby-ext-#{Concurrent::VERSION}.gem" if Concurrent.on_cruby?
+ sh "gem install pkg/concurrent-ruby-edge-#{Concurrent::EDGE_VERSION}.gem"
+ ENV['NO_PATH'] = 'true'
+ sh 'bundle update'
+ sh 'bundle exec rake spec:ci'
+ end
+ end
+ end
+
+ desc 'executed in CI'
+ task :ci => [:compile, 'spec:ci']
+
+ task :default => [:clobber, :compile, :spec]
+rescue LoadError => e
+ puts 'RSpec is not installed, skipping test task definitions: ' + e.message
+end
+
+current_yard_version_name = Concurrent::VERSION
+
+begin
+ require 'yard'
+ require 'md_ruby_eval'
+ require_relative 'support/yard_full_types'
+
+ common_yard_options = ['--no-yardopts',
+ '--no-document',
+ '--no-private',
+ '--embed-mixins',
+ '--markup', 'markdown',
+ '--title', 'Concurrent Ruby',
+ '--template', 'default',
+ '--template-path', 'yard-template',
+ '--default-return', 'undocumented']
+
+ desc 'Generate YARD Documentation (signpost, master)'
+ task :yard => ['yard:signpost', 'yard:master']
+
+ namespace :yard do
+
+ desc '* eval markdown files'
+ task :eval_md do
+ Dir.chdir File.join(__dir__, 'docs-source') do
+ sh 'bundle exec md-ruby-eval --auto'
+ end
+ end
+
+ task :update_readme do
+ Dir.chdir __dir__ do
+ content = File.read(File.join('README.md')).
+ gsub(/\[([\w ]+)\]\(http:\/\/ruby-concurrency\.github\.io\/concurrent-ruby\/master\/.*\)/) do |_|
+ case $1
+ when 'LockFreeLinkedSet'
+ "{Concurrent::Edge::#{$1} #{$1}}"
+ when '.dataflow'
+ '{Concurrent.dataflow Concurrent.dataflow}'
+ when 'thread pool'
+ '{file:thread_pools.md thread pool}'
+ else
+ "{Concurrent::#{$1} #{$1}}"
+ end
+ end
+ FileUtils.mkpath 'tmp'
+ File.write 'tmp/README.md', content
+ end
+ end
+
+ define_yard_task = -> name do
+ output_dir = "docs/#{name}"
+
+ removal_name = "remove.#{name}"
+ task removal_name do
+ Dir.chdir __dir__ do
+ FileUtils.rm_rf output_dir
+ end
+ end
+
+ desc "* of #{name} into subdir #{name}"
+ YARD::Rake::YardocTask.new(name) do |yard|
+ yard.options.push(
+ '--output-dir', output_dir,
+ '--main', 'tmp/README.md',
+ *common_yard_options)
+ yard.files = ['./lib/concurrent-ruby/**/*.rb',
+ './lib/concurrent-ruby-edge/**/*.rb',
+ './ext/concurrent_ruby_ext/**/*.c',
+ '-',
+ 'docs-source/thread_pools.md',
+ 'docs-source/promises.out.md',
+ 'docs-source/medium-example.out.rb',
+ 'LICENSE.txt',
+ 'CHANGELOG.md']
+ end
+ Rake::Task[name].prerequisites.push removal_name,
+ # 'yard:eval_md',
+ 'yard:update_readme'
+ end
+
+ define_yard_task.call current_yard_version_name
+ define_yard_task.call 'master'
+
+ desc "* signpost for versions"
+ YARD::Rake::YardocTask.new(:signpost) do |yard|
+ yard.options.push(
+ '--output-dir', 'docs',
+ '--main', 'docs-source/signpost.md',
+ *common_yard_options)
+ yard.files = ['no-lib']
+ end
+
+ define_uptodate_task = -> name do
+ namespace name do
+ desc "** ensure that #{name} generated documentation is matching the source code"
+ task :uptodate do
+ Dir.chdir(__dir__) do
+ begin
+ FileUtils.cp_r 'docs', 'docs-copy', verbose: true
+ Rake::Task["yard:#{name}"].invoke
+ sh 'diff -r docs/ docs-copy/' do |ok, res|
+ unless ok
+ begin
+ STDOUT.puts 'Command failed. Continue? (y/n)'
+ input = STDIN.gets.strip.downcase
+ end until %w(y n).include?(input)
+ exit 1 if input == 'n'
+ end
+ end
+ ensure
+ FileUtils.rm_rf 'docs-copy', verbose: true
+ end
+ end
+ end
+ end
+ end
+
+ define_uptodate_task.call current_yard_version_name
+ define_uptodate_task.call 'master'
+ end
+
+rescue LoadError => e
+ puts 'YARD is not installed, skipping documentation task definitions: ' + e.message
+end
+
+desc 'build, test, and publish the gem'
+task :release => ['release:checks', 'release:build', 'release:test', 'release:publish']
+
+namespace :release do
+ # Depends on environment of @pitr-ch
+
+ mri_version = '2.6.5'
+ jruby_version = 'jruby-9.2.9.0'
+
+ task :checks => "yard:#{current_yard_version_name}:uptodate" do
+ Dir.chdir(__dir__) do
+ sh 'test -z "$(git status --porcelain)"' do |ok, res|
+ unless ok
+ begin
+ STDOUT.puts 'Command failed. Continue? (y/n)'
+ input = STDIN.gets.strip.downcase
+ end until %w(y n).include?(input)
+ exit 1 if input == 'n'
+ end
+ end
+ sh 'git fetch'
+ sh 'test $(git show-ref --verify --hash refs/heads/master) = ' +
+ '$(git show-ref --verify --hash refs/remotes/origin/master)' do |ok, res|
+ unless ok
+ begin
+ STDOUT.puts 'Command failed. Continue? (y/n)'
+ input = STDIN.gets.strip.downcase
+ end until %w(y n).include?(input)
+ exit 1 if input == 'n'
+ end
+ end
+ end
+ end
+
+ desc '* build all *.gem files necessary for release'
+ task :build => [:clobber, 'repackage:all']
+
+ desc '* test actual installed gems instead of cloned repository on MRI and JRuby'
+ task :test do
+ Dir.chdir(__dir__) do
+ old = ENV['RBENV_VERSION']
+
+ ENV['RBENV_VERSION'] = mri_version
+ sh 'rbenv version'
+ sh 'bundle exec rake spec:installed'
+
+ ENV['RBENV_VERSION'] = jruby_version
+ sh 'rbenv version'
+ sh 'bundle exec rake spec:installed'
+
+ puts 'Windows build is untested'
+
+ ENV['RBENV_VERSION'] = old
+ end
+ end
+
+ desc '* do all nested steps'
+ task :publish => ['publish:ask', 'publish:tag', 'publish:rubygems', 'publish:post_steps']
+
+ namespace :publish do
+ publish_edge = false
+
+ task :ask do
+ begin
+ STDOUT.puts 'Do you want to publish anything? (y/n)'
+ input = STDIN.gets.strip.downcase
+ end until %w(y n).include?(input)
+ exit 1 if input == 'n'
+ begin
+ STDOUT.puts 'Do you want to publish edge? (y/n)'
+ input = STDIN.gets.strip.downcase
+ end until %w(y n).include?(input)
+ publish_edge = input == 'y'
+ end
+
+ desc '** tag HEAD with current version and push to github'
+ task :tag => :ask do
+ Dir.chdir(__dir__) do
+ sh "git tag v#{Concurrent::VERSION}"
+ sh "git push origin v#{Concurrent::VERSION}"
+ sh "git tag edge-v#{Concurrent::EDGE_VERSION}" if publish_edge
+ sh "git push origin edge-v#{Concurrent::EDGE_VERSION}" if publish_edge
+ end
+ end
+
+ desc '** push all *.gem files to rubygems'
+ task :rubygems => :ask do
+ Dir.chdir(__dir__) do
+ sh "gem push pkg/concurrent-ruby-#{Concurrent::VERSION}.gem"
+ sh "gem push pkg/concurrent-ruby-edge-#{Concurrent::EDGE_VERSION}.gem" if publish_edge
+ sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}.gem"
+ sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}-x64-mingw32.gem"
+ sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}-x86-mingw32.gem"
+ end
+ end
+
+ desc '** print post release steps'
+ task :post_steps do
+ puts 'Manually: create a release on GitHub with relevant changelog part'
+ puts 'Manually: send email same as release with relevant changelog part'
+ puts 'Manually: tweet'
+ end
+ end
+end
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/ConcurrentRubyService.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/ConcurrentRubyService.java
new file mode 100644
index 000000000000..fb6be96d377e
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/ConcurrentRubyService.java
@@ -0,0 +1,17 @@
+import org.jruby.Ruby;
+import org.jruby.runtime.load.BasicLibraryService;
+
+import java.io.IOException;
+
+public class ConcurrentRubyService implements BasicLibraryService {
+
+ public boolean basicLoad(final Ruby runtime) throws IOException {
+ new com.concurrent_ruby.ext.AtomicReferenceLibrary().load(runtime, false);
+ new com.concurrent_ruby.ext.JavaAtomicBooleanLibrary().load(runtime, false);
+ new com.concurrent_ruby.ext.JavaAtomicFixnumLibrary().load(runtime, false);
+ new com.concurrent_ruby.ext.JavaSemaphoreLibrary().load(runtime, false);
+ new com.concurrent_ruby.ext.SynchronizationLibrary().load(runtime, false);
+ new com.concurrent_ruby.ext.JRubyMapBackendLibrary().load(runtime, false);
+ return true;
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java
new file mode 100644
index 000000000000..dfa9e7704e5e
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java
@@ -0,0 +1,175 @@
+package com.concurrent_ruby.ext;
+
+import java.lang.reflect.Field;
+import java.io.IOException;
+import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyModule;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyObject;
+import org.jruby.anno.JRubyClass;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.runtime.load.Library;
+
+/**
+ * This library adds an atomic reference type to JRuby for use in the atomic
+ * library. We do a native version to avoid the implicit value coercion that
+ * normally happens through JI.
+ *
+ * @author headius
+ */
+public class AtomicReferenceLibrary implements Library {
+ public void load(Ruby runtime, boolean wrap) throws IOException {
+ RubyModule concurrentMod = runtime.defineModule("Concurrent");
+ RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicReference", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
+ try {
+ sun.misc.Unsafe.class.getMethod("getAndSetObject", Object.class);
+ atomicCls.setAllocator(JRUBYREFERENCE8_ALLOCATOR);
+ } catch (Exception e) {
+ // leave it as Java 6/7 version
+ }
+ atomicCls.defineAnnotatedMethods(JRubyReference.class);
+ }
+
+ private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JRubyReference(runtime, klazz);
+ }
+ };
+
+ private static final ObjectAllocator JRUBYREFERENCE8_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JRubyReference8(runtime, klazz);
+ }
+ };
+
+ @JRubyClass(name="JRubyReference", parent="Object")
+ public static class JRubyReference extends RubyObject {
+ volatile IRubyObject reference;
+
+ static final sun.misc.Unsafe UNSAFE;
+ static final long referenceOffset;
+
+ static {
+ try {
+ UNSAFE = UnsafeHolder.U;
+ Class k = JRubyReference.class;
+ referenceOffset = UNSAFE.objectFieldOffset(k.getDeclaredField("reference"));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public JRubyReference(Ruby runtime, RubyClass klass) {
+ super(runtime, klass);
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context) {
+ UNSAFE.putObject(this, referenceOffset, context.nil);
+ return context.nil;
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context, IRubyObject value) {
+ UNSAFE.putObject(this, referenceOffset, value);
+ return context.nil;
+ }
+
+ @JRubyMethod(name = {"get", "value"})
+ public IRubyObject get() {
+ return reference;
+ }
+
+ @JRubyMethod(name = {"set", "value="})
+ public IRubyObject set(IRubyObject newValue) {
+ UNSAFE.putObjectVolatile(this, referenceOffset, newValue);
+ return newValue;
+ }
+
+ @JRubyMethod(name = {"compare_and_set", "compare_and_swap"})
+ public IRubyObject compare_and_set(ThreadContext context, IRubyObject expectedValue, IRubyObject newValue) {
+ Ruby runtime = context.runtime;
+
+ if (expectedValue instanceof RubyNumeric) {
+ // numerics are not always idempotent in Ruby, so we need to do slower logic
+ return compareAndSetNumeric(context, expectedValue, newValue);
+ }
+
+ return runtime.newBoolean(UNSAFE.compareAndSwapObject(this, referenceOffset, expectedValue, newValue));
+ }
+
+ @JRubyMethod(name = {"get_and_set", "swap"})
+ public IRubyObject get_and_set(ThreadContext context, IRubyObject newValue) {
+ // less-efficient version for Java 6 and 7
+ while (true) {
+ IRubyObject oldValue = get();
+ if (UNSAFE.compareAndSwapObject(this, referenceOffset, oldValue, newValue)) {
+ return oldValue;
+ }
+ }
+ }
+
+ private IRubyObject compareAndSetNumeric(ThreadContext context, IRubyObject expectedValue, IRubyObject newValue) {
+ Ruby runtime = context.runtime;
+
+ // loop until:
+ // * reference CAS would succeed for same-valued objects
+ // * current and expected have different values as determined by #equals
+ while (true) {
+ IRubyObject current = reference;
+
+ if (!(current instanceof RubyNumeric)) {
+ // old value is not numeric, CAS fails
+ return runtime.getFalse();
+ }
+
+ RubyNumeric currentNumber = (RubyNumeric)current;
+ if (!currentNumber.equals(expectedValue)) {
+ // current number does not equal expected, fail CAS
+ return runtime.getFalse();
+ }
+
+ // check that current has not changed, or else allow loop to repeat
+ boolean success = UNSAFE.compareAndSwapObject(this, referenceOffset, current, newValue);
+ if (success) {
+ // value is same and did not change in interim...success
+ return runtime.getTrue();
+ }
+ }
+ }
+ }
+
+ private static final class UnsafeHolder {
+ private UnsafeHolder(){}
+
+ public static final sun.misc.Unsafe U = loadUnsafe();
+
+ private static sun.misc.Unsafe loadUnsafe() {
+ try {
+ Class unsafeClass = Class.forName("sun.misc.Unsafe");
+ Field f = unsafeClass.getDeclaredField("theUnsafe");
+ f.setAccessible(true);
+ return (sun.misc.Unsafe) f.get(null);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+ }
+
+ public static class JRubyReference8 extends JRubyReference {
+ public JRubyReference8(Ruby runtime, RubyClass klass) {
+ super(runtime, klass);
+ }
+
+ @Override
+ public IRubyObject get_and_set(ThreadContext context, IRubyObject newValue) {
+ // efficient version for Java 8
+ return (IRubyObject)UNSAFE.getAndSetObject(this, referenceOffset, newValue);
+ }
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java
new file mode 100644
index 000000000000..a09f9162eea2
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java
@@ -0,0 +1,248 @@
+package com.concurrent_ruby.ext;
+
+import org.jruby.*;
+import org.jruby.anno.JRubyClass;
+import org.jruby.anno.JRubyMethod;
+import com.concurrent_ruby.ext.jsr166e.ConcurrentHashMap;
+import com.concurrent_ruby.ext.jsr166e.ConcurrentHashMapV8;
+import com.concurrent_ruby.ext.jsr166e.nounsafe.*;
+import org.jruby.runtime.Block;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.runtime.load.Library;
+
+import java.io.IOException;
+import java.util.Map;
+
+import static org.jruby.runtime.Visibility.PRIVATE;
+
+/**
+ * Native Java implementation to avoid the JI overhead.
+ *
+ * @author thedarkone
+ */
+public class JRubyMapBackendLibrary implements Library {
+ public void load(Ruby runtime, boolean wrap) throws IOException {
+
+ RubyModule concurrentMod = runtime.defineModule("Concurrent");
+ RubyModule thread_safeMod = concurrentMod.defineModuleUnder("Collection");
+ RubyClass jrubyRefClass = thread_safeMod.defineClassUnder("JRubyMapBackend", runtime.getObject(), BACKEND_ALLOCATOR);
+ jrubyRefClass.setAllocator(BACKEND_ALLOCATOR);
+ jrubyRefClass.defineAnnotatedMethods(JRubyMapBackend.class);
+ }
+
+ private static final ObjectAllocator BACKEND_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JRubyMapBackend(runtime, klazz);
+ }
+ };
+
+ @JRubyClass(name="JRubyMapBackend", parent="Object")
+ public static class JRubyMapBackend extends RubyObject {
+ // Defaults used by the CHM
+ static final int DEFAULT_INITIAL_CAPACITY = 16;
+ static final float DEFAULT_LOAD_FACTOR = 0.75f;
+
+ public static final boolean CAN_USE_UNSAFE_CHM = canUseUnsafeCHM();
+
+ private ConcurrentHashMap map;
+
+ private static ConcurrentHashMap newCHM(int initialCapacity, float loadFactor) {
+ if (CAN_USE_UNSAFE_CHM) {
+ return new ConcurrentHashMapV8(initialCapacity, loadFactor);
+ } else {
+ return new com.concurrent_ruby.ext.jsr166e.nounsafe.ConcurrentHashMapV8(initialCapacity, loadFactor);
+ }
+ }
+
+ private static ConcurrentHashMap newCHM() {
+ return newCHM(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);
+ }
+
+ private static boolean canUseUnsafeCHM() {
+ try {
+ new com.concurrent_ruby.ext.jsr166e.ConcurrentHashMapV8(); // force class load and initialization
+ return true;
+ } catch (Throwable t) { // ensuring we really do catch everything
+ // Doug's Unsafe setup errors always have this "Could not ini.." message
+ if (isCausedBySecurityException(t)) {
+ return false;
+ }
+ throw (t instanceof RuntimeException ? (RuntimeException) t : new RuntimeException(t));
+ }
+ }
+
+ private static boolean isCausedBySecurityException(Throwable t) {
+ while (t != null) {
+ if ((t.getMessage() != null && t.getMessage().contains("Could not initialize intrinsics")) || t instanceof SecurityException) {
+ return true;
+ }
+ t = t.getCause();
+ }
+ return false;
+ }
+
+ public JRubyMapBackend(Ruby runtime, RubyClass klass) {
+ super(runtime, klass);
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context) {
+ map = newCHM();
+ return context.getRuntime().getNil();
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context, IRubyObject options) {
+ map = toCHM(context, options);
+ return context.getRuntime().getNil();
+ }
+
+ private ConcurrentHashMap toCHM(ThreadContext context, IRubyObject options) {
+ Ruby runtime = context.getRuntime();
+ if (!options.isNil() && options.respondsTo("[]")) {
+ IRubyObject rInitialCapacity = options.callMethod(context, "[]", runtime.newSymbol("initial_capacity"));
+ IRubyObject rLoadFactor = options.callMethod(context, "[]", runtime.newSymbol("load_factor"));
+ int initialCapacity = !rInitialCapacity.isNil() ? RubyNumeric.num2int(rInitialCapacity.convertToInteger()) : DEFAULT_INITIAL_CAPACITY;
+ float loadFactor = !rLoadFactor.isNil() ? (float)RubyNumeric.num2dbl(rLoadFactor.convertToFloat()) : DEFAULT_LOAD_FACTOR;
+ return newCHM(initialCapacity, loadFactor);
+ } else {
+ return newCHM();
+ }
+ }
+
+ @JRubyMethod(name = "[]", required = 1)
+ public IRubyObject op_aref(ThreadContext context, IRubyObject key) {
+ IRubyObject value;
+ return ((value = map.get(key)) == null) ? context.getRuntime().getNil() : value;
+ }
+
+ @JRubyMethod(name = {"[]="}, required = 2)
+ public IRubyObject op_aset(IRubyObject key, IRubyObject value) {
+ map.put(key, value);
+ return value;
+ }
+
+ @JRubyMethod
+ public IRubyObject put_if_absent(IRubyObject key, IRubyObject value) {
+ IRubyObject result = map.putIfAbsent(key, value);
+ return result == null ? getRuntime().getNil() : result;
+ }
+
+ @JRubyMethod
+ public IRubyObject compute_if_absent(final ThreadContext context, final IRubyObject key, final Block block) {
+ return map.computeIfAbsent(key, new ConcurrentHashMap.Fun() {
+ @Override
+ public IRubyObject apply(IRubyObject key) {
+ return block.yieldSpecific(context);
+ }
+ });
+ }
+
+ @JRubyMethod
+ public IRubyObject compute_if_present(final ThreadContext context, final IRubyObject key, final Block block) {
+ IRubyObject result = map.computeIfPresent(key, new ConcurrentHashMap.BiFun() {
+ @Override
+ public IRubyObject apply(IRubyObject key, IRubyObject oldValue) {
+ IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue);
+ return result.isNil() ? null : result;
+ }
+ });
+ return result == null ? context.getRuntime().getNil() : result;
+ }
+
+ @JRubyMethod
+ public IRubyObject compute(final ThreadContext context, final IRubyObject key, final Block block) {
+ IRubyObject result = map.compute(key, new ConcurrentHashMap.BiFun() {
+ @Override
+ public IRubyObject apply(IRubyObject key, IRubyObject oldValue) {
+ IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue);
+ return result.isNil() ? null : result;
+ }
+ });
+ return result == null ? context.getRuntime().getNil() : result;
+ }
+
+ @JRubyMethod
+ public IRubyObject merge_pair(final ThreadContext context, final IRubyObject key, final IRubyObject value, final Block block) {
+ IRubyObject result = map.merge(key, value, new ConcurrentHashMap.BiFun() {
+ @Override
+ public IRubyObject apply(IRubyObject oldValue, IRubyObject newValue) {
+ IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue);
+ return result.isNil() ? null : result;
+ }
+ });
+ return result == null ? context.getRuntime().getNil() : result;
+ }
+
+ @JRubyMethod
+ public RubyBoolean replace_pair(IRubyObject key, IRubyObject oldValue, IRubyObject newValue) {
+ return getRuntime().newBoolean(map.replace(key, oldValue, newValue));
+ }
+
+ @JRubyMethod(name = "key?", required = 1)
+ public RubyBoolean has_key_p(IRubyObject key) {
+ return map.containsKey(key) ? getRuntime().getTrue() : getRuntime().getFalse();
+ }
+
+ @JRubyMethod
+ public IRubyObject key(IRubyObject value) {
+ final IRubyObject key = map.findKey(value);
+ return key == null ? getRuntime().getNil() : key;
+ }
+
+ @JRubyMethod
+ public IRubyObject replace_if_exists(IRubyObject key, IRubyObject value) {
+ IRubyObject result = map.replace(key, value);
+ return result == null ? getRuntime().getNil() : result;
+ }
+
+ @JRubyMethod
+ public IRubyObject get_and_set(IRubyObject key, IRubyObject value) {
+ IRubyObject result = map.put(key, value);
+ return result == null ? getRuntime().getNil() : result;
+ }
+
+ @JRubyMethod
+ public IRubyObject delete(IRubyObject key) {
+ IRubyObject result = map.remove(key);
+ return result == null ? getRuntime().getNil() : result;
+ }
+
+ @JRubyMethod
+ public RubyBoolean delete_pair(IRubyObject key, IRubyObject value) {
+ return getRuntime().newBoolean(map.remove(key, value));
+ }
+
+ @JRubyMethod
+ public IRubyObject clear() {
+ map.clear();
+ return this;
+ }
+
+ @JRubyMethod
+ public IRubyObject each_pair(ThreadContext context, Block block) {
+ for (Map.Entry entry : map.entrySet()) {
+ block.yieldSpecific(context, entry.getKey(), entry.getValue());
+ }
+ return this;
+ }
+
+ @JRubyMethod
+ public RubyFixnum size(ThreadContext context) {
+ return context.getRuntime().newFixnum(map.size());
+ }
+
+ @JRubyMethod
+ public IRubyObject get_or_default(IRubyObject key, IRubyObject defaultValue) {
+ return map.getValueOrDefault(key, defaultValue);
+ }
+
+ @JRubyMethod(visibility = PRIVATE)
+ public JRubyMapBackend initialize_copy(ThreadContext context, IRubyObject other) {
+ map = newCHM();
+ return this;
+ }
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java
new file mode 100644
index 000000000000..b56607626cf8
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java
@@ -0,0 +1,93 @@
+package com.concurrent_ruby.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyBoolean;
+import org.jruby.RubyClass;
+import org.jruby.RubyModule;
+import org.jruby.RubyNil;
+import org.jruby.RubyObject;
+import org.jruby.anno.JRubyClass;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.runtime.load.Library;
+
+import java.io.IOException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+public class JavaAtomicBooleanLibrary implements Library {
+
+ public void load(Ruby runtime, boolean wrap) throws IOException {
+ RubyModule concurrentMod = runtime.defineModule("Concurrent");
+ RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicBoolean", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
+ atomicCls.defineAnnotatedMethods(JavaAtomicBoolean.class);
+ }
+
+ private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JavaAtomicBoolean(runtime, klazz);
+ }
+ };
+
+ @JRubyClass(name = "JavaAtomicBoolean", parent = "Object")
+ public static class JavaAtomicBoolean extends RubyObject {
+
+ private AtomicBoolean atomicBoolean;
+
+ public JavaAtomicBoolean(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context, IRubyObject value) {
+ atomicBoolean = new AtomicBoolean(convertRubyBooleanToJavaBoolean(value));
+ return context.nil;
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context) {
+ atomicBoolean = new AtomicBoolean();
+ return context.nil;
+ }
+
+ @JRubyMethod(name = "value")
+ public IRubyObject value() {
+ return getRuntime().newBoolean(atomicBoolean.get());
+ }
+
+ @JRubyMethod(name = "true?")
+ public IRubyObject isAtomicTrue() {
+ return getRuntime().newBoolean(atomicBoolean.get());
+ }
+
+ @JRubyMethod(name = "false?")
+ public IRubyObject isAtomicFalse() {
+ return getRuntime().newBoolean((atomicBoolean.get() == false));
+ }
+
+ @JRubyMethod(name = "value=")
+ public IRubyObject setAtomic(ThreadContext context, IRubyObject newValue) {
+ atomicBoolean.set(convertRubyBooleanToJavaBoolean(newValue));
+ return context.nil;
+ }
+
+ @JRubyMethod(name = "make_true")
+ public IRubyObject makeTrue() {
+ return getRuntime().newBoolean(atomicBoolean.compareAndSet(false, true));
+ }
+
+ @JRubyMethod(name = "make_false")
+ public IRubyObject makeFalse() {
+ return getRuntime().newBoolean(atomicBoolean.compareAndSet(true, false));
+ }
+
+ private boolean convertRubyBooleanToJavaBoolean(IRubyObject newValue) {
+ if (newValue instanceof RubyBoolean.False || newValue instanceof RubyNil) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java
new file mode 100644
index 000000000000..672bfc048bb0
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java
@@ -0,0 +1,113 @@
+package com.concurrent_ruby.ext;
+
+import java.io.IOException;
+import java.util.concurrent.atomic.AtomicLong;
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyFixnum;
+import org.jruby.RubyModule;
+import org.jruby.RubyObject;
+import org.jruby.anno.JRubyClass;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.runtime.load.Library;
+import org.jruby.runtime.Block;
+
+public class JavaAtomicFixnumLibrary implements Library {
+
+ public void load(Ruby runtime, boolean wrap) throws IOException {
+ RubyModule concurrentMod = runtime.defineModule("Concurrent");
+ RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicFixnum", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
+
+ atomicCls.defineAnnotatedMethods(JavaAtomicFixnum.class);
+ }
+
+ private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JavaAtomicFixnum(runtime, klazz);
+ }
+ };
+
+ @JRubyClass(name = "JavaAtomicFixnum", parent = "Object")
+ public static class JavaAtomicFixnum extends RubyObject {
+
+ private AtomicLong atomicLong;
+
+ public JavaAtomicFixnum(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context) {
+ this.atomicLong = new AtomicLong(0);
+ return context.nil;
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context, IRubyObject value) {
+ this.atomicLong = new AtomicLong(rubyFixnumToLong(value));
+ return context.nil;
+ }
+
+ @JRubyMethod(name = "value")
+ public IRubyObject getValue() {
+ return getRuntime().newFixnum(atomicLong.get());
+ }
+
+ @JRubyMethod(name = "value=")
+ public IRubyObject setValue(ThreadContext context, IRubyObject newValue) {
+ atomicLong.set(rubyFixnumToLong(newValue));
+ return context.nil;
+ }
+
+ @JRubyMethod(name = {"increment", "up"})
+ public IRubyObject increment() {
+ return getRuntime().newFixnum(atomicLong.incrementAndGet());
+ }
+
+ @JRubyMethod(name = {"increment", "up"})
+ public IRubyObject increment(IRubyObject value) {
+ long delta = rubyFixnumToLong(value);
+ return getRuntime().newFixnum(atomicLong.addAndGet(delta));
+ }
+
+ @JRubyMethod(name = {"decrement", "down"})
+ public IRubyObject decrement() {
+ return getRuntime().newFixnum(atomicLong.decrementAndGet());
+ }
+
+ @JRubyMethod(name = {"decrement", "down"})
+ public IRubyObject decrement(IRubyObject value) {
+ long delta = rubyFixnumToLong(value);
+ return getRuntime().newFixnum(atomicLong.addAndGet(-delta));
+ }
+
+ @JRubyMethod(name = "compare_and_set")
+ public IRubyObject compareAndSet(ThreadContext context, IRubyObject expect, IRubyObject update) {
+ return getRuntime().newBoolean(atomicLong.compareAndSet(rubyFixnumToLong(expect), rubyFixnumToLong(update)));
+ }
+
+ @JRubyMethod
+ public IRubyObject update(ThreadContext context, Block block) {
+ for (;;) {
+ long _oldValue = atomicLong.get();
+ IRubyObject oldValue = getRuntime().newFixnum(_oldValue);
+ IRubyObject newValue = block.yield(context, oldValue);
+ if (atomicLong.compareAndSet(_oldValue, rubyFixnumToLong(newValue))) {
+ return newValue;
+ }
+ }
+ }
+
+ private long rubyFixnumToLong(IRubyObject value) {
+ if (value instanceof RubyFixnum) {
+ RubyFixnum fixNum = (RubyFixnum) value;
+ return fixNum.getLongValue();
+ } else {
+ throw getRuntime().newArgumentError("value must be a Fixnum");
+ }
+ }
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java
new file mode 100644
index 000000000000..a3e847db26ab
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java
@@ -0,0 +1,159 @@
+package com.concurrent_ruby.ext;
+
+import java.io.IOException;
+import java.util.concurrent.Semaphore;
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyFixnum;
+import org.jruby.RubyModule;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyObject;
+import org.jruby.anno.JRubyClass;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+
+public class JavaSemaphoreLibrary {
+
+ public void load(Ruby runtime, boolean wrap) throws IOException {
+ RubyModule concurrentMod = runtime.defineModule("Concurrent");
+ RubyClass atomicCls = concurrentMod.defineClassUnder("JavaSemaphore", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
+
+ atomicCls.defineAnnotatedMethods(JavaSemaphore.class);
+ }
+
+ private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JavaSemaphore(runtime, klazz);
+ }
+ };
+
+ @JRubyClass(name = "JavaSemaphore", parent = "Object")
+ public static class JavaSemaphore extends RubyObject {
+
+ private JRubySemaphore semaphore;
+
+ public JavaSemaphore(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+
+ @JRubyMethod
+ public IRubyObject initialize(ThreadContext context, IRubyObject value) {
+ this.semaphore = new JRubySemaphore(rubyFixnumInt(value, "count"));
+ return context.nil;
+ }
+
+ @JRubyMethod
+ public IRubyObject acquire(ThreadContext context, IRubyObject value) throws InterruptedException {
+ this.semaphore.acquire(rubyFixnumToPositiveInt(value, "permits"));
+ return context.nil;
+ }
+
+ @JRubyMethod(name = "available_permits")
+ public IRubyObject availablePermits(ThreadContext context) {
+ return getRuntime().newFixnum(this.semaphore.availablePermits());
+ }
+
+ @JRubyMethod(name = "drain_permits")
+ public IRubyObject drainPermits(ThreadContext context) {
+ return getRuntime().newFixnum(this.semaphore.drainPermits());
+ }
+
+ @JRubyMethod
+ public IRubyObject acquire(ThreadContext context) throws InterruptedException {
+ this.semaphore.acquire(1);
+ return context.nil;
+ }
+
+ @JRubyMethod(name = "try_acquire")
+ public IRubyObject tryAcquire(ThreadContext context) throws InterruptedException {
+ return getRuntime().newBoolean(semaphore.tryAcquire(1));
+ }
+
+ @JRubyMethod(name = "try_acquire")
+ public IRubyObject tryAcquire(ThreadContext context, IRubyObject permits) throws InterruptedException {
+ return getRuntime().newBoolean(semaphore.tryAcquire(rubyFixnumToPositiveInt(permits, "permits")));
+ }
+
+ @JRubyMethod(name = "try_acquire")
+ public IRubyObject tryAcquire(ThreadContext context, IRubyObject permits, IRubyObject timeout) throws InterruptedException {
+ return getRuntime().newBoolean(
+ semaphore.tryAcquire(
+ rubyFixnumToPositiveInt(permits, "permits"),
+ rubyNumericToLong(timeout, "timeout"),
+ java.util.concurrent.TimeUnit.SECONDS)
+ );
+ }
+
+ @JRubyMethod
+ public IRubyObject release(ThreadContext context) {
+ this.semaphore.release(1);
+ return getRuntime().newBoolean(true);
+ }
+
+ @JRubyMethod
+ public IRubyObject release(ThreadContext context, IRubyObject value) {
+ this.semaphore.release(rubyFixnumToPositiveInt(value, "permits"));
+ return getRuntime().newBoolean(true);
+ }
+
+ @JRubyMethod(name = "reduce_permits")
+ public IRubyObject reducePermits(ThreadContext context, IRubyObject reduction) throws InterruptedException {
+ this.semaphore.publicReducePermits(rubyFixnumToNonNegativeInt(reduction, "reduction"));
+ return context.nil;
+ }
+
+ private int rubyFixnumInt(IRubyObject value, String paramName) {
+ if (value instanceof RubyFixnum) {
+ RubyFixnum fixNum = (RubyFixnum) value;
+ return (int) fixNum.getLongValue();
+ } else {
+ throw getRuntime().newArgumentError(paramName + " must be integer");
+ }
+ }
+
+ private int rubyFixnumToNonNegativeInt(IRubyObject value, String paramName) {
+ if (value instanceof RubyFixnum && ((RubyFixnum) value).getLongValue() >= 0) {
+ RubyFixnum fixNum = (RubyFixnum) value;
+ return (int) fixNum.getLongValue();
+ } else {
+ throw getRuntime().newArgumentError(paramName + " must be a non-negative integer");
+ }
+ }
+
+ private int rubyFixnumToPositiveInt(IRubyObject value, String paramName) {
+ if (value instanceof RubyFixnum && ((RubyFixnum) value).getLongValue() > 0) {
+ RubyFixnum fixNum = (RubyFixnum) value;
+ return (int) fixNum.getLongValue();
+ } else {
+ throw getRuntime().newArgumentError(paramName + " must be an integer greater than zero");
+ }
+ }
+
+ private long rubyNumericToLong(IRubyObject value, String paramName) {
+ if (value instanceof RubyNumeric && ((RubyNumeric) value).getDoubleValue() > 0) {
+ RubyNumeric fixNum = (RubyNumeric) value;
+ return fixNum.getLongValue();
+ } else {
+ throw getRuntime().newArgumentError(paramName + " must be a float greater than zero");
+ }
+ }
+
+ class JRubySemaphore extends Semaphore {
+
+ public JRubySemaphore(int permits) {
+ super(permits);
+ }
+
+ public JRubySemaphore(int permits, boolean value) {
+ super(permits, value);
+ }
+
+ public void publicReducePermits(int i) {
+ reducePermits(i);
+ }
+
+ }
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java
new file mode 100644
index 000000000000..bfcc0d078102
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java
@@ -0,0 +1,307 @@
+package com.concurrent_ruby.ext;
+
+import org.jruby.Ruby;
+import org.jruby.RubyBasicObject;
+import org.jruby.RubyClass;
+import org.jruby.RubyModule;
+import org.jruby.RubyObject;
+import org.jruby.RubyThread;
+import org.jruby.anno.JRubyClass;
+import org.jruby.anno.JRubyMethod;
+import org.jruby.runtime.Block;
+import org.jruby.runtime.ObjectAllocator;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.Visibility;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.runtime.load.Library;
+import sun.misc.Unsafe;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+public class SynchronizationLibrary implements Library {
+
+ private static final Unsafe UNSAFE = loadUnsafe();
+ private static final boolean FULL_FENCE = supportsFences();
+
+ private static Unsafe loadUnsafe() {
+ try {
+ Class ncdfe = Class.forName("sun.misc.Unsafe");
+ Field f = ncdfe.getDeclaredField("theUnsafe");
+ f.setAccessible(true);
+ return (Unsafe) f.get((java.lang.Object) null);
+ } catch (Exception var2) {
+ return null;
+ } catch (NoClassDefFoundError var3) {
+ return null;
+ }
+ }
+
+ private static boolean supportsFences() {
+ if (UNSAFE == null) {
+ return false;
+ } else {
+ try {
+ Method m = UNSAFE.getClass().getDeclaredMethod("fullFence", new Class[0]);
+ if (m != null) {
+ return true;
+ }
+ } catch (Exception var1) {
+ // nothing
+ }
+
+ return false;
+ }
+ }
+
+ private static final ObjectAllocator JRUBY_OBJECT_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JRubyObject(runtime, klazz);
+ }
+ };
+
+ private static final ObjectAllocator OBJECT_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new Object(runtime, klazz);
+ }
+ };
+
+ private static final ObjectAllocator ABSTRACT_LOCKABLE_OBJECT_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new AbstractLockableObject(runtime, klazz);
+ }
+ };
+
+ private static final ObjectAllocator JRUBY_LOCKABLE_OBJECT_ALLOCATOR = new ObjectAllocator() {
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JRubyLockableObject(runtime, klazz);
+ }
+ };
+
+ public void load(Ruby runtime, boolean wrap) throws IOException {
+ RubyModule synchronizationModule = runtime.
+ defineModule("Concurrent").
+ defineModuleUnder("Synchronization");
+
+ RubyModule jrubyAttrVolatileModule = synchronizationModule.defineModuleUnder("JRubyAttrVolatile");
+ jrubyAttrVolatileModule.defineAnnotatedMethods(JRubyAttrVolatile.class);
+
+ defineClass(runtime, synchronizationModule, "AbstractObject", "JRubyObject",
+ JRubyObject.class, JRUBY_OBJECT_ALLOCATOR);
+
+ defineClass(runtime, synchronizationModule, "JRubyObject", "Object",
+ Object.class, OBJECT_ALLOCATOR);
+
+ defineClass(runtime, synchronizationModule, "Object", "AbstractLockableObject",
+ AbstractLockableObject.class, ABSTRACT_LOCKABLE_OBJECT_ALLOCATOR);
+
+ defineClass(runtime, synchronizationModule, "AbstractLockableObject", "JRubyLockableObject",
+ JRubyLockableObject.class, JRUBY_LOCKABLE_OBJECT_ALLOCATOR);
+
+ defineClass(runtime, synchronizationModule, "Object", "JRuby",
+ JRuby.class, new ObjectAllocator() {
+ @Override
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
+ return new JRuby(runtime, klazz);
+ }
+ });
+ }
+
+ private RubyClass defineClass(
+ Ruby runtime,
+ RubyModule namespace,
+ String parentName,
+ String name,
+ Class javaImplementation,
+ ObjectAllocator allocator) {
+ final RubyClass parentClass = namespace.getClass(parentName);
+
+ if (parentClass == null) {
+ System.out.println("not found " + parentName);
+ throw runtime.newRuntimeError(namespace.toString() + "::" + parentName + " is missing");
+ }
+
+ final RubyClass newClass = namespace.defineClassUnder(name, parentClass, allocator);
+ newClass.defineAnnotatedMethods(javaImplementation);
+ return newClass;
+ }
+
+ // Facts:
+ // - all ivar reads are without any synchronisation of fences see
+ // https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/runtime/ivars/VariableAccessor.java#L110-110
+ // - writes depend on UnsafeHolder.U, null -> SynchronizedVariableAccessor, !null -> StampedVariableAccessor
+ // SynchronizedVariableAccessor wraps with synchronized block, StampedVariableAccessor uses fullFence or
+ // volatilePut
+ // TODO (pitr 16-Sep-2015): what do we do in Java 9 ?
+
+ // module JRubyAttrVolatile
+ public static class JRubyAttrVolatile {
+
+ // volatile threadContext is used as a memory barrier per the JVM memory model happens-before semantic
+ // on volatile fields. any volatile field could have been used but using the thread context is an
+ // attempt to avoid code elimination.
+ private static volatile int volatileField;
+
+ @JRubyMethod(name = "full_memory_barrier", visibility = Visibility.PUBLIC)
+ public static IRubyObject fullMemoryBarrier(ThreadContext context, IRubyObject self) {
+ // Prevent reordering of ivar writes with publication of this instance
+ if (!FULL_FENCE) {
+ // Assuming that following volatile read and write is not eliminated it simulates fullFence.
+ // If it's eliminated it'll cause problems only on non-x86 platforms.
+ // http://shipilev.net/blog/2014/jmm-pragmatics/#_happens_before_test_your_understanding
+ final int volatileRead = volatileField;
+ volatileField = context.getLine();
+ } else {
+ UNSAFE.fullFence();
+ }
+ return context.nil;
+ }
+
+ @JRubyMethod(name = "instance_variable_get_volatile", visibility = Visibility.PUBLIC)
+ public static IRubyObject instanceVariableGetVolatile(
+ ThreadContext context,
+ IRubyObject self,
+ IRubyObject name) {
+ // Ensure we ses latest value with loadFence
+ if (!FULL_FENCE) {
+ // piggybacking on volatile read, simulating loadFence
+ final int volatileRead = volatileField;
+ return ((RubyBasicObject) self).instance_variable_get(context, name);
+ } else {
+ UNSAFE.loadFence();
+ return ((RubyBasicObject) self).instance_variable_get(context, name);
+ }
+ }
+
+ @JRubyMethod(name = "instance_variable_set_volatile", visibility = Visibility.PUBLIC)
+ public static IRubyObject InstanceVariableSetVolatile(
+ ThreadContext context,
+ IRubyObject self,
+ IRubyObject name,
+ IRubyObject value) {
+ // Ensure we make last update visible
+ if (!FULL_FENCE) {
+ // piggybacking on volatile write, simulating storeFence
+ final IRubyObject result = ((RubyBasicObject) self).instance_variable_set(name, value);
+ volatileField = context.getLine();
+ return result;
+ } else {
+ // JRuby uses StampedVariableAccessor which calls fullFence
+ // so no additional steps needed.
+ // See https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/runtime/ivars/StampedVariableAccessor.java#L151-L159
+ return ((RubyBasicObject) self).instance_variable_set(name, value);
+ }
+ }
+ }
+
+ @JRubyClass(name = "JRubyObject", parent = "AbstractObject")
+ public static class JRubyObject extends RubyObject {
+
+ public JRubyObject(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+ }
+
+ @JRubyClass(name = "Object", parent = "JRubyObject")
+ public static class Object extends JRubyObject {
+
+ public Object(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+ }
+
+ @JRubyClass(name = "AbstractLockableObject", parent = "Object")
+ public static class AbstractLockableObject extends Object {
+
+ public AbstractLockableObject(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+ }
+
+ @JRubyClass(name = "JRubyLockableObject", parent = "AbstractLockableObject")
+ public static class JRubyLockableObject extends JRubyObject {
+
+ public JRubyLockableObject(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+
+ @JRubyMethod(name = "synchronize", visibility = Visibility.PROTECTED)
+ public IRubyObject rubySynchronize(ThreadContext context, Block block) {
+ synchronized (this) {
+ return block.yield(context, null);
+ }
+ }
+
+ @JRubyMethod(name = "ns_wait", optional = 1, visibility = Visibility.PROTECTED)
+ public IRubyObject nsWait(ThreadContext context, IRubyObject[] args) {
+ Ruby runtime = context.runtime;
+ if (args.length > 1) {
+ throw runtime.newArgumentError(args.length, 1);
+ }
+ Double timeout = null;
+ if (args.length > 0 && !args[0].isNil()) {
+ timeout = args[0].convertToFloat().getDoubleValue();
+ if (timeout < 0) {
+ throw runtime.newArgumentError("time interval must be positive");
+ }
+ }
+ if (Thread.interrupted()) {
+ throw runtime.newConcurrencyError("thread interrupted");
+ }
+ boolean success = false;
+ try {
+ success = context.getThread().wait_timeout(this, timeout);
+ } catch (InterruptedException ie) {
+ throw runtime.newConcurrencyError(ie.getLocalizedMessage());
+ } finally {
+ // An interrupt or timeout may have caused us to miss
+ // a notify that we consumed, so do another notify in
+ // case someone else is available to pick it up.
+ if (!success) {
+ this.notify();
+ }
+ }
+ return this;
+ }
+
+ @JRubyMethod(name = "ns_signal", visibility = Visibility.PROTECTED)
+ public IRubyObject nsSignal(ThreadContext context) {
+ notify();
+ return this;
+ }
+
+ @JRubyMethod(name = "ns_broadcast", visibility = Visibility.PROTECTED)
+ public IRubyObject nsBroadcast(ThreadContext context) {
+ notifyAll();
+ return this;
+ }
+ }
+
+ @JRubyClass(name = "JRuby")
+ public static class JRuby extends RubyObject {
+ public JRuby(Ruby runtime, RubyClass metaClass) {
+ super(runtime, metaClass);
+ }
+
+ @JRubyMethod(name = "sleep_interruptibly", visibility = Visibility.PUBLIC, module = true)
+ public static IRubyObject sleepInterruptibly(final ThreadContext context, IRubyObject receiver, final Block block) {
+ try {
+ context.getThread().executeBlockingTask(new RubyThread.BlockingTask() {
+ @Override
+ public void run() throws InterruptedException {
+ block.call(context);
+ }
+
+ @Override
+ public void wakeup() {
+ context.getThread().getNativeThread().interrupt();
+ }
+ });
+ } catch (InterruptedException e) {
+ throw context.runtime.newThreadError("interrupted in Concurrent::Synchronization::JRuby.sleep_interruptibly");
+ }
+ return context.nil;
+ }
+ }
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java
new file mode 100644
index 000000000000..e11e15aa4e6b
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java
@@ -0,0 +1,31 @@
+package com.concurrent_ruby.ext.jsr166e;
+
+import java.util.Map;
+import java.util.Set;
+
+public interface ConcurrentHashMap {
+ /** Interface describing a function of one argument */
+ public interface Fun { T apply(A a); }
+ /** Interface describing a function of two arguments */
+ public interface BiFun { T apply(A a, B b); }
+
+ public V get(K key);
+ public V put(K key, V value);
+ public V putIfAbsent(K key, V value);
+ public V computeIfAbsent(K key, Fun super K, ? extends V> mf);
+ public V computeIfPresent(K key, BiFun super K, ? super V, ? extends V> mf);
+ public V compute(K key, BiFun super K, ? super V, ? extends V> mf);
+ public V merge(K key, V value, BiFun super V, ? super V, ? extends V> mf);
+ public boolean replace(K key, V oldVal, V newVal);
+ public V replace(K key, V value);
+ public boolean containsKey(K key);
+ public boolean remove(Object key, Object value);
+ public V remove(K key);
+ public void clear();
+ public Set> entrySet();
+ public int size();
+ public V getValueOrDefault(Object key, V defaultValue);
+
+ public boolean containsValue(V value);
+ public K findKey(V value);
+}
diff --git a/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java
new file mode 100644
index 000000000000..86aa4eb062b3
--- /dev/null
+++ b/vendor/bundler/ruby/2.5.0/gems/concurrent-ruby-1.1.8/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java
@@ -0,0 +1,3863 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// This is based on the 1.79 version.
+
+package com.concurrent_ruby.ext.jsr166e;
+
+import org.jruby.RubyClass;
+import org.jruby.RubyNumeric;
+import org.jruby.RubyObject;
+import org.jruby.exceptions.RaiseException;
+import com.concurrent_ruby.ext.jsr166y.ThreadLocalRandom;
+import org.jruby.runtime.ThreadContext;
+import org.jruby.runtime.builtin.IRubyObject;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Set;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Enumeration;
+import java.util.ConcurrentModificationException;
+import java.util.NoSuchElementException;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.locks.AbstractQueuedSynchronizer;
+
+import java.io.Serializable;
+
+/**
+ * A hash table supporting full concurrency of retrievals and
+ * high expected concurrency for updates. This class obeys the
+ * same functional specification as {@link java.util.Hashtable}, and
+ * includes versions of methods corresponding to each method of
+ * {@code Hashtable}. However, even though all operations are
+ * thread-safe, retrieval operations do not entail locking,
+ * and there is not any support for locking the entire table
+ * in a way that prevents all access. This class is fully
+ * interoperable with {@code Hashtable} in programs that rely on its
+ * thread safety but not on its synchronization details.
+ *
+ * Retrieval operations (including {@code get}) generally do not
+ * block, so may overlap with update operations (including {@code put}
+ * and {@code remove}). Retrievals reflect the results of the most
+ * recently completed update operations holding upon their
+ * onset. (More formally, an update operation for a given key bears a
+ * happens-before relation with any (non-null) retrieval for
+ * that key reporting the updated value.) For aggregate operations
+ * such as {@code putAll} and {@code clear}, concurrent retrievals may
+ * reflect insertion or removal of only some entries. Similarly,
+ * Iterators and Enumerations return elements reflecting the state of
+ * the hash table at some point at or since the creation of the
+ * iterator/enumeration. They do not throw {@link
+ * ConcurrentModificationException}. However, iterators are designed
+ * to be used by only one thread at a time. Bear in mind that the
+ * results of aggregate status methods including {@code size}, {@code
+ * isEmpty}, and {@code containsValue} are typically useful only when
+ * a map is not undergoing concurrent updates in other threads.
+ * Otherwise the results of these methods reflect transient states
+ * that may be adequate for monitoring or estimation purposes, but not
+ * for program control.
+ *
+ *
The table is dynamically expanded when there are too many
+ * collisions (i.e., keys that have distinct hash codes but fall into
+ * the same slot modulo the table size), with the expected average
+ * effect of maintaining roughly two bins per mapping (corresponding
+ * to a 0.75 load factor threshold for resizing). There may be much
+ * variance around this average as mappings are added and removed, but
+ * overall, this maintains a commonly accepted time/space tradeoff for
+ * hash tables. However, resizing this or any other kind of hash
+ * table may be a relatively slow operation. When possible, it is a
+ * good idea to provide a size estimate as an optional {@code
+ * initialCapacity} constructor argument. An additional optional
+ * {@code loadFactor} constructor argument provides a further means of
+ * customizing initial table capacity by specifying the table density
+ * to be used in calculating the amount of space to allocate for the
+ * given number of elements. Also, for compatibility with previous
+ * versions of this class, constructors may optionally specify an
+ * expected {@code concurrencyLevel} as an additional hint for
+ * internal sizing. Note that using many keys with exactly the same
+ * {@code hashCode()} is a sure way to slow down performance of any
+ * hash table.
+ *
+ *
A {@link Set} projection of a ConcurrentHashMapV8 may be created
+ * (using {@link #newKeySet()} or {@link #newKeySet(int)}), or viewed
+ * (using {@link #keySet(Object)} when only keys are of interest, and the
+ * mapped values are (perhaps transiently) not used or all take the
+ * same mapping value.
+ *
+ *
A ConcurrentHashMapV8 can be used as scalable frequency map (a
+ * form of histogram or multiset) by using {@link LongAdder} values
+ * and initializing via {@link #computeIfAbsent}. For example, to add
+ * a count to a {@code ConcurrentHashMapV8 freqs}, you
+ * can use {@code freqs.computeIfAbsent(k -> new
+ * LongAdder()).increment();}
+ *
+ * This class and its views and iterators implement all of the
+ * optional methods of the {@link Map} and {@link Iterator}
+ * interfaces.
+ *
+ *
Like {@link Hashtable} but unlike {@link HashMap}, this class
+ * does not allow {@code null} to be used as a key or value.
+ *
+ *
ConcurrentHashMapV8s support parallel operations using the {@link
+ * ForkJoinPool#commonPool}. (Tasks that may be used in other contexts
+ * are available in class {@link ForkJoinTasks}). These operations are
+ * designed to be safely, and often sensibly, applied even with maps
+ * that are being concurrently updated by other threads; for example,
+ * when computing a snapshot summary of the values in a shared
+ * registry. There are three kinds of operation, each with four
+ * forms, accepting functions with Keys, Values, Entries, and (Key,
+ * Value) arguments and/or return values. (The first three forms are
+ * also available via the {@link #keySet()}, {@link #values()} and
+ * {@link #entrySet()} views). Because the elements of a
+ * ConcurrentHashMapV8 are not ordered in any particular way, and may be
+ * processed in different orders in different parallel executions, the
+ * correctness of supplied functions should not depend on any
+ * ordering, or on any other objects or values that may transiently
+ * change while computation is in progress; and except for forEach
+ * actions, should ideally be side-effect-free.
+ *
+ *
+ * - forEach: Perform a given action on each element.
+ * A variant form applies a given transformation on each element
+ * before performing the action.
+ *
+ * - search: Return the first available non-null result of
+ * applying a given function on each element; skipping further
+ * search when a result is found.
+ *
+ * - reduce: Accumulate each element. The supplied reduction
+ * function cannot rely on ordering (more formally, it should be
+ * both associative and commutative). There are five variants:
+ *
+ *
+ *
+ * - Plain reductions. (There is not a form of this method for
+ * (key, value) function arguments since there is no corresponding
+ * return type.)
+ *
+ * - Mapped reductions that accumulate the results of a given
+ * function applied to each element.
+ *
+ * - Reductions to scalar doubles, longs, and ints, using a
+ * given basis value.
+ *
+ *
+ *
+ *
+ *
+ * The concurrency properties of bulk operations follow
+ * from those of ConcurrentHashMapV8: Any non-null result returned
+ * from {@code get(key)} and related access methods bears a
+ * happens-before relation with the associated insertion or
+ * update. The result of any bulk operation reflects the
+ * composition of these per-element relations (but is not
+ * necessarily atomic with respect to the map as a whole unless it
+ * is somehow known to be quiescent). Conversely, because keys
+ * and values in the map are never null, null serves as a reliable
+ * atomic indicator of the current lack of any result. To
+ * maintain this property, null serves as an implicit basis for
+ * all non-scalar reduction operations. For the double, long, and
+ * int versions, the basis should be one that, when combined with
+ * any other value, returns that other value (more formally, it
+ * should be the identity element for the reduction). Most common
+ * reductions have these properties; for example, computing a sum
+ * with basis 0 or a minimum with basis MAX_VALUE.
+ *
+ *
Search and transformation functions provided as arguments
+ * should similarly return null to indicate the lack of any result
+ * (in which case it is not used). In the case of mapped
+ * reductions, this also enables transformations to serve as
+ * filters, returning null (or, in the case of primitive
+ * specializations, the identity basis) if the element should not
+ * be combined. You can create compound transformations and
+ * filterings by composing them yourself under this "null means
+ * there is nothing there now" rule before using them in search or
+ * reduce operations.
+ *
+ *
Methods accepting and/or returning Entry arguments maintain
+ * key-value associations. They may be useful for example when
+ * finding the key for the greatest value. Note that "plain" Entry
+ * arguments can be supplied using {@code new
+ * AbstractMap.SimpleEntry(k,v)}.
+ *
+ *
Bulk operations may complete abruptly, throwing an
+ * exception encountered in the application of a supplied
+ * function. Bear in mind when handling such exceptions that other
+ * concurrently executing functions could also have thrown
+ * exceptions, or would have done so if the first exception had
+ * not occurred.
+ *
+ *
Parallel speedups for bulk operations compared to sequential
+ * processing are common but not guaranteed. Operations involving
+ * brief functions on small maps may execute more slowly than
+ * sequential loops if the underlying work to parallelize the
+ * computation is more expensive than the computation itself.
+ * Similarly, parallelization may not lead to much actual parallelism
+ * if all processors are busy performing unrelated tasks.
+ *
+ *
All arguments to all task methods must be non-null.
+ *
+ *
jsr166e note: During transition, this class
+ * uses nested functional interfaces with different names but the
+ * same forms as those expected for JDK8.
+ *
+ *
This class is a member of the
+ *
+ * Java Collections Framework.
+ *
+ * @since 1.5
+ * @author Doug Lea
+ * @param the type of keys maintained by this map
+ * @param the type of mapped values
+ */
+public class ConcurrentHashMapV8
+ implements ConcurrentMap, Serializable, ConcurrentHashMap {
+ private static final long serialVersionUID = 7249069246763182397L;
+
+ /**
+ * A partitionable iterator. A Spliterator can be traversed
+ * directly, but can also be partitioned (before traversal) by
+ * creating another Spliterator that covers a non-overlapping
+ * portion of the elements, and so may be amenable to parallel
+ * execution.
+ *
+ * This interface exports a subset of expected JDK8
+ * functionality.
+ *
+ *
Sample usage: Here is one (of the several) ways to compute
+ * the sum of the values held in a map using the ForkJoin
+ * framework. As illustrated here, Spliterators are well suited to
+ * designs in which a task repeatedly splits off half its work
+ * into forked subtasks until small enough to process directly,
+ * and then joins these subtasks. Variants of this style can also
+ * be used in completion-based designs.
+ *
+ *
+ * {@code ConcurrentHashMapV8