cmark

My personal build of CMark ✏️

Commit
a9da6782761e4d3ac7dfd3193fa43b73824afef4
Parent
ea68f8830dcea3c21b91b02bf3bede8789961acd
Author
Yuki Izumi <kivikakk@github.com>
Date

Allow balanced nested parens in link destinations (#166)

Diffstat

5 files changed, 1630 insertions, 3701 deletions

Status File Name N° Changes Insertions Deletions
Modified src/inlines.c 87 62 25
Modified src/scanners.c 5200 1558 3642
Modified src/scanners.h 2 0 2
Modified src/scanners.re 15 0 15
Modified test/spec.txt 27 10 17
diff --git a/src/inlines.c b/src/inlines.c
@@ -823,7 +823,44 @@ noMatch:
   subj->pos = startpos; // rewind
   return 0;
 }
+static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) {
+  bufsize_t i = offset;
+  size_t nb_p = 0;
+
+  if (i < input->len && input->data[i] == '<') {
+    ++i;
+    while (i < input->len) {
+      if (input->data[i] == '>') {
+        ++i;
+        break;
+      } else if (input->data[i] == '\\')
+        i += 2;
+      else if (cmark_isspace(input->data[i]))
+        return -1;
+      else
+        ++i;
+    }
+  } else {
+    while (i < input->len) {
+      if (input->data[i] == '\\')
+        i += 2;
+      else if (input->data[i] == '(') {
+        ++nb_p; ++i;
+      } else if (input->data[i] == ')') {
+        if (nb_p == 0)
+          break;
+        --nb_p; ++i;
+      } else if (cmark_isspace(input->data[i]))
+        break;
+      else
+        ++i;
+    }
+  }
 
+  if (i >= input->len)
+    return -1;
+  return i - offset;
+}
 // Return a link, an image, or a literal close bracket.
 static cmark_node *handle_close_bracket(subject *subj) {
   bufsize_t initial_pos, after_link_text_pos;
@@ -865,7 +902,7 @@ static cmark_node *handle_close_bracket(subject *subj) {
   // First, look for an inline link.
   if (peek_char(subj) == '(' &&
       ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) &&
-      ((n = scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) {
+      ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) {
 
     // try to parse an explicit link:
     starturl = subj->pos + 1 + sps; // after (
@@ -996,31 +1033,31 @@ static cmark_node *handle_newline(subject *subj) {
 static bufsize_t subject_find_special_char(subject *subj, int options) {
   // "\r\n\\`&_*[]<!"
   static const int8_t SPECIAL_CHARS[256] = {
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
+    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
   // " ' . -
   static const char SMART_PUNCT_CHARS[] = {
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   };
 
   bufsize_t n = subj->pos + 1;
@@ -1171,8 +1208,8 @@ bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input,
 
   // parse link url:
   spnl(&subj);
-  matchlen = scan_link_url(&subj.input, subj.pos);
-  if (matchlen) {
+  matchlen = manual_scan_link_url(&subj.input, subj.pos);
+  if (matchlen > 0) {
     url = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
     subj.pos += matchlen;
   } else {
diff --git a/src/scanners.c b/src/scanners.c
@@ -1,7 +1,7 @@
 /* Generated by re2c 0.15.3 */
-#include "scanners.h"
-#include "chunk.h"
 #include <stdlib.h>
+#include "chunk.h"
+#include "scanners.h"
 
 bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
                    bufsize_t offset) {
@@ -15233,11 +15233,10 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p) {
   }
 }
 
-// Try to match a URL in a link or reference, return number of chars matched.
-// This may optionally be contained in <..>; otherwise
-// whitespace and unbalanced right parentheses aren't allowed.
-// Newlines aren't ever allowed.
-bufsize_t _scan_link_url(const unsigned char *p) {
+// Try to match a link title (in single quotes, in double quotes, or
+// in parentheses), returning number of chars matched.  Allow one
+// level of internal nesting (quotes within quotes).
+bufsize_t _scan_link_title(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
@@ -15245,11 +15244,11 @@ bufsize_t _scan_link_url(const unsigned char *p) {
     unsigned char yych;
     unsigned int yyaccept = 0;
     static const unsigned char yybm[] = {
-        0,   128, 128, 128, 128, 128, 128, 128, 128, 0,   8,   128, 128, 8,
-        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
-        128, 128, 128, 128, 8,   224, 224, 224, 224, 224, 224, 224, 128, 128,
+        0,   224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 96,  224, 224, 224, 224, 160, 224, 192,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
         224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 32,  224, 32,  224, 224, 224, 224, 224, 224, 224,
         224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
         224, 224, 224, 224, 224, 224, 224, 224, 16,  224, 224, 224, 224, 224,
         224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
@@ -15266,2726 +15265,643 @@ bufsize_t _scan_link_url(const unsigned char *p) {
         0,   0,   0,   0,
     };
     yych = *(marker = p);
-    if (yych <= '[') {
-      if (yych <= ' ') {
-        if (yych <= '\f') {
-          if (yych == '\n')
-            goto yy952;
-          goto yy968;
-        } else {
-          if (yych <= '\r')
-            goto yy954;
-          if (yych <= 0x1F)
-            goto yy968;
-          goto yy954;
-        }
+    if (yych <= 0xC1) {
+      if (yych <= '"') {
+        if (yych == '\n')
+          goto yy951;
+        if (yych <= '!')
+          goto yy955;
+        goto yy952;
       } else {
-        if (yych <= ')') {
-          if (yych <= '\'')
-            goto yy956;
-          if (yych <= '(')
-            goto yy966;
-          goto yy968;
+        if (yych <= '\'') {
+          if (yych <= '&')
+            goto yy955;
+          goto yy953;
         } else {
-          if (yych == '<')
+          if (yych <= '(')
+            goto yy954;
+          if (yych <= 0x7F)
             goto yy955;
-          goto yy956;
         }
       }
     } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= '\\')
-            goto yy965;
-          if (yych <= 0x7F)
-            goto yy956;
-        } else {
-          if (yych <= 0xDF)
-            goto yy957;
-          if (yych <= 0xE0)
-            goto yy959;
-          goto yy960;
-        }
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy956;
+        if (yych <= 0xE0)
+          goto yy958;
+        if (yych <= 0xEC)
+          goto yy959;
+        goto yy963;
       } else {
         if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy964;
           if (yych <= 0xEF)
-            goto yy960;
-          goto yy961;
+            goto yy959;
+          goto yy960;
         } else {
           if (yych <= 0xF3)
-            goto yy962;
+            goto yy961;
           if (yych <= 0xF4)
-            goto yy963;
+            goto yy962;
         }
       }
     }
-  yy951 : { return (bufsize_t)(p - start); }
+  yy951 : { return 0; }
   yy952:
     yyaccept = 0;
-    marker = ++p;
-    yych = *p;
+    yych = *(marker = ++p);
+    if (yych <= 0x00)
+      goto yy951;
+    if (yych <= 0x7F)
+      goto yy995;
+    if (yych <= 0xC1)
+      goto yy951;
+    if (yych <= 0xF4)
+      goto yy995;
+    goto yy951;
   yy953:
-    if (yybm[0 + yych] & 8) {
-      goto yy952;
-    }
-    if (yych <= 0x7F) {
-      if (yych <= ')') {
-        if (yych <= 0x1F)
-          goto yy951;
-        if (yych <= '\'')
-          goto yy980;
-        if (yych <= '(')
-          goto yy971;
-        goto yy951;
-      } else {
-        if (yych <= '<') {
-          if (yych <= ';')
-            goto yy980;
-          goto yy1016;
-        } else {
-          if (yych == '\\')
-            goto yy982;
-          goto yy980;
-        }
-      }
-    } else {
-      if (yych <= 0xED) {
-        if (yych <= 0xDF) {
-          if (yych <= 0xC1)
-            goto yy951;
-          goto yy983;
-        } else {
-          if (yych <= 0xE0)
-            goto yy984;
-          if (yych <= 0xEC)
-            goto yy985;
-          goto yy989;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xEF)
-            goto yy985;
-          goto yy986;
-        } else {
-          if (yych <= 0xF3)
-            goto yy987;
-          if (yych <= 0xF4)
-            goto yy988;
-          goto yy951;
-        }
-      }
-    }
-  yy954:
     yyaccept = 0;
     yych = *(marker = ++p);
-    goto yy953;
-  yy955:
+    if (yych <= 0x00)
+      goto yy951;
+    if (yych <= 0x7F)
+      goto yy981;
+    if (yych <= 0xC1)
+      goto yy951;
+    if (yych <= 0xF4)
+      goto yy981;
+    goto yy951;
+  yy954:
     yyaccept = 0;
     yych = *(marker = ++p);
-    if (yybm[0 + yych] & 64) {
-      goto yy1016;
-    }
-    if (yych <= '>') {
-      if (yych <= '\r') {
-        if (yych <= 0x08) {
-          if (yych <= 0x00)
-            goto yy951;
-          goto yy1029;
-        } else {
-          if (yych <= '\n')
-            goto yy951;
-          if (yych <= '\f')
-            goto yy1029;
-          goto yy951;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= 0x1F)
-            goto yy1029;
-          if (yych <= ' ')
-            goto yy951;
-          goto yy1027;
-        } else {
-          if (yych <= ')')
-            goto yy1029;
-          if (yych <= '<')
-            goto yy980;
-          goto yy1018;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= '\\')
-            goto yy1015;
-          goto yy951;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1020;
-          if (yych <= 0xE0)
-            goto yy1021;
-          goto yy1022;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1026;
-          if (yych <= 0xEF)
-            goto yy1022;
-          goto yy1023;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1024;
-          if (yych <= 0xF4)
-            goto yy1025;
-          goto yy951;
-        }
-      }
-    }
+    if (yych <= 0x00)
+      goto yy951;
+    if (yych <= 0x7F)
+      goto yy967;
+    if (yych <= 0xC1)
+      goto yy951;
+    if (yych <= 0xF4)
+      goto yy967;
+    goto yy951;
+  yy955:
+    yych = *++p;
+    goto yy951;
   yy956:
-    yyaccept = 0;
-    yych = *(marker = ++p);
-    goto yy981;
-  yy957:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy958;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy956;
-  yy958:
+      goto yy955;
+  yy957:
     p = marker;
     if (yyaccept <= 1) {
       if (yyaccept == 0) {
         goto yy951;
       } else {
-        goto yy967;
+        goto yy976;
       }
     } else {
-      goto yy1019;
+      if (yyaccept == 2) {
+        goto yy990;
+      } else {
+        goto yy1004;
+      }
     }
-  yy959:
+  yy958:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
       goto yy957;
-    goto yy958;
-  yy960:
+    if (yych <= 0xBF)
+      goto yy956;
+    goto yy957;
+  yy959:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
       goto yy957;
-    goto yy958;
-  yy961:
+    if (yych <= 0xBF)
+      goto yy956;
+    goto yy957;
+  yy960:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy958;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy960;
-    goto yy958;
-  yy962:
+      goto yy959;
+    goto yy957;
+  yy961:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy958;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy960;
-    goto yy958;
-  yy963:
+      goto yy959;
+    goto yy957;
+  yy962:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy958;
+      goto yy957;
     if (yych <= 0x8F)
-      goto yy960;
-    goto yy958;
-  yy964:
+      goto yy959;
+    goto yy957;
+  yy963:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
       goto yy957;
-    goto yy958;
-  yy965:
-    yyaccept = 0;
-    yych = *(marker = ++p);
-    if (yych <= 0xDF) {
-      if (yych <= 0x1F) {
-        if (yych <= 0x08)
-          goto yy980;
-        if (yych <= '\r')
-          goto yy951;
-        goto yy980;
-      } else {
-        if (yych <= ' ')
-          goto yy951;
-        if (yych <= 0x7F)
-          goto yy980;
-        if (yych <= 0xC1)
-          goto yy951;
-        goto yy990;
-      }
-    } else {
-      if (yych <= 0xEF) {
-        if (yych <= 0xE0)
-          goto yy991;
-        if (yych == 0xED)
-          goto yy996;
-        goto yy992;
-      } else {
-        if (yych <= 0xF0)
-          goto yy993;
-        if (yych <= 0xF3)
-          goto yy994;
-        if (yych <= 0xF4)
-          goto yy995;
-        goto yy951;
-      }
-    }
-  yy966:
-    yyaccept = 1;
-    yych = *(marker = ++p);
-    if (yych <= '(') {
-      if (yych <= ' ')
-        goto yy967;
-      if (yych <= '\'')
-        goto yy972;
-    } else {
-      if (yych <= 0x7F)
-        goto yy972;
-      if (yych <= 0xC1)
-        goto yy967;
-      if (yych <= 0xF4)
-        goto yy972;
-    }
-  yy967 : { return 0; }
-  yy968:
-    yych = *++p;
-    goto yy967;
-  yy969:
+    if (yych <= 0x9F)
+      goto yy956;
+    goto yy957;
+  yy964:
     ++p;
     yych = *p;
-    if (yybm[0 + yych] & 16) {
-      goto yy969;
+    if (yybm[0 + yych] & 32) {
+      goto yy966;
     }
     if (yych <= 0xE0) {
-      if (yych <= ')') {
-        if (yych <= ' ')
-          goto yy958;
-        if (yych >= ')')
-          goto yy997;
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy957;
+        if (yych <= ')')
+          goto yy977;
+        goto yy964;
       } else {
-        if (yych <= 0x7F)
-          goto yy971;
         if (yych <= 0xC1)
-          goto yy958;
+          goto yy957;
         if (yych <= 0xDF)
-          goto yy973;
-        goto yy974;
+          goto yy968;
+        goto yy969;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy979;
-        goto yy975;
+          goto yy974;
+        goto yy970;
       } else {
         if (yych <= 0xF0)
-          goto yy976;
+          goto yy971;
         if (yych <= 0xF3)
-          goto yy977;
+          goto yy972;
         if (yych <= 0xF4)
-          goto yy978;
-        goto yy958;
+          goto yy973;
+        goto yy957;
       }
     }
-  yy971:
+  yy966:
     ++p;
     yych = *p;
-  yy972:
+  yy967:
     if (yybm[0 + yych] & 32) {
-      goto yy971;
+      goto yy966;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
-        if (yych <= '(')
-          goto yy958;
+        if (yych <= 0x00)
+          goto yy957;
         if (yych <= ')')
-          goto yy980;
-        goto yy969;
+          goto yy975;
+        goto yy964;
       } else {
         if (yych <= 0xC1)
-          goto yy958;
+          goto yy957;
         if (yych >= 0xE0)
-          goto yy974;
+          goto yy969;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy979;
-        goto yy975;
+          goto yy974;
+        goto yy970;
       } else {
         if (yych <= 0xF0)
-          goto yy976;
+          goto yy971;
         if (yych <= 0xF3)
-          goto yy977;
-        if (yych <= 0xF4)
-          goto yy978;
-        goto yy958;
-      }
-    }
-  yy973:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy971;
-    goto yy958;
-  yy974:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy973;
-    goto yy958;
-  yy975:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy973;
-    goto yy958;
-  yy976:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy975;
-    goto yy958;
-  yy977:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy975;
-    goto yy958;
-  yy978:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy975;
-    goto yy958;
-  yy979:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy973;
-    goto yy958;
-  yy980:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-  yy981:
-    if (yych <= 0xC1) {
-      if (yych <= ')') {
-        if (yych <= ' ')
-          goto yy951;
-        if (yych <= '\'')
-          goto yy980;
-        if (yych <= '(')
-          goto yy971;
-        goto yy951;
-      } else {
-        if (yych == '\\')
-          goto yy982;
-        if (yych <= 0x7F)
-          goto yy980;
-        goto yy951;
-      }
-    } else {
-      if (yych <= 0xED) {
-        if (yych <= 0xDF)
-          goto yy983;
-        if (yych <= 0xE0)
-          goto yy984;
-        if (yych <= 0xEC)
-          goto yy985;
-        goto yy989;
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xEF)
-            goto yy985;
-          goto yy986;
-        } else {
-          if (yych <= 0xF3)
-            goto yy987;
-          if (yych <= 0xF4)
-            goto yy988;
-          goto yy951;
-        }
-      }
-    }
-  yy982:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= 0xDF) {
-      if (yych <= 0x1F) {
-        if (yych <= 0x08)
-          goto yy980;
-        if (yych <= '\r')
-          goto yy951;
-        goto yy980;
-      } else {
-        if (yych <= ' ')
-          goto yy951;
-        if (yych <= 0x7F)
-          goto yy980;
-        if (yych <= 0xC1)
-          goto yy951;
-        goto yy990;
-      }
-    } else {
-      if (yych <= 0xEF) {
-        if (yych <= 0xE0)
-          goto yy991;
-        if (yych == 0xED)
-          goto yy996;
-        goto yy992;
-      } else {
-        if (yych <= 0xF0)
-          goto yy993;
-        if (yych <= 0xF3)
-          goto yy994;
-        if (yych <= 0xF4)
-          goto yy995;
-        goto yy951;
-      }
-    }
-  yy983:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy980;
-    goto yy958;
-  yy984:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy983;
-    goto yy958;
-  yy985:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy983;
-    goto yy958;
-  yy986:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy985;
-    goto yy958;
-  yy987:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy985;
-    goto yy958;
-  yy988:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy985;
-    goto yy958;
-  yy989:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy983;
-    goto yy958;
-  yy990:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy980;
-    goto yy958;
-  yy991:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy990;
-    goto yy958;
-  yy992:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy990;
-    goto yy958;
-  yy993:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy992;
-    goto yy958;
-  yy994:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy992;
-    goto yy958;
-  yy995:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy992;
-    goto yy958;
-  yy996:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy990;
-    goto yy958;
-  yy997:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-  yy998:
-    if (yych <= 0xC1) {
-      if (yych <= ')') {
-        if (yych <= ' ')
-          goto yy951;
-        if (yych <= '\'')
-          goto yy997;
-        if (yych <= '(')
-          goto yy971;
-        goto yy980;
-      } else {
-        if (yych == '\\')
-          goto yy999;
-        if (yych <= 0x7F)
-          goto yy997;
-        goto yy951;
-      }
-    } else {
-      if (yych <= 0xED) {
-        if (yych <= 0xDF)
-          goto yy1000;
-        if (yych <= 0xE0)
-          goto yy1001;
-        if (yych <= 0xEC)
-          goto yy1002;
-        goto yy1006;
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xEF)
-            goto yy1002;
-          goto yy1003;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1004;
-          if (yych <= 0xF4)
-            goto yy1005;
-          goto yy951;
-        }
-      }
-    }
-  yy999:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= 0xC1) {
-      if (yych <= ' ') {
-        if (yych <= 0x08)
-          goto yy980;
-        if (yych <= '\r')
-          goto yy951;
-        if (yych <= 0x1F)
-          goto yy980;
-        goto yy951;
-      } else {
-        if (yych == '\\')
-          goto yy1007;
-        if (yych <= 0x7F)
-          goto yy997;
-        goto yy951;
-      }
-    } else {
-      if (yych <= 0xED) {
-        if (yych <= 0xDF)
-          goto yy1008;
-        if (yych <= 0xE0)
-          goto yy1009;
-        if (yych <= 0xEC)
-          goto yy1010;
-        goto yy1014;
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xEF)
-            goto yy1010;
-          goto yy1011;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1012;
-          if (yych <= 0xF4)
-            goto yy1013;
-          goto yy951;
-        }
-      }
-    }
-  yy1000:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy997;
-    goto yy958;
-  yy1001:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1000;
-    goto yy958;
-  yy1002:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1000;
-    goto yy958;
-  yy1003:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1002;
-    goto yy958;
-  yy1004:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1002;
-    goto yy958;
-  yy1005:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1002;
-    goto yy958;
-  yy1006:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1000;
-    goto yy958;
-  yy1007:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= 0xDF) {
-      if (yych <= '[') {
-        if (yych <= ' ')
-          goto yy951;
-        if (yych == '(')
-          goto yy971;
-        goto yy997;
-      } else {
-        if (yych <= '\\')
-          goto yy999;
-        if (yych <= 0x7F)
-          goto yy997;
-        if (yych <= 0xC1)
-          goto yy951;
-        goto yy1000;
-      }
-    } else {
-      if (yych <= 0xEF) {
-        if (yych <= 0xE0)
-          goto yy1001;
-        if (yych == 0xED)
-          goto yy1006;
-        goto yy1002;
-      } else {
-        if (yych <= 0xF0)
-          goto yy1003;
-        if (yych <= 0xF3)
-          goto yy1004;
-        if (yych <= 0xF4)
-          goto yy1005;
-        goto yy951;
-      }
-    }
-  yy1008:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy997;
-    goto yy958;
-  yy1009:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1008;
-    goto yy958;
-  yy1010:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1008;
-    goto yy958;
-  yy1011:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1010;
-    goto yy958;
-  yy1012:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1010;
-    goto yy958;
-  yy1013:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1010;
-    goto yy958;
-  yy1014:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1008;
-    goto yy958;
-  yy1015:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= '\\') {
-      if (yych <= '\r') {
-        if (yych <= 0x08) {
-          if (yych <= 0x00)
-            goto yy980;
-        } else {
-          if (yych <= '\n')
-            goto yy951;
-          if (yych <= '\f')
-            goto yy1029;
-          goto yy951;
-        }
-      } else {
-        if (yych <= '=') {
-          if (yych == ' ')
-            goto yy951;
-        } else {
-          if (yych <= '>')
-            goto yy1073;
-          if (yych >= '\\')
-            goto yy1074;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych >= 0x80)
-            goto yy951;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1075;
-          if (yych <= 0xE0)
-            goto yy1076;
-          goto yy1077;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1081;
-          if (yych <= 0xEF)
-            goto yy1077;
-          goto yy1078;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1079;
-          if (yych <= 0xF4)
-            goto yy1080;
-          goto yy951;
-        }
-      }
-    }
-  yy1016:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yybm[0 + yych] & 64) {
-      goto yy1016;
-    }
-    if (yych <= '>') {
-      if (yych <= '\r') {
-        if (yych <= 0x08) {
-          if (yych <= 0x00)
-            goto yy951;
-          goto yy1029;
-        } else {
-          if (yych <= '\n')
-            goto yy951;
-          if (yych <= '\f')
-            goto yy1029;
-          goto yy951;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= 0x1F)
-            goto yy1029;
-          if (yych <= ' ')
-            goto yy951;
-          goto yy1027;
-        } else {
-          if (yych <= ')')
-            goto yy1029;
-          if (yych <= '<')
-            goto yy980;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= '\\')
-            goto yy1015;
-          goto yy951;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1020;
-          if (yych <= 0xE0)
-            goto yy1021;
-          goto yy1022;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1026;
-          if (yych <= 0xEF)
-            goto yy1022;
-          goto yy1023;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1024;
-          if (yych <= 0xF4)
-            goto yy1025;
-          goto yy951;
-        }
-      }
-    }
-  yy1018:
-    yyaccept = 2;
-    yych = *(marker = ++p);
-    if (yych <= ')') {
-      if (yych <= ' ')
-        goto yy1019;
-      if (yych <= '(')
-        goto yy981;
-    } else {
-      if (yych <= 0x7F)
-        goto yy981;
-      if (yych <= 0xC1)
-        goto yy1019;
-      if (yych <= 0xF4)
-        goto yy981;
-    }
-  yy1019 : { return (bufsize_t)(p - start); }
-  yy1020:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1016;
-    goto yy958;
-  yy1021:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1020;
-    goto yy958;
-  yy1022:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1020;
-    goto yy958;
-  yy1023:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1022;
-    goto yy958;
-  yy1024:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1022;
-    goto yy958;
-  yy1025:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1022;
-    goto yy958;
-  yy1026:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1020;
-    goto yy958;
-  yy1027:
-    ++p;
-    yych = *p;
-    if (yych <= '=') {
-      if (yych <= 0x1F) {
-        if (yych <= '\n') {
-          if (yych <= 0x00)
-            goto yy958;
-          if (yych >= '\t')
-            goto yy958;
-        } else {
-          if (yych == '\r')
-            goto yy958;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= ' ')
-            goto yy958;
-          if (yych <= '\'')
-            goto yy1027;
-        } else {
-          if (yych <= ')')
-            goto yy1016;
-          if (yych == '<')
-            goto yy971;
-          goto yy1027;
-        }
-      }
-    } else {
-      if (yych <= 0xE0) {
-        if (yych <= '\\') {
-          if (yych <= '>')
-            goto yy1042;
-          if (yych <= '[')
-            goto yy1027;
-          goto yy1043;
-        } else {
-          if (yych <= 0x7F)
-            goto yy1027;
-          if (yych <= 0xC1)
-            goto yy958;
-          if (yych <= 0xDF)
-            goto yy1045;
-          goto yy1046;
-        }
-      } else {
-        if (yych <= 0xEF) {
-          if (yych == 0xED)
-            goto yy1051;
-          goto yy1047;
-        } else {
-          if (yych <= 0xF0)
-            goto yy1048;
-          if (yych <= 0xF3)
-            goto yy1049;
-          if (yych <= 0xF4)
-            goto yy1050;
-          goto yy958;
-        }
-      }
-    }
-  yy1029:
-    ++p;
-    yych = *p;
-    if (yybm[0 + yych] & 128) {
-      goto yy1029;
-    }
-    if (yych <= 0xE0) {
-      if (yych <= '\\') {
-        if (yych <= '<')
-          goto yy958;
-        if (yych >= '?')
-          goto yy1032;
-      } else {
-        if (yych <= 0xC1)
-          goto yy958;
-        if (yych <= 0xDF)
-          goto yy1034;
-        goto yy1035;
-      }
-    } else {
-      if (yych <= 0xEF) {
-        if (yych == 0xED)
-          goto yy1040;
-        goto yy1036;
-      } else {
-        if (yych <= 0xF0)
-          goto yy1037;
-        if (yych <= 0xF3)
-          goto yy1038;
-        if (yych <= 0xF4)
-          goto yy1039;
-        goto yy958;
-      }
-    }
-  yy1031:
-    yych = *++p;
-    goto yy1019;
-  yy1032:
-    ++p;
-    yych = *p;
-    if (yych <= '\\') {
-      if (yych <= '\r') {
-        if (yych <= 0x08) {
-          if (yych <= 0x00)
-            goto yy958;
-          goto yy1029;
-        } else {
-          if (yych <= '\n')
-            goto yy958;
-          if (yych <= '\f')
-            goto yy1029;
-          goto yy958;
-        }
-      } else {
-        if (yych <= '=') {
-          if (yych == ' ')
-            goto yy958;
-          goto yy1029;
-        } else {
-          if (yych <= '>')
-            goto yy1041;
-          if (yych <= '[')
-            goto yy1029;
-          goto yy1032;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= 0x7F)
-            goto yy1029;
-          goto yy958;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1034;
-          if (yych <= 0xE0)
-            goto yy1035;
-          goto yy1036;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1040;
-          if (yych <= 0xEF)
-            goto yy1036;
-          goto yy1037;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1038;
-          if (yych <= 0xF4)
-            goto yy1039;
-          goto yy958;
-        }
-      }
-    }
-  yy1034:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1029;
-    goto yy958;
-  yy1035:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1034;
-    goto yy958;
-  yy1036:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1034;
-    goto yy958;
-  yy1037:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1036;
-    goto yy958;
-  yy1038:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1036;
-    goto yy958;
-  yy1039:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1036;
-    goto yy958;
-  yy1040:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1034;
-    goto yy958;
-  yy1041:
-    yyaccept = 2;
-    marker = ++p;
-    yych = *p;
-    if (yybm[0 + yych] & 128) {
-      goto yy1029;
-    }
-    if (yych <= 0xE0) {
-      if (yych <= '\\') {
-        if (yych <= '<')
-          goto yy1019;
-        if (yych <= '>')
-          goto yy1031;
-        goto yy1032;
-      } else {
-        if (yych <= 0xC1)
-          goto yy1019;
-        if (yych <= 0xDF)
-          goto yy1034;
-        goto yy1035;
-      }
-    } else {
-      if (yych <= 0xEF) {
-        if (yych == 0xED)
-          goto yy1040;
-        goto yy1036;
-      } else {
-        if (yych <= 0xF0)
-          goto yy1037;
-        if (yych <= 0xF3)
-          goto yy1038;
-        if (yych <= 0xF4)
-          goto yy1039;
-        goto yy1019;
-      }
-    }
-  yy1042:
-    yyaccept = 2;
-    yych = *(marker = ++p);
-    if (yych <= '(') {
-      if (yych <= ' ')
-        goto yy1019;
-      if (yych <= '\'')
-        goto yy972;
-      goto yy1019;
-    } else {
-      if (yych <= 0x7F)
-        goto yy972;
-      if (yych <= 0xC1)
-        goto yy1019;
-      if (yych <= 0xF4)
-        goto yy972;
-      goto yy1019;
-    }
-  yy1043:
-    ++p;
-    yych = *p;
-    if (yych <= '[') {
-      if (yych <= 0x1F) {
-        if (yych <= '\n') {
-          if (yych <= 0x00)
-            goto yy958;
-          if (yych <= 0x08)
-            goto yy1029;
-          goto yy958;
-        } else {
-          if (yych == '\r')
-            goto yy958;
-          goto yy1029;
-        }
-      } else {
-        if (yych <= ')') {
-          if (yych <= ' ')
-            goto yy958;
-          if (yych <= '(')
-            goto yy1027;
-          goto yy1052;
-        } else {
-          if (yych == '>')
-            goto yy1054;
-          goto yy1027;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= '\\')
-            goto yy1043;
-          if (yych <= 0x7F)
-            goto yy1027;
-          goto yy958;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1045;
-          if (yych <= 0xE0)
-            goto yy1046;
-          goto yy1047;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1051;
-          if (yych <= 0xEF)
-            goto yy1047;
-          goto yy1048;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1049;
-          if (yych <= 0xF4)
-            goto yy1050;
-          goto yy958;
-        }
-      }
-    }
-  yy1045:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1027;
-    goto yy958;
-  yy1046:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1045;
-    goto yy958;
-  yy1047:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1045;
-    goto yy958;
-  yy1048:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1047;
-    goto yy958;
-  yy1049:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1047;
-    goto yy958;
-  yy1050:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1047;
-    goto yy958;
-  yy1051:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1045;
-    goto yy958;
-  yy1052:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= '=') {
-      if (yych <= 0x1F) {
-        if (yych <= '\n') {
-          if (yych <= 0x00)
-            goto yy951;
-          if (yych <= 0x08)
-            goto yy1029;
-          goto yy951;
-        } else {
-          if (yych == '\r')
-            goto yy951;
-          goto yy1029;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= ' ')
-            goto yy951;
-          if (yych <= '\'')
-            goto yy1052;
-          goto yy1027;
-        } else {
-          if (yych <= ')')
-            goto yy1016;
-          if (yych == '<')
-            goto yy997;
-          goto yy1052;
-        }
-      }
-    } else {
-      if (yych <= 0xE0) {
-        if (yych <= '\\') {
-          if (yych <= '>')
-            goto yy1055;
-          if (yych <= '[')
-            goto yy1052;
-          goto yy1056;
-        } else {
-          if (yych <= 0x7F)
-            goto yy1052;
-          if (yych <= 0xC1)
-            goto yy951;
-          if (yych <= 0xDF)
-            goto yy1057;
-          goto yy1058;
-        }
-      } else {
-        if (yych <= 0xEF) {
-          if (yych == 0xED)
-            goto yy1063;
-          goto yy1059;
-        } else {
-          if (yych <= 0xF0)
-            goto yy1060;
-          if (yych <= 0xF3)
-            goto yy1061;
-          if (yych <= 0xF4)
-            goto yy1062;
-          goto yy951;
-        }
-      }
-    }
-  yy1054:
-    yyaccept = 2;
-    marker = ++p;
-    yych = *p;
-    if (yych <= '=') {
-      if (yych <= 0x1F) {
-        if (yych <= '\n') {
-          if (yych <= 0x00)
-            goto yy1019;
-          if (yych <= 0x08)
-            goto yy1029;
-          goto yy1019;
-        } else {
-          if (yych == '\r')
-            goto yy1019;
-          goto yy1029;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= ' ')
-            goto yy1019;
-          if (yych <= '\'')
-            goto yy1027;
-          goto yy1029;
-        } else {
-          if (yych <= ')')
-            goto yy1016;
-          if (yych == '<')
-            goto yy971;
-          goto yy1027;
-        }
-      }
-    } else {
-      if (yych <= 0xE0) {
-        if (yych <= '\\') {
-          if (yych <= '>')
-            goto yy1042;
-          if (yych <= '[')
-            goto yy1027;
-          goto yy1043;
-        } else {
-          if (yych <= 0x7F)
-            goto yy1027;
-          if (yych <= 0xC1)
-            goto yy1019;
-          if (yych <= 0xDF)
-            goto yy1045;
-          goto yy1046;
-        }
-      } else {
-        if (yych <= 0xEF) {
-          if (yych == 0xED)
-            goto yy1051;
-          goto yy1047;
-        } else {
-          if (yych <= 0xF0)
-            goto yy1048;
-          if (yych <= 0xF3)
-            goto yy1049;
-          if (yych <= 0xF4)
-            goto yy1050;
-          goto yy1019;
-        }
-      }
-    }
-  yy1055:
-    yyaccept = 2;
-    yych = *(marker = ++p);
-    if (yych <= ' ')
-      goto yy1019;
-    if (yych <= 0x7F)
-      goto yy998;
-    if (yych <= 0xC1)
-      goto yy1019;
-    if (yych <= 0xF4)
-      goto yy998;
-    goto yy1019;
-  yy1056:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= '\\') {
-      if (yych <= '\r') {
-        if (yych <= 0x08) {
-          if (yych <= 0x00)
-            goto yy980;
-          goto yy1016;
-        } else {
-          if (yych <= '\n')
-            goto yy951;
-          if (yych <= '\f')
-            goto yy1029;
-          goto yy951;
-        }
-      } else {
-        if (yych <= '=') {
-          if (yych <= 0x1F)
-            goto yy1016;
-          if (yych <= ' ')
-            goto yy951;
-          goto yy1052;
-        } else {
-          if (yych <= '>')
-            goto yy1064;
-          if (yych <= '[')
-            goto yy1052;
-          goto yy1065;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= 0x7F)
-            goto yy1052;
-          goto yy951;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1066;
-          if (yych <= 0xE0)
-            goto yy1067;
-          goto yy1068;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1072;
-          if (yych <= 0xEF)
-            goto yy1068;
-          goto yy1069;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1070;
-          if (yych <= 0xF4)
-            goto yy1071;
-          goto yy951;
-        }
-      }
-    }
-  yy1057:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1052;
-    goto yy958;
-  yy1058:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1057;
-    goto yy958;
-  yy1059:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1057;
-    goto yy958;
-  yy1060:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1059;
-    goto yy958;
-  yy1061:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1059;
-    goto yy958;
-  yy1062:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1059;
-    goto yy958;
-  yy1063:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1057;
-    goto yy958;
-  yy1064:
-    yyaccept = 2;
-    marker = ++p;
-    yych = *p;
-    if (yych <= '=') {
-      if (yych <= 0x1F) {
-        if (yych <= '\n') {
-          if (yych <= 0x00)
-            goto yy1019;
-          if (yych <= 0x08)
-            goto yy1029;
-          goto yy1019;
-        } else {
-          if (yych == '\r')
-            goto yy1019;
-          goto yy1029;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= ' ')
-            goto yy1019;
-          if (yych <= '\'')
-            goto yy1052;
-          goto yy1027;
-        } else {
-          if (yych <= ')')
-            goto yy1016;
-          if (yych == '<')
-            goto yy997;
-          goto yy1052;
-        }
-      }
-    } else {
-      if (yych <= 0xE0) {
-        if (yych <= '\\') {
-          if (yych <= '>')
-            goto yy1055;
-          if (yych <= '[')
-            goto yy1052;
-          goto yy1056;
-        } else {
-          if (yych <= 0x7F)
-            goto yy1052;
-          if (yych <= 0xC1)
-            goto yy1019;
-          if (yych <= 0xDF)
-            goto yy1057;
-          goto yy1058;
-        }
-      } else {
-        if (yych <= 0xEF) {
-          if (yych == 0xED)
-            goto yy1063;
-          goto yy1059;
-        } else {
-          if (yych <= 0xF0)
-            goto yy1060;
-          if (yych <= 0xF3)
-            goto yy1061;
-          if (yych <= 0xF4)
-            goto yy1062;
-          goto yy1019;
-        }
-      }
-    }
-  yy1065:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= '[') {
-      if (yych <= 0x1F) {
-        if (yych <= '\n') {
-          if (yych <= 0x00)
-            goto yy951;
-          if (yych <= 0x08)
-            goto yy1029;
-          goto yy951;
-        } else {
-          if (yych == '\r')
-            goto yy951;
-          goto yy1029;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= ' ')
-            goto yy951;
-          if (yych <= '\'')
-            goto yy1052;
-          goto yy1027;
-        } else {
-          if (yych == '>')
-            goto yy1064;
-          goto yy1052;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= '\\')
-            goto yy1056;
-          if (yych <= 0x7F)
-            goto yy1052;
-          goto yy951;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1057;
-          if (yych <= 0xE0)
-            goto yy1058;
-          goto yy1059;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1063;
-          if (yych <= 0xEF)
-            goto yy1059;
-          goto yy1060;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1061;
-          if (yych <= 0xF4)
-            goto yy1062;
-          goto yy951;
-        }
-      }
-    }
-  yy1066:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1052;
-    goto yy958;
-  yy1067:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1066;
-    goto yy958;
-  yy1068:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1066;
-    goto yy958;
-  yy1069:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1068;
-    goto yy958;
-  yy1070:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1068;
-    goto yy958;
-  yy1071:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1068;
-    goto yy958;
-  yy1072:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1066;
-    goto yy958;
-  yy1073:
-    yyaccept = 2;
-    marker = ++p;
-    yych = *p;
-    if (yybm[0 + yych] & 64) {
-      goto yy1016;
-    }
-    if (yych <= '>') {
-      if (yych <= '\r') {
-        if (yych <= 0x08) {
-          if (yych <= 0x00)
-            goto yy1019;
-          goto yy1029;
-        } else {
-          if (yych <= '\n')
-            goto yy1019;
-          if (yych <= '\f')
-            goto yy1029;
-          goto yy1019;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= 0x1F)
-            goto yy1029;
-          if (yych <= ' ')
-            goto yy1019;
-          goto yy1027;
-        } else {
-          if (yych <= ')')
-            goto yy1029;
-          if (yych <= '<')
-            goto yy980;
-          goto yy1018;
-        }
-      }
-    } else {
-      if (yych <= 0xEC) {
-        if (yych <= 0xC1) {
-          if (yych <= '\\')
-            goto yy1015;
-          goto yy1019;
-        } else {
-          if (yych <= 0xDF)
-            goto yy1020;
-          if (yych <= 0xE0)
-            goto yy1021;
-          goto yy1022;
-        }
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xED)
-            goto yy1026;
-          if (yych <= 0xEF)
-            goto yy1022;
-          goto yy1023;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1024;
-          if (yych <= 0xF4)
-            goto yy1025;
-          goto yy1019;
-        }
-      }
-    }
-  yy1074:
-    yyaccept = 0;
-    marker = ++p;
-    yych = *p;
-    if (yych <= '>') {
-      if (yych <= 0x1F) {
-        if (yych <= '\n') {
-          if (yych <= 0x00)
-            goto yy951;
-          if (yych <= 0x08)
-            goto yy1029;
-          goto yy951;
-        } else {
-          if (yych == '\r')
-            goto yy951;
-          goto yy1029;
-        }
-      } else {
-        if (yych <= '(') {
-          if (yych <= ' ')
-            goto yy951;
-          if (yych <= '\'')
-            goto yy1016;
-          goto yy1027;
-        } else {
-          if (yych <= ')')
-            goto yy1029;
-          if (yych <= '=')
-            goto yy1016;
-          goto yy1073;
-        }
-      }
-    } else {
-      if (yych <= 0xE0) {
-        if (yych <= 0x7F) {
-          if (yych == '\\')
-            goto yy1015;
-          goto yy1016;
-        } else {
-          if (yych <= 0xC1)
-            goto yy951;
-          if (yych <= 0xDF)
-            goto yy1020;
-          goto yy1021;
-        }
-      } else {
-        if (yych <= 0xEF) {
-          if (yych == 0xED)
-            goto yy1026;
-          goto yy1022;
-        } else {
-          if (yych <= 0xF0)
-            goto yy1023;
-          if (yych <= 0xF3)
-            goto yy1024;
-          if (yych <= 0xF4)
-            goto yy1025;
-          goto yy951;
-        }
-      }
-    }
-  yy1075:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1016;
-    goto yy958;
-  yy1076:
-    ++p;
-    yych = *p;
-    if (yych <= 0x9F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1075;
-    goto yy958;
-  yy1077:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1075;
-    goto yy958;
-  yy1078:
-    ++p;
-    yych = *p;
-    if (yych <= 0x8F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1077;
-    goto yy958;
-  yy1079:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0xBF)
-      goto yy1077;
-    goto yy958;
-  yy1080:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x8F)
-      goto yy1077;
-    goto yy958;
-  yy1081:
-    ++p;
-    yych = *p;
-    if (yych <= 0x7F)
-      goto yy958;
-    if (yych <= 0x9F)
-      goto yy1075;
-    goto yy958;
-  }
-}
-
-// Try to match a link title (in single quotes, in double quotes, or
-// in parentheses), returning number of chars matched.  Allow one
-// level of internal nesting (quotes within quotes).
-bufsize_t _scan_link_title(const unsigned char *p) {
-  const unsigned char *marker = NULL;
-  const unsigned char *start = p;
-
-  {
-    unsigned char yych;
-    unsigned int yyaccept = 0;
-    static const unsigned char yybm[] = {
-        0,   224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 96,  224, 224, 224, 224, 160, 224, 192,
-        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 224, 224, 16,  224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,
-    };
-    yych = *(marker = p);
-    if (yych <= 0xC1) {
-      if (yych <= '"') {
-        if (yych == '\n')
-          goto yy1084;
-        if (yych <= '!')
-          goto yy1088;
-        goto yy1085;
-      } else {
-        if (yych <= '\'') {
-          if (yych <= '&')
-            goto yy1088;
-          goto yy1086;
-        } else {
-          if (yych <= '(')
-            goto yy1087;
-          if (yych <= 0x7F)
-            goto yy1088;
-        }
-      }
-    } else {
-      if (yych <= 0xED) {
-        if (yych <= 0xDF)
-          goto yy1089;
-        if (yych <= 0xE0)
-          goto yy1091;
-        if (yych <= 0xEC)
-          goto yy1092;
-        goto yy1096;
-      } else {
-        if (yych <= 0xF0) {
-          if (yych <= 0xEF)
-            goto yy1092;
-          goto yy1093;
-        } else {
-          if (yych <= 0xF3)
-            goto yy1094;
-          if (yych <= 0xF4)
-            goto yy1095;
-        }
-      }
-    }
-  yy1084 : { return 0; }
-  yy1085:
-    yyaccept = 0;
-    yych = *(marker = ++p);
-    if (yych <= 0x00)
-      goto yy1084;
-    if (yych <= 0x7F)
-      goto yy1128;
-    if (yych <= 0xC1)
-      goto yy1084;
-    if (yych <= 0xF4)
-      goto yy1128;
-    goto yy1084;
-  yy1086:
-    yyaccept = 0;
-    yych = *(marker = ++p);
-    if (yych <= 0x00)
-      goto yy1084;
-    if (yych <= 0x7F)
-      goto yy1114;
-    if (yych <= 0xC1)
-      goto yy1084;
-    if (yych <= 0xF4)
-      goto yy1114;
-    goto yy1084;
-  yy1087:
-    yyaccept = 0;
-    yych = *(marker = ++p);
-    if (yych <= 0x00)
-      goto yy1084;
-    if (yych <= 0x7F)
-      goto yy1100;
-    if (yych <= 0xC1)
-      goto yy1084;
-    if (yych <= 0xF4)
-      goto yy1100;
-    goto yy1084;
-  yy1088:
-    yych = *++p;
-    goto yy1084;
-  yy1089:
-    yych = *++p;
-    if (yych <= 0x7F)
-      goto yy1090;
-    if (yych <= 0xBF)
-      goto yy1088;
-  yy1090:
-    p = marker;
-    if (yyaccept <= 1) {
-      if (yyaccept == 0) {
-        goto yy1084;
-      } else {
-        goto yy1109;
-      }
-    } else {
-      if (yyaccept == 2) {
-        goto yy1123;
-      } else {
-        goto yy1137;
-      }
-    }
-  yy1091:
-    yych = *++p;
-    if (yych <= 0x9F)
-      goto yy1090;
-    if (yych <= 0xBF)
-      goto yy1089;
-    goto yy1090;
-  yy1092:
-    yych = *++p;
-    if (yych <= 0x7F)
-      goto yy1090;
-    if (yych <= 0xBF)
-      goto yy1089;
-    goto yy1090;
-  yy1093:
-    yych = *++p;
-    if (yych <= 0x8F)
-      goto yy1090;
-    if (yych <= 0xBF)
-      goto yy1092;
-    goto yy1090;
-  yy1094:
-    yych = *++p;
-    if (yych <= 0x7F)
-      goto yy1090;
-    if (yych <= 0xBF)
-      goto yy1092;
-    goto yy1090;
-  yy1095:
-    yych = *++p;
-    if (yych <= 0x7F)
-      goto yy1090;
-    if (yych <= 0x8F)
-      goto yy1092;
-    goto yy1090;
-  yy1096:
-    yych = *++p;
-    if (yych <= 0x7F)
-      goto yy1090;
-    if (yych <= 0x9F)
-      goto yy1089;
-    goto yy1090;
-  yy1097:
-    ++p;
-    yych = *p;
-    if (yybm[0 + yych] & 32) {
-      goto yy1099;
-    }
-    if (yych <= 0xE0) {
-      if (yych <= '\\') {
-        if (yych <= 0x00)
-          goto yy1090;
-        if (yych <= ')')
-          goto yy1110;
-        goto yy1097;
-      } else {
-        if (yych <= 0xC1)
-          goto yy1090;
-        if (yych <= 0xDF)
-          goto yy1101;
-        goto yy1102;
-      }
-    } else {
-      if (yych <= 0xEF) {
-        if (yych == 0xED)
-          goto yy1107;
-        goto yy1103;
-      } else {
-        if (yych <= 0xF0)
-          goto yy1104;
-        if (yych <= 0xF3)
-          goto yy1105;
-        if (yych <= 0xF4)
-          goto yy1106;
-        goto yy1090;
-      }
-    }
-  yy1099:
-    ++p;
-    yych = *p;
-  yy1100:
-    if (yybm[0 + yych] & 32) {
-      goto yy1099;
-    }
-    if (yych <= 0xE0) {
-      if (yych <= '\\') {
-        if (yych <= 0x00)
-          goto yy1090;
-        if (yych <= ')')
-          goto yy1108;
-        goto yy1097;
-      } else {
-        if (yych <= 0xC1)
-          goto yy1090;
-        if (yych >= 0xE0)
-          goto yy1102;
-      }
-    } else {
-      if (yych <= 0xEF) {
-        if (yych == 0xED)
-          goto yy1107;
-        goto yy1103;
-      } else {
-        if (yych <= 0xF0)
-          goto yy1104;
-        if (yych <= 0xF3)
-          goto yy1105;
+          goto yy972;
         if (yych <= 0xF4)
-          goto yy1106;
-        goto yy1090;
+          goto yy973;
+        goto yy957;
       }
     }
-  yy1101:
+  yy968:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1099;
-    goto yy1090;
-  yy1102:
+      goto yy966;
+    goto yy957;
+  yy969:
     ++p;
     yych = *p;
     if (yych <= 0x9F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1101;
-    goto yy1090;
-  yy1103:
+      goto yy968;
+    goto yy957;
+  yy970:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1101;
-    goto yy1090;
-  yy1104:
+      goto yy968;
+    goto yy957;
+  yy971:
     ++p;
     yych = *p;
     if (yych <= 0x8F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1103;
-    goto yy1090;
-  yy1105:
+      goto yy970;
+    goto yy957;
+  yy972:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1103;
-    goto yy1090;
-  yy1106:
+      goto yy970;
+    goto yy957;
+  yy973:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0x8F)
-      goto yy1103;
-    goto yy1090;
-  yy1107:
+      goto yy970;
+    goto yy957;
+  yy974:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0x9F)
-      goto yy1101;
-    goto yy1090;
-  yy1108:
+      goto yy968;
+    goto yy957;
+  yy975:
     ++p;
-  yy1109 : { return (bufsize_t)(p - start); }
-  yy1110:
+  yy976 : { return (bufsize_t)(p - start); }
+  yy977:
     yyaccept = 1;
     marker = ++p;
     yych = *p;
     if (yybm[0 + yych] & 32) {
-      goto yy1099;
+      goto yy966;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
         if (yych <= 0x00)
-          goto yy1109;
+          goto yy976;
         if (yych <= ')')
-          goto yy1108;
-        goto yy1097;
+          goto yy975;
+        goto yy964;
       } else {
         if (yych <= 0xC1)
-          goto yy1109;
+          goto yy976;
         if (yych <= 0xDF)
-          goto yy1101;
-        goto yy1102;
+          goto yy968;
+        goto yy969;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1107;
-        goto yy1103;
+          goto yy974;
+        goto yy970;
       } else {
         if (yych <= 0xF0)
-          goto yy1104;
+          goto yy971;
         if (yych <= 0xF3)
-          goto yy1105;
+          goto yy972;
         if (yych <= 0xF4)
-          goto yy1106;
-        goto yy1109;
+          goto yy973;
+        goto yy976;
       }
     }
-  yy1111:
+  yy978:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 64) {
-      goto yy1113;
+      goto yy980;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
         if (yych <= 0x00)
-          goto yy1090;
+          goto yy957;
         if (yych <= '\'')
-          goto yy1124;
-        goto yy1111;
+          goto yy991;
+        goto yy978;
       } else {
         if (yych <= 0xC1)
-          goto yy1090;
+          goto yy957;
         if (yych <= 0xDF)
-          goto yy1115;
-        goto yy1116;
+          goto yy982;
+        goto yy983;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1121;
-        goto yy1117;
+          goto yy988;
+        goto yy984;
       } else {
         if (yych <= 0xF0)
-          goto yy1118;
+          goto yy985;
         if (yych <= 0xF3)
-          goto yy1119;
+          goto yy986;
         if (yych <= 0xF4)
-          goto yy1120;
-        goto yy1090;
+          goto yy987;
+        goto yy957;
       }
     }
