From: Fletcher T. Penney Date: Wed, 25 Jan 2017 00:03:13 +0000 (-0500) Subject: ADDED: Initial framework for metadata parsing X-Git-Tag: 0.1.1a^2~12 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=591d3184237f8b95a8a20bbda57bc75e68cd6819;p=multimarkdown ADDED: Initial framework for metadata parsing --- diff --git a/src/html.c b/src/html.c index b9904df..30c4283 100644 --- a/src/html.c +++ b/src/html.c @@ -422,6 +422,11 @@ void mmd_export_token_html(DString * out, const char * source, token * t, size_t print(""); scratch->padded = 0; break; + case BLOCK_META: + print("\n"); + //token_tree_describe(t, source); + print("\n"); + break; case BLOCK_PARA: case BLOCK_DEF_CITATION: case BLOCK_DEF_FOOTNOTE: diff --git a/src/libMultiMarkdown.h b/src/libMultiMarkdown.h index 9da0f82..b8ac561 100644 --- a/src/libMultiMarkdown.h +++ b/src/libMultiMarkdown.h @@ -131,6 +131,7 @@ enum token_types { BLOCK_LIST_ENUMERATED_LOOSE, BLOCK_LIST_ITEM, BLOCK_LIST_ITEM_TIGHT, + BLOCK_META, BLOCK_PARA, BLOCK_TABLE, ROW_TABLE, diff --git a/src/mmd.c b/src/mmd.c index d113743..32e27d6 100644 --- a/src/mmd.c +++ b/src/mmd.c @@ -91,6 +91,8 @@ mmd_engine * mmd_engine_create(DString * d, unsigned long extensions) { e->extensions = extensions; + e->allow_meta = (extensions & EXT_COMPATIBILITY) ? false : true; + e->language = LC_EN; e->quotes_lang = ENGLISH; @@ -276,15 +278,17 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { switch (line->child->type) { case INDENT_TAB: - if (line_is_empty(line->child)) + if (line_is_empty(line->child)) { line->type = LINE_EMPTY; - else + e->allow_meta = false; + } else line->type = LINE_INDENTED_TAB; break; case INDENT_SPACE: - if (line_is_empty(line->child)) + if (line_is_empty(line->child)) { line->type = LINE_EMPTY; - else + e->allow_meta = false; + } else line->type = LINE_INDENTED_SPACE; break; case ANGLE_LEFT: @@ -490,6 +494,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; case TEXT_LINEBREAK: case TEXT_NL: + e->allow_meta = false; line->type = LINE_EMPTY; break; case BRACKET_LEFT: @@ -518,6 +523,14 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { } break; case TEXT_PLAIN: + if (e->allow_meta && !(e->extensions & EXT_COMPATIBILITY)) { + scan_len = scan_url(&source[line->start]); + if (scan_len == 0) { + scan_len = scan_meta_line(&source[line->start]); + line->type = (scan_len) ? LINE_META : LINE_PLAIN; + break; + } + } default: line->type = LINE_PLAIN; break; @@ -847,6 +860,7 @@ void mmd_assign_ambidextrous_tokens_in_block(mmd_engine * e, token * block, cons case BLOCK_LIST_ENUMERATED_LOOSE: case BLOCK_LIST_ITEM: case BLOCK_LIST_ITEM_TIGHT: + case BLOCK_META: case BLOCK_PARA: case BLOCK_TABLE: // Assign child tokens of blocks @@ -1312,6 +1326,7 @@ void strip_line_tokens_from_block(token * block) { case LINE_EMPTY: case LINE_LIST_BULLETED: case LINE_LIST_ENUMERATED: + case LINE_META: case LINE_PLAIN: // Remove leading non-indent space from line if (l->child && l->child->type == NON_INDENT_SPACE) diff --git a/src/mmd.h b/src/mmd.h index 61733d7..1612a94 100644 --- a/src/mmd.h +++ b/src/mmd.h @@ -67,6 +67,8 @@ struct mmd_engine { token * root; unsigned long extensions; + bool allow_meta; + token_pair_engine * pairings1; token_pair_engine * pairings2; token_pair_engine * pairings3; diff --git a/src/parser.c b/src/parser.c index e3c3095..8f77bbf 100644 --- a/src/parser.c +++ b/src/parser.c @@ -92,7 +92,7 @@ #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned char -#define YYNOCODE 54 +#define YYNOCODE 58 #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 38 -#define YYNRULE 85 -#define YY_MAX_SHIFT 37 -#define YY_MIN_SHIFTREDUCE 88 -#define YY_MAX_SHIFTREDUCE 172 -#define YY_MIN_REDUCE 173 -#define YY_MAX_REDUCE 257 -#define YY_ERROR_ACTION 258 -#define YY_ACCEPT_ACTION 259 -#define YY_NO_ACTION 260 +#define YYNSTATE 40 +#define YYNRULE 92 +#define YY_MAX_SHIFT 39 +#define YY_MIN_SHIFTREDUCE 95 +#define YY_MAX_SHIFTREDUCE 186 +#define YY_MIN_REDUCE 187 +#define YY_MAX_REDUCE 278 +#define YY_ERROR_ACTION 279 +#define YY_ACCEPT_ACTION 280 +#define YY_NO_ACTION 281 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -188,70 +188,72 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (163) +#define YY_ACTTAB_COUNT (171) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 173, 153, 20, 147, 148, 13, 93, 94, 95, 96, - /* 10 */ 97, 98, 104, 14, 5, 4, 162, 3, 2, 15, - /* 20 */ 12, 11, 153, 20, 147, 148, 13, 93, 94, 95, - /* 30 */ 96, 97, 98, 104, 14, 5, 4, 162, 3, 2, - /* 40 */ 15, 12, 11, 153, 259, 1, 90, 91, 10, 37, - /* 50 */ 35, 33, 102, 36, 105, 106, 107, 108, 109, 112, - /* 60 */ 112, 171, 26, 26, 28, 35, 146, 33, 89, 91, - /* 70 */ 10, 37, 35, 33, 102, 36, 105, 106, 107, 108, - /* 80 */ 109, 28, 172, 126, 28, 151, 152, 35, 143, 33, - /* 90 */ 25, 6, 6, 157, 7, 7, 138, 28, 16, 111, - /* 100 */ 16, 18, 28, 18, 150, 156, 28, 8, 8, 28, - /* 110 */ 171, 171, 9, 9, 21, 146, 21, 111, 115, 23, - /* 120 */ 111, 23, 28, 17, 116, 17, 19, 28, 19, 141, - /* 130 */ 139, 172, 172, 111, 151, 152, 153, 4, 111, 22, - /* 140 */ 5, 22, 30, 30, 24, 129, 24, 27, 27, 113, - /* 150 */ 168, 29, 29, 113, 169, 31, 31, 32, 32, 34, - /* 160 */ 34, 175, 121, + /* 0 */ 187, 163, 21, 157, 158, 14, 100, 101, 102, 103, + /* 10 */ 104, 105, 111, 15, 5, 4, 172, 3, 2, 16, + /* 20 */ 13, 12, 163, 11, 21, 157, 158, 14, 100, 101, + /* 30 */ 102, 103, 104, 105, 111, 15, 5, 4, 172, 3, + /* 40 */ 2, 16, 13, 12, 163, 11, 280, 1, 97, 98, + /* 50 */ 10, 39, 37, 35, 109, 38, 112, 113, 114, 115, + /* 60 */ 116, 117, 120, 120, 156, 186, 30, 30, 37, 181, + /* 70 */ 35, 96, 98, 10, 39, 37, 35, 109, 38, 112, + /* 80 */ 113, 114, 115, 116, 117, 29, 156, 185, 29, 151, + /* 90 */ 182, 37, 26, 35, 27, 27, 6, 6, 153, 7, + /* 100 */ 7, 29, 146, 17, 29, 17, 19, 163, 19, 28, + /* 110 */ 28, 29, 8, 8, 29, 9, 9, 161, 162, 22, + /* 120 */ 119, 22, 24, 119, 24, 123, 119, 29, 29, 18, + /* 130 */ 181, 18, 20, 181, 20, 29, 160, 161, 162, 119, + /* 140 */ 119, 4, 31, 31, 129, 23, 25, 23, 25, 149, + /* 150 */ 167, 182, 147, 178, 182, 134, 121, 179, 32, 32, + /* 160 */ 33, 33, 166, 34, 34, 36, 36, 5, 124, 121, + /* 170 */ 137, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 0, 22, 2, 3, 4, 5, 6, 7, 8, 9, /* 10 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - /* 20 */ 20, 21, 22, 2, 3, 4, 5, 6, 7, 8, - /* 30 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - /* 40 */ 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, - /* 50 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 41, - /* 60 */ 42, 1, 51, 52, 29, 45, 1, 47, 26, 27, - /* 70 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - /* 80 */ 38, 29, 22, 48, 29, 3, 4, 45, 52, 47, - /* 90 */ 42, 39, 40, 1, 39, 40, 50, 29, 46, 40, - /* 100 */ 48, 46, 29, 48, 22, 13, 29, 39, 40, 29, - /* 110 */ 1, 1, 39, 40, 46, 1, 48, 40, 44, 46, - /* 120 */ 40, 48, 29, 46, 45, 48, 46, 29, 48, 20, - /* 130 */ 20, 22, 22, 40, 3, 4, 22, 15, 40, 46, - /* 140 */ 14, 48, 43, 44, 46, 16, 48, 51, 52, 22, - /* 150 */ 1, 49, 50, 22, 5, 39, 40, 39, 40, 39, - /* 160 */ 40, 53, 47, + /* 20 */ 20, 21, 22, 23, 2, 3, 4, 5, 6, 7, + /* 30 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 40 */ 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, + /* 50 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + /* 60 */ 39, 40, 43, 44, 1, 1, 55, 56, 47, 1, + /* 70 */ 49, 27, 28, 29, 30, 31, 32, 33, 34, 35, + /* 80 */ 36, 37, 38, 39, 40, 30, 1, 23, 30, 54, + /* 90 */ 22, 47, 44, 49, 53, 54, 41, 42, 56, 41, + /* 100 */ 42, 30, 52, 48, 30, 50, 48, 22, 50, 53, + /* 110 */ 54, 30, 41, 42, 30, 41, 42, 3, 4, 48, + /* 120 */ 42, 50, 48, 42, 50, 46, 42, 30, 30, 48, + /* 130 */ 1, 50, 48, 1, 50, 30, 22, 3, 4, 42, + /* 140 */ 42, 15, 51, 52, 49, 48, 48, 50, 50, 20, + /* 150 */ 1, 22, 20, 1, 22, 50, 22, 5, 45, 46, + /* 160 */ 41, 42, 13, 41, 42, 41, 42, 14, 47, 22, + /* 170 */ 16, }; -#define YY_SHIFT_USE_DFLT (163) -#define YY_SHIFT_COUNT (37) +#define YY_SHIFT_USE_DFLT (171) +#define YY_SHIFT_COUNT (39) #define YY_SHIFT_MIN (-21) -#define YY_SHIFT_MAX (149) +#define YY_SHIFT_MAX (154) static const short yy_shift_ofst[] = { - /* 0 */ 21, 0, 114, 114, 114, 114, 114, 114, 114, 114, - /* 10 */ 82, 60, 60, 149, 92, 65, -21, -21, -21, -21, - /* 20 */ 65, -21, -21, -21, -21, 65, 109, 110, 131, 149, - /* 30 */ 92, 65, 65, 122, 65, 126, 129, 127, + /* 0 */ 22, 0, 85, 85, 85, 85, 85, 85, 85, 85, + /* 10 */ 114, 64, 68, 68, 152, 149, 63, -21, -21, -21, + /* 20 */ -21, 63, -21, -21, -21, -21, 63, 129, 132, 134, + /* 30 */ 64, 152, 149, 63, 63, 126, 63, 153, 154, 147, }; #define YY_REDUCE_USE_DFLT (-1) -#define YY_REDUCE_COUNT (35) +#define YY_REDUCE_COUNT (37) #define YY_REDUCE_MIN (0) -#define YY_REDUCE_MAX (120) +#define YY_REDUCE_MAX (124) static const signed char yy_reduce_ofst[] = { - /* 0 */ 20, 42, 52, 55, 68, 73, 77, 80, 93, 98, - /* 10 */ 18, 11, 96, 102, 99, 116, 35, 35, 35, 35, - /* 20 */ 118, 35, 35, 35, 35, 120, 36, 36, 48, 46, - /* 30 */ 74, 59, 59, 115, 59, 79, + /* 0 */ 21, 44, 55, 58, 71, 74, 81, 84, 97, 98, + /* 10 */ 19, 11, 41, 56, 91, 113, 119, 105, 105, 105, + /* 20 */ 105, 122, 105, 105, 105, 105, 124, 35, 35, 48, + /* 30 */ 42, 50, 79, 78, 78, 95, 78, 121, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 258, 258, 249, 248, 210, 205, 219, 216, 208, 203, - /* 10 */ 177, 258, 258, 251, 239, 250, 220, 218, 217, 215, - /* 20 */ 229, 209, 207, 204, 202, 213, 227, 225, 246, 222, - /* 30 */ 199, 221, 195, 186, 212, 185, 188, 184, + /* 0 */ 279, 279, 266, 265, 225, 220, 234, 231, 223, 218, + /* 10 */ 191, 275, 279, 279, 268, 256, 267, 235, 233, 232, + /* 20 */ 230, 246, 224, 222, 219, 217, 228, 242, 240, 263, + /* 30 */ 244, 237, 214, 236, 210, 200, 227, 199, 202, 198, }; /********** End of lemon-generated parsing tables *****************************/ @@ -383,15 +385,16 @@ static const char *const yyTokenName[] = { "LINE_ATX_3", "LINE_ATX_4", "LINE_ATX_5", "LINE_ATX_6", "LINE_HR", "LINE_BLOCKQUOTE", "LINE_LIST_BULLETED", "LINE_LIST_ENUMERATED", "LINE_TABLE", "LINE_DEF_CITATION", "LINE_DEF_FOOTNOTE", "LINE_DEF_LINK", - "LINE_FENCE_BACKTICK", "LINE_FENCE_BACKTICK_START", "LINE_EMPTY", "error", - "doc", "blocks", "block", "para", - "indented_code", "empty", "list_bulleted", "list_enumerated", - "blockquote", "table", "def_citation", "def_footnote", - "def_link", "html_block", "fenced_block", "para_lines", - "para_line", "code_line", "indented_line", "quote_lines", - "quote_line", "item_bulleted", "cont_blocks", "item_enumerated", - "cont_block", "html_block_lines", "html_block_line", "fenced_lines", - "fenced_line", + "LINE_FENCE_BACKTICK", "LINE_FENCE_BACKTICK_START", "LINE_EMPTY", "LINE_META", + "error", "doc", "blocks", "block", + "para", "indented_code", "empty", "list_bulleted", + "list_enumerated", "blockquote", "table", "def_citation", + "def_footnote", "def_link", "html_block", "fenced_block", + "meta_block", "para_lines", "para_line", "code_line", + "indented_line", "quote_lines", "quote_line", "item_bulleted", + "cont_blocks", "item_enumerated", "cont_block", "html_block_lines", + "html_block_line", "fenced_lines", "fenced_line", "meta_lines", + "meta_line", }; #endif /* NDEBUG */ @@ -421,69 +424,76 @@ static const char *const yyRuleName[] = { /* 19 */ "block ::= def_link", /* 20 */ "block ::= html_block", /* 21 */ "block ::= fenced_block", - /* 22 */ "para ::= LINE_PLAIN para_lines", - /* 23 */ "para_lines ::= para_lines para_line", - /* 24 */ "indented_code ::= indented_code code_line", - /* 25 */ "empty ::= empty LINE_EMPTY", - /* 26 */ "blockquote ::= LINE_BLOCKQUOTE quote_lines", - /* 27 */ "quote_lines ::= quote_lines quote_line", - /* 28 */ "list_bulleted ::= list_bulleted item_bulleted", - /* 29 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks", - /* 30 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines", - /* 31 */ "item_bulleted ::= LINE_LIST_BULLETED cont_blocks", - /* 32 */ "item_bulleted ::= LINE_LIST_BULLETED", - /* 33 */ "list_enumerated ::= list_enumerated item_enumerated", - /* 34 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks", - /* 35 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines", - /* 36 */ "item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks", - /* 37 */ "item_enumerated ::= LINE_LIST_ENUMERATED", - /* 38 */ "cont_blocks ::= cont_blocks cont_block", - /* 39 */ "cont_block ::= empty indented_line para_lines", - /* 40 */ "cont_block ::= empty indented_line", - /* 41 */ "table ::= table LINE_TABLE", - /* 42 */ "def_citation ::= LINE_DEF_CITATION para_lines cont_blocks", - /* 43 */ "def_citation ::= LINE_DEF_CITATION para_lines", - /* 44 */ "def_citation ::= LINE_DEF_CITATION cont_blocks", - /* 45 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks", - /* 46 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines", - /* 47 */ "def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks", - /* 48 */ "def_link ::= LINE_DEF_LINK para_lines", - /* 49 */ "html_block ::= LINE_HTML html_block_lines", - /* 50 */ "html_block_lines ::= html_block_lines html_block_line", - /* 51 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK", - /* 52 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines", - /* 53 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK", - /* 54 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines", - /* 55 */ "fenced_lines ::= fenced_lines fenced_line", - /* 56 */ "para ::= LINE_PLAIN", - /* 57 */ "para_lines ::= para_line", - /* 58 */ "para_line ::= LINE_CONTINUATION", - /* 59 */ "indented_code ::= LINE_INDENTED_TAB", - /* 60 */ "indented_code ::= LINE_INDENTED_SPACE", - /* 61 */ "code_line ::= indented_line", - /* 62 */ "code_line ::= LINE_EMPTY", - /* 63 */ "indented_line ::= LINE_INDENTED_TAB", - /* 64 */ "indented_line ::= LINE_INDENTED_SPACE", - /* 65 */ "empty ::= LINE_EMPTY", - /* 66 */ "blockquote ::= LINE_BLOCKQUOTE", - /* 67 */ "quote_lines ::= quote_line", - /* 68 */ "quote_line ::= LINE_BLOCKQUOTE", - /* 69 */ "quote_line ::= LINE_CONTINUATION", - /* 70 */ "list_bulleted ::= item_bulleted", - /* 71 */ "list_enumerated ::= item_enumerated", - /* 72 */ "cont_blocks ::= cont_block", - /* 73 */ "cont_block ::= empty", - /* 74 */ "table ::= LINE_TABLE", - /* 75 */ "def_citation ::= LINE_DEF_CITATION", - /* 76 */ "def_footnote ::= LINE_DEF_FOOTNOTE", - /* 77 */ "def_link ::= LINE_DEF_LINK", - /* 78 */ "html_block ::= LINE_HTML", - /* 79 */ "html_block_lines ::= html_block_line", - /* 80 */ "html_block_line ::= LINE_CONTINUATION", - /* 81 */ "html_block_line ::= LINE_HTML", - /* 82 */ "fenced_lines ::= fenced_line", - /* 83 */ "fenced_line ::= LINE_CONTINUATION", - /* 84 */ "fenced_line ::= LINE_EMPTY", + /* 22 */ "block ::= meta_block", + /* 23 */ "para ::= LINE_PLAIN para_lines", + /* 24 */ "para_lines ::= para_lines para_line", + /* 25 */ "indented_code ::= indented_code code_line", + /* 26 */ "empty ::= empty LINE_EMPTY", + /* 27 */ "blockquote ::= LINE_BLOCKQUOTE quote_lines", + /* 28 */ "quote_lines ::= quote_lines quote_line", + /* 29 */ "list_bulleted ::= list_bulleted item_bulleted", + /* 30 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks", + /* 31 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines", + /* 32 */ "item_bulleted ::= LINE_LIST_BULLETED cont_blocks", + /* 33 */ "item_bulleted ::= LINE_LIST_BULLETED", + /* 34 */ "list_enumerated ::= list_enumerated item_enumerated", + /* 35 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks", + /* 36 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines", + /* 37 */ "item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks", + /* 38 */ "item_enumerated ::= LINE_LIST_ENUMERATED", + /* 39 */ "cont_blocks ::= cont_blocks cont_block", + /* 40 */ "cont_block ::= empty indented_line para_lines", + /* 41 */ "cont_block ::= empty indented_line", + /* 42 */ "table ::= table LINE_TABLE", + /* 43 */ "def_citation ::= LINE_DEF_CITATION para_lines cont_blocks", + /* 44 */ "def_citation ::= LINE_DEF_CITATION para_lines", + /* 45 */ "def_citation ::= LINE_DEF_CITATION cont_blocks", + /* 46 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks", + /* 47 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines", + /* 48 */ "def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks", + /* 49 */ "def_link ::= LINE_DEF_LINK para_lines", + /* 50 */ "html_block ::= LINE_HTML html_block_lines", + /* 51 */ "html_block_lines ::= html_block_lines html_block_line", + /* 52 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK", + /* 53 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines", + /* 54 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK", + /* 55 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines", + /* 56 */ "fenced_lines ::= fenced_lines fenced_line", + /* 57 */ "meta_block ::= LINE_META meta_lines", + /* 58 */ "meta_lines ::= meta_lines meta_line", + /* 59 */ "para ::= LINE_PLAIN", + /* 60 */ "para_lines ::= para_line", + /* 61 */ "para_line ::= LINE_CONTINUATION", + /* 62 */ "indented_code ::= LINE_INDENTED_TAB", + /* 63 */ "indented_code ::= LINE_INDENTED_SPACE", + /* 64 */ "code_line ::= indented_line", + /* 65 */ "code_line ::= LINE_EMPTY", + /* 66 */ "indented_line ::= LINE_INDENTED_TAB", + /* 67 */ "indented_line ::= LINE_INDENTED_SPACE", + /* 68 */ "empty ::= LINE_EMPTY", + /* 69 */ "blockquote ::= LINE_BLOCKQUOTE", + /* 70 */ "quote_lines ::= quote_line", + /* 71 */ "quote_line ::= LINE_BLOCKQUOTE", + /* 72 */ "quote_line ::= LINE_CONTINUATION", + /* 73 */ "list_bulleted ::= item_bulleted", + /* 74 */ "list_enumerated ::= item_enumerated", + /* 75 */ "cont_blocks ::= cont_block", + /* 76 */ "cont_block ::= empty", + /* 77 */ "table ::= LINE_TABLE", + /* 78 */ "def_citation ::= LINE_DEF_CITATION", + /* 79 */ "def_footnote ::= LINE_DEF_FOOTNOTE", + /* 80 */ "def_link ::= LINE_DEF_LINK", + /* 81 */ "html_block ::= LINE_HTML", + /* 82 */ "html_block_lines ::= html_block_line", + /* 83 */ "html_block_line ::= LINE_CONTINUATION", + /* 84 */ "html_block_line ::= LINE_HTML", + /* 85 */ "fenced_lines ::= fenced_line", + /* 86 */ "fenced_line ::= LINE_CONTINUATION", + /* 87 */ "fenced_line ::= LINE_EMPTY", + /* 88 */ "meta_block ::= LINE_META", + /* 89 */ "meta_lines ::= meta_line", + /* 90 */ "meta_line ::= LINE_META", + /* 91 */ "meta_line ::= LINE_CONTINUATION", }; #endif /* NDEBUG */ @@ -832,91 +842,98 @@ 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[] = { - { 24, 1 }, - { 25, 2 }, { 25, 1 }, + { 26, 2 }, { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 26, 1 }, - { 27, 2 }, - { 39, 2 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, + { 27, 1 }, { 28, 2 }, + { 41, 2 }, { 29, 2 }, - { 32, 2 }, - { 43, 2 }, { 30, 2 }, - { 45, 3 }, - { 45, 2 }, + { 33, 2 }, { 45, 2 }, - { 45, 1 }, { 31, 2 }, { 47, 3 }, { 47, 2 }, { 47, 2 }, { 47, 1 }, - { 46, 2 }, - { 48, 3 }, + { 32, 2 }, + { 49, 3 }, + { 49, 2 }, + { 49, 2 }, + { 49, 1 }, { 48, 2 }, - { 33, 2 }, - { 34, 3 }, - { 34, 2 }, + { 50, 3 }, + { 50, 2 }, { 34, 2 }, { 35, 3 }, { 35, 2 }, { 35, 2 }, + { 36, 3 }, + { 36, 2 }, { 36, 2 }, { 37, 2 }, - { 49, 2 }, - { 38, 3 }, - { 38, 2 }, - { 38, 3 }, { 38, 2 }, { 51, 2 }, - { 27, 1 }, - { 39, 1 }, - { 40, 1 }, - { 28, 1 }, + { 39, 3 }, + { 39, 2 }, + { 39, 3 }, + { 39, 2 }, + { 53, 2 }, + { 40, 2 }, + { 55, 2 }, { 28, 1 }, { 41, 1 }, - { 41, 1 }, - { 42, 1 }, { 42, 1 }, { 29, 1 }, - { 32, 1 }, + { 29, 1 }, + { 43, 1 }, { 43, 1 }, { 44, 1 }, { 44, 1 }, { 30, 1 }, - { 31, 1 }, + { 33, 1 }, + { 45, 1 }, { 46, 1 }, + { 46, 1 }, + { 31, 1 }, + { 32, 1 }, { 48, 1 }, - { 33, 1 }, + { 50, 1 }, { 34, 1 }, { 35, 1 }, { 36, 1 }, { 37, 1 }, - { 49, 1 }, - { 50, 1 }, - { 50, 1 }, + { 38, 1 }, { 51, 1 }, { 52, 1 }, { 52, 1 }, + { 53, 1 }, + { 54, 1 }, + { 54, 1 }, + { 40, 1 }, + { 55, 1 }, + { 56, 1 }, + { 56, 1 }, }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -1081,100 +1098,110 @@ static void yy_reduce( { 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 22: /* para ::= LINE_PLAIN para_lines */ - case 23: /* para_lines ::= para_lines para_line */ yytestcase(yyruleno==23); - case 24: /* indented_code ::= indented_code code_line */ yytestcase(yyruleno==24); - case 25: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==25); - case 26: /* blockquote ::= LINE_BLOCKQUOTE quote_lines */ yytestcase(yyruleno==26); - case 27: /* quote_lines ::= quote_lines quote_line */ yytestcase(yyruleno==27); - case 28: /* list_bulleted ::= list_bulleted item_bulleted */ yytestcase(yyruleno==28); - case 33: /* list_enumerated ::= list_enumerated item_enumerated */ yytestcase(yyruleno==33); - case 38: /* cont_blocks ::= cont_blocks cont_block */ yytestcase(yyruleno==38); - case 41: /* table ::= table LINE_TABLE */ yytestcase(yyruleno==41); - case 43: /* def_citation ::= LINE_DEF_CITATION para_lines */ yytestcase(yyruleno==43); - case 44: /* def_citation ::= LINE_DEF_CITATION cont_blocks */ yytestcase(yyruleno==44); - case 46: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines */ yytestcase(yyruleno==46); - case 47: /* def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks */ yytestcase(yyruleno==47); - case 48: /* def_link ::= LINE_DEF_LINK para_lines */ yytestcase(yyruleno==48); - case 49: /* html_block ::= LINE_HTML html_block_lines */ yytestcase(yyruleno==49); - case 50: /* html_block_lines ::= html_block_lines html_block_line */ yytestcase(yyruleno==50); - case 52: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines */ yytestcase(yyruleno==52); - case 54: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines */ yytestcase(yyruleno==54); - case 55: /* fenced_lines ::= fenced_lines fenced_line */ yytestcase(yyruleno==55); + case 22: /* block ::= meta_block */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_META); } + yymsp[0].minor.yy0 = yylhsminor.yy0; + break; + case 23: /* para ::= LINE_PLAIN para_lines */ + case 24: /* para_lines ::= para_lines para_line */ yytestcase(yyruleno==24); + case 25: /* indented_code ::= indented_code code_line */ yytestcase(yyruleno==25); + case 26: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==26); + case 27: /* blockquote ::= LINE_BLOCKQUOTE quote_lines */ yytestcase(yyruleno==27); + case 28: /* quote_lines ::= quote_lines quote_line */ yytestcase(yyruleno==28); + case 29: /* list_bulleted ::= list_bulleted item_bulleted */ yytestcase(yyruleno==29); + case 34: /* list_enumerated ::= list_enumerated item_enumerated */ yytestcase(yyruleno==34); + case 39: /* cont_blocks ::= cont_blocks cont_block */ yytestcase(yyruleno==39); + case 42: /* table ::= table LINE_TABLE */ yytestcase(yyruleno==42); + case 44: /* def_citation ::= LINE_DEF_CITATION para_lines */ yytestcase(yyruleno==44); + case 45: /* def_citation ::= LINE_DEF_CITATION cont_blocks */ yytestcase(yyruleno==45); + case 47: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines */ yytestcase(yyruleno==47); + case 48: /* def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks */ yytestcase(yyruleno==48); + case 49: /* def_link ::= LINE_DEF_LINK para_lines */ yytestcase(yyruleno==49); + case 50: /* html_block ::= LINE_HTML html_block_lines */ yytestcase(yyruleno==50); + case 51: /* html_block_lines ::= html_block_lines html_block_line */ yytestcase(yyruleno==51); + case 53: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines */ yytestcase(yyruleno==53); + case 55: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines */ yytestcase(yyruleno==55); + case 56: /* fenced_lines ::= fenced_lines fenced_line */ yytestcase(yyruleno==56); + case 57: /* meta_block ::= LINE_META meta_lines */ yytestcase(yyruleno==57); + case 58: /* meta_lines ::= meta_lines meta_line */ yytestcase(yyruleno==58); { 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 29: /* item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks */ - case 34: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks */ yytestcase(yyruleno==34); + case 30: /* item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks */ + case 35: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks */ yytestcase(yyruleno==35); { token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-2].minor.yy0, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, yylhsminor.yy0); } yymsp[-2].minor.yy0 = yylhsminor.yy0; break; - case 30: /* item_bulleted ::= LINE_LIST_BULLETED para_lines */ - case 35: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines */ yytestcase(yyruleno==35); + case 31: /* item_bulleted ::= LINE_LIST_BULLETED para_lines */ + case 36: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines */ yytestcase(yyruleno==36); { token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM_TIGHT); recursive_parse_list_item(engine, yylhsminor.yy0); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 31: /* item_bulleted ::= LINE_LIST_BULLETED cont_blocks */ + case 32: /* item_bulleted ::= LINE_LIST_BULLETED cont_blocks */ { token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM); if (yymsp[0].minor.yy0) {recursive_parse_list_item(engine, yylhsminor.yy0);} } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 32: /* item_bulleted ::= LINE_LIST_BULLETED */ - case 37: /* item_enumerated ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==37); + case 33: /* item_bulleted ::= LINE_LIST_BULLETED */ + case 38: /* item_enumerated ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==38); { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ITEM_TIGHT); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 36: /* item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks */ + case 37: /* item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks */ { token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, yylhsminor.yy0); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 39: /* cont_block ::= empty indented_line para_lines */ + case 40: /* cont_block ::= empty indented_line para_lines */ { 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 40: /* cont_block ::= empty indented_line */ + case 41: /* cont_block ::= 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 42: /* def_citation ::= LINE_DEF_CITATION para_lines cont_blocks */ - case 45: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks */ yytestcase(yyruleno==45); + case 43: /* def_citation ::= LINE_DEF_CITATION para_lines cont_blocks */ + case 46: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks */ yytestcase(yyruleno==46); { 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[-2].minor.yy0 = yylhsminor.yy0; break; - case 51: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK */ - case 53: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK */ yytestcase(yyruleno==53); + case 52: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK */ + case 54: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK */ yytestcase(yyruleno==54); { 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[0].minor.yy0->child->type = CODE_FENCE; } yymsp[-2].minor.yy0 = yylhsminor.yy0; break; default: - /* (56) para ::= LINE_PLAIN */ yytestcase(yyruleno==56); - /* (57) para_lines ::= para_line (OPTIMIZED OUT) */ assert(yyruleno!=57); - /* (58) para_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==58); - /* (59) indented_code ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==59); - /* (60) indented_code ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==60); - /* (61) code_line ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=61); - /* (62) code_line ::= LINE_EMPTY */ yytestcase(yyruleno==62); - /* (63) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==63); - /* (64) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==64); - /* (65) empty ::= LINE_EMPTY */ yytestcase(yyruleno==65); - /* (66) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==66); - /* (67) quote_lines ::= quote_line (OPTIMIZED OUT) */ assert(yyruleno!=67); - /* (68) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==68); - /* (69) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==69); - /* (70) list_bulleted ::= item_bulleted (OPTIMIZED OUT) */ assert(yyruleno!=70); - /* (71) list_enumerated ::= item_enumerated (OPTIMIZED OUT) */ assert(yyruleno!=71); - /* (72) cont_blocks ::= cont_block (OPTIMIZED OUT) */ assert(yyruleno!=72); - /* (73) cont_block ::= empty */ yytestcase(yyruleno==73); - /* (74) table ::= LINE_TABLE */ yytestcase(yyruleno==74); - /* (75) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==75); - /* (76) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==76); - /* (77) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==77); - /* (78) html_block ::= LINE_HTML */ yytestcase(yyruleno==78); - /* (79) html_block_lines ::= html_block_line (OPTIMIZED OUT) */ assert(yyruleno!=79); - /* (80) html_block_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==80); - /* (81) html_block_line ::= LINE_HTML */ yytestcase(yyruleno==81); - /* (82) fenced_lines ::= fenced_line (OPTIMIZED OUT) */ assert(yyruleno!=82); - /* (83) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==83); - /* (84) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==84); + /* (59) para ::= LINE_PLAIN */ yytestcase(yyruleno==59); + /* (60) para_lines ::= para_line (OPTIMIZED OUT) */ assert(yyruleno!=60); + /* (61) para_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==61); + /* (62) indented_code ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==62); + /* (63) indented_code ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==63); + /* (64) code_line ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=64); + /* (65) code_line ::= LINE_EMPTY */ yytestcase(yyruleno==65); + /* (66) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==66); + /* (67) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==67); + /* (68) empty ::= LINE_EMPTY */ yytestcase(yyruleno==68); + /* (69) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==69); + /* (70) quote_lines ::= quote_line (OPTIMIZED OUT) */ assert(yyruleno!=70); + /* (71) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==71); + /* (72) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==72); + /* (73) list_bulleted ::= item_bulleted (OPTIMIZED OUT) */ assert(yyruleno!=73); + /* (74) list_enumerated ::= item_enumerated (OPTIMIZED OUT) */ assert(yyruleno!=74); + /* (75) cont_blocks ::= cont_block (OPTIMIZED OUT) */ assert(yyruleno!=75); + /* (76) cont_block ::= empty */ yytestcase(yyruleno==76); + /* (77) table ::= LINE_TABLE */ yytestcase(yyruleno==77); + /* (78) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==78); + /* (79) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==79); + /* (80) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==80); + /* (81) html_block ::= LINE_HTML */ yytestcase(yyruleno==81); + /* (82) html_block_lines ::= html_block_line (OPTIMIZED OUT) */ assert(yyruleno!=82); + /* (83) html_block_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==83); + /* (84) html_block_line ::= LINE_HTML */ yytestcase(yyruleno==84); + /* (85) fenced_lines ::= fenced_line (OPTIMIZED OUT) */ assert(yyruleno!=85); + /* (86) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==86); + /* (87) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==87); + /* (88) meta_block ::= LINE_META */ yytestcase(yyruleno==88); + /* (89) meta_lines ::= meta_line (OPTIMIZED OUT) */ assert(yyruleno!=89); + /* (90) meta_line ::= LINE_META */ yytestcase(yyruleno==90); + /* (91) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==91); break; /********** End reduce actions ************************************************/ }; diff --git a/src/parser.h b/src/parser.h index ea8b4c7..292b4a9 100644 --- a/src/parser.h +++ b/src/parser.h @@ -20,3 +20,4 @@ #define LINE_FENCE_BACKTICK 20 #define LINE_FENCE_BACKTICK_START 21 #define LINE_EMPTY 22 +#define LINE_META 23 diff --git a/src/parser.out b/src/parser.out index cf2d8ab..e5ffaae 100644 --- a/src/parser.out +++ b/src/parser.out @@ -21,6 +21,7 @@ State 0: block ::= * def_link block ::= * html_block block ::= * fenced_block + block ::= * meta_block para ::= * LINE_PLAIN para_lines para ::= * LINE_PLAIN indented_code ::= * indented_code code_line @@ -60,11 +61,13 @@ State 0: fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines + meta_block ::= * LINE_META meta_lines + meta_block ::= * LINE_META - LINE_PLAIN shift 20 - LINE_INDENTED_TAB shift-reduce 59 indented_code ::= LINE_INDENTED_TAB - LINE_INDENTED_SPACE shift-reduce 60 indented_code ::= LINE_INDENTED_SPACE - LINE_HTML shift 13 + LINE_PLAIN shift 21 + LINE_INDENTED_TAB shift-reduce 62 indented_code ::= LINE_INDENTED_TAB + LINE_INDENTED_SPACE shift-reduce 63 indented_code ::= LINE_INDENTED_SPACE + LINE_HTML shift 14 LINE_ATX_1 shift-reduce 5 block ::= LINE_ATX_1 LINE_ATX_2 shift-reduce 6 block ::= LINE_ATX_2 LINE_ATX_3 shift-reduce 7 block ::= LINE_ATX_3 @@ -72,33 +75,35 @@ State 0: LINE_ATX_5 shift-reduce 9 block ::= LINE_ATX_5 LINE_ATX_6 shift-reduce 10 block ::= LINE_ATX_6 LINE_HR shift-reduce 16 block ::= LINE_HR - LINE_BLOCKQUOTE shift 14 + LINE_BLOCKQUOTE shift 15 LINE_LIST_BULLETED shift 5 LINE_LIST_ENUMERATED shift 4 - LINE_TABLE shift-reduce 74 table ::= LINE_TABLE + LINE_TABLE shift-reduce 77 table ::= LINE_TABLE LINE_DEF_CITATION shift 3 LINE_DEF_FOOTNOTE shift 2 - LINE_DEF_LINK shift 15 - LINE_FENCE_BACKTICK shift 12 - LINE_FENCE_BACKTICK_START shift 11 - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY + LINE_DEF_LINK shift 16 + LINE_FENCE_BACKTICK shift 13 + LINE_FENCE_BACKTICK_START shift 12 + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_META shift 11 doc accept blocks shift 1 block shift-reduce 2 blocks ::= block para shift-reduce 3 block ::= para indented_code shift 10 - empty shift 37 - list_bulleted shift 35 - list_enumerated shift 33 + empty shift 39 + list_bulleted shift 37 + list_enumerated shift 35 blockquote shift-reduce 14 block ::= blockquote - table shift 36 + table shift 38 def_citation shift-reduce 17 block ::= def_citation def_footnote shift-reduce 18 block ::= def_footnote def_link shift-reduce 19 block ::= def_link html_block shift-reduce 20 block ::= html_block fenced_block shift-reduce 21 block ::= fenced_block - item_bulleted shift 35 /* because item_bulleted==list_bulleted */ - item_enumerated shift 33 /* because item_enumerated==list_enumerated */ + meta_block shift-reduce 22 block ::= meta_block + item_bulleted shift 37 /* because item_bulleted==list_bulleted */ + item_enumerated shift 35 /* because item_enumerated==list_enumerated */ State 1: (0) doc ::= blocks * @@ -122,6 +127,7 @@ State 1: block ::= * def_link block ::= * html_block block ::= * fenced_block + block ::= * meta_block para ::= * LINE_PLAIN para_lines para ::= * LINE_PLAIN indented_code ::= * indented_code code_line @@ -161,12 +167,14 @@ State 1: fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines + meta_block ::= * LINE_META meta_lines + meta_block ::= * LINE_META $ reduce 0 doc ::= blocks - LINE_PLAIN shift 20 - LINE_INDENTED_TAB shift-reduce 59 indented_code ::= LINE_INDENTED_TAB - LINE_INDENTED_SPACE shift-reduce 60 indented_code ::= LINE_INDENTED_SPACE - LINE_HTML shift 13 + LINE_PLAIN shift 21 + LINE_INDENTED_TAB shift-reduce 62 indented_code ::= LINE_INDENTED_TAB + LINE_INDENTED_SPACE shift-reduce 63 indented_code ::= LINE_INDENTED_SPACE + LINE_HTML shift 14 LINE_ATX_1 shift-reduce 5 block ::= LINE_ATX_1 LINE_ATX_2 shift-reduce 6 block ::= LINE_ATX_2 LINE_ATX_3 shift-reduce 7 block ::= LINE_ATX_3 @@ -174,31 +182,33 @@ State 1: LINE_ATX_5 shift-reduce 9 block ::= LINE_ATX_5 LINE_ATX_6 shift-reduce 10 block ::= LINE_ATX_6 LINE_HR shift-reduce 16 block ::= LINE_HR - LINE_BLOCKQUOTE shift 14 + LINE_BLOCKQUOTE shift 15 LINE_LIST_BULLETED shift 5 LINE_LIST_ENUMERATED shift 4 - LINE_TABLE shift-reduce 74 table ::= LINE_TABLE + LINE_TABLE shift-reduce 77 table ::= LINE_TABLE LINE_DEF_CITATION shift 3 LINE_DEF_FOOTNOTE shift 2 - LINE_DEF_LINK shift 15 - LINE_FENCE_BACKTICK shift 12 - LINE_FENCE_BACKTICK_START shift 11 - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY + LINE_DEF_LINK shift 16 + LINE_FENCE_BACKTICK shift 13 + LINE_FENCE_BACKTICK_START shift 12 + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_META shift 11 block shift-reduce 1 blocks ::= blocks block para shift-reduce 3 block ::= para indented_code shift 10 - empty shift 37 - list_bulleted shift 35 - list_enumerated shift 33 + empty shift 39 + list_bulleted shift 37 + list_enumerated shift 35 blockquote shift-reduce 14 block ::= blockquote - table shift 36 + table shift 38 def_citation shift-reduce 17 block ::= def_citation def_footnote shift-reduce 18 block ::= def_footnote def_link shift-reduce 19 block ::= def_link html_block shift-reduce 20 block ::= html_block fenced_block shift-reduce 21 block ::= fenced_block - item_bulleted shift 35 /* because item_bulleted==list_bulleted */ - item_enumerated shift 33 /* because item_enumerated==list_enumerated */ + meta_block shift-reduce 22 block ::= meta_block + item_bulleted shift 37 /* because item_bulleted==list_bulleted */ + item_enumerated shift 35 /* because item_enumerated==list_enumerated */ State 2: para_lines ::= * para_lines para_line @@ -214,17 +224,17 @@ State 2: def_footnote ::= LINE_DEF_FOOTNOTE * para_lines cont_blocks def_footnote ::= LINE_DEF_FOOTNOTE * para_lines def_footnote ::= LINE_DEF_FOOTNOTE * cont_blocks - (76) def_footnote ::= LINE_DEF_FOOTNOTE * + (79) def_footnote ::= LINE_DEF_FOOTNOTE * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 76 ** Parsing conflict ** - empty shift 28 + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 79 ** Parsing conflict ** + empty shift 29 para_lines shift 6 para_line shift 6 /* because para_line==para_lines */ - cont_blocks shift 16 - cont_block shift 16 /* because cont_block==cont_blocks */ - {default} reduce 76 def_footnote ::= LINE_DEF_FOOTNOTE + cont_blocks shift 17 + cont_block shift 17 /* because cont_block==cont_blocks */ + {default} reduce 79 def_footnote ::= LINE_DEF_FOOTNOTE State 3: para_lines ::= * para_lines para_line @@ -240,17 +250,17 @@ State 3: def_citation ::= LINE_DEF_CITATION * para_lines cont_blocks def_citation ::= LINE_DEF_CITATION * para_lines def_citation ::= LINE_DEF_CITATION * cont_blocks - (75) def_citation ::= LINE_DEF_CITATION * + (78) def_citation ::= LINE_DEF_CITATION * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 75 ** Parsing conflict ** - empty shift 28 + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 78 ** Parsing conflict ** + empty shift 29 para_lines shift 7 para_line shift 7 /* because para_line==para_lines */ - cont_blocks shift 18 - cont_block shift 18 /* because cont_block==cont_blocks */ - {default} reduce 75 def_citation ::= LINE_DEF_CITATION + cont_blocks shift 19 + cont_block shift 19 /* because cont_block==cont_blocks */ + {default} reduce 78 def_citation ::= LINE_DEF_CITATION State 4: para_lines ::= * para_lines para_line @@ -261,22 +271,22 @@ State 4: item_enumerated ::= LINE_LIST_ENUMERATED * para_lines cont_blocks item_enumerated ::= LINE_LIST_ENUMERATED * para_lines item_enumerated ::= LINE_LIST_ENUMERATED * cont_blocks - (37) item_enumerated ::= LINE_LIST_ENUMERATED * + (38) item_enumerated ::= LINE_LIST_ENUMERATED * cont_blocks ::= * cont_blocks cont_block cont_blocks ::= * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 37 ** Parsing conflict ** - empty shift 28 + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 38 ** Parsing conflict ** + empty shift 29 para_lines shift 8 para_line shift 8 /* because para_line==para_lines */ - cont_blocks shift 21 - cont_block shift 21 /* because cont_block==cont_blocks */ - {default} reduce 37 item_enumerated ::= LINE_LIST_ENUMERATED + cont_blocks shift 22 + cont_block shift 22 /* because cont_block==cont_blocks */ + {default} reduce 38 item_enumerated ::= LINE_LIST_ENUMERATED State 5: para_lines ::= * para_lines para_line @@ -287,22 +297,22 @@ State 5: item_bulleted ::= LINE_LIST_BULLETED * para_lines cont_blocks item_bulleted ::= LINE_LIST_BULLETED * para_lines item_bulleted ::= LINE_LIST_BULLETED * cont_blocks - (32) item_bulleted ::= LINE_LIST_BULLETED * + (33) item_bulleted ::= LINE_LIST_BULLETED * cont_blocks ::= * cont_blocks cont_block cont_blocks ::= * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 32 ** Parsing conflict ** - empty shift 28 + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 33 ** Parsing conflict ** + empty shift 29 para_lines shift 9 para_line shift 9 /* because para_line==para_lines */ - cont_blocks shift 23 - cont_block shift 23 /* because cont_block==cont_blocks */ - {default} reduce 32 item_bulleted ::= LINE_LIST_BULLETED + cont_blocks shift 24 + cont_block shift 24 /* because cont_block==cont_blocks */ + {default} reduce 33 item_bulleted ::= LINE_LIST_BULLETED State 6: para_lines ::= para_lines * para_line @@ -315,16 +325,16 @@ State 6: cont_block ::= * empty indented_line cont_block ::= * empty def_footnote ::= LINE_DEF_FOOTNOTE para_lines * cont_blocks - (46) def_footnote ::= LINE_DEF_FOOTNOTE para_lines * + (47) def_footnote ::= LINE_DEF_FOOTNOTE para_lines * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 46 ** Parsing conflict ** - empty shift 28 - para_line shift-reduce 23 para_lines ::= para_lines para_line - cont_blocks shift 17 - cont_block shift 17 /* because cont_block==cont_blocks */ - {default} reduce 46 def_footnote ::= LINE_DEF_FOOTNOTE para_lines + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 47 ** Parsing conflict ** + empty shift 29 + para_line shift-reduce 24 para_lines ::= para_lines para_line + cont_blocks shift 18 + cont_block shift 18 /* because cont_block==cont_blocks */ + {default} reduce 47 def_footnote ::= LINE_DEF_FOOTNOTE para_lines State 7: para_lines ::= para_lines * para_line @@ -337,16 +347,16 @@ State 7: cont_block ::= * empty indented_line cont_block ::= * empty def_citation ::= LINE_DEF_CITATION para_lines * cont_blocks - (43) def_citation ::= LINE_DEF_CITATION para_lines * + (44) def_citation ::= LINE_DEF_CITATION para_lines * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 43 ** Parsing conflict ** - empty shift 28 - para_line shift-reduce 23 para_lines ::= para_lines para_line - cont_blocks shift 19 - cont_block shift 19 /* because cont_block==cont_blocks */ - {default} reduce 43 def_citation ::= LINE_DEF_CITATION para_lines + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 44 ** Parsing conflict ** + empty shift 29 + para_line shift-reduce 24 para_lines ::= para_lines para_line + cont_blocks shift 20 + cont_block shift 20 /* because cont_block==cont_blocks */ + {default} reduce 44 def_citation ::= LINE_DEF_CITATION para_lines State 8: para_lines ::= para_lines * para_line @@ -354,21 +364,21 @@ State 8: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY item_enumerated ::= LINE_LIST_ENUMERATED para_lines * cont_blocks - (35) item_enumerated ::= LINE_LIST_ENUMERATED para_lines * + (36) item_enumerated ::= LINE_LIST_ENUMERATED para_lines * cont_blocks ::= * cont_blocks cont_block cont_blocks ::= * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 35 ** Parsing conflict ** - empty shift 28 - para_line shift-reduce 23 para_lines ::= para_lines para_line - cont_blocks shift 22 - cont_block shift 22 /* because cont_block==cont_blocks */ - {default} reduce 35 item_enumerated ::= LINE_LIST_ENUMERATED para_lines + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 36 ** Parsing conflict ** + empty shift 29 + para_line shift-reduce 24 para_lines ::= para_lines para_line + cont_blocks shift 23 + cont_block shift 23 /* because cont_block==cont_blocks */ + {default} reduce 36 item_enumerated ::= LINE_LIST_ENUMERATED para_lines State 9: para_lines ::= para_lines * para_line @@ -376,21 +386,21 @@ State 9: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY item_bulleted ::= LINE_LIST_BULLETED para_lines * cont_blocks - (30) item_bulleted ::= LINE_LIST_BULLETED para_lines * + (31) item_bulleted ::= LINE_LIST_BULLETED para_lines * cont_blocks ::= * cont_blocks cont_block cont_blocks ::= * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 30 ** Parsing conflict ** - empty shift 28 - para_line shift-reduce 23 para_lines ::= para_lines para_line - cont_blocks shift 24 - cont_block shift 24 /* because cont_block==cont_blocks */ - {default} reduce 30 item_bulleted ::= LINE_LIST_BULLETED para_lines + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 31 ** Parsing conflict ** + empty shift 29 + para_line shift-reduce 24 para_lines ::= para_lines para_line + cont_blocks shift 25 + cont_block shift 25 /* because cont_block==cont_blocks */ + {default} reduce 31 item_bulleted ::= LINE_LIST_BULLETED para_lines State 10: (4) block ::= indented_code * @@ -400,17 +410,32 @@ State 10: indented_line ::= * LINE_INDENTED_TAB indented_line ::= * LINE_INDENTED_SPACE - LINE_INDENTED_TAB shift-reduce 63 indented_line ::= LINE_INDENTED_TAB + LINE_INDENTED_TAB shift-reduce 66 indented_line ::= LINE_INDENTED_TAB LINE_INDENTED_TAB reduce 4 ** Parsing conflict ** - LINE_INDENTED_SPACE shift-reduce 64 indented_line ::= LINE_INDENTED_SPACE + LINE_INDENTED_SPACE shift-reduce 67 indented_line ::= LINE_INDENTED_SPACE LINE_INDENTED_SPACE reduce 4 ** Parsing conflict ** - LINE_EMPTY shift-reduce 62 code_line ::= LINE_EMPTY + LINE_EMPTY shift-reduce 65 code_line ::= LINE_EMPTY LINE_EMPTY reduce 4 ** Parsing conflict ** - code_line shift-reduce 24 indented_code ::= indented_code code_line - indented_line shift-reduce 24 indented_code ::= indented_code code_line /* because indented_line==code_line */ + code_line shift-reduce 25 indented_code ::= indented_code code_line + indented_line shift-reduce 25 indented_code ::= indented_code code_line /* because indented_line==code_line */ {default} reduce 4 block ::= indented_code State 11: + meta_block ::= LINE_META * meta_lines + (88) meta_block ::= LINE_META * + meta_lines ::= * meta_lines meta_line + meta_lines ::= * meta_line + meta_line ::= * LINE_META + meta_line ::= * LINE_CONTINUATION + + LINE_CONTINUATION shift-reduce 91 meta_line ::= LINE_CONTINUATION + LINE_META shift-reduce 90 meta_line ::= LINE_META + LINE_META reduce 88 ** Parsing conflict ** + meta_lines shift 30 + meta_line shift 30 /* because meta_line==meta_lines */ + {default} reduce 88 meta_block ::= LINE_META + +State 12: fenced_block ::= LINE_FENCE_BACKTICK_START * fenced_lines LINE_FENCE_BACKTICK fenced_block ::= LINE_FENCE_BACKTICK_START * fenced_lines fenced_lines ::= * fenced_lines fenced_line @@ -418,12 +443,12 @@ State 11: fenced_line ::= * LINE_CONTINUATION fenced_line ::= * LINE_EMPTY - LINE_CONTINUATION shift-reduce 83 fenced_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 84 fenced_line ::= LINE_EMPTY - fenced_lines shift 26 - fenced_line shift 26 /* because fenced_line==fenced_lines */ + LINE_CONTINUATION shift-reduce 86 fenced_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 87 fenced_line ::= LINE_EMPTY + fenced_lines shift 27 + fenced_line shift 27 /* because fenced_line==fenced_lines */ -State 12: +State 13: fenced_block ::= LINE_FENCE_BACKTICK * fenced_lines LINE_FENCE_BACKTICK fenced_block ::= LINE_FENCE_BACKTICK * fenced_lines fenced_lines ::= * fenced_lines fenced_line @@ -431,287 +456,299 @@ State 12: fenced_line ::= * LINE_CONTINUATION fenced_line ::= * LINE_EMPTY - LINE_CONTINUATION shift-reduce 83 fenced_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 84 fenced_line ::= LINE_EMPTY - fenced_lines shift 27 - fenced_line shift 27 /* because fenced_line==fenced_lines */ + LINE_CONTINUATION shift-reduce 86 fenced_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 87 fenced_line ::= LINE_EMPTY + fenced_lines shift 28 + fenced_line shift 28 /* because fenced_line==fenced_lines */ -State 13: +State 14: html_block ::= LINE_HTML * html_block_lines - (78) html_block ::= LINE_HTML * + (81) html_block ::= LINE_HTML * html_block_lines ::= * html_block_lines html_block_line html_block_lines ::= * html_block_line html_block_line ::= * LINE_CONTINUATION html_block_line ::= * LINE_HTML - LINE_CONTINUATION shift-reduce 80 html_block_line ::= LINE_CONTINUATION - LINE_HTML shift-reduce 81 html_block_line ::= LINE_HTML - LINE_HTML reduce 78 ** Parsing conflict ** - html_block_lines shift 29 - html_block_line shift 29 /* because html_block_line==html_block_lines */ - {default} reduce 78 html_block ::= LINE_HTML + LINE_CONTINUATION shift-reduce 83 html_block_line ::= LINE_CONTINUATION + LINE_HTML shift-reduce 84 html_block_line ::= LINE_HTML + LINE_HTML reduce 81 ** Parsing conflict ** + html_block_lines shift 31 + html_block_line shift 31 /* because html_block_line==html_block_lines */ + {default} reduce 81 html_block ::= LINE_HTML -State 14: +State 15: blockquote ::= LINE_BLOCKQUOTE * quote_lines - (66) blockquote ::= LINE_BLOCKQUOTE * + (69) blockquote ::= LINE_BLOCKQUOTE * quote_lines ::= * quote_lines quote_line quote_lines ::= * quote_line quote_line ::= * LINE_BLOCKQUOTE quote_line ::= * LINE_CONTINUATION - LINE_CONTINUATION shift-reduce 69 quote_line ::= LINE_CONTINUATION - LINE_BLOCKQUOTE shift-reduce 68 quote_line ::= LINE_BLOCKQUOTE - LINE_BLOCKQUOTE reduce 66 ** Parsing conflict ** - quote_lines shift 30 - quote_line shift 30 /* because quote_line==quote_lines */ - {default} reduce 66 blockquote ::= LINE_BLOCKQUOTE + LINE_CONTINUATION shift-reduce 72 quote_line ::= LINE_CONTINUATION + LINE_BLOCKQUOTE shift-reduce 71 quote_line ::= LINE_BLOCKQUOTE + LINE_BLOCKQUOTE reduce 69 ** Parsing conflict ** + quote_lines shift 32 + quote_line shift 32 /* because quote_line==quote_lines */ + {default} reduce 69 blockquote ::= LINE_BLOCKQUOTE -State 15: +State 16: para_lines ::= * para_lines para_line para_lines ::= * para_line para_line ::= * LINE_CONTINUATION def_link ::= LINE_DEF_LINK * para_lines - (77) def_link ::= LINE_DEF_LINK * + (80) def_link ::= LINE_DEF_LINK * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - para_lines shift 31 - para_line shift 31 /* because para_line==para_lines */ - {default} reduce 77 def_link ::= LINE_DEF_LINK + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + para_lines shift 33 + para_line shift 33 /* because para_line==para_lines */ + {default} reduce 80 def_link ::= LINE_DEF_LINK -State 16: +State 17: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - (47) def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks * + (48) def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks * - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 47 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 47 def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 48 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 48 def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks -State 17: +State 18: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - (45) def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks * + (46) def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks * - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 45 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 45 def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 46 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 46 def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks -State 18: +State 19: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - (44) def_citation ::= LINE_DEF_CITATION cont_blocks * + (45) def_citation ::= LINE_DEF_CITATION cont_blocks * - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 44 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 44 def_citation ::= LINE_DEF_CITATION cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 45 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 45 def_citation ::= LINE_DEF_CITATION cont_blocks -State 19: +State 20: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - (42) def_citation ::= LINE_DEF_CITATION para_lines cont_blocks * + (43) def_citation ::= LINE_DEF_CITATION para_lines cont_blocks * - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 42 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 42 def_citation ::= LINE_DEF_CITATION para_lines cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 43 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 43 def_citation ::= LINE_DEF_CITATION para_lines cont_blocks -State 20: +State 21: para ::= LINE_PLAIN * para_lines - (56) para ::= LINE_PLAIN * + (59) para ::= LINE_PLAIN * para_lines ::= * para_lines para_line para_lines ::= * para_line para_line ::= * LINE_CONTINUATION - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - para_lines shift 32 - para_line shift 32 /* because para_line==para_lines */ - {default} reduce 56 para ::= LINE_PLAIN + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + para_lines shift 34 + para_line shift 34 /* because para_line==para_lines */ + {default} reduce 59 para ::= LINE_PLAIN -State 21: +State 22: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - (36) item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks * + (37) item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks * cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 36 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 36 item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 37 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 37 item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks -State 22: +State 23: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - (34) item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks * + (35) item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks * cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 34 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 34 item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 35 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 35 item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks -State 23: +State 24: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - (31) item_bulleted ::= LINE_LIST_BULLETED cont_blocks * + (32) item_bulleted ::= LINE_LIST_BULLETED cont_blocks * cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 31 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 31 item_bulleted ::= LINE_LIST_BULLETED cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 32 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 32 item_bulleted ::= LINE_LIST_BULLETED cont_blocks -State 24: +State 25: empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - (29) item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks * + (30) item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks * cont_blocks ::= cont_blocks * cont_block cont_block ::= * empty indented_line para_lines cont_block ::= * empty indented_line cont_block ::= * empty - LINE_EMPTY shift-reduce 65 empty ::= LINE_EMPTY - LINE_EMPTY reduce 29 ** Parsing conflict ** - empty shift 28 - cont_block shift-reduce 38 cont_blocks ::= cont_blocks cont_block - {default} reduce 29 item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks + LINE_EMPTY shift-reduce 68 empty ::= LINE_EMPTY + LINE_EMPTY reduce 30 ** Parsing conflict ** + empty shift 29 + cont_block shift-reduce 39 cont_blocks ::= cont_blocks cont_block + {default} reduce 30 item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks -State 25: +State 26: para_lines ::= * para_lines para_line para_lines ::= * para_line para_line ::= * LINE_CONTINUATION cont_block ::= empty indented_line * para_lines - (40) cont_block ::= empty indented_line * + (41) cont_block ::= empty indented_line * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - para_lines shift 34 - para_line shift 34 /* because para_line==para_lines */ - {default} reduce 40 cont_block ::= empty indented_line + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + para_lines shift 36 + para_line shift 36 /* because para_line==para_lines */ + {default} reduce 41 cont_block ::= empty indented_line -State 26: +State 27: fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines * LINE_FENCE_BACKTICK - (54) fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines * + (55) fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines * fenced_lines ::= fenced_lines * fenced_line fenced_line ::= * LINE_CONTINUATION fenced_line ::= * LINE_EMPTY - LINE_CONTINUATION shift-reduce 83 fenced_line ::= LINE_CONTINUATION - LINE_FENCE_BACKTICK shift-reduce 53 fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK - LINE_FENCE_BACKTICK reduce 54 ** Parsing conflict ** - LINE_EMPTY shift-reduce 84 fenced_line ::= LINE_EMPTY - LINE_EMPTY reduce 54 ** Parsing conflict ** - fenced_line shift-reduce 55 fenced_lines ::= fenced_lines fenced_line - {default} reduce 54 fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines + LINE_CONTINUATION shift-reduce 86 fenced_line ::= LINE_CONTINUATION + LINE_FENCE_BACKTICK shift-reduce 54 fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK + LINE_FENCE_BACKTICK reduce 55 ** Parsing conflict ** + LINE_EMPTY shift-reduce 87 fenced_line ::= LINE_EMPTY + LINE_EMPTY reduce 55 ** Parsing conflict ** + fenced_line shift-reduce 56 fenced_lines ::= fenced_lines fenced_line + {default} reduce 55 fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines -State 27: +State 28: fenced_block ::= LINE_FENCE_BACKTICK fenced_lines * LINE_FENCE_BACKTICK - (52) fenced_block ::= LINE_FENCE_BACKTICK fenced_lines * + (53) fenced_block ::= LINE_FENCE_BACKTICK fenced_lines * fenced_lines ::= fenced_lines * fenced_line fenced_line ::= * LINE_CONTINUATION fenced_line ::= * LINE_EMPTY - LINE_CONTINUATION shift-reduce 83 fenced_line ::= LINE_CONTINUATION - LINE_FENCE_BACKTICK shift-reduce 51 fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK - LINE_FENCE_BACKTICK reduce 52 ** Parsing conflict ** - LINE_EMPTY shift-reduce 84 fenced_line ::= LINE_EMPTY - LINE_EMPTY reduce 52 ** Parsing conflict ** - fenced_line shift-reduce 55 fenced_lines ::= fenced_lines fenced_line - {default} reduce 52 fenced_block ::= LINE_FENCE_BACKTICK fenced_lines + LINE_CONTINUATION shift-reduce 86 fenced_line ::= LINE_CONTINUATION + LINE_FENCE_BACKTICK shift-reduce 52 fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK + LINE_FENCE_BACKTICK reduce 53 ** Parsing conflict ** + LINE_EMPTY shift-reduce 87 fenced_line ::= LINE_EMPTY + LINE_EMPTY reduce 53 ** Parsing conflict ** + fenced_line shift-reduce 56 fenced_lines ::= fenced_lines fenced_line + {default} reduce 53 fenced_block ::= LINE_FENCE_BACKTICK fenced_lines -State 28: +State 29: indented_line ::= * LINE_INDENTED_TAB indented_line ::= * LINE_INDENTED_SPACE empty ::= empty * LINE_EMPTY cont_block ::= empty * indented_line para_lines cont_block ::= empty * indented_line - (73) cont_block ::= empty * + (76) cont_block ::= empty * - LINE_INDENTED_TAB shift-reduce 63 indented_line ::= LINE_INDENTED_TAB - LINE_INDENTED_TAB reduce 73 ** Parsing conflict ** - LINE_INDENTED_SPACE shift-reduce 64 indented_line ::= LINE_INDENTED_SPACE - LINE_INDENTED_SPACE reduce 73 ** Parsing conflict ** - LINE_EMPTY shift-reduce 25 empty ::= empty LINE_EMPTY - LINE_EMPTY reduce 73 ** Parsing conflict ** - indented_line shift 25 - {default} reduce 73 cont_block ::= empty + LINE_INDENTED_TAB shift-reduce 66 indented_line ::= LINE_INDENTED_TAB + LINE_INDENTED_TAB reduce 76 ** Parsing conflict ** + LINE_INDENTED_SPACE shift-reduce 67 indented_line ::= LINE_INDENTED_SPACE + LINE_INDENTED_SPACE reduce 76 ** Parsing conflict ** + LINE_EMPTY shift-reduce 26 empty ::= empty LINE_EMPTY + LINE_EMPTY reduce 76 ** Parsing conflict ** + indented_line shift 26 + {default} reduce 76 cont_block ::= empty -State 29: - (49) html_block ::= LINE_HTML html_block_lines * +State 30: + (57) meta_block ::= LINE_META meta_lines * + meta_lines ::= meta_lines * meta_line + meta_line ::= * LINE_META + meta_line ::= * LINE_CONTINUATION + + LINE_CONTINUATION shift-reduce 91 meta_line ::= LINE_CONTINUATION + LINE_META shift-reduce 90 meta_line ::= LINE_META + LINE_META reduce 57 ** Parsing conflict ** + meta_line shift-reduce 58 meta_lines ::= meta_lines meta_line + {default} reduce 57 meta_block ::= LINE_META meta_lines + +State 31: + (50) html_block ::= LINE_HTML html_block_lines * html_block_lines ::= html_block_lines * html_block_line html_block_line ::= * LINE_CONTINUATION html_block_line ::= * LINE_HTML - LINE_CONTINUATION shift-reduce 80 html_block_line ::= LINE_CONTINUATION - LINE_HTML shift-reduce 81 html_block_line ::= LINE_HTML - LINE_HTML reduce 49 ** Parsing conflict ** - html_block_line shift-reduce 50 html_block_lines ::= html_block_lines html_block_line - {default} reduce 49 html_block ::= LINE_HTML html_block_lines + LINE_CONTINUATION shift-reduce 83 html_block_line ::= LINE_CONTINUATION + LINE_HTML shift-reduce 84 html_block_line ::= LINE_HTML + LINE_HTML reduce 50 ** Parsing conflict ** + html_block_line shift-reduce 51 html_block_lines ::= html_block_lines html_block_line + {default} reduce 50 html_block ::= LINE_HTML html_block_lines -State 30: - (26) blockquote ::= LINE_BLOCKQUOTE quote_lines * +State 32: + (27) blockquote ::= LINE_BLOCKQUOTE quote_lines * quote_lines ::= quote_lines * quote_line quote_line ::= * LINE_BLOCKQUOTE quote_line ::= * LINE_CONTINUATION - LINE_CONTINUATION shift-reduce 69 quote_line ::= LINE_CONTINUATION - LINE_BLOCKQUOTE shift-reduce 68 quote_line ::= LINE_BLOCKQUOTE - LINE_BLOCKQUOTE reduce 26 ** Parsing conflict ** - quote_line shift-reduce 27 quote_lines ::= quote_lines quote_line - {default} reduce 26 blockquote ::= LINE_BLOCKQUOTE quote_lines + LINE_CONTINUATION shift-reduce 72 quote_line ::= LINE_CONTINUATION + LINE_BLOCKQUOTE shift-reduce 71 quote_line ::= LINE_BLOCKQUOTE + LINE_BLOCKQUOTE reduce 27 ** Parsing conflict ** + quote_line shift-reduce 28 quote_lines ::= quote_lines quote_line + {default} reduce 27 blockquote ::= LINE_BLOCKQUOTE quote_lines -State 31: +State 33: para_lines ::= para_lines * para_line para_line ::= * LINE_CONTINUATION - (48) def_link ::= LINE_DEF_LINK para_lines * + (49) def_link ::= LINE_DEF_LINK para_lines * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - para_line shift-reduce 23 para_lines ::= para_lines para_line - {default} reduce 48 def_link ::= LINE_DEF_LINK para_lines + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + para_line shift-reduce 24 para_lines ::= para_lines para_line + {default} reduce 49 def_link ::= LINE_DEF_LINK para_lines -State 32: - (22) para ::= LINE_PLAIN para_lines * +State 34: + (23) para ::= LINE_PLAIN para_lines * para_lines ::= para_lines * para_line para_line ::= * LINE_CONTINUATION - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - para_line shift-reduce 23 para_lines ::= para_lines para_line - {default} reduce 22 para ::= LINE_PLAIN para_lines + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + para_line shift-reduce 24 para_lines ::= para_lines para_line + {default} reduce 23 para ::= LINE_PLAIN para_lines -State 33: +State 35: (13) block ::= list_enumerated * list_enumerated ::= list_enumerated * item_enumerated item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks @@ -721,19 +758,19 @@ State 33: LINE_LIST_ENUMERATED shift 4 LINE_LIST_ENUMERATED reduce 13 ** Parsing conflict ** - item_enumerated shift-reduce 33 list_enumerated ::= list_enumerated item_enumerated + item_enumerated shift-reduce 34 list_enumerated ::= list_enumerated item_enumerated {default} reduce 13 block ::= list_enumerated -State 34: +State 36: para_lines ::= para_lines * para_line para_line ::= * LINE_CONTINUATION - (39) cont_block ::= empty indented_line para_lines * + (40) cont_block ::= empty indented_line para_lines * - LINE_CONTINUATION shift-reduce 58 para_line ::= LINE_CONTINUATION - para_line shift-reduce 23 para_lines ::= para_lines para_line - {default} reduce 39 cont_block ::= empty indented_line para_lines + LINE_CONTINUATION shift-reduce 61 para_line ::= LINE_CONTINUATION + para_line shift-reduce 24 para_lines ::= para_lines para_line + {default} reduce 40 cont_block ::= empty indented_line para_lines -State 35: +State 37: (12) block ::= list_bulleted * list_bulleted ::= list_bulleted * item_bulleted item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks @@ -743,22 +780,22 @@ State 35: LINE_LIST_BULLETED shift 5 LINE_LIST_BULLETED reduce 12 ** Parsing conflict ** - item_bulleted shift-reduce 28 list_bulleted ::= list_bulleted item_bulleted + item_bulleted shift-reduce 29 list_bulleted ::= list_bulleted item_bulleted {default} reduce 12 block ::= list_bulleted -State 36: +State 38: (15) block ::= table * table ::= table * LINE_TABLE - LINE_TABLE shift-reduce 41 table ::= table LINE_TABLE + LINE_TABLE shift-reduce 42 table ::= table LINE_TABLE LINE_TABLE reduce 15 ** Parsing conflict ** {default} reduce 15 block ::= table -State 37: +State 39: (11) block ::= empty * empty ::= empty * LINE_EMPTY - LINE_EMPTY shift-reduce 25 empty ::= empty LINE_EMPTY + LINE_EMPTY shift-reduce 26 empty ::= empty LINE_EMPTY LINE_EMPTY reduce 11 ** Parsing conflict ** {default} reduce 11 block ::= empty @@ -787,33 +824,37 @@ Symbols: 20: LINE_FENCE_BACKTICK 21: LINE_FENCE_BACKTICK_START 22: LINE_EMPTY - 23: error: - 24: doc: LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE 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_TABLE LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_EMPTY - 25: blocks: LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE 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_TABLE LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_EMPTY - 26: block: LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE 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_TABLE LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_EMPTY - 27: para: LINE_PLAIN - 28: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE - 29: empty: LINE_EMPTY - 30: list_bulleted: LINE_LIST_BULLETED - 31: list_enumerated: LINE_LIST_ENUMERATED - 32: blockquote: LINE_BLOCKQUOTE - 33: table: LINE_TABLE - 34: def_citation: LINE_DEF_CITATION - 35: def_footnote: LINE_DEF_FOOTNOTE - 36: def_link: LINE_DEF_LINK - 37: html_block: LINE_HTML - 38: fenced_block: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START - 39: para_lines: LINE_CONTINUATION - 40: para_line: LINE_CONTINUATION - 41: code_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_EMPTY - 42: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE - 43: quote_lines: LINE_CONTINUATION LINE_BLOCKQUOTE - 44: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE - 45: item_bulleted: LINE_LIST_BULLETED - 46: cont_blocks: LINE_EMPTY - 47: item_enumerated: LINE_LIST_ENUMERATED - 48: cont_block: LINE_EMPTY - 49: html_block_lines: LINE_CONTINUATION LINE_HTML - 50: html_block_line: LINE_CONTINUATION LINE_HTML - 51: fenced_lines: LINE_CONTINUATION LINE_EMPTY - 52: fenced_line: LINE_CONTINUATION LINE_EMPTY + 23: LINE_META + 24: error: + 25: doc: LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE 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_TABLE LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_EMPTY LINE_META + 26: blocks: LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE 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_TABLE LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_EMPTY LINE_META + 27: block: LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE 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_TABLE LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_EMPTY LINE_META + 28: para: LINE_PLAIN + 29: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE + 30: empty: LINE_EMPTY + 31: list_bulleted: LINE_LIST_BULLETED + 32: list_enumerated: LINE_LIST_ENUMERATED + 33: blockquote: LINE_BLOCKQUOTE + 34: table: LINE_TABLE + 35: def_citation: LINE_DEF_CITATION + 36: def_footnote: LINE_DEF_FOOTNOTE + 37: def_link: LINE_DEF_LINK + 38: html_block: LINE_HTML + 39: fenced_block: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START + 40: meta_block: LINE_META + 41: para_lines: LINE_CONTINUATION + 42: para_line: LINE_CONTINUATION + 43: code_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_EMPTY + 44: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE + 45: quote_lines: LINE_CONTINUATION LINE_BLOCKQUOTE + 46: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE + 47: item_bulleted: LINE_LIST_BULLETED + 48: cont_blocks: LINE_EMPTY + 49: item_enumerated: LINE_LIST_ENUMERATED + 50: cont_block: LINE_EMPTY + 51: html_block_lines: LINE_CONTINUATION LINE_HTML + 52: html_block_line: LINE_CONTINUATION LINE_HTML + 53: fenced_lines: LINE_CONTINUATION LINE_EMPTY + 54: fenced_line: LINE_CONTINUATION LINE_EMPTY + 55: meta_lines: LINE_CONTINUATION LINE_META + 56: meta_line: LINE_CONTINUATION LINE_META diff --git a/src/parser.y b/src/parser.y index ce001bb..3793d6f 100644 --- a/src/parser.y +++ b/src/parser.y @@ -107,7 +107,7 @@ block(A) ::= def_footnote(B). { A = token_new_parent(B, BLOCK_DEF_FOOTNOT block(A) ::= def_link(B). { A = token_new_parent(B, BLOCK_DEF_LINK); stack_push(engine->definition_stack, A); } block(A) ::= html_block(B). { A = token_new_parent(B, BLOCK_HTML); } block(A) ::= fenced_block(B). { A = token_new_parent(B, BLOCK_CODE_FENCED); B->child->type = CODE_FENCE; } - +block(A) ::= meta_block(B). { A = token_new_parent(B, BLOCK_META); } para(A) ::= LINE_PLAIN(B) para_lines(C). { A = B; token_chain_append(B, C); } para ::= LINE_PLAIN. @@ -200,6 +200,18 @@ fenced_lines ::= fenced_line. fenced_line ::= LINE_CONTINUATION. fenced_line ::= LINE_EMPTY. + +meta_block(A) ::= LINE_META(B) meta_lines(C). { A = B; token_chain_append(B, C); } +meta_block ::= LINE_META. + +meta_lines(A) ::= meta_lines(B) meta_line(C). { A = B; token_chain_append(B, C); } +meta_lines ::= meta_line. + +meta_line ::= LINE_META. +meta_line ::= LINE_CONTINUATION. + + + // // Additional Configuration // diff --git a/src/scanners.c b/src/scanners.c index 3caba93..565362c 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.14.3 on Wed Jan 18 22:23:16 2017 */ +/* Generated by re2c 0.14.3 on Tue Jan 24 17:14:02 2017 */ /** MultiMarkdown 6 -- Lightweight markup processor to produce HTML, LaTeX, and more. @@ -8492,6 +8492,301 @@ yy617: } +size_t scan_meta_line(const char * c) { + const char * marker = NULL; + const char * start = c; + + +{ + char yych; + yych = *c; + switch (yych) { + case '\n': goto yy620; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy621; + default: goto yy622; + } +yy620: + { return 0; } +yy621: + yych = *(marker = ++c); + switch (yych) { + case '\t': goto yy626; + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy623; + case ':': goto yy628; + default: goto yy620; + } +yy622: + yych = *++c; + goto yy620; +yy623: + ++c; + yych = *c; + switch (yych) { + case '\t': goto yy626; + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy623; + case ':': goto yy628; + default: goto yy625; + } +yy625: + c = marker; + goto yy620; +yy626: + ++c; + yych = *c; + switch (yych) { + case '\t': + case ' ': goto yy626; + case ':': goto yy628; + default: goto yy625; + } +yy628: + yych = *++c; + switch (yych) { + case '\n': + case '\r': goto yy625; + default: goto yy630; + } +yy629: + ++c; + yych = *c; +yy630: + switch (yych) { + case 0x00: goto yy625; + case '\n': goto yy631; + case '\r': goto yy633; + default: goto yy629; + } +yy631: + ++c; +yy632: + { return (size_t)( c - start ); } +yy633: + ++c; + switch ((yych = *c)) { + case '\n': goto yy631; + default: goto yy632; + } +} + +} + + + #ifdef TEST void Test_scan_url(CuTest* tc) { int url_len; diff --git a/src/scanners.h b/src/scanners.h index 3be8a58..67df9d9 100644 --- a/src/scanners.h +++ b/src/scanners.h @@ -70,6 +70,7 @@ size_t scan_html(const char * c); size_t scan_html_block(const char * c); size_t scan_html_line(const char * c); size_t scan_key(const char * c); +size_t scan_meta_line(const char * c); size_t scan_ref_citation(const char * c); size_t scan_ref_foot(const char * c); size_t scan_ref_link(const char * c); diff --git a/src/scanners.re b/src/scanners.re index b0e7b23..d22bd5c 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -130,6 +130,12 @@ fence_start = non_indent [`~]{3,} [^`'\n\r\x00] nl; fence_end = non_indent [`~]{3,} sp nl; + + meta_key = [A-Za-z0-9] [A-Za-z0-9_ -\.]*; + + meta_value = [^\n\r\x00]+; + + meta_line = meta_key sp ':' meta_value nl; // meta_line can't match url above */ @@ -307,6 +313,18 @@ size_t scan_fence_end(const char * c) { } +size_t scan_meta_line(const char * c) { + const char * marker = NULL; + const char * start = c; + +/*!re2c + meta_line { return (size_t)( c - start ); } + .? { return 0; } +*/ +} + + + #ifdef TEST void Test_scan_url(CuTest* tc) { int url_len;