packages feed

cmark-gfm 0.1.8 → 0.2.0

raw patch · 21 files changed

+2434/−2523 lines, 21 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ CMarkGFM: optSafe :: CMarkOption

Files

CMarkGFM.hsc view
@@ -15,6 +15,7 @@   , optSourcePos   , optHardBreaks   , optSmart+  , optSafe   , optUnsafe   , extStrikethrough   , extTable@@ -276,6 +277,11 @@ -- | Convert straight quotes to curly, @---@ to em-dash, @--@ to en-dash. optSmart :: CMarkOption optSmart = CMarkOption #const CMARK_OPT_SMART++-- | optSafe is defined here for API compatibility, but it no longer has any+-- effect. "Safe" mode is now the default: set optUnsafe to disable it.+optSafe :: CMarkOption+optSafe = CMarkOption #const CMARK_OPT_SAFE  -- | Allow rendering of raw HTML and potentially dangerous URLs in links -- and images.
README.md view
@@ -44,22 +44,17 @@   - **Ease of installation:** cmark is portable and has minimal     dependencies. -cmark does not provide Haskell versions of the whole [libcmark-gfm]+cmark-gfm does not provide Haskell versions of the whole [libcmark-gfm] API, which is built around mutable `cmark_node` objects.  Instead, it provides functions for converting CommonMark to HTML (and other formats), and a function for converting CommonMark to a `Node` tree that can be processed further using Haskell. -**A note on security:**  This library does not attempt to sanitize-HTML output.  We recommend using [xss-sanitize] to filter the output,-or enabling `optSafe` to filter out all raw HTML and potentially-dangerous URLs.- **A note on stability:**  There is a good chance the API will change significantly after this early release.  [GitHub Flavored Markdown]: https://github.github.com/gfm/-[libcmark-gfm]: http://github.com/github/cmark+[libcmark-gfm]: http://github.com/github/cmark-gfm [benchmarks]: https://github.com/jgm/cmark/blob/master/benchmarks.md [cheapskate]: https://hackage.haskell.org/package/cheapskate [pandoc]: https://hackage.haskell.org/package/pandoc
cbits/blocks.c view
@@ -36,6 +36,10 @@   return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0; } +static bool S_last_line_checked(const cmark_node *node) {+  return (node->flags & CMARK_NODE__LAST_LINE_CHECKED) != 0;+}+ static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) {   return (cmark_node_type)node->type; }@@ -47,6 +51,10 @@     node->flags &= ~CMARK_NODE__LAST_LINE_BLANK; } +static void S_set_last_line_checked(cmark_node *node) {+  node->flags |= CMARK_NODE__LAST_LINE_CHECKED;+}+ static CMARK_INLINE bool S_is_line_end_char(char c) {   return (c == '\n' || c == '\r'); }@@ -121,8 +129,6 @@   parser->root = document;   parser->current = document; -  parser->last_buffer_ended_with_cr = false;-   parser->syntax_extensions = saved_exts;   parser->inline_syntax_extensions = saved_inline_exts;   parser->options = saved_options;@@ -234,26 +240,43 @@  // Check to see if a node ends with a blank line, descending // if needed into lists and sublists.-static bool ends_with_blank_line(cmark_node *node) {-  cmark_node *cur = node;-  while (cur != NULL) {-    if (S_last_line_blank(cur)) {-      return true;-    }-    if (S_type(cur) == CMARK_NODE_LIST || S_type(cur) == CMARK_NODE_ITEM) {-      cur = cur->last_child;-    } else {-      cur = NULL;-    }+static bool S_ends_with_blank_line(cmark_node *node) {+  if (S_last_line_checked(node)) {+    return(S_last_line_blank(node));+  } else if ((S_type(node) == CMARK_NODE_LIST ||+              S_type(node) == CMARK_NODE_ITEM) && node->last_child) {+    S_set_last_line_checked(node);+    return(S_ends_with_blank_line(node->last_child));+  } else {+    S_set_last_line_checked(node);+    return (S_last_line_blank(node));   }-  return false; } +// returns true if content remains after link defs are resolved.+static bool resolve_reference_link_definitions(+		cmark_parser *parser,+                cmark_node *b) {+  bufsize_t pos;+  cmark_strbuf *node_content = &b->content;+  cmark_chunk chunk = {node_content->ptr, node_content->size, 0};+  while (chunk.len && chunk.data[0] == '[' &&+         (pos = cmark_parse_reference_inline(parser->mem, &chunk,+					     parser->refmap))) {++    chunk.data += pos;+    chunk.len -= pos;+  }+  cmark_strbuf_drop(node_content, (node_content->size - chunk.len));+  return !is_blank(&b->content, 0);+}+ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) {   bufsize_t pos;   cmark_node *item;   cmark_node *subitem;   cmark_node *parent;+  bool has_content;    parent = b->parent;   assert(b->flags &@@ -283,15 +306,8 @@   switch (S_type(b)) {   case CMARK_NODE_PARAGRAPH:   {-    cmark_chunk chunk = {node_content->ptr, node_content->size, 0};-    while (chunk.len && chunk.data[0] == '[' &&-           (pos = cmark_parse_reference_inline(parser->mem, &chunk, parser->refmap))) {--      chunk.data += pos;-      chunk.len -= pos;-    }-    cmark_strbuf_drop(node_content, (node_content->size - chunk.len));-    if (is_blank(node_content, 0)) {+    has_content = resolve_reference_link_definitions(parser, b);+    if (!has_content) {       // remove blank node (former reference def)       cmark_node_free(b);     }@@ -343,7 +359,8 @@       // spaces between them:       subitem = item->first_child;       while (subitem) {-        if (ends_with_blank_line(subitem) && (item->next || subitem->next)) {+        if ((item->next || subitem->next) &&+            S_ends_with_blank_line(subitem)) {           b->as.list.tight = false;           break;         }@@ -748,6 +765,40 @@   } } +// Check for thematic break.  On failure, return 0 and update+// thematic_break_kill_pos with the index at which the+// parse fails.  On success, return length of match.+// "...three or more hyphens, asterisks,+// or underscores on a line by themselves. If you wish, you may use+// spaces between the hyphens or asterisks."+static int S_scan_thematic_break(cmark_parser *parser, cmark_chunk *input,+                                 bufsize_t offset) {+  bufsize_t i;+  char c;+  char nextc = '\0';+  int count;+  i = offset;+  c = peek_at(input, i);+  if (!(c == '*' || c == '_' || c == '-')) {+    parser->thematic_break_kill_pos = i;+    return 0;+  }+  count = 1;+  while ((nextc = peek_at(input, ++i))) {+    if (nextc == c) {+      count++;+    } else if (nextc != ' ' && nextc != '\t') {+      break;+    }+  }+  if (count >= 3 && (nextc == '\r' || nextc == '\n')) {+    return (i - offset) + 1;+  } else {+    parser->thematic_break_kill_pos = i;+    return 0;+  }+}+ // Find first nonspace character from current offset, setting // parser->first_nonspace, parser->first_nonspace_column, // parser->indent, and parser->blank. Does not advance parser->offset.@@ -1040,6 +1091,7 @@   bufsize_t matched = 0;   int lev = 0;   bool save_partially_consumed_tab;+  bool has_content;   int save_offset;   int save_column; @@ -1112,13 +1164,20 @@     } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH &&                (lev =                     scan_setext_heading_line(input, parser->first_nonspace))) {-      (*container)->type = (uint16_t)CMARK_NODE_HEADING;-      (*container)->as.heading.level = lev;-      (*container)->as.heading.setext = true;-      S_advance_offset(parser, input, input->len - 1 - parser->offset, false);+      // finalize paragraph, resolving reference links+      has_content = resolve_reference_link_definitions(parser, *container);++      if (has_content) {++        (*container)->type = (uint16_t)CMARK_NODE_HEADING;+        (*container)->as.heading.level = lev;+        (*container)->as.heading.setext = true;+        S_advance_offset(parser, input, input->len - 1 - parser->offset, false);+      }     } else if (!indented &&                !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) &&-               (matched = scan_thematic_break(input, parser->first_nonspace))) {+	       (parser->thematic_break_kill_pos <= parser->first_nonspace) &&+               (matched = S_scan_thematic_break(parser, input, parser->first_nonspace))) {       // it's only now that we know the line is not part of a setext heading:       *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK,                              parser->first_nonspace + 1);@@ -1377,6 +1436,7 @@   parser->column = 0;   parser->first_nonspace = 0;   parser->first_nonspace_column = 0;+  parser->thematic_break_kill_pos = 0;   parser->indent = 0;   parser->blank = false;   parser->partially_consumed_tab = false;
cbits/buffer.c view
@@ -10,7 +10,6 @@ #include "config.h" #include "cmark_ctype.h" #include "buffer.h"-#include "memory.h"  /* Used as default value for cmark_strbuf->ptr so that people can always  * assume ptr is non-NULL and zero terminated even for new cmark_strbufs.
cbits/chunk.h view
@@ -6,7 +6,6 @@ #include <assert.h> #include "cmark-gfm.h" #include "buffer.h"-#include "memory.h" #include "cmark_ctype.h"  #define CMARK_CHUNK_EMPTY                                                      \
cbits/cmark-gfm.h view
@@ -690,6 +690,20 @@  */ #define CMARK_OPT_HARDBREAKS (1 << 2) +/** `CMARK_OPT_SAFE` is defined here for API compatibility,+    but it no longer has any effect. "Safe" mode is now the default:+    set `CMARK_OPT_UNSAFE` to disable it.+ */+#define CMARK_OPT_SAFE (1 << 3)++/** Render raw HTML and unsafe links (`javascript:`, `vbscript:`,+ * `file:`, and `data:`, except for `image/png`, `image/gif`,+ * `image/jpeg`, or `image/webp` mime types).  By default,+ * raw HTML is replaced by a placeholder HTML comment. Unsafe+ * links are replaced by empty strings.+ */+#define CMARK_OPT_UNSAFE (1 << 17)+ /** Render `softbreak` elements as spaces.  */ #define CMARK_OPT_NOBREAKS (1 << 4)@@ -737,14 +751,6 @@  * a separate attribute.  */ #define CMARK_OPT_FULL_INFO_STRING (1 << 16)--/** Allow raw HTML and unsafe links, `javascript:`, `vbscript:`, `file:`, and- * all `data:` URLs -- by default, only `image/png`, `image/gif`, `image/jpeg`,- * or `image/webp` mime types are allowed. Without this option, raw HTML is- * replaced by a placeholder HTML comment, and unsafe links are replaced by- * empty strings.- */-#define CMARK_OPT_UNSAFE (1 << 17)  /**  * ## Version information
cbits/cmark-gfm_version.h view
@@ -1,7 +1,7 @@ #ifndef CMARK_GFM_VERSION_H #define CMARK_GFM_VERSION_H -#define CMARK_GFM_VERSION ((0 << 24) | (28 << 16) | (3 << 8) | 20)-#define CMARK_GFM_VERSION_STRING "0.28.3.gfm.20"+#define CMARK_GFM_VERSION ((0 << 24) | (29 << 16) | (0 << 8) | 0)+#define CMARK_GFM_VERSION_STRING "0.29.0.gfm.0"  #endif
cbits/commonmark.c view
@@ -34,7 +34,8 @@   needs_escaping =       c < 0x80 && escape != LITERAL &&       ((escape == NORMAL &&-        (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' ||+        (c < 0x20 ||+	 c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' ||          c == '>' || c == '\\' || c == '`' || c == '~' || c == '!' ||          (c == '&' && cmark_isalpha(nextc)) || (c == '!' && nextc == '[') ||          (renderer->begin_content && (c == '-' || c == '+' || c == '=') &&@@ -50,14 +51,18 @@         (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\')));    if (needs_escaping) {-    if (cmark_isspace((char)c)) {+    if (escape == URL && cmark_isspace((char)c)) {       // use percent encoding for spaces-      snprintf(encoded, ENCODED_SIZE, "%%%2x", c);+      snprintf(encoded, ENCODED_SIZE, "%%%2X", c);       cmark_strbuf_puts(renderer->buffer, encoded);       renderer->column += 3;-    } else {+    } else if (cmark_ispunct((char)c)) {       cmark_render_ascii(renderer, "\\");       cmark_render_code_point(renderer, c);+    } else { // render as entity+      snprintf(encoded, ENCODED_SIZE, "&#%d;", c);+      cmark_strbuf_puts(renderer->buffer, encoded);+      renderer->column += (int)strlen(encoded);     }   } else {     cmark_render_code_point(renderer, c);
cbits/html.c view
@@ -354,8 +354,8 @@   case CMARK_NODE_LINK:     if (entering) {       cmark_strbuf_puts(html, "<a href=\"");-      if (!(!(options & CMARK_OPT_UNSAFE) &&-            scan_dangerous_url(&node->as.link.url, 0))) {+      if ((options & CMARK_OPT_UNSAFE) ||+            !(scan_dangerous_url(&node->as.link.url, 0))) {         houdini_escape_href(html, node->as.link.url.data,                             node->as.link.url.len);       }@@ -372,8 +372,8 @@   case CMARK_NODE_IMAGE:     if (entering) {       cmark_strbuf_puts(html, "<img src=\"");-      if (!(!(options & CMARK_OPT_UNSAFE) &&-            scan_dangerous_url(&node->as.link.url, 0))) {+      if ((options & CMARK_OPT_UNSAFE) ||+            !(scan_dangerous_url(&node->as.link.url, 0))) {         houdini_escape_href(html, node->as.link.url.data,                             node->as.link.url.len);       }
cbits/inlines.c view
@@ -322,9 +322,11 @@ }  // Destructively modify string, converting newlines to-// spaces, then removing a single leading + trailing space.+// spaces, then removing a single leading + trailing space,+// unless the code span consists entirely of space characters. static void S_normalize_code(cmark_strbuf *s) {   bufsize_t r, w;+  bool contains_nonspace = false;    for (r = 0, w = 0; r < s->size; ++r) {     switch (s->ptr[r]) {@@ -339,10 +341,14 @@     default:       s->ptr[w++] = s->ptr[r];     }+    if (s->ptr[r] != ' ') {+      contains_nonspace = true;+    }   }    // begins and ends with space?-  if (s->ptr[0] == ' ' && s->ptr[w - 1] == ' ') {+  if (contains_nonspace &&+      s->ptr[0] == ' ' && s->ptr[w - 1] == ' ') {     cmark_strbuf_drop(s, 1);     cmark_strbuf_truncate(s, w - 2);   } else {@@ -630,7 +636,6 @@   delimiter *opener;   delimiter *old_closer;   bool opener_found;-  bool odd_match;   delimiter *openers_bottom[3][128];   int i; @@ -655,15 +660,14 @@       // 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) {+          if (!(closer->can_open || opener->can_close) ||+	      closer->length % 3 == 0 ||+              (opener->length + closer->length) % 3 != 0) {             opener_found = true;             break;           }@@ -969,17 +973,21 @@     else if (input->data[i] == '(') {       ++nb_p;       ++i;-        if (nb_p > 32)-          return -1;+      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]))+    } else if (cmark_isspace(input->data[i])) {+      if (i == offset) {+        return -1;+      }       break;-    else+    } else {       ++i;+    }   }    if (i >= input->len)@@ -1005,7 +1013,7 @@       } else if (input->data[i] == '\\')         i += 2;       else if (input->data[i] == '\n' || input->data[i] == '<')-        return manual_scan_link_url_2(input, offset, output);+        return -1;       else         ++i;     }@@ -1432,8 +1440,7 @@    // parse link url:   spnl(&subj);-  if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1 &&-      url.len > 0) {+  if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1) {     subj.pos += matchlen;   } else {     return 0;
cbits/iterator.h view
@@ -6,7 +6,6 @@ #endif  #include "cmark-gfm.h"-#include "memory.h"  typedef struct {   cmark_event_type ev_type;
cbits/map.h view
@@ -1,7 +1,6 @@ #ifndef CMARK_MAP_H #define CMARK_MAP_H -#include "memory.h" #include "chunk.h"  #ifdef __cplusplus
cbits/node.h view
@@ -50,6 +50,7 @@ enum cmark_node__internal_flags {   CMARK_NODE__OPEN = (1 << 0),   CMARK_NODE__LAST_LINE_BLANK = (1 << 1),+  CMARK_NODE__LAST_LINE_CHECKED = (1 << 2), };  struct cmark_node {
cbits/parser.h view
@@ -2,9 +2,9 @@ #define CMARK_PARSER_H  #include <stdio.h>+#include "references.h" #include "node.h" #include "buffer.h"-#include "memory.h"  #ifdef __cplusplus extern "C" {@@ -30,6 +30,7 @@   bufsize_t first_nonspace;   /* See the documentation for cmark_parser_get_first_nonspace_column() in cmark.h */   bufsize_t first_nonspace_column;+  bufsize_t thematic_break_kill_pos;   /* See the documentation for cmark_parser_get_indent() in cmark.h */   int indent;   /* See the documentation for cmark_parser_is_blank() in cmark.h */
cbits/render.c view
@@ -98,21 +98,23 @@         }       } -    } 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;+      if (c == 10) {+        cmark_strbuf_putc(renderer->buffer, '\n');+        renderer->column = 0;+        renderer->begin_line = true;+        renderer->begin_content = true;+        renderer->last_breakable = 0;+      } else {+        cmark_render_code_point(renderer, c);+        renderer->begin_line = false;+        // we don't set 'begin_content' to false til we've+        // finished parsing a digit.  Reason:  in commonmark+        // we need to escape a potential list marker after+        // a digit:+        renderer->begin_content =+            renderer->begin_content && cmark_isdigit((char)c) == 1;+      }     } else {       (renderer->outc)(renderer, node, escape, c, nextc);       renderer->begin_line = false;
cbits/render.h view
@@ -8,7 +8,6 @@ #include <stdlib.h> #include "buffer.h" #include "chunk.h"-#include "memory.h"  typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping; 
cbits/scanners.c view
@@ -8261,2432 +8261,2258 @@ 		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, 224, 192, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -		  0,   0,   0,   0,   0,   0,   0,   0, -	};-	yych = *p;-	if (yych == '`') goto 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;+		 80,  80, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208,  32, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		208, 208, 208, 208, 208, 208, 208, 208, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +	};+	yych = *p;+	if (yych <= '&') {+		if (yych == '"') goto 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 <= '(') {+		if (yych <= 0x00) goto yy721;+		if (yych <= '\'') goto yy753;+		goto yy721;+	} else {+		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 <= '(') 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 (yych <= 0xDF) {+		if (yych <= '[') {+			if (yych <= 0x00) goto yy727;+			if (yych == ')') goto yy767;+			goto yy752;+		} else {+			if (yych <= '\\') goto yy756;+			if (yych <= 0x7F) goto yy752;+			if (yych <= 0xC1) goto yy727;+		}+	} else {+		if (yych <= 0xEF) {+			if (yych <= 0xE0) goto yy759;+			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 <= '(') 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 an opening code fence.+bufsize_t _scan_open_code_fence(const unsigned char *p)+{+  const unsigned char *marker = NULL;+  const unsigned char *start = p;++{+	unsigned char yych;+	static const unsigned char yybm[] = {+		  0, 192, 192, 192, 192, 192, 192, 192, +		192, 192,   0, 192, 192,   0, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		144, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 192, 192, +		192, 192, 192, 192, 192, 192, 224, 192, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +		  0,   0,   0,   0,   0,   0,   0,   0, +	};+	yych = *p;+	if (yych == '`') goto yy813;+	if (yych == '~') goto yy814;+	++p;+yy812:+	{ return 0; }+yy813:+	yych = *(marker = ++p);+	if (yych == '`') goto yy815;+	goto yy812;+yy814:+	yych = *(marker = ++p);+	if (yych == '~') goto yy817;+	goto yy812;+yy815:+	yych = *++p;+	if (yybm[0+yych] & 16) {+		goto yy818;+	}+yy816:+	p = marker;+	goto yy812;+yy817:+	yych = *++p;+	if (yybm[0+yych] & 32) {+		goto yy820;+	}+	goto yy816;+yy818:+	yych = *++p;+	if (yybm[0+yych] & 16) {+		goto yy818;+	}+	if (yych <= 0xDF) {+		if (yych <= '\f') {+			if (yych <= 0x00) goto yy816;+			if (yych == '\n') {+				marker = p;+				goto yy824;+			}+			marker = p;+			goto yy822;+		} else {+			if (yych <= '\r') {+				marker = p;+				goto yy824;+			}+			if (yych <= 0x7F) {+				marker = p;+				goto yy822;+			}+			if (yych <= 0xC1) goto yy816;+			marker = p;+			goto yy826;+		}+	} else {+		if (yych <= 0xEF) {+			if (yych <= 0xE0) {+				marker = p;+				goto yy827;+			}+			if (yych == 0xED) {+				marker = p;+				goto yy829;+			}+			marker = p;+			goto yy828;+		} else {+			if (yych <= 0xF0) {+				marker = p;+				goto yy830;+			}+			if (yych <= 0xF3) {+				marker = p;+				goto yy831;+			}+			if (yych <= 0xF4) {+				marker = p;+				goto yy832;+			}+			goto yy816;+		}+	}+yy820:+	yych = *++p;+	if (yybm[0+yych] & 32) {+		goto yy820;+	}+	if (yych <= 0xDF) {+		if (yych <= '\f') {+			if (yych <= 0x00) goto yy816;+			if (yych == '\n') {+				marker = p;+				goto yy835;+			}+			marker = p;+			goto yy833;+		} else {+			if (yych <= '\r') {+				marker = p;+				goto yy835;+			}+			if (yych <= 0x7F) {+				marker = p;+				goto yy833;+			}+			if (yych <= 0xC1) goto yy816;+			marker = p;+			goto yy837;+		}+	} else {+		if (yych <= 0xEF) {+			if (yych <= 0xE0) {+				marker = p;+				goto yy838;+			}+			if (yych == 0xED) {+				marker = p;+				goto yy840;+			}+			marker = p;+			goto yy839;+		} else {+			if (yych <= 0xF0) {+				marker = p;+				goto yy841;+			}+			if (yych <= 0xF3) {+				marker = p;+				goto yy842;+			}+			if (yych <= 0xF4) {+				marker = p;+				goto yy843;+			}+			goto yy816;+		}+	}+yy822:+	yych = *++p;+	if (yybm[0+yych] & 64) {+		goto yy822;+	}+	if (yych <= 0xEC) {+		if (yych <= 0xC1) {+			if (yych <= 0x00) goto yy816;+			if (yych >= 0x0E) goto yy816;+		} else {+			if (yych <= 0xDF) goto yy826;+			if (yych <= 0xE0) goto yy827;+			goto yy828;+		}+	} else {+		if (yych <= 0xF0) {+			if (yych <= 0xED) goto yy829;+			if (yych <= 0xEF) goto yy828;+			goto yy830;+		} else {+			if (yych <= 0xF3) goto yy831;+			if (yych <= 0xF4) goto yy832;+			goto yy816;+		}+	}+yy824:+	++p;+	p = marker;+	{ return (bufsize_t)(p - start); }+yy826:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0xBF) goto yy822;+	goto yy816;+yy827:+	yych = *++p;+	if (yych <= 0x9F) goto yy816;+	if (yych <= 0xBF) goto yy826;+	goto yy816;+yy828:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0xBF) goto yy826;+	goto yy816;+yy829:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0x9F) goto yy826;+	goto yy816;+yy830:+	yych = *++p;+	if (yych <= 0x8F) goto yy816;+	if (yych <= 0xBF) goto yy828;+	goto yy816;+yy831:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0xBF) goto yy828;+	goto yy816;+yy832:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0x8F) goto yy828;+	goto yy816;+yy833:+	yych = *++p;+	if (yybm[0+yych] & 128) {+		goto yy833;+	}+	if (yych <= 0xEC) {+		if (yych <= 0xC1) {+			if (yych <= 0x00) goto yy816;+			if (yych >= 0x0E) goto yy816;+		} else {+			if (yych <= 0xDF) goto yy837;+			if (yych <= 0xE0) goto yy838;+			goto yy839;+		}+	} else {+		if (yych <= 0xF0) {+			if (yych <= 0xED) goto yy840;+			if (yych <= 0xEF) goto yy839;+			goto yy841;+		} else {+			if (yych <= 0xF3) goto yy842;+			if (yych <= 0xF4) goto yy843;+			goto yy816;+		}+	}+yy835:+	++p;+	p = marker;+	{ return (bufsize_t)(p - start); }+yy837:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0xBF) goto yy833;+	goto yy816;+yy838:+	yych = *++p;+	if (yych <= 0x9F) goto yy816;+	if (yych <= 0xBF) goto yy837;+	goto yy816;+yy839:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0xBF) goto yy837;+	goto yy816;+yy840:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0x9F) goto yy837;+	goto yy816;+yy841:+	yych = *++p;+	if (yych <= 0x8F) goto yy816;+	if (yych <= 0xBF) goto yy839;+	goto yy816;+yy842:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0xBF) goto yy839;+	goto yy816;+yy843:+	yych = *++p;+	if (yych <= 0x7F) goto yy816;+	if (yych <= 0x8F) goto yy839;+	goto yy816;+}++}++// 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 yy848;+	if (yych == '~') goto yy849;+	++p;+yy847:+	{ return 0; }+yy848:+	yych = *(marker = ++p);+	if (yych == '`') goto yy850;+	goto yy847;+yy849:+	yych = *(marker = ++p);+	if (yych == '~') goto yy852;+	goto yy847;+yy850:+	yych = *++p;+	if (yybm[0+yych] & 32) {+		goto yy853;+	}+yy851:+	p = marker;+	goto yy847;+yy852:+	yych = *++p;+	if (yybm[0+yych] & 64) {+		goto yy855;+	}+	goto yy851;+yy853:+	yych = *++p;+	if (yybm[0+yych] & 32) {+		goto yy853;+	}+	if (yych <= '\f') {+		if (yych <= 0x08) goto yy851;+		if (yych <= '\t') {+			marker = p;+			goto yy857;+		}+		if (yych <= '\n') {+			marker = p;+			goto yy859;+		}+		goto yy851;+	} else {+		if (yych <= '\r') {+			marker = p;+			goto yy859;+		}+		if (yych == ' ') {+			marker = p;+			goto yy857;+		}+		goto yy851;+	}+yy855:+	yych = *++p;+	if (yybm[0+yych] & 64) {+		goto yy855;+	}+	if (yych <= '\f') {+		if (yych <= 0x08) goto yy851;+		if (yych <= '\t') {+			marker = p;+			goto yy861;+		}+		if (yych <= '\n') {+			marker = p;+			goto yy863;+		}+		goto yy851;+	} else {+		if (yych <= '\r') {+			marker = p;+			goto yy863;+		}+		if (yych == ' ') {+			marker = p;+			goto yy861;+		}+		goto yy851;+	}+yy857:+	yych = *++p;+	if (yybm[0+yych] & 128) {+		goto yy857;+	}+	if (yych <= 0x08) goto yy851;+	if (yych <= '\n') goto yy859;+	if (yych != '\r') goto yy851;+yy859:+	++p;+	p = marker;+	{ return (bufsize_t)(p - start); }+yy861:+	yych = *++p;+	if (yych <= '\f') {+		if (yych <= 0x08) goto yy851;+		if (yych <= '\t') goto yy861;+		if (yych >= '\v') goto yy851;+	} else {+		if (yych <= '\r') goto yy863;+		if (yych == ' ') goto yy861;+		goto yy851;+	}+yy863:+	++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 yy869;+	++p;+yy868:+	{ return 0; }+yy869:+	yych = *(marker = ++p);+	if (yych <= '@') {+		if (yych != '#') goto yy868;+	} else {+		if (yych <= 'Z') goto yy872;+		if (yych <= '`') goto yy868;+		if (yych <= 'z') goto yy872;+		goto yy868;+	}+	yych = *++p;+	if (yych <= 'W') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy873;+	} else {+		if (yych <= 'X') goto yy874;+		if (yych == 'x') goto yy874;+	}+yy871:+	p = marker;+	goto yy868;+yy872:+	yych = *++p;+	if (yych <= '@') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy875;+		goto yy871;+	} else {+		if (yych <= 'Z') goto yy875;+		if (yych <= '`') goto yy871;+		if (yych <= 'z') goto yy875;+		goto yy871;+	}+yy873:+	yych = *++p;+	if (yych <= '/') goto yy871;+	if (yych <= '9') goto yy876;+	if (yych == ';') goto yy877;+	goto yy871;+yy874:+	yych = *++p;+	if (yych <= '@') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy879;+		goto yy871;+	} else {+		if (yych <= 'F') goto yy879;+		if (yych <= '`') goto yy871;+		if (yych <= 'f') goto yy879;+		goto yy871;+	}+yy875:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy880;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+			goto yy880;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'z') goto yy880;+			goto yy871;+		}+	}+yy876:+	yych = *++p;+	if (yych <= '/') goto yy871;+	if (yych <= '9') goto yy881;+	if (yych != ';') goto yy871;+yy877:+	++p;+	{ return (bufsize_t)(p - start); }+yy879:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy882;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'F') {+			if (yych <= '@') goto yy871;+			goto yy882;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'f') goto yy882;+			goto yy871;+		}+	}+yy880:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy883;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+			goto yy883;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'z') goto yy883;+			goto yy871;+		}+	}+yy881:+	yych = *++p;+	if (yych <= '/') goto yy871;+	if (yych <= '9') goto yy884;+	if (yych == ';') goto yy877;+	goto yy871;+yy882:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy885;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'F') {+			if (yych <= '@') goto yy871;+			goto yy885;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'f') goto yy885;+			goto yy871;+		}+	}+yy883:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy886;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+			goto yy886;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'z') goto yy886;+			goto yy871;+		}+	}+yy884:+	yych = *++p;+	if (yych <= '/') goto yy871;+	if (yych <= '9') goto yy887;+	if (yych == ';') goto yy877;+	goto yy871;+yy885:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy888;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'F') {+			if (yych <= '@') goto yy871;+			goto yy888;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'f') goto yy888;+			goto yy871;+		}+	}+yy886:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy889;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+			goto yy889;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'z') goto yy889;+			goto yy871;+		}+	}+yy887:+	yych = *++p;+	if (yych <= '/') goto yy871;+	if (yych <= '9') goto yy890;+	if (yych == ';') goto yy877;+	goto yy871;+yy888:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy891;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'F') {+			if (yych <= '@') goto yy871;+			goto yy891;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'f') goto yy891;+			goto yy871;+		}+	}+yy889:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy892;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+			goto yy892;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'z') goto yy892;+			goto yy871;+		}+	}+yy890:+	yych = *++p;+	if (yych <= '/') goto yy871;+	if (yych <= '9') goto yy893;+	if (yych == ';') goto yy877;+	goto yy871;+yy891:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy893;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'F') {+			if (yych <= '@') goto yy871;+			goto yy893;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'f') goto yy893;+			goto yy871;+		}+	}+yy892:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy894;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+			goto yy894;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'z') goto yy894;+			goto yy871;+		}+	}+yy893:+	yych = *++p;+	if (yych == ';') goto yy877;+	goto yy871;+yy894:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy895;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy895:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy896;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy896:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy897;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy897:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy898;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy898:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy899;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy899:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy900;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy900:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy901;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy901:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy902;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy902:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy903;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy903:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy904;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy904:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy905;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy905:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy906;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy906:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy907;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy907:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy908;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy908:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy909;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy909:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy910;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy910:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy911;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy911:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy912;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy912:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy913;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy913:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy914;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy914:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy915;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy915:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy916;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy916:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy917;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+		} else {+			if (yych <= '`') goto yy871;+			if (yych >= '{') goto yy871;+		}+	}+yy917:+	yych = *++p;+	if (yych <= ';') {+		if (yych <= '/') goto yy871;+		if (yych <= '9') goto yy893;+		if (yych <= ':') goto yy871;+		goto yy877;+	} else {+		if (yych <= 'Z') {+			if (yych <= '@') goto yy871;+			goto yy893;+		} else {+			if (yych <= '`') goto yy871;+			if (yych <= 'z') goto yy893;+			goto yy871;+		}+	}+}++}++// 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 yy922;+			if (yych >= 'F') goto yy923;+		} else {+			if (yych == 'J') goto yy924;+			if (yych >= 'V') goto yy925;+		}+	} else {+		if (yych <= 'f') {+			if (yych == 'd') goto yy922;+			if (yych >= 'f') goto yy923;+		} else {+			if (yych <= 'j') {+				if (yych >= 'j') goto yy924;+			} else {+				if (yych == 'v') goto yy925;+			}+		}+	}+	++p;+yy921:+	{ return 0; }+yy922:+	yyaccept = 0;+	yych = *(marker = ++p);+	if (yych == 'A') goto yy926;+	if (yych == 'a') goto yy926;+	goto yy921;+yy923:+	yyaccept = 0;+	yych = *(marker = ++p);+	if (yych == 'I') goto yy928;+	if (yych == 'i') goto yy928;+	goto yy921;+yy924:+	yyaccept = 0;+	yych = *(marker = ++p);+	if (yych == 'A') goto yy929;+	if (yych == 'a') goto yy929;+	goto yy921;+yy925:+	yyaccept = 0;+	yych = *(marker = ++p);+	if (yych == 'B') goto yy930;+	if (yych == 'b') goto yy930;+	goto yy921;+yy926:+	yych = *++p;+	if (yych == 'T') goto yy931;+	if (yych == 't') goto yy931;+yy927:+	p = marker;+	if (yyaccept == 0) {+		goto yy921;+	} else {+		goto yy939;+	}+yy928:+	yych = *++p;+	if (yych == 'L') goto yy932;+	if (yych == 'l') goto yy932;+	goto yy927;+yy929:+	yych = *++p;+	if (yych == 'V') goto yy933;+	if (yych == 'v') goto yy933;+	goto yy927;+yy930:+	yych = *++p;+	if (yych == 'S') goto yy934;+	if (yych == 's') goto yy934;+	goto yy927;+yy931:+	yych = *++p;+	if (yych == 'A') goto yy935;+	if (yych == 'a') goto yy935;+	goto yy927;+yy932:+	yych = *++p;+	if (yych == 'E') goto yy936;+	if (yych == 'e') goto yy936;+	goto yy927;+yy933:+	yych = *++p;+	if (yych == 'A') goto yy930;+	if (yych == 'a') goto yy930;+	goto yy927;+yy934:+	yych = *++p;+	if (yych == 'C') goto yy937;+	if (yych == 'c') goto yy937;+	goto yy927;+yy935:+	yych = *++p;+	if (yych == ':') goto yy938;+	goto yy927;+yy936:+	yych = *++p;+	if (yych == ':') goto yy940;+	goto yy927;+yy937:+	yych = *++p;+	if (yych == 'R') goto yy941;+	if (yych == 'r') goto yy941;+	goto yy927;+yy938:+	yyaccept = 1;+	yych = *(marker = ++p);+	if (yych == 'I') goto yy942;+	if (yych == 'i') goto yy942;+yy939:+	{ return (bufsize_t)(p - start); }+yy940:+	++p;+	goto yy939;+yy941:+	yych = *++p;+	if (yych == 'I') goto yy943;+	if (yych == 'i') goto yy943;+	goto yy927;+yy942:+	yych = *++p;+	if (yych == 'M') goto yy944;+	if (yych == 'm') goto yy944;+	goto yy927;+yy943:+	yych = *++p;+	if (yych == 'P') goto yy945;+	if (yych == 'p') goto yy945;+	goto yy927;+yy944:+	yych = *++p;+	if (yych == 'A') goto yy946;+	if (yych == 'a') goto yy946;+	goto yy927;+yy945:+	yych = *++p;+	if (yych == 'T') goto yy936;+	if (yych == 't') goto yy936;+	goto yy927;+yy946:+	yych = *++p;+	if (yych == 'G') goto yy947;+	if (yych != 'g') goto yy927;+yy947:+	yych = *++p;+	if (yych == 'E') goto yy948;+	if (yych != 'e') goto yy927;+yy948:+	yych = *++p;+	if (yych != '/') goto yy927;+	yych = *++p;+	if (yych <= 'W') {+		if (yych <= 'J') {+			if (yych == 'G') goto yy950;+			if (yych <= 'I') goto yy927;+			goto yy951;+		} else {+			if (yych == 'P') goto yy952;+			if (yych <= 'V') goto yy927;+			goto yy953;+		}+	} else {+		if (yych <= 'j') {+			if (yych == 'g') goto yy950;+			if (yych <= 'i') goto yy927;+			goto yy951;+		} else {+			if (yych <= 'p') {+				if (yych <= 'o') goto yy927;+				goto yy952;+			} else {+				if (yych == 'w') goto yy953;+				goto yy927;+			}+		}+	}+yy950:+	yych = *++p;+	if (yych == 'I') goto yy954;+	if (yych == 'i') goto yy954;+	goto yy927;+yy951:+	yych = *++p;+	if (yych == 'P') goto yy955;+	if (yych == 'p') goto yy955;+	goto yy927;+yy952:+	yych = *++p;+	if (yych == 'N') goto yy956;+	if (yych == 'n') goto yy956;+	goto yy927;+yy953:+	yych = *++p;+	if (yych == 'E') goto yy957;+	if (yych == 'e') goto yy957;+	goto yy927;+yy954:+	yych = *++p;+	if (yych == 'F') goto yy958;+	if (yych == 'f') goto yy958;+	goto yy927;+yy955:+	yych = *++p;+	if (yych == 'E') goto yy956;+	if (yych != 'e') goto yy927;+yy956:+	yych = *++p;+	if (yych == 'G') goto yy958;+	if (yych == 'g') goto yy958;+	goto yy927;+yy957:+	yych = *++p;+	if (yych == 'B') goto yy960;+	if (yych == 'b') goto yy960;+	goto yy927;+yy958:+	++p;+	{ return 0; }+yy960:+	yych = *++p;+	if (yych == 'P') goto yy958;+	if (yych == 'p') goto yy958;+	goto yy927;+}++}++// 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 yy965;+	++p;+yy964:+	{ return 0; }+yy965:+	yych = *(marker = ++p);+	if (yych != '^') goto yy964;+	yych = *++p;+	if (yych != ']') goto yy969;+yy967:+	p = marker;+	goto yy964;+yy968:+	yych = *++p;+yy969:+	if (yybm[0+yych] & 64) {+		goto yy968;+	}+	if (yych <= 0xEC) {+		if (yych <= 0xC1) {+			if (yych <= ' ') goto yy967;+			if (yych <= ']') goto yy977;+			goto yy967;+		} else {+			if (yych <= 0xDF) goto yy970;+			if (yych <= 0xE0) goto yy971;+			goto yy972;+		}+	} else {+		if (yych <= 0xF0) {+			if (yych <= 0xED) goto yy973;+			if (yych <= 0xEF) goto yy972;+			goto yy974;+		} else {+			if (yych <= 0xF3) goto yy975;+			if (yych <= 0xF4) goto yy976;+			goto yy967;+		}+	}+yy970:+	yych = *++p;+	if (yych <= 0x7F) goto yy967;+	if (yych <= 0xBF) goto yy968;+	goto yy967;+yy971:+	yych = *++p;+	if (yych <= 0x9F) goto yy967;+	if (yych <= 0xBF) goto yy970;+	goto yy967;+yy972:+	yych = *++p;+	if (yych <= 0x7F) goto yy967;+	if (yych <= 0xBF) goto yy970;+	goto yy967;+yy973:+	yych = *++p;+	if (yych <= 0x7F) goto yy967;+	if (yych <= 0x9F) goto yy970;+	goto yy967;+yy974:+	yych = *++p;+	if (yych <= 0x8F) goto yy967;+	if (yych <= 0xBF) goto yy972;+	goto yy967;+yy975:+	yych = *++p;+	if (yych <= 0x7F) goto yy967;+	if (yych <= 0xBF) goto yy972;+	goto yy967;+yy976:+	yych = *++p;+	if (yych <= 0x7F) goto yy967;+	if (yych <= 0x8F) goto yy972;+	goto yy967;+yy977:+	yych = *++p;+	if (yych != ':') goto yy967;+yy978:+	yych = *++p;+	if (yybm[0+yych] & 128) {+		goto yy978; 	} 	{ return (bufsize_t)(p - start); } }
cbits/scanners.h view
@@ -26,7 +26,6 @@ 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);@@ -50,7 +49,6 @@ #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)
changelog view
@@ -1,3 +1,13 @@+cmark-gfm 0.2.0 (8 Apr 2019)++  * Pull in upstream changes.++cmark 0.6 (08 Apr 2019)++  * Update to cmark 0.29.0.+  * Export optUnsafe.  Note that the default is now to suppress+    potentially unsafe HTML; set optUnsafe to return to the old behavior.+ cmark-gfm 0.1.8 (14 Mar 2019)    * Pull in upstream changes.
cmark-gfm.cabal view
@@ -1,12 +1,12 @@ name:                cmark-gfm-version:             0.1.8+version:             0.2.0 synopsis:            Fast, accurate GitHub Flavored Markdown parser and renderer description:   This package provides Haskell bindings for   <https://github.com/github/cmark-gfm libcmark-gfm>, the reference   parser for <https://github.github.com/gfm/ GitHub Flavored Markdown>, a fully   specified variant of Markdown. It includes sources for-  libcmark-gfm (0.28.3.gfm.20) and does not require prior installation of the+  libcmark-gfm (0.29.0.gfm.0) and does not require prior installation of the   C library.  homepage:            https://github.com/kivikakk/cmark-gfm-hs@@ -16,7 +16,6 @@ maintainer:          kivikakk@github.com copyright:           (C) 2015--17 John MacFarlane, (C) 2017--19 Ashe Connor category:            Text-tested-with:         GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.2, GHC == 7.10.3 build-type:          Simple extra-source-files:  README.md                      changelog@@ -136,4 +135,4 @@   hs-source-dirs: test   build-depends:  base, cmark-gfm, text, HUnit >= 1.2 && < 1.7   ghc-options:    -Wall -fno-warn-unused-do-bind -threaded-  default-language: Haskell98+  default-language: Haskell2010
test/test-cmark.hs view
@@ -16,11 +16,11 @@ -- Here we just make sure it's basically working. tests :: Test tests = TestList [-    "<h1>Hi</h1>\n" ~=? commonmarkToHtml [] [] "# Hi"+    "<h1>Hi</h1>\n<p><em>there</em></p>\n" ~=? commonmarkToHtml [] [] "# Hi\n\n*there*"   , "<p>dog’s</p>\n" ~=? commonmarkToHtml [optSmart] [] "dog's"-  , "<p><a href=\"\">trick</a></p>\n" ~=? commonmarkToHtml [] [] "[trick](javascript:alert('hi'))"+  , "<p><a href=\"\">trick</a></p>\n" ~=? commonmarkToHtml [optSafe] [] "[trick](javascript:alert('hi'))"   , ".RS\n.PP\nquote\n.RE\n" ~=? commonmarkToMan [] [] Nothing "> quote"-  , (Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 1, endColumn = 13})) DOCUMENT [Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 1, endColumn = 13})) PARAGRAPH [Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 1, endColumn = 6})) (TEXT "Hello ") [],Node (Just (PosInfo {startLine = 1, startColumn = 7, endLine = 1, endColumn = 13})) EMPH [Node (Just (PosInfo {startLine = 1, startColumn = 8, endLine = 1, endColumn = 12})) (TEXT "world") []]]]) ~=? commonmarkToNode [] [] "Hello *world*"+  , Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 1, endColumn = 13})) DOCUMENT [Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 1, endColumn = 13})) PARAGRAPH [Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 1, endColumn = 6})) (TEXT "Hello ") [],Node (Just (PosInfo {startLine = 1, startColumn = 7, endLine = 1, endColumn = 13})) EMPH [Node (Just (PosInfo {startLine = 1, startColumn = 8, endLine = 1, endColumn = 12})) (TEXT "world") []]]] ~=? commonmarkToNode [] [] "Hello *world*"   , "> Hello\n> *world*\n" ~=? nodeToCommonmark [] (Just 12) (Node Nothing DOCUMENT [Node Nothing BLOCK_QUOTE [Node Nothing PARAGRAPH [Node Nothing (TEXT "Hello ") [],Node Nothing EMPH [Node Nothing (TEXT "world") []]]]])   , "<p>~hi~</p>\n" ~=? commonmarkToHtml [] [] "~hi~"   , "<p><del>hi</del></p>\n" ~=? commonmarkToHtml [] [extStrikethrough] "~hi~"