-  yy1113:
+  yy980:
     ++p;
     yych = *p;
-  yy1114:
+  yy981:
     if (yybm[0 + yych] & 64) {
-      goto yy1113;
+      goto yy980;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
         if (yych <= 0x00)
-          goto yy1090;
+          goto yy957;
         if (yych <= '\'')
-          goto yy1122;
-        goto yy1111;
+          goto yy989;
+        goto yy978;
       } else {
         if (yych <= 0xC1)
-          goto yy1090;
+          goto yy957;
         if (yych >= 0xE0)
-          goto yy1116;
+          goto yy983;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1121;
-        goto yy1117;
+          goto yy988;
+        goto yy984;
       } else {
         if (yych <= 0xF0)
-          goto yy1118;
+          goto yy985;
         if (yych <= 0xF3)
-          goto yy1119;
+          goto yy986;
         if (yych <= 0xF4)
-          goto yy1120;
-        goto yy1090;
+          goto yy987;
+        goto yy957;
       }
     }
-  yy1115:
+  yy982:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1113;
-    goto yy1090;
-  yy1116:
+      goto yy980;
+    goto yy957;
+  yy983:
     ++p;
     yych = *p;
     if (yych <= 0x9F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1115;
-    goto yy1090;
-  yy1117:
+      goto yy982;
+    goto yy957;
+  yy984:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1115;
-    goto yy1090;
-  yy1118:
+      goto yy982;
+    goto yy957;
+  yy985:
     ++p;
     yych = *p;
     if (yych <= 0x8F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1117;
-    goto yy1090;
-  yy1119:
+      goto yy984;
+    goto yy957;
+  yy986:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1117;
-    goto yy1090;
-  yy1120:
+      goto yy984;
+    goto yy957;
+  yy987:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0x8F)
-      goto yy1117;
-    goto yy1090;
-  yy1121:
+      goto yy984;
+    goto yy957;
+  yy988:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0x9F)
-      goto yy1115;
-    goto yy1090;
-  yy1122:
+      goto yy982;
+    goto yy957;
+  yy989:
     ++p;
