diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -3,8 +3,8 @@
 
 This package provides Haskell bindings for [libcmark], the reference
 parser for [CommonMark], a fully specified variant of Markdown.
-It includes sources for [libcmark] (version 0.26.0, implementing
-version 0.26 of the spec) and does not require prior installation of
+It includes sources for [libcmark] (version 0.27.0, implementing
+version 0.27 of the spec) and does not require prior installation of
 the C library.
 
 cmark provides the following advantages over existing Markdown
diff --git a/cbits/blocks.c b/cbits/blocks.c
--- a/cbits/blocks.c
+++ b/cbits/blocks.c
@@ -563,21 +563,27 @@
         cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
         // add replacement character
         cmark_strbuf_put(&parser->linebuf, repl, 3);
-        chunk_len += 1; // so we advance the buffer past NULL
       } else {
         cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
       }
     }
 
     buffer += chunk_len;
-    // skip over line ending characters:
-    if (buffer < end && *buffer == '\r') {
-      buffer++;
-      if (buffer == end)
-        parser->last_buffer_ended_with_cr = true;
+    if (buffer < end) {
+      if (*buffer == '\0') {
+        // skip over NULL
+        buffer++;
+      } else {
+        // skip over line ending characters
+        if (*buffer == '\r') {
+          buffer++;
+          if (buffer == end)
+            parser->last_buffer_ended_with_cr = true;
+        }
+        if (*buffer == '\n')
+          buffer++;
+      }
     }
-    if (buffer < end && *buffer == '\n')
-      buffer++;
   }
 }
 
@@ -933,10 +939,10 @@
       *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK,
                              parser->first_nonspace + 1);
       S_advance_offset(parser, input, input->len - 1 - parser->offset, false);
-    } else if ((matched = parse_list_marker(
+    } else if ((!indented || cont_type == CMARK_NODE_LIST) &&
+               (matched = parse_list_marker(
                     parser->mem, input, parser->first_nonspace,
-                    (*container)->type == CMARK_NODE_PARAGRAPH, &data)) &&
-               (!indented || cont_type == CMARK_NODE_LIST)) {
+                    (*container)->type == CMARK_NODE_PARAGRAPH, &data))) {
 
       // Note that we can have new list items starting with >= 4
       // spaces indent, as long as the list container is still open.
@@ -989,7 +995,7 @@
                              parser->first_nonspace + 1);
       /* TODO: static */
       memcpy(&((*container)->as.list), data, sizeof(*data));
-      free(data);
+      parser->mem->free(data);
     } else if (indented && !maybe_lazy && !parser->blank) {
       S_advance_offset(parser, input, CODE_INDENT, true);
       *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK,
diff --git a/cbits/chunk.h b/cbits/chunk.h
--- a/cbits/chunk.h
+++ b/cbits/chunk.h
@@ -50,8 +50,8 @@
   cmark_chunk_rtrim(c);
 }
 
-static CMARK_INLINE bufsize_t
-    cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset) {
+static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c,
+                                                 bufsize_t offset) {
   const unsigned char *p =
       (unsigned char *)memchr(ch->data + offset, c, ch->len - offset);
   return p ? (bufsize_t)(p - ch->data) : ch->len;
@@ -99,8 +99,8 @@
   return c;
 }
 
-static CMARK_INLINE cmark_chunk
-    cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len) {
+static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch,
+                                                bufsize_t pos, bufsize_t len) {
   cmark_chunk c = {ch->data + pos, len, 0};
   return c;
 }
diff --git a/cbits/cmark.h b/cbits/cmark.h
--- a/cbits/cmark.h
+++ b/cbits/cmark.h
@@ -590,13 +590,13 @@
  * In hexadecimal format, the number 0x010203 represents version 1.2.3.
  */
 CMARK_EXPORT
-int cmark_version();
+int cmark_version(void);
 
 /** The library version string for runtime checks. Also available as
  * macro CMARK_VERSION_STRING for compile time checks.
  */
 CMARK_EXPORT
-const char *cmark_version_string();
+const char *cmark_version_string(void);
 
 /** # AUTHORS
  *
diff --git a/cbits/cmark_export.h b/cbits/cmark_export.h
--- a/cbits/cmark_export.h
+++ b/cbits/cmark_export.h
@@ -33,9 +33,10 @@
 #  define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED
 #endif
 
-#define DEFINE_NO_DEPRECATED 0
-#if DEFINE_NO_DEPRECATED
-# define CMARK_NO_DEPRECATED
+#if 0 /* DEFINE_NO_DEPRECATED */
+#  ifndef CMARK_NO_DEPRECATED
+#    define CMARK_NO_DEPRECATED
+#  endif
 #endif
 
 #endif
