]> granicus.if.org Git - multimarkdown/commitdiff
ADDED: Prototype support for Glossaries
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Thu, 2 Mar 2017 21:49:41 +0000 (16:49 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Thu, 2 Mar 2017 21:49:41 +0000 (16:49 -0500)
21 files changed:
Sources/libMultiMarkdown/html.c
Sources/libMultiMarkdown/html.h
Sources/libMultiMarkdown/include/libMultiMarkdown.h
Sources/libMultiMarkdown/latex.c
Sources/libMultiMarkdown/lexer.c
Sources/libMultiMarkdown/lexer.re
Sources/libMultiMarkdown/mmd.c
Sources/libMultiMarkdown/mmd.h
Sources/libMultiMarkdown/parser.c
Sources/libMultiMarkdown/parser.h
Sources/libMultiMarkdown/parser.out
Sources/libMultiMarkdown/parser.y
Sources/libMultiMarkdown/scanners.c
Sources/libMultiMarkdown/scanners.h
Sources/libMultiMarkdown/scanners.re
Sources/libMultiMarkdown/writer.c
Sources/libMultiMarkdown/writer.h
tests/MMD6Tests/Glossaries.html [new file with mode: 0644]
tests/MMD6Tests/Glossaries.htmlc [new file with mode: 0644]
tests/MMD6Tests/Glossaries.tex [new file with mode: 0644]
tests/MMD6Tests/Glossaries.text [new file with mode: 0644]

index 527b1a5a8bd35d02381475b04bba96ab87d66010..6c63fade3da4e9edc3625347615b24e3a28f67fc 100644 (file)
@@ -304,6 +304,7 @@ void mmd_export_token_html(DString * out, const char * source, token * t, size_t
        char *  temp_char2      = NULL;
        bool    temp_bool       = 0;
        token * temp_token      = NULL;
+       footnote * temp_note = NULL;
 
        switch (t->type) {
                case AMPERSAND:
@@ -506,6 +507,7 @@ void mmd_export_token_html(DString * out, const char * source, token * t, size_t
                case BLOCK_PARA:
                case BLOCK_DEF_CITATION:
                case BLOCK_DEF_FOOTNOTE:
+               case BLOCK_DEF_GLOSSARY:
                        pad(out, 2, scratch);
        
                        if (!scratch->list_is_tight)
@@ -513,6 +515,14 @@ void mmd_export_token_html(DString * out, const char * source, token * t, size_t
 
                        mmd_export_token_tree_html(out, source, t->child, offset, scratch);
 
+                       if (scratch->citation_being_printed) {
+                               scratch->footnote_para_counter--;
+
+                               if (scratch->footnote_para_counter == 0) {
+                                       printf(" <a href=\"#cnref:%d\" title=\"%s\" class=\"reversecitation\">&#160;&#8617;</a>", scratch->citation_being_printed, LC("return to body"));
+                               }
+                       }
+
                        if (scratch->footnote_being_printed) {
                                scratch->footnote_para_counter--;
 
@@ -521,11 +531,11 @@ void mmd_export_token_html(DString * out, const char * source, token * t, size_t
                                }
                        }
 
-                       if (scratch->citation_being_printed) {
+                       if (scratch->glossary_being_printed) {
                                scratch->footnote_para_counter--;
 
                                if (scratch->footnote_para_counter == 0) {
-                                       printf(" <a href=\"#cnref:%d\" title=\"%s\" class=\"reversecitation\">&#160;&#8617;</a>", scratch->citation_being_printed, LC("return to body"));
+                                       printf(" <a href=\"#gnref:%d\" title=\"%s\" class=\"reverseglossary\">&#160;&#8617;</a>", scratch->glossary_being_printed, LC("return to body"));
                                }
                        }
 
@@ -745,6 +755,9 @@ void mmd_export_token_html(DString * out, const char * source, token * t, size_t
                case BRACKET_FOOTNOTE_LEFT:
                        print_const("[^");
                        break;
+               case BRACKET_GLOSSARY_LEFT:
+                       print_const("[?");
+                       break;
                case BRACKET_IMAGE_LEFT:
                        print_const("![");
                        break;
@@ -1086,6 +1099,41 @@ void mmd_export_token_html(DString * out, const char * source, token * t, size_t
                                mmd_export_token_tree_html(out, source, t->child, offset, scratch);
                        }
                        break;
+               case PAIR_BRACKET_GLOSSARY:
+                       if (scratch->extensions & EXT_NOTES) {
+                               glossary_from_bracket(source, scratch, t, &temp_short);
+
+                               if (temp_short == -1) {
+                                       print_const("[?");
+                                       mmd_export_token_tree_html(out, source, t->child, offset, scratch);
+                                       print_const("]");
+                                       break;
+                               }
+
+                               temp_note = stack_peek_index(scratch->used_glossaries, temp_short - 1);
+
+                               if (temp_short < scratch->used_glossaries->size) {
+                                       // Re-using previous glossary
+                                       printf("<a href=\"#gn:%d\" title=\"%s\" class=\"glossary\">",
+                                                  temp_short, LC("see glossary"));
+
+                                       mmd_print_string_html(out, temp_note->clean_text, false);
+
+                                       print_const("</a>");
+                               } else {
+                                       // This is a new glossary
+                                       printf("<a href=\"#gn:%d\" id=\"gnref:%d\" title=\"%s\" class=\"glossary\">",
+                                                  temp_short, temp_short, LC("see glossary"));
+
+                                       mmd_print_string_html(out, temp_note->clean_text, false);
+
+                                       print_const("</a>");
+                               }
+                       } else {
+                               // Footnotes disabled
+                               mmd_export_token_tree_html(out, source, t->child, offset, scratch);
+                       }
+                       break;
                case PAIR_BRACKET_VARIABLE:
                        temp_char = text_inside_pair(source, t);
                        temp_char2 = extract_metadata(scratch, temp_char);
@@ -1540,6 +1588,59 @@ void mmd_export_footnote_list_html(DString * out, const char * source, scratch_p
 }
 
 
+void mmd_export_glossary_list_html(DString * out, const char * source, scratch_pad * scratch) {
+       if (scratch->used_glossaries->size > 0) {
+               footnote * note;
+               token * content;
+
+               pad(out, 2, scratch);
+               print_const("<div class=\"glossary\">\n<hr />\n<ol>");
+               scratch->padded = 0;
+
+               for (int i = 0; i < scratch->used_glossaries->size; ++i)
+               {
+                       // Export glossary
+                       pad(out, 2, scratch);
+
+                       printf("<li id=\"gn:%d\">\n", i + 1);
+                       scratch->padded = 6;
+
+                       note = stack_peek_index(scratch->used_glossaries, i);
+                       content = note->content;
+
+                       // Print term
+                       mmd_print_string_html(out, note->clean_text, false);
+                       print_const(": ");
+
+                       // Print contents
+                       scratch->footnote_para_counter = 0;
+
+                       // We need to know which block is the last one in the footnote
+                       while(content) {
+                               if (content->type == BLOCK_PARA)
+                                       scratch->footnote_para_counter++;
+                               
+                               content = content->next;
+                       }
+
+                       content = note->content;
+                       scratch->glossary_being_printed = i + 1;
+
+                       mmd_export_token_tree_html(out, source, content, 0, scratch);
+
+                       pad(out, 1, scratch);
+                       printf("</li>");
+                       scratch->padded = 0;
+               }
+
+               pad(out, 2, scratch);
+               print_const("</ol>\n</div>");
+               scratch->padded = 0;
+               scratch->glossary_being_printed = 0;
+       }
+}
+
+
 void mmd_export_citation_list_html(DString * out, const char * source, scratch_pad * scratch) {
        if (scratch->used_citations->size > 0) {
                footnote * note;
index 281d7cdc5158099f8fd88dffc6a3e68bfbb02394..737b3fabcb463ca43868b4a4cf15fe58e5ce80a8 100644 (file)
@@ -69,6 +69,7 @@ void mmd_export_token_tree_html_raw(DString * out, const char * source, token *
 
 void mmd_export_citation_list_html(DString * out, const char * source, scratch_pad * scratch);
 void mmd_export_footnote_list_html(DString * out, const char * source, scratch_pad * scratch);
+void mmd_export_glossary_list_html(DString * out, const char * source, scratch_pad * scratch);
 
 void mmd_start_complete_html(DString * out, const char * source, scratch_pad * scratch);
 void mmd_end_complete_html(DString * out, const char * source, scratch_pad * scratch);
index 9e68df5431159be55b7d36d2e51bfc82ad8226f5..bc7248c11fd79ae181a8f758b040580af77cf909 100644 (file)
@@ -124,6 +124,7 @@ enum token_types {
        BLOCK_DEFINITION,
        BLOCK_DEF_ABBREVIATION,
        BLOCK_DEF_CITATION,
+       BLOCK_DEF_GLOSSARY,
        BLOCK_DEF_FOOTNOTE,
        BLOCK_DEF_LINK,
        BLOCK_EMPTY,
@@ -179,6 +180,7 @@ enum token_types {
        PAIR_BRACKET,
        PAIR_BRACKET_ABBREVIATION,
        PAIR_BRACKET_FOOTNOTE,
+       PAIR_BRACKET_GLOSSARY,
        PAIR_BRACKET_CITATION,
        PAIR_BRACKET_IMAGE,
        PAIR_BRACKET_VARIABLE,
@@ -203,6 +205,7 @@ enum token_types {
        BRACKET_RIGHT,
        BRACKET_ABBREVIATION_LEFT,
        BRACKET_FOOTNOTE_LEFT,
+       BRACKET_GLOSSARY_LEFT,
        BRACKET_CITATION_LEFT,
        BRACKET_IMAGE_LEFT,
        BRACKET_VARIABLE_LEFT,
index 069b7bced25f0540395e4909cceea74482a2d61f..9633609eb72e1a0549d38aab8efdf57bc6793c13 100644 (file)
@@ -376,6 +376,7 @@ void mmd_export_token_latex(DString * out, const char * source, token * t, scrat
 
        short   temp_short;
        short   temp_short2;
+       short   temp_short3;
        link *  temp_link       = NULL;
        char *  temp_char       = NULL;
        char *  temp_char2      = NULL;
@@ -782,6 +783,9 @@ void mmd_export_token_latex(DString * out, const char * source, token * t, scrat
                case BRACKET_FOOTNOTE_LEFT:
                        print_const("[^");
                        break;
+               case BRACKET_GLOSSARY_LEFT:
+                       print_const("[?");
+                       break;
                case BRACKET_IMAGE_LEFT:
                        print_const("![");
                        break;
@@ -1101,16 +1105,68 @@ void mmd_export_token_latex(DString * out, const char * source, token * t, scrat
 
                                if (temp_short < scratch->used_footnotes->size) {
                                        // Re-using previous footnote
-                                       printf("\\footnote{reuse");
+                                       print("\\footnote{reuse");
 
-                                       printf("}");
+                                       print("}");
                                } else {
                                        // This is a new footnote
-                                       printf("\\footnote{");
+                                       print("\\footnote{");
                                        temp_note = stack_peek_index(scratch->used_footnotes, temp_short - 1);
 
                                        mmd_export_token_tree_latex(out, source, temp_note->content, scratch);
-                                       printf("}");
+                                       print("}");
+                               }
+                       } else {
+                               // Footnotes disabled
+                               mmd_export_token_tree_latex(out, source, t->child, scratch);
+                       }
+                       break;
+               case PAIR_BRACKET_GLOSSARY:
+                       if (scratch->extensions & EXT_NOTES) {
+                               // See whether we create an inline glossary
+                               temp_short2 = scratch->inline_glossaries_to_free->size;
+                               glossary_from_bracket(source, scratch, t, &temp_short);
+                               temp_short3 = scratch->inline_glossaries_to_free->size;
+
+                               if (temp_short == -1) {
+                                       print_const("[?");
+                                       mmd_export_token_tree_latex(out, source, t->child, scratch);
+                                       print_const("]");
+                                       break;
+                               }
+
+                               if (temp_short2 != temp_short3)
+                                       temp_bool = true;       // This is an inline
+                               else
+                                       temp_bool = false;
+
+                               temp_note = stack_peek_index(scratch->used_glossaries, temp_short - 1);
+
+                               if (temp_short < scratch->used_glossaries->size) {
+                                       // Re-using previous glossary
+                                       print("\\gls{");
+                                       print(temp_note->label_text);
+                                       print("}");
+                               } else {
+                                       // This is a new glossary
+
+                                       if (temp_bool) {
+                                               // This is an inline glossary entry
+                                               print_const("\\newglossaryentry{");
+                                               print(temp_note->label_text);
+
+                                               print_const("}{name=");
+                                               print(temp_note->clean_text);
+
+                                               print_const(", description={");
+                                               
+                                               // We skip over temp_note->content, since that is the term in use
+                                               mmd_export_token_tree_latex(out, source, temp_note->content, scratch);
+                                               print_const("}}");
+                                       }
+                                       print_const("\\gls{");
+                                       print(temp_note->label_text);
+                                       print_const("}");
                                }
                        } else {
                                // Footnotes disabled
@@ -1546,6 +1602,25 @@ void mmd_export_token_tree_latex_tt(DString * out, const char * source, token *
 }
 
 
+void mmd_define_glossaries_latex(DString * out, const char * source, scratch_pad * scratch) {
+       // Iterate through glossary definitions
+       fn_holder * f, * f_tmp;
+
+       HASH_ITER(hh, scratch->glossary_hash, f, f_tmp) {
+               // Add this glossary definition
+               print_const("\\longnewglossaryentry{");
+               print(f->note->label_text);
+
+               print_const("}{name=");
+               print(f->note->clean_text);
+               print_const("}{");
+
+               mmd_export_token_tree_latex(out, source, f->note->content, scratch);
+               print_const("}\n\n");
+       }
+}
+
+
 void mmd_start_complete_latex(DString * out, const char * source, scratch_pad * scratch) {
        // Iterate over metadata keys
        meta * m;
@@ -1616,6 +1691,9 @@ void mmd_start_complete_latex(DString * out, const char * source, scratch_pad *
                }
        }
 
+       // Define glossaries in preamble for more flexibility
+       mmd_define_glossaries_latex(out, source, scratch);
+
        m = extract_meta_from_stack(scratch, "latexbegin");
        if (m) {
                printf("\\input{%s}\n", m->value);
index f4ea5dff9770d4bb5fcf0377e786c659d819443a..f668de9d39a068981c6c4b1bdcaa6574576a0563 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.14.3 on Wed Feb 15 19:09:41 2017 */
+/* Generated by re2c 0.14.3 on Thu Mar  2 09:54:28 2017 */
 /**
 
        MultiMarkdown 6 -- Lightweight markup processor to produce HTML, LaTeX, and more.
@@ -132,12 +132,12 @@ yy2:
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
-       case '+':       goto yy265;
-       case '-':       goto yy264;
-       case '=':       goto yy261;
-       case '>':       goto yy263;
-       case '{':       goto yy259;
-       case '~':       goto yy262;
+       case '+':       goto yy267;
+       case '-':       goto yy266;
+       case '=':       goto yy263;
+       case '>':       goto yy265;
+       case '{':       goto yy261;
+       case '~':       goto yy264;
        default:        goto yy3;
        }
 yy3:
@@ -146,7 +146,7 @@ yy4:
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
-       case '+':       goto yy256;
+       case '+':       goto yy258;
        default:        goto yy5;
        }
 yy5:
@@ -154,7 +154,7 @@ yy5:
 yy6:
        ++YYCURSOR;
        switch ((yych = *YYCURSOR)) {
-       case '-':       goto yy250;
+       case '-':       goto yy252;
        default:        goto yy7;
        }
 yy7:
@@ -163,7 +163,7 @@ yy8:
        yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
-       case '<':       goto yy247;
+       case '<':       goto yy249;
        default:        goto yy9;
        }
 yy9:
@@ -172,8 +172,8 @@ yy10:
        yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
-       case '>':       goto yy243;
-       case '~':       goto yy242;
+       case '>':       goto yy245;
+       case '~':       goto yy244;
        default:        goto yy11;
        }
 yy11:
@@ -182,7 +182,7 @@ yy12:
        yyaccept = 4;
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
-       case '=':       goto yy239;
+       case '=':       goto yy241;
        default:        goto yy13;
        }
 yy13:
@@ -192,7 +192,8 @@ yy14:
        switch ((yych = *YYCURSOR)) {
        case '#':       goto yy235;
        case '%':       goto yy233;
-       case '^':       goto yy237;
+       case '?':       goto yy237;
+       case '^':       goto yy239;
        default:        goto yy15;
        }
 yy15:
@@ -432,7 +433,7 @@ yy70:
        case 7:         goto yy49;
        case 8:         goto yy127;
        case 9:         goto yy215;
-       default:        goto yy260;
+       default:        goto yy262;
        }
 yy71:
        YYCTXMARKER = YYCURSOR + 1;
@@ -946,140 +947,143 @@ yy235:
        { return BRACKET_CITATION_LEFT; }
 yy237:
        ++YYCURSOR;
-       { return BRACKET_FOOTNOTE_LEFT; }
+       { return BRACKET_GLOSSARY_LEFT; }
 yy239:
+       ++YYCURSOR;
+       { return BRACKET_FOOTNOTE_LEFT; }
+yy241:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '}':       goto yy240;
+       case '}':       goto yy242;
        default:        goto yy70;
        }
-yy240:
+yy242:
        ++YYCURSOR;
        { return CRITIC_HI_CLOSE; }
-yy242:
+yy244:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '}':       goto yy245;
+       case '}':       goto yy247;
        default:        goto yy70;
        }
-yy243:
+yy245:
        ++YYCURSOR;
        { return CRITIC_SUB_DIV; }
-yy245:
+yy247:
        ++YYCURSOR;
        { return CRITIC_SUB_CLOSE; }
-yy247:
+yy249:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '}':       goto yy248;
+       case '}':       goto yy250;
        default:        goto yy70;
        }
-yy248:
+yy250:
        ++YYCURSOR;
        { return CRITIC_COM_CLOSE; }
-yy250:
+yy252:
        ++YYCURSOR;
        switch ((yych = *YYCURSOR)) {
-       case '-':       goto yy254;
-       case '}':       goto yy252;
-       default:        goto yy251;
+       case '-':       goto yy256;
+       case '}':       goto yy254;
+       default:        goto yy253;
        }
-yy251:
+yy253:
        { return DASH_N; }
-yy252:
+yy254:
        ++YYCURSOR;
        { return CRITIC_DEL_CLOSE; }
-yy254:
+yy256:
        ++YYCURSOR;
        { return DASH_M; }
-yy256:
+yy258:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '}':       goto yy257;
+       case '}':       goto yy259;
        default:        goto yy70;
        }
-yy257:
+yy259:
        ++YYCURSOR;
        { return CRITIC_ADD_CLOSE; }
-yy259:
+yy261:
        yyaccept = 10;
        yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
-       case 'T':       goto yy276;
-       default:        goto yy260;
+       case 'T':       goto yy278;
+       default:        goto yy262;
        }
-yy260:
+yy262:
        { return BRACE_DOUBLE_LEFT; }
-yy261:
+yy263:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '=':       goto yy274;
+       case '=':       goto yy276;
        default:        goto yy70;
        }
-yy262:
+yy264:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '~':       goto yy272;
+       case '~':       goto yy274;
        default:        goto yy70;
        }
-yy263:
+yy265:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '>':       goto yy270;
+       case '>':       goto yy272;
        default:        goto yy70;
        }
-yy264:
+yy266:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '-':       goto yy268;
+       case '-':       goto yy270;
        default:        goto yy70;
        }
-yy265:
+yy267:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '+':       goto yy266;
+       case '+':       goto yy268;
        default:        goto yy70;
        }
-yy266:
+yy268:
        ++YYCURSOR;
        { return CRITIC_ADD_OPEN; }
-yy268:
+yy270:
        ++YYCURSOR;
        { return CRITIC_DEL_OPEN; }
-yy270:
+yy272:
        ++YYCURSOR;
        { return CRITIC_COM_OPEN; }
-yy272:
+yy274:
        ++YYCURSOR;
        { return CRITIC_SUB_OPEN; }
-yy274:
+yy276:
        ++YYCURSOR;
        { return CRITIC_HI_OPEN; }
-yy276:
+yy278:
        yych = *++YYCURSOR;
        switch (yych) {
-       case 'O':       goto yy277;
+       case 'O':       goto yy279;
        default:        goto yy70;
        }
-yy277:
+yy279:
        yych = *++YYCURSOR;
        switch (yych) {
-       case 'C':       goto yy278;
+       case 'C':       goto yy280;
        default:        goto yy70;
        }
-yy278:
+yy280:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '}':       goto yy279;
+       case '}':       goto yy281;
        default:        goto yy70;
        }
-yy279:
+yy281:
        yych = *++YYCURSOR;
        switch (yych) {
-       case '}':       goto yy280;
+       case '}':       goto yy282;
        default:        goto yy70;
        }
-yy280:
+yy282:
        ++YYCURSOR;
        { return TOC; }
 }
index 36684dc4e99dead125cebec2b46206eb11179181..4ab32a1dac2142456ec5b87d31ab67d901afc928 100644 (file)
@@ -115,6 +115,7 @@ int scan(Scanner * s, const char * stop) {
 
                "!["                                                    { return BRACKET_IMAGE_LEFT; }
                "[^"                                                    { return BRACKET_FOOTNOTE_LEFT; }
+               "[?"                                                    { return BRACKET_GLOSSARY_LEFT; }
                "[#"                                                    { return BRACKET_CITATION_LEFT; }
                "[%"                                                    { return BRACKET_VARIABLE_LEFT; }
 
index 6f26a947ec735d3a643f60bb73e5891ca265ac07..4da3ad2f31f8538a4245a6a00a1fde2e55f51267 100644 (file)
@@ -103,6 +103,7 @@ mmd_engine * mmd_engine_create(DString * d, unsigned long extensions) {
                e->citation_stack = stack_new(0);
                e->definition_stack = stack_new(0);
                e->footnote_stack = stack_new(0);
+               e->glossary_stack = stack_new(0);
                e->header_stack = stack_new(0);
                e->link_stack = stack_new(0);
                e->metadata_stack = stack_new(0);
@@ -127,13 +128,15 @@ mmd_engine * mmd_engine_create(DString * d, unsigned long extensions) {
                if (extensions & EXT_NOTES) {
                        token_pair_engine_add_pairing(e->pairings2, BRACKET_CITATION_LEFT, BRACKET_RIGHT, PAIR_BRACKET_CITATION, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
                        token_pair_engine_add_pairing(e->pairings2, BRACKET_FOOTNOTE_LEFT, BRACKET_RIGHT, PAIR_BRACKET_FOOTNOTE, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
+                       token_pair_engine_add_pairing(e->pairings2, BRACKET_GLOSSARY_LEFT, BRACKET_RIGHT, PAIR_BRACKET_GLOSSARY, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
                } else {
                        token_pair_engine_add_pairing(e->pairings2, BRACKET_CITATION_LEFT, BRACKET_RIGHT, PAIR_BRACKET, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
                        token_pair_engine_add_pairing(e->pairings2, BRACKET_FOOTNOTE_LEFT, BRACKET_RIGHT, PAIR_BRACKET, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
+                       token_pair_engine_add_pairing(e->pairings2, BRACKET_GLOSSARY_LEFT, BRACKET_RIGHT, PAIR_BRACKET, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
                }
                
-               token_pair_engine_add_pairing(e->pairings2, BRACKET_VARIABLE_LEFT, BRACKET_RIGHT, PAIR_BRACKET_VARIABLE, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
                token_pair_engine_add_pairing(e->pairings2, BRACKET_ABBREVIATION_LEFT, BRACKET_RIGHT, PAIR_BRACKET_ABBREVIATION, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
+               token_pair_engine_add_pairing(e->pairings2, BRACKET_VARIABLE_LEFT, BRACKET_RIGHT, PAIR_BRACKET_VARIABLE, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
 
                token_pair_engine_add_pairing(e->pairings2, BRACKET_IMAGE_LEFT, BRACKET_RIGHT, PAIR_BRACKET_IMAGE, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
                token_pair_engine_add_pairing(e->pairings2, PAREN_LEFT, PAREN_RIGHT, PAIR_PAREN, PAIRING_ALLOW_EMPTY | PAIRING_PRUNE_MATCH);
@@ -232,17 +235,25 @@ void mmd_engine_free(mmd_engine * e, bool freeDString) {
        }
        stack_free(e->citation_stack);
 
+       // Footnotes need to be freed
+       while (e->footnote_stack->size) {
+               footnote_free(stack_pop(e->footnote_stack));
+       }
+       stack_free(e->footnote_stack);
+
+       // Glossaries need to be freed
+       while (e->glossary_stack->size) {
+               footnote_free(stack_pop(e->glossary_stack));
+       }
+       stack_free(e->glossary_stack);
+
+
        // Links need to be freed
        while (e->link_stack->size) {
                link_free(stack_pop(e->link_stack));
        }
        stack_free(e->link_stack);
 
-       // Footnotes need to be freed
-       while (e->footnote_stack->size) {
-               footnote_free(stack_pop(e->footnote_stack));
-       }
-       stack_free(e->footnote_stack);
 
        // Metadata needs to be freed
        while (e->metadata_stack->size) {
@@ -606,6 +617,15 @@ void mmd_assign_line_type(mmd_engine * e, token * line) {
                                line->type = (scan_len) ? LINE_DEF_LINK : LINE_PLAIN;
                        }
                        break;
+               case BRACKET_GLOSSARY_LEFT:
+                       if (e->extensions & EXT_NOTES) {
+                               scan_len = scan_ref_glossary(&source[line->start]);
+                               line->type = (scan_len) ? LINE_DEF_GLOSSARY : LINE_PLAIN;
+                       } else {
+                               scan_len = scan_ref_link_no_attributes(&source[line->start]);
+                               line->type = (scan_len) ? LINE_DEF_LINK : LINE_PLAIN;
+                       }
+                       break;
                case PIPE:
                        // If PIPE is first, save checking later and assign LINE_TABLE now
                        if (!(e->extensions & EXT_COMPATIBILITY)) {
@@ -917,6 +937,7 @@ void mmd_pair_tokens_in_block(token * block, token_pair_engine * e, stack * s) {
                case BLOCK_DEF_ABBREVIATION:
                case BLOCK_DEF_CITATION:
                case BLOCK_DEF_FOOTNOTE:
+               case BLOCK_DEF_GLOSSARY:
                case BLOCK_DEF_LINK:
                case BLOCK_H1:
                case BLOCK_H2:
@@ -1684,6 +1705,7 @@ void strip_line_tokens_from_block(mmd_engine * e, token * block) {
                        case LINE_DEF_ABBREVIATION:
                        case LINE_DEF_CITATION:
                        case LINE_DEF_FOOTNOTE:
+                       case LINE_DEF_GLOSSARY:
                        case LINE_DEF_LINK:
                        case LINE_EMPTY:
                        case LINE_LIST_BULLETED:
index 5d9da75b229cf4e7fc4fffbe7bb7fd4ddcc697e4..c32e5fc2f97aa9f4c247935f19490ef4089a9e5d 100644 (file)
@@ -80,8 +80,9 @@ struct mmd_engine {
        stack *                                 abbreviation_stack;
        stack *                                 citation_stack;
        stack *                                 definition_stack;
-       stack *                                 header_stack;
        stack *                                 footnote_stack;
+       stack *                                 glossary_stack;
+       stack *                                 header_stack;
        stack *                                 link_stack;
        stack *                                 metadata_stack;
 
index 08e3edaaa6f28fefbd8305b1b15b8b295fd23f85..1635e50c9652a7136b8d5d72b98fa32d9aa0fe56 100644 (file)
@@ -92,7 +92,7 @@
 #endif
 /************* Begin control #defines *****************************************/
 #define YYCODETYPE unsigned char
-#define YYNOCODE 83
+#define YYNOCODE 85
 #define YYACTIONTYPE unsigned short int
 #define ParseTOKENTYPE  token * 
 typedef union {
@@ -107,16 +107,16 @@ typedef union {
 #define ParseARG_FETCH  mmd_engine * engine  = yypParser->engine 
 #define ParseARG_STORE yypParser->engine  = engine 
 #define YYFALLBACK 1
-#define YYNSTATE             41
-#define YYNRULE              131
-#define YY_MAX_SHIFT         40
-#define YY_MIN_SHIFTREDUCE   133
-#define YY_MAX_SHIFTREDUCE   263
-#define YY_MIN_REDUCE        264
-#define YY_MAX_REDUCE        394
-#define YY_ERROR_ACTION      395
-#define YY_ACCEPT_ACTION     396
-#define YY_NO_ACTION         397
+#define YYNSTATE             42
+#define YYNRULE              134
+#define YY_MAX_SHIFT         41
+#define YY_MIN_SHIFTREDUCE   136
+#define YY_MAX_SHIFTREDUCE   269
+#define YY_MIN_REDUCE        270
+#define YY_MAX_REDUCE        403
+#define YY_ERROR_ACTION      404
+#define YY_ACCEPT_ACTION     405
+#define YY_NO_ACTION         406
 /************* End control #defines *******************************************/
 
 /* Define the yytestcase() macro to be a no-op if is not already defined
@@ -188,90 +188,94 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (258)
+#define YY_ACTTAB_COUNT (278)
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */   396,    1,  135,   30,  145,  146,  147,  148,  149,   40,
- /*    10 */   151,   29,   27,   37,   35,   28,   13,  158,  159,  160,
- /*    20 */    39,  211,   12,   12,   27,  233,  220,  221,  262,   32,
- /*    30 */    32,   25,  258,   24,   23,  217,   37,   35,  262,    7,
- /*    40 */   186,   38,  258,   14,   14,  264,  142,  175,  182,   15,
- /*    50 */   262,  212,  220,  221,  258,  247,  136,  137,  138,  139,
- /*    60 */   140,  141,  225,    6,    5,    3,    2,   16,   34,   34,
- /*    70 */   143,  231,    4,  233,  235,  238,  241,  236,  239,  242,
- /*    80 */   253,  142,  220,  221,   15,  262,  179,  220,  221,  258,
- /*    90 */   247,  136,  137,  138,  139,  140,  141,  225,    6,    5,
- /*   100 */     3,    2,   16,  193,   21,  143,  231,    4,  233,  235,
- /*   110 */   238,  241,  236,  239,  242,  253,  134,   30,  145,  146,
- /*   120 */   147,  148,  149,   40,  151,   29,   27,   37,   35,   28,
- /*   130 */    13,  158,  159,  160,  217,  245,  246,   39,   27,  243,
- /*   140 */   214,   31,   31,   32,   32,   25,  192,   24,   23,  204,
- /*   150 */    37,   35,  167,    7,  191,   38,  233,   14,   14,   33,
- /*   160 */    33,  244,  187,  189,  185,  188,  190,  245,  246,   26,
- /*   170 */    26,  243,    8,   39,    8,   12,   12,   36,   36,  161,
- /*   180 */     9,    9,   17,   17,  162,  248,  169,  169,  227,  249,
- /*   190 */    26,  255,  172,  244,  183,  180,  181,  184,   26,  226,
- /*   200 */     4,    9,    9,   17,   17,    5,  199,  168,  168,    9,
- /*   210 */     9,   17,   17,  245,  246,  173,  173,  243,   26,    6,
- /*   220 */   254,  209,  194,   26,  210,  210,  206,  207,  175,   10,
- /*   230 */    10,   19,   19,   26,  200,  161,   18,   18,  266,  244,
- /*   240 */   176,  177,  178,   26,   11,   11,   20,   20,  266,  195,
- /*   250 */   266,    4,  266,  266,  266,  161,   22,   22,
+ /*     0 */   405,    1,  138,   31,  148,  149,  150,  151,  152,  153,
+ /*    10 */    41,  155,   30,   28,   38,   36,   29,   14,  162,  163,
+ /*    20 */   164,   40,  216,   13,   13,   28,  239,  225,  226,  268,
+ /*    30 */    33,   33,   26,  264,   25,   24,   40,   38,   36,  219,
+ /*    40 */     8,  222,   39,  191,   15,   15,  270,  145,  268,  180,
+ /*    50 */    16,  268,  264,  225,  226,  264,  253,  139,  140,  141,
+ /*    60 */   142,  143,  144,  230,    7,    6,  237,    4,    3,    2,
+ /*    70 */    17,   27,  217,  146,    5,  239,  241,  244,  247,  242,
+ /*    80 */   245,  248,  259,  145,  222,  166,   16,  268,  187,  225,
+ /*    90 */   226,  264,  253,  139,  140,  141,  142,  143,  144,  230,
+ /*   100 */     7,    6,  237,    4,    3,    2,   17,  239,  261,  146,
+ /*   110 */     5,  239,  241,  244,  247,  242,  245,  248,  259,  137,
+ /*   120 */    31,  148,  149,  150,  151,  152,  153,   41,  155,   30,
+ /*   130 */    28,   38,   36,   29,   14,  162,  163,  164,  260,  251,
+ /*   140 */   252,  184,   28,  249,   35,   35,  254,   33,   33,   26,
+ /*   150 */   255,   25,   24,   22,   38,   36,  214,    8,  197,   39,
+ /*   160 */   215,   15,   15,  209,  211,  212,  250,  192,  194,  190,
+ /*   170 */   193,  195,  251,  252,   27,  196,  249,    9,   40,    9,
+ /*   180 */    13,   13,   32,   32,  171,   10,   10,   18,   18,  165,
+ /*   190 */     5,  174,  174,   34,   34,  232,   27,   37,   37,  250,
+ /*   200 */   188,  185,  186,  189,   27,    5,  231,   10,   10,   18,
+ /*   210 */    18,  177,    6,  173,  173,   10,   10,   18,   18,   27,
+ /*   220 */   204,  172,  172,    7,  251,  252,   27,  199,  249,   27,
+ /*   230 */    10,   10,   18,   18,   27,  215,  178,  178,  165,   19,
+ /*   240 */    19,  165,   23,   23,  180,   11,   11,   20,   20,   27,
+ /*   250 */   205,  250,  181,  182,  183,  225,  226,  272,  272,  272,
+ /*   260 */    12,   12,   21,   21,  272,  200,  272,  272,  272,  272,
+ /*   270 */   272,  272,  272,  272,  272,  272,  272,  198,
 };
 static const YYCODETYPE yy_lookahead[] = {
- /*     0 */    37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
- /*    10 */    47,   48,   49,   50,   51,   52,   53,   54,   55,   56,
- /*    20 */    78,   79,   80,   81,   61,   28,    7,    8,    5,   66,
- /*    30 */    67,   68,    9,   70,   71,    6,   73,   74,    5,   76,
- /*    40 */    69,   78,    9,   80,   81,    0,    1,   28,   69,    4,
- /*    50 */     5,   28,    7,    8,    9,   10,   11,   12,   13,   14,
- /*    60 */    15,   16,   17,   18,   19,   20,   21,   22,   66,   67,
- /*    70 */    25,   26,   27,   28,   29,   30,   31,   32,   33,   34,
- /*    80 */    35,    1,    7,    8,    4,    5,   69,    7,    8,    9,
- /*    90 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
- /*   100 */    20,   21,   22,   28,   61,   25,   26,   27,   28,   29,
- /*   110 */    30,   31,   32,   33,   34,   35,   39,   40,   41,   42,
- /*   120 */    43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
- /*   130 */    53,   54,   55,   56,    6,    2,    3,   78,   61,    6,
- /*   140 */    81,   57,   58,   66,   67,   68,   61,   70,   71,   75,
- /*   150 */    73,   74,   65,   76,   72,   78,   28,   80,   81,   57,
- /*   160 */    58,   28,   29,   30,   31,   32,   33,    2,    3,   46,
- /*   170 */    46,    6,   77,   78,   79,   80,   81,   57,   58,   58,
- /*   180 */    57,   58,   59,   60,   60,    6,   63,   64,    6,   10,
- /*   190 */    46,    6,   67,   28,   29,   30,   31,   32,   46,   17,
- /*   200 */    27,   57,   58,   59,   60,   19,   74,   63,   64,   57,
- /*   210 */    58,   59,   60,    2,    3,   63,   64,    6,   46,   18,
- /*   220 */    35,    5,   73,   46,    9,    9,    2,    3,   28,   57,
- /*   230 */    58,   59,   60,   46,   62,   58,   59,   60,   82,   28,
- /*   240 */    29,   30,   31,   46,   57,   58,   59,   60,   82,   62,
- /*   250 */    82,   27,   82,   82,   82,   58,   59,   60,
+ /*     0 */    38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+ /*    10 */    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
+ /*    20 */    58,   80,   81,   82,   83,   63,   29,    7,    8,    5,
+ /*    30 */    68,   69,   70,    9,   72,   73,   80,   75,   76,   83,
+ /*    40 */    78,    6,   80,   71,   82,   83,    0,    1,    5,   29,
+ /*    50 */     4,    5,    9,    7,    8,    9,   10,   11,   12,   13,
+ /*    60 */    14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
+ /*    70 */    24,   48,   29,   27,   28,   29,   30,   31,   32,   33,
+ /*    80 */    34,   35,   36,    1,    6,   62,    4,    5,   71,    7,
+ /*    90 */     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
+ /*   100 */    18,   19,   20,   21,   22,   23,   24,   29,    6,   27,
+ /*   110 */    28,   29,   30,   31,   32,   33,   34,   35,   36,   40,
+ /*   120 */    41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
+ /*   130 */    51,   52,   53,   54,   55,   56,   57,   58,   36,    2,
+ /*   140 */     3,   71,   63,    6,   68,   69,    6,   68,   69,   70,
+ /*   150 */    10,   72,   73,   63,   75,   76,    5,   78,   63,   80,
+ /*   160 */     9,   82,   83,   77,    2,    3,   29,   30,   31,   32,
+ /*   170 */    33,   34,    2,    3,   48,   74,    6,   79,   80,   81,
+ /*   180 */    82,   83,   59,   60,   67,   59,   60,   61,   62,   60,
+ /*   190 */    28,   65,   66,   59,   60,    6,   48,   59,   60,   29,
+ /*   200 */    30,   31,   32,   33,   48,   28,   17,   59,   60,   61,
+ /*   210 */    62,   69,   19,   65,   66,   59,   60,   61,   62,   48,
+ /*   220 */    76,   65,   66,   18,    2,    3,   48,   75,    6,   48,
+ /*   230 */    59,   60,   61,   62,   48,    9,   65,   66,   60,   61,
+ /*   240 */    62,   60,   61,   62,   29,   59,   60,   61,   62,   48,
+ /*   250 */    64,   29,   30,   31,   32,    7,    8,   84,   84,   84,
+ /*   260 */    59,   60,   61,   62,   84,   64,   84,   84,   84,   84,
+ /*   270 */    84,   84,   84,   84,   84,   84,   84,   29,
 };
-#define YY_SHIFT_USE_DFLT (258)
-#define YY_SHIFT_COUNT    (40)
+#define YY_SHIFT_USE_DFLT (278)
+#define YY_SHIFT_COUNT    (41)
 #define YY_SHIFT_MIN      (-3)
-#define YY_SHIFT_MAX      (224)
+#define YY_SHIFT_MAX      (248)
 static const short yy_shift_ofst[] = {
- /*     0 */    80,   45,  128,  128,  128,  128,  128,   33,   33,  128,
- /*    10 */   128,  128,   23,  224,   33,   29,   29,   -3,   -3,   -3,
- /*    20 */    -3,   29,   -3,  133,  165,  211,   19,   75,  185,  179,
- /*    30 */   182,   29,  173,   29,  173,  186,   29,  201,  216,  215,
- /*    40 */   200,
+ /*     0 */    82,   46,   78,   78,   78,   78,   78,   78,   24,   24,
+ /*    10 */    78,   78,   78,   43,  162,   24,   35,   35,   -3,   -3,
+ /*    20 */    -3,   -3,   35,   -3,  137,  170,  222,   20,  248,  102,
+ /*    30 */   140,  189,   35,  177,   35,  177,  193,   35,  205,  151,
+ /*    40 */   226,  215,
 };
-#define YY_REDUCE_USE_DFLT (-59)
-#define YY_REDUCE_COUNT (37)
-#define YY_REDUCE_MIN   (-58)
-#define YY_REDUCE_MAX   (197)
+#define YY_REDUCE_USE_DFLT (-60)
+#define YY_REDUCE_COUNT (38)
+#define YY_REDUCE_MIN   (-59)
+#define YY_REDUCE_MAX   (201)
 static const short yy_reduce_ofst[] = {
- /*     0 */   -37,   77,  123,  144,  152,  172,  187,   95,  -58,  177,
- /*    10 */   197,  197,   59,    2,   59,   84,  102,  124,  124,  124,
- /*    20 */   124,  120,  124,  -29,  -21,   17,   43,   85,   74,   82,
- /*    30 */    87,  121,  125,  121,  125,  132,  121,  149,
+ /*     0 */   -38,   79,  126,  148,  156,  171,  186,  201,   98,  -59,
+ /*    10 */   178,  181,  181,  -44,   76,  -44,  123,  134,   23,   23,
+ /*    20 */    23,   23,  138,   23,  -28,   17,   70,   90,   95,   86,
+ /*    30 */   101,  117,  129,  142,  129,  142,  144,  129,  152,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */   395,  395,  360,  359,  305,  334,  329,  388,  339,  353,
- /*    10 */   332,  327,  344,  288,  346,  387,  361,  355,  297,  333,
- /*    20 */   328,  295,  296,  371,  368,  365,  350,  284,  287,  283,
- /*    30 */   275,  336,  394,  301,  302,  286,  294,  285,  392,  392,
- /*    40 */   281,
+ /*     0 */   404,  404,  369,  368,  367,  313,  342,  337,  397,  347,
+ /*    10 */   361,  340,  335,  352,  295,  354,  396,  370,  363,  304,
+ /*    20 */   341,  336,  302,  303,  380,  377,  374,  358,  291,  294,
+ /*    30 */   290,  281,  344,  403,  309,  310,  293,  301,  292,  401,
+ /*    40 */   401,  288,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -311,8 +315,10 @@ static const YYCODETYPE yyFallback[] = {
    10,  /* LINE_BLOCKQUOTE => LINE_HTML */
    10,  /* LINE_LIST_BULLETED => LINE_HTML */
    10,  /* LINE_LIST_ENUMERATED => LINE_HTML */
+   10,  /* LINE_DEF_ABBREVIATION => LINE_HTML */
    10,  /* LINE_DEF_CITATION => LINE_HTML */
    10,  /* LINE_DEF_FOOTNOTE => LINE_HTML */
+   10,  /* LINE_DEF_GLOSSARY => LINE_HTML */
    10,  /* LINE_DEF_LINK => LINE_HTML */
    10,  /* LINE_FENCE_BACKTICK => LINE_HTML */
    10,  /* LINE_FENCE_BACKTICK_START => LINE_HTML */
@@ -406,22 +412,22 @@ static const char *const yyTokenName[] = {
   "LINE_INDENTED_SPACE",  "LINE_TABLE",    "LINE_HTML",     "LINE_ATX_1",  
   "LINE_ATX_2",    "LINE_ATX_3",    "LINE_ATX_4",    "LINE_ATX_5",  
   "LINE_ATX_6",    "LINE_BLOCKQUOTE",  "LINE_LIST_BULLETED",  "LINE_LIST_ENUMERATED",
-  "LINE_DEF_CITATION",  "LINE_DEF_FOOTNOTE",  "LINE_DEF_LINK",  "LINE_FENCE_BACKTICK",
-  "LINE_FENCE_BACKTICK_START",  "LINE_TOC",      "LINE_DEF_ABBREVIATION",  "LINE_DEFINITION",
-  "LINE_EMPTY",    "LINE_FENCE_BACKTICK_3",  "LINE_FENCE_BACKTICK_4",  "LINE_FENCE_BACKTICK_5",
-  "LINE_FENCE_BACKTICK_START_3",  "LINE_FENCE_BACKTICK_START_4",  "LINE_FENCE_BACKTICK_START_5",  "LINE_META",   
-  "error",         "doc",           "blocks",        "block",       
-  "blockquote",    "def_abbreviation",  "def_citation",  "def_footnote",
-  "def_link",      "definition_block",  "empty",         "fenced_block",
-  "html_block",    "indented_code",  "list_bullet",   "list_enum",   
-  "meta_block",    "para",          "setext_1",      "setext_2",    
-  "table",         "chunk",         "chunk_line",    "nested_chunks",
-  "nested_chunk",  "indented_line",  "ext_chunk",     "opt_ext_chunk",
-  "tail",          "quote_line",    "defs",          "def",         
-  "fenced_3",      "fenced_line",   "fenced_4",      "fenced_5",    
-  "html_line",     "item_bullet",   "item_enum",     "meta_line",   
-  "table_header",  "table_body",    "header_rows",   "table_section",
-  "all_rows",      "row",         
+  "LINE_DEF_ABBREVIATION",  "LINE_DEF_CITATION",  "LINE_DEF_FOOTNOTE",  "LINE_DEF_GLOSSARY",
+  "LINE_DEF_LINK",  "LINE_FENCE_BACKTICK",  "LINE_FENCE_BACKTICK_START",  "LINE_TOC",    
+  "LINE_DEFINITION",  "LINE_EMPTY",    "LINE_FENCE_BACKTICK_3",  "LINE_FENCE_BACKTICK_4",
+  "LINE_FENCE_BACKTICK_5",  "LINE_FENCE_BACKTICK_START_3",  "LINE_FENCE_BACKTICK_START_4",  "LINE_FENCE_BACKTICK_START_5",
+  "LINE_META",     "error",         "doc",           "blocks",      
+  "block",         "blockquote",    "def_abbreviation",  "def_citation",
+  "def_footnote",  "def_glossary",  "def_link",      "definition_block",
+  "empty",         "fenced_block",  "html_block",    "indented_code",
+  "list_bullet",   "list_enum",     "meta_block",    "para",        
+  "setext_1",      "setext_2",      "table",         "chunk",       
+  "chunk_line",    "nested_chunks",  "nested_chunk",  "indented_line",
+  "ext_chunk",     "opt_ext_chunk",  "tail",          "quote_line",  
+  "defs",          "def",           "fenced_3",      "fenced_line", 
+  "fenced_4",      "fenced_5",      "html_line",     "item_bullet", 
+  "item_enum",     "meta_line",     "table_header",  "table_body",  
+  "header_rows",   "table_section",  "all_rows",      "row",         
 };
 #endif /* NDEBUG */
 
@@ -444,122 +450,125 @@ static const char *const yyRuleName[] = {
  /*  12 */ "block ::= def_abbreviation",
  /*  13 */ "block ::= def_citation",
  /*  14 */ "block ::= def_footnote",
- /*  15 */ "block ::= def_link",
- /*  16 */ "block ::= definition_block",
- /*  17 */ "block ::= empty",
- /*  18 */ "block ::= fenced_block",
- /*  19 */ "block ::= html_block",
- /*  20 */ "block ::= indented_code",
- /*  21 */ "block ::= list_bullet",
- /*  22 */ "block ::= list_enum",
- /*  23 */ "block ::= meta_block",
- /*  24 */ "block ::= para",
- /*  25 */ "block ::= setext_1",
- /*  26 */ "block ::= setext_2",
- /*  27 */ "block ::= table",
- /*  28 */ "chunk ::= chunk chunk_line",
- /*  29 */ "nested_chunks ::= nested_chunks nested_chunk",
- /*  30 */ "nested_chunk ::= empty indented_line chunk",
- /*  31 */ "nested_chunk ::= empty indented_line",
- /*  32 */ "ext_chunk ::= chunk nested_chunks",
- /*  33 */ "opt_ext_chunk ::= chunk nested_chunks",
- /*  34 */ "blockquote ::= blockquote quote_line",
- /*  35 */ "def_citation ::= LINE_DEF_CITATION tail",
- /*  36 */ "def_footnote ::= LINE_DEF_FOOTNOTE tail",
- /*  37 */ "def_link ::= LINE_DEF_LINK chunk",
- /*  38 */ "definition_block ::= para defs",
- /*  39 */ "defs ::= defs def",
- /*  40 */ "def ::= LINE_DEFINITION tail",
- /*  41 */ "def ::= LINE_DEFINITION",
- /*  42 */ "empty ::= empty LINE_EMPTY",
- /*  43 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3",
- /*  44 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4",
- /*  45 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5",
- /*  46 */ "fenced_3 ::= fenced_3 fenced_line",
- /*  47 */ "fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4",
- /*  48 */ "fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5",
- /*  49 */ "fenced_4 ::= fenced_4 fenced_line",
- /*  50 */ "fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3",
- /*  51 */ "fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3",
- /*  52 */ "fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5",
- /*  53 */ "fenced_5 ::= fenced_5 fenced_line",
- /*  54 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3",
- /*  55 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3",
- /*  56 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4",
- /*  57 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4",
- /*  58 */ "html_block ::= html_block html_line",
- /*  59 */ "indented_code ::= indented_code indented_line",
- /*  60 */ "indented_code ::= indented_code LINE_EMPTY",
- /*  61 */ "list_bullet ::= list_bullet item_bullet",
- /*  62 */ "item_bullet ::= LINE_LIST_BULLETED ext_chunk",
- /*  63 */ "item_bullet ::= LINE_LIST_BULLETED chunk",
- /*  64 */ "item_bullet ::= LINE_LIST_BULLETED nested_chunks",
- /*  65 */ "item_bullet ::= LINE_LIST_BULLETED",
- /*  66 */ "list_enum ::= list_enum item_enum",
- /*  67 */ "item_enum ::= LINE_LIST_ENUMERATED ext_chunk",
- /*  68 */ "item_enum ::= LINE_LIST_ENUMERATED chunk",
- /*  69 */ "item_enum ::= LINE_LIST_ENUMERATED nested_chunks",
- /*  70 */ "item_enum ::= LINE_LIST_ENUMERATED",
- /*  71 */ "meta_block ::= meta_block meta_line",
- /*  72 */ "para ::= LINE_PLAIN chunk",
- /*  73 */ "setext_1 ::= para LINE_SETEXT_1",
- /*  74 */ "setext_2 ::= para LINE_SETEXT_2",
- /*  75 */ "table ::= table_header table_body",
- /*  76 */ "table_header ::= header_rows LINE_TABLE_SEPARATOR",
- /*  77 */ "header_rows ::= header_rows LINE_TABLE",
- /*  78 */ "table_body ::= table_body table_section",
- /*  79 */ "table_section ::= all_rows LINE_EMPTY",
- /*  80 */ "table_section ::= all_rows",
- /*  81 */ "all_rows ::= all_rows row",
- /*  82 */ "para ::= all_rows",
- /*  83 */ "chunk ::= chunk_line",
- /*  84 */ "chunk_line ::= LINE_CONTINUATION",
- /*  85 */ "nested_chunks ::= nested_chunk",
- /*  86 */ "nested_chunk ::= empty",
- /*  87 */ "indented_line ::= LINE_INDENTED_TAB",
- /*  88 */ "indented_line ::= LINE_INDENTED_SPACE",
- /*  89 */ "opt_ext_chunk ::= chunk",
- /*  90 */ "tail ::= opt_ext_chunk",
- /*  91 */ "tail ::= nested_chunks",
- /*  92 */ "blockquote ::= LINE_BLOCKQUOTE",
- /*  93 */ "quote_line ::= LINE_BLOCKQUOTE",
- /*  94 */ "quote_line ::= LINE_CONTINUATION",
- /*  95 */ "def_citation ::= LINE_DEF_CITATION",
- /*  96 */ "def_footnote ::= LINE_DEF_FOOTNOTE",
- /*  97 */ "def_link ::= LINE_DEF_LINK",
- /*  98 */ "def_abbreviation ::= LINE_DEF_ABBREVIATION",
- /*  99 */ "defs ::= def",
- /* 100 */ "empty ::= LINE_EMPTY",
- /* 101 */ "fenced_block ::= fenced_3",
- /* 102 */ "fenced_3 ::= LINE_FENCE_BACKTICK_3",
- /* 103 */ "fenced_3 ::= LINE_FENCE_BACKTICK_START_3",
- /* 104 */ "fenced_block ::= fenced_4",
- /* 105 */ "fenced_4 ::= LINE_FENCE_BACKTICK_4",
- /* 106 */ "fenced_4 ::= LINE_FENCE_BACKTICK_START_4",
- /* 107 */ "fenced_block ::= fenced_5",
- /* 108 */ "fenced_5 ::= LINE_FENCE_BACKTICK_5",
- /* 109 */ "fenced_5 ::= LINE_FENCE_BACKTICK_START_5",
- /* 110 */ "fenced_line ::= LINE_CONTINUATION",
- /* 111 */ "fenced_line ::= LINE_EMPTY",
- /* 112 */ "fenced_line ::= LINE_SETEXT_1",
- /* 113 */ "fenced_line ::= LINE_SETEXT_2",
- /* 114 */ "html_block ::= LINE_HTML",
- /* 115 */ "html_line ::= LINE_CONTINUATION",
- /* 116 */ "html_line ::= LINE_HTML",
- /* 117 */ "indented_code ::= indented_line",
- /* 118 */ "list_bullet ::= item_bullet",
- /* 119 */ "list_enum ::= item_enum",
- /* 120 */ "meta_block ::= LINE_META",
- /* 121 */ "meta_line ::= LINE_META",
- /* 122 */ "meta_line ::= LINE_CONTINUATION",
- /* 123 */ "para ::= LINE_PLAIN",
- /* 124 */ "table ::= table_header",
- /* 125 */ "header_rows ::= LINE_TABLE",
- /* 126 */ "table_body ::= table_section",
- /* 127 */ "all_rows ::= row",
- /* 128 */ "row ::= header_rows",
- /* 129 */ "row ::= LINE_TABLE_SEPARATOR",
- /* 130 */ "para ::= defs",
+ /*  15 */ "block ::= def_glossary",
+ /*  16 */ "block ::= def_link",
+ /*  17 */ "block ::= definition_block",
+ /*  18 */ "block ::= empty",
+ /*  19 */ "block ::= fenced_block",
+ /*  20 */ "block ::= html_block",
+ /*  21 */ "block ::= indented_code",
+ /*  22 */ "block ::= list_bullet",
+ /*  23 */ "block ::= list_enum",
+ /*  24 */ "block ::= meta_block",
+ /*  25 */ "block ::= para",
+ /*  26 */ "block ::= setext_1",
+ /*  27 */ "block ::= setext_2",
+ /*  28 */ "block ::= table",
+ /*  29 */ "chunk ::= chunk chunk_line",
+ /*  30 */ "nested_chunks ::= nested_chunks nested_chunk",
+ /*  31 */ "nested_chunk ::= empty indented_line chunk",
+ /*  32 */ "nested_chunk ::= empty indented_line",
+ /*  33 */ "ext_chunk ::= chunk nested_chunks",
+ /*  34 */ "opt_ext_chunk ::= chunk nested_chunks",
+ /*  35 */ "blockquote ::= blockquote quote_line",
+ /*  36 */ "def_citation ::= LINE_DEF_CITATION tail",
+ /*  37 */ "def_footnote ::= LINE_DEF_FOOTNOTE tail",
+ /*  38 */ "def_glossary ::= LINE_DEF_GLOSSARY tail",
+ /*  39 */ "def_link ::= LINE_DEF_LINK chunk",
+ /*  40 */ "definition_block ::= para defs",
+ /*  41 */ "defs ::= defs def",
+ /*  42 */ "def ::= LINE_DEFINITION tail",
+ /*  43 */ "def ::= LINE_DEFINITION",
+ /*  44 */ "empty ::= empty LINE_EMPTY",
+ /*  45 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3",
+ /*  46 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4",
+ /*  47 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5",
+ /*  48 */ "fenced_3 ::= fenced_3 fenced_line",
+ /*  49 */ "fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4",
+ /*  50 */ "fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5",
+ /*  51 */ "fenced_4 ::= fenced_4 fenced_line",
+ /*  52 */ "fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3",
+ /*  53 */ "fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3",
+ /*  54 */ "fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5",
+ /*  55 */ "fenced_5 ::= fenced_5 fenced_line",
+ /*  56 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3",
+ /*  57 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3",
+ /*  58 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4",
+ /*  59 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4",
+ /*  60 */ "html_block ::= html_block html_line",
+ /*  61 */ "indented_code ::= indented_code indented_line",
+ /*  62 */ "indented_code ::= indented_code LINE_EMPTY",
+ /*  63 */ "list_bullet ::= list_bullet item_bullet",
+ /*  64 */ "item_bullet ::= LINE_LIST_BULLETED ext_chunk",
+ /*  65 */ "item_bullet ::= LINE_LIST_BULLETED chunk",
+ /*  66 */ "item_bullet ::= LINE_LIST_BULLETED nested_chunks",
+ /*  67 */ "item_bullet ::= LINE_LIST_BULLETED",
+ /*  68 */ "list_enum ::= list_enum item_enum",
+ /*  69 */ "item_enum ::= LINE_LIST_ENUMERATED ext_chunk",
+ /*  70 */ "item_enum ::= LINE_LIST_ENUMERATED chunk",
+ /*  71 */ "item_enum ::= LINE_LIST_ENUMERATED nested_chunks",
+ /*  72 */ "item_enum ::= LINE_LIST_ENUMERATED",
+ /*  73 */ "meta_block ::= meta_block meta_line",
+ /*  74 */ "para ::= LINE_PLAIN chunk",
+ /*  75 */ "setext_1 ::= para LINE_SETEXT_1",
+ /*  76 */ "setext_2 ::= para LINE_SETEXT_2",
+ /*  77 */ "table ::= table_header table_body",
+ /*  78 */ "table_header ::= header_rows LINE_TABLE_SEPARATOR",
+ /*  79 */ "header_rows ::= header_rows LINE_TABLE",
+ /*  80 */ "table_body ::= table_body table_section",
+ /*  81 */ "table_section ::= all_rows LINE_EMPTY",
+ /*  82 */ "table_section ::= all_rows",
+ /*  83 */ "all_rows ::= all_rows row",
+ /*  84 */ "para ::= all_rows",
+ /*  85 */ "chunk ::= chunk_line",
+ /*  86 */ "chunk_line ::= LINE_CONTINUATION",
+ /*  87 */ "nested_chunks ::= nested_chunk",
+ /*  88 */ "nested_chunk ::= empty",
+ /*  89 */ "indented_line ::= LINE_INDENTED_TAB",
+ /*  90 */ "indented_line ::= LINE_INDENTED_SPACE",
+ /*  91 */ "opt_ext_chunk ::= chunk",
+ /*  92 */ "tail ::= opt_ext_chunk",
+ /*  93 */ "tail ::= nested_chunks",
+ /*  94 */ "blockquote ::= LINE_BLOCKQUOTE",
+ /*  95 */ "quote_line ::= LINE_BLOCKQUOTE",
+ /*  96 */ "quote_line ::= LINE_CONTINUATION",
+ /*  97 */ "def_citation ::= LINE_DEF_CITATION",
+ /*  98 */ "def_footnote ::= LINE_DEF_FOOTNOTE",
+ /*  99 */ "def_glossary ::= LINE_DEF_GLOSSARY",
+ /* 100 */ "def_link ::= LINE_DEF_LINK",
+ /* 101 */ "def_abbreviation ::= LINE_DEF_ABBREVIATION",
+ /* 102 */ "defs ::= def",
+ /* 103 */ "empty ::= LINE_EMPTY",
+ /* 104 */ "fenced_block ::= fenced_3",
+ /* 105 */ "fenced_3 ::= LINE_FENCE_BACKTICK_3",
+ /* 106 */ "fenced_3 ::= LINE_FENCE_BACKTICK_START_3",
+ /* 107 */ "fenced_block ::= fenced_4",
+ /* 108 */ "fenced_4 ::= LINE_FENCE_BACKTICK_4",
+ /* 109 */ "fenced_4 ::= LINE_FENCE_BACKTICK_START_4",
+ /* 110 */ "fenced_block ::= fenced_5",
+ /* 111 */ "fenced_5 ::= LINE_FENCE_BACKTICK_5",
+ /* 112 */ "fenced_5 ::= LINE_FENCE_BACKTICK_START_5",
+ /* 113 */ "fenced_line ::= LINE_CONTINUATION",
+ /* 114 */ "fenced_line ::= LINE_EMPTY",
+ /* 115 */ "fenced_line ::= LINE_SETEXT_1",
+ /* 116 */ "fenced_line ::= LINE_SETEXT_2",
+ /* 117 */ "html_block ::= LINE_HTML",
+ /* 118 */ "html_line ::= LINE_CONTINUATION",
+ /* 119 */ "html_line ::= LINE_HTML",
+ /* 120 */ "indented_code ::= indented_line",
+ /* 121 */ "list_bullet ::= item_bullet",
+ /* 122 */ "list_enum ::= item_enum",
+ /* 123 */ "meta_block ::= LINE_META",
+ /* 124 */ "meta_line ::= LINE_META",
+ /* 125 */ "meta_line ::= LINE_CONTINUATION",
+ /* 126 */ "para ::= LINE_PLAIN",
+ /* 127 */ "table ::= table_header",
+ /* 128 */ "header_rows ::= LINE_TABLE",
+ /* 129 */ "table_body ::= table_section",
+ /* 130 */ "all_rows ::= row",
+ /* 131 */ "row ::= header_rows",
+ /* 132 */ "row ::= LINE_TABLE_SEPARATOR",
+ /* 133 */ "para ::= defs",
 };
 #endif /* NDEBUG */
 
@@ -908,137 +917,140 @@ static const struct {
   YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
   unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
 } yyRuleInfo[] = {
-  { 37, 1 },
-  { 38, 2 },
   { 38, 1 },
+  { 39, 2 },
   { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 39, 1 },
-  { 57, 2 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
+  { 40, 1 },
   { 59, 2 },
-  { 60, 3 },
-  { 60, 2 },
+  { 61, 2 },
+  { 62, 3 },
   { 62, 2 },
-  { 63, 2 },
-  { 40, 2 },
-  { 42, 2 },
+  { 64, 2 },
+  { 65, 2 },
+  { 41, 2 },
   { 43, 2 },
   { 44, 2 },
   { 45, 2 },
-  { 66, 2 },
-  { 67, 2 },
-  { 67, 1 },
   { 46, 2 },
   { 47, 2 },
-  { 47, 2 },
-  { 47, 2 },
   { 68, 2 },
-  { 47, 2 },
-  { 47, 2 },
-  { 70, 2 },
-  { 70, 2 },
-  { 70, 2 },
-  { 47, 2 },
-  { 71, 2 },
-  { 71, 2 },
-  { 71, 2 },
-  { 71, 2 },
-  { 71, 2 },
+  { 69, 2 },
+  { 69, 1 },
   { 48, 2 },
   { 49, 2 },
   { 49, 2 },
-  { 50, 2 },
+  { 49, 2 },
+  { 70, 2 },
+  { 49, 2 },
+  { 49, 2 },
+  { 72, 2 },
+  { 72, 2 },
+  { 72, 2 },
+  { 49, 2 },
   { 73, 2 },
   { 73, 2 },
   { 73, 2 },
-  { 73, 1 },
+  { 73, 2 },
+  { 73, 2 },
+  { 50, 2 },
+  { 51, 2 },
   { 51, 2 },
-  { 74, 2 },
-  { 74, 2 },
-  { 74, 2 },
-  { 74, 1 },
   { 52, 2 },
+  { 75, 2 },
+  { 75, 2 },
+  { 75, 2 },
+  { 75, 1 },
   { 53, 2 },
+  { 76, 2 },
+  { 76, 2 },
+  { 76, 2 },
+  { 76, 1 },
   { 54, 2 },
   { 55, 2 },
   { 56, 2 },
-  { 76, 2 },
+  { 57, 2 },
+  { 58, 2 },
   { 78, 2 },
-  { 77, 2 },
-  { 79, 2 },
-  { 79, 1 },
   { 80, 2 },
-  { 53, 1 },
-  { 57, 1 },
-  { 58, 1 },
+  { 79, 2 },
+  { 81, 2 },
+  { 81, 1 },
+  { 82, 2 },
+  { 55, 1 },
   { 59, 1 },
   { 60, 1 },
   { 61, 1 },
-  { 61, 1 },
+  { 62, 1 },
+  { 63, 1 },
   { 63, 1 },
-  { 64, 1 },
-  { 64, 1 },
-  { 40, 1 },
-  { 65, 1 },
   { 65, 1 },
-  { 42, 1 },
+  { 66, 1 },
+  { 66, 1 },
+  { 41, 1 },
+  { 67, 1 },
+  { 67, 1 },
   { 43, 1 },
   { 44, 1 },
-  { 41, 1 },
-  { 66, 1 },
+  { 45, 1 },
   { 46, 1 },
-  { 47, 1 },
-  { 68, 1 },
+  { 42, 1 },
   { 68, 1 },
-  { 47, 1 },
+  { 48, 1 },
+  { 49, 1 },
   { 70, 1 },
   { 70, 1 },
-  { 47, 1 },
-  { 71, 1 },
-  { 71, 1 },
-  { 69, 1 },
-  { 69, 1 },
-  { 69, 1 },
-  { 69, 1 },
-  { 48, 1 },
+  { 49, 1 },
   { 72, 1 },
   { 72, 1 },
   { 49, 1 },
+  { 73, 1 },
+  { 73, 1 },
+  { 71, 1 },
+  { 71, 1 },
+  { 71, 1 },
+  { 71, 1 },
   { 50, 1 },
+  { 74, 1 },
+  { 74, 1 },
   { 51, 1 },
   { 52, 1 },
-  { 75, 1 },
-  { 75, 1 },
   { 53, 1 },
-  { 56, 1 },
-  { 78, 1 },
+  { 54, 1 },
+  { 77, 1 },
   { 77, 1 },
+  { 55, 1 },
+  { 58, 1 },
   { 80, 1 },
-  { 81, 1 },
-  { 81, 1 },
-  { 53, 1 },
+  { 79, 1 },
+  { 82, 1 },
+  { 83, 1 },
+  { 83, 1 },
+  { 55, 1 },
 };
 
 static void yy_accept(yyParser*);  /* Forward Declaration */
@@ -1176,204 +1188,210 @@ static void yy_reduce(
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, yylhsminor.yy0); recursive_parse_indent(engine, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 15: /* block ::= def_link */
+      case 15: /* block ::= def_glossary */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_GLOSSARY); stack_push(engine->definition_stack, yylhsminor.yy0); recursive_parse_indent(engine, yylhsminor.yy0); }
+  yymsp[0].minor.yy0 = yylhsminor.yy0;
+        break;
+      case 16: /* block ::= def_link */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_LINK); stack_push(engine->definition_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 16: /* block ::= definition_block */
+      case 17: /* block ::= definition_block */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFLIST); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 17: /* block ::= empty */
+      case 18: /* block ::= empty */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_EMPTY); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 18: /* block ::= fenced_block */
+      case 19: /* block ::= fenced_block */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_FENCED); yymsp[0].minor.yy0->child->type = CODE_FENCE; }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 19: /* block ::= html_block */
+      case 20: /* block ::= html_block */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HTML); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 20: /* block ::= indented_code */
+      case 21: /* block ::= indented_code */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_INDENTED); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 21: /* block ::= list_bullet */
+      case 22: /* block ::= list_bullet */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_BULLETED); is_list_loose(yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 22: /* block ::= list_enum */
+      case 23: /* block ::= list_enum */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ENUMERATED); is_list_loose(yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 23: /* block ::= meta_block */
+      case 24: /* block ::= meta_block */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_META); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 24: /* block ::= para */
+      case 25: /* block ::= para */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_PARA); is_para_html(engine, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 25: /* block ::= setext_1 */
+      case 26: /* block ::= setext_1 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_SETEXT_1); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 26: /* block ::= setext_2 */
+      case 27: /* block ::= setext_2 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_SETEXT_2); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 27: /* block ::= table */
+      case 28: /* block ::= table */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 28: /* chunk ::= chunk chunk_line */
-      case 29: /* nested_chunks ::= nested_chunks nested_chunk */ yytestcase(yyruleno==29);
-      case 32: /* ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==32);
-      case 33: /* opt_ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==33);
-      case 34: /* blockquote ::= blockquote quote_line */ yytestcase(yyruleno==34);
-      case 35: /* def_citation ::= LINE_DEF_CITATION tail */ yytestcase(yyruleno==35);
-      case 36: /* def_footnote ::= LINE_DEF_FOOTNOTE tail */ yytestcase(yyruleno==36);
-      case 37: /* def_link ::= LINE_DEF_LINK chunk */ yytestcase(yyruleno==37);
-      case 39: /* defs ::= defs def */ yytestcase(yyruleno==39);
-      case 42: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==42);
-      case 46: /* fenced_3 ::= fenced_3 fenced_line */ yytestcase(yyruleno==46);
-      case 49: /* fenced_4 ::= fenced_4 fenced_line */ yytestcase(yyruleno==49);
-      case 50: /* fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==50);
-      case 51: /* fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==51);
-      case 53: /* fenced_5 ::= fenced_5 fenced_line */ yytestcase(yyruleno==53);
-      case 54: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==54);
-      case 55: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==55);
-      case 56: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==56);
-      case 57: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4 */ yytestcase(yyruleno==57);
-      case 58: /* html_block ::= html_block html_line */ yytestcase(yyruleno==58);
-      case 59: /* indented_code ::= indented_code indented_line */ yytestcase(yyruleno==59);
-      case 60: /* indented_code ::= indented_code LINE_EMPTY */ yytestcase(yyruleno==60);
-      case 61: /* list_bullet ::= list_bullet item_bullet */ yytestcase(yyruleno==61);
-      case 66: /* list_enum ::= list_enum item_enum */ yytestcase(yyruleno==66);
-      case 71: /* meta_block ::= meta_block meta_line */ yytestcase(yyruleno==71);
-      case 72: /* para ::= LINE_PLAIN chunk */ yytestcase(yyruleno==72);
-      case 73: /* setext_1 ::= para LINE_SETEXT_1 */ yytestcase(yyruleno==73);
-      case 74: /* setext_2 ::= para LINE_SETEXT_2 */ yytestcase(yyruleno==74);
-      case 75: /* table ::= table_header table_body */ yytestcase(yyruleno==75);
-      case 77: /* header_rows ::= header_rows LINE_TABLE */ yytestcase(yyruleno==77);
-      case 78: /* table_body ::= table_body table_section */ yytestcase(yyruleno==78);
-      case 81: /* all_rows ::= all_rows row */ yytestcase(yyruleno==81);
+      case 29: /* chunk ::= chunk chunk_line */
+      case 30: /* nested_chunks ::= nested_chunks nested_chunk */ yytestcase(yyruleno==30);
+      case 33: /* ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==33);
+      case 34: /* opt_ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==34);
+      case 35: /* blockquote ::= blockquote quote_line */ yytestcase(yyruleno==35);
+      case 36: /* def_citation ::= LINE_DEF_CITATION tail */ yytestcase(yyruleno==36);
+      case 37: /* def_footnote ::= LINE_DEF_FOOTNOTE tail */ yytestcase(yyruleno==37);
+      case 38: /* def_glossary ::= LINE_DEF_GLOSSARY tail */ yytestcase(yyruleno==38);
+      case 39: /* def_link ::= LINE_DEF_LINK chunk */ yytestcase(yyruleno==39);
+      case 41: /* defs ::= defs def */ yytestcase(yyruleno==41);
+      case 44: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==44);
+      case 48: /* fenced_3 ::= fenced_3 fenced_line */ yytestcase(yyruleno==48);
+      case 51: /* fenced_4 ::= fenced_4 fenced_line */ yytestcase(yyruleno==51);
+      case 52: /* fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==52);
+      case 53: /* fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==53);
+      case 55: /* fenced_5 ::= fenced_5 fenced_line */ yytestcase(yyruleno==55);
+      case 56: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==56);
+      case 57: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==57);
+      case 58: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==58);
+      case 59: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4 */ yytestcase(yyruleno==59);
+      case 60: /* html_block ::= html_block html_line */ yytestcase(yyruleno==60);
+      case 61: /* indented_code ::= indented_code indented_line */ yytestcase(yyruleno==61);
+      case 62: /* indented_code ::= indented_code LINE_EMPTY */ yytestcase(yyruleno==62);
+      case 63: /* list_bullet ::= list_bullet item_bullet */ yytestcase(yyruleno==63);
+      case 68: /* list_enum ::= list_enum item_enum */ yytestcase(yyruleno==68);
+      case 73: /* meta_block ::= meta_block meta_line */ yytestcase(yyruleno==73);
+      case 74: /* para ::= LINE_PLAIN chunk */ yytestcase(yyruleno==74);
+      case 75: /* setext_1 ::= para LINE_SETEXT_1 */ yytestcase(yyruleno==75);
+      case 76: /* setext_2 ::= para LINE_SETEXT_2 */ yytestcase(yyruleno==76);
+      case 77: /* table ::= table_header table_body */ yytestcase(yyruleno==77);
+      case 79: /* header_rows ::= header_rows LINE_TABLE */ yytestcase(yyruleno==79);
+      case 80: /* table_body ::= table_body table_section */ yytestcase(yyruleno==80);
+      case 83: /* all_rows ::= all_rows row */ yytestcase(yyruleno==83);
 { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 30: /* nested_chunk ::= empty indented_line chunk */
+      case 31: /* nested_chunk ::= empty indented_line chunk */
 { yylhsminor.yy0 = yymsp[-2].minor.yy0; token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = LINE_CONTINUATION; }
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
-      case 31: /* nested_chunk ::= empty indented_line */
+      case 32: /* nested_chunk ::= empty indented_line */
 { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->type = LINE_CONTINUATION; }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 38: /* definition_block ::= para defs */
+      case 40: /* definition_block ::= para defs */
 { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = BLOCK_TERM; }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 40: /* def ::= LINE_DEFINITION tail */
+      case 42: /* def ::= LINE_DEFINITION tail */
 { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_DEFINITION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_indent(engine, yylhsminor.yy0); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 41: /* def ::= LINE_DEFINITION */
+      case 43: /* def ::= LINE_DEFINITION */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION);  }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 43: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3 */
-      case 44: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==44);
-      case 45: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==45);
-      case 47: /* fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==47);
-      case 48: /* fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==48);
-      case 52: /* fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==52);
+      case 45: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3 */
+      case 46: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==46);
+      case 47: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==47);
+      case 49: /* fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==49);
+      case 50: /* fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==50);
+      case 54: /* fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==54);
 { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->child->type = CODE_FENCE; }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 62: /* item_bullet ::= LINE_LIST_BULLETED ext_chunk */
-      case 64: /* item_bullet ::= LINE_LIST_BULLETED nested_chunks */ yytestcase(yyruleno==64);
-      case 67: /* item_enum ::= LINE_LIST_ENUMERATED ext_chunk */ yytestcase(yyruleno==67);
-      case 69: /* item_enum ::= LINE_LIST_ENUMERATED nested_chunks */ yytestcase(yyruleno==69);
+      case 64: /* item_bullet ::= LINE_LIST_BULLETED ext_chunk */
+      case 66: /* item_bullet ::= LINE_LIST_BULLETED nested_chunks */ yytestcase(yyruleno==66);
+      case 69: /* item_enum ::= LINE_LIST_ENUMERATED ext_chunk */ yytestcase(yyruleno==69);
+      case 71: /* item_enum ::= LINE_LIST_ENUMERATED nested_chunks */ yytestcase(yyruleno==71);
 { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_list_item(engine, yylhsminor.yy0); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 63: /* item_bullet ::= LINE_LIST_BULLETED chunk */
-      case 68: /* item_enum ::= LINE_LIST_ENUMERATED chunk */ yytestcase(yyruleno==68);
+      case 65: /* item_bullet ::= LINE_LIST_BULLETED chunk */
+      case 70: /* item_enum ::= LINE_LIST_ENUMERATED chunk */ yytestcase(yyruleno==70);
 { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM_TIGHT); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_list_item(engine, yylhsminor.yy0); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 65: /* item_bullet ::= LINE_LIST_BULLETED */
-      case 70: /* item_enum ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==70);
+      case 67: /* item_bullet ::= LINE_LIST_BULLETED */
+      case 72: /* item_enum ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==72);
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ITEM_TIGHT); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 76: /* table_header ::= header_rows LINE_TABLE_SEPARATOR */
+      case 78: /* table_header ::= header_rows LINE_TABLE_SEPARATOR */
 { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_HEADER); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 79: /* table_section ::= all_rows LINE_EMPTY */
+      case 81: /* table_section ::= all_rows LINE_EMPTY */
 { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_SECTION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 80: /* table_section ::= all_rows */
+      case 82: /* table_section ::= all_rows */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_SECTION); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 82: /* para ::= all_rows */
+      case 84: /* para ::= all_rows */
 { yylhsminor.yy0 = yymsp[0].minor.yy0; }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
       default:
-      /* (83) chunk ::= chunk_line (OPTIMIZED OUT) */ assert(yyruleno!=83);
-      /* (84) chunk_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==84);
-      /* (85) nested_chunks ::= nested_chunk (OPTIMIZED OUT) */ assert(yyruleno!=85);
-      /* (86) nested_chunk ::= empty */ yytestcase(yyruleno==86);
-      /* (87) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==87);
-      /* (88) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==88);
-      /* (89) opt_ext_chunk ::= chunk */ yytestcase(yyruleno==89);
-      /* (90) tail ::= opt_ext_chunk (OPTIMIZED OUT) */ assert(yyruleno!=90);
-      /* (91) tail ::= nested_chunks */ yytestcase(yyruleno==91);
-      /* (92) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==92);
-      /* (93) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==93);
-      /* (94) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==94);
-      /* (95) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==95);
-      /* (96) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==96);
-      /* (97) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==97);
-      /* (98) def_abbreviation ::= LINE_DEF_ABBREVIATION */ yytestcase(yyruleno==98);
-      /* (99) defs ::= def (OPTIMIZED OUT) */ assert(yyruleno!=99);
-      /* (100) empty ::= LINE_EMPTY */ yytestcase(yyruleno==100);
-      /* (101) fenced_block ::= fenced_3 */ yytestcase(yyruleno==101);
-      /* (102) fenced_3 ::= LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==102);
-      /* (103) fenced_3 ::= LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==103);
-      /* (104) fenced_block ::= fenced_4 */ yytestcase(yyruleno==104);
-      /* (105) fenced_4 ::= LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==105);
-      /* (106) fenced_4 ::= LINE_FENCE_BACKTICK_START_4 */ yytestcase(yyruleno==106);
-      /* (107) fenced_block ::= fenced_5 */ yytestcase(yyruleno==107);
-      /* (108) fenced_5 ::= LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==108);
-      /* (109) fenced_5 ::= LINE_FENCE_BACKTICK_START_5 */ yytestcase(yyruleno==109);
-      /* (110) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==110);
-      /* (111) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==111);
-      /* (112) fenced_line ::= LINE_SETEXT_1 */ yytestcase(yyruleno==112);
-      /* (113) fenced_line ::= LINE_SETEXT_2 */ yytestcase(yyruleno==113);
-      /* (114) html_block ::= LINE_HTML */ yytestcase(yyruleno==114);
-      /* (115) html_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==115);
-      /* (116) html_line ::= LINE_HTML */ yytestcase(yyruleno==116);
-      /* (117) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=117);
-      /* (118) list_bullet ::= item_bullet (OPTIMIZED OUT) */ assert(yyruleno!=118);
-      /* (119) list_enum ::= item_enum (OPTIMIZED OUT) */ assert(yyruleno!=119);
-      /* (120) meta_block ::= LINE_META */ yytestcase(yyruleno==120);
-      /* (121) meta_line ::= LINE_META */ yytestcase(yyruleno==121);
-      /* (122) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==122);
-      /* (123) para ::= LINE_PLAIN */ yytestcase(yyruleno==123);
-      /* (124) table ::= table_header */ yytestcase(yyruleno==124);
-      /* (125) header_rows ::= LINE_TABLE */ yytestcase(yyruleno==125);
-      /* (126) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=126);
-      /* (127) all_rows ::= row (OPTIMIZED OUT) */ assert(yyruleno!=127);
-      /* (128) row ::= header_rows */ yytestcase(yyruleno==128);
-      /* (129) row ::= LINE_TABLE_SEPARATOR */ yytestcase(yyruleno==129);
-      /* (130) para ::= defs */ yytestcase(yyruleno==130);
+      /* (85) chunk ::= chunk_line (OPTIMIZED OUT) */ assert(yyruleno!=85);
+      /* (86) chunk_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==86);
+      /* (87) nested_chunks ::= nested_chunk (OPTIMIZED OUT) */ assert(yyruleno!=87);
+      /* (88) nested_chunk ::= empty */ yytestcase(yyruleno==88);
+      /* (89) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==89);
+      /* (90) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==90);
+      /* (91) opt_ext_chunk ::= chunk */ yytestcase(yyruleno==91);
+      /* (92) tail ::= opt_ext_chunk (OPTIMIZED OUT) */ assert(yyruleno!=92);
+      /* (93) tail ::= nested_chunks */ yytestcase(yyruleno==93);
+      /* (94) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==94);
+      /* (95) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==95);
+      /* (96) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==96);
+      /* (97) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==97);
+      /* (98) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==98);
+      /* (99) def_glossary ::= LINE_DEF_GLOSSARY */ yytestcase(yyruleno==99);
+      /* (100) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==100);
+      /* (101) def_abbreviation ::= LINE_DEF_ABBREVIATION */ yytestcase(yyruleno==101);
+      /* (102) defs ::= def (OPTIMIZED OUT) */ assert(yyruleno!=102);
+      /* (103) empty ::= LINE_EMPTY */ yytestcase(yyruleno==103);
+      /* (104) fenced_block ::= fenced_3 */ yytestcase(yyruleno==104);
+      /* (105) fenced_3 ::= LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==105);
+      /* (106) fenced_3 ::= LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==106);
+      /* (107) fenced_block ::= fenced_4 */ yytestcase(yyruleno==107);
+      /* (108) fenced_4 ::= LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==108);
+      /* (109) fenced_4 ::= LINE_FENCE_BACKTICK_START_4 */ yytestcase(yyruleno==109);
+      /* (110) fenced_block ::= fenced_5 */ yytestcase(yyruleno==110);
+      /* (111) fenced_5 ::= LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==111);
+      /* (112) fenced_5 ::= LINE_FENCE_BACKTICK_START_5 */ yytestcase(yyruleno==112);
+      /* (113) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==113);
+      /* (114) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==114);
+      /* (115) fenced_line ::= LINE_SETEXT_1 */ yytestcase(yyruleno==115);
+      /* (116) fenced_line ::= LINE_SETEXT_2 */ yytestcase(yyruleno==116);
+      /* (117) html_block ::= LINE_HTML */ yytestcase(yyruleno==117);
+      /* (118) html_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==118);
+      /* (119) html_line ::= LINE_HTML */ yytestcase(yyruleno==119);
+      /* (120) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=120);
+      /* (121) list_bullet ::= item_bullet (OPTIMIZED OUT) */ assert(yyruleno!=121);
+      /* (122) list_enum ::= item_enum (OPTIMIZED OUT) */ assert(yyruleno!=122);
+      /* (123) meta_block ::= LINE_META */ yytestcase(yyruleno==123);
+      /* (124) meta_line ::= LINE_META */ yytestcase(yyruleno==124);
+      /* (125) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==125);
+      /* (126) para ::= LINE_PLAIN */ yytestcase(yyruleno==126);
+      /* (127) table ::= table_header */ yytestcase(yyruleno==127);
+      /* (128) header_rows ::= LINE_TABLE */ yytestcase(yyruleno==128);
+      /* (129) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=129);
+      /* (130) all_rows ::= row (OPTIMIZED OUT) */ assert(yyruleno!=130);
+      /* (131) row ::= header_rows */ yytestcase(yyruleno==131);
+      /* (132) row ::= LINE_TABLE_SEPARATOR */ yytestcase(yyruleno==132);
+      /* (133) para ::= defs */ yytestcase(yyruleno==133);
         break;
 /********** End reduce actions ************************************************/
   };
index 8ad7feb0111b80aa37876a3e721c5a28ca778437..55917c25c1898402fc8af3617997deb54391b0c9 100644 (file)
 #define LINE_BLOCKQUOTE                 17
 #define LINE_LIST_BULLETED              18
 #define LINE_LIST_ENUMERATED            19
-#define LINE_DEF_CITATION               20
-#define LINE_DEF_FOOTNOTE               21
-#define LINE_DEF_LINK                   22
-#define LINE_FENCE_BACKTICK             23
-#define LINE_FENCE_BACKTICK_START       24
-#define LINE_TOC                        25
-#define LINE_DEF_ABBREVIATION           26
-#define LINE_DEFINITION                 27
-#define LINE_EMPTY                      28
-#define LINE_FENCE_BACKTICK_3           29
-#define LINE_FENCE_BACKTICK_4           30
-#define LINE_FENCE_BACKTICK_5           31
-#define LINE_FENCE_BACKTICK_START_3     32
-#define LINE_FENCE_BACKTICK_START_4     33
-#define LINE_FENCE_BACKTICK_START_5     34
-#define LINE_META                       35
+#define LINE_DEF_ABBREVIATION           20
+#define LINE_DEF_CITATION               21
+#define LINE_DEF_FOOTNOTE               22
+#define LINE_DEF_GLOSSARY               23
+#define LINE_DEF_LINK                   24
+#define LINE_FENCE_BACKTICK             25
+#define LINE_FENCE_BACKTICK_START       26
+#define LINE_TOC                        27
+#define LINE_DEFINITION                 28
+#define LINE_EMPTY                      29
+#define LINE_FENCE_BACKTICK_3           30
+#define LINE_FENCE_BACKTICK_4           31
+#define LINE_FENCE_BACKTICK_5           32
+#define LINE_FENCE_BACKTICK_START_3     33
+#define LINE_FENCE_BACKTICK_START_4     34
+#define LINE_FENCE_BACKTICK_START_5     35
+#define LINE_META                       36
index 1d9a8a0c79b7aae965da6bbb402de57a7a35ab6d..f62e8b200f0cf60346fd0f3c6990ef213a10766c 100644 (file)
@@ -14,6 +14,7 @@ State 0:
           block ::= * def_abbreviation
           block ::= * def_citation
           block ::= * def_footnote
+          block ::= * def_glossary
           block ::= * def_link
           block ::= * definition_block
           block ::= * empty
@@ -35,6 +36,8 @@ State 0:
           def_citation ::= * LINE_DEF_CITATION
           def_footnote ::= * LINE_DEF_FOOTNOTE tail
           def_footnote ::= * LINE_DEF_FOOTNOTE
+          def_glossary ::= * LINE_DEF_GLOSSARY tail
+          def_glossary ::= * LINE_DEF_GLOSSARY
           def_link ::= * LINE_DEF_LINK chunk
           def_link ::= * LINE_DEF_LINK
           def_abbreviation ::= * LINE_DEF_ABBREVIATION
@@ -105,67 +108,69 @@ State 0:
           para ::= * defs
 
                        LINE_HR shift-reduce 9      block ::= LINE_HR
-                    LINE_PLAIN shift        15     
-          LINE_TABLE_SEPARATOR shift-reduce 129    row ::= LINE_TABLE_SEPARATOR
-             LINE_INDENTED_TAB shift-reduce 87     indented_line ::= LINE_INDENTED_TAB
-           LINE_INDENTED_SPACE shift-reduce 88     indented_line ::= LINE_INDENTED_SPACE
-                    LINE_TABLE shift-reduce 125    header_rows ::= LINE_TABLE
-                     LINE_HTML shift-reduce 114    html_block ::= LINE_HTML
+                    LINE_PLAIN shift        16     
+          LINE_TABLE_SEPARATOR shift-reduce 132    row ::= LINE_TABLE_SEPARATOR
+             LINE_INDENTED_TAB shift-reduce 89     indented_line ::= LINE_INDENTED_TAB
+           LINE_INDENTED_SPACE shift-reduce 90     indented_line ::= LINE_INDENTED_SPACE
+                    LINE_TABLE shift-reduce 128    header_rows ::= LINE_TABLE
+                     LINE_HTML shift-reduce 117    html_block ::= LINE_HTML
                     LINE_ATX_1 shift-reduce 3      block ::= LINE_ATX_1
                     LINE_ATX_2 shift-reduce 4      block ::= LINE_ATX_2
                     LINE_ATX_3 shift-reduce 5      block ::= LINE_ATX_3
                     LINE_ATX_4 shift-reduce 6      block ::= LINE_ATX_4
                     LINE_ATX_5 shift-reduce 7      block ::= LINE_ATX_5
                     LINE_ATX_6 shift-reduce 8      block ::= LINE_ATX_6
-               LINE_BLOCKQUOTE shift-reduce 92     blockquote ::= LINE_BLOCKQUOTE
-            LINE_LIST_BULLETED shift        6      
-          LINE_LIST_ENUMERATED shift        5      
-             LINE_DEF_CITATION shift        3      
-             LINE_DEF_FOOTNOTE shift        2      
-                 LINE_DEF_LINK shift        16     
+               LINE_BLOCKQUOTE shift-reduce 94     blockquote ::= LINE_BLOCKQUOTE
+            LINE_LIST_BULLETED shift        7      
+          LINE_LIST_ENUMERATED shift        6      
+         LINE_DEF_ABBREVIATION shift-reduce 101    def_abbreviation ::= LINE_DEF_ABBREVIATION
+             LINE_DEF_CITATION shift        4      
+             LINE_DEF_FOOTNOTE shift        3      
+             LINE_DEF_GLOSSARY shift        2      
+                 LINE_DEF_LINK shift        17     
                       LINE_TOC shift-reduce 10     block ::= LINE_TOC
-         LINE_DEF_ABBREVIATION shift-reduce 98     def_abbreviation ::= LINE_DEF_ABBREVIATION
-               LINE_DEFINITION shift        4      
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-         LINE_FENCE_BACKTICK_3 shift-reduce 102    fenced_3 ::= LINE_FENCE_BACKTICK_3
-         LINE_FENCE_BACKTICK_4 shift-reduce 105    fenced_4 ::= LINE_FENCE_BACKTICK_4
-         LINE_FENCE_BACKTICK_5 shift-reduce 108    fenced_5 ::= LINE_FENCE_BACKTICK_5
-   LINE_FENCE_BACKTICK_START_3 shift-reduce 103    fenced_3 ::= LINE_FENCE_BACKTICK_START_3
-   LINE_FENCE_BACKTICK_START_4 shift-reduce 106    fenced_4 ::= LINE_FENCE_BACKTICK_START_4
-   LINE_FENCE_BACKTICK_START_5 shift-reduce 109    fenced_5 ::= LINE_FENCE_BACKTICK_START_5
-                     LINE_META shift-reduce 120    meta_block ::= LINE_META
+               LINE_DEFINITION shift        5      
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+         LINE_FENCE_BACKTICK_3 shift-reduce 105    fenced_3 ::= LINE_FENCE_BACKTICK_3
+         LINE_FENCE_BACKTICK_4 shift-reduce 108    fenced_4 ::= LINE_FENCE_BACKTICK_4
+         LINE_FENCE_BACKTICK_5 shift-reduce 111    fenced_5 ::= LINE_FENCE_BACKTICK_5
+   LINE_FENCE_BACKTICK_START_3 shift-reduce 106    fenced_3 ::= LINE_FENCE_BACKTICK_START_3
+   LINE_FENCE_BACKTICK_START_4 shift-reduce 109    fenced_4 ::= LINE_FENCE_BACKTICK_START_4
+   LINE_FENCE_BACKTICK_START_5 shift-reduce 112    fenced_5 ::= LINE_FENCE_BACKTICK_START_5
+                     LINE_META shift-reduce 123    meta_block ::= LINE_META
                            doc accept
                         blocks shift        1      
                          block shift-reduce 2      blocks ::= block
-                    blockquote shift        30     
+                    blockquote shift        31     
               def_abbreviation shift-reduce 12     block ::= def_abbreviation
                   def_citation shift-reduce 13     block ::= def_citation
                   def_footnote shift-reduce 14     block ::= def_footnote
-                      def_link shift-reduce 15     block ::= def_link
-              definition_block shift-reduce 16     block ::= definition_block
-                         empty shift        40     
-                  fenced_block shift-reduce 18     block ::= fenced_block
-                    html_block shift        29     
-                 indented_code shift        27     
-                   list_bullet shift        37     
-                     list_enum shift        35     
-                    meta_block shift        28     
-                          para shift        13     
-                      setext_1 shift-reduce 25     block ::= setext_1
-                      setext_2 shift-reduce 26     block ::= setext_2
-                         table shift-reduce 27     block ::= table
-                 indented_line shift        27       /* because indented_line==indented_code */
-                          defs shift        32     
-                           def shift        32       /* because def==defs */
-                      fenced_3 shift        25     
-                      fenced_4 shift        24     
-                      fenced_5 shift        23     
-                   item_bullet shift        37       /* because item_bullet==list_bullet */
-                     item_enum shift        35       /* because item_enum==list_enum */
-                  table_header shift        7      
-                   header_rows shift        38     
-                      all_rows shift        14     
-                           row shift        14       /* because row==all_rows */
+                  def_glossary shift-reduce 15     block ::= def_glossary
+                      def_link shift-reduce 16     block ::= def_link
+              definition_block shift-reduce 17     block ::= definition_block
+                         empty shift        41     
+                  fenced_block shift-reduce 19     block ::= fenced_block
+                    html_block shift        30     
+                 indented_code shift        28     
+                   list_bullet shift        38     
+                     list_enum shift        36     
+                    meta_block shift        29     
+                          para shift        14     
+                      setext_1 shift-reduce 26     block ::= setext_1
+                      setext_2 shift-reduce 27     block ::= setext_2
+                         table shift-reduce 28     block ::= table
+                 indented_line shift        28       /* because indented_line==indented_code */
+                          defs shift        33     
+                           def shift        33       /* because def==defs */
+                      fenced_3 shift        26     
+                      fenced_4 shift        25     
+                      fenced_5 shift        24     
+                   item_bullet shift        38       /* because item_bullet==list_bullet */
+                     item_enum shift        36       /* because item_enum==list_enum */
+                  table_header shift        8      
+                   header_rows shift        39     
+                      all_rows shift        15     
+                           row shift        15       /* because row==all_rows */
 
 State 1:
       (0) doc ::= blocks *
@@ -182,6 +187,7 @@ State 1:
           block ::= * def_abbreviation
           block ::= * def_citation
           block ::= * def_footnote
+          block ::= * def_glossary
           block ::= * def_link
           block ::= * definition_block
           block ::= * empty
@@ -203,6 +209,8 @@ State 1:
           def_citation ::= * LINE_DEF_CITATION
           def_footnote ::= * LINE_DEF_FOOTNOTE tail
           def_footnote ::= * LINE_DEF_FOOTNOTE
+          def_glossary ::= * LINE_DEF_GLOSSARY tail
+          def_glossary ::= * LINE_DEF_GLOSSARY
           def_link ::= * LINE_DEF_LINK chunk
           def_link ::= * LINE_DEF_LINK
           def_abbreviation ::= * LINE_DEF_ABBREVIATION
@@ -274,65 +282,67 @@ State 1:
 
                              $ reduce       0      doc ::= blocks
                        LINE_HR shift-reduce 9      block ::= LINE_HR
-                    LINE_PLAIN shift        15     
-          LINE_TABLE_SEPARATOR shift-reduce 129    row ::= LINE_TABLE_SEPARATOR
-             LINE_INDENTED_TAB shift-reduce 87     indented_line ::= LINE_INDENTED_TAB
-           LINE_INDENTED_SPACE shift-reduce 88     indented_line ::= LINE_INDENTED_SPACE
-                    LINE_TABLE shift-reduce 125    header_rows ::= LINE_TABLE
-                     LINE_HTML shift-reduce 114    html_block ::= LINE_HTML
+                    LINE_PLAIN shift        16     
+          LINE_TABLE_SEPARATOR shift-reduce 132    row ::= LINE_TABLE_SEPARATOR
+             LINE_INDENTED_TAB shift-reduce 89     indented_line ::= LINE_INDENTED_TAB
+           LINE_INDENTED_SPACE shift-reduce 90     indented_line ::= LINE_INDENTED_SPACE
+                    LINE_TABLE shift-reduce 128    header_rows ::= LINE_TABLE
+                     LINE_HTML shift-reduce 117    html_block ::= LINE_HTML
                     LINE_ATX_1 shift-reduce 3      block ::= LINE_ATX_1
                     LINE_ATX_2 shift-reduce 4      block ::= LINE_ATX_2
                     LINE_ATX_3 shift-reduce 5      block ::= LINE_ATX_3
                     LINE_ATX_4 shift-reduce 6      block ::= LINE_ATX_4
                     LINE_ATX_5 shift-reduce 7      block ::= LINE_ATX_5
                     LINE_ATX_6 shift-reduce 8      block ::= LINE_ATX_6
-               LINE_BLOCKQUOTE shift-reduce 92     blockquote ::= LINE_BLOCKQUOTE
-            LINE_LIST_BULLETED shift        6      
-          LINE_LIST_ENUMERATED shift        5      
-             LINE_DEF_CITATION shift        3      
-             LINE_DEF_FOOTNOTE shift        2      
-                 LINE_DEF_LINK shift        16     
+               LINE_BLOCKQUOTE shift-reduce 94     blockquote ::= LINE_BLOCKQUOTE
+            LINE_LIST_BULLETED shift        7      
+          LINE_LIST_ENUMERATED shift        6      
+         LINE_DEF_ABBREVIATION shift-reduce 101    def_abbreviation ::= LINE_DEF_ABBREVIATION
+             LINE_DEF_CITATION shift        4      
+             LINE_DEF_FOOTNOTE shift        3      
+             LINE_DEF_GLOSSARY shift        2      
+                 LINE_DEF_LINK shift        17     
                       LINE_TOC shift-reduce 10     block ::= LINE_TOC
-         LINE_DEF_ABBREVIATION shift-reduce 98     def_abbreviation ::= LINE_DEF_ABBREVIATION
-               LINE_DEFINITION shift        4      
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-         LINE_FENCE_BACKTICK_3 shift-reduce 102    fenced_3 ::= LINE_FENCE_BACKTICK_3
-         LINE_FENCE_BACKTICK_4 shift-reduce 105    fenced_4 ::= LINE_FENCE_BACKTICK_4
-         LINE_FENCE_BACKTICK_5 shift-reduce 108    fenced_5 ::= LINE_FENCE_BACKTICK_5
-   LINE_FENCE_BACKTICK_START_3 shift-reduce 103    fenced_3 ::= LINE_FENCE_BACKTICK_START_3
-   LINE_FENCE_BACKTICK_START_4 shift-reduce 106    fenced_4 ::= LINE_FENCE_BACKTICK_START_4
-   LINE_FENCE_BACKTICK_START_5 shift-reduce 109    fenced_5 ::= LINE_FENCE_BACKTICK_START_5
-                     LINE_META shift-reduce 120    meta_block ::= LINE_META
+               LINE_DEFINITION shift        5      
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+         LINE_FENCE_BACKTICK_3 shift-reduce 105    fenced_3 ::= LINE_FENCE_BACKTICK_3
+         LINE_FENCE_BACKTICK_4 shift-reduce 108    fenced_4 ::= LINE_FENCE_BACKTICK_4
+         LINE_FENCE_BACKTICK_5 shift-reduce 111    fenced_5 ::= LINE_FENCE_BACKTICK_5
+   LINE_FENCE_BACKTICK_START_3 shift-reduce 106    fenced_3 ::= LINE_FENCE_BACKTICK_START_3
+   LINE_FENCE_BACKTICK_START_4 shift-reduce 109    fenced_4 ::= LINE_FENCE_BACKTICK_START_4
+   LINE_FENCE_BACKTICK_START_5 shift-reduce 112    fenced_5 ::= LINE_FENCE_BACKTICK_START_5
+                     LINE_META shift-reduce 123    meta_block ::= LINE_META
                          block shift-reduce 1      blocks ::= blocks block
-                    blockquote shift        30     
+                    blockquote shift        31     
               def_abbreviation shift-reduce 12     block ::= def_abbreviation
                   def_citation shift-reduce 13     block ::= def_citation
                   def_footnote shift-reduce 14     block ::= def_footnote
-                      def_link shift-reduce 15     block ::= def_link
-              definition_block shift-reduce 16     block ::= definition_block
-                         empty shift        40     
-                  fenced_block shift-reduce 18     block ::= fenced_block
-                    html_block shift        29     
-                 indented_code shift        27     
-                   list_bullet shift        37     
-                     list_enum shift        35     
-                    meta_block shift        28     
-                          para shift        13     
-                      setext_1 shift-reduce 25     block ::= setext_1
-                      setext_2 shift-reduce 26     block ::= setext_2
-                         table shift-reduce 27     block ::= table
-                 indented_line shift        27       /* because indented_line==indented_code */
-                          defs shift        32     
-                           def shift        32       /* because def==defs */
-                      fenced_3 shift        25     
-                      fenced_4 shift        24     
-                      fenced_5 shift        23     
-                   item_bullet shift        37       /* because item_bullet==list_bullet */
-                     item_enum shift        35       /* because item_enum==list_enum */
-                  table_header shift        7      
-                   header_rows shift        38     
-                      all_rows shift        14     
-                           row shift        14       /* because row==all_rows */
+                  def_glossary shift-reduce 15     block ::= def_glossary
+                      def_link shift-reduce 16     block ::= def_link
+              definition_block shift-reduce 17     block ::= definition_block
+                         empty shift        41     
+                  fenced_block shift-reduce 19     block ::= fenced_block
+                    html_block shift        30     
+                 indented_code shift        28     
+                   list_bullet shift        38     
+                     list_enum shift        36     
+                    meta_block shift        29     
+                          para shift        14     
+                      setext_1 shift-reduce 26     block ::= setext_1
+                      setext_2 shift-reduce 27     block ::= setext_2
+                         table shift-reduce 28     block ::= table
+                 indented_line shift        28       /* because indented_line==indented_code */
+                          defs shift        33     
+                           def shift        33       /* because def==defs */
+                      fenced_3 shift        26     
+                      fenced_4 shift        25     
+                      fenced_5 shift        24     
+                   item_bullet shift        38       /* because item_bullet==list_bullet */
+                     item_enum shift        36       /* because item_enum==list_enum */
+                  table_header shift        8      
+                   header_rows shift        39     
+                      all_rows shift        15     
+                           row shift        15       /* because row==all_rows */
 
 State 2:
           chunk ::= * chunk chunk_line
@@ -347,22 +357,22 @@ State 2:
           opt_ext_chunk ::= * chunk
           tail ::= * opt_ext_chunk
           tail ::= * nested_chunks
-          def_footnote ::= LINE_DEF_FOOTNOTE * tail
-     (96) def_footnote ::= LINE_DEF_FOOTNOTE *
+          def_glossary ::= LINE_DEF_GLOSSARY * tail
+     (99) def_glossary ::= LINE_DEF_GLOSSARY *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       96      ** Parsing conflict **
-                         empty shift        26     
-                         chunk shift             
-                    chunk_line shift               /* because chunk_line==chunk */
-                 nested_chunks shift        17     
-                  nested_chunk shift        17       /* because nested_chunk==nested_chunks */
-                 opt_ext_chunk shift-reduce 36     def_footnote ::= LINE_DEF_FOOTNOTE tail  /* because opt_ext_chunk==tail */
-                          tail shift-reduce 36     def_footnote ::= LINE_DEF_FOOTNOTE tail
-                     {default} reduce       96     def_footnote ::= LINE_DEF_FOOTNOTE
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       99      ** Parsing conflict **
+                         empty shift        27     
+                         chunk shift        10     
+                    chunk_line shift        10       /* because chunk_line==chunk */
+                 nested_chunks shift        18     
+                  nested_chunk shift        18       /* because nested_chunk==nested_chunks */
+                 opt_ext_chunk shift-reduce 38     def_glossary ::= LINE_DEF_GLOSSARY tail  /* because opt_ext_chunk==tail */
+                          tail shift-reduce 38     def_glossary ::= LINE_DEF_GLOSSARY tail
+                     {default} reduce       99     def_glossary ::= LINE_DEF_GLOSSARY
 
 State 3:
           chunk ::= * chunk chunk_line
@@ -377,22 +387,22 @@ State 3:
           opt_ext_chunk ::= * chunk
           tail ::= * opt_ext_chunk
           tail ::= * nested_chunks
-          def_citation ::= LINE_DEF_CITATION * tail
-     (95) def_citation ::= LINE_DEF_CITATION *
+          def_footnote ::= LINE_DEF_FOOTNOTE * tail
+     (98) def_footnote ::= LINE_DEF_FOOTNOTE *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       95      ** Parsing conflict **
-                         empty shift        26     
-                         chunk shift             
-                    chunk_line shift               /* because chunk_line==chunk */
-                 nested_chunks shift        17     
-                  nested_chunk shift        17       /* because nested_chunk==nested_chunks */
-                 opt_ext_chunk shift-reduce 35     def_citation ::= LINE_DEF_CITATION tail  /* because opt_ext_chunk==tail */
-                          tail shift-reduce 35     def_citation ::= LINE_DEF_CITATION tail
-                     {default} reduce       95     def_citation ::= LINE_DEF_CITATION
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       98      ** Parsing conflict **
+                         empty shift        27     
+                         chunk shift        10     
+                    chunk_line shift        10       /* because chunk_line==chunk */
+                 nested_chunks shift        18     
+                  nested_chunk shift        18       /* because nested_chunk==nested_chunks */
+                 opt_ext_chunk shift-reduce 37     def_footnote ::= LINE_DEF_FOOTNOTE tail  /* because opt_ext_chunk==tail */
+                          tail shift-reduce 37     def_footnote ::= LINE_DEF_FOOTNOTE tail
+                     {default} reduce       98     def_footnote ::= LINE_DEF_FOOTNOTE
 
 State 4:
           chunk ::= * chunk chunk_line
@@ -407,22 +417,22 @@ State 4:
           opt_ext_chunk ::= * chunk
           tail ::= * opt_ext_chunk
           tail ::= * nested_chunks
-          def ::= LINE_DEFINITION * tail
-     (41) def ::= LINE_DEFINITION *
+          def_citation ::= LINE_DEF_CITATION * tail
+     (97) def_citation ::= LINE_DEF_CITATION *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       41      ** Parsing conflict **
-                         empty shift        26     
-                         chunk shift             
-                    chunk_line shift               /* because chunk_line==chunk */
-                 nested_chunks shift        17     
-                  nested_chunk shift        17       /* because nested_chunk==nested_chunks */
-                 opt_ext_chunk shift-reduce 40     def ::= LINE_DEFINITION tail  /* because opt_ext_chunk==tail */
-                          tail shift-reduce 40     def ::= LINE_DEFINITION tail
-                     {default} reduce       41     def ::= LINE_DEFINITION
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       97      ** Parsing conflict **
+                         empty shift        27     
+                         chunk shift        10     
+                    chunk_line shift        10       /* because chunk_line==chunk */
+                 nested_chunks shift        18     
+                  nested_chunk shift        18       /* because nested_chunk==nested_chunks */
+                 opt_ext_chunk shift-reduce 36     def_citation ::= LINE_DEF_CITATION tail  /* because opt_ext_chunk==tail */
+                          tail shift-reduce 36     def_citation ::= LINE_DEF_CITATION tail
+                     {default} reduce       97     def_citation ::= LINE_DEF_CITATION
 
 State 5:
           chunk ::= * chunk chunk_line
@@ -433,24 +443,26 @@ State 5:
           nested_chunk ::= * empty indented_line chunk
           nested_chunk ::= * empty indented_line
           nested_chunk ::= * empty
-          ext_chunk ::= * chunk nested_chunks
+          opt_ext_chunk ::= * chunk nested_chunks
+          opt_ext_chunk ::= * chunk
+          tail ::= * opt_ext_chunk
+          tail ::= * nested_chunks
+          def ::= LINE_DEFINITION * tail
+     (43) def ::= LINE_DEFINITION *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-          item_enum ::= LINE_LIST_ENUMERATED * ext_chunk
-          item_enum ::= LINE_LIST_ENUMERATED * chunk
-          item_enum ::= LINE_LIST_ENUMERATED * nested_chunks
-     (70) item_enum ::= LINE_LIST_ENUMERATED *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       70      ** Parsing conflict **
-                         empty shift        26     
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       43      ** Parsing conflict **
+                         empty shift        27     
                          chunk shift        10     
                     chunk_line shift        10       /* because chunk_line==chunk */
-                 nested_chunks shift        19     
-                  nested_chunk shift        19       /* because nested_chunk==nested_chunks */
-                     ext_chunk shift-reduce 67     item_enum ::= LINE_LIST_ENUMERATED ext_chunk
-                     {default} reduce       70     item_enum ::= LINE_LIST_ENUMERATED
+                 nested_chunks shift        18     
+                  nested_chunk shift        18       /* because nested_chunk==nested_chunks */
+                 opt_ext_chunk shift-reduce 42     def ::= LINE_DEFINITION tail  /* because opt_ext_chunk==tail */
+                          tail shift-reduce 42     def ::= LINE_DEFINITION tail
+                     {default} reduce       43     def ::= LINE_DEFINITION
 
 State 6:
           chunk ::= * chunk chunk_line
@@ -464,25 +476,53 @@ State 6:
           ext_chunk ::= * chunk nested_chunks
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-          item_bullet ::= LINE_LIST_BULLETED * ext_chunk
-          item_bullet ::= LINE_LIST_BULLETED * chunk
-          item_bullet ::= LINE_LIST_BULLETED * nested_chunks
-     (65) item_bullet ::= LINE_LIST_BULLETED *
+          item_enum ::= LINE_LIST_ENUMERATED * ext_chunk
+          item_enum ::= LINE_LIST_ENUMERATED * chunk
+          item_enum ::= LINE_LIST_ENUMERATED * nested_chunks
+     (72) item_enum ::= LINE_LIST_ENUMERATED *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       65      ** Parsing conflict **
-                         empty shift        26     
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       72      ** Parsing conflict **
+                         empty shift        27     
                          chunk shift        11     
                     chunk_line shift        11       /* because chunk_line==chunk */
                  nested_chunks shift        20     
                   nested_chunk shift        20       /* because nested_chunk==nested_chunks */
-                     ext_chunk shift-reduce 62     item_bullet ::= LINE_LIST_BULLETED ext_chunk
-                     {default} reduce       65     item_bullet ::= LINE_LIST_BULLETED
+                     ext_chunk shift-reduce 69     item_enum ::= LINE_LIST_ENUMERATED ext_chunk
+                     {default} reduce       72     item_enum ::= LINE_LIST_ENUMERATED
 
 State 7:
+          chunk ::= * chunk chunk_line
+          chunk ::= * chunk_line
+          chunk_line ::= * LINE_CONTINUATION
+          nested_chunks ::= * nested_chunks nested_chunk
+          nested_chunks ::= * nested_chunk
+          nested_chunk ::= * empty indented_line chunk
+          nested_chunk ::= * empty indented_line
+          nested_chunk ::= * empty
+          ext_chunk ::= * chunk nested_chunks
+          empty ::= * empty LINE_EMPTY
+          empty ::= * LINE_EMPTY
+          item_bullet ::= LINE_LIST_BULLETED * ext_chunk
+          item_bullet ::= LINE_LIST_BULLETED * chunk
+          item_bullet ::= LINE_LIST_BULLETED * nested_chunks
+     (67) item_bullet ::= LINE_LIST_BULLETED *
+
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       67      ** Parsing conflict **
+                         empty shift        27     
+                         chunk shift        12     
+                    chunk_line shift        12       /* because chunk_line==chunk */
+                 nested_chunks shift        21     
+                  nested_chunk shift        21       /* because nested_chunk==nested_chunks */
+                     ext_chunk shift-reduce 64     item_bullet ::= LINE_LIST_BULLETED ext_chunk
+                     {default} reduce       67     item_bullet ::= LINE_LIST_BULLETED
+
+State 8:
           table ::= table_header * table_body
-    (124) table ::= table_header *
+    (127) table ::= table_header *
           header_rows ::= * header_rows LINE_TABLE
           header_rows ::= * LINE_TABLE
           table_body ::= * table_body table_section
@@ -494,19 +534,19 @@ State 7:
           row ::= * header_rows
           row ::= * LINE_TABLE_SEPARATOR
 
-          LINE_TABLE_SEPARATOR shift-reduce 129    row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       124     ** Parsing conflict **
-                    LINE_TABLE shift-reduce 125    header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       124     ** Parsing conflict **
-                    table_body shift        8      
-                   header_rows shift        39     
-                 table_section shift        8        /* because table_section==table_body */
-                      all_rows shift        12     
-                           row shift        12       /* because row==all_rows */
-                     {default} reduce       124    table ::= table_header
+          LINE_TABLE_SEPARATOR shift-reduce 132    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       127     ** Parsing conflict **
+                    LINE_TABLE shift-reduce 128    header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       127     ** Parsing conflict **
+                    table_body shift        9      
+                   header_rows shift        40     
+                 table_section shift        9        /* because table_section==table_body */
+                      all_rows shift        13     
+                           row shift        13       /* because row==all_rows */
+                     {default} reduce       127    table ::= table_header
 
-State 8:
-     (75) table ::= table_header table_body *
+State 9:
+     (77) table ::= table_header table_body *
           header_rows ::= * header_rows LINE_TABLE
           header_rows ::= * LINE_TABLE
           table_body ::= table_body * table_section
@@ -517,17 +557,17 @@ State 8:
           row ::= * header_rows
           row ::= * LINE_TABLE_SEPARATOR
 
-          LINE_TABLE_SEPARATOR shift-reduce 129    row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       75      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 125    header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       75      ** Parsing conflict **
-                   header_rows shift        39     
-                 table_section shift-reduce 78     table_body ::= table_body table_section
-                      all_rows shift        12     
-                           row shift        12       /* because row==all_rows */
-                     {default} reduce       75     table ::= table_header table_body
+          LINE_TABLE_SEPARATOR shift-reduce 132    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       77      ** Parsing conflict **
+                    LINE_TABLE shift-reduce 128    header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       77      ** Parsing conflict **
+                   header_rows shift        40     
+                 table_section shift-reduce 80     table_body ::= table_body table_section
+                      all_rows shift        13     
+                           row shift        13       /* because row==all_rows */
+                     {default} reduce       77     table ::= table_header table_body
 
-State 9:
+State 10:
           chunk ::= chunk * chunk_line
           chunk_line ::= * LINE_CONTINUATION
           nested_chunks ::= * nested_chunks nested_chunk
@@ -536,20 +576,20 @@ State 9:
           nested_chunk ::= * empty indented_line
           nested_chunk ::= * empty
           opt_ext_chunk ::= chunk * nested_chunks
-     (89) opt_ext_chunk ::= chunk *
+     (91) opt_ext_chunk ::= chunk *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       89      ** Parsing conflict **
-                         empty shift        26     
-                    chunk_line shift-reduce 28     chunk ::= chunk chunk_line
-                 nested_chunks shift        18     
-                  nested_chunk shift        18       /* because nested_chunk==nested_chunks */
-                     {default} reduce       89     opt_ext_chunk ::= chunk
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       91      ** Parsing conflict **
+                         empty shift        27     
+                    chunk_line shift-reduce 29     chunk ::= chunk chunk_line
+                 nested_chunks shift        19     
+                  nested_chunk shift        19       /* because nested_chunk==nested_chunks */
+                     {default} reduce       91     opt_ext_chunk ::= chunk
 
-State 10:
+State 11:
           chunk ::= chunk * chunk_line
           chunk_line ::= * LINE_CONTINUATION
           nested_chunks ::= * nested_chunks nested_chunk
@@ -560,18 +600,18 @@ State 10:
           ext_chunk ::= chunk * nested_chunks
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-     (68) item_enum ::= LINE_LIST_ENUMERATED chunk *
+     (70) item_enum ::= LINE_LIST_ENUMERATED chunk *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       68      ** Parsing conflict **
-                         empty shift        26     
-                    chunk_line shift-reduce 28     chunk ::= chunk chunk_line
-                 nested_chunks shift        22     
-                  nested_chunk shift        22       /* because nested_chunk==nested_chunks */
-                     {default} reduce       68     item_enum ::= LINE_LIST_ENUMERATED chunk
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       70      ** Parsing conflict **
+                         empty shift        27     
+                    chunk_line shift-reduce 29     chunk ::= chunk chunk_line
+                 nested_chunks shift        23     
+                  nested_chunk shift        23       /* because nested_chunk==nested_chunks */
+                     {default} reduce       70     item_enum ::= LINE_LIST_ENUMERATED chunk
 
-State 11:
+State 12:
           chunk ::= chunk * chunk_line
           chunk_line ::= * LINE_CONTINUATION
           nested_chunks ::= * nested_chunks nested_chunk
@@ -582,38 +622,38 @@ State 11:
           ext_chunk ::= chunk * nested_chunks
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-     (63) item_bullet ::= LINE_LIST_BULLETED chunk *
+     (65) item_bullet ::= LINE_LIST_BULLETED chunk *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       63      ** Parsing conflict **
-                         empty shift        26     
-                    chunk_line shift-reduce 28     chunk ::= chunk chunk_line
-                 nested_chunks shift        22     
-                  nested_chunk shift        22       /* because nested_chunk==nested_chunks */
-                     {default} reduce       63     item_bullet ::= LINE_LIST_BULLETED chunk
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       65      ** Parsing conflict **
+                         empty shift        27     
+                    chunk_line shift-reduce 29     chunk ::= chunk chunk_line
+                 nested_chunks shift        23     
+                  nested_chunk shift        23       /* because nested_chunk==nested_chunks */
+                     {default} reduce       65     item_bullet ::= LINE_LIST_BULLETED chunk
 
-State 12:
+State 13:
           header_rows ::= * header_rows LINE_TABLE
           header_rows ::= * LINE_TABLE
           table_section ::= all_rows * LINE_EMPTY
-     (80) table_section ::= all_rows *
+     (82) table_section ::= all_rows *
           all_rows ::= all_rows * row
           row ::= * header_rows
           row ::= * LINE_TABLE_SEPARATOR
 
-          LINE_TABLE_SEPARATOR shift-reduce 129    row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       80      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 125    header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       80      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 79     table_section ::= all_rows LINE_EMPTY
-                    LINE_EMPTY reduce       80      ** Parsing conflict **
-                   header_rows shift        39     
-                           row shift-reduce 81     all_rows ::= all_rows row
-                     {default} reduce       80     table_section ::= all_rows
+          LINE_TABLE_SEPARATOR shift-reduce 132    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       82      ** Parsing conflict **
+                    LINE_TABLE shift-reduce 128    header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       82      ** Parsing conflict **
+                    LINE_EMPTY shift-reduce 81     table_section ::= all_rows LINE_EMPTY
+                    LINE_EMPTY reduce       82      ** Parsing conflict **
+                   header_rows shift        40     
+                           row shift-reduce 83     all_rows ::= all_rows row
+                     {default} reduce       82     table_section ::= all_rows
 
-State 13:
-     (24) block ::= para *
+State 14:
+     (25) block ::= para *
           definition_block ::= para * defs
           defs ::= * defs def
           defs ::= * def
@@ -622,144 +662,144 @@ State 13:
           setext_1 ::= para * LINE_SETEXT_1
           setext_2 ::= para * LINE_SETEXT_2
 
-                 LINE_SETEXT_1 shift-reduce 73     setext_1 ::= para LINE_SETEXT_1
-                 LINE_SETEXT_2 shift-reduce 74     setext_2 ::= para LINE_SETEXT_2
-               LINE_DEFINITION shift        4      
-               LINE_DEFINITION reduce       24      ** Parsing conflict **
-                          defs shift        34     
-                           def shift        34       /* because def==defs */
-                     {default} reduce       24     block ::= para
+                 LINE_SETEXT_1 shift-reduce 75     setext_1 ::= para LINE_SETEXT_1
+                 LINE_SETEXT_2 shift-reduce 76     setext_2 ::= para LINE_SETEXT_2
+               LINE_DEFINITION shift        5      
+               LINE_DEFINITION reduce       25      ** Parsing conflict **
+                          defs shift        35     
+                           def shift        35       /* because def==defs */
+                     {default} reduce       25     block ::= para
 
-State 14:
+State 15:
           header_rows ::= * header_rows LINE_TABLE
           header_rows ::= * LINE_TABLE
           all_rows ::= all_rows * row
           row ::= * header_rows
           row ::= * LINE_TABLE_SEPARATOR
-     (82) para ::= all_rows *
+     (84) para ::= all_rows *
 
-          LINE_TABLE_SEPARATOR shift-reduce 129    row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       82      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 125    header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       82      ** Parsing conflict **
-                   header_rows shift        39     
-                           row shift-reduce 81     all_rows ::= all_rows row
-                     {default} reduce       82     para ::= all_rows
+          LINE_TABLE_SEPARATOR shift-reduce 132    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       84      ** Parsing conflict **
+                    LINE_TABLE shift-reduce 128    header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       84      ** Parsing conflict **
+                   header_rows shift        40     
+                           row shift-reduce 83     all_rows ::= all_rows row
+                     {default} reduce       84     para ::= all_rows
 
-State 15:
+State 16:
           chunk ::= * chunk chunk_line
           chunk ::= * chunk_line
           chunk_line ::= * LINE_CONTINUATION
           para ::= LINE_PLAIN * chunk
-    (123) para ::= LINE_PLAIN *
+    (126) para ::= LINE_PLAIN *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                         chunk shift        31     
-                    chunk_line shift        31       /* because chunk_line==chunk */
-                     {default} reduce       123    para ::= LINE_PLAIN
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                         chunk shift        32     
+                    chunk_line shift        32       /* because chunk_line==chunk */
+                     {default} reduce       126    para ::= LINE_PLAIN
 
-State 16:
+State 17:
           chunk ::= * chunk chunk_line
           chunk ::= * chunk_line
           chunk_line ::= * LINE_CONTINUATION
           def_link ::= LINE_DEF_LINK * chunk
-     (97) def_link ::= LINE_DEF_LINK *
+    (100) def_link ::= LINE_DEF_LINK *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                         chunk shift        33     
-                    chunk_line shift        33       /* because chunk_line==chunk */
-                     {default} reduce       97     def_link ::= LINE_DEF_LINK
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                         chunk shift        34     
+                    chunk_line shift        34       /* because chunk_line==chunk */
+                     {default} reduce       100    def_link ::= LINE_DEF_LINK
 
-State 17:
+State 18:
           nested_chunks ::= nested_chunks * nested_chunk
           nested_chunk ::= * empty indented_line chunk
           nested_chunk ::= * empty indented_line
           nested_chunk ::= * empty
-     (91) tail ::= nested_chunks *
+     (93) tail ::= nested_chunks *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
 
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       91      ** Parsing conflict **
-                         empty shift        26     
-                  nested_chunk shift-reduce 29     nested_chunks ::= nested_chunks nested_chunk
-                     {default} reduce       91     tail ::= nested_chunks
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       93      ** Parsing conflict **
+                         empty shift        27     
+                  nested_chunk shift-reduce 30     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       93     tail ::= nested_chunks
 
-State 18:
+State 19:
           nested_chunks ::= nested_chunks * nested_chunk
           nested_chunk ::= * empty indented_line chunk
           nested_chunk ::= * empty indented_line
           nested_chunk ::= * empty
-     (33) opt_ext_chunk ::= chunk nested_chunks *
+     (34) opt_ext_chunk ::= chunk nested_chunks *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
 
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       33      ** Parsing conflict **
-                         empty shift        26     
-                  nested_chunk shift-reduce 29     nested_chunks ::= nested_chunks nested_chunk
-                     {default} reduce       33     opt_ext_chunk ::= chunk nested_chunks
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       34      ** Parsing conflict **
+                         empty shift        27     
+                  nested_chunk shift-reduce 30     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       34     opt_ext_chunk ::= chunk nested_chunks
 
-State 19:
+State 20:
           nested_chunks ::= nested_chunks * nested_chunk
           nested_chunk ::= * empty indented_line chunk
           nested_chunk ::= * empty indented_line
           nested_chunk ::= * empty
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-     (69) item_enum ::= LINE_LIST_ENUMERATED nested_chunks *
+     (71) item_enum ::= LINE_LIST_ENUMERATED nested_chunks *
 
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       69      ** Parsing conflict **
-                         empty shift        26     
-                  nested_chunk shift-reduce 29     nested_chunks ::= nested_chunks nested_chunk
-                     {default} reduce       69     item_enum ::= LINE_LIST_ENUMERATED nested_chunks
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       71      ** Parsing conflict **
+                         empty shift        27     
+                  nested_chunk shift-reduce 30     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       71     item_enum ::= LINE_LIST_ENUMERATED nested_chunks
 
-State 20:
+State 21:
           nested_chunks ::= nested_chunks * nested_chunk
           nested_chunk ::= * empty indented_line chunk
           nested_chunk ::= * empty indented_line
           nested_chunk ::= * empty
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-     (64) item_bullet ::= LINE_LIST_BULLETED nested_chunks *
+     (66) item_bullet ::= LINE_LIST_BULLETED nested_chunks *
 
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       64      ** Parsing conflict **
-                         empty shift        26     
-                  nested_chunk shift-reduce 29     nested_chunks ::= nested_chunks nested_chunk
-                     {default} reduce       64     item_bullet ::= LINE_LIST_BULLETED nested_chunks
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       66      ** Parsing conflict **
+                         empty shift        27     
+                  nested_chunk shift-reduce 30     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       66     item_bullet ::= LINE_LIST_BULLETED nested_chunks
 
-State 21:
+State 22:
           chunk ::= * chunk chunk_line
           chunk ::= * chunk_line
           chunk_line ::= * LINE_CONTINUATION
           nested_chunk ::= empty indented_line * chunk
-     (31) nested_chunk ::= empty indented_line *
+     (32) nested_chunk ::= empty indented_line *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                         chunk shift        36     
-                    chunk_line shift        36       /* because chunk_line==chunk */
-                     {default} reduce       31     nested_chunk ::= empty indented_line
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                         chunk shift        37     
+                    chunk_line shift        37       /* because chunk_line==chunk */
+                     {default} reduce       32     nested_chunk ::= empty indented_line
 
-State 22:
+State 23:
           nested_chunks ::= nested_chunks * nested_chunk
           nested_chunk ::= * empty indented_line chunk
           nested_chunk ::= * empty indented_line
           nested_chunk ::= * empty
-     (32) ext_chunk ::= chunk nested_chunks *
+     (33) ext_chunk ::= chunk nested_chunks *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
 
-                    LINE_EMPTY shift-reduce 100    empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       32      ** Parsing conflict **
-                         empty shift        26     
-                  nested_chunk shift-reduce 29     nested_chunks ::= nested_chunks nested_chunk
-                     {default} reduce       32     ext_chunk ::= chunk nested_chunks
+                    LINE_EMPTY shift-reduce 103    empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       33      ** Parsing conflict **
+                         empty shift        27     
+                  nested_chunk shift-reduce 30     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       33     ext_chunk ::= chunk nested_chunks
 
-State 23:
+State 24:
           fenced_block ::= fenced_5 * LINE_FENCE_BACKTICK_5
-    (107) fenced_block ::= fenced_5 *
+    (110) fenced_block ::= fenced_5 *
           fenced_5 ::= fenced_5 * fenced_line
           fenced_5 ::= fenced_5 * LINE_FENCE_BACKTICK_3
           fenced_5 ::= fenced_5 * LINE_FENCE_BACKTICK_START_3
@@ -770,28 +810,28 @@ State 23:
           fenced_line ::= * LINE_SETEXT_1
           fenced_line ::= * LINE_SETEXT_2
 
-                 LINE_SETEXT_1 shift-reduce 112    fenced_line ::= LINE_SETEXT_1
-                 LINE_SETEXT_2 shift-reduce 113    fenced_line ::= LINE_SETEXT_2
-             LINE_CONTINUATION shift-reduce 110    fenced_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 111    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       107     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_3 shift-reduce 54     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3
-         LINE_FENCE_BACKTICK_3 reduce       107     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_4 shift-reduce 56     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4
-         LINE_FENCE_BACKTICK_4 reduce       107     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_5 shift-reduce 52     fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5
-         LINE_FENCE_BACKTICK_5 reduce       107     ** Parsing conflict **
-   LINE_FENCE_BACKTICK_START_3 shift-reduce 55     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3
-   LINE_FENCE_BACKTICK_START_3 reduce       107     ** Parsing conflict **
-   LINE_FENCE_BACKTICK_START_4 shift-reduce 57     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4
-   LINE_FENCE_BACKTICK_START_4 reduce       107     ** Parsing conflict **
-                   fenced_line shift-reduce 53     fenced_5 ::= fenced_5 fenced_line
-                     {default} reduce       107    fenced_block ::= fenced_5
+                 LINE_SETEXT_1 shift-reduce 115    fenced_line ::= LINE_SETEXT_1
+                 LINE_SETEXT_2 shift-reduce 116    fenced_line ::= LINE_SETEXT_2
+             LINE_CONTINUATION shift-reduce 113    fenced_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 114    fenced_line ::= LINE_EMPTY
+                    LINE_EMPTY reduce       110     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_3 shift-reduce 56     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3
+         LINE_FENCE_BACKTICK_3 reduce       110     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_4 shift-reduce 58     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4
+         LINE_FENCE_BACKTICK_4 reduce       110     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_5 shift-reduce 54     fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5
+         LINE_FENCE_BACKTICK_5 reduce       110     ** Parsing conflict **
+   LINE_FENCE_BACKTICK_START_3 shift-reduce 57     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3
+   LINE_FENCE_BACKTICK_START_3 reduce       110     ** Parsing conflict **
+   LINE_FENCE_BACKTICK_START_4 shift-reduce 59     fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4
+   LINE_FENCE_BACKTICK_START_4 reduce       110     ** Parsing conflict **
+                   fenced_line shift-reduce 55     fenced_5 ::= fenced_5 fenced_line
+                     {default} reduce       110    fenced_block ::= fenced_5
 
-State 24:
+State 25:
           fenced_block ::= fenced_4 * LINE_FENCE_BACKTICK_4
           fenced_block ::= fenced_4 * LINE_FENCE_BACKTICK_5
-    (104) fenced_block ::= fenced_4 *
+    (107) fenced_block ::= fenced_4 *
           fenced_4 ::= fenced_4 * fenced_line
           fenced_4 ::= fenced_4 * LINE_FENCE_BACKTICK_3
           fenced_4 ::= fenced_4 * LINE_FENCE_BACKTICK_START_3
@@ -800,217 +840,217 @@ State 24:
           fenced_line ::= * LINE_SETEXT_1
           fenced_line ::= * LINE_SETEXT_2
 
-                 LINE_SETEXT_1 shift-reduce 112    fenced_line ::= LINE_SETEXT_1
-                 LINE_SETEXT_2 shift-reduce 113    fenced_line ::= LINE_SETEXT_2
-             LINE_CONTINUATION shift-reduce 110    fenced_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 111    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       104     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_3 shift-reduce 50     fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3
-         LINE_FENCE_BACKTICK_3 reduce       104     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_4 shift-reduce 47     fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4
-         LINE_FENCE_BACKTICK_4 reduce       104     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_5 shift-reduce 48     fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5
-         LINE_FENCE_BACKTICK_5 reduce       104     ** Parsing conflict **
-   LINE_FENCE_BACKTICK_START_3 shift-reduce 51     fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3
-   LINE_FENCE_BACKTICK_START_3 reduce       104     ** Parsing conflict **
-                   fenced_line shift-reduce 49     fenced_4 ::= fenced_4 fenced_line
-                     {default} reduce       104    fenced_block ::= fenced_4
+                 LINE_SETEXT_1 shift-reduce 115    fenced_line ::= LINE_SETEXT_1
+                 LINE_SETEXT_2 shift-reduce 116    fenced_line ::= LINE_SETEXT_2
+             LINE_CONTINUATION shift-reduce 113    fenced_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 114    fenced_line ::= LINE_EMPTY
+                    LINE_EMPTY reduce       107     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_3 shift-reduce 52     fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3
+         LINE_FENCE_BACKTICK_3 reduce       107     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_4 shift-reduce 49     fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4
+         LINE_FENCE_BACKTICK_4 reduce       107     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_5 shift-reduce 50     fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5
+         LINE_FENCE_BACKTICK_5 reduce       107     ** Parsing conflict **
+   LINE_FENCE_BACKTICK_START_3 shift-reduce 53     fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3
+   LINE_FENCE_BACKTICK_START_3 reduce       107     ** Parsing conflict **
+                   fenced_line shift-reduce 51     fenced_4 ::= fenced_4 fenced_line
+                     {default} reduce       107    fenced_block ::= fenced_4
 
-State 25:
+State 26:
           fenced_block ::= fenced_3 * LINE_FENCE_BACKTICK_3
           fenced_block ::= fenced_3 * LINE_FENCE_BACKTICK_4
           fenced_block ::= fenced_3 * LINE_FENCE_BACKTICK_5
-    (101) fenced_block ::= fenced_3 *
+    (104) fenced_block ::= fenced_3 *
           fenced_3 ::= fenced_3 * fenced_line
           fenced_line ::= * LINE_CONTINUATION
           fenced_line ::= * LINE_EMPTY
           fenced_line ::= * LINE_SETEXT_1
           fenced_line ::= * LINE_SETEXT_2
 
-                 LINE_SETEXT_1 shift-reduce 112    fenced_line ::= LINE_SETEXT_1
-                 LINE_SETEXT_2 shift-reduce 113    fenced_line ::= LINE_SETEXT_2
-             LINE_CONTINUATION shift-reduce 110    fenced_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 111    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       101     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_3 shift-reduce 43     fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3
-         LINE_FENCE_BACKTICK_3 reduce       101     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_4 shift-reduce 44     fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4
-         LINE_FENCE_BACKTICK_4 reduce       101     ** Parsing conflict **
-         LINE_FENCE_BACKTICK_5 shift-reduce 45     fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5
-         LINE_FENCE_BACKTICK_5 reduce       101     ** Parsing conflict **
-                   fenced_line shift-reduce 46     fenced_3 ::= fenced_3 fenced_line
-                     {default} reduce       101    fenced_block ::= fenced_3
+                 LINE_SETEXT_1 shift-reduce 115    fenced_line ::= LINE_SETEXT_1
+                 LINE_SETEXT_2 shift-reduce 116    fenced_line ::= LINE_SETEXT_2
+             LINE_CONTINUATION shift-reduce 113    fenced_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 114    fenced_line ::= LINE_EMPTY
+                    LINE_EMPTY reduce       104     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_3 shift-reduce 45     fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3
+         LINE_FENCE_BACKTICK_3 reduce       104     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_4 shift-reduce 46     fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4
+         LINE_FENCE_BACKTICK_4 reduce       104     ** Parsing conflict **
+         LINE_FENCE_BACKTICK_5 shift-reduce 47     fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5
+         LINE_FENCE_BACKTICK_5 reduce       104     ** Parsing conflict **
+                   fenced_line shift-reduce 48     fenced_3 ::= fenced_3 fenced_line
+                     {default} reduce       104    fenced_block ::= fenced_3
 
-State 26:
+State 27:
           nested_chunk ::= empty * indented_line chunk
           nested_chunk ::= empty * indented_line
-     (86) nested_chunk ::= empty *
+     (88) nested_chunk ::= empty *
           indented_line ::= * LINE_INDENTED_TAB
           indented_line ::= * LINE_INDENTED_SPACE
           empty ::= empty * LINE_EMPTY
 
-             LINE_INDENTED_TAB shift-reduce 87     indented_line ::= LINE_INDENTED_TAB
-             LINE_INDENTED_TAB reduce       86      ** Parsing conflict **
-           LINE_INDENTED_SPACE shift-reduce 88     indented_line ::= LINE_INDENTED_SPACE
-           LINE_INDENTED_SPACE reduce       86      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 42     empty ::= empty LINE_EMPTY
-                    LINE_EMPTY reduce       86      ** Parsing conflict **
-                 indented_line shift        21     
-                     {default} reduce       86     nested_chunk ::= empty
+             LINE_INDENTED_TAB shift-reduce 89     indented_line ::= LINE_INDENTED_TAB
+             LINE_INDENTED_TAB reduce       88      ** Parsing conflict **
+           LINE_INDENTED_SPACE shift-reduce 90     indented_line ::= LINE_INDENTED_SPACE
+           LINE_INDENTED_SPACE reduce       88      ** Parsing conflict **
+                    LINE_EMPTY shift-reduce 44     empty ::= empty LINE_EMPTY
+                    LINE_EMPTY reduce       88      ** Parsing conflict **
+                 indented_line shift        22     
+                     {default} reduce       88     nested_chunk ::= empty
 
-State 27:
-     (20) block ::= indented_code *
+State 28:
+     (21) block ::= indented_code *
           indented_line ::= * LINE_INDENTED_TAB
           indented_line ::= * LINE_INDENTED_SPACE
           indented_code ::= indented_code * indented_line
           indented_code ::= indented_code * LINE_EMPTY
 
-             LINE_INDENTED_TAB shift-reduce 87     indented_line ::= LINE_INDENTED_TAB
-             LINE_INDENTED_TAB reduce       20      ** Parsing conflict **
-           LINE_INDENTED_SPACE shift-reduce 88     indented_line ::= LINE_INDENTED_SPACE
-           LINE_INDENTED_SPACE reduce       20      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 60     indented_code ::= indented_code LINE_EMPTY
-                    LINE_EMPTY reduce       20      ** Parsing conflict **
-                 indented_line shift-reduce 59     indented_code ::= indented_code indented_line
-                     {default} reduce       20     block ::= indented_code
+             LINE_INDENTED_TAB shift-reduce 89     indented_line ::= LINE_INDENTED_TAB
+             LINE_INDENTED_TAB reduce       21      ** Parsing conflict **
+           LINE_INDENTED_SPACE shift-reduce 90     indented_line ::= LINE_INDENTED_SPACE
+           LINE_INDENTED_SPACE reduce       21      ** Parsing conflict **
+                    LINE_EMPTY shift-reduce 62     indented_code ::= indented_code LINE_EMPTY
+                    LINE_EMPTY reduce       21      ** Parsing conflict **
+                 indented_line shift-reduce 61     indented_code ::= indented_code indented_line
+                     {default} reduce       21     block ::= indented_code
 
-State 28:
-     (23) block ::= meta_block *
+State 29:
+     (24) block ::= meta_block *
           meta_block ::= meta_block * meta_line
           meta_line ::= * LINE_META
           meta_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 122    meta_line ::= LINE_CONTINUATION
-                     LINE_META shift-reduce 121    meta_line ::= LINE_META
-                     LINE_META reduce       23      ** Parsing conflict **
-                     meta_line shift-reduce 71     meta_block ::= meta_block meta_line
-                     {default} reduce       23     block ::= meta_block
+             LINE_CONTINUATION shift-reduce 125    meta_line ::= LINE_CONTINUATION
+                     LINE_META shift-reduce 124    meta_line ::= LINE_META
+                     LINE_META reduce       24      ** Parsing conflict **
+                     meta_line shift-reduce 73     meta_block ::= meta_block meta_line
+                     {default} reduce       24     block ::= meta_block
 
-State 29:
-     (19) block ::= html_block *
+State 30:
+     (20) block ::= html_block *
           html_block ::= html_block * html_line
           html_line ::= * LINE_CONTINUATION
           html_line ::= * LINE_HTML
 
-             LINE_CONTINUATION shift-reduce 115    html_line ::= LINE_CONTINUATION
-                     LINE_HTML shift-reduce 116    html_line ::= LINE_HTML
-                     LINE_HTML reduce       19      ** Parsing conflict **
-                     html_line shift-reduce 58     html_block ::= html_block html_line
-                     {default} reduce       19     block ::= html_block
+             LINE_CONTINUATION shift-reduce 118    html_line ::= LINE_CONTINUATION
+                     LINE_HTML shift-reduce 119    html_line ::= LINE_HTML
+                     LINE_HTML reduce       20      ** Parsing conflict **
+                     html_line shift-reduce 60     html_block ::= html_block html_line
+                     {default} reduce       20     block ::= html_block
 
-State 30:
+State 31:
      (11) block ::= blockquote *
           blockquote ::= blockquote * quote_line
           quote_line ::= * LINE_BLOCKQUOTE
           quote_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 94     quote_line ::= LINE_CONTINUATION
-               LINE_BLOCKQUOTE shift-reduce 93     quote_line ::= LINE_BLOCKQUOTE
+             LINE_CONTINUATION shift-reduce 96     quote_line ::= LINE_CONTINUATION
+               LINE_BLOCKQUOTE shift-reduce 95     quote_line ::= LINE_BLOCKQUOTE
                LINE_BLOCKQUOTE reduce       11      ** Parsing conflict **
-                    quote_line shift-reduce 34     blockquote ::= blockquote quote_line
+                    quote_line shift-reduce 35     blockquote ::= blockquote quote_line
                      {default} reduce       11     block ::= blockquote
 
-State 31:
+State 32:
           chunk ::= chunk * chunk_line
           chunk_line ::= * LINE_CONTINUATION
-     (72) para ::= LINE_PLAIN chunk *
+     (74) para ::= LINE_PLAIN chunk *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    chunk_line shift-reduce 28     chunk ::= chunk chunk_line
-                     {default} reduce       72     para ::= LINE_PLAIN chunk
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    chunk_line shift-reduce 29     chunk ::= chunk chunk_line
+                     {default} reduce       74     para ::= LINE_PLAIN chunk
 
-State 32:
+State 33:
           defs ::= defs * def
           def ::= * LINE_DEFINITION tail
           def ::= * LINE_DEFINITION
-    (130) para ::= defs *
+    (133) para ::= defs *
 
-               LINE_DEFINITION shift        4      
-               LINE_DEFINITION reduce       130     ** Parsing conflict **
-                           def shift-reduce 39     defs ::= defs def
-                     {default} reduce       130    para ::= defs
+               LINE_DEFINITION shift        5      
+               LINE_DEFINITION reduce       133     ** Parsing conflict **
+                           def shift-reduce 41     defs ::= defs def
+                     {default} reduce       133    para ::= defs
 
-State 33:
+State 34:
           chunk ::= chunk * chunk_line
           chunk_line ::= * LINE_CONTINUATION
-     (37) def_link ::= LINE_DEF_LINK chunk *
+     (39) def_link ::= LINE_DEF_LINK chunk *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    chunk_line shift-reduce 28     chunk ::= chunk chunk_line
-                     {default} reduce       37     def_link ::= LINE_DEF_LINK chunk
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    chunk_line shift-reduce 29     chunk ::= chunk chunk_line
+                     {default} reduce       39     def_link ::= LINE_DEF_LINK chunk
 
-State 34:
-     (38) definition_block ::= para defs *
+State 35:
+     (40) definition_block ::= para defs *
           defs ::= defs * def
           def ::= * LINE_DEFINITION tail
           def ::= * LINE_DEFINITION
 
-               LINE_DEFINITION shift        4      
-               LINE_DEFINITION reduce       38      ** Parsing conflict **
-                           def shift-reduce 39     defs ::= defs def
-                     {default} reduce       38     definition_block ::= para defs
+               LINE_DEFINITION shift        5      
+               LINE_DEFINITION reduce       40      ** Parsing conflict **
+                           def shift-reduce 41     defs ::= defs def
+                     {default} reduce       40     definition_block ::= para defs
 
-State 35:
-     (22) block ::= list_enum *
+State 36:
+     (23) block ::= list_enum *
           list_enum ::= list_enum * item_enum
           item_enum ::= * LINE_LIST_ENUMERATED ext_chunk
           item_enum ::= * LINE_LIST_ENUMERATED chunk
           item_enum ::= * LINE_LIST_ENUMERATED nested_chunks
           item_enum ::= * LINE_LIST_ENUMERATED
 
-          LINE_LIST_ENUMERATED shift        5      
-          LINE_LIST_ENUMERATED reduce       22      ** Parsing conflict **
-                     item_enum shift-reduce 66     list_enum ::= list_enum item_enum
-                     {default} reduce       22     block ::= list_enum
+          LINE_LIST_ENUMERATED shift        6      
+          LINE_LIST_ENUMERATED reduce       23      ** Parsing conflict **
+                     item_enum shift-reduce 68     list_enum ::= list_enum item_enum
+                     {default} reduce       23     block ::= list_enum
 
-State 36:
+State 37:
           chunk ::= chunk * chunk_line
           chunk_line ::= * LINE_CONTINUATION
-     (30) nested_chunk ::= empty indented_line chunk *
+     (31) nested_chunk ::= empty indented_line chunk *
 
-             LINE_CONTINUATION shift-reduce 84     chunk_line ::= LINE_CONTINUATION
-                    chunk_line shift-reduce 28     chunk ::= chunk chunk_line
-                     {default} reduce       30     nested_chunk ::= empty indented_line chunk
+             LINE_CONTINUATION shift-reduce 86     chunk_line ::= LINE_CONTINUATION
+                    chunk_line shift-reduce 29     chunk ::= chunk chunk_line
+                     {default} reduce       31     nested_chunk ::= empty indented_line chunk
 
-State 37:
-     (21) block ::= list_bullet *
+State 38:
+     (22) block ::= list_bullet *
           list_bullet ::= list_bullet * item_bullet
           item_bullet ::= * LINE_LIST_BULLETED ext_chunk
           item_bullet ::= * LINE_LIST_BULLETED chunk
           item_bullet ::= * LINE_LIST_BULLETED nested_chunks
           item_bullet ::= * LINE_LIST_BULLETED
 
-            LINE_LIST_BULLETED shift        6      
-            LINE_LIST_BULLETED reduce       21      ** Parsing conflict **
-                   item_bullet shift-reduce 61     list_bullet ::= list_bullet item_bullet
-                     {default} reduce       21     block ::= list_bullet
+            LINE_LIST_BULLETED shift        7      
+            LINE_LIST_BULLETED reduce       22      ** Parsing conflict **
+                   item_bullet shift-reduce 63     list_bullet ::= list_bullet item_bullet
+                     {default} reduce       22     block ::= list_bullet
 
-State 38:
+State 39:
           table_header ::= header_rows * LINE_TABLE_SEPARATOR
           header_rows ::= header_rows * LINE_TABLE
-    (128) row ::= header_rows *
+    (131) row ::= header_rows *
 
-          LINE_TABLE_SEPARATOR shift-reduce 76     table_header ::= header_rows LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       128     ** Parsing conflict **
-                    LINE_TABLE shift-reduce 77     header_rows ::= header_rows LINE_TABLE
-                    LINE_TABLE reduce       128     ** Parsing conflict **
-                     {default} reduce       128    row ::= header_rows
+          LINE_TABLE_SEPARATOR shift-reduce 78     table_header ::= header_rows LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       131     ** Parsing conflict **
+                    LINE_TABLE shift-reduce 79     header_rows ::= header_rows LINE_TABLE
+                    LINE_TABLE reduce       131     ** Parsing conflict **
+                     {default} reduce       131    row ::= header_rows
 
-State 39:
+State 40:
           header_rows ::= header_rows * LINE_TABLE
-    (128) row ::= header_rows *
+    (131) row ::= header_rows *
 
-                    LINE_TABLE shift-reduce 77     header_rows ::= header_rows LINE_TABLE
-                    LINE_TABLE reduce       128     ** Parsing conflict **
-                     {default} reduce       128    row ::= header_rows
+                    LINE_TABLE shift-reduce 79     header_rows ::= header_rows LINE_TABLE
+                    LINE_TABLE reduce       131     ** Parsing conflict **
+                     {default} reduce       131    row ::= header_rows
 
-State 40:
-     (17) block ::= empty *
+State 41:
+     (18) block ::= empty *
           empty ::= empty * LINE_EMPTY
 
-                    LINE_EMPTY shift-reduce 42     empty ::= empty LINE_EMPTY
-                    LINE_EMPTY reduce       17      ** Parsing conflict **
-                     {default} reduce       17     block ::= empty
+                    LINE_EMPTY shift-reduce 44     empty ::= empty LINE_EMPTY
+                    LINE_EMPTY reduce       18      ** Parsing conflict **
+                     {default} reduce       18     block ::= empty
 
 ----------------------------------------------------
 Symbols:
@@ -1034,65 +1074,67 @@ Symbols:
    17: LINE_BLOCKQUOTE
    18: LINE_LIST_BULLETED
    19: LINE_LIST_ENUMERATED
-   20: LINE_DEF_CITATION
-   21: LINE_DEF_FOOTNOTE
-   22: LINE_DEF_LINK
-   23: LINE_FENCE_BACKTICK
-   24: LINE_FENCE_BACKTICK_START
-   25: LINE_TOC
-   26: LINE_DEF_ABBREVIATION
-   27: LINE_DEFINITION
-   28: LINE_EMPTY
-   29: LINE_FENCE_BACKTICK_3
-   30: LINE_FENCE_BACKTICK_4
-   31: LINE_FENCE_BACKTICK_5
-   32: LINE_FENCE_BACKTICK_START_3
-   33: LINE_FENCE_BACKTICK_START_4
-   34: LINE_FENCE_BACKTICK_START_5
-   35: LINE_META
-   36: error:
-   37: doc: LINE_HR LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_TOC LINE_DEF_ABBREVIATION LINE_DEFINITION LINE_EMPTY LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5 LINE_META
-   38: blocks: LINE_HR LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_TOC LINE_DEF_ABBREVIATION LINE_DEFINITION LINE_EMPTY LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5 LINE_META
-   39: block: LINE_HR LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_TOC LINE_DEF_ABBREVIATION LINE_DEFINITION LINE_EMPTY LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5 LINE_META
-   40: blockquote: LINE_BLOCKQUOTE
-   41: def_abbreviation: LINE_DEF_ABBREVIATION
-   42: def_citation: LINE_DEF_CITATION
-   43: def_footnote: LINE_DEF_FOOTNOTE
-   44: def_link: LINE_DEF_LINK
-   45: definition_block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
-   46: empty: LINE_EMPTY
-   47: fenced_block: LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5
-   48: html_block: LINE_HTML
-   49: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE
-   50: list_bullet: LINE_LIST_BULLETED
-   51: list_enum: LINE_LIST_ENUMERATED
-   52: meta_block: LINE_META
-   53: para: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
-   54: setext_1: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
-   55: setext_2: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
-   56: table: LINE_TABLE
-   57: chunk: LINE_CONTINUATION
-   58: chunk_line: LINE_CONTINUATION
-   59: nested_chunks: LINE_EMPTY
-   60: nested_chunk: LINE_EMPTY
-   61: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE
-   62: ext_chunk: LINE_CONTINUATION
-   63: opt_ext_chunk: LINE_CONTINUATION
-   64: tail: LINE_CONTINUATION LINE_EMPTY
-   65: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE
-   66: defs: LINE_DEFINITION
-   67: def: LINE_DEFINITION
-   68: fenced_3: LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_START_3
-   69: fenced_line: LINE_SETEXT_1 LINE_SETEXT_2 LINE_CONTINUATION LINE_EMPTY
-   70: fenced_4: LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_START_4
-   71: fenced_5: LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_5
-   72: html_line: LINE_CONTINUATION LINE_HTML
-   73: item_bullet: LINE_LIST_BULLETED
-   74: item_enum: LINE_LIST_ENUMERATED
-   75: meta_line: LINE_CONTINUATION LINE_META
-   76: table_header: LINE_TABLE
-   77: table_body: LINE_TABLE_SEPARATOR LINE_TABLE
-   78: header_rows: LINE_TABLE
-   79: table_section: LINE_TABLE_SEPARATOR LINE_TABLE
-   80: all_rows: LINE_TABLE_SEPARATOR LINE_TABLE
-   81: row: LINE_TABLE_SEPARATOR LINE_TABLE
+   20: LINE_DEF_ABBREVIATION
+   21: LINE_DEF_CITATION
+   22: LINE_DEF_FOOTNOTE
+   23: LINE_DEF_GLOSSARY
+   24: LINE_DEF_LINK
+   25: LINE_FENCE_BACKTICK
+   26: LINE_FENCE_BACKTICK_START
+   27: LINE_TOC
+   28: LINE_DEFINITION
+   29: LINE_EMPTY
+   30: LINE_FENCE_BACKTICK_3
+   31: LINE_FENCE_BACKTICK_4
+   32: LINE_FENCE_BACKTICK_5
+   33: LINE_FENCE_BACKTICK_START_3
+   34: LINE_FENCE_BACKTICK_START_4
+   35: LINE_FENCE_BACKTICK_START_5
+   36: LINE_META
+   37: error:
+   38: doc: LINE_HR LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_ABBREVIATION LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_GLOSSARY LINE_DEF_LINK LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5 LINE_META
+   39: blocks: LINE_HR LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_ABBREVIATION LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_GLOSSARY LINE_DEF_LINK LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5 LINE_META
+   40: block: LINE_HR LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_ABBREVIATION LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_GLOSSARY LINE_DEF_LINK LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5 LINE_META
+   41: blockquote: LINE_BLOCKQUOTE
+   42: def_abbreviation: LINE_DEF_ABBREVIATION
+   43: def_citation: LINE_DEF_CITATION
+   44: def_footnote: LINE_DEF_FOOTNOTE
+   45: def_glossary: LINE_DEF_GLOSSARY
+   46: def_link: LINE_DEF_LINK
+   47: definition_block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
+   48: empty: LINE_EMPTY
+   49: fenced_block: LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_3 LINE_FENCE_BACKTICK_START_4 LINE_FENCE_BACKTICK_START_5
+   50: html_block: LINE_HTML
+   51: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE
+   52: list_bullet: LINE_LIST_BULLETED
+   53: list_enum: LINE_LIST_ENUMERATED
+   54: meta_block: LINE_META
+   55: para: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
+   56: setext_1: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
+   57: setext_2: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
+   58: table: LINE_TABLE
+   59: chunk: LINE_CONTINUATION
+   60: chunk_line: LINE_CONTINUATION
+   61: nested_chunks: LINE_EMPTY
+   62: nested_chunk: LINE_EMPTY
+   63: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE
+   64: ext_chunk: LINE_CONTINUATION
+   65: opt_ext_chunk: LINE_CONTINUATION
+   66: tail: LINE_CONTINUATION LINE_EMPTY
+   67: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE
+   68: defs: LINE_DEFINITION
+   69: def: LINE_DEFINITION
+   70: fenced_3: LINE_FENCE_BACKTICK_3 LINE_FENCE_BACKTICK_START_3
+   71: fenced_line: LINE_SETEXT_1 LINE_SETEXT_2 LINE_CONTINUATION LINE_EMPTY
+   72: fenced_4: LINE_FENCE_BACKTICK_4 LINE_FENCE_BACKTICK_START_4
+   73: fenced_5: LINE_FENCE_BACKTICK_5 LINE_FENCE_BACKTICK_START_5
+   74: html_line: LINE_CONTINUATION LINE_HTML
+   75: item_bullet: LINE_LIST_BULLETED
+   76: item_enum: LINE_LIST_ENUMERATED
+   77: meta_line: LINE_CONTINUATION LINE_META
+   78: table_header: LINE_TABLE
+   79: table_body: LINE_TABLE_SEPARATOR LINE_TABLE
+   80: header_rows: LINE_TABLE
+   81: table_section: LINE_TABLE_SEPARATOR LINE_TABLE
+   82: all_rows: LINE_TABLE_SEPARATOR LINE_TABLE
+   83: row: LINE_TABLE_SEPARATOR LINE_TABLE
index b1abf812facb7fe93750f7febe092bb3cc73fa5e..0221e1923f45a1c4e6affe7067e7f8ce0ba352c3 100644 (file)
@@ -68,7 +68,9 @@
 
 %fallback LINE_CONTINUATION LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE  LINE_TABLE.
 
-%fallback LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START.
+%fallback LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE
+LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_ABBREVIATION LINE_DEF_CITATION LINE_DEF_FOOTNOTE
+LINE_DEF_GLOSSARY LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START.
 
 doc                                    ::= blocks(B).                                                          { engine->root = B; }
 
@@ -115,6 +117,7 @@ block(A)                    ::= blockquote(B).                      { A = token_new_parent(B, BLOCK_BLOCKQUOTE); rec
 block(A)                       ::= def_abbreviation(B).        { A = token_new_parent(B, BLOCK_DEF_ABBREVIATION); stack_push(engine->definition_stack, A); }
 block(A)                       ::= def_citation(B).            { A = token_new_parent(B, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, A); }
 block(A)                       ::= def_footnote(B).            { A = token_new_parent(B, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, A); recursive_parse_indent(engine, A); }
+block(A)                       ::= def_glossary(B).            { A = token_new_parent(B, BLOCK_DEF_GLOSSARY); stack_push(engine->definition_stack, A); recursive_parse_indent(engine, A); }
 block(A)                       ::= def_link(B).                        { A = token_new_parent(B, BLOCK_DEF_LINK); stack_push(engine->definition_stack, A); }
 block(A)                       ::= definition_block(B).        { A = token_new_parent(B, BLOCK_DEFLIST); }
 block(A)                       ::= empty(B).                           { A = token_new_parent(B, BLOCK_EMPTY); }
@@ -194,6 +197,9 @@ def_citation                ::= LINE_DEF_CITATION.
 def_footnote(A)                ::= LINE_DEF_FOOTNOTE(B) tail(C).                       { A = B; token_chain_append(B, C); }
 def_footnote           ::= LINE_DEF_FOOTNOTE.
 
+def_glossary(A)                ::= LINE_DEF_GLOSSARY(B) tail(C).                       { A = B; token_chain_append(B, C); }
+def_glossary           ::= LINE_DEF_GLOSSARY.
+
 def_link(A)                    ::= LINE_DEF_LINK(B) chunk(C).                          { A = B; token_chain_append(B, C); }
 def_link                       ::= LINE_DEF_LINK.
 
index 6fddf63620f7640853f1ed8eb93410ed5fd58680..44b1b8f1d8a23fdb31aa67fe5eef2369276d0435 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.14.3 on Thu Mar  2 09:19:45 2017 */
+/* Generated by re2c 0.14.3 on Thu Mar  2 09:54:25 2017 */
 /**
 
        MultiMarkdown 6 -- Lightweight markup processor to produce HTML, LaTeX, and more.
@@ -3641,6 +3641,7 @@ yy177:
        
 }
 
+
 size_t scan_ref_foot(const char * c) {
        const char * marker = NULL;
        const char * start = c;
@@ -3742,14 +3743,13 @@ yy195:
 }
 
 
-size_t scan_ref_link_no_attributes(const char * c) {
+size_t scan_ref_glossary(const char * c) {
        const char * marker = NULL;
        const char * start = c;
 
 
 {
        char yych;
-       unsigned int yyaccept = 0;
        yych = *c;
        switch (yych) {
        case '\n':      goto yy198;
@@ -3760,962 +3760,1064 @@ size_t scan_ref_link_no_attributes(const char * c) {
 yy198:
        { return 0; }
 yy199:
-       yyaccept = 0;
        yych = *(marker = ++c);
        switch (yych) {
-       case ' ':       goto yy335;
-       case '[':       goto yy336;
+       case ' ':       goto yy211;
+       case '[':       goto yy212;
        default:        goto yy198;
        }
 yy200:
+       yych = *(marker = ++c);
+       switch (yych) {
+       case '?':       goto yy202;
+       default:        goto yy198;
+       }
+yy201:
+       yych = *++c;
+       goto yy198;
+yy202:
+       yych = *++c;
+       switch (yych) {
+       case ']':       goto yy203;
+       default:        goto yy205;
+       }
+yy203:
+       c = marker;
+       goto yy198;
+yy204:
+       ++c;
+       yych = *c;
+yy205:
+       switch (yych) {
+       case 0x00:
+       case '\n':
+       case '\r':      goto yy203;
+       case ']':       goto yy206;
+       default:        goto yy204;
+       }
+yy206:
+       yych = *++c;
+       switch (yych) {
+       case ':':       goto yy207;
+       default:        goto yy203;
+       }
+yy207:
+       yych = *++c;
+       switch (yych) {
+       case 0x00:
+       case '\n':
+       case '\r':      goto yy203;
+       default:        goto yy208;
+       }
+yy208:
+       ++c;
+       yych = *c;
+       switch (yych) {
+       case 0x00:
+       case '\n':
+       case '\r':      goto yy210;
+       default:        goto yy208;
+       }
+yy210:
+       { return (size_t)( c - start ); }
+yy211:
+       yych = *++c;
+       switch (yych) {
+       case ' ':       goto yy213;
+       case '[':       goto yy212;
+       default:        goto yy203;
+       }
+yy212:
+       yych = *++c;
+       switch (yych) {
+       case '?':       goto yy202;
+       default:        goto yy203;
+       }
+yy213:
+       ++c;
+       switch ((yych = *c)) {
+       case '[':       goto yy212;
+       default:        goto yy203;
+       }
+}
+       
+}
+
+
+size_t scan_ref_link_no_attributes(const char * c) {
+       const char * marker = NULL;
+       const char * start = c;
+
+
+{
+       char yych;
+       unsigned int yyaccept = 0;
+       yych = *c;
+       switch (yych) {
+       case '\n':      goto yy216;
+       case ' ':       goto yy217;
+       case '[':       goto yy218;
+       default:        goto yy219;
+       }
+yy216:
+       { return 0; }
+yy217:
+       yyaccept = 0;
+       yych = *(marker = ++c);
+       switch (yych) {
+       case ' ':       goto yy353;
+       case '[':       goto yy354;
+       default:        goto yy216;
+       }
+yy218:
        yyaccept = 0;
        yych = *(marker = ++c);
        switch (yych) {
        case 0x00:
        case '\n':
        case '\r':
-       case ']':       goto yy198;
-       default:        goto yy202;
+       case ']':       goto yy216;
+       default:        goto yy220;
        }
-yy201:
+yy219:
        yych = *++c;
-       goto yy198;
-yy202:
+       goto yy216;
+yy220:
        ++c;
        yych = *c;
-yy203:
+yy221:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case ']':       goto yy205;
-       default:        goto yy202;
+       case '\r':      goto yy222;
+       case ']':       goto yy223;
+       default:        goto yy220;
        }
-yy204:
+yy222:
        c = marker;
        if (yyaccept == 0) {
-               goto yy198;
+               goto yy216;
        } else {
-               goto yy218;
+               goto yy236;
        }
-yy205:
+yy223:
        yych = *++c;
        switch (yych) {
-       case ':':       goto yy206;
-       default:        goto yy204;
+       case ':':       goto yy224;
+       default:        goto yy222;
        }
-yy206:
+yy224:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy204;
+       case 0x00:      goto yy222;
        case '\t':
-       case ' ':       goto yy206;
-       case '\n':      goto yy208;
-       case '\r':      goto yy210;
-       case '<':       goto yy211;
-       default:        goto yy213;
+       case ' ':       goto yy224;
+       case '\n':      goto yy226;
+       case '\r':      goto yy228;
+       case '<':       goto yy229;
+       default:        goto yy231;
        }
-yy208:
+yy226:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
+       case '\r':      goto yy222;
        case '\t':
-       case ' ':       goto yy208;
-       case '<':       goto yy211;
-       default:        goto yy213;
+       case ' ':       goto yy226;
+       case '<':       goto yy229;
+       default:        goto yy231;
        }
-yy210:
+yy228:
        yych = *++c;
        switch (yych) {
        case 0x00:
-       case '\r':      goto yy204;
+       case '\r':      goto yy222;
        case '\t':
        case '\n':
-       case ' ':       goto yy208;
-       case '<':       goto yy211;
-       default:        goto yy213;
+       case ' ':       goto yy226;
+       case '<':       goto yy229;
+       default:        goto yy231;
        }
-yy211:
+yy229:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy215;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy308;
-       case '\'':      goto yy310;
-       case '(':       goto yy312;
-       case '>':       goto yy213;
-       default:        goto yy211;
+       case ' ':       goto yy233;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy326;
+       case '\'':      goto yy328;
+       case '(':       goto yy330;
+       case '>':       goto yy231;
+       default:        goto yy229;
        }
-yy213:
+yy231:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy215;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy221;
-       case '\'':      goto yy223;
-       case '(':       goto yy225;
-       default:        goto yy213;
+       case ' ':       goto yy233;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy239;
+       case '\'':      goto yy241;
+       case '(':       goto yy243;
+       default:        goto yy231;
        }
-yy215:
+yy233:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy215;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy237;
-       case '\'':      goto yy239;
-       case '(':       goto yy241;
-       default:        goto yy204;
+       case ' ':       goto yy233;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy255;
+       case '\'':      goto yy257;
+       case '(':       goto yy259;
+       default:        goto yy222;
        }
-yy217:
+yy235:
        ++c;
-yy218:
+yy236:
        { return (size_t)( c - start ); }
-yy219:
+yy237:
        yyaccept = 1;
        yych = *(marker = ++c);
        switch (yych) {
-       case '"':       goto yy237;
-       case '\'':      goto yy239;
-       case '(':       goto yy241;
-       default:        goto yy218;
+       case '"':       goto yy255;
+       case '\'':      goto yy257;
+       case '(':       goto yy259;
+       default:        goto yy236;
        }
-yy220:
+yy238:
        yyaccept = 1;
        yych = *(marker = ++c);
        switch (yych) {
-       case '\n':      goto yy219;
-       case '"':       goto yy237;
-       case '\'':      goto yy239;
-       case '(':       goto yy241;
-       default:        goto yy218;
+       case '\n':      goto yy237;
+       case '"':       goto yy255;
+       case '\'':      goto yy257;
+       case '(':       goto yy259;
+       default:        goto yy236;
        }
-yy221:
+yy239:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy306;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy294;
-       case '\'':      goto yy284;
-       case '(':       goto yy229;
-       default:        goto yy221;
+       case ' ':       goto yy324;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy312;
+       case '\'':      goto yy302;
+       case '(':       goto yy247;
+       default:        goto yy239;
        }
-yy223:
+yy241:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy304;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy284;
-       case '\'':      goto yy246;
-       case '(':       goto yy231;
-       default:        goto yy223;
+       case ' ':       goto yy322;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy302;
+       case '\'':      goto yy264;
+       case '(':       goto yy249;
+       default:        goto yy241;
        }
-yy225:
+yy243:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy227;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy229;
-       case '\'':      goto yy231;
-       case ')':       goto yy233;
-       default:        goto yy225;
+       case ' ':       goto yy245;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy247;
+       case '\'':      goto yy249;
+       case ')':       goto yy251;
+       default:        goto yy243;
        }
-yy227:
+yy245:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy227;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy274;
-       case '\'':      goto yy258;
-       case ')':       goto yy243;
-       default:        goto yy241;
+       case ' ':       goto yy245;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy292;
+       case '\'':      goto yy276;
+       case ')':       goto yy261;
+       default:        goto yy259;
        }
-yy229:
+yy247:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy296;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy298;
-       case '\'':      goto yy250;
-       case ')':       goto yy294;
-       default:        goto yy229;
+       case ' ':       goto yy314;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy316;
+       case '\'':      goto yy268;
+       case ')':       goto yy312;
+       default:        goto yy247;
        }
-yy231:
+yy249:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy248;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy250;
-       case '\'':      goto yy252;
-       case ')':       goto yy246;
-       default:        goto yy231;
+       case ' ':       goto yy266;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy268;
+       case '\'':      goto yy270;
+       case ')':       goto yy264;
+       default:        goto yy249;
        }
-yy233:
+yy251:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy234;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy221;
-       case '\'':      goto yy223;
-       case '(':       goto yy225;
-       default:        goto yy213;
+       case ' ':       goto yy252;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy239;
+       case '\'':      goto yy241;
+       case '(':       goto yy243;
+       default:        goto yy231;
        }
-yy234:
+yy252:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy234;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy237;
-       case '\'':      goto yy239;
-       case '(':       goto yy241;
-       default:        goto yy204;
+       case ' ':       goto yy252;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy255;
+       case '\'':      goto yy257;
+       case '(':       goto yy259;
+       default:        goto yy222;
        }
-yy236:
+yy254:
        yyaccept = 1;
        yych = *(marker = ++c);
        switch (yych) {
-       case '\n':      goto yy219;
-       case '"':       goto yy237;
-       case '\'':      goto yy239;
-       case '(':       goto yy241;
-       default:        goto yy218;
+       case '\n':      goto yy237;
+       case '"':       goto yy255;
+       case '\'':      goto yy257;
+       case '(':       goto yy259;
+       default:        goto yy236;
        }
-yy237:
+yy255:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case '"':       goto yy243;
-       default:        goto yy237;
+       case '\r':      goto yy222;
+       case '"':       goto yy261;
+       default:        goto yy255;
        }
-yy239:
+yy257:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case '\'':      goto yy243;
-       default:        goto yy239;
+       case '\r':      goto yy222;
+       case '\'':      goto yy261;
+       default:        goto yy257;
        }
-yy241:
+yy259:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case ')':       goto yy243;
-       default:        goto yy241;
+       case '\r':      goto yy222;
+       case ')':       goto yy261;
+       default:        goto yy259;
        }
-yy243:
+yy261:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy243;
-       case '\r':      goto yy245;
-       default:        goto yy204;
+       case ' ':       goto yy261;
+       case '\r':      goto yy263;
+       default:        goto yy222;
        }
-yy245:
+yy263:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy217;
-       default:        goto yy218;
+       case '\n':      goto yy235;
+       default:        goto yy236;
        }
-yy246:
+yy264:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy292;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy284;
-       case '\'':      goto yy246;
-       case '(':       goto yy231;
-       default:        goto yy223;
+       case ' ':       goto yy310;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy302;
+       case '\'':      goto yy264;
+       case '(':       goto yy249;
+       default:        goto yy241;
        }
-yy248:
+yy266:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy248;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy260;
-       case '\'':      goto yy262;
-       case ')':       goto yy256;
-       default:        goto yy258;
+       case ' ':       goto yy266;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy278;
+       case '\'':      goto yy280;
+       case ')':       goto yy274;
+       default:        goto yy276;
        }
-yy250:
+yy268:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy278;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
+       case ' ':       goto yy296;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
        case '"':
-       case '\'':      goto yy276;
-       case ')':       goto yy280;
-       default:        goto yy250;
+       case '\'':      goto yy294;
+       case ')':       goto yy298;
+       default:        goto yy268;
        }
-yy252:
+yy270:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy254;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy250;
-       case '\'':      goto yy252;
-       case ')':       goto yy246;
-       default:        goto yy231;
+       case ' ':       goto yy272;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy268;
+       case '\'':      goto yy270;
+       case ')':       goto yy264;
+       default:        goto yy249;
        }
-yy254:
+yy272:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy254;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy260;
-       case '\'':      goto yy262;
-       case ')':       goto yy256;
-       default:        goto yy258;
+       case ' ':       goto yy272;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy278;
+       case '\'':      goto yy280;
+       case ')':       goto yy274;
+       default:        goto yy276;
        }
-yy256:
+yy274:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy256;
-       case '\r':      goto yy245;
-       case '\'':      goto yy243;
-       default:        goto yy239;
+       case ' ':       goto yy274;
+       case '\r':      goto yy263;
+       case '\'':      goto yy261;
+       default:        goto yy257;
        }
-yy258:
+yy276:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case '\'':      goto yy264;
-       case ')':       goto yy256;
-       default:        goto yy258;
+       case '\r':      goto yy222;
+       case '\'':      goto yy282;
+       case ')':       goto yy274;
+       default:        goto yy276;
        }
-yy260:
+yy278:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case '"':       goto yy262;
-       case '\'':      goto yy266;
-       case ')':       goto yy268;
-       default:        goto yy260;
+       case '\r':      goto yy222;
+       case '"':       goto yy280;
+       case '\'':      goto yy284;
+       case ')':       goto yy286;
+       default:        goto yy278;
        }
-yy262:
+yy280:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy262;
-       case '\r':      goto yy245;
-       case '\'':      goto yy264;
-       case ')':       goto yy256;
-       default:        goto yy258;
+       case ' ':       goto yy280;
+       case '\r':      goto yy263;
+       case '\'':      goto yy282;
+       case ')':       goto yy274;
+       default:        goto yy276;
        }
-yy264:
+yy282:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy264;
-       case '\r':      goto yy245;
-       case ')':       goto yy243;
-       default:        goto yy241;
+       case ' ':       goto yy282;
+       case '\r':      goto yy263;
+       case ')':       goto yy261;
+       default:        goto yy259;
        }
-yy266:
+yy284:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy266;
-       case '\r':      goto yy245;
-       case '"':       goto yy264;
-       case ')':       goto yy270;
-       default:        goto yy274;
+       case ' ':       goto yy284;
+       case '\r':      goto yy263;
+       case '"':       goto yy282;
+       case ')':       goto yy288;
+       default:        goto yy292;
        }
-yy268:
+yy286:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy268;
-       case '\r':      goto yy245;
-       case '"':       goto yy256;
-       case '\'':      goto yy270;
-       default:        goto yy272;
+       case ' ':       goto yy286;
+       case '\r':      goto yy263;
+       case '"':       goto yy274;
+       case '\'':      goto yy288;
+       default:        goto yy290;
        }
-yy270:
+yy288:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy270;
-       case '\r':      goto yy245;
-       case '"':       goto yy243;
-       default:        goto yy237;
+       case ' ':       goto yy288;
+       case '\r':      goto yy263;
+       case '"':       goto yy261;
+       default:        goto yy255;
        }
-yy272:
+yy290:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case '"':       goto yy256;
-       case '\'':      goto yy270;
-       default:        goto yy272;
+       case '\r':      goto yy222;
+       case '"':       goto yy274;
+       case '\'':      goto yy288;
+       default:        goto yy290;
        }
-yy274:
+yy292:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy204;
-       case '"':       goto yy264;
-       case ')':       goto yy270;
-       default:        goto yy274;
+       case '\r':      goto yy222;
+       case '"':       goto yy282;
+       case ')':       goto yy288;
+       default:        goto yy292;
        }
-yy276:
+yy294:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy290;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
+       case ' ':       goto yy308;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
        case '"':
-       case '\'':      goto yy276;
-       case ')':       goto yy280;
-       default:        goto yy250;
+       case '\'':      goto yy294;
+       case ')':       goto yy298;
+       default:        goto yy268;
        }
-yy278:
+yy296:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy278;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
+       case ' ':       goto yy296;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
        case '"':
-       case '\'':      goto yy288;
-       case ')':       goto yy268;
-       default:        goto yy260;
+       case '\'':      goto yy306;
+       case ')':       goto yy286;
+       default:        goto yy278;
        }
-yy280:
+yy298:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy282;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
+       case ' ':       goto yy300;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
        case '"':
-       case '\'':      goto yy280;
-       case '(':       goto yy250;
-       default:        goto yy284;
+       case '\'':      goto yy298;
+       case '(':       goto yy268;
+       default:        goto yy302;
        }
-yy282:
+yy300:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy282;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
+       case ' ':       goto yy300;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
        case '"':
-       case '\'':      goto yy268;
-       case '(':       goto yy260;
-       default:        goto yy272;
+       case '\'':      goto yy286;
+       case '(':       goto yy278;
+       default:        goto yy290;
        }
-yy284:
+yy302:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy286;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
+       case ' ':       goto yy304;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
        case '"':
-       case '\'':      goto yy280;
-       case '(':       goto yy250;
-       default:        goto yy284;
+       case '\'':      goto yy298;
+       case '(':       goto yy268;
+       default:        goto yy302;
        }
-yy286:
+yy304:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy286;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
+       case ' ':       goto yy304;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
        case '"':
-       case '\'':      goto yy268;
-       case '(':       goto yy260;
-       default:        goto yy272;
+       case '\'':      goto yy286;
+       case '(':       goto yy278;
+       default:        goto yy290;
        }
-yy288:
+yy306:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy217;
+       case '\n':      goto yy235;
        case '\t':
-       case ' ':       goto yy288;
-       case '\r':      goto yy245;
-       case '"':       goto yy262;
-       case '\'':      goto yy266;
-       case ')':       goto yy268;
-       default:        goto yy260;
+       case ' ':       goto yy306;
+       case '\r':      goto yy263;
+       case '"':       goto yy280;
+       case '\'':      goto yy284;
+       case ')':       goto yy286;
+       default:        goto yy278;
        }
-yy290:
+yy308:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy290;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
+       case ' ':       goto yy308;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
        case '"':
-       case '\'':      goto yy288;
-       case ')':       goto yy268;
-       default:        goto yy260;
+       case '\'':      goto yy306;
+       case ')':       goto yy286;
+       default:        goto yy278;
        }
-yy292:
+yy310:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy292;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy272;
-       case '\'':      goto yy256;
-       case '(':       goto yy258;
-       default:        goto yy239;
+       case ' ':       goto yy310;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy290;
+       case '\'':      goto yy274;
+       case '(':       goto yy276;
+       default:        goto yy257;
        }
-yy294:
+yy312:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy302;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy294;
-       case '\'':      goto yy284;
-       case '(':       goto yy229;
-       default:        goto yy221;
+       case ' ':       goto yy320;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy312;
+       case '\'':      goto yy302;
+       case '(':       goto yy247;
+       default:        goto yy239;
        }
-yy296:
+yy314:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy296;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy266;
-       case '\'':      goto yy260;
-       case ')':       goto yy270;
-       default:        goto yy274;
+       case ' ':       goto yy314;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy284;
+       case '\'':      goto yy278;
+       case ')':       goto yy288;
+       default:        goto yy292;
        }
-yy298:
+yy316:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy300;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy298;
-       case '\'':      goto yy250;
-       case ')':       goto yy294;
-       default:        goto yy229;
+       case ' ':       goto yy318;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy316;
+       case '\'':      goto yy268;
+       case ')':       goto yy312;
+       default:        goto yy247;
        }
-yy300:
+yy318:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy300;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy266;
-       case '\'':      goto yy260;
-       case ')':       goto yy270;
-       default:        goto yy274;
+       case ' ':       goto yy318;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy284;
+       case '\'':      goto yy278;
+       case ')':       goto yy288;
+       default:        goto yy292;
        }
-yy302:
+yy320:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy302;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy270;
-       case '\'':      goto yy272;
-       case '(':       goto yy274;
-       default:        goto yy237;
+       case ' ':       goto yy320;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy288;
+       case '\'':      goto yy290;
+       case '(':       goto yy292;
+       default:        goto yy255;
        }
-yy304:
+yy322:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy304;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy272;
-       case '\'':      goto yy256;
-       case '(':       goto yy258;
-       default:        goto yy239;
+       case ' ':       goto yy322;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy290;
+       case '\'':      goto yy274;
+       case '(':       goto yy276;
+       default:        goto yy257;
        }
-yy306:
+yy324:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy306;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy270;
-       case '\'':      goto yy272;
-       case '(':       goto yy274;
-       default:        goto yy237;
+       case ' ':       goto yy324;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy288;
+       case '\'':      goto yy290;
+       case '(':       goto yy292;
+       default:        goto yy255;
        }
-yy308:
+yy326:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy306;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy331;
-       case '\'':      goto yy329;
-       case '(':       goto yy314;
-       case '>':       goto yy221;
-       default:        goto yy308;
+       case ' ':       goto yy324;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy349;
+       case '\'':      goto yy347;
+       case '(':       goto yy332;
+       case '>':       goto yy239;
+       default:        goto yy326;
        }
-yy310:
+yy328:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy304;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy329;
-       case '\'':      goto yy319;
-       case '(':       goto yy316;
-       case '>':       goto yy223;
-       default:        goto yy310;
+       case ' ':       goto yy322;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy347;
+       case '\'':      goto yy337;
+       case '(':       goto yy334;
+       case '>':       goto yy241;
+       default:        goto yy328;
        }
-yy312:
+yy330:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy227;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy314;
-       case '\'':      goto yy316;
-       case ')':       goto yy318;
-       case '>':       goto yy225;
-       default:        goto yy312;
+       case ' ':       goto yy245;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy332;
+       case '\'':      goto yy334;
+       case ')':       goto yy336;
+       case '>':       goto yy243;
+       default:        goto yy330;
        }
-yy314:
+yy332:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy296;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy333;
-       case '\'':      goto yy321;
-       case ')':       goto yy331;
-       case '>':       goto yy229;
-       default:        goto yy314;
+       case ' ':       goto yy314;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy351;
+       case '\'':      goto yy339;
+       case ')':       goto yy349;
+       case '>':       goto yy247;
+       default:        goto yy332;
        }
-yy316:
+yy334:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy248;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
-       case '"':       goto yy321;
-       case '\'':      goto yy323;
-       case ')':       goto yy319;
-       case '>':       goto yy231;
-       default:        goto yy316;
+       case ' ':       goto yy266;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
+       case '"':       goto yy339;
+       case '\'':      goto yy341;
+       case ')':       goto yy337;
+       case '>':       goto yy249;
+       default:        goto yy334;
        }
-yy318:
+yy336:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy234;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy308;
-       case '\'':      goto yy310;
-       case '(':       goto yy312;
-       case '>':       goto yy213;
-       default:        goto yy211;
+       case ' ':       goto yy252;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy326;
+       case '\'':      goto yy328;
+       case '(':       goto yy330;
+       case '>':       goto yy231;
+       default:        goto yy229;
        }
-yy319:
+yy337:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy292;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy329;
-       case '\'':      goto yy319;
-       case '(':       goto yy316;
-       case '>':       goto yy223;
-       default:        goto yy310;
+       case ' ':       goto yy310;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy347;
+       case '\'':      goto yy337;
+       case '(':       goto yy334;
+       case '>':       goto yy241;
+       default:        goto yy328;
        }
-yy321:
+yy339:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy278;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
+       case ' ':       goto yy296;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
        case '"':
-       case '\'':      goto yy325;
-       case ')':       goto yy327;
-       case '>':       goto yy250;
-       default:        goto yy321;
+       case '\'':      goto yy343;
+       case ')':       goto yy345;
+       case '>':       goto yy268;
+       default:        goto yy339;
        }
-yy323:
+yy341:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy254;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy321;
-       case '\'':      goto yy323;
-       case ')':       goto yy319;
-       case '>':       goto yy231;
-       default:        goto yy316;
+       case ' ':       goto yy272;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy339;
+       case '\'':      goto yy341;
+       case ')':       goto yy337;
+       case '>':       goto yy249;
+       default:        goto yy334;
        }
-yy325:
+yy343:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy290;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
+       case ' ':       goto yy308;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
        case '"':
-       case '\'':      goto yy325;
-       case ')':       goto yy327;
-       case '>':       goto yy250;
-       default:        goto yy321;
+       case '\'':      goto yy343;
+       case ')':       goto yy345;
+       case '>':       goto yy268;
+       default:        goto yy339;
        }
-yy327:
+yy345:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy282;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
+       case ' ':       goto yy300;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
        case '"':
-       case '\'':      goto yy327;
-       case '(':       goto yy321;
-       case '>':       goto yy284;
-       default:        goto yy329;
+       case '\'':      goto yy345;
+       case '(':       goto yy339;
+       case '>':       goto yy302;
+       default:        goto yy347;
        }
-yy329:
+yy347:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy286;
-       case '\n':      goto yy219;
-       case '\r':      goto yy220;
+       case ' ':       goto yy304;
+       case '\n':      goto yy237;
+       case '\r':      goto yy238;
        case '"':
-       case '\'':      goto yy327;
-       case '(':       goto yy321;
-       case '>':       goto yy284;
-       default:        goto yy329;
+       case '\'':      goto yy345;
+       case '(':       goto yy339;
+       case '>':       goto yy302;
+       default:        goto yy347;
        }
-yy331:
+yy349:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy302;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy331;
-       case '\'':      goto yy329;
-       case '(':       goto yy314;
-       case '>':       goto yy221;
-       default:        goto yy308;
+       case ' ':       goto yy320;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy349;
+       case '\'':      goto yy347;
+       case '(':       goto yy332;
+       case '>':       goto yy239;
+       default:        goto yy326;
        }
-yy333:
+yy351:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy217;
+       case 0x00:      goto yy235;
        case '\t':
-       case ' ':       goto yy300;
-       case '\n':      goto yy219;
-       case '\r':      goto yy236;
-       case '"':       goto yy333;
-       case '\'':      goto yy321;
-       case ')':       goto yy331;
-       case '>':       goto yy229;
-       default:        goto yy314;
+       case ' ':       goto yy318;
+       case '\n':      goto yy237;
+       case '\r':      goto yy254;
+       case '"':       goto yy351;
+       case '\'':      goto yy339;
+       case ')':       goto yy349;
+       case '>':       goto yy247;
+       default:        goto yy332;
        }
-yy335:
+yy353:
        yych = *++c;
        switch (yych) {
-       case ' ':       goto yy337;
-       case '[':       goto yy336;
-       default:        goto yy204;
+       case ' ':       goto yy355;
+       case '[':       goto yy354;
+       default:        goto yy222;
        }
-yy336:
+yy354:
        yych = *++c;
        switch (yych) {
-       case ']':       goto yy204;
-       default:        goto yy203;
+       case ']':       goto yy222;
+       default:        goto yy221;
        }
-yy337:
+yy355:
        ++c;
        switch ((yych = *c)) {
-       case '[':       goto yy336;
-       default:        goto yy204;
+       case '[':       goto yy354;
+       default:        goto yy222;
        }
 }
        
@@ -4731,89 +4833,89 @@ size_t scan_ref_link(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy340;
-       case ' ':       goto yy341;
-       case '[':       goto yy342;
-       default:        goto yy343;
+       case '\n':      goto yy358;
+       case ' ':       goto yy359;
+       case '[':       goto yy360;
+       default:        goto yy361;
        }
-yy340:
+yy358:
        { return 0; }
-yy341:
+yy359:
        yych = *(marker = ++c);
        switch (yych) {
-       case ' ':       goto yy352;
-       case '[':       goto yy353;
-       default:        goto yy340;
+       case ' ':       goto yy370;
+       case '[':       goto yy371;
+       default:        goto yy358;
        }
-yy342:
+yy360:
        yych = *(marker = ++c);
        switch (yych) {
        case 0x00:
        case '\n':
        case '\r':
-       case ']':       goto yy340;
-       default:        goto yy344;
+       case ']':       goto yy358;
+       default:        goto yy362;
        }
-yy343:
+yy361:
        yych = *++c;
-       goto yy340;
-yy344:
+       goto yy358;
+yy362:
        ++c;
        yych = *c;
-yy345:
+yy363:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy346;
-       case ']':       goto yy347;
-       default:        goto yy344;
+       case '\r':      goto yy364;
+       case ']':       goto yy365;
+       default:        goto yy362;
        }
-yy346:
+yy364:
        c = marker;
-       goto yy340;
-yy347:
+       goto yy358;
+yy365:
        yych = *++c;
        switch (yych) {
-       case ':':       goto yy348;
-       default:        goto yy346;
+       case ':':       goto yy366;
+       default:        goto yy364;
        }
-yy348:
+yy366:
        yych = *++c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy346;
-       default:        goto yy349;
+       case '\r':      goto yy364;
+       default:        goto yy367;
        }
-yy349:
+yy367:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy351;
-       default:        goto yy349;
+       case '\r':      goto yy369;
+       default:        goto yy367;
        }
-yy351:
+yy369:
        { return (size_t)( c - start ); }
-yy352:
+yy370:
        yych = *++c;
        switch (yych) {
-       case ' ':       goto yy354;
-       case '[':       goto yy353;
-       default:        goto yy346;
+       case ' ':       goto yy372;
+       case '[':       goto yy371;
+       default:        goto yy364;
        }
-yy353:
+yy371:
        yych = *++c;
        switch (yych) {
-       case ']':       goto yy346;
-       default:        goto yy345;
+       case ']':       goto yy364;
+       default:        goto yy363;
        }
-yy354:
+yy372:
        ++c;
        switch ((yych = *c)) {
-       case '[':       goto yy353;
-       default:        goto yy346;
+       case '[':       goto yy371;
+       default:        goto yy364;
        }
 }
        
@@ -4829,17 +4931,17 @@ size_t scan_html(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy357;
-       case '<':       goto yy358;
-       default:        goto yy359;
+       case '\n':      goto yy375;
+       case '<':       goto yy376;
+       default:        goto yy377;
        }
-yy357:
+yy375:
        { return 0; }
-yy358:
+yy376:
        yych = *(marker = ++c);
        switch (yych) {
-       case '!':       goto yy360;
-       case '/':       goto yy362;
+       case '!':       goto yy378;
+       case '/':       goto yy380;
        case 'A':
        case 'B':
        case 'C':
@@ -4891,22 +4993,22 @@ yy358:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy363;
-       default:        goto yy357;
+       case 'z':       goto yy381;
+       default:        goto yy375;
        }
-yy359:
+yy377:
        yych = *++c;
-       goto yy357;
-yy360:
+       goto yy375;
+yy378:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy391;
-       default:        goto yy361;
+       case '-':       goto yy409;
+       default:        goto yy379;
        }
-yy361:
+yy379:
        c = marker;
-       goto yy357;
-yy362:
+       goto yy375;
+yy380:
        yych = *++c;
        switch (yych) {
        case 'A':
@@ -4960,17 +5062,17 @@ yy362:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy387;
-       default:        goto yy361;
+       case 'z':       goto yy405;
+       default:        goto yy379;
        }
-yy363:
+yy381:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy367;
-       case '\n':      goto yy369;
-       case '\r':      goto yy371;
+       case ' ':       goto yy385;
+       case '\n':      goto yy387;
+       case '\r':      goto yy389;
        case '-':
        case '0':
        case '1':
@@ -4981,11 +5083,11 @@ yy363:
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy363;
-       case '/':       goto yy376;
+       case '9':       goto yy381;
+       case '/':       goto yy394;
        case ':':
-       case '_':       goto yy372;
-       case '>':       goto yy374;
+       case '_':       goto yy390;
+       case '>':       goto yy392;
        case 'A':
        case 'B':
        case 'C':
@@ -5037,17 +5139,17 @@ yy363:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy365;
-       default:        goto yy361;
+       case 'z':       goto yy383;
+       default:        goto yy379;
        }
-yy365:
+yy383:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy367;
-       case '\n':      goto yy369;
-       case '\r':      goto yy371;
+       case ' ':       goto yy385;
+       case '\n':      goto yy387;
+       case '\r':      goto yy389;
        case '-':
        case '0':
        case '1':
@@ -5110,24 +5212,24 @@ yy365:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy365;
+       case 'z':       goto yy383;
        case '.':
        case ':':
-       case '_':       goto yy372;
-       case '/':       goto yy376;
-       case '=':       goto yy377;
-       case '>':       goto yy374;
-       default:        goto yy361;
+       case '_':       goto yy390;
+       case '/':       goto yy394;
+       case '=':       goto yy395;
+       case '>':       goto yy392;
+       default:        goto yy379;
        }
-yy367:
+yy385:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy367;
-       case '\n':      goto yy369;
-       case '\r':      goto yy371;
-       case '/':       goto yy376;
+       case ' ':       goto yy385;
+       case '\n':      goto yy387;
+       case '\r':      goto yy389;
+       case '/':       goto yy394;
        case ':':
        case 'A':
        case 'B':
@@ -5181,16 +5283,16 @@ yy367:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy372;
-       case '>':       goto yy374;
-       default:        goto yy361;
+       case 'z':       goto yy390;
+       case '>':       goto yy392;
+       default:        goto yy379;
        }
-yy369:
+yy387:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy369;
+       case ' ':       goto yy387;
        case ':':
        case 'A':
        case 'B':
@@ -5244,16 +5346,16 @@ yy369:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy372;
-       default:        goto yy361;
+       case 'z':       goto yy390;
+       default:        goto yy379;
        }
-yy371:
+yy389:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
        case '\n':
-       case ' ':       goto yy369;
+       case ' ':       goto yy387;
        case ':':
        case 'A':
        case 'B':
@@ -5307,10 +5409,10 @@ yy371:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy372;
-       default:        goto yy361;
+       case 'z':       goto yy390;
+       default:        goto yy379;
        }
-yy372:
+yy390:
        ++c;
        yych = *c;
        switch (yych) {
@@ -5379,27 +5481,27 @@ yy372:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy372;
-       case '=':       goto yy377;
-       default:        goto yy361;
+       case 'z':       goto yy390;
+       case '=':       goto yy395;
+       default:        goto yy379;
        }
-yy374:
+yy392:
        ++c;
        { return (size_t)( c - start ); }
-yy376:
+yy394:
        yych = *++c;
        switch (yych) {
-       case '>':       goto yy374;
-       default:        goto yy361;
+       case '>':       goto yy392;
+       default:        goto yy379;
        }
-yy377:
+yy395:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy377;
-       case '"':       goto yy379;
-       case '\'':      goto yy381;
+       case ' ':       goto yy395;
+       case '"':       goto yy397;
+       case '\'':      goto yy399;
        case '.':
        case '0':
        case '1':
@@ -5462,37 +5564,37 @@ yy377:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy383;
-       default:        goto yy361;
+       case 'z':       goto yy401;
+       default:        goto yy379;
        }
-yy379:
+yy397:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy361;
-       case '"':       goto yy367;
-       default:        goto yy379;
+       case '\r':      goto yy379;
+       case '"':       goto yy385;
+       default:        goto yy397;
        }
-yy381:
+yy399:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy361;
-       case '\'':      goto yy367;
-       default:        goto yy381;
+       case '\r':      goto yy379;
+       case '\'':      goto yy385;
+       default:        goto yy399;
        }
-yy383:
+yy401:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy367;
-       case '\n':      goto yy369;
-       case '\r':      goto yy371;
+       case ' ':       goto yy385;
+       case '\n':      goto yy387;
+       case '\r':      goto yy389;
        case '.':
        case '0':
        case '1':
@@ -5503,11 +5605,11 @@ yy383:
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy383;
-       case '/':       goto yy376;
+       case '9':       goto yy401;
+       case '/':       goto yy394;
        case ':':
-       case '_':       goto yy372;
-       case '>':       goto yy374;
+       case '_':       goto yy390;
+       case '>':       goto yy392;
        case 'A':
        case 'B':
        case 'C':
@@ -5559,20 +5661,20 @@ yy383:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy385;
-       default:        goto yy361;
+       case 'z':       goto yy403;
+       default:        goto yy379;
        }
-yy385:
+yy403:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy367;
-       case '\n':      goto yy369;
-       case '\r':      goto yy371;
+       case ' ':       goto yy385;
+       case '\n':      goto yy387;
+       case '\r':      goto yy389;
        case '-':
        case ':':
-       case '_':       goto yy372;
+       case '_':       goto yy390;
        case '.':
        case '0':
        case '1':
@@ -5635,18 +5737,18 @@ yy385:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy385;
-       case '/':       goto yy376;
-       case '=':       goto yy377;
-       case '>':       goto yy374;
-       default:        goto yy361;
+       case 'z':       goto yy403;
+       case '/':       goto yy394;
+       case '=':       goto yy395;
+       case '>':       goto yy392;
+       default:        goto yy379;
        }
-yy387:
+yy405:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy389;
+       case ' ':       goto yy407;
        case '-':
        case '0':
        case '1':
@@ -5709,58 +5811,58 @@ yy387:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy387;
-       case '>':       goto yy374;
-       default:        goto yy361;
+       case 'z':       goto yy405;
+       case '>':       goto yy392;
+       default:        goto yy379;
        }
-yy389:
+yy407:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy389;
-       case '>':       goto yy374;
-       default:        goto yy361;
+       case ' ':       goto yy407;
+       case '>':       goto yy392;
+       default:        goto yy379;
        }
-yy391:
+yy409:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy392;
-       default:        goto yy361;
+       case '-':       goto yy410;
+       default:        goto yy379;
        }
-yy392:
+yy410:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy361;
-       default:        goto yy394;
+       case '-':       goto yy379;
+       default:        goto yy412;
        }
-yy393:
+yy411:
        ++c;
        yych = *c;
-yy394:
+yy412:
        switch (yych) {
        case 0x00:
-       case '>':       goto yy361;
-       case '-':       goto yy395;
-       default:        goto yy393;
+       case '>':       goto yy379;
+       case '-':       goto yy413;
+       default:        goto yy411;
        }
-yy395:
+yy413:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '>':       goto yy361;
-       case '-':       goto yy396;
-       default:        goto yy393;
+       case '>':       goto yy379;
+       case '-':       goto yy414;
+       default:        goto yy411;
        }
-yy396:
+yy414:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy361;
-       case '-':       goto yy396;
-       case '>':       goto yy374;
-       default:        goto yy393;
+       case 0x00:      goto yy379;
+       case '-':       goto yy414;
+       case '>':       goto yy392;
+       default:        goto yy411;
        }
 }
        
@@ -5776,71 +5878,71 @@ size_t scan_html_comment(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy400;
-       case '<':       goto yy401;
-       default:        goto yy402;
+       case '\n':      goto yy418;
+       case '<':       goto yy419;
+       default:        goto yy420;
        }
-yy400:
+yy418:
        { return 0; }
-yy401:
+yy419:
        yych = *(marker = ++c);
        switch (yych) {
-       case '!':       goto yy403;
-       default:        goto yy400;
+       case '!':       goto yy421;
+       default:        goto yy418;
        }
-yy402:
+yy420:
        yych = *++c;
-       goto yy400;
-yy403:
+       goto yy418;
+yy421:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy405;
-       default:        goto yy404;
+       case '-':       goto yy423;
+       default:        goto yy422;
        }
-yy404:
+yy422:
        c = marker;
-       goto yy400;
-yy405:
+       goto yy418;
+yy423:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy406;
-       default:        goto yy404;
+       case '-':       goto yy424;
+       default:        goto yy422;
        }
-yy406:
+yy424:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy404;
-       default:        goto yy408;
+       case '-':       goto yy422;
+       default:        goto yy426;
        }
-yy407:
+yy425:
        ++c;
        yych = *c;
-yy408:
+yy426:
        switch (yych) {
        case 0x00:
-       case '>':       goto yy404;
-       case '-':       goto yy409;
-       default:        goto yy407;
+       case '>':       goto yy422;
+       case '-':       goto yy427;
+       default:        goto yy425;
        }
-yy409:
+yy427:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '>':       goto yy404;
-       case '-':       goto yy410;
-       default:        goto yy407;
+       case '>':       goto yy422;
+       case '-':       goto yy428;
+       default:        goto yy425;
        }
-yy410:
+yy428:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy404;
-       case '-':       goto yy410;
-       case '>':       goto yy412;
-       default:        goto yy407;
+       case 0x00:      goto yy422;
+       case '-':       goto yy428;
+       case '>':       goto yy430;
+       default:        goto yy425;
        }
-yy412:
+yy430:
        ++c;
        { return (size_t)( c - start ); }
 }
@@ -5857,130 +5959,130 @@ size_t scan_html_block(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy416;
-       case '<':       goto yy417;
-       default:        goto yy418;
+       case '\n':      goto yy434;
+       case '<':       goto yy435;
+       default:        goto yy436;
        }
-yy416:
+yy434:
        { return 0; }
-yy417:
+yy435:
        yych = *(marker = ++c);
        switch (yych) {
-       case '/':       goto yy419;
+       case '/':       goto yy437;
        case 'A':
-       case 'a':       goto yy422;
+       case 'a':       goto yy440;
        case 'B':
-       case 'b':       goto yy423;
+       case 'b':       goto yy441;
        case 'C':
-       case 'c':       goto yy424;
+       case 'c':       goto yy442;
        case 'D':
-       case 'd':       goto yy425;
+       case 'd':       goto yy443;
        case 'F':
-       case 'f':       goto yy426;
+       case 'f':       goto yy444;
        case 'H':
-       case 'h':       goto yy427;
+       case 'h':       goto yy445;
        case 'I':
-       case 'i':       goto yy428;
+       case 'i':       goto yy446;
        case 'L':
-       case 'l':       goto yy429;
+       case 'l':       goto yy447;
        case 'M':
-       case 'm':       goto yy430;
+       case 'm':       goto yy448;
        case 'N':
-       case 'n':       goto yy431;
+       case 'n':       goto yy449;
        case 'O':
-       case 'o':       goto yy432;
+       case 'o':       goto yy450;
        case 'P':
-       case 'p':       goto yy421;
+       case 'p':       goto yy439;
        case 'S':
-       case 's':       goto yy433;
+       case 's':       goto yy451;
        case 'T':
-       case 't':       goto yy434;
+       case 't':       goto yy452;
        case 'U':
-       case 'u':       goto yy435;
+       case 'u':       goto yy453;
        case 'V':
-       case 'v':       goto yy436;
-       default:        goto yy416;
+       case 'v':       goto yy454;
+       default:        goto yy434;
        }
-yy418:
+yy436:
        yych = *++c;
-       goto yy416;
-yy419:
+       goto yy434;
+yy437:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy422;
+       case 'a':       goto yy440;
        case 'B':
-       case 'b':       goto yy423;
+       case 'b':       goto yy441;
        case 'C':
-       case 'c':       goto yy424;
+       case 'c':       goto yy442;
        case 'D':
-       case 'd':       goto yy425;
+       case 'd':       goto yy443;
        case 'F':
-       case 'f':       goto yy426;
+       case 'f':       goto yy444;
        case 'H':
-       case 'h':       goto yy427;
+       case 'h':       goto yy445;
        case 'I':
-       case 'i':       goto yy428;
+       case 'i':       goto yy446;
        case 'L':
-       case 'l':       goto yy429;
+       case 'l':       goto yy447;
        case 'M':
-       case 'm':       goto yy430;
+       case 'm':       goto yy448;
        case 'N':
-       case 'n':       goto yy431;
+       case 'n':       goto yy449;
        case 'O':
-       case 'o':       goto yy432;
+       case 'o':       goto yy450;
        case 'P':
-       case 'p':       goto yy421;
+       case 'p':       goto yy439;
        case 'S':
-       case 's':       goto yy433;
+       case 's':       goto yy451;
        case 'T':
-       case 't':       goto yy434;
+       case 't':       goto yy452;
        case 'U':
-       case 'u':       goto yy435;
+       case 'u':       goto yy453;
        case 'V':
-       case 'v':       goto yy436;
-       default:        goto yy420;
+       case 'v':       goto yy454;
+       default:        goto yy438;
        }
-yy420:
+yy438:
        c = marker;
-       goto yy416;
-yy421:
+       goto yy434;
+yy439:
        yych = *++c;
        switch (yych) {
-       case '/':       goto yy448;
-       case '>':       goto yy449;
+       case '/':       goto yy466;
+       case '>':       goto yy467;
        case 'R':
-       case 'r':       goto yy568;
-       default:        goto yy442;
+       case 'r':       goto yy586;
+       default:        goto yy460;
        }
-yy422:
+yy440:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy557;
+       case 'd':       goto yy575;
        case 'R':
-       case 'r':       goto yy556;
+       case 'r':       goto yy574;
        case 'S':
-       case 's':       goto yy555;
-       default:        goto yy420;
+       case 's':       goto yy573;
+       default:        goto yy438;
        }
-yy423:
+yy441:
        yych = *++c;
        switch (yych) {
        case 'L':
-       case 'l':       goto yy547;
-       default:        goto yy420;
+       case 'l':       goto yy565;
+       default:        goto yy438;
        }
-yy424:
+yy442:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy540;
+       case 'a':       goto yy558;
        case 'E':
-       case 'e':       goto yy539;
-       default:        goto yy420;
+       case 'e':       goto yy557;
+       default:        goto yy438;
        }
-yy425:
+yy443:
        yych = *++c;
        switch (yych) {
        case 'D':
@@ -5988,23 +6090,23 @@ yy425:
        case 'T':
        case 'd':
        case 'l':
-       case 't':       goto yy440;
+       case 't':       goto yy458;
        case 'I':
-       case 'i':       goto yy538;
-       default:        goto yy420;
+       case 'i':       goto yy556;
+       default:        goto yy438;
        }
-yy426:
+yy444:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy514;
+       case 'i':       goto yy532;
        case 'O':
-       case 'o':       goto yy513;
+       case 'o':       goto yy531;
        case 'R':
-       case 'r':       goto yy512;
-       default:        goto yy420;
+       case 'r':       goto yy530;
+       default:        goto yy438;
        }
-yy427:
+yy445:
        yych = *++c;
        switch (yych) {
        case '1':
@@ -6014,122 +6116,122 @@ yy427:
        case '5':
        case '6':
        case 'R':
-       case 'r':       goto yy440;
+       case 'r':       goto yy458;
        case 'E':
-       case 'e':       goto yy505;
+       case 'e':       goto yy523;
        case 'G':
-       case 'g':       goto yy504;
-       default:        goto yy420;
+       case 'g':       goto yy522;
+       default:        goto yy438;
        }
-yy428:
+yy446:
        yych = *++c;
        switch (yych) {
        case 'S':
-       case 's':       goto yy499;
-       default:        goto yy420;
+       case 's':       goto yy517;
+       default:        goto yy438;
        }
-yy429:
+yy447:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy440;
-       default:        goto yy420;
+       case 'i':       goto yy458;
+       default:        goto yy438;
        }
-yy430:
+yy448:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy496;
+       case 'a':       goto yy514;
        case 'E':
-       case 'e':       goto yy495;
-       default:        goto yy420;
+       case 'e':       goto yy513;
+       default:        goto yy438;
        }
-yy431:
+yy449:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy484;
+       case 'a':       goto yy502;
        case 'O':
-       case 'o':       goto yy483;
-       default:        goto yy420;
+       case 'o':       goto yy501;
+       default:        goto yy438;
        }
-yy432:
+yy450:
        yych = *++c;
        switch (yych) {
        case 'L':
-       case 'l':       goto yy440;
+       case 'l':       goto yy458;
        case 'U':
-       case 'u':       goto yy479;
-       default:        goto yy420;
+       case 'u':       goto yy497;
+       default:        goto yy438;
        }
-yy433:
+yy451:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy474;
-       default:        goto yy420;
+       case 'e':       goto yy492;
+       default:        goto yy438;
        }
-yy434:
+yy452:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy464;
+       case 'a':       goto yy482;
        case 'B':
-       case 'b':       goto yy463;
+       case 'b':       goto yy481;
        case 'D':
        case 'R':
        case 'd':
-       case 'r':       goto yy440;
+       case 'r':       goto yy458;
        case 'F':
-       case 'f':       goto yy462;
+       case 'f':       goto yy480;
        case 'H':
-       case 'h':       goto yy461;
-       default:        goto yy420;
+       case 'h':       goto yy479;
+       default:        goto yy438;
        }
-yy435:
+yy453:
        yych = *++c;
        switch (yych) {
        case 'L':
-       case 'l':       goto yy440;
-       default:        goto yy420;
+       case 'l':       goto yy458;
+       default:        goto yy438;
        }
-yy436:
+yy454:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy437;
-       default:        goto yy420;
+       case 'i':       goto yy455;
+       default:        goto yy438;
        }
-yy437:
+yy455:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy438;
-       default:        goto yy420;
+       case 'd':       goto yy456;
+       default:        goto yy438;
        }
-yy438:
+yy456:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy439;
-       default:        goto yy420;
+       case 'e':       goto yy457;
+       default:        goto yy438;
        }
-yy439:
+yy457:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy440;
-       default:        goto yy420;
+       case 'o':       goto yy458;
+       default:        goto yy438;
        }
-yy440:
+yy458:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy441;
-       case '\n':      goto yy443;
-       case '\r':      goto yy445;
-       case '/':       goto yy448;
+       case ' ':       goto yy459;
+       case '\n':      goto yy461;
+       case '\r':      goto yy463;
+       case '/':       goto yy466;
        case ':':
        case 'A':
        case 'B':
@@ -6183,19 +6285,19 @@ yy440:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy446;
-       case '>':       goto yy449;
-       default:        goto yy420;
+       case 'z':       goto yy464;
+       case '>':       goto yy467;
+       default:        goto yy438;
        }
-yy441:
+yy459:
        ++c;
        yych = *c;
-yy442:
+yy460:
        switch (yych) {
        case '\t':
-       case ' ':       goto yy441;
-       case '\n':      goto yy443;
-       case '\r':      goto yy445;
+       case ' ':       goto yy459;
+       case '\n':      goto yy461;
+       case '\r':      goto yy463;
        case ':':
        case 'A':
        case 'B':
@@ -6249,15 +6351,15 @@ yy442:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy446;
-       default:        goto yy420;
+       case 'z':       goto yy464;
+       default:        goto yy438;
        }
-yy443:
+yy461:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy443;
+       case ' ':       goto yy461;
        case ':':
        case 'A':
        case 'B':
@@ -6311,16 +6413,16 @@ yy443:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy446;
-       default:        goto yy420;
+       case 'z':       goto yy464;
+       default:        goto yy438;
        }
-yy445:
+yy463:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
        case '\n':
-       case ' ':       goto yy443;
+       case ' ':       goto yy461;
        case ':':
        case 'A':
        case 'B':
@@ -6374,13 +6476,13 @@ yy445:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy446;
-       default:        goto yy420;
+       case 'z':       goto yy464;
+       default:        goto yy438;
        }
-yy446:
+yy464:
        ++c;
        yych = *c;
-yy447:
+yy465:
        switch (yych) {
        case '-':
        case '.':
@@ -6447,27 +6549,27 @@ yy447:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy446;
-       case '=':       goto yy451;
-       default:        goto yy420;
+       case 'z':       goto yy464;
+       case '=':       goto yy469;
+       default:        goto yy438;
        }
-yy448:
+yy466:
        yych = *++c;
        switch (yych) {
-       case '>':       goto yy449;
-       default:        goto yy420;
+       case '>':       goto yy467;
+       default:        goto yy438;
        }
-yy449:
+yy467:
        ++c;
        { return (size_t)( c - start ); }
-yy451:
+yy469:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy451;
-       case '"':       goto yy453;
-       case '\'':      goto yy455;
+       case ' ':       goto yy469;
+       case '"':       goto yy471;
+       case '\'':      goto yy473;
        case '.':
        case '0':
        case '1':
@@ -6530,37 +6632,37 @@ yy451:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy457;
-       default:        goto yy420;
+       case 'z':       goto yy475;
+       default:        goto yy438;
        }
-yy453:
+yy471:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy420;
-       case '"':       goto yy440;
-       default:        goto yy453;
+       case '\r':      goto yy438;
+       case '"':       goto yy458;
+       default:        goto yy471;
        }
-yy455:
+yy473:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy420;
-       case '\'':      goto yy440;
-       default:        goto yy455;
+       case '\r':      goto yy438;
+       case '\'':      goto yy458;
+       default:        goto yy473;
        }
-yy457:
+yy475:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy441;
-       case '\n':      goto yy443;
-       case '\r':      goto yy445;
+       case ' ':       goto yy459;
+       case '\n':      goto yy461;
+       case '\r':      goto yy463;
        case '.':
        case '0':
        case '1':
@@ -6571,11 +6673,11 @@ yy457:
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy457;
-       case '/':       goto yy448;
+       case '9':       goto yy475;
+       case '/':       goto yy466;
        case ':':
-       case '_':       goto yy446;
-       case '>':       goto yy449;
+       case '_':       goto yy464;
+       case '>':       goto yy467;
        case 'A':
        case 'B':
        case 'C':
@@ -6627,20 +6729,20 @@ yy457:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy459;
-       default:        goto yy420;
+       case 'z':       goto yy477;
+       default:        goto yy438;
        }
-yy459:
+yy477:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy441;
-       case '\n':      goto yy443;
-       case '\r':      goto yy445;
+       case ' ':       goto yy459;
+       case '\n':      goto yy461;
+       case '\r':      goto yy463;
        case '-':
        case ':':
-       case '_':       goto yy446;
+       case '_':       goto yy464;
        case '.':
        case '0':
        case '1':
@@ -6703,99 +6805,99 @@ yy459:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy459;
-       case '/':       goto yy448;
-       case '=':       goto yy451;
-       case '>':       goto yy449;
-       default:        goto yy420;
+       case 'z':       goto yy477;
+       case '/':       goto yy466;
+       case '=':       goto yy469;
+       case '>':       goto yy467;
+       default:        goto yy438;
        }
-yy461:
+yy479:
        yych = *++c;
        switch (yych) {
-       case '/':       goto yy448;
-       case '>':       goto yy449;
+       case '/':       goto yy466;
+       case '>':       goto yy467;
        case 'E':
-       case 'e':       goto yy471;
-       default:        goto yy442;
+       case 'e':       goto yy489;
+       default:        goto yy460;
        }
-yy462:
+yy480:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy469;
-       default:        goto yy420;
+       case 'o':       goto yy487;
+       default:        goto yy438;
        }
-yy463:
+yy481:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy467;
-       default:        goto yy420;
+       case 'o':       goto yy485;
+       default:        goto yy438;
        }
-yy464:
+yy482:
        yych = *++c;
        switch (yych) {
        case 'B':
-       case 'b':       goto yy465;
-       default:        goto yy420;
+       case 'b':       goto yy483;
+       default:        goto yy438;
        }
-yy465:
+yy483:
        yych = *++c;
        switch (yych) {
        case 'L':
-       case 'l':       goto yy466;
-       default:        goto yy420;
+       case 'l':       goto yy484;
+       default:        goto yy438;
        }
-yy466:
+yy484:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy440;
-       default:        goto yy420;
+       case 'e':       goto yy458;
+       default:        goto yy438;
        }
-yy467:
+yy485:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy468;
-       default:        goto yy420;
+       case 'd':       goto yy486;
+       default:        goto yy438;
        }
-yy468:
+yy486:
        yych = *++c;
        switch (yych) {
        case 'Y':
-       case 'y':       goto yy440;
-       default:        goto yy420;
+       case 'y':       goto yy458;
+       default:        goto yy438;
        }
-yy469:
+yy487:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy470;
-       default:        goto yy420;
+       case 'o':       goto yy488;
+       default:        goto yy438;
        }
-yy470:
+yy488:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy440;
-       default:        goto yy420;
+       case 't':       goto yy458;
+       default:        goto yy438;
        }
-yy471:
+yy489:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy472;
-       default:        goto yy447;
+       case 'a':       goto yy490;
+       default:        goto yy465;
        }
-yy472:
+yy490:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy473;
-       default:        goto yy447;
+       case 'd':       goto yy491;
+       default:        goto yy465;
        }
-yy473:
+yy491:
        yych = *++c;
        switch (yych) {
        case '-':
@@ -6809,686 +6911,686 @@ yy473:
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy446;
-       case '/':       goto yy448;
-       case '=':       goto yy451;
-       case '>':       goto yy449;
-       default:        goto yy442;
+       case '9':       goto yy464;
+       case '/':       goto yy466;
+       case '=':       goto yy469;
+       case '>':       goto yy467;
+       default:        goto yy460;
        }
-yy474:
+yy492:
        yych = *++c;
        switch (yych) {
        case 'C':
-       case 'c':       goto yy475;
-       default:        goto yy420;
+       case 'c':       goto yy493;
+       default:        goto yy438;
        }
-yy475:
+yy493:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy476;
-       default:        goto yy420;
+       case 't':       goto yy494;
+       default:        goto yy438;
        }
-yy476:
+yy494:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy477;
-       default:        goto yy420;
+       case 'i':       goto yy495;
+       default:        goto yy438;
        }
-yy477:
+yy495:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy478;
-       default:        goto yy420;
+       case 'o':       goto yy496;
+       default:        goto yy438;
        }
-yy478:
+yy496:
        yych = *++c;
        switch (yych) {
        case 'N':
-       case 'n':       goto yy440;
-       default:        goto yy420;
+       case 'n':       goto yy458;
+       default:        goto yy438;
        }
-yy479:
+yy497:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy480;
-       default:        goto yy420;
+       case 't':       goto yy498;
+       default:        goto yy438;
        }
-yy480:
+yy498:
        yych = *++c;
        switch (yych) {
        case 'P':
-       case 'p':       goto yy481;
-       default:        goto yy420;
+       case 'p':       goto yy499;
+       default:        goto yy438;
        }
-yy481:
+yy499:
        yych = *++c;
        switch (yych) {
        case 'U':
-       case 'u':       goto yy482;
-       default:        goto yy420;
+       case 'u':       goto yy500;
+       default:        goto yy438;
        }
-yy482:
+yy500:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy440;
-       default:        goto yy420;
+       case 't':       goto yy458;
+       default:        goto yy438;
        }
-yy483:
+yy501:
        yych = *++c;
        switch (yych) {
        case 'F':
-       case 'f':       goto yy485;
+       case 'f':       goto yy503;
        case 'S':
-       case 's':       goto yy486;
-       default:        goto yy420;
+       case 's':       goto yy504;
+       default:        goto yy438;
        }
-yy484:
+yy502:
        yych = *++c;
        switch (yych) {
        case 'V':
-       case 'v':       goto yy440;
-       default:        goto yy420;
+       case 'v':       goto yy458;
+       default:        goto yy438;
        }
-yy485:
+yy503:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy491;
-       default:        goto yy420;
+       case 'r':       goto yy509;
+       default:        goto yy438;
        }
-yy486:
+yy504:
        yych = *++c;
        switch (yych) {
        case 'C':
-       case 'c':       goto yy487;
-       default:        goto yy420;
+       case 'c':       goto yy505;
+       default:        goto yy438;
        }
-yy487:
+yy505:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy488;
-       default:        goto yy420;
+       case 'r':       goto yy506;
+       default:        goto yy438;
        }
-yy488:
+yy506:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy489;
-       default:        goto yy420;
+       case 'i':       goto yy507;
+       default:        goto yy438;
        }
-yy489:
+yy507:
        yych = *++c;
        switch (yych) {
        case 'P':
-       case 'p':       goto yy490;
-       default:        goto yy420;
+       case 'p':       goto yy508;
+       default:        goto yy438;
        }
-yy490:
+yy508:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy440;
-       default:        goto yy420;
+       case 't':       goto yy458;
+       default:        goto yy438;
        }
-yy491:
+yy509:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy492;
-       default:        goto yy420;
+       case 'a':       goto yy510;
+       default:        goto yy438;
        }
-yy492:
+yy510:
        yych = *++c;
        switch (yych) {
        case 'M':
-       case 'm':       goto yy493;
-       default:        goto yy420;
+       case 'm':       goto yy511;
+       default:        goto yy438;
        }
-yy493:
+yy511:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy494;
-       default:        goto yy420;
+       case 'e':       goto yy512;
+       default:        goto yy438;
        }
-yy494:
+yy512:
        yych = *++c;
        switch (yych) {
        case 'S':
-       case 's':       goto yy440;
-       default:        goto yy420;
+       case 's':       goto yy458;
+       default:        goto yy438;
        }
-yy495:
+yy513:
        yych = *++c;
        switch (yych) {
        case 'N':
-       case 'n':       goto yy498;
-       default:        goto yy420;
+       case 'n':       goto yy516;
+       default:        goto yy438;
        }
-yy496:
+yy514:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy497;
-       default:        goto yy420;
+       case 'i':       goto yy515;
+       default:        goto yy438;
        }
-yy497:
+yy515:
        yych = *++c;
        switch (yych) {
        case 'N':
-       case 'n':       goto yy440;
-       default:        goto yy420;
+       case 'n':       goto yy458;
+       default:        goto yy438;
        }
-yy498:
+yy516:
        yych = *++c;
        switch (yych) {
        case 'U':
-       case 'u':       goto yy440;
-       default:        goto yy420;
+       case 'u':       goto yy458;
+       default:        goto yy438;
        }
-yy499:
+yy517:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy500;
-       default:        goto yy420;
+       case 'i':       goto yy518;
+       default:        goto yy438;
        }
-yy500:
+yy518:
        yych = *++c;
        switch (yych) {
        case 'N':
-       case 'n':       goto yy501;
-       default:        goto yy420;
+       case 'n':       goto yy519;
+       default:        goto yy438;
        }
-yy501:
+yy519:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy502;
-       default:        goto yy420;
+       case 'd':       goto yy520;
+       default:        goto yy438;
        }
-yy502:
+yy520:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy503;
-       default:        goto yy420;
+       case 'e':       goto yy521;
+       default:        goto yy438;
        }
-yy503:
+yy521:
        yych = *++c;
        switch (yych) {
        case 'X':
-       case 'x':       goto yy440;
-       default:        goto yy420;
+       case 'x':       goto yy458;
+       default:        goto yy438;
        }
-yy504:
+yy522:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy509;
-       default:        goto yy420;
+       case 'r':       goto yy527;
+       default:        goto yy438;
        }
-yy505:
+yy523:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy506;
-       default:        goto yy420;
+       case 'a':       goto yy524;
+       default:        goto yy438;
        }
-yy506:
+yy524:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy507;
-       default:        goto yy420;
+       case 'd':       goto yy525;
+       default:        goto yy438;
        }
-yy507:
+yy525:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy508;
-       default:        goto yy420;
+       case 'e':       goto yy526;
+       default:        goto yy438;
        }
-yy508:
+yy526:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy440;
-       default:        goto yy420;
+       case 'r':       goto yy458;
+       default:        goto yy438;
        }
-yy509:
+yy527:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy510;
-       default:        goto yy420;
+       case 'o':       goto yy528;
+       default:        goto yy438;
        }
-yy510:
+yy528:
        yych = *++c;
        switch (yych) {
        case 'U':
-       case 'u':       goto yy511;
-       default:        goto yy420;
+       case 'u':       goto yy529;
+       default:        goto yy438;
        }
-yy511:
+yy529:
        yych = *++c;
        switch (yych) {
        case 'P':
-       case 'p':       goto yy440;
-       default:        goto yy420;
+       case 'p':       goto yy458;
+       default:        goto yy438;
        }
-yy512:
+yy530:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy533;
-       default:        goto yy420;
+       case 'a':       goto yy551;
+       default:        goto yy438;
        }
-yy513:
+yy531:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy529;
+       case 'o':       goto yy547;
        case 'R':
-       case 'r':       goto yy530;
-       default:        goto yy420;
+       case 'r':       goto yy548;
+       default:        goto yy438;
        }
-yy514:
+yy532:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy515;
+       case 'e':       goto yy533;
        case 'G':
-       case 'g':       goto yy516;
-       default:        goto yy420;
+       case 'g':       goto yy534;
+       default:        goto yy438;
        }
-yy515:
+yy533:
        yych = *++c;
        switch (yych) {
        case 'L':
-       case 'l':       goto yy525;
-       default:        goto yy420;
+       case 'l':       goto yy543;
+       default:        goto yy438;
        }
-yy516:
+yy534:
        yych = *++c;
        switch (yych) {
        case 'C':
-       case 'c':       goto yy518;
+       case 'c':       goto yy536;
        case 'U':
-       case 'u':       goto yy517;
-       default:        goto yy420;
+       case 'u':       goto yy535;
+       default:        goto yy438;
        }
-yy517:
+yy535:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy524;
-       default:        goto yy420;
+       case 'r':       goto yy542;
+       default:        goto yy438;
        }
-yy518:
+yy536:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy519;
-       default:        goto yy420;
+       case 'a':       goto yy537;
+       default:        goto yy438;
        }
-yy519:
+yy537:
        yych = *++c;
        switch (yych) {
        case 'P':
-       case 'p':       goto yy520;
-       default:        goto yy420;
+       case 'p':       goto yy538;
+       default:        goto yy438;
        }
-yy520:
+yy538:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy521;
-       default:        goto yy420;
+       case 't':       goto yy539;
+       default:        goto yy438;
        }
-yy521:
+yy539:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy522;
-       default:        goto yy420;
+       case 'i':       goto yy540;
+       default:        goto yy438;
        }
-yy522:
+yy540:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy523;
-       default:        goto yy420;
+       case 'o':       goto yy541;
+       default:        goto yy438;
        }
-yy523:
+yy541:
        yych = *++c;
        switch (yych) {
        case 'N':
-       case 'n':       goto yy440;
-       default:        goto yy420;
+       case 'n':       goto yy458;
+       default:        goto yy438;
        }
-yy524:
+yy542:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy440;
-       default:        goto yy420;
+       case 'e':       goto yy458;
+       default:        goto yy438;
        }
-yy525:
+yy543:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy526;
-       default:        goto yy420;
+       case 'd':       goto yy544;
+       default:        goto yy438;
        }
-yy526:
+yy544:
        yych = *++c;
        switch (yych) {
        case 'S':
-       case 's':       goto yy527;
-       default:        goto yy420;
+       case 's':       goto yy545;
+       default:        goto yy438;
        }
-yy527:
+yy545:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy528;
-       default:        goto yy420;
+       case 'e':       goto yy546;
+       default:        goto yy438;
        }
-yy528:
+yy546:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy440;
-       default:        goto yy420;
+       case 't':       goto yy458;
+       default:        goto yy438;
        }
-yy529:
+yy547:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy531;
-       default:        goto yy420;
+       case 't':       goto yy549;
+       default:        goto yy438;
        }
-yy530:
+yy548:
        yych = *++c;
        switch (yych) {
        case 'M':
-       case 'm':       goto yy440;
-       default:        goto yy420;
+       case 'm':       goto yy458;
+       default:        goto yy438;
        }
-yy531:
+yy549:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy532;
-       default:        goto yy420;
+       case 'e':       goto yy550;
+       default:        goto yy438;
        }
-yy532:
+yy550:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy440;
-       default:        goto yy420;
+       case 'r':       goto yy458;
+       default:        goto yy438;
        }
-yy533:
+yy551:
        yych = *++c;
        switch (yych) {
        case 'M':
-       case 'm':       goto yy534;
-       default:        goto yy420;
+       case 'm':       goto yy552;
+       default:        goto yy438;
        }
-yy534:
+yy552:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy535;
-       default:        goto yy420;
+       case 'e':       goto yy553;
+       default:        goto yy438;
        }
-yy535:
+yy553:
        yych = *++c;
        switch (yych) {
        case 'S':
-       case 's':       goto yy536;
-       default:        goto yy420;
+       case 's':       goto yy554;
+       default:        goto yy438;
        }
-yy536:
+yy554:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy537;
-       default:        goto yy420;
+       case 'e':       goto yy555;
+       default:        goto yy438;
        }
-yy537:
+yy555:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy440;
-       default:        goto yy420;
+       case 't':       goto yy458;
+       default:        goto yy438;
        }
-yy538:
+yy556:
        yych = *++c;
        switch (yych) {
        case 'R':
        case 'V':
        case 'r':
-       case 'v':       goto yy440;
-       default:        goto yy420;
+       case 'v':       goto yy458;
+       default:        goto yy438;
        }
-yy539:
+yy557:
        yych = *++c;
        switch (yych) {
        case 'N':
-       case 'n':       goto yy544;
-       default:        goto yy420;
+       case 'n':       goto yy562;
+       default:        goto yy438;
        }
-yy540:
+yy558:
        yych = *++c;
        switch (yych) {
        case 'N':
-       case 'n':       goto yy541;
-       default:        goto yy420;
+       case 'n':       goto yy559;
+       default:        goto yy438;
        }
-yy541:
+yy559:
        yych = *++c;
        switch (yych) {
        case 'V':
-       case 'v':       goto yy542;
-       default:        goto yy420;
+       case 'v':       goto yy560;
+       default:        goto yy438;
        }
-yy542:
+yy560:
        yych = *++c;
        switch (yych) {
        case 'A':
-       case 'a':       goto yy543;
-       default:        goto yy420;
+       case 'a':       goto yy561;
+       default:        goto yy438;
        }
-yy543:
+yy561:
        yych = *++c;
        switch (yych) {
        case 'S':
-       case 's':       goto yy440;
-       default:        goto yy420;
+       case 's':       goto yy458;
+       default:        goto yy438;
        }
-yy544:
+yy562:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy545;
-       default:        goto yy420;
+       case 't':       goto yy563;
+       default:        goto yy438;
        }
-yy545:
+yy563:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy546;
-       default:        goto yy420;
+       case 'e':       goto yy564;
+       default:        goto yy438;
        }
-yy546:
+yy564:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy440;
-       default:        goto yy420;
+       case 'r':       goto yy458;
+       default:        goto yy438;
        }
-yy547:
+yy565:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy548;
-       default:        goto yy420;
+       case 'o':       goto yy566;
+       default:        goto yy438;
        }
-yy548:
+yy566:
        yych = *++c;
        switch (yych) {
        case 'C':
-       case 'c':       goto yy549;
-       default:        goto yy420;
+       case 'c':       goto yy567;
+       default:        goto yy438;
        }
-yy549:
+yy567:
        yych = *++c;
        switch (yych) {
        case 'K':
-       case 'k':       goto yy550;
-       default:        goto yy420;
+       case 'k':       goto yy568;
+       default:        goto yy438;
        }
-yy550:
+yy568:
        yych = *++c;
        switch (yych) {
        case 'Q':
-       case 'q':       goto yy551;
-       default:        goto yy420;
+       case 'q':       goto yy569;
+       default:        goto yy438;
        }
-yy551:
+yy569:
        yych = *++c;
        switch (yych) {
        case 'U':
-       case 'u':       goto yy552;
-       default:        goto yy420;
+       case 'u':       goto yy570;
+       default:        goto yy438;
        }
-yy552:
+yy570:
        yych = *++c;
        switch (yych) {
        case 'O':
-       case 'o':       goto yy553;
-       default:        goto yy420;
+       case 'o':       goto yy571;
+       default:        goto yy438;
        }
-yy553:
+yy571:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy554;
-       default:        goto yy420;
+       case 't':       goto yy572;
+       default:        goto yy438;
        }
-yy554:
+yy572:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy440;
-       default:        goto yy420;
+       case 'e':       goto yy458;
+       default:        goto yy438;
        }
-yy555:
+yy573:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy566;
-       default:        goto yy420;
+       case 'i':       goto yy584;
+       default:        goto yy438;
        }
-yy556:
+yy574:
        yych = *++c;
        switch (yych) {
        case 'T':
-       case 't':       goto yy562;
-       default:        goto yy420;
+       case 't':       goto yy580;
+       default:        goto yy438;
        }
-yy557:
+yy575:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy558;
-       default:        goto yy420;
+       case 'd':       goto yy576;
+       default:        goto yy438;
        }
-yy558:
+yy576:
        yych = *++c;
        switch (yych) {
        case 'R':
-       case 'r':       goto yy559;
-       default:        goto yy420;
+       case 'r':       goto yy577;
+       default:        goto yy438;
        }
-yy559:
+yy577:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy560;
-       default:        goto yy420;
+       case 'e':       goto yy578;
+       default:        goto yy438;
        }
-yy560:
+yy578:
        yych = *++c;
        switch (yych) {
        case 'S':
-       case 's':       goto yy561;
-       default:        goto yy420;
+       case 's':       goto yy579;
+       default:        goto yy438;
        }
-yy561:
+yy579:
        yych = *++c;
        switch (yych) {
        case 'S':
-       case 's':       goto yy440;
-       default:        goto yy420;
+       case 's':       goto yy458;
+       default:        goto yy438;
        }
-yy562:
+yy580:
        yych = *++c;
        switch (yych) {
        case 'I':
-       case 'i':       goto yy563;
-       default:        goto yy420;
+       case 'i':       goto yy581;
+       default:        goto yy438;
        }
-yy563:
+yy581:
        yych = *++c;
        switch (yych) {
        case 'C':
-       case 'c':       goto yy564;
-       default:        goto yy420;
+       case 'c':       goto yy582;
+       default:        goto yy438;
        }
-yy564:
+yy582:
        yych = *++c;
        switch (yych) {
        case 'L':
-       case 'l':       goto yy565;
-       default:        goto yy420;
+       case 'l':       goto yy583;
+       default:        goto yy438;
        }
-yy565:
+yy583:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy440;
-       default:        goto yy420;
+       case 'e':       goto yy458;
+       default:        goto yy438;
        }
-yy566:
+yy584:
        yych = *++c;
        switch (yych) {
        case 'D':
-       case 'd':       goto yy567;
-       default:        goto yy420;
+       case 'd':       goto yy585;
+       default:        goto yy438;
        }
-yy567:
+yy585:
        yych = *++c;
        switch (yych) {
        case 'E':
-       case 'e':       goto yy440;
-       default:        goto yy420;
+       case 'e':       goto yy458;
+       default:        goto yy438;
        }
-yy568:
+yy586:
        ++c;
        switch ((yych = *c)) {
        case 'E':
-       case 'e':       goto yy473;
-       default:        goto yy447;
+       case 'e':       goto yy491;
+       default:        goto yy465;
        }
 }
        
@@ -7504,17 +7606,17 @@ size_t scan_html_line(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy571;
-       case '<':       goto yy572;
-       default:        goto yy573;
+       case '\n':      goto yy589;
+       case '<':       goto yy590;
+       default:        goto yy591;
        }
-yy571:
+yy589:
        { return 0; }
-yy572:
+yy590:
        yych = *(marker = ++c);
        switch (yych) {
-       case '!':       goto yy574;
-       case '/':       goto yy576;
+       case '!':       goto yy592;
+       case '/':       goto yy594;
        case 'A':
        case 'B':
        case 'C':
@@ -7566,22 +7668,22 @@ yy572:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy577;
-       default:        goto yy571;
+       case 'z':       goto yy595;
+       default:        goto yy589;
        }
-yy573:
+yy591:
        yych = *++c;
-       goto yy571;
-yy574:
+       goto yy589;
+yy592:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy608;
-       default:        goto yy575;
+       case '-':       goto yy626;
+       default:        goto yy593;
        }
-yy575:
+yy593:
        c = marker;
-       goto yy571;
-yy576:
+       goto yy589;
+yy594:
        yych = *++c;
        switch (yych) {
        case 'A':
@@ -7635,17 +7737,17 @@ yy576:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy604;
-       default:        goto yy575;
+       case 'z':       goto yy622;
+       default:        goto yy593;
        }
-yy577:
+yy595:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy581;
-       case '\n':      goto yy583;
-       case '\r':      goto yy585;
+       case ' ':       goto yy599;
+       case '\n':      goto yy601;
+       case '\r':      goto yy603;
        case '-':
        case '0':
        case '1':
@@ -7656,11 +7758,11 @@ yy577:
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy577;
-       case '/':       goto yy590;
+       case '9':       goto yy595;
+       case '/':       goto yy608;
        case ':':
-       case '_':       goto yy586;
-       case '>':       goto yy588;
+       case '_':       goto yy604;
+       case '>':       goto yy606;
        case 'A':
        case 'B':
        case 'C':
@@ -7712,17 +7814,17 @@ yy577:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy579;
-       default:        goto yy575;
+       case 'z':       goto yy597;
+       default:        goto yy593;
        }
-yy579:
+yy597:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy581;
-       case '\n':      goto yy583;
-       case '\r':      goto yy585;
+       case ' ':       goto yy599;
+       case '\n':      goto yy601;
+       case '\r':      goto yy603;
        case '-':
        case '0':
        case '1':
@@ -7785,24 +7887,24 @@ yy579:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy579;
+       case 'z':       goto yy597;
        case '.':
        case ':':
-       case '_':       goto yy586;
-       case '/':       goto yy590;
-       case '=':       goto yy594;
-       case '>':       goto yy588;
-       default:        goto yy575;
+       case '_':       goto yy604;
+       case '/':       goto yy608;
+       case '=':       goto yy612;
+       case '>':       goto yy606;
+       default:        goto yy593;
        }
-yy581:
+yy599:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy581;
-       case '\n':      goto yy583;
-       case '\r':      goto yy585;
-       case '/':       goto yy590;
+       case ' ':       goto yy599;
+       case '\n':      goto yy601;
+       case '\r':      goto yy603;
+       case '/':       goto yy608;
        case ':':
        case 'A':
        case 'B':
@@ -7856,16 +7958,16 @@ yy581:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy586;
-       case '>':       goto yy588;
-       default:        goto yy575;
+       case 'z':       goto yy604;
+       case '>':       goto yy606;
+       default:        goto yy593;
        }
-yy583:
+yy601:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy583;
+       case ' ':       goto yy601;
        case ':':
        case 'A':
        case 'B':
@@ -7919,16 +8021,16 @@ yy583:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy586;
-       default:        goto yy575;
+       case 'z':       goto yy604;
+       default:        goto yy593;
        }
-yy585:
+yy603:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
        case '\n':
-       case ' ':       goto yy583;
+       case ' ':       goto yy601;
        case ':':
        case 'A':
        case 'B':
@@ -7982,10 +8084,10 @@ yy585:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy586;
-       default:        goto yy575;
+       case 'z':       goto yy604;
+       default:        goto yy593;
        }
-yy586:
+yy604:
        ++c;
        yych = *c;
        switch (yych) {
@@ -8054,44 +8156,44 @@ yy586:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy586;
-       case '=':       goto yy594;
-       default:        goto yy575;
+       case 'z':       goto yy604;
+       case '=':       goto yy612;
+       default:        goto yy593;
        }
-yy588:
+yy606:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy588;
-       case '\n':      goto yy591;
-       case '\r':      goto yy593;
-       default:        goto yy575;
+       case ' ':       goto yy606;
+       case '\n':      goto yy609;
+       case '\r':      goto yy611;
+       default:        goto yy593;
        }
-yy590:
+yy608:
        yych = *++c;
        switch (yych) {
-       case '>':       goto yy588;
-       default:        goto yy575;
+       case '>':       goto yy606;
+       default:        goto yy593;
        }
-yy591:
+yy609:
        ++c;
-yy592:
+yy610:
        { return (size_t)( c - start ); }
-yy593:
+yy611:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy591;
-       default:        goto yy592;
+       case '\n':      goto yy609;
+       default:        goto yy610;
        }
-yy594:
+yy612:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy594;
-       case '"':       goto yy596;
-       case '\'':      goto yy598;
+       case ' ':       goto yy612;
+       case '"':       goto yy614;
+       case '\'':      goto yy616;
        case '.':
        case '0':
        case '1':
@@ -8154,37 +8256,37 @@ yy594:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy600;
-       default:        goto yy575;
+       case 'z':       goto yy618;
+       default:        goto yy593;
        }
-yy596:
+yy614:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy575;
-       case '"':       goto yy581;
-       default:        goto yy596;
+       case '\r':      goto yy593;
+       case '"':       goto yy599;
+       default:        goto yy614;
        }
-yy598:
+yy616:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy575;
-       case '\'':      goto yy581;
-       default:        goto yy598;
+       case '\r':      goto yy593;
+       case '\'':      goto yy599;
+       default:        goto yy616;
        }
-yy600:
+yy618:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy581;
-       case '\n':      goto yy583;
-       case '\r':      goto yy585;
+       case ' ':       goto yy599;
+       case '\n':      goto yy601;
+       case '\r':      goto yy603;
        case '.':
        case '0':
        case '1':
@@ -8195,11 +8297,11 @@ yy600:
        case '6':
        case '7':
        case '8':
-       case '9':       goto yy600;
-       case '/':       goto yy590;
+       case '9':       goto yy618;
+       case '/':       goto yy608;
        case ':':
-       case '_':       goto yy586;
-       case '>':       goto yy588;
+       case '_':       goto yy604;
+       case '>':       goto yy606;
        case 'A':
        case 'B':
        case 'C':
@@ -8251,20 +8353,20 @@ yy600:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy602;
-       default:        goto yy575;
+       case 'z':       goto yy620;
+       default:        goto yy593;
        }
-yy602:
+yy620:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy581;
-       case '\n':      goto yy583;
-       case '\r':      goto yy585;
+       case ' ':       goto yy599;
+       case '\n':      goto yy601;
+       case '\r':      goto yy603;
        case '-':
        case ':':
-       case '_':       goto yy586;
+       case '_':       goto yy604;
        case '.':
        case '0':
        case '1':
@@ -8327,18 +8429,18 @@ yy602:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy602;
-       case '/':       goto yy590;
-       case '=':       goto yy594;
-       case '>':       goto yy588;
-       default:        goto yy575;
+       case 'z':       goto yy620;
+       case '/':       goto yy608;
+       case '=':       goto yy612;
+       case '>':       goto yy606;
+       default:        goto yy593;
        }
-yy604:
+yy622:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy606;
+       case ' ':       goto yy624;
        case '-':
        case '0':
        case '1':
@@ -8401,58 +8503,58 @@ yy604:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy604;
-       case '>':       goto yy588;
-       default:        goto yy575;
+       case 'z':       goto yy622;
+       case '>':       goto yy606;
+       default:        goto yy593;
        }
-yy606:
+yy624:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy606;
-       case '>':       goto yy588;
-       default:        goto yy575;
+       case ' ':       goto yy624;
+       case '>':       goto yy606;
+       default:        goto yy593;
        }
-yy608:
+yy626:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy609;
-       default:        goto yy575;
+       case '-':       goto yy627;
+       default:        goto yy593;
        }
-yy609:
+yy627:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy575;
-       default:        goto yy611;
+       case '-':       goto yy593;
+       default:        goto yy629;
        }
-yy610:
+yy628:
        ++c;
        yych = *c;
-yy611:
+yy629:
        switch (yych) {
        case 0x00:
-       case '>':       goto yy575;
-       case '-':       goto yy612;
-       default:        goto yy610;
+       case '>':       goto yy593;
+       case '-':       goto yy630;
+       default:        goto yy628;
        }
-yy612:
+yy630:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '>':       goto yy575;
-       case '-':       goto yy613;
-       default:        goto yy610;
+       case '>':       goto yy593;
+       case '-':       goto yy631;
+       default:        goto yy628;
        }
-yy613:
+yy631:
        ++c;
        yych = *c;
        switch (yych) {
-       case 0x00:      goto yy575;
-       case '-':       goto yy613;
-       case '>':       goto yy588;
-       default:        goto yy610;
+       case 0x00:      goto yy593;
+       case '-':       goto yy631;
+       case '>':       goto yy606;
+       default:        goto yy628;
        }
 }
        
@@ -8468,108 +8570,108 @@ size_t scan_fence_start(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy617;
-       case ' ':       goto yy618;
+       case '\n':      goto yy635;
+       case ' ':       goto yy636;
        case '`':
-       case '~':       goto yy619;
-       default:        goto yy620;
+       case '~':       goto yy637;
+       default:        goto yy638;
        }
-yy617:
+yy635:
        { return 0; }
-yy618:
+yy636:
        yych = *(marker = ++c);
        switch (yych) {
-       case ' ':       goto yy632;
+       case ' ':       goto yy650;
        case '`':
-       case '~':       goto yy633;
-       default:        goto yy617;
+       case '~':       goto yy651;
+       default:        goto yy635;
        }
-yy619:
+yy637:
        yych = *(marker = ++c);
        switch (yych) {
        case '`':
-       case '~':       goto yy621;
-       default:        goto yy617;
+       case '~':       goto yy639;
+       default:        goto yy635;
        }
-yy620:
+yy638:
        yych = *++c;
-       goto yy617;
-yy621:
+       goto yy635;
+yy639:
        yych = *++c;
        switch (yych) {
        case '`':
-       case '~':       goto yy623;
-       default:        goto yy622;
+       case '~':       goto yy641;
+       default:        goto yy640;
        }
-yy622:
+yy640:
        c = marker;
-       goto yy617;
-yy623:
+       goto yy635;
+yy641:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
        case '\r':
-       case '\'':      goto yy622;
-       case '`':       goto yy623;
-       case '~':       goto yy627;
-       default:        goto yy625;
+       case '\'':      goto yy640;
+       case '`':       goto yy641;
+       case '~':       goto yy645;
+       default:        goto yy643;
        }
-yy625:
+yy643:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy629;
-       case '\r':      goto yy631;
+       case '\n':      goto yy647;
+       case '\r':      goto yy649;
        case '\'':
-       case '`':       goto yy622;
-       default:        goto yy625;
+       case '`':       goto yy640;
+       default:        goto yy643;
        }
-yy627:
+yy645:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy629;
-       case '\r':      goto yy631;
-       case '\'':      goto yy622;
-       case '`':       goto yy623;
-       case '~':       goto yy627;
-       default:        goto yy625;
+       case '\n':      goto yy647;
+       case '\r':      goto yy649;
+       case '\'':      goto yy640;
+       case '`':       goto yy641;
+       case '~':       goto yy645;
+       default:        goto yy643;
        }
-yy629:
+yy647:
        ++c;
-yy630:
+yy648:
        { return (size_t)( c - start ); }
-yy631:
+yy649:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy629;
-       default:        goto yy630;
+       case '\n':      goto yy647;
+       default:        goto yy648;
        }
-yy632:
+yy650:
        yych = *++c;
        switch (yych) {
-       case ' ':       goto yy634;
+       case ' ':       goto yy652;
        case '`':
-       case '~':       goto yy633;
-       default:        goto yy622;
+       case '~':       goto yy651;
+       default:        goto yy640;
        }
-yy633:
+yy651:
        yych = *++c;
        switch (yych) {
        case '`':
-       case '~':       goto yy621;
-       default:        goto yy622;
+       case '~':       goto yy639;
+       default:        goto yy640;
        }
-yy634:
+yy652:
        ++c;
        switch ((yych = *c)) {
        case '`':
-       case '~':       goto yy633;
-       default:        goto yy622;
+       case '~':       goto yy651;
+       default:        goto yy640;
        }
 }
        
@@ -8585,97 +8687,97 @@ size_t scan_fence_end(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy637;
-       case ' ':       goto yy638;
+       case '\n':      goto yy655;
+       case ' ':       goto yy656;
        case '`':
-       case '~':       goto yy639;
-       default:        goto yy640;
+       case '~':       goto yy657;
+       default:        goto yy658;
        }
-yy637:
+yy655:
        { return 0; }
-yy638:
+yy656:
        yych = *(marker = ++c);
        switch (yych) {
-       case ' ':       goto yy650;
+       case ' ':       goto yy668;
        case '`':
-       case '~':       goto yy651;
-       default:        goto yy637;
+       case '~':       goto yy669;
+       default:        goto yy655;
        }
-yy639:
+yy657:
        yych = *(marker = ++c);
        switch (yych) {
        case '`':
-       case '~':       goto yy641;
-       default:        goto yy637;
+       case '~':       goto yy659;
+       default:        goto yy655;
        }
-yy640:
+yy658:
        yych = *++c;
-       goto yy637;
-yy641:
+       goto yy655;
+yy659:
        yych = *++c;
        switch (yych) {
        case '`':
-       case '~':       goto yy643;
-       default:        goto yy642;
+       case '~':       goto yy661;
+       default:        goto yy660;
        }
-yy642:
+yy660:
        c = marker;
-       goto yy637;
-yy643:
+       goto yy655;
+yy661:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy647;
+       case '\n':      goto yy665;
        case '\t':
-       case ' ':       goto yy645;
-       case '\r':      goto yy649;
+       case ' ':       goto yy663;
+       case '\r':      goto yy667;
        case '`':
-       case '~':       goto yy643;
-       default:        goto yy642;
+       case '~':       goto yy661;
+       default:        goto yy660;
        }
-yy645:
+yy663:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy647;
+       case '\n':      goto yy665;
        case '\t':
-       case ' ':       goto yy645;
-       case '\r':      goto yy649;
-       default:        goto yy642;
+       case ' ':       goto yy663;
+       case '\r':      goto yy667;
+       default:        goto yy660;
        }
-yy647:
+yy665:
        ++c;
-yy648:
+yy666:
        { return (size_t)( c - start ); }
-yy649:
+yy667:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy647;
-       default:        goto yy648;
+       case '\n':      goto yy665;
+       default:        goto yy666;
        }
-yy650:
+yy668:
        yych = *++c;
        switch (yych) {
-       case ' ':       goto yy652;
+       case ' ':       goto yy670;
        case '`':
-       case '~':       goto yy651;
-       default:        goto yy642;
+       case '~':       goto yy669;
+       default:        goto yy660;
        }
-yy651:
+yy669:
        yych = *++c;
        switch (yych) {
        case '`':
-       case '~':       goto yy641;
-       default:        goto yy642;
+       case '~':       goto yy659;
+       default:        goto yy660;
        }
-yy652:
+yy670:
        ++c;
        switch ((yych = *c)) {
        case '`':
-       case '~':       goto yy651;
-       default:        goto yy642;
+       case '~':       goto yy669;
+       default:        goto yy660;
        }
 }
        
@@ -8691,7 +8793,7 @@ size_t scan_meta_line(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy655;
+       case '\n':      goto yy673;
        case '0':
        case '1':
        case '2':
@@ -8753,15 +8855,15 @@ size_t scan_meta_line(const char * c) {
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy656;
-       default:        goto yy657;
+       case 'z':       goto yy674;
+       default:        goto yy675;
        }
-yy655:
+yy673:
        { return 0; }
-yy656:
+yy674:
        yych = *(marker = ++c);
        switch (yych) {
-       case '\t':      goto yy661;
+       case '\t':      goto yy679;
        case ' ':
        case '!':
        case '"':
@@ -8839,18 +8941,18 @@ yy656:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy658;
-       case ':':       goto yy663;
-       default:        goto yy655;
+       case 'z':       goto yy676;
+       case ':':       goto yy681;
+       default:        goto yy673;
        }
-yy657:
+yy675:
        yych = *++c;
-       goto yy655;
-yy658:
+       goto yy673;
+yy676:
        ++c;
        yych = *c;
        switch (yych) {
-       case '\t':      goto yy661;
+       case '\t':      goto yy679;
        case ' ':
        case '!':
        case '"':
@@ -8928,48 +9030,48 @@ yy658:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy658;
-       case ':':       goto yy663;
-       default:        goto yy660;
+       case 'z':       goto yy676;
+       case ':':       goto yy681;
+       default:        goto yy678;
        }
-yy660:
+yy678:
        c = marker;
-       goto yy655;
-yy661:
+       goto yy673;
+yy679:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy661;
-       case ':':       goto yy663;
-       default:        goto yy660;
+       case ' ':       goto yy679;
+       case ':':       goto yy681;
+       default:        goto yy678;
        }
-yy663:
+yy681:
        yych = *++c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy660;
-       default:        goto yy664;
+       case '\r':      goto yy678;
+       default:        goto yy682;
        }
-yy664:
+yy682:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy666;
-       case '\r':      goto yy668;
-       default:        goto yy664;
+       case '\n':      goto yy684;
+       case '\r':      goto yy686;
+       default:        goto yy682;
        }
-yy666:
+yy684:
        ++c;
-yy667:
+yy685:
        { return (size_t)( c - start ); }
-yy668:
+yy686:
        ++c;
        switch ((yych = *c)) {
-       case '\n':      goto yy666;
-       default:        goto yy667;
+       case '\n':      goto yy684;
+       default:        goto yy685;
        }
 }
        
@@ -8984,7 +9086,7 @@ size_t scan_meta_key(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy671;
+       case '\n':      goto yy689;
        case '0':
        case '1':
        case '2':
@@ -9046,24 +9148,24 @@ size_t scan_meta_key(const char * c) {
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy672;
-       default:        goto yy674;
+       case 'z':       goto yy690;
+       default:        goto yy692;
        }
-yy671:
+yy689:
        { return 0; }
-yy672:
+yy690:
        ++c;
        yych = *c;
-       goto yy676;
-yy673:
+       goto yy694;
+yy691:
        { return (size_t)( c - start ); }
-yy674:
+yy692:
        yych = *++c;
-       goto yy671;
-yy675:
+       goto yy689;
+yy693:
        ++c;
        yych = *c;
-yy676:
+yy694:
        switch (yych) {
        case ' ':
        case '!':
@@ -9142,8 +9244,8 @@ yy676:
        case 'w':
        case 'x':
        case 'y':
-       case 'z':       goto yy675;
-       default:        goto yy673;
+       case 'z':       goto yy693;
+       default:        goto yy691;
        }
 }
        
@@ -9159,71 +9261,71 @@ size_t scan_definition(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy679;
-       case ' ':       goto yy680;
-       case ':':       goto yy681;
-       default:        goto yy682;
+       case '\n':      goto yy697;
+       case ' ':       goto yy698;
+       case ':':       goto yy699;
+       default:        goto yy700;
        }
-yy679:
+yy697:
        { return 0; }
-yy680:
+yy698:
        yych = *(marker = ++c);
        switch (yych) {
-       case ' ':       goto yy687;
-       case ':':       goto yy689;
-       default:        goto yy679;
+       case ' ':       goto yy705;
+       case ':':       goto yy707;
+       default:        goto yy697;
        }
-yy681:
+yy699:
        yych = *++c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy679;
-       default:        goto yy684;
+       case '\r':      goto yy697;
+       default:        goto yy702;
        }
-yy682:
+yy700:
        yych = *++c;
-       goto yy679;
-yy683:
+       goto yy697;
+yy701:
        ++c;
        yych = *c;
-yy684:
+yy702:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy685;
+       case '\r':      goto yy703;
        case '\t':
-       case ' ':       goto yy683;
-       default:        goto yy686;
+       case ' ':       goto yy701;
+       default:        goto yy704;
        }
-yy685:
+yy703:
        { return (size_t)( c - start ); }
-yy686:
+yy704:
        yych = *++c;
-       goto yy685;
-yy687:
+       goto yy703;
+yy705:
        yych = *++c;
        switch (yych) {
-       case ' ':       goto yy690;
-       case ':':       goto yy689;
-       default:        goto yy688;
+       case ' ':       goto yy708;
+       case ':':       goto yy707;
+       default:        goto yy706;
        }
-yy688:
+yy706:
        c = marker;
-       goto yy679;
-yy689:
+       goto yy697;
+yy707:
        yych = *++c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy688;
-       default:        goto yy684;
+       case '\r':      goto yy706;
+       default:        goto yy702;
        }
-yy690:
+yy708:
        ++c;
        switch ((yych = *c)) {
-       case ':':       goto yy689;
-       default:        goto yy688;
+       case ':':       goto yy707;
+       default:        goto yy706;
        }
 }
        
@@ -9244,14 +9346,14 @@ size_t scan_table_separator(const char * c) {
        case '+':
        case '-':
        case ':':
-       case '=':       goto yy695;
-       case '\n':      goto yy693;
-       case '|':       goto yy694;
-       default:        goto yy696;
+       case '=':       goto yy713;
+       case '\n':      goto yy711;
+       case '|':       goto yy712;
+       default:        goto yy714;
        }
-yy693:
+yy711:
        { return 0; }
-yy694:
+yy712:
        yych = *(marker = ++c);
        switch (yych) {
        case 0x00:
@@ -9263,10 +9365,10 @@ yy694:
        case '-':
        case ':':
        case '=':
-       case '|':       goto yy706;
-       default:        goto yy693;
+       case '|':       goto yy724;
+       default:        goto yy711;
        }
-yy695:
+yy713:
        yych = *(marker = ++c);
        switch (yych) {
        case '\t':
@@ -9274,33 +9376,33 @@ yy695:
        case '+':
        case '-':
        case ':':
-       case '=':       goto yy700;
-       case '|':       goto yy697;
-       default:        goto yy693;
+       case '=':       goto yy718;
+       case '|':       goto yy715;
+       default:        goto yy711;
        }
-yy696:
+yy714:
        yych = *++c;
-       goto yy693;
-yy697:
+       goto yy711;
+yy715:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy702;
+       case '\n':      goto yy720;
        case '\t':
        case ' ':
        case '+':
        case '-':
        case ':':
        case '=':
-       case '|':       goto yy697;
-       case '\r':      goto yy704;
-       default:        goto yy699;
+       case '|':       goto yy715;
+       case '\r':      goto yy722;
+       default:        goto yy717;
        }
-yy699:
+yy717:
        c = marker;
-       goto yy693;
-yy700:
+       goto yy711;
+yy718:
        ++c;
        yych = *c;
        switch (yych) {
@@ -9309,36 +9411,36 @@ yy700:
        case '+':
        case '-':
        case ':':
-       case '=':       goto yy700;
-       case '|':       goto yy697;
-       default:        goto yy699;
+       case '=':       goto yy718;
+       case '|':       goto yy715;
+       default:        goto yy717;
        }
-yy702:
+yy720:
        ++c;
-yy703:
+yy721:
        { return (size_t)( c - start ); }
-yy704:
+yy722:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy702;
-       default:        goto yy703;
+       case '\n':      goto yy720;
+       default:        goto yy721;
        }
-yy705:
+yy723:
        ++c;
        yych = *c;
-yy706:
+yy724:
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy702;
+       case '\n':      goto yy720;
        case '\t':
        case ' ':
        case '+':
        case '-':
        case ':':
        case '=':
-       case '|':       goto yy705;
-       case '\r':      goto yy704;
-       default:        goto yy699;
+       case '|':       goto yy723;
+       case '\r':      goto yy722;
+       default:        goto yy717;
        }
 }
        
@@ -9354,234 +9456,234 @@ size_t scan_alignment_string(const char * c) {
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy710;
-       case '\n':      goto yy709;
+       case ' ':       goto yy728;
+       case '\n':      goto yy727;
        case '-':
-       case '=':       goto yy712;
-       case ':':       goto yy711;
-       default:        goto yy713;
+       case '=':       goto yy730;
+       case ':':       goto yy729;
+       default:        goto yy731;
        }
-yy709:
+yy727:
        { return 0; }
-yy710:
+yy728:
        yych = *(marker = ++c);
        switch (yych) {
        case '\t':
-       case ' ':       goto yy752;
+       case ' ':       goto yy770;
        case '-':
-       case '=':       goto yy716;
-       case ':':       goto yy751;
-       default:        goto yy709;
+       case '=':       goto yy734;
+       case ':':       goto yy769;
+       default:        goto yy727;
        }
-yy711:
+yy729:
        yych = *(marker = ++c);
        switch (yych) {
        case '-':
-       case '=':       goto yy728;
-       default:        goto yy709;
+       case '=':       goto yy746;
+       default:        goto yy727;
        }
-yy712:
+yy730:
        yych = *(marker = ++c);
        switch (yych) {
        case '-':
-       case '=':       goto yy716;
-       case ':':       goto yy714;
-       default:        goto yy709;
+       case '=':       goto yy734;
+       case ':':       goto yy732;
+       default:        goto yy727;
        }
-yy713:
+yy731:
        yych = *++c;
-       goto yy709;
-yy714:
+       goto yy727;
+yy732:
        yych = *++c;
        switch (yych) {
-       case '+':       goto yy723;
-       default:        goto yy719;
+       case '+':       goto yy741;
+       default:        goto yy737;
        }
-yy715:
+yy733:
        c = marker;
-       goto yy709;
-yy716:
+       goto yy727;
+yy734:
        ++c;
        yych = *c;
        switch (yych) {
        case '-':
-       case '=':       goto yy716;
-       case ':':       goto yy714;
-       default:        goto yy715;
+       case '=':       goto yy734;
+       case ':':       goto yy732;
+       default:        goto yy733;
        }
-yy718:
+yy736:
        ++c;
        yych = *c;
-yy719:
+yy737:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '|':       goto yy720;
+       case '|':       goto yy738;
        case '\t':
-       case ' ':       goto yy718;
-       case '\r':      goto yy722;
-       default:        goto yy715;
+       case ' ':       goto yy736;
+       case '\r':      goto yy740;
+       default:        goto yy733;
        }
-yy720:
+yy738:
        ++c;
-yy721:
+yy739:
        { return ALIGN_RIGHT; }
-yy722:
+yy740:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy720;
-       default:        goto yy721;
+       case '\n':      goto yy738;
+       default:        goto yy739;
        }
-yy723:
+yy741:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '|':       goto yy725;
+       case '|':       goto yy743;
        case '\t':
-       case ' ':       goto yy723;
-       case '\r':      goto yy727;
-       default:        goto yy715;
+       case ' ':       goto yy741;
+       case '\r':      goto yy745;
+       default:        goto yy733;
        }
-yy725:
+yy743:
        ++c;
-yy726:
+yy744:
        { return ALIGN_WRAP | ALIGN_RIGHT; }
-yy727:
+yy745:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy725;
-       default:        goto yy726;
+       case '\n':      goto yy743;
+       default:        goto yy744;
        }
-yy728:
+yy746:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '|':       goto yy732;
+       case '|':       goto yy750;
        case '\t':
-       case ' ':       goto yy730;
-       case '\r':      goto yy734;
-       case '+':       goto yy736;
+       case ' ':       goto yy748;
+       case '\r':      goto yy752;
+       case '+':       goto yy754;
        case '-':
-       case '=':       goto yy728;
-       case ':':       goto yy735;
-       default:        goto yy715;
+       case '=':       goto yy746;
+       case ':':       goto yy753;
+       default:        goto yy733;
        }
-yy730:
+yy748:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '|':       goto yy732;
+       case '|':       goto yy750;
        case '\t':
-       case ' ':       goto yy730;
-       case '\r':      goto yy734;
-       default:        goto yy715;
+       case ' ':       goto yy748;
+       case '\r':      goto yy752;
+       default:        goto yy733;
        }
-yy732:
+yy750:
        ++c;
-yy733:
+yy751:
        { return ALIGN_LEFT; }
-yy734:
+yy752:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy732;
-       default:        goto yy733;
+       case '\n':      goto yy750;
+       default:        goto yy751;
        }
-yy735:
+yy753:
        yych = *++c;
        switch (yych) {
-       case '+':       goto yy741;
-       default:        goto yy744;
+       case '+':       goto yy759;
+       default:        goto yy762;
        }
-yy736:
+yy754:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '|':       goto yy738;
+       case '|':       goto yy756;
        case '\t':
-       case ' ':       goto yy736;
-       case '\r':      goto yy740;
-       default:        goto yy715;
+       case ' ':       goto yy754;
+       case '\r':      goto yy758;
+       default:        goto yy733;
        }
-yy738:
+yy756:
        ++c;
-yy739:
+yy757:
        { return ALIGN_WRAP | ALIGN_LEFT; }
-yy740:
+yy758:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy738;
-       default:        goto yy739;
+       case '\n':      goto yy756;
+       default:        goto yy757;
        }
-yy741:
+yy759:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
        case '\n':
-       case '|':       goto yy748;
+       case '|':       goto yy766;
        case '\t':
-       case ' ':       goto yy741;
-       case '\r':      goto yy750;
-       default:        goto yy715;
+       case ' ':       goto yy759;
+       case '\r':      goto yy768;
+       default:        goto yy733;
        }
-yy743:
+yy761:
        ++c;
        yych = *c;
-yy744:
+yy762:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '|':       goto yy745;
+       case '|':       goto yy763;
        case '\t':
-       case ' ':       goto yy743;
-       case '\r':      goto yy747;
-       default:        goto yy715;
+       case ' ':       goto yy761;
+       case '\r':      goto yy765;
+       default:        goto yy733;
        }
-yy745:
+yy763:
        ++c;
-yy746:
+yy764:
        { return ALIGN_CENTER; }
-yy747:
+yy765:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy745;
-       default:        goto yy746;
+       case '\n':      goto yy763;
+       default:        goto yy764;
        }
-yy748:
+yy766:
        ++c;
-yy749:
+yy767:
        { return ALIGN_WRAP | ALIGN_CENTER; }
-yy750:
+yy768:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy748;
-       default:        goto yy749;
+       case '\n':      goto yy766;
+       default:        goto yy767;
        }
-yy751:
+yy769:
        yych = *++c;
        switch (yych) {
        case '-':
-       case '=':       goto yy728;
-       default:        goto yy715;
+       case '=':       goto yy746;
+       default:        goto yy733;
        }
-yy752:
+yy770:
        ++c;
        yych = *c;
        switch (yych) {
        case '\t':
-       case ' ':       goto yy752;
+       case ' ':       goto yy770;
        case '-':
-       case '=':       goto yy716;
-       case ':':       goto yy751;
-       default:        goto yy715;
+       case '=':       goto yy734;
+       case ':':       goto yy769;
+       default:        goto yy733;
        }
 }
        
@@ -9599,49 +9701,49 @@ size_t scan_destination(const char * c) {
        case 0x00:
        case '\t':
        case '\r':
-       case ' ':       goto yy760;
-       case '\n':      goto yy756;
-       case '<':       goto yy757;
-       default:        goto yy759;
+       case ' ':       goto yy778;
+       case '\n':      goto yy774;
+       case '<':       goto yy775;
+       default:        goto yy777;
        }
-yy756:
+yy774:
        { return 0; }
-yy757:
+yy775:
        ++c;
        yych = *c;
-       goto yy764;
-yy758:
+       goto yy782;
+yy776:
        { return (size_t)( c - start ); }
-yy759:
+yy777:
        yych = *++c;
-       goto yy762;
-yy760:
+       goto yy780;
+yy778:
        yych = *++c;
-       goto yy756;
-yy761:
+       goto yy774;
+yy779:
        ++c;
        yych = *c;
-yy762:
+yy780:
        switch (yych) {
        case 0x00:
        case '\t':
        case '\n':
        case '\r':
-       case ' ':       goto yy758;
-       default:        goto yy761;
+       case ' ':       goto yy776;
+       default:        goto yy779;
        }
-yy763:
+yy781:
        ++c;
        yych = *c;
-yy764:
+yy782:
        switch (yych) {
        case 0x00:
        case '\t':
        case '\n':
        case '\r':
-       case ' ':       goto yy758;
-       case '>':       goto yy761;
-       default:        goto yy763;
+       case ' ':       goto yy776;
+       case '>':       goto yy779;
+       default:        goto yy781;
        }
 }
        
@@ -9657,79 +9759,79 @@ size_t scan_title(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy767;
-       case '"':       goto yy768;
-       case '\'':      goto yy769;
-       case '(':       goto yy770;
-       default:        goto yy771;
+       case '\n':      goto yy785;
+       case '"':       goto yy786;
+       case '\'':      goto yy787;
+       case '(':       goto yy788;
+       default:        goto yy789;
        }
-yy767:
+yy785:
        { return 0; }
-yy768:
+yy786:
        yych = *(marker = ++c);
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy767;
-       default:        goto yy780;
+       case '\r':      goto yy785;
+       default:        goto yy798;
        }
-yy769:
+yy787:
        yych = *(marker = ++c);
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy767;
-       default:        goto yy778;
+       case '\r':      goto yy785;
+       default:        goto yy796;
        }
-yy770:
+yy788:
        yych = *(marker = ++c);
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy767;
-       default:        goto yy773;
+       case '\r':      goto yy785;
+       default:        goto yy791;
        }
-yy771:
+yy789:
        yych = *++c;
-       goto yy767;
-yy772:
+       goto yy785;
+yy790:
        ++c;
        yych = *c;
-yy773:
+yy791:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy774;
-       case ')':       goto yy775;
-       default:        goto yy772;
+       case '\r':      goto yy792;
+       case ')':       goto yy793;
+       default:        goto yy790;
        }
-yy774:
+yy792:
        c = marker;
-       goto yy767;
-yy775:
+       goto yy785;
+yy793:
        ++c;
        { return (size_t)( c - start ); }
-yy777:
+yy795:
        ++c;
        yych = *c;
-yy778:
+yy796:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy774;
-       case '\'':      goto yy775;
-       default:        goto yy777;
+       case '\r':      goto yy792;
+       case '\'':      goto yy793;
+       default:        goto yy795;
        }
-yy779:
+yy797:
        ++c;
        yych = *c;
-yy780:
+yy798:
        switch (yych) {
        case 0x00:
        case '\n':
-       case '\r':      goto yy774;
-       case '"':       goto yy775;
-       default:        goto yy779;
+       case '\r':      goto yy792;
+       case '"':       goto yy793;
+       default:        goto yy797;
        }
 }
        
@@ -9744,106 +9846,106 @@ size_t scan_setext(const char * c) {
        char yych;
        yych = *c;
        switch (yych) {
-       case '\n':      goto yy783;
-       case ' ':       goto yy784;
-       case '-':       goto yy786;
-       case '=':       goto yy785;
-       default:        goto yy787;
+       case '\n':      goto yy801;
+       case ' ':       goto yy802;
+       case '-':       goto yy804;
+       case '=':       goto yy803;
+       default:        goto yy805;
        }
-yy783:
+yy801:
        { return 0; }
-yy784:
+yy802:
        yych = *(marker = ++c);
        switch (yych) {
-       case ' ':       goto yy799;
-       case '-':       goto yy800;
-       case '=':       goto yy801;
-       default:        goto yy783;
+       case ' ':       goto yy817;
+       case '-':       goto yy818;
+       case '=':       goto yy819;
+       default:        goto yy801;
        }
-yy785:
+yy803:
        yych = *(marker = ++c);
        switch (yych) {
-       case '=':       goto yy794;
-       default:        goto yy783;
+       case '=':       goto yy812;
+       default:        goto yy801;
        }
-yy786:
+yy804:
        yych = *(marker = ++c);
        switch (yych) {
-       case '-':       goto yy788;
-       default:        goto yy783;
+       case '-':       goto yy806;
+       default:        goto yy801;
        }
-yy787:
+yy805:
        yych = *++c;
-       goto yy783;
-yy788:
+       goto yy801;
+yy806:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy791;
-       case '\r':      goto yy793;
-       case '-':       goto yy788;
-       default:        goto yy790;
+       case '\n':      goto yy809;
+       case '\r':      goto yy811;
+       case '-':       goto yy806;
+       default:        goto yy808;
        }
-yy790:
+yy808:
        c = marker;
-       goto yy783;
-yy791:
+       goto yy801;
+yy809:
        ++c;
-yy792:
+yy810:
        { return (size_t)( c - start ); }
-yy793:
+yy811:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy791;
-       default:        goto yy792;
+       case '\n':      goto yy809;
+       default:        goto yy810;
        }
-yy794:
+yy812:
        ++c;
        yych = *c;
        switch (yych) {
        case 0x00:
-       case '\n':      goto yy796;
-       case '\r':      goto yy798;
-       case '=':       goto yy794;
-       default:        goto yy790;
+       case '\n':      goto yy814;
+       case '\r':      goto yy816;
+       case '=':       goto yy812;
+       default:        goto yy808;
        }
-yy796:
+yy814:
        ++c;
-yy797:
+yy815:
        { return (size_t)( c - start ); }
-yy798:
+yy816:
        yych = *++c;
        switch (yych) {
-       case '\n':      goto yy796;
-       default:        goto yy797;
+       case '\n':      goto yy814;
+       default:        goto yy815;
        }
-yy799:
+yy817:
        yych = *++c;
        switch (yych) {
-       case ' ':       goto yy802;
-       case '-':       goto yy800;
-       case '=':       goto yy801;
-       default:        goto yy790;
+       case ' ':       goto yy820;
+       case '-':       goto yy818;
+       case '=':       goto yy819;
+       default:        goto yy808;
        }
-yy800:
+yy818:
        yych = *++c;
        switch (yych) {
-       case '-':       goto yy788;
-       default:        goto yy790;
+       case '-':       goto yy806;
+       default:        goto yy808;
        }
-yy801:
+yy819:
        yych = *++c;
        switch (yych) {
-       case '=':       goto yy794;
-       default:        goto yy790;
+       case '=':       goto yy812;
+       default:        goto yy808;
        }
-yy802:
+yy820:
        ++c;
        switch ((yych = *c)) {
-       case '-':       goto yy800;
-       case '=':       goto yy801;
-       default:        goto yy790;
+       case '-':       goto yy818;
+       case '=':       goto yy819;
+       default:        goto yy808;
        }
 }
        
index f06b67625951b2051a411b89f8a611241fd60590..c0460854b62b82729b6ec2ed9d200f2d3b768091 100644 (file)
@@ -87,6 +87,7 @@ size_t scan_meta_line(const char * c);
 size_t scan_ref_abbreviation(const char * c);
 size_t scan_ref_citation(const char * c);
 size_t scan_ref_foot(const char * c);
+size_t scan_ref_glossary(const char * c);
 size_t scan_ref_link(const char * c);
 size_t scan_ref_link_no_attributes(const char * c);
 size_t scan_setext(const char * c);
index 03559e56bab23569ac978c00c0c398a06aed3197..7d0e3f99af8064caa29841691fdd3df12a1194a9 100644 (file)
@@ -95,6 +95,8 @@
 
        ref_foot        = non_indent '[^' label ']' ':' finish_line;
 
+       ref_glossary    = non_indent '[?' label ']' ':' finish_line;
+
        ref_link        = non_indent '[' label ']' ':' finish_line;
 
        destination     = ('<' [^ \t\n\r\x00>]* '>') | [^ \t\n\r\x00]+;
@@ -256,6 +258,7 @@ size_t scan_ref_citation(const char * c) {
 */     
 }
 
+
 size_t scan_ref_foot(const char * c) {
        const char * marker = NULL;
        const char * start = c;
@@ -267,6 +270,17 @@ size_t scan_ref_foot(const char * c) {
 }
 
 
+size_t scan_ref_glossary(const char * c) {
+       const char * marker = NULL;
+       const char * start = c;
+
+/*!re2c
+       ref_glossary    { return (size_t)( c - start ); }
+       .?                      { return 0; }
+*/     
+}
+
+
 size_t scan_ref_link_no_attributes(const char * c) {
        const char * marker = NULL;
        const char * start = c;
index fa394a7a9d1cd6a773bcc9c0a3e27d882856656c..a573d2d90176d4fb3d79a98939b3fb7d953b557b 100644 (file)
@@ -76,6 +76,8 @@ void store_citation(scratch_pad * scratch, footnote * f);
 
 void store_footnote(scratch_pad * scratch, footnote * f);
 
+void store_glossary(scratch_pad * scratch, footnote * f);
+
 void store_link(scratch_pad * scratch, link * l);
 
 void store_metadata(scratch_pad * scratch, meta * m);
@@ -143,6 +145,22 @@ scratch_pad * scratch_pad_new(mmd_engine * e, short format) {
                        store_link(p, l);
                }
 
+               // Store citations in a hash for rapid retrieval when exporting
+               footnote * f;
+
+               p->used_citations = stack_new(0);
+               p->inline_citations_to_free = stack_new(0);
+               p->citation_being_printed = 0;
+
+               p->citation_hash = NULL;
+
+               for (int i = 0; i < e->citation_stack->size; ++i)
+               {
+                       f = stack_peek_index(e->citation_stack, i);
+
+                       store_citation(p, f);
+               }
+
                // Store footnotes in a hash for rapid retrieval when exporting
                p->used_footnotes = stack_new(0);                               // Store footnotes as we use them
                p->inline_footnotes_to_free = stack_new(0);             // Inline footnotes need to be freed
@@ -151,8 +169,6 @@ scratch_pad * scratch_pad_new(mmd_engine * e, short format) {
 
                p->footnote_hash = NULL;                                // Store defined footnotes in a hash
 
-               footnote * f;
-
                for (int i = 0; i < e->footnote_stack->size; ++i)
                {
                        f = stack_peek_index(e->footnote_stack, i);
@@ -160,18 +176,18 @@ scratch_pad * scratch_pad_new(mmd_engine * e, short format) {
                        store_footnote(p, f);
                }
 
-               // Store citations in a hash for rapid retrieval when exporting
-               p->used_citations = stack_new(0);
-               p->inline_citations_to_free = stack_new(0);
-               p->citation_being_printed = 0;
+               // Store glossaries in a hash for rapid retrieval when exporting
+               p->used_glossaries = stack_new(0);
+               p->inline_glossaries_to_free = stack_new(0);
+               p->glossary_being_printed = 0;
 
-               p->citation_hash = NULL;
+               p->glossary_hash = NULL;
 
-               for (int i = 0; i < e->citation_stack->size; ++i)
+               for (int i = 0; i < e->glossary_stack->size; ++i)
                {
-                       f = stack_peek_index(e->citation_stack, i);
+                       f = stack_peek_index(e->glossary_stack, i);
 
-                       store_citation(p, f);
+                       store_glossary(p, f);
                }
 
                // Store metadata in a hash for rapid retrieval when exporting
@@ -245,6 +261,21 @@ void scratch_pad_free(scratch_pad * scratch) {
        }
        stack_free(scratch->inline_citations_to_free);
 
+
+       // Free glossary hash
+       HASH_ITER(hh, scratch->glossary_hash, f, f_tmp) {
+               HASH_DEL(scratch->glossary_hash, f);    // Remove item from hash
+               free(f);                // Free the fn_holder
+       }
+
+       stack_free(scratch->used_glossaries);
+
+       while (scratch->inline_glossaries_to_free->size) {
+               footnote_free(stack_pop(scratch->inline_glossaries_to_free));
+       }
+       stack_free(scratch->inline_glossaries_to_free);
+
+
        // Free metadata hash
        meta * m, * m_tmp;
        
@@ -663,6 +694,19 @@ void store_citation(scratch_pad * scratch, footnote * f) {
 }
 
 
+void store_glossary(scratch_pad * scratch, footnote * f) {
+       fn_holder * temp_holder;
+
+       // Store by `label_text`?
+       HASH_FIND_STR(scratch->glossary_hash, f->label_text, temp_holder);
+
+       if (!temp_holder) {
+               temp_holder = fn_holder_new(f);
+               HASH_ADD_KEYPTR(hh, scratch->glossary_hash, f->label_text, strlen(f->label_text), temp_holder);
+       }
+}
+
+
 void store_metadata(scratch_pad * scratch, meta * m) {
        meta * temp;
 
@@ -1057,28 +1101,29 @@ bool definition_extract(mmd_engine * e, token ** remainder) {
 
        switch (label->type) {
                case PAIR_BRACKET_CITATION:
-                       if (e->extensions & EXT_NOTES) {
-                               if (!token_chain_accept(remainder, COLON))
-                                       return false;
-
-                               title = *remainder;             // Track first token of content in 'title'
-                               f = footnote_new(e->dstr->str, label, title);
-
-                               // Store citation for later use
-                               stack_push(e->citation_stack, f);
-                               
-                               break;
-                       }
                case PAIR_BRACKET_FOOTNOTE:
+               case PAIR_BRACKET_GLOSSARY:
                        if (e->extensions & EXT_NOTES) {
                                if (!token_chain_accept(remainder, COLON))
                                        return false;
 
                                title = *remainder;             // Track first token of content in 'title'
-                               f = footnote_new(e->dstr->str, label, title);
 
-                               // Store footnote for later use
-                               stack_push(e->footnote_stack, f);
+                               // Store for later use
+                               switch (label->type) {
+                                       case PAIR_BRACKET_CITATION:
+                                               f = footnote_new(e->dstr->str, label, title);
+                                               stack_push(e->citation_stack, f);
+                                               break;
+                                       case PAIR_BRACKET_GLOSSARY:
+                                               f = footnote_new(e->dstr->str, label, title);
+                                               stack_push(e->glossary_stack, f);
+                                               break;
+                                       case PAIR_BRACKET_FOOTNOTE:
+                                               f = footnote_new(e->dstr->str, label, title);
+                                               stack_push(e->footnote_stack, f);
+                                               break;
+                               }
                                
                                break;
                        }
@@ -1175,16 +1220,24 @@ void process_definition_block(mmd_engine * e, token * block) {
                label = label->child;
 
        switch (block->type) {
-               case BLOCK_DEF_FOOTNOTE:
-                       f = footnote_new(e->dstr->str, label, block->child);
-                       stack_push(e->footnote_stack, f);
-                       label->type = TEXT_EMPTY;
-                       label->next->type = TEXT_EMPTY;
-                       strip_leading_whitespace(label, e->dstr->str);
-                       break;
                case BLOCK_DEF_CITATION:
+               case BLOCK_DEF_FOOTNOTE:
+               case BLOCK_DEF_GLOSSARY:
                        f = footnote_new(e->dstr->str, label, block->child);
-                       stack_push(e->citation_stack, f);
+                       switch (block->type) {
+                               case BLOCK_DEF_CITATION:
+                                       stack_push(e->citation_stack, f);
+                                       break;
+                               case BLOCK_DEF_FOOTNOTE:
+                                       stack_push(e->footnote_stack, f);
+                                       break;
+                               case BLOCK_DEF_GLOSSARY:
+                                       // Strip leading '?' from term
+                                       memmove(f->clean_text, &(f->clean_text)[1],strlen(f->clean_text));
+
+                                       stack_push(e->glossary_stack, f);
+                                       break;
+                       }
                        label->type = TEXT_EMPTY;
                        label->next->type = TEXT_EMPTY;
                        strip_leading_whitespace(label, e->dstr->str);
@@ -1580,6 +1633,7 @@ void mmd_export_token_tree(DString * out, mmd_engine * e, short format) {
 
                        mmd_export_token_tree_html(out, e->dstr->str, e->root, 0, scratch);
                        mmd_export_footnote_list_html(out, e->dstr->str, scratch);
+                       mmd_export_glossary_list_html(out, e->dstr->str, scratch);
                        mmd_export_citation_list_html(out, e->dstr->str, scratch);
 
                        if (scratch->extensions & EXT_COMPLETE)
@@ -1670,6 +1724,7 @@ void parse_brackets(const char * source, scratch_pad * scratch, token * bracket,
                                case PAIR_BRACKET:
                                case PAIR_BRACKET_CITATION:
                                case PAIR_BRACKET_FOOTNOTE:
+                               case PAIR_BRACKET_GLOSSARY:
                                case PAIR_BRACKET_VARIABLE:
                                case PAIR_BRACKET_ABBREVIATION:
                                        *final_link = NULL;
@@ -1732,6 +1787,17 @@ void mark_footnote_as_used(scratch_pad * scratch, footnote * f) {
 }
 
 
+void mark_glossary_as_used(scratch_pad * scratch, footnote * c) {
+       if (c->count == -1) {
+               // Add glossary to used stack
+               stack_push(scratch->used_glossaries, c);
+
+               // Update counter
+               c->count = scratch->used_glossaries->size;
+       }
+}
+
+
 size_t extract_citation_from_stack(scratch_pad * scratch, const char * target) {
        char * key = clean_string(target, true);
 
@@ -1792,6 +1858,36 @@ size_t extract_footnote_from_stack(scratch_pad * scratch, const char * target) {
 }
 
 
+size_t extract_glossary_from_stack(scratch_pad * scratch, const char * target) {
+       char * key = clean_string(target, true);
+
+       fn_holder * h;
+
+       HASH_FIND_STR(scratch->glossary_hash, key, h);
+
+       free(key);
+
+       if (h) {
+               mark_glossary_as_used(scratch, h->note);
+               return h->note->count;
+       }
+
+       key = label_from_string(target);
+
+       HASH_FIND_STR(scratch->glossary_hash, key, h);
+
+       free(key);
+
+       if (h) {
+               mark_glossary_as_used(scratch, h->note);
+               return h->note->count;
+       }
+
+       // None found
+       return -1;
+}
+
+
 void footnote_from_bracket(const char * source, scratch_pad * scratch, token * t, short * num) {
        // Get text inside bracket
        char * text = text_inside_pair(source, t);
@@ -1852,6 +1948,45 @@ void citation_from_bracket(const char * source, scratch_pad * scratch, token * t
 }
 
 
+void glossary_from_bracket(const char * source, scratch_pad * scratch, token * t, short * num) {
+       // Get text inside bracket
+       char * text = text_inside_pair(source, t);
+       short glossary_id = extract_glossary_from_stack(scratch, text);
+       
+       free(text);
+
+       if (glossary_id == -1) {
+               // No match, this is an inline glossary -- create a new glossary entry
+               t->child->type = TEXT_EMPTY;
+               t->child->mate->type = TEXT_EMPTY;
+
+               // Create glossary
+               token * label = t->child;
+               while (label && label->type != PAIR_PAREN)
+                       label = label->next;
+
+               if (label) {
+                       footnote * temp = footnote_new(source, label, label->next);
+
+                       // Store as used
+                       stack_push(scratch->used_glossaries, temp);
+                       *num = scratch->used_glossaries->size;
+                       temp->count = *num;
+
+                       // We need to free this one later since it doesn't exist
+                       // in the engine's stack, on the scratch_pad stack
+                       stack_push(scratch->inline_glossaries_to_free, temp);
+               } else {
+                       // Improperly formatted glossary
+                       *num = -1;
+               }
+       } else {
+               // Glossary in stack
+               *num = glossary_id;
+       }
+}
+
+
 void read_table_column_alignments(const char * source, token * table, scratch_pad * scratch) {
        token * walker = table->child->child;
 
index 8133238ed001c2274d66c9507eaf54422a4ea43c..89322054701959de2278496c5596191f4349bb2e 100644 (file)
@@ -93,6 +93,11 @@ typedef struct {
        struct fn_holder *      citation_hash;
        short                           citation_being_printed;
 
+       stack *                         used_glossaries;
+       stack *                         inline_glossaries_to_free;
+       struct fn_holder *      glossary_hash;
+       short                           glossary_being_printed;
+
        struct abbr *           abbreviation_hash;
 
        short                           language;
@@ -207,8 +212,9 @@ void print_token_tree_raw(DString * out, const char * source, token * t);
 
 char * url_accept(const char * source, size_t start, size_t max_len, size_t * end_pos, bool validate);
 
-void footnote_from_bracket(const char * source, scratch_pad * scratch, token * t, short * num);
 void citation_from_bracket(const char * source, scratch_pad * scratch, token * t, short * num);
+void footnote_from_bracket(const char * source, scratch_pad * scratch, token * t, short * num);
+void glossary_from_bracket(const char * source, scratch_pad * scratch, token * t, short * num);
 
 meta * meta_new(const char * source, size_t start, size_t len);
 void meta_set_value(meta * m, const char * value);
diff --git a/tests/MMD6Tests/Glossaries.html b/tests/MMD6Tests/Glossaries.html
new file mode 100644 (file)
index 0000000..d8298b3
--- /dev/null
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<head>
+       <meta charset="utf-8"/>
+       <title>Glossary</title>
+</head>
+<body>
+
+<p><a href="#gn:1" id="gnref:1" title="see glossary" class="glossary">foo</a></p>
+
+<p><a href="#gn:2" id="gnref:2" title="see glossary" class="glossary">bar</a></p>
+
+<p><a href="#gn:3" id="gnref:3" title="see glossary" class="glossary">foo bar</a></p>
+
+<p><a href="#gn:1" title="see glossary" class="glossary">foo</a></p>
+
+<p>[?bar]</p>
+
+<p>5</p>
+
+<div class="glossary">
+<hr />
+<ol>
+
+<li id="gn:1">
+foo: <p>Reference <a href="#gnref:1" title="return to body" class="reverseglossary">&#160;&#8617;</a></p>
+</li>
+
+<li id="gn:2">
+bar: <p>Inline <a href="#gnref:2" title="return to body" class="reverseglossary">&#160;&#8617;</a></p>
+</li>
+
+<li id="gn:3">
+foo bar: <p>Reference</p>
+
+<p>With second para. <a href="#gnref:3" title="return to body" class="reverseglossary">&#160;&#8617;</a></p>
+</li>
+
+</ol>
+</div>
+
+</body>
+</html>
+
diff --git a/tests/MMD6Tests/Glossaries.htmlc b/tests/MMD6Tests/Glossaries.htmlc
new file mode 100644 (file)
index 0000000..880ea80
--- /dev/null
@@ -0,0 +1,17 @@
+<p>latexconfig:                article
+Title:                         Glossary</p>
+
+<p><a href="Reference">?foo</a></p>
+
+<p>[?(bar) Inline]</p>
+
+<p><a href="Reference">?foo bar</a></p>
+
+<p><a href="Reference">?foo</a></p>
+
+<p>[?bar]</p>
+
+<p>5</p>
+
+<pre><code>With second para.
+</code></pre>
diff --git a/tests/MMD6Tests/Glossaries.tex b/tests/MMD6Tests/Glossaries.tex
new file mode 100644 (file)
index 0000000..e53cd02
--- /dev/null
@@ -0,0 +1,26 @@
+\input{mmd6-article-leader}
+\def\mytitle{Glossary}
+\longnewglossaryentry{foo}{name=foo}{Reference}
+
+\longnewglossaryentry{foobar}{name=foo bar}{
+
+Reference
+
+With second para.}
+
+\input{mmd6-article-begin}
+
+\gls{foo}
+
+\newglossaryentry{bar}{name=bar, description={Inline}}\gls{bar}
+
+\gls{foobar}
+
+\gls{foo}
+
+[?bar]
+
+5
+
+\input{mmd6-article-footer}
+\end{document}
diff --git a/tests/MMD6Tests/Glossaries.text b/tests/MMD6Tests/Glossaries.text
new file mode 100644 (file)
index 0000000..64b3fb0
--- /dev/null
@@ -0,0 +1,20 @@
+latexconfig:           article
+Title:                         Glossary  
+
+[?foo]
+
+[?(bar) Inline]
+
+[?foo bar]
+
+[?foo]
+
+[?bar]
+
+5
+
+[?foo]: Reference
+
+[?foo bar]: Reference
+
+       With second para.