-  yy1123 : { return (bufsize_t)(p - start); }
-  yy1124:
+  yy990 : { return (bufsize_t)(p - start); }
+  yy991:
     yyaccept = 2;
     marker = ++p;
     yych = *p;
     if (yybm[0 + yych] & 64) {
-      goto yy1113;
+      goto yy980;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
         if (yych <= 0x00)
-          goto yy1123;
+          goto yy990;
         if (yych <= '\'')
-          goto yy1122;
-        goto yy1111;
+          goto yy989;
+        goto yy978;
       } else {
         if (yych <= 0xC1)
-          goto yy1123;
+          goto yy990;
         if (yych <= 0xDF)
-          goto yy1115;
-        goto yy1116;
+          goto yy982;
+        goto yy983;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1121;
-        goto yy1117;
+          goto yy988;
+        goto yy984;
       } else {
         if (yych <= 0xF0)
-          goto yy1118;
+          goto yy985;
         if (yych <= 0xF3)
-          goto yy1119;
+          goto yy986;
         if (yych <= 0xF4)
-          goto yy1120;
-        goto yy1123;
+          goto yy987;
+        goto yy990;
       }
     }
-  yy1125:
+  yy992:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 128) {
-      goto yy1127;
+      goto yy994;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
         if (yych <= 0x00)
-          goto yy1090;
+          goto yy957;
         if (yych <= '"')
-          goto yy1138;
-        goto yy1125;
+          goto yy1005;
+        goto yy992;
       } else {
         if (yych <= 0xC1)
-          goto yy1090;
+          goto yy957;
         if (yych <= 0xDF)
-          goto yy1129;
-        goto yy1130;
+          goto yy996;
+        goto yy997;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1135;
-        goto yy1131;
+          goto yy1002;
+        goto yy998;
       } else {
         if (yych <= 0xF0)
-          goto yy1132;
+          goto yy999;
         if (yych <= 0xF3)
-          goto yy1133;
+          goto yy1000;
         if (yych <= 0xF4)
-          goto yy1134;
-        goto yy1090;
+          goto yy1001;
+        goto yy957;
       }
     }