diff --git a/cbits/cmark_version.h b/cbits/cmark_version.h
--- a/cbits/cmark_version.h
+++ b/cbits/cmark_version.h
@@ -1,7 +1,7 @@
 #ifndef CMARK_VERSION_H
 #define CMARK_VERSION_H
 
-#define CMARK_VERSION ((0 << 16) | (26 << 8)  | 0)
-#define CMARK_VERSION_STRING "0.26.0"
+#define CMARK_VERSION ((0 << 16) | (27 << 8)  | 0)
+#define CMARK_VERSION_STRING "0.27.0"
 
 #endif
diff --git a/cbits/entities.inc b/cbits/entities.inc
--- a/cbits/entities.inc
+++ b/cbits/entities.inc
@@ -6,7 +6,7 @@
 };
 
 #define CMARK_ENTITY_MIN_LENGTH 2
-#define CMARK_ENTITY_MAX_LENGTH 31
+#define CMARK_ENTITY_MAX_LENGTH 32
 #define CMARK_NUM_ENTITIES 2125
 
 static const struct cmark_entity_node cmark_entities[] = {
diff --git a/cbits/houdini_html_u.c b/cbits/houdini_html_u.c
--- a/cbits/houdini_html_u.c
+++ b/cbits/houdini_html_u.c
@@ -16,7 +16,7 @@
       strncmp((const char *)s, (const char *)cmark_entities[i].entity, len);
   if (cmp == 0 && cmark_entities[i].entity[len] == 0) {
     return (const unsigned char *)cmark_entities[i].bytes;
-  } else if (cmp < 0 && i > low) {
+  } else if (cmp <= 0 && i > low) {
     j = i - ((i - low) / 2);
     if (j == i)
       j -= 1;
diff --git a/cbits/inlines.c b/cbits/inlines.c
--- a/cbits/inlines.c
+++ b/cbits/inlines.c
@@ -330,9 +330,8 @@
         delimiter *delim;
         delim = subj->last_delim;
         while (delim != NULL) {
-                printf("Item at stack pos %p, text pos %d: %d %d %d next(%p)
-prev(%p)\n",
-                       (void*)delim, delim->position, delim->delim_char,
+                printf("Item at stack pos %p: %d %d %d next(%p) prev(%p)\n",
+                       (void*)delim, delim->delim_char,
                        delim->can_open, delim->can_close,
                        (void*)delim->next, (void*)delim->previous);
                 delim = delim->previous;
@@ -353,7 +352,7 @@
   if (delim->previous != NULL) {
     delim->previous->next = delim->next;
   }
-  free(delim);
+  subj->mem->free(delim);
 }
 
 static void pop_bracket(subject *subj) {
@@ -362,7 +361,7 @@
     return;
   b = subj->last_bracket;
   subj->last_bracket = subj->last_bracket->previous;
-  free(b);
+  subj->mem->free(b);
 }
 
 static void push_delimiter(subject *subj, unsigned char c, bool can_open,
@@ -799,7 +798,7 @@
 
 // Return a link, an image, or a literal close bracket.
 static cmark_node *handle_close_bracket(subject *subj) {
-  bufsize_t initial_pos;
+  bufsize_t initial_pos, after_link_text_pos;
   bufsize_t starturl, endurl, starttitle, endtitle, endall;
   bufsize_t n;
   bufsize_t sps;
@@ -833,6 +832,8 @@
   // Now we check to see if it's a link/image.
   is_image = opener->image;
 
+  after_link_text_pos = subj->pos;
+
   // First, look for an inline link.
   if (peek_char(subj) == '(' &&
       ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) &&
@@ -863,7 +864,8 @@
       goto match;
 
     } else {
-      goto noMatch;
+      // it could still be a shortcut reference link
+      subj->pos = after_link_text_pos;
     }
   }
 
diff --git a/cbits/latex.c b/cbits/latex.c
--- a/cbits/latex.c
+++ b/cbits/latex.c
@@ -180,7 +180,7 @@
     link_text = node->first_child;
     cmark_consolidate_text_nodes(link_text);
     realurl = (char *)url;
-    realurllen = url_len;
+    realurllen = (int)url_len;
     if (strncmp(realurl, "mailto:", 7) == 0) {
       realurl += 7;
       realurllen -= 7;
diff --git a/cbits/references.c b/cbits/references.c
--- a/cbits/references.c
+++ b/cbits/references.c
@@ -46,7 +46,7 @@
   assert(result);
 
   if (result[0] == '\0') {
-    free(result);
+    mem->free(result);
     return NULL;
   }
 
@@ -114,7 +114,7 @@
     ref = ref->next;
   }
 
-  free(norm);
+  map->mem->free(norm);
   return ref;
 }
 
@@ -135,7 +135,7 @@
     }
   }
 