-  yy1127:
+  yy994:
     ++p;
     yych = *p;
-  yy1128:
+  yy995:
     if (yybm[0 + yych] & 128) {
-      goto yy1127;
+      goto yy994;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
         if (yych <= 0x00)
-          goto yy1090;
+          goto yy957;
         if (yych <= '"')
-          goto yy1136;
-        goto yy1125;
+          goto yy1003;
+        goto yy992;
       } else {
         if (yych <= 0xC1)
-          goto yy1090;
+          goto yy957;
         if (yych >= 0xE0)
-          goto yy1130;
+          goto yy997;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1135;
-        goto yy1131;
+          goto yy1002;
+        goto yy998;
       } else {
         if (yych <= 0xF0)
-          goto yy1132;
+          goto yy999;
         if (yych <= 0xF3)
-          goto yy1133;
+          goto yy1000;
         if (yych <= 0xF4)
-          goto yy1134;
-        goto yy1090;
+          goto yy1001;
+        goto yy957;
       }
     }
-  yy1129:
+  yy996:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1127;
-    goto yy1090;
-  yy1130:
+      goto yy994;
+    goto yy957;
+  yy997:
     ++p;
     yych = *p;
     if (yych <= 0x9F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1129;
-    goto yy1090;
-  yy1131:
+      goto yy996;
+    goto yy957;
+  yy998:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1129;
-    goto yy1090;
-  yy1132:
+      goto yy996;
+    goto yy957;
+  yy999:
     ++p;
     yych = *p;
     if (yych <= 0x8F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1131;
-    goto yy1090;
-  yy1133:
+      goto yy998;
+    goto yy957;
+  yy1000:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0xBF)
-      goto yy1131;
-    goto yy1090;
-  yy1134:
+      goto yy998;
+    goto yy957;
+  yy1001:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0x8F)
-      goto yy1131;
-    goto yy1090;
-  yy1135:
+      goto yy998;
+    goto yy957;
+  yy1002:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1090;
+      goto yy957;
     if (yych <= 0x9F)
-      goto yy1129;
-    goto yy1090;
-  yy1136:
+      goto yy996;
+    goto yy957;
+  yy1003:
     ++p;
-  yy1137 : { return (bufsize_t)(p - start); }
-  yy1138:
+  yy1004 : { return (bufsize_t)(p - start); }
+  yy1005:
     yyaccept = 3;
     marker = ++p;
     yych = *p;
     if (yybm[0 + yych] & 128) {
-      goto yy1127;
+      goto yy994;
     }
     if (yych <= 0xE0) {
       if (yych <= '\\') {
         if (yych <= 0x00)
-          goto yy1137;
+          goto yy1004;
         if (yych <= '"')
-          goto yy1136;
-        goto yy1125;
+          goto yy1003;
+        goto yy992;
       } else {
         if (yych <= 0xC1)
-          goto yy1137;
+          goto yy1004;
         if (yych <= 0xDF)
-          goto yy1129;
-        goto yy1130;
+          goto yy996;
+        goto yy997;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1135;
-        goto yy1131;
+          goto yy1002;
+        goto yy998;
       } else {
         if (yych <= 0xF0)
-          goto yy1132;
+          goto yy999;
         if (yych <= 0xF3)
-          goto yy1133;
+          goto yy1000;
         if (yych <= 0xF4)
-          goto yy1134;
-        goto yy1137;
+          goto yy1001;
+        goto yy1004;
       }
     }
   }
@@ -18017,104 +15933,104 @@ bufsize_t _scan_spacechars(const unsigned char *p) {
     if (yych <= 0xC1) {
       if (yych <= '\r') {
         if (yych <= 0x08)
-          goto yy1145;
+          goto yy1012;
         if (yych == '\n')
-          goto yy1143;
-        goto yy1142;
+          goto yy1010;
+        goto yy1009;
       } else {
         if (yych == ' ')
-          goto yy1142;
+          goto yy1009;
         if (yych <= 0x7F)
-          goto yy1145;
+          goto yy1012;
       }
     } else {
       if (yych <= 0xED) {
         if (yych <= 0xDF)
-          goto yy1147;
+          goto yy1014;
         if (yych <= 0xE0)
-          goto yy1149;
+          goto yy1016;
         if (yych <= 0xEC)
-          goto yy1150;
-        goto yy1154;
+          goto yy1017;
+        goto yy1021;
       } else {
         if (yych <= 0xF0) {
           if (yych <= 0xEF)
-            goto yy1150;
-          goto yy1151;
+            goto yy1017;
+          goto yy1018;
         } else {
           if (yych <= 0xF3)
-            goto yy1152;
+            goto yy1019;
           if (yych <= 0xF4)
-            goto yy1153;
+            goto yy1020;
         }
       }
     }
-  yy1141 : { return (bufsize_t)(p - start); }
-  yy1142:
+  yy1008 : { return (bufsize_t)(p - start); }
+  yy1009:
     yych = *++p;
-    goto yy1144;
-  yy1143:
+    goto yy1011;
+  yy1010:
     ++p;
     yych = *p;
-  yy1144:
+  yy1011:
     if (yybm[0 + yych] & 128) {
-      goto yy1143;
+      goto yy1010;
     }
-    goto yy1141;
-  yy1145:
+    goto yy1008;
+  yy1012:
     ++p;
     { return 0; }
-  yy1147:
+  yy1014:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1148;
+      goto yy1015;
     if (yych <= 0xBF)
-      goto yy1145;
-  yy1148:
+      goto yy1012;
+  yy1015:
     p = marker;
-    goto yy1141;
-  yy1149:
+    goto yy1008;
+  yy1016:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1148;
+      goto yy1015;
     if (yych <= 0xBF)
-      goto yy1147;
-    goto yy1148;
-  yy1150:
+      goto yy1014;
+    goto yy1015;
+  yy1017:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1148;
+      goto yy1015;
     if (yych <= 0xBF)
-      goto yy1147;
-    goto yy1148;
-  yy1151:
+      goto yy1014;
+    goto yy1015;
+  yy1018:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1148;
+      goto yy1015;
     if (yych <= 0xBF)
-      goto yy1150;
-    goto yy1148;
-  yy1152:
+      goto yy1017;
+    goto yy1015;
+  yy1019:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1148;
+      goto yy1015;
     if (yych <= 0xBF)
-      goto yy1150;
-    goto yy1148;
-  yy1153:
+      goto yy1017;
+    goto yy1015;
+  yy1020:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1148;
+      goto yy1015;
     if (yych <= 0x8F)
-      goto yy1150;
-    goto yy1148;
-  yy1154:
+      goto yy1017;
+    goto yy1015;
+  yy1021:
     ++p;
     if ((yych = *p) <= 0x7F)
-      goto yy1148;
+      goto yy1015;
     if (yych <= 0x9F)
-      goto yy1147;
-    goto yy1148;
+      goto yy1014;
+    goto yy1015;
   }
 }
 
@@ -18143,190 +16059,190 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) {
     if (yych <= 0xDF) {
       if (yych <= '"') {
         if (yych != '\n')
-          goto yy1159;
+          goto yy1026;
       } else {
         if (yych <= '#')
-          goto yy1158;
+          goto yy1025;
         if (yych <= 0x7F)
-          goto yy1159;
+          goto yy1026;
         if (yych >= 0xC2)
-          goto yy1160;
+          goto yy1027;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych <= 0xE0)
-          goto yy1162;
+          goto yy1029;
         if (yych == 0xED)
-          goto yy1167;
-        goto yy1163;
+          goto yy1034;
+        goto yy1030;
       } else {
         if (yych <= 0xF0)
-          goto yy1164;
+          goto yy1031;
         if (yych <= 0xF3)
-          goto yy1165;
+          goto yy1032;
         if (yych <= 0xF4)
-          goto yy1166;
+          goto yy1033;
       }
     }
-  yy1157 : { return 0; }
-  yy1158:
+  yy1024 : { return 0; }
+  yy1025:
     yych = *(marker = ++p);
     if (yybm[0 + yych] & 128) {
-      goto yy1170;
+      goto yy1037;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1157;
+        goto yy1024;
       if (yych <= '\n')
-        goto yy1168;
-      goto yy1157;
+        goto yy1035;
+      goto yy1024;
     } else {
       if (yych <= '\r')
-        goto yy1168;
+        goto yy1035;
       if (yych == '#')
-        goto yy1172;
-      goto yy1157;
+        goto yy1039;
+      goto yy1024;
     }
-  yy1159:
+  yy1026:
     yych = *++p;
-    goto yy1157;
-  yy1160:
+    goto yy1024;
+  yy1027:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1161;
+      goto yy1028;
     if (yych <= 0xBF)
-      goto yy1159;
-  yy1161:
+      goto yy1026;
+  yy1028:
     p = marker;
-    goto yy1157;
-  yy1162:
+    goto yy1024;
+  yy1029:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1161;
+      goto yy1028;
     if (yych <= 0xBF)
-      goto yy1160;
-    goto yy1161;
-  yy1163:
+      goto yy1027;
+    goto yy1028;
+  yy1030:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1161;
+      goto yy1028;
     if (yych <= 0xBF)
-      goto yy1160;
-    goto yy1161;
-  yy1164:
+      goto yy1027;
+    goto yy1028;
+  yy1031:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1161;
+      goto yy1028;
     if (yych <= 0xBF)
-      goto yy1163;
-    goto yy1161;
-  yy1165:
+      goto yy1030;
+    goto yy1028;
+  yy1032:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1161;
+      goto yy1028;
     if (yych <= 0xBF)
-      goto yy1163;
-    goto yy1161;
-  yy1166:
+      goto yy1030;
+    goto yy1028;
+  yy1033:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1161;
+      goto yy1028;
     if (yych <= 0x8F)
-      goto yy1163;
-    goto yy1161;
-  yy1167:
+      goto yy1030;
+    goto yy1028;
+  yy1034:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1161;
+      goto yy1028;
     if (yych <= 0x9F)
-      goto yy1160;
-    goto yy1161;
-  yy1168:
+      goto yy1027;
+    goto yy1028;
+  yy1035:
     ++p;
-  yy1169 : { return (bufsize_t)(p - start); }
-  yy1170:
+  yy1036 : { return (bufsize_t)(p - start); }
+  yy1037:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 128) {
-      goto yy1170;
+      goto yy1037;
     }
-    goto yy1169;
-  yy1172:
+    goto yy1036;
+  yy1039:
     yych = *++p;
     if (yybm[0 + yych] & 128) {
-      goto yy1170;
+      goto yy1037;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1161;
+        goto yy1028;
       if (yych <= '\n')
-        goto yy1168;
-      goto yy1161;
+        goto yy1035;
+      goto yy1028;
     } else {
       if (yych <= '\r')
-        goto yy1168;
+        goto yy1035;
       if (yych != '#')
-        goto yy1161;
+        goto yy1028;
     }
     yych = *++p;
     if (yybm[0 + yych] & 128) {
-      goto yy1170;
+      goto yy1037;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1161;
+        goto yy1028;
       if (yych <= '\n')
-        goto yy1168;
-      goto yy1161;
+        goto yy1035;
+      goto yy1028;
     } else {
       if (yych <= '\r')
-        goto yy1168;
+        goto yy1035;
       if (yych != '#')
-        goto yy1161;
+        goto yy1028;
     }
     yych = *++p;
     if (yybm[0 + yych] & 128) {
-      goto yy1170;
+      goto yy1037;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1161;
+        goto yy1028;
       if (yych <= '\n')
-        goto yy1168;
-      goto yy1161;
+        goto yy1035;
+      goto yy1028;
     } else {
       if (yych <= '\r')
-        goto yy1168;
+        goto yy1035;
       if (yych != '#')
-        goto yy1161;
+        goto yy1028;
     }
     yych = *++p;
     if (yybm[0 + yych] & 128) {
-      goto yy1170;
+      goto yy1037;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1161;
+        goto yy1028;
       if (yych <= '\n')
-        goto yy1168;
-      goto yy1161;
+        goto yy1035;
+      goto yy1028;
     } else {
       if (yych <= '\r')
-        goto yy1168;
+        goto yy1035;
       if (yych != '#')
-        goto yy1161;
+        goto yy1028;
     }
     ++p;
     if (yybm[0 + (yych = *p)] & 128) {
-      goto yy1170;
+      goto yy1037;
     }
     if (yych <= 0x08)
-      goto yy1161;
+      goto yy1028;
     if (yych <= '\n')
-      goto yy1168;
+      goto yy1035;
     if (yych == '\r')
-      goto yy1168;
-    goto yy1161;
+      goto yy1035;
+    goto yy1028;
   }
 }
 
@@ -18355,205 +16271,205 @@ bufsize_t _scan_setext_heading_line(const unsigned char *p) {
     if (yych <= 0xC1) {
       if (yych <= '-') {
         if (yych == '\n')
-          goto yy1179;
+          goto yy1046;
         if (yych <= ',')
-          goto yy1182;
-        goto yy1181;
+          goto yy1049;
+        goto yy1048;
       } else {
         if (yych == '=')
-          goto yy1180;
+          goto yy1047;
         if (yych <= 0x7F)
-          goto yy1182;
+          goto yy1049;
       }
     } else {
       if (yych <= 0xED) {
         if (yych <= 0xDF)
-          goto yy1183;
+          goto yy1050;
         if (yych <= 0xE0)
-          goto yy1185;
+          goto yy1052;
         if (yych <= 0xEC)
-          goto yy1186;
-        goto yy1190;
+          goto yy1053;
+        goto yy1057;
       } else {
         if (yych <= 0xF0) {
           if (yych <= 0xEF)
-            goto yy1186;
-          goto yy1187;
+            goto yy1053;
+          goto yy1054;
         } else {
           if (yych <= 0xF3)
-            goto yy1188;
+            goto yy1055;
           if (yych <= 0xF4)
-            goto yy1189;
+            goto yy1056;
         }
       }
     }
-  yy1179 : { return 0; }
-  yy1180:
+  yy1046 : { return 0; }
+  yy1047:
     yych = *(marker = ++p);
     if (yybm[0 + yych] & 128) {
-      goto yy1201;
+      goto yy1068;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1179;
+        goto yy1046;
       if (yych <= '\n')
-        goto yy1198;
-      goto yy1179;
+        goto yy1065;
+      goto yy1046;
     } else {
       if (yych <= '\r')
-        goto yy1198;
+        goto yy1065;
       if (yych == ' ')
-        goto yy1198;
-      goto yy1179;
+        goto yy1065;
+      goto yy1046;
     }
-  yy1181:
+  yy1048:
     yych = *(marker = ++p);
     if (yybm[0 + yych] & 64) {
-      goto yy1195;
+      goto yy1062;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1179;
+        goto yy1046;
       if (yych <= '\n')
-        goto yy1192;
-      goto yy1179;
+        goto yy1059;
+      goto yy1046;
     } else {
       if (yych <= '\r')
-        goto yy1192;
+        goto yy1059;
       if (yych == ' ')
-        goto yy1192;
-      goto yy1179;
+        goto yy1059;
+      goto yy1046;
     }
-  yy1182:
+  yy1049:
     yych = *++p;
-    goto yy1179;
-  yy1183:
+    goto yy1046;
+  yy1050:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1184;
+      goto yy1051;
     if (yych <= 0xBF)
-      goto yy1182;
-  yy1184:
+      goto yy1049;
+  yy1051:
     p = marker;
-    goto yy1179;
-  yy1185:
+    goto yy1046;
+  yy1052:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1184;
+      goto yy1051;
     if (yych <= 0xBF)
-      goto yy1183;
-    goto yy1184;
-  yy1186:
+      goto yy1050;
+    goto yy1051;
+  yy1053:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1184;
+      goto yy1051;
     if (yych <= 0xBF)
-      goto yy1183;
-    goto yy1184;
-  yy1187:
+      goto yy1050;
+    goto yy1051;
+  yy1054:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1184;
+      goto yy1051;
     if (yych <= 0xBF)
-      goto yy1186;
-    goto yy1184;
-  yy1188:
+      goto yy1053;
+    goto yy1051;
+  yy1055:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1184;
+      goto yy1051;
     if (yych <= 0xBF)
-      goto yy1186;
-    goto yy1184;
-  yy1189:
+      goto yy1053;
+    goto yy1051;
+  yy1056:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1184;
+      goto yy1051;
     if (yych <= 0x8F)
-      goto yy1186;
-    goto yy1184;
-  yy1190:
+      goto yy1053;
+    goto yy1051;
+  yy1057:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1184;
+      goto yy1051;
     if (yych <= 0x9F)
-      goto yy1183;
-    goto yy1184;
-  yy1191:
+      goto yy1050;
+    goto yy1051;
+  yy1058:
     ++p;
     yych = *p;
-  yy1192:
+  yy1059:
     if (yybm[0 + yych] & 32) {
-      goto yy1191;
+      goto yy1058;
     }
     if (yych <= 0x08)
-      goto yy1184;
+      goto yy1051;
     if (yych <= '\n')
-      goto yy1193;
+      goto yy1060;
     if (yych != '\r')
-      goto yy1184;
-  yy1193:
+      goto yy1051;
+  yy1060:
     ++p;
     { return 2; }
-  yy1195:
+  yy1062:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 32) {
-      goto yy1191;
+      goto yy1058;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1184;
+        goto yy1051;
       if (yych <= '\n')
-        goto yy1193;
-      goto yy1184;
+        goto yy1060;
+      goto yy1051;
     } else {
       if (yych <= '\r')
-        goto yy1193;
+        goto yy1060;
       if (yych == '-')
-        goto yy1195;
-      goto yy1184;
+        goto yy1062;
+      goto yy1051;
     }
-  yy1197:
+  yy1064:
     ++p;
     yych = *p;
-  yy1198:
+  yy1065:
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1184;
+        goto yy1051;
       if (yych <= '\t')
-        goto yy1197;
+        goto yy1064;
       if (yych >= '\v')
-        goto yy1184;
+        goto yy1051;
     } else {
       if (yych <= '\r')
-        goto yy1199;
+        goto yy1066;
       if (yych == ' ')
-        goto yy1197;
-      goto yy1184;
+        goto yy1064;
+      goto yy1051;
     }
-  yy1199:
+  yy1066:
     ++p;
     { return 1; }
-  yy1201:
+  yy1068:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 128) {
-      goto yy1201;
+      goto yy1068;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1184;
+        goto yy1051;
       if (yych <= '\t')
-        goto yy1197;
+        goto yy1064;
       if (yych <= '\n')
-        goto yy1199;
-      goto yy1184;
+        goto yy1066;
+      goto yy1051;
     } else {
       if (yych <= '\r')
-        goto yy1199;
+        goto yy1066;
       if (yych == ' ')
-        goto yy1197;
-      goto yy1184;
+        goto yy1064;
+      goto yy1051;
     }
   }
 }
@@ -18586,331 +16502,331 @@ bufsize_t _scan_thematic_break(const unsigned char *p) {
     if (yych <= 0x7F) {
       if (yych <= '*') {
         if (yych == '\n')
-          goto yy1205;
+          goto yy1072;
         if (yych <= ')')
-          goto yy1209;
-        goto yy1206;
+          goto yy1076;
+        goto yy1073;
       } else {
         if (yych <= '-') {
           if (yych <= ',')
-            goto yy1209;
-          goto yy1208;
+            goto yy1076;
+          goto yy1075;
         } else {
           if (yych == '_')
-            goto yy1207;
-          goto yy1209;
+            goto yy1074;
+          goto yy1076;
         }
       }
     } else {
       if (yych <= 0xED) {
         if (yych <= 0xDF) {
           if (yych >= 0xC2)
-            goto yy1210;
+            goto yy1077;
         } else {
           if (yych <= 0xE0)
-            goto yy1212;
+            goto yy1079;
           if (yych <= 0xEC)
-            goto yy1213;
-          goto yy1217;
+            goto yy1080;
+          goto yy1084;
         }
       } else {
         if (yych <= 0xF0) {
           if (yych <= 0xEF)
-            goto yy1213;
-          goto yy1214;
+            goto yy1080;
+          goto yy1081;
         } else {
           if (yych <= 0xF3)
-            goto yy1215;
+            goto yy1082;
           if (yych <= 0xF4)
-            goto yy1216;
+            goto yy1083;
         }
       }
     }
-  yy1205 : { return 0; }
-  yy1206:
+  yy1072 : { return 0; }
+  yy1073:
     yych = *(marker = ++p);
     if (yych <= 0x1F) {
       if (yych == '\t')
-        goto yy1238;
-      goto yy1205;
+        goto yy1105;
+      goto yy1072;
     } else {
       if (yych <= ' ')
-        goto yy1238;
+        goto yy1105;
       if (yych == '*')
-        goto yy1240;
-      goto yy1205;
+        goto yy1107;
+      goto yy1072;
     }
-  yy1207:
+  yy1074:
     yych = *(marker = ++p);
     if (yych <= 0x1F) {
       if (yych == '\t')
-        goto yy1228;
-      goto yy1205;
+        goto yy1095;
+      goto yy1072;
     } else {
       if (yych <= ' ')
-        goto yy1228;
+        goto yy1095;
       if (yych == '_')
-        goto yy1230;
-      goto yy1205;
+        goto yy1097;
+      goto yy1072;
     }
-  yy1208:
+  yy1075:
     yych = *(marker = ++p);
     if (yybm[0 + yych] & 16) {
-      goto yy1218;
+      goto yy1085;
     }
     if (yych == '-')
-      goto yy1220;
-    goto yy1205;
-  yy1209:
+      goto yy1087;
+    goto yy1072;
+  yy1076:
     yych = *++p;
-    goto yy1205;
-  yy1210:
+    goto yy1072;
+  yy1077:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1211;
+      goto yy1078;
     if (yych <= 0xBF)
-      goto yy1209;
-  yy1211:
+      goto yy1076;
+  yy1078:
     p = marker;
-    goto yy1205;
-  yy1212:
+    goto yy1072;
+  yy1079:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1211;
+      goto yy1078;
     if (yych <= 0xBF)
-      goto yy1210;
-    goto yy1211;
-  yy1213:
+      goto yy1077;
+    goto yy1078;
+  yy1080:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1211;
+      goto yy1078;
     if (yych <= 0xBF)
-      goto yy1210;
-    goto yy1211;
-  yy1214:
+      goto yy1077;
+    goto yy1078;
+  yy1081:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1211;
+      goto yy1078;
     if (yych <= 0xBF)
-      goto yy1213;
-    goto yy1211;
-  yy1215:
+      goto yy1080;
+    goto yy1078;
+  yy1082:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1211;
+      goto yy1078;
     if (yych <= 0xBF)
-      goto yy1213;
-    goto yy1211;
-  yy1216:
+      goto yy1080;
+    goto yy1078;
+  yy1083:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1211;
+      goto yy1078;
     if (yych <= 0x8F)
-      goto yy1213;
-    goto yy1211;
-  yy1217:
+      goto yy1080;
+    goto yy1078;
+  yy1084:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1211;
+      goto yy1078;
     if (yych <= 0x9F)
-      goto yy1210;
-    goto yy1211;
-  yy1218:
+      goto yy1077;
+    goto yy1078;
+  yy1085:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 16) {
-      goto yy1218;
+      goto yy1085;
     }
     if (yych != '-')
-      goto yy1211;
-  yy1220:
+      goto yy1078;
+  yy1087:
     ++p;
     yych = *p;
     if (yych <= 0x1F) {
       if (yych == '\t')
-        goto yy1220;
-      goto yy1211;
+        goto yy1087;
+      goto yy1078;
     } else {
       if (yych <= ' ')
-        goto yy1220;
+        goto yy1087;
       if (yych != '-')
-        goto yy1211;
+        goto yy1078;
     }
-  yy1222:
+  yy1089:
     ++p;
     yych = *p;
     if (yych <= '\r') {
       if (yych <= '\t') {
         if (yych <= 0x08)
-          goto yy1211;
-        goto yy1222;
+          goto yy1078;
+        goto yy1089;
       } else {
         if (yych <= '\n')
-          goto yy1224;
+          goto yy1091;
         if (yych <= '\f')
-          goto yy1211;
+          goto yy1078;
       }
     } else {
       if (yych <= ' ') {
         if (yych <= 0x1F)
-          goto yy1211;
-        goto yy1222;
+          goto yy1078;
+        goto yy1089;
       } else {
         if (yych == '-')
-          goto yy1226;
-        goto yy1211;
+          goto yy1093;
+        goto yy1078;
       }
     }
-  yy1224:
+  yy1091:
     ++p;
     { return (bufsize_t)(p - start); }
-  yy1226:
+  yy1093:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 32) {
-      goto yy1226;
+      goto yy1093;
     }
     if (yych <= 0x08)
-      goto yy1211;
+      goto yy1078;
     if (yych <= '\n')
-      goto yy1224;
+      goto yy1091;
     if (yych == '\r')
-      goto yy1224;
-    goto yy1211;
-  yy1228:
+      goto yy1091;
+    goto yy1078;
+  yy1095:
     ++p;
     yych = *p;
     if (yych <= 0x1F) {
       if (yych == '\t')
-        goto yy1228;
-      goto yy1211;
+        goto yy1095;
+      goto yy1078;
     } else {
       if (yych <= ' ')
-        goto yy1228;
+        goto yy1095;
       if (yych != '_')
-        goto yy1211;
+        goto yy1078;
     }