-  free(map);
+  map->mem->free(map);
 }
 
 cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) {
diff --git a/cbits/scanners.c b/cbits/scanners.c
--- a/cbits/scanners.c
+++ b/cbits/scanners.c
@@ -1,7 +1,7 @@
 /* Generated by re2c 0.15.3 */
-#include <stdlib.h>
-#include "chunk.h"
 #include "scanners.h"
+#include "chunk.h"
+#include <stdlib.h>
 
 bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
                    bufsize_t offset) {
@@ -29,38 +29,30 @@
   {
     unsigned char yych;
     yych = *(marker = p);
-    if (yych <= 0x7F) {
-      if (yych <= ' ') {
+    if (yych <= 0xC1) {
+      if (yych <= 'Z') {
         if (yych == '\n')
           goto yy2;
-        if (yych <= 0x1F)
+        if (yych <= '@')
           goto yy4;
         goto yy3;
       } else {
-        if (yych <= 'Z') {
-          if (yych <= '@')
-            goto yy4;
+        if (yych <= '`')
+          goto yy4;
+        if (yych <= 'z')
           goto yy3;
-        } else {
-          if (yych <= '`')
-            goto yy4;
-          if (yych <= 'z')
-            goto yy3;
+        if (yych <= 0x7F)
           goto yy4;
-        }
       }
     } else {
       if (yych <= 0xED) {
-        if (yych <= 0xDF) {
-          if (yych >= 0xC2)
-            goto yy5;
-        } else {
-          if (yych <= 0xE0)
-            goto yy7;
-          if (yych <= 0xEC)
-            goto yy8;
-          goto yy12;
-        }
+        if (yych <= 0xDF)
+          goto yy5;
+        if (yych <= 0xE0)
+          goto yy7;
+        if (yych <= 0xEC)
+          goto yy8;
+        goto yy12;
       } else {
         if (yych <= 0xF0) {
           if (yych <= 0xEF)
@@ -77,14 +69,22 @@
   yy2 : { return 0; }
   yy3:
     yych = *(marker = ++p);
-    if (yych <= '.') {
-      if (yych == '+')
+    if (yych <= '/') {
+      if (yych <= '+') {
+        if (yych <= '*')
+          goto yy2;
         goto yy13;
-      if (yych <= ',')
+      } else {
+        if (yych <= ',')
+          goto yy2;
+        if (yych <= '.')
+          goto yy13;
         goto yy2;
-      goto yy13;
+      }
     } else {
       if (yych <= 'Z') {
+        if (yych <= '9')
+          goto yy13;
         if (yych <= '@')
           goto yy2;
         goto yy13;
@@ -153,16 +153,14 @@
   yy13:
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
-          goto yy6;
-        goto yy16;
-      } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych <= '.')
+      if (yych <= ',') {
+        if (yych == '+')
           goto yy16;
         goto yy6;
+      } else {
+        if (yych == '/')
+          goto yy6;
+        goto yy16;
       }
     } else {
       if (yych <= 'Z') {
@@ -185,13 +183,11 @@
   yy16:
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -209,13 +205,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -233,13 +227,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -257,13 +249,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -281,13 +271,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -305,13 +293,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -329,13 +315,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -353,13 +337,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -377,13 +359,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -401,13 +381,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -425,13 +403,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -449,13 +425,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -473,13 +447,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -497,13 +469,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -521,13 +491,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -545,13 +513,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -569,13 +535,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -593,13 +557,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -617,13 +579,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -641,13 +601,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -665,13 +623,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -689,13 +645,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -713,13 +667,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -737,13 +689,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -761,13 +711,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -785,13 +733,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -809,13 +755,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -833,13 +777,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -857,13 +799,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy6;
       } else {
-        if (yych <= ',')
-          goto yy6;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy6;
       }
     } else {
@@ -915,38 +855,30 @@
         0,   0,   0,   0,
     };
     yych = *(marker = p);
-    if (yych <= 0x7F) {
-      if (yych <= ' ') {
+    if (yych <= 0xC1) {
+      if (yych <= 'Z') {
         if (yych == '\n')
           goto yy48;
-        if (yych <= 0x1F)
+        if (yych <= '@')
           goto yy50;
         goto yy49;
       } else {
-        if (yych <= 'Z') {
-          if (yych <= '@')
-            goto yy50;
+        if (yych <= '`')
+          goto yy50;
+        if (yych <= 'z')
           goto yy49;
-        } else {
-          if (yych <= '`')
-            goto yy50;
-          if (yych <= 'z')
-            goto yy49;
+        if (yych <= 0x7F)
           goto yy50;
-        }
       }
     } else {
       if (yych <= 0xED) {
-        if (yych <= 0xDF) {
-          if (yych >= 0xC2)
-            goto yy51;
-        } else {
-          if (yych <= 0xE0)
-            goto yy53;
-          if (yych <= 0xEC)
-            goto yy54;
-          goto yy58;
-        }
+        if (yych <= 0xDF)
+          goto yy51;
+        if (yych <= 0xE0)
+          goto yy53;
+        if (yych <= 0xEC)
+          goto yy54;
+        goto yy58;
       } else {
         if (yych <= 0xF0) {
           if (yych <= 0xEF)
@@ -963,14 +895,22 @@
   yy48 : { return 0; }
   yy49:
     yych = *(marker = ++p);
-    if (yych <= '.') {
-      if (yych == '+')
+    if (yych <= '/') {
+      if (yych <= '+') {
+        if (yych <= '*')
+          goto yy48;
         goto yy59;
-      if (yych <= ',')
+      } else {
+        if (yych <= ',')
+          goto yy48;
+        if (yych <= '.')
+          goto yy59;
         goto yy48;
-      goto yy59;
+      }
     } else {
       if (yych <= 'Z') {
+        if (yych <= '9')
+          goto yy59;
         if (yych <= '@')
           goto yy48;
         goto yy59;
@@ -1039,16 +979,14 @@
   yy59:
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
-          goto yy52;
-        goto yy62;
-      } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych <= '.')
+      if (yych <= ',') {
+        if (yych == '+')
           goto yy62;
         goto yy52;
+      } else {
+        if (yych == '/')
+          goto yy52;
+        goto yy62;
       }
     } else {
       if (yych <= 'Z') {
@@ -1103,13 +1041,11 @@
   yy62:
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1127,13 +1063,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1151,13 +1085,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1175,13 +1107,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1199,13 +1129,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1223,13 +1151,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1247,13 +1173,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1271,13 +1195,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1295,13 +1217,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1319,13 +1239,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1343,13 +1261,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1367,13 +1283,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1391,13 +1305,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1415,13 +1327,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1439,13 +1349,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1463,13 +1371,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1487,13 +1393,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1511,13 +1415,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1535,13 +1437,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1559,13 +1459,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1583,13 +1481,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1607,13 +1503,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1631,13 +1525,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1655,13 +1547,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1679,13 +1569,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1703,13 +1591,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1727,13 +1613,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1751,13 +1635,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -1775,13 +1657,11 @@
     }
     yych = *++p;
     if (yych <= '9') {
-      if (yych <= '+') {
-        if (yych <= '*')
+      if (yych <= ',') {
+        if (yych != '+')
           goto yy52;
       } else {
-        if (yych <= ',')
-          goto yy52;
-        if (yych >= '/')
+        if (yych == '/')
           goto yy52;
       }
     } else {
@@ -8258,45 +8138,37 @@
     unsigned char yych;
     static const unsigned char yybm[] = {
         /* table 1 .. 8: 0 */
-        0,   230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199,
+        0, 230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199, 230,
         230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
-        230, 230, 230, 230, 199, 230, 70,  230, 230, 230, 230, 134, 230, 230,
-        230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254,
-        254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254,
+        230, 230, 230, 199, 230, 70, 230, 230, 230, 230, 134, 230, 230, 230,
+        230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254, 254,
+        254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254, 254,
         254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
-        254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254,
+        254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254, 254,
         254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
-        254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230,
-        230, 230, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,
+        254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230, 230,
+        230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         /* table 9 .. 11: 256 */
-        0,   160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
         160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
         160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
-        160, 160, 160, 32,  160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
-        160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224,
+        160, 160, 32, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224, 224,
         224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
-        224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160,
+        224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160, 160,
         160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
         160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
-        160, 160, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-        0,   0,   0,   0,
+        160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     };
     yych = *(marker = p);
     if (yych <= '`') {
@@ -10582,7 +10454,9 @@
     yych = *++p;
     if (yych <= 'S') {
       if (yych <= 'D') {
-        if (yych == '1')
+        if (yych <= '0')
+          goto yy525;
+        if (yych <= '6')
           goto yy564;
         goto yy525;
       } else {
@@ -18464,18 +18338,18 @@
   {
     unsigned char yych;
     static const unsigned char yybm[] = {
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 32, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  32, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 64, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0,
     };
     yych = *(marker = p);
     if (yych <= 0xC1) {
@@ -18520,30 +18394,34 @@
       goto yy1201;
     }
     if (yych <= '\f') {
-      if (yych == '\n')
-        goto yy1199;
+      if (yych <= 0x08)
+        goto yy1179;
+      if (yych <= '\n')
+        goto yy1198;
       goto yy1179;
     } else {
       if (yych <= '\r')
-        goto yy1199;
+        goto yy1198;
       if (yych == ' ')
-        goto yy1197;
+        goto yy1198;
       goto yy1179;
     }
   yy1181:
     yych = *(marker = ++p);
-    if (yybm[0 + yych] & 32) {
-      goto yy1191;
+    if (yybm[0 + yych] & 64) {
+      goto yy1195;
     }
     if (yych <= '\f') {
-      if (yych == '\n')
-        goto yy1193;
+      if (yych <= 0x08)
+        goto yy1179;
+      if (yych <= '\n')
+        goto yy1192;
       goto yy1179;
     } else {
       if (yych <= '\r')
-        goto yy1193;
-      if (yych == '-')
-        goto yy1195;
+        goto yy1192;
+      if (yych == ' ')
+        goto yy1192;
       goto yy1179;
     }
   yy1182:
@@ -18603,10 +18481,13 @@
   yy1191:
     ++p;
     yych = *p;
+  yy1192:
     if (yybm[0 + yych] & 32) {
       goto yy1191;
     }
-    if (yych == '\n')
+    if (yych <= 0x08)
+      goto yy1184;
+    if (yych <= '\n')
       goto yy1193;
     if (yych != '\r')
       goto yy1184;
@@ -18620,7 +18501,9 @@
       goto yy1191;
     }
     if (yych <= '\f') {
-      if (yych == '\n')
+      if (yych <= 0x08)
+        goto yy1184;
+      if (yych <= '\n')
         goto yy1193;
       goto yy1184;
     } else {
@@ -18633,9 +18516,14 @@
   yy1197:
     ++p;
     yych = *p;
+  yy1198:
     if (yych <= '\f') {
-      if (yych != '\n')
+      if (yych <= 0x08)
         goto yy1184;
+      if (yych <= '\t')
+        goto yy1197;
+      if (yych >= '\v')
+        goto yy1184;
     } else {
       if (yych <= '\r')
         goto yy1199;
@@ -18653,7 +18541,11 @@
       goto yy1201;
     }
     if (yych <= '\f') {
-      if (yych == '\n')
+      if (yych <= 0x08)
+        goto yy1184;
+      if (yych <= '\t')
+        goto yy1197;
+      if (yych <= '\n')
         goto yy1199;
       goto yy1184;
     } else {
diff --git a/cmark.cabal b/cmark.cabal
--- a/cmark.cabal
+++ b/cmark.cabal
@@ -1,5 +1,5 @@
 name:                cmark
-version:             0.5.3.1
+version:             0.5.4
 synopsis:            Fast, accurate CommonMark (Markdown) parser and renderer
 description:
   This package provides Haskell bindings for
@@ -9,7 +9,7 @@
   libcmark (0.26.0) and does not require prior installation of the
   C library.
 
-homepage:            https://github.com/jgm/commonmark-hs
+homepage:            https://github.com/jgm/cmark-hs
 license:             BSD3
 license-file:        LICENSE
 author:              John MacFarlane
@@ -104,6 +104,6 @@
   type:           exitcode-stdio-1.0
   main-is:        test-cmark.hs
   hs-source-dirs: test
-  build-depends:  base, cmark, text, HUnit >= 1.2 && < 1.4
+  build-depends:  base, cmark, text, HUnit >= 1.2 && < 1.6
   ghc-options:    -Wall -fno-warn-unused-do-bind -threaded
   default-language: Haskell98