-  yy1230:
+  yy1097:
     ++p;
     yych = *p;
     if (yych <= 0x1F) {
       if (yych == '\t')
-        goto yy1230;
-      goto yy1211;
+        goto yy1097;
+      goto yy1078;
     } else {
       if (yych <= ' ')
-        goto yy1230;
+        goto yy1097;
       if (yych != '_')
-        goto yy1211;
+        goto yy1078;
     }
-  yy1232:
+  yy1099:
     ++p;
     yych = *p;
     if (yych <= '\r') {
       if (yych <= '\t') {
         if (yych <= 0x08)
-          goto yy1211;
-        goto yy1232;
+          goto yy1078;
+        goto yy1099;
       } else {
         if (yych <= '\n')
-          goto yy1234;
+          goto yy1101;
         if (yych <= '\f')
-          goto yy1211;
+          goto yy1078;
       }
     } else {
       if (yych <= ' ') {
         if (yych <= 0x1F)
-          goto yy1211;
-        goto yy1232;
+          goto yy1078;
+        goto yy1099;
       } else {
         if (yych == '_')
-          goto yy1236;
-        goto yy1211;
+          goto yy1103;
+        goto yy1078;
       }
     }
-  yy1234:
+  yy1101:
     ++p;
     { return (bufsize_t)(p - start); }
-  yy1236:
+  yy1103:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 64) {
-      goto yy1236;
+      goto yy1103;
     }
     if (yych <= 0x08)
-      goto yy1211;
+      goto yy1078;
     if (yych <= '\n')
-      goto yy1234;
+      goto yy1101;
     if (yych == '\r')
-      goto yy1234;
-    goto yy1211;
-  yy1238:
+      goto yy1101;
+    goto yy1078;
+  yy1105:
     ++p;
     yych = *p;
     if (yych <= 0x1F) {
       if (yych == '\t')
-        goto yy1238;
-      goto yy1211;
+        goto yy1105;
+      goto yy1078;
     } else {
       if (yych <= ' ')
-        goto yy1238;
+        goto yy1105;
       if (yych != '*')
-        goto yy1211;
+        goto yy1078;
     }
-  yy1240:
+  yy1107:
     ++p;
     yych = *p;
     if (yych <= 0x1F) {
       if (yych == '\t')
-        goto yy1240;
-      goto yy1211;
+        goto yy1107;
+      goto yy1078;
     } else {
       if (yych <= ' ')
-        goto yy1240;
+        goto yy1107;
       if (yych != '*')
-        goto yy1211;
+        goto yy1078;
     }
-  yy1242:
+  yy1109:
     ++p;
     yych = *p;
     if (yych <= '\r') {
       if (yych <= '\t') {
         if (yych <= 0x08)
-          goto yy1211;
-        goto yy1242;
+          goto yy1078;
+        goto yy1109;
       } else {
         if (yych <= '\n')
-          goto yy1244;
+          goto yy1111;
         if (yych <= '\f')
-          goto yy1211;
+          goto yy1078;
       }
     } else {
       if (yych <= ' ') {
         if (yych <= 0x1F)
-          goto yy1211;
-        goto yy1242;
+          goto yy1078;
+        goto yy1109;
       } else {
         if (yych == '*')
-          goto yy1246;
-        goto yy1211;
+          goto yy1113;
+        goto yy1078;
       }
     }
-  yy1244:
+  yy1111:
     ++p;
     { return (bufsize_t)(p - start); }
-  yy1246:
+  yy1113:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 128) {
-      goto yy1246;
+      goto yy1113;
     }
     if (yych <= 0x08)
-      goto yy1211;
+      goto yy1078;
     if (yych <= '\n')
-      goto yy1244;
+      goto yy1111;
     if (yych == '\r')
-      goto yy1244;
-    goto yy1211;
+      goto yy1111;
+    goto yy1078;
   }
 }
 
@@ -18946,374 +16862,374 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) {
     if (yych <= 0xC1) {
       if (yych <= '`') {
         if (yych == '\n')
-          goto yy1250;
+          goto yy1117;
         if (yych <= '_')
-          goto yy1253;
-        goto yy1251;
+          goto yy1120;
+        goto yy1118;
       } else {
         if (yych == '~')
-          goto yy1252;
+          goto yy1119;
         if (yych <= 0x7F)
-          goto yy1253;
+          goto yy1120;
       }
     } else {
       if (yych <= 0xED) {
         if (yych <= 0xDF)
-          goto yy1254;
+          goto yy1121;
         if (yych <= 0xE0)
-          goto yy1256;
+          goto yy1123;
         if (yych <= 0xEC)
-          goto yy1257;
-        goto yy1261;
+          goto yy1124;
+        goto yy1128;
       } else {
         if (yych <= 0xF0) {
           if (yych <= 0xEF)
-            goto yy1257;
-          goto yy1258;
+            goto yy1124;
+          goto yy1125;
         } else {
           if (yych <= 0xF3)
-            goto yy1259;
+            goto yy1126;
           if (yych <= 0xF4)
-            goto yy1260;
+            goto yy1127;
         }
       }
     }
-  yy1250 : { return 0; }
-  yy1251:
+  yy1117 : { return 0; }
+  yy1118:
     yych = *(marker = ++p);
     if (yych == '`')
-      goto yy1276;
-    goto yy1250;
-  yy1252:
+      goto yy1143;
+    goto yy1117;
+  yy1119:
     yych = *(marker = ++p);
     if (yych == '~')
-      goto yy1262;
-    goto yy1250;
-  yy1253:
+      goto yy1129;
+    goto yy1117;
+  yy1120:
     yych = *++p;
-    goto yy1250;
-  yy1254:
+    goto yy1117;
+  yy1121:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1253;
-  yy1255:
+      goto yy1120;
+  yy1122:
     p = marker;
-    goto yy1250;
-  yy1256:
+    goto yy1117;
+  yy1123:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1254;
-    goto yy1255;
-  yy1257:
+      goto yy1121;
+    goto yy1122;
+  yy1124:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1254;
-    goto yy1255;
-  yy1258:
+      goto yy1121;
+    goto yy1122;
+  yy1125:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1257;
-    goto yy1255;
-  yy1259:
+      goto yy1124;
+    goto yy1122;
+  yy1126:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1257;
-    goto yy1255;
-  yy1260:
+      goto yy1124;
+    goto yy1122;
+  yy1127:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0x8F)
-      goto yy1257;
-    goto yy1255;
-  yy1261:
+      goto yy1124;
+    goto yy1122;
+  yy1128:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0x9F)
-      goto yy1254;
-    goto yy1255;
-  yy1262:
+      goto yy1121;
+    goto yy1122;
+  yy1129:
     yych = *++p;
     if (yybm[0 + yych] & 16) {
-      goto yy1263;
+      goto yy1130;
     }
-    goto yy1255;
-  yy1263:
+    goto yy1122;
+  yy1130:
     ++p;
     yych = *p;
     marker = p;
     if (yybm[0 + yych] & 32) {
-      goto yy1265;
+      goto yy1132;
     }
     if (yych <= 0xE0) {
       if (yych <= '~') {
         if (yych <= 0x00)
-          goto yy1255;
+          goto yy1122;
         if (yych <= '\r')
-          goto yy1274;
-        goto yy1263;
+          goto yy1141;
+        goto yy1130;
       } else {
         if (yych <= 0xC1)
-          goto yy1255;
+          goto yy1122;
         if (yych <= 0xDF)
-          goto yy1267;
-        goto yy1268;
+          goto yy1134;
+        goto yy1135;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1273;
-        goto yy1269;
+          goto yy1140;
+        goto yy1136;
       } else {
         if (yych <= 0xF0)
-          goto yy1270;
+          goto yy1137;
         if (yych <= 0xF3)
-          goto yy1271;
+          goto yy1138;
         if (yych <= 0xF4)
-          goto yy1272;
-        goto yy1255;
+          goto yy1139;
+        goto yy1122;
       }
     }
-  yy1265:
+  yy1132:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 32) {
-      goto yy1265;
+      goto yy1132;
     }
     if (yych <= 0xEC) {
       if (yych <= 0xC1) {
         if (yych <= 0x00)
-          goto yy1255;
+          goto yy1122;
         if (yych <= '\r')
-          goto yy1274;
-        goto yy1255;
+          goto yy1141;
+        goto yy1122;
       } else {
         if (yych <= 0xDF)
-          goto yy1267;
+          goto yy1134;
         if (yych <= 0xE0)
-          goto yy1268;
-        goto yy1269;
+          goto yy1135;
+        goto yy1136;
       }
     } else {
       if (yych <= 0xF0) {
         if (yych <= 0xED)
-          goto yy1273;
+          goto yy1140;
         if (yych <= 0xEF)
-          goto yy1269;
-        goto yy1270;
+          goto yy1136;
+        goto yy1137;
       } else {
         if (yych <= 0xF3)
-          goto yy1271;
+          goto yy1138;
         if (yych <= 0xF4)
-          goto yy1272;
-        goto yy1255;
+          goto yy1139;
+        goto yy1122;
       }
     }
-  yy1267:
+  yy1134:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1265;
-    goto yy1255;
-  yy1268:
+      goto yy1132;
+    goto yy1122;
+  yy1135:
     ++p;
     yych = *p;
     if (yych <= 0x9F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1267;
-    goto yy1255;
-  yy1269:
+      goto yy1134;
+    goto yy1122;
+  yy1136:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1267;
-    goto yy1255;
-  yy1270:
+      goto yy1134;
+    goto yy1122;
+  yy1137:
     ++p;
     yych = *p;
     if (yych <= 0x8F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1269;
-    goto yy1255;
-  yy1271:
+      goto yy1136;
+    goto yy1122;
+  yy1138:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1269;
-    goto yy1255;
-  yy1272:
+      goto yy1136;
+    goto yy1122;
+  yy1139:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0x8F)
-      goto yy1269;
-    goto yy1255;
-  yy1273:
+      goto yy1136;
+    goto yy1122;
+  yy1140:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0x9F)
-      goto yy1267;
-    goto yy1255;
-  yy1274:
+      goto yy1134;
+    goto yy1122;
+  yy1141:
     ++p;
     p = marker;
     { return (bufsize_t)(p - start); }
-  yy1276:
+  yy1143:
     yych = *++p;
     if (yybm[0 + yych] & 64) {
-      goto yy1277;
+      goto yy1144;
     }
-    goto yy1255;
-  yy1277:
+    goto yy1122;
+  yy1144:
     ++p;
     yych = *p;
     marker = p;
     if (yybm[0 + yych] & 128) {
-      goto yy1279;
+      goto yy1146;
     }
     if (yych <= 0xE0) {
       if (yych <= '`') {
         if (yych <= 0x00)
-          goto yy1255;
+          goto yy1122;
         if (yych <= '\r')
-          goto yy1288;
-        goto yy1277;
+          goto yy1155;
+        goto yy1144;
       } else {
         if (yych <= 0xC1)
-          goto yy1255;
+          goto yy1122;
         if (yych <= 0xDF)
-          goto yy1281;
-        goto yy1282;
+          goto yy1148;
+        goto yy1149;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych == 0xED)
-          goto yy1287;
-        goto yy1283;
+          goto yy1154;
+        goto yy1150;
       } else {
         if (yych <= 0xF0)
-          goto yy1284;
+          goto yy1151;
         if (yych <= 0xF3)
-          goto yy1285;
+          goto yy1152;
         if (yych <= 0xF4)
-          goto yy1286;
-        goto yy1255;
+          goto yy1153;
+        goto yy1122;
       }
     }
-  yy1279:
+  yy1146:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 128) {
-      goto yy1279;
+      goto yy1146;
     }
     if (yych <= 0xEC) {
       if (yych <= 0xC1) {
         if (yych <= 0x00)
-          goto yy1255;
+          goto yy1122;
         if (yych <= '\r')
-          goto yy1288;
-        goto yy1255;
+          goto yy1155;
+        goto yy1122;
       } else {
         if (yych <= 0xDF)
-          goto yy1281;
+          goto yy1148;
         if (yych <= 0xE0)
-          goto yy1282;
-        goto yy1283;
+          goto yy1149;
+        goto yy1150;
       }
     } else {
       if (yych <= 0xF0) {
         if (yych <= 0xED)
-          goto yy1287;
+          goto yy1154;
         if (yych <= 0xEF)
-          goto yy1283;
-        goto yy1284;
+          goto yy1150;
+        goto yy1151;
       } else {
         if (yych <= 0xF3)
-          goto yy1285;
+          goto yy1152;
         if (yych <= 0xF4)
-          goto yy1286;
-        goto yy1255;
+          goto yy1153;
+        goto yy1122;
       }
     }
-  yy1281:
+  yy1148:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1279;
-    goto yy1255;
-  yy1282:
+      goto yy1146;
+    goto yy1122;
+  yy1149:
     ++p;
     yych = *p;
     if (yych <= 0x9F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1281;
-    goto yy1255;
-  yy1283:
+      goto yy1148;
+    goto yy1122;
+  yy1150:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1281;
-    goto yy1255;
-  yy1284:
+      goto yy1148;
+    goto yy1122;
+  yy1151:
     ++p;
     yych = *p;
     if (yych <= 0x8F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1283;
-    goto yy1255;
-  yy1285:
+      goto yy1150;
+    goto yy1122;
+  yy1152:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0xBF)
-      goto yy1283;
-    goto yy1255;
-  yy1286:
+      goto yy1150;
+    goto yy1122;
+  yy1153:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0x8F)
-      goto yy1283;
-    goto yy1255;
-  yy1287:
+      goto yy1150;
+    goto yy1122;
+  yy1154:
     ++p;
     yych = *p;
     if (yych <= 0x7F)
-      goto yy1255;
+      goto yy1122;
     if (yych <= 0x9F)
-      goto yy1281;
-    goto yy1255;
-  yy1288:
+      goto yy1148;
+    goto yy1122;
+  yy1155:
     ++p;
     p = marker;
     { return (bufsize_t)(p - start); }
@@ -19345,190 +17261,190 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) {
     if (yych <= 0xC1) {
       if (yych <= '`') {
         if (yych == '\n')
-          goto yy1292;
+          goto yy1159;
         if (yych <= '_')
-          goto yy1295;
-        goto yy1293;
+          goto yy1162;
+        goto yy1160;
       } else {
         if (yych == '~')
-          goto yy1294;
+          goto yy1161;
         if (yych <= 0x7F)
-          goto yy1295;
+          goto yy1162;
       }
     } else {
       if (yych <= 0xED) {
         if (yych <= 0xDF)
-          goto yy1296;
+          goto yy1163;
         if (yych <= 0xE0)
-          goto yy1298;
+          goto yy1165;
         if (yych <= 0xEC)
-          goto yy1299;
-        goto yy1303;
+          goto yy1166;
+        goto yy1170;
       } else {
         if (yych <= 0xF0) {
           if (yych <= 0xEF)
-            goto yy1299;
-          goto yy1300;
+            goto yy1166;
+          goto yy1167;
         } else {
           if (yych <= 0xF3)
-            goto yy1301;
+            goto yy1168;
           if (yych <= 0xF4)
-            goto yy1302;
+            goto yy1169;
         }
       }
     }
-  yy1292 : { return 0; }
-  yy1293:
+  yy1159 : { return 0; }
+  yy1160:
     yych = *(marker = ++p);
     if (yych == '`')
-      goto yy1311;
-    goto yy1292;
-  yy1294:
+      goto yy1178;
+    goto yy1159;
+  yy1161:
     yych = *(marker = ++p);
     if (yych == '~')
-      goto yy1304;
-    goto yy1292;
-  yy1295:
+      goto yy1171;
+    goto yy1159;
+  yy1162:
     yych = *++p;
-    goto yy1292;
-  yy1296:
+    goto yy1159;
+  yy1163:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1297;
+      goto yy1164;
     if (yych <= 0xBF)
-      goto yy1295;
-  yy1297:
+      goto yy1162;
+  yy1164:
     p = marker;
-    goto yy1292;
-  yy1298:
+    goto yy1159;
+  yy1165:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1297;
+      goto yy1164;
     if (yych <= 0xBF)
-      goto yy1296;
-    goto yy1297;
-  yy1299:
+      goto yy1163;
+    goto yy1164;
+  yy1166:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1297;
+      goto yy1164;
     if (yych <= 0xBF)
-      goto yy1296;
-    goto yy1297;
-  yy1300:
+      goto yy1163;
+    goto yy1164;
+  yy1167:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1297;
+      goto yy1164;
     if (yych <= 0xBF)
-      goto yy1299;
-    goto yy1297;
-  yy1301:
+      goto yy1166;
+    goto yy1164;
+  yy1168:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1297;
+      goto yy1164;
     if (yych <= 0xBF)
-      goto yy1299;
-    goto yy1297;
-  yy1302:
+      goto yy1166;
+    goto yy1164;
+  yy1169:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1297;
+      goto yy1164;
     if (yych <= 0x8F)
-      goto yy1299;
-    goto yy1297;
-  yy1303:
+      goto yy1166;
+    goto yy1164;
+  yy1170:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1297;
+      goto yy1164;
     if (yych <= 0x9F)
-      goto yy1296;
-    goto yy1297;
-  yy1304:
+      goto yy1163;
+    goto yy1164;
+  yy1171:
     yych = *++p;
     if (yybm[0 + yych] & 32) {
-      goto yy1305;
+      goto yy1172;
     }
-    goto yy1297;
-  yy1305:
+    goto yy1164;
+  yy1172:
     ++p;
     yych = *p;
     marker = p;
     if (yybm[0 + yych] & 64) {
-      goto yy1307;
+      goto yy1174;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1297;
+        goto yy1164;
       if (yych <= '\n')
-        goto yy1309;
-      goto yy1297;
+        goto yy1176;
+      goto yy1164;
     } else {
       if (yych <= '\r')
-        goto yy1309;
+        goto yy1176;
       if (yych == '~')
-        goto yy1305;
-      goto yy1297;
+        goto yy1172;
+      goto yy1164;
     }
-  yy1307:
+  yy1174:
     ++p;
     yych = *p;
     if (yybm[0 + yych] & 64) {
-      goto yy1307;
+      goto yy1174;
     }
     if (yych <= 0x08)
-      goto yy1297;
+      goto yy1164;
     if (yych <= '\n')
-      goto yy1309;
+      goto yy1176;
     if (yych != '\r')
-      goto yy1297;
-  yy1309:
+      goto yy1164;
+  yy1176:
     ++p;
     p = marker;
     { return (bufsize_t)(p - start); }
-  yy1311:
+  yy1178:
     yych = *++p;
     if (yybm[0 + yych] & 128) {
-      goto yy1312;
+      goto yy1179;
     }
-    goto yy1297;
-  yy1312:
+    goto yy1164;
+  yy1179:
     ++p;
     yych = *p;
     marker = p;
     if (yybm[0 + yych] & 128) {
-      goto yy1312;
+      goto yy1179;
     }
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1297;
+        goto yy1164;
       if (yych <= '\t')
-        goto yy1314;
+        goto yy1181;
       if (yych <= '\n')
-        goto yy1316;
-      goto yy1297;
+        goto yy1183;
+      goto yy1164;
     } else {
       if (yych <= '\r')
-        goto yy1316;
+        goto yy1183;
       if (yych != ' ')
-        goto yy1297;
+        goto yy1164;
     }
-  yy1314:
+  yy1181:
     ++p;
     yych = *p;
     if (yych <= '\f') {
       if (yych <= 0x08)
-        goto yy1297;
+        goto yy1164;
       if (yych <= '\t')
-        goto yy1314;
+        goto yy1181;
       if (yych >= '\v')
-        goto yy1297;
+        goto yy1164;
     } else {
       if (yych <= '\r')
-        goto yy1316;
+        goto yy1183;
       if (yych == ' ')
-        goto yy1314;
-      goto yy1297;
+        goto yy1181;
+      goto yy1164;
     }
-  yy1316:
+  yy1183:
     ++p;
     p = marker;
     { return (bufsize_t)(p - start); }
@@ -19547,997 +17463,997 @@ bufsize_t _scan_entity(const unsigned char *p) {
     if (yych <= 0xDF) {
       if (yych <= '%') {
         if (yych != '\n')
-          goto yy1322;
+          goto yy1189;
       } else {
         if (yych <= '&')
-          goto yy1321;
+          goto yy1188;
         if (yych <= 0x7F)
-          goto yy1322;
+          goto yy1189;
         if (yych >= 0xC2)
-          goto yy1323;
+          goto yy1190;
       }
     } else {
       if (yych <= 0xEF) {
         if (yych <= 0xE0)
-          goto yy1325;
+          goto yy1192;
         if (yych == 0xED)
-          goto yy1330;
-        goto yy1326;
+          goto yy1197;
+        goto yy1193;
       } else {
         if (yych <= 0xF0)
-          goto yy1327;
+          goto yy1194;
         if (yych <= 0xF3)
-          goto yy1328;
+          goto yy1195;
         if (yych <= 0xF4)
-          goto yy1329;
+          goto yy1196;
       }
     }
-  yy1320 : { return 0; }
-  yy1321:
+  yy1187 : { return 0; }
+  yy1188:
     yych = *(marker = ++p);
     if (yych <= '@') {
       if (yych == '#')
-        goto yy1331;
-      goto yy1320;
+        goto yy1198;
+      goto yy1187;
     } else {
       if (yych <= 'Z')
-        goto yy1332;
+        goto yy1199;
       if (yych <= '`')
-        goto yy1320;
+        goto yy1187;
       if (yych <= 'z')
-        goto yy1332;
-      goto yy1320;
+        goto yy1199;
+      goto yy1187;
     }
-  yy1322:
+  yy1189:
     yych = *++p;
-    goto yy1320;
-  yy1323:
+    goto yy1187;
+  yy1190:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1324;
+      goto yy1191;
     if (yych <= 0xBF)
-      goto yy1322;
-  yy1324:
+      goto yy1189;
+  yy1191:
     p = marker;
-    goto yy1320;
-  yy1325:
+    goto yy1187;
+  yy1192:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1324;
+      goto yy1191;
     if (yych <= 0xBF)
-      goto yy1323;
-    goto yy1324;
-  yy1326:
+      goto yy1190;
+    goto yy1191;
+  yy1193:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1324;
+      goto yy1191;
     if (yych <= 0xBF)
-      goto yy1323;
-    goto yy1324;
-  yy1327:
+      goto yy1190;
+    goto yy1191;
+  yy1194:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1324;
+      goto yy1191;
     if (yych <= 0xBF)
-      goto yy1326;
-    goto yy1324;
-  yy1328:
+      goto yy1193;
+    goto yy1191;
+  yy1195:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1324;
+      goto yy1191;
     if (yych <= 0xBF)
-      goto yy1326;
-    goto yy1324;
-  yy1329:
+      goto yy1193;
+    goto yy1191;
+  yy1196:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1324;
+      goto yy1191;
     if (yych <= 0x8F)
-      goto yy1326;
-    goto yy1324;
-  yy1330:
+      goto yy1193;
+    goto yy1191;
+  yy1197:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1324;
+      goto yy1191;
     if (yych <= 0x9F)
-      goto yy1323;
-    goto yy1324;
-  yy1331:
+      goto yy1190;
+    goto yy1191;
+  yy1198:
     yych = *++p;
     if (yych <= 'W') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1367;
-      goto yy1324;
+        goto yy1234;
+      goto yy1191;
     } else {
       if (yych <= 'X')
-        goto yy1366;
+        goto yy1233;
       if (yych == 'x')
-        goto yy1366;
-      goto yy1324;
+        goto yy1233;
+      goto yy1191;
     }
-  yy1332:
+  yy1199:
     yych = *++p;
     if (yych <= '@') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych >= ':')
-        goto yy1324;
+        goto yy1191;
     } else {
       if (yych <= 'Z')
-        goto yy1333;
+        goto yy1200;
       if (yych <= '`')
-        goto yy1324;
+        goto yy1191;
       if (yych >= '{')
-        goto yy1324;
+        goto yy1191;
     }
-  yy1333:
+  yy1200:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1336;
+        goto yy1203;
       if (yych <= ':')
-        goto yy1324;
+        goto yy1191;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
-        goto yy1336;
+          goto yy1191;
+        goto yy1203;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych <= 'z')
-          goto yy1336;
-        goto yy1324;
+          goto yy1203;
+        goto yy1191;
       }
     }
-  yy1334:
+  yy1201:
     ++p;
     { return (bufsize_t)(p - start); }
-  yy1336:
+  yy1203:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1337;
+        goto yy1204;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1337:
+  yy1204:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1338;
+        goto yy1205;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1338:
+  yy1205:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1339;
+        goto yy1206;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1339:
+  yy1206:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1340;
+        goto yy1207;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1340:
+  yy1207:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1341;
+        goto yy1208;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1341:
+  yy1208:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1342;
+        goto yy1209;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1342:
+  yy1209:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1343;
+        goto yy1210;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1343:
+  yy1210:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1344;
+        goto yy1211;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1344:
+  yy1211:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1345;
+        goto yy1212;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1345:
+  yy1212:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1346;
+        goto yy1213;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1346:
+  yy1213:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1347;
+        goto yy1214;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1347:
+  yy1214:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1348;
+        goto yy1215;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1348:
+  yy1215:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1349;
+        goto yy1216;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1349:
+  yy1216:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1350;
+        goto yy1217;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1350:
+  yy1217:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1351;
+        goto yy1218;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1351:
+  yy1218:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1352;
+        goto yy1219;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1352:
+  yy1219:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1353;
+        goto yy1220;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1353:
+  yy1220:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1354;
+        goto yy1221;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1354:
+  yy1221:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1355;
+        goto yy1222;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1355:
+  yy1222:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1356;
+        goto yy1223;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1356:
+  yy1223:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1357;
+        goto yy1224;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1357:
+  yy1224:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1358;
+        goto yy1225;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1358:
+  yy1225:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1359;
+        goto yy1226;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1359:
+  yy1226:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1360;
+        goto yy1227;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1360:
+  yy1227:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1361;
+        goto yy1228;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1361:
+  yy1228:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1362;
+        goto yy1229;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1362:
+  yy1229:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1363;
+        goto yy1230;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1363:
+  yy1230:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1364;
+        goto yy1231;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1364:
+  yy1231:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1365;
+        goto yy1232;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'Z') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= '{')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1365:
+  yy1232:
     yych = *++p;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1366:
+      goto yy1201;
+    goto yy1191;
+  yy1233:
     yych = *++p;
     if (yych <= '@') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1374;
-      goto yy1324;
+        goto yy1241;
+      goto yy1191;
     } else {
       if (yych <= 'F')
-        goto yy1374;
+        goto yy1241;
       if (yych <= '`')
-        goto yy1324;
+        goto yy1191;
       if (yych <= 'f')
-        goto yy1374;
-      goto yy1324;
+        goto yy1241;
+      goto yy1191;
     }
-  yy1367:
+  yy1234:
     yych = *++p;
     if (yych <= '/')
-      goto yy1324;
+      goto yy1191;
     if (yych <= '9')
-      goto yy1368;
+      goto yy1235;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1368:
+      goto yy1201;
+    goto yy1191;
+  yy1235:
     yych = *++p;
     if (yych <= '/')
-      goto yy1324;
+      goto yy1191;
     if (yych <= '9')
-      goto yy1369;
+      goto yy1236;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1369:
+      goto yy1201;
+    goto yy1191;
+  yy1236:
     yych = *++p;
     if (yych <= '/')
-      goto yy1324;
+      goto yy1191;
     if (yych <= '9')
-      goto yy1370;
+      goto yy1237;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1370:
+      goto yy1201;
+    goto yy1191;
+  yy1237:
     yych = *++p;
     if (yych <= '/')
-      goto yy1324;
+      goto yy1191;
     if (yych <= '9')
-      goto yy1371;
+      goto yy1238;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1371:
+      goto yy1201;
+    goto yy1191;
+  yy1238:
     yych = *++p;
     if (yych <= '/')
-      goto yy1324;
+      goto yy1191;
     if (yych <= '9')
-      goto yy1372;
+      goto yy1239;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1372:
+      goto yy1201;
+    goto yy1191;
+  yy1239:
     yych = *++p;
     if (yych <= '/')
-      goto yy1324;
+      goto yy1191;
     if (yych <= '9')
-      goto yy1373;
+      goto yy1240;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1373:
+      goto yy1201;
+    goto yy1191;
+  yy1240:
     yych = *++p;
     if (yych <= '/')
-      goto yy1324;
+      goto yy1191;
     if (yych <= '9')
-      goto yy1365;
+      goto yy1232;
     if (yych == ';')
-      goto yy1334;
-    goto yy1324;
-  yy1374:
+      goto yy1201;
+    goto yy1191;
+  yy1241:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1375;
+        goto yy1242;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'F') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= 'g')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1375:
+  yy1242:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1376;
+        goto yy1243;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'F') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= 'g')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1376:
+  yy1243:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1377;
+        goto yy1244;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'F') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= 'g')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1377:
+  yy1244:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1378;
+        goto yy1245;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'F') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= 'g')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1378:
+  yy1245:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1379;
+        goto yy1246;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'F') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= 'g')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1379:
+  yy1246:
     yych = *++p;
     if (yych <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1380;
+        goto yy1247;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'F') {
         if (yych <= '@')
-          goto yy1324;
+          goto yy1191;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych >= 'g')
-          goto yy1324;
+          goto yy1191;
       }
     }
-  yy1380:
+  yy1247:
     ++p;
     if ((yych = *p) <= ';') {
       if (yych <= '/')
-        goto yy1324;
+        goto yy1191;
       if (yych <= '9')
-        goto yy1365;
+        goto yy1232;
       if (yych <= ':')
-        goto yy1324;
-      goto yy1334;
+        goto yy1191;
+      goto yy1201;
     } else {
       if (yych <= 'F') {
         if (yych <= '@')
-          goto yy1324;
-        goto yy1365;
+          goto yy1191;
+        goto yy1232;
       } else {
         if (yych <= '`')
-          goto yy1324;
+          goto yy1191;
         if (yych <= 'f')
-          goto yy1365;
-        goto yy1324;
+          goto yy1232;
+        goto yy1191;
       }
     }
   }
@@ -20557,415 +18473,415 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) {
       if (yych <= 'I') {
         if (yych <= 'C') {
           if (yych != '\n')
-            goto yy1388;
+            goto yy1255;
         } else {
           if (yych <= 'D')
-            goto yy1384;
+            goto yy1251;
           if (yych == 'F')
-            goto yy1387;
-          goto yy1388;
+            goto yy1254;
+          goto yy1255;
         }
       } else {
         if (yych <= 'V') {
           if (yych <= 'J')
-            goto yy1385;
+            goto yy1252;
           if (yych <= 'U')
-            goto yy1388;
-          goto yy1386;
+            goto yy1255;
+          goto yy1253;
         } else {
           if (yych == 'd')
-            goto yy1384;
+            goto yy1251;
           if (yych <= 'e')
-            goto yy1388;
-          goto yy1387;
+            goto yy1255;
+          goto yy1254;
         }
       }
     } else {
       if (yych <= 0xDF) {
         if (yych <= 'u') {
           if (yych == 'j')
-            goto yy1385;
-          goto yy1388;
+            goto yy1252;
+          goto yy1255;
         } else {
           if (yych <= 'v')
-            goto yy1386;
+            goto yy1253;
           if (yych <= 0x7F)
-            goto yy1388;
+            goto yy1255;
           if (yych >= 0xC2)
-            goto yy1389;
+            goto yy1256;
         }
       } else {
         if (yych <= 0xEF) {
           if (yych <= 0xE0)
-            goto yy1391;
+            goto yy1258;
           if (yych == 0xED)
-            goto yy1396;
-          goto yy1392;
+            goto yy1263;
+          goto yy1259;
         } else {
           if (yych <= 0xF0)
-            goto yy1393;
+            goto yy1260;
           if (yych <= 0xF3)
-            goto yy1394;
+            goto yy1261;
           if (yych <= 0xF4)
-            goto yy1395;
+            goto yy1262;
         }
       }
     }
-  yy1383 : { return 0; }
-  yy1384:
+  yy1250 : { return 0; }
+  yy1251:
     yyaccept = 0;
     yych = *(marker = ++p);
     if (yych == 'A')
-      goto yy1418;
+      goto yy1285;
     if (yych == 'a')
-      goto yy1418;
-    goto yy1383;
-  yy1385:
+      goto yy1285;
+    goto yy1250;
+  yy1252:
     yyaccept = 0;
     yych = *(marker = ++p);
     if (yych == 'A')
-      goto yy1409;
+      goto yy1276;
     if (yych == 'a')
-      goto yy1409;
-    goto yy1383;
-  yy1386:
+      goto yy1276;
+    goto yy1250;
+  yy1253:
     yyaccept = 0;
     yych = *(marker = ++p);
     if (yych == 'B')
-      goto yy1402;
+      goto yy1269;
     if (yych == 'b')
-      goto yy1402;
-    goto yy1383;
-  yy1387:
+      goto yy1269;
+    goto yy1250;
+  yy1254:
     yyaccept = 0;
     yych = *(marker = ++p);
     if (yych == 'I')
-      goto yy1397;
+      goto yy1264;
     if (yych == 'i')
-      goto yy1397;
-    goto yy1383;
-  yy1388:
+      goto yy1264;
+    goto yy1250;
+  yy1255:
     yych = *++p;
-    goto yy1383;
-  yy1389:
+    goto yy1250;
+  yy1256:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1390;
+      goto yy1257;
     if (yych <= 0xBF)
-      goto yy1388;
-  yy1390:
+      goto yy1255;
+  yy1257:
     p = marker;
     if (yyaccept == 0) {
-      goto yy1383;
+      goto yy1250;
     } else {
-      goto yy1401;
+      goto yy1268;
     }
-  yy1391:
+  yy1258:
     yych = *++p;
     if (yych <= 0x9F)
-      goto yy1390;
+      goto yy1257;
     if (yych <= 0xBF)
-      goto yy1389;
-    goto yy1390;
-  yy1392:
+      goto yy1256;
+    goto yy1257;
+  yy1259:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1390;
+      goto yy1257;
     if (yych <= 0xBF)
-      goto yy1389;
-    goto yy1390;
-  yy1393:
+      goto yy1256;
+    goto yy1257;
+  yy1260:
     yych = *++p;
     if (yych <= 0x8F)
-      goto yy1390;
+      goto yy1257;
     if (yych <= 0xBF)
-      goto yy1392;
-    goto yy1390;
-  yy1394:
+      goto yy1259;
+    goto yy1257;
+  yy1261:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1390;
+      goto yy1257;
     if (yych <= 0xBF)
-      goto yy1392;
-    goto yy1390;
-  yy1395:
+      goto yy1259;
+    goto yy1257;
+  yy1262:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1390;
+      goto yy1257;
     if (yych <= 0x8F)
-      goto yy1392;
-    goto yy1390;
-  yy1396:
+      goto yy1259;
+    goto yy1257;
+  yy1263:
     yych = *++p;
     if (yych <= 0x7F)
-      goto yy1390;
+      goto yy1257;
     if (yych <= 0x9F)
-      goto yy1389;
-    goto yy1390;
-  yy1397:
+      goto yy1256;
+    goto yy1257;
+  yy1264:
     yych = *++p;
     if (yych == 'L')
-      goto yy1398;
+      goto yy1265;
     if (yych != 'l')
-      goto yy1390;
-  yy1398:
+      goto yy1257;
+  yy1265:
     yych = *++p;
     if (yych == 'E')
-      goto yy1399;
+      goto yy1266;
     if (yych != 'e')
-      goto yy1390;
-  yy1399:
+      goto yy1257;
+  yy1266:
     yych = *++p;
     if (yych != ':')
-      goto yy1390;
-  yy1400:
+      goto yy1257;
+  yy1267:
     ++p;
-  yy1401 : { return (bufsize_t)(p - start); }
-  yy1402:
+  yy1268 : { return (bufsize_t)(p - start); }
+  yy1269:
     yych = *++p;
     if (yych == 'S')
-      goto yy1403;
+      goto yy1270;
     if (yych != 's')
-      goto yy1390;
-  yy1403:
+      goto yy1257;
+  yy1270:
     yych = *++p;
     if (yych == 'C')
-      goto yy1404;
+      goto yy1271;
     if (yych != 'c')
-      goto yy1390;
-  yy1404:
+      goto yy1257;
+  yy1271:
     yych = *++p;
     if (yych == 'R')
-      goto yy1405;
+      goto yy1272;
     if (yych != 'r')
-      goto yy1390;
-  yy1405:
+      goto yy1257;
+  yy1272:
     yych = *++p;
     if (yych == 'I')
-      goto yy1406;
+      goto yy1273;
     if (yych != 'i')
-      goto yy1390;
-  yy1406:
+      goto yy1257;
+  yy1273:
     yych = *++p;
     if (yych == 'P')
-      goto yy1407;
+      goto yy1274;
     if (yych != 'p')
-      goto yy1390;
-  yy1407:
+      goto yy1257;
+  yy1274:
     yych = *++p;
     if (yych == 'T')
-      goto yy1408;
+      goto yy1275;
     if (yych != 't')
-      goto yy1390;
-  yy1408:
+      goto yy1257;
+  yy1275:
     yych = *++p;
     if (yych == ':')
-      goto yy1400;
-    goto yy1390;
-  yy1409:
+      goto yy1267;
+    goto yy1257;
+  yy1276:
     yych = *++p;
     if (yych == 'V')
-      goto yy1410;
+      goto yy1277;
     if (yych != 'v')
-      goto yy1390;
-  yy1410:
+      goto yy1257;
+  yy1277:
     yych = *++p;
     if (yych == 'A')
-      goto yy1411;
+      goto yy1278;
     if (yych != 'a')
-      goto yy1390;
-  yy1411:
+      goto yy1257;
+  yy1278:
     yych = *++p;
     if (yych == 'S')
-      goto yy1412;
+      goto yy1279;
     if (yych != 's')
-      goto yy1390;
-  yy1412:
+      goto yy1257;
+  yy1279:
     yych = *++p;
     if (yych == 'C')
-      goto yy1413;
+      goto yy1280;
     if (yych != 'c')
-      goto yy1390;
-  yy1413:
+      goto yy1257;
+  yy1280:
     yych = *++p;
     if (yych == 'R')
-      goto yy1414;
+      goto yy1281;
     if (yych != 'r')
-      goto yy1390;
-  yy1414:
+      goto yy1257;
+  yy1281:
     yych = *++p;
     if (yych == 'I')
-      goto yy1415;
+      goto yy1282;
     if (yych != 'i')
-      goto yy1390;
-  yy1415:
+      goto yy1257;
+  yy1282:
     yych = *++p;
     if (yych == 'P')
-      goto yy1416;
+      goto yy1283;
     if (yych != 'p')
-      goto yy1390;
-  yy1416:
+      goto yy1257;
+  yy1283:
     yych = *++p;
     if (yych == 'T')
-      goto yy1417;
+      goto yy1284;
     if (yych != 't')
-      goto yy1390;
-  yy1417:
+      goto yy1257;
+  yy1284:
     yych = *++p;
     if (yych == ':')
-      goto yy1400;
-    goto yy1390;
-  yy1418:
+      goto yy1267;
+    goto yy1257;
+  yy1285:
     yych = *++p;
     if (yych == 'T')
-      goto yy1419;
+      goto yy1286;
     if (yych != 't')
-      goto yy1390;
-  yy1419:
+      goto yy1257;
+  yy1286:
     yych = *++p;
     if (yych == 'A')
-      goto yy1420;
+      goto yy1287;
     if (yych != 'a')
-      goto yy1390;
-  yy1420:
+      goto yy1257;
+  yy1287:
     yych = *++p;
     if (yych != ':')
-      goto yy1390;
+      goto yy1257;
     yyaccept = 1;
     yych = *(marker = ++p);
     if (yych == 'I')
-      goto yy1422;
+      goto yy1289;
     if (yych != 'i')
-      goto yy1401;
-  yy1422:
+      goto yy1268;
+  yy1289:
     yych = *++p;
     if (yych == 'M')
-      goto yy1423;
+      goto yy1290;
     if (yych != 'm')
-      goto yy1390;
-  yy1423:
+      goto yy1257;
+  yy1290:
     yych = *++p;
     if (yych == 'A')
-      goto yy1424;
+      goto yy1291;
     if (yych != 'a')
-      goto yy1390;
-  yy1424:
+      goto yy1257;
+  yy1291:
     yych = *++p;
     if (yych == 'G')
-      goto yy1425;
+      goto yy1292;
     if (yych != 'g')
-      goto yy1390;
-  yy1425:
+      goto yy1257;
+  yy1292:
     yych = *++p;
     if (yych == 'E')
-      goto yy1426;
+      goto yy1293;
     if (yych != 'e')
-      goto yy1390;
-  yy1426:
+      goto yy1257;
+  yy1293:
     yych = *++p;
     if (yych != '/')
-      goto yy1390;
+      goto yy1257;
     yych = *++p;
     if (yych <= 'W') {
       if (yych <= 'J') {
         if (yych == 'G')
-          goto yy1429;
+          goto yy1296;
         if (yych <= 'I')
-          goto yy1390;
-        goto yy1430;
+          goto yy1257;
+        goto yy1297;
       } else {
         if (yych == 'P')
-          goto yy1428;
+          goto yy1295;
         if (yych <= 'V')
-          goto yy1390;
-        goto yy1431;
+          goto yy1257;
+        goto yy1298;
       }
     } else {
       if (yych <= 'j') {
         if (yych == 'g')
-          goto yy1429;
+          goto yy1296;
         if (yych <= 'i')
-          goto yy1390;
-        goto yy1430;
+          goto yy1257;
+        goto yy1297;
       } else {
         if (yych <= 'p') {
           if (yych <= 'o')
-            goto yy1390;
+            goto yy1257;
         } else {
           if (yych == 'w')
-            goto yy1431;
-          goto yy1390;
+            goto yy1298;
+          goto yy1257;
         }
       }
     }
-  yy1428:
+  yy1295:
     yych = *++p;
     if (yych == 'N')
-      goto yy1439;
+      goto yy1306;
     if (yych == 'n')
-      goto yy1439;
-    goto yy1390;
-  yy1429:
+      goto yy1306;
+    goto yy1257;
+  yy1296:
     yych = *++p;
     if (yych == 'I')
-      goto yy1438;
+      goto yy1305;
     if (yych == 'i')
-      goto yy1438;
-    goto yy1390;
-  yy1430:
+      goto yy1305;
+    goto yy1257;
+  yy1297:
     yych = *++p;
     if (yych == 'P')
-      goto yy1436;
+      goto yy1303;
     if (yych == 'p')
-      goto yy1436;
-    goto yy1390;
-  yy1431:
+      goto yy1303;
+    goto yy1257;
+  yy1298:
     yych = *++p;
     if (yych == 'E')
-      goto yy1432;
+      goto yy1299;
     if (yych != 'e')
-      goto yy1390;
-  yy1432:
+      goto yy1257;
+  yy1299:
     yych = *++p;
     if (yych == 'B')
-      goto yy1433;
+      goto yy1300;
     if (yych != 'b')
-      goto yy1390;
-  yy1433:
+      goto yy1257;
+  yy1300:
     yych = *++p;
     if (yych == 'P')
-      goto yy1434;
+      goto yy1301;
     if (yych != 'p')
-      goto yy1390;
-  yy1434:
+      goto yy1257;
+  yy1301:
     ++p;
     { return 0; }
-  yy1436:
+  yy1303:
     yych = *++p;
     if (yych == 'E')
-      goto yy1437;
+      goto yy1304;
     if (yych != 'e')
-      goto yy1390;
-  yy1437:
+      goto yy1257;
+  yy1304:
     yych = *++p;
     if (yych == 'G')
-      goto yy1434;
+      goto yy1301;
     if (yych == 'g')
-      goto yy1434;
-    goto yy1390;
-  yy1438:
+      goto yy1301;
+    goto yy1257;
+  yy1305:
     yych = *++p;
     if (yych == 'F')
-      goto yy1434;
+      goto yy1301;
     if (yych == 'f')
-      goto yy1434;
-    goto yy1390;
-  yy1439:
+      goto yy1301;
+    goto yy1257;
+  yy1306:
     ++p;
     if ((yych = *p) == 'G')
-      goto yy1434;
+      goto yy1301;
     if (yych == 'g')
-      goto yy1434;
-    goto yy1390;
+      goto yy1301;
+    goto yy1257;
   }
 }
diff --git a/src/scanners.h b/src/scanners.h
@@ -18,7 +18,6 @@ bufsize_t _scan_html_block_end_2(const unsigned char *p);
 bufsize_t _scan_html_block_end_3(const unsigned char *p);
 bufsize_t _scan_html_block_end_4(const unsigned char *p);
 bufsize_t _scan_html_block_end_5(const unsigned char *p);
-bufsize_t _scan_link_url(const unsigned char *p);
 bufsize_t _scan_link_title(const unsigned char *p);
 bufsize_t _scan_spacechars(const unsigned char *p);
 bufsize_t _scan_atx_heading_start(const unsigned char *p);
@@ -40,7 +39,6 @@ bufsize_t _scan_dangerous_url(const unsigned char *p);
 #define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n)
 #define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n)
 #define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n)
-#define scan_link_url(c, n) _scan_at(&_scan_link_url, c, n)
 #define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n)
 #define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n)
 #define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n)
diff --git a/src/scanners.re b/src/scanners.re
@@ -205,21 +205,6 @@ bufsize_t _scan_html_block_end_5(const unsigned char *p)
 */
 }
 
-// Try to match a URL in a link or reference, return number of chars matched.
-// This may optionally be contained in <..>; otherwise
-// whitespace and unbalanced right parentheses aren't allowed.
-// Newlines aren't ever allowed.
-bufsize_t _scan_link_url(const unsigned char *p)
-{
-  const unsigned char *marker = NULL;
-  const unsigned char *start = p;
-/*!re2c
-  [ \r\n]* [<] ([^<> \t\r\n\\\x00] | escaped_char | [\\])* [>] { return (bufsize_t)(p - start); }
-  [ \r\n]* (reg_char+ | escaped_char | [\\] [^() \t\v\f\r\n] | in_parens_nosp)* [\\]? { return (bufsize_t)(p - start); }
-  .? { return 0; }
-*/
-}
-
 // Try to match a link title (in single quotes, in double quotes, or
 // in parentheses), returning number of chars matched.  Allow one
 // level of internal nesting (quotes within quotes).
diff --git a/test/spec.txt b/test/spec.txt
@@ -7148,8 +7148,7 @@ A [link destination](@) consists of either
 - a nonempty sequence of characters that does not include
   ASCII space or control characters, and includes parentheses
   only if (a) they are backslash-escaped or (b) they are part of
-  a balanced pair of unescaped parentheses that is not itself
-  inside a balanced pair of unescaped parentheses.
+  a balanced pair of unescaped parentheses.
 
 A [link title](@)  consists of either
 
@@ -7255,35 +7254,29 @@ Parentheses inside the link destination may be escaped:
 <p><a href="(foo)">link</a></p>
 ````````````````````````````````
 
-One level of balanced parentheses is allowed without escaping:
-
-```````````````````````````````` example
-[link]((foo)and(bar))
-.
-<p><a href="(foo)and(bar)">link</a></p>
-````````````````````````````````
-
-However, if you have parentheses within parentheses, you need to escape
-or use the `<...>` form:
+Any number parentheses are allowed without escaping, as long as they are
+balanced:
 
 ```````````````````````````````` example
 [link](foo(and(bar)))
 .
-<p>[link](foo(and(bar)))</p>
+<p><a href="foo(and(bar))">link</a></p>
 ````````````````````````````````
 
+However, if you have unbalanced parentheses, you need to escape or use the
+`<...>` form:
 
 ```````````````````````````````` example
-[link](foo(and\(bar\)))
+[link](foo\(and\(bar\))
 .
-<p><a href="foo(and(bar))">link</a></p>
+<p><a href="foo(and(bar)">link</a></p>
 ````````````````````````````````
 
 
 ```````````````````````````````` example
-[link](<foo(and(bar))>)
+[link](<foo(and(bar)>)
 .
-<p><a href="foo(and(bar))">link</a></p>
+<p><a href="foo(and(bar)">link</a></p>
 ````````````````````````````````