]> granicus.if.org Git - multimarkdown/commitdiff
CHANGED: Refactor parser grammar for clarity and consistency
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 7 Feb 2017 19:31:41 +0000 (14:31 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 7 Feb 2017 19:31:41 +0000 (14:31 -0500)
src/parser.c
src/parser.h
src/parser.out
src/parser.y
test/parser_test.y

index eef46be70ac73e598fdace64d4ae094d6b9dacf2..ef5f6d0a888f6cef0de54cb7037ccc1cadbe0d62 100644 (file)
@@ -92,7 +92,7 @@
 #endif
 /************* Begin control #defines *****************************************/
 #define YYCODETYPE unsigned char
-#define YYNOCODE 71
+#define YYNOCODE 69
 #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             50
-#define YYNRULE              114
-#define YY_MAX_SHIFT         49
-#define YY_MIN_SHIFTREDUCE   117
-#define YY_MAX_SHIFTREDUCE   230
-#define YY_MIN_REDUCE        231
-#define YY_MAX_REDUCE        344
-#define YY_ERROR_ACTION      345
-#define YY_ACCEPT_ACTION     346
-#define YY_NO_ACTION         347
+#define YYNSTATE             40
+#define YYNRULE              104
+#define YY_MAX_SHIFT         39
+#define YY_MIN_SHIFTREDUCE   106
+#define YY_MAX_SHIFTREDUCE   209
+#define YY_MIN_REDUCE        210
+#define YY_MAX_REDUCE        313
+#define YY_ERROR_ACTION      314
+#define YY_ACCEPT_ACTION     315
+#define YY_NO_ACTION         316
 /************* End control #defines *******************************************/
 
 /* Define the yytestcase() macro to be a no-op if is not already defined
@@ -188,83 +188,76 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (220)
+#define YY_ACTTAB_COUNT (200)
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */   346,    1,  119,   31,   13,   48,   43,   41,  131,  132,
- /*    10 */   134,  135,  136,  137,  138,  139,  141,  196,  197,   47,
- /*    20 */    13,  192,  164,   43,  198,   41,  202,    4,   46,   44,
- /*    30 */    18,   18,   47,    9,   12,   12,    9,  195,  201,   38,
- /*    40 */    38,  231,   25,  209,  181,  196,  197,  212,   17,  122,
- /*    50 */   123,  124,  125,  126,  127,  133,   19,    6,    5,    3,
- /*    60 */     2,   20,   16,   15,  140,  198,   14,   44,   25,  209,
- /*    70 */    30,  196,  197,  212,   17,  122,  123,  124,  125,  126,
- /*    80 */   127,  133,   19,    6,    5,    3,    2,   20,   16,   15,
- /*    90 */   140,  198,   14,   44,  118,   31,   13,   48,   43,   41,
- /*   100 */   131,  132,  134,  135,  136,  137,  138,  139,  141,  209,
- /*   110 */   144,  144,   13,  212,   34,   43,  183,   41,  176,    4,
- /*   120 */    46,  218,   18,   18,   34,  219,    7,    7,   34,   32,
- /*   130 */    32,   38,   38,   21,  147,   21,    8,    8,   34,   34,
- /*   140 */    10,   10,   34,   23,  161,   23,  185,   26,  167,   26,
- /*   150 */    11,   11,  143,  222,  153,  143,   34,   28,   22,   28,
- /*   160 */    22,   24,  227,   24,   47,  166,   12,   12,  209,  143,
- /*   170 */    34,  179,  212,  143,  223,   27,  222,   27,    5,  196,
- /*   180 */   197,  192,  148,  143,  226,   35,   35,  222,    6,   29,
- /*   190 */   162,   29,   33,   33,  177,   36,   36,  223,   34,  145,
- /*   200 */    37,   37,  198,   39,   39,   40,   40,  229,  223,   42,
- /*   210 */    42,   45,   45,  167,   49,  145,  188,  233,  233,  158,
+ /*     0 */   315,    1,  108,   27,  118,  119,  120,  121,   39,  123,
+ /*    10 */    26,   24,   34,   32,   25,   17,  130,   36,  166,   11,
+ /*    20 */    11,   24,  175,  176,  172,  208,   29,   37,   22,  204,
+ /*    30 */    36,   34,   32,  169,    6,  187,   35,  186,   12,   12,
+ /*    40 */   210,   13,  208,  145,  175,  176,  204,  193,  109,  110,
+ /*    50 */   111,  112,  113,  114,  115,  180,    5,    4,    3,    2,
+ /*    60 */    14,  189,  190,  116,  186,  187,  199,   13,  208,  147,
+ /*    70 */   175,  176,  204,  193,  109,  110,  111,  112,  113,  114,
+ /*    80 */   115,  180,    5,    4,    3,    2,   14,  189,  190,  116,
+ /*    90 */   186,  187,  199,  107,   27,  118,  119,  120,  121,   39,
+ /*   100 */   123,   26,   24,   34,   32,   25,   17,  130,   31,   37,
+ /*   110 */   175,  176,   24,   28,   28,  172,   23,   29,   37,   22,
+ /*   120 */    30,   30,   34,   32,   23,    6,  182,   35,  132,   12,
+ /*   130 */    12,  150,   23,    8,    8,   15,   15,  187,  181,  139,
+ /*   140 */   139,    8,    8,   15,   15,   33,   33,  138,  138,   23,
+ /*   150 */     7,   36,    7,   11,   11,   23,   20,  149,    9,    9,
+ /*   160 */    18,   18,   23,  157,   10,   10,   19,   19,  191,  152,
+ /*   170 */    23,  201,  131,   16,   16,  208,  161,  137,  148,  204,
+ /*   180 */   131,   21,   21,  194,  164,  131,  146,  195,  165,    4,
+ /*   190 */   192,   38,  156,    5,  200,  165,  151,  144,  167,  145,
 };
 static const YYCODETYPE yy_lookahead[] = {
  /*     0 */    28,   29,   30,   31,   32,   33,   34,   35,   36,   37,
- /*    10 */    38,   39,   40,   41,   42,   43,   44,    4,    5,   56,
- /*    20 */    48,    3,   59,   51,   24,   53,    3,   55,   56,   26,
- /*    30 */    58,   59,   56,   57,   58,   59,   60,   24,   15,   67,
- /*    40 */    68,    0,    1,    2,   64,    4,    5,    6,    7,    8,
- /*    50 */     9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
- /*    60 */    19,   20,   21,   22,   23,   24,   25,   26,    1,    2,
- /*    70 */    48,    4,    5,    6,    7,    8,    9,   10,   11,   12,
- /*    80 */    13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
- /*    90 */    23,   24,   25,   26,   30,   31,   32,   33,   34,   35,
- /*   100 */    36,   37,   38,   39,   40,   41,   42,   43,   44,    2,
- /*   110 */    47,   48,   48,    6,   33,   51,   66,   53,   62,   55,
- /*   120 */    56,    3,   58,   59,   33,    7,   45,   46,   33,   63,
- /*   130 */    64,   67,   68,   52,   50,   54,   45,   46,   33,   33,
- /*   140 */    45,   46,   33,   52,    2,   54,   68,   52,    6,   54,
- /*   150 */    45,   46,   46,    3,   53,   46,   33,   52,   52,   54,
- /*   160 */    54,   52,    3,   54,   56,   57,   58,   59,    2,   46,
- /*   170 */    33,   21,    6,   46,   24,   52,    3,   54,   17,    4,
- /*   180 */     5,    3,   51,   46,   25,   65,   66,    3,   16,   52,
- /*   190 */    24,   54,   63,   64,   21,   61,   62,   24,   33,   24,
- /*   200 */    49,   50,   24,   45,   46,   45,   46,    3,   24,   45,
- /*   210 */    46,   67,   68,    6,   69,   24,    3,   70,   70,   54,
+ /*    10 */    38,   39,   40,   41,   42,   43,   44,   64,   65,   66,
+ /*    20 */    67,   49,    4,    5,    3,    2,   54,   55,   56,    6,
+ /*    30 */    64,   59,   60,   67,   62,   25,   64,   24,   66,   67,
+ /*    40 */     0,    1,    2,   25,    4,    5,    6,    7,    8,    9,
+ /*    50 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
+ /*    60 */    20,   21,   22,   23,   24,   25,   26,    1,    2,   57,
+ /*    70 */     4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
+ /*    80 */    14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
+ /*    90 */    24,   25,   26,   30,   31,   32,   33,   34,   35,   36,
+ /*   100 */    37,   38,   39,   40,   41,   42,   43,   44,   54,   55,
+ /*   110 */     4,    5,   49,   45,   46,    3,   36,   54,   55,   56,
+ /*   120 */    45,   46,   59,   60,   36,   62,    3,   64,   48,   66,
+ /*   130 */    67,   25,   36,   45,   46,   47,   48,   25,   15,   51,
+ /*   140 */    52,   45,   46,   47,   48,   45,   46,   51,   52,   36,
+ /*   150 */    63,   64,   65,   66,   67,   36,   49,   49,   45,   46,
+ /*   160 */    47,   48,   36,   50,   45,   46,   47,   48,    3,   50,
+ /*   170 */    36,    3,   46,   47,   48,    2,   61,   53,   58,    6,
+ /*   180 */    46,   47,   48,    3,    2,   46,   21,    7,    6,   17,
+ /*   190 */    25,   55,   60,   16,   26,    6,   59,    3,   25,   25,
 };
-#define YY_SHIFT_USE_DFLT (220)
-#define YY_SHIFT_COUNT    (49)
+#define YY_SHIFT_USE_DFLT (200)
+#define YY_SHIFT_COUNT    (39)
 #define YY_SHIFT_MIN      (0)
-#define YY_SHIFT_MAX      (213)
+#define YY_SHIFT_MAX      (194)
 static const unsigned char yy_shift_ofst[] = {
- /*     0 */    67,   41,  178,  178,  107,  178,  178,  178,  178,  107,
- /*    10 */   178,  178,  166,   13,  159,  184,  184,  118,  107,   23,
- /*    20 */    18,    0,    0,    0,    0,   18,    0,    0,    0,    0,
- /*    30 */    18,    3,  150,  173,  175,  159,  118,   23,    3,   18,
- /*    40 */    18,  161,   18,  172,  204,    3,  142,  207,  191,  213,
+ /*     0 */    66,   40,  112,  112,  112,  112,   23,   23,  112,  112,
+ /*    10 */   112,  173,   23,   21,   21,   10,   10,   13,   10,   10,
+ /*    20 */    21,   10,  165,   18,  106,  168,  180,  123,   21,   13,
+ /*    30 */    21,   13,  172,   21,  177,  182,  189,  194,  194,  174,
 };
-#define YY_REDUCE_USE_DFLT (-38)
-#define YY_REDUCE_COUNT (45)
-#define YY_REDUCE_MIN   (-37)
-#define YY_REDUCE_MAX   (165)
+#define YY_REDUCE_USE_DFLT (-48)
+#define YY_REDUCE_COUNT (34)
+#define YY_REDUCE_MIN   (-47)
+#define YY_REDUCE_MAX   (139)
 static const short yy_reduce_ofst[] = {
- /*     0 */   -28,   64,   81,   91,  -24,   95,  105,  106,  109,  108,
- /*    10 */   123,  137,  -37,   63,  120,   66,  129,  134,  -37,  151,
- /*    20 */   158,  165,  165,  165,  165,  160,  165,  165,  165,  165,
- /*    30 */   164,  144,  -20,  -20,   22,   50,   56,   84,   78,  127,
- /*    40 */   127,  101,  127,  131,  145,   78,
+ /*     0 */   -28,   63,   88,   96,  113,  119,   87,  -47,  126,  134,
+ /*    10 */   134,  -34,  -34,   68,   75,   80,   80,   54,   80,   80,
+ /*    20 */   100,   80,   12,  107,  108,  115,  120,  124,  139,  136,
+ /*    30 */   139,  136,  132,  139,  137,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */   345,  345,  328,  327,  324,  271,  266,  286,  283,  279,
- /*    10 */   269,  264,  277,  235,  338,  335,  335,  330,  303,  313,
- /*    20 */   329,  287,  285,  284,  282,  304,  270,  268,  265,  263,
- /*    30 */   274,  234,  294,  292,  320,  296,  289,  260,  344,  288,
- /*    40 */   256,  244,  273,  243,  301,  298,  322,  322,  242,  300,
+ /*     0 */   314,  314,  288,  287,  264,  259,  307,  267,  281,  262,
+ /*    10 */   257,  272,  274,  306,  289,  283,  240,  233,  263,  258,
+ /*    20 */   238,  239,  292,  278,  229,  232,  228,  221,  266,  313,
+ /*    30 */   244,  245,  231,  237,  230,  311,  311,  247,  246,  226,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -398,18 +391,17 @@ static const char *const yyTokenName[] = {
   "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",  "LINE_TOC",    
-  "LINE_EMPTY",    "LINE_META",     "LINE_DEFINITION",  "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",  
-  "definition_block",  "para_lines",    "para_line",     "code_line",   
-  "indented_line",  "quote_lines",   "quote_line",    "item_bulleted",
-  "cont_blocks",   "item_enumerated",  "cont_block",    "table_header",
+  "LINE_DEFINITION",  "LINE_EMPTY",    "LINE_META",     "error",       
+  "doc",           "blocks",        "block",         "blockquote",  
+  "def_citation",  "def_footnote",  "def_link",      "definition_block",
+  "empty",         "fenced_block",  "html_block",    "indented_code",
+  "list_bullet",   "list_enum",     "meta_block",    "para",        
+  "table",         "chunk",         "chunk_line",    "nested_chunks",
+  "nested_chunk",  "indented_line",  "ext_chunk",     "opt_ext_chunk",
+  "tail",          "quote_line",    "defs",          "def",         
+  "fenced",        "fenced_line",   "html_line",     "item_bullet", 
+  "item_enum",     "meta_line",     "table_header",  "table_body",  
   "header_rows",   "table_section",  "all_rows",      "row",         
-  "table_body",    "html_block_lines",  "html_block_line",  "fenced_lines",
-  "fenced_line",   "meta_lines",    "meta_line",     "defs",        
-  "def",           "def_lines",   
 };
 #endif /* NDEBUG */
 
@@ -420,117 +412,107 @@ static const char *const yyRuleName[] = {
  /*   0 */ "doc ::= blocks",
  /*   1 */ "blocks ::= blocks block",
  /*   2 */ "blocks ::= block",
- /*   3 */ "block ::= para",
- /*   4 */ "block ::= indented_code",
- /*   5 */ "block ::= LINE_ATX_1",
- /*   6 */ "block ::= LINE_ATX_2",
- /*   7 */ "block ::= LINE_ATX_3",
- /*   8 */ "block ::= LINE_ATX_4",
- /*   9 */ "block ::= LINE_ATX_5",
- /*  10 */ "block ::= LINE_ATX_6",
- /*  11 */ "block ::= empty",
- /*  12 */ "block ::= list_bulleted",
- /*  13 */ "block ::= list_enumerated",
- /*  14 */ "block ::= blockquote",
- /*  15 */ "block ::= table",
- /*  16 */ "block ::= LINE_HR",
- /*  17 */ "block ::= def_citation",
- /*  18 */ "block ::= def_footnote",
- /*  19 */ "block ::= def_link",
- /*  20 */ "block ::= html_block",
- /*  21 */ "block ::= fenced_block",
+ /*   3 */ "block ::= LINE_ATX_1",
+ /*   4 */ "block ::= LINE_ATX_2",
+ /*   5 */ "block ::= LINE_ATX_3",
+ /*   6 */ "block ::= LINE_ATX_4",
+ /*   7 */ "block ::= LINE_ATX_5",
+ /*   8 */ "block ::= LINE_ATX_6",
+ /*   9 */ "block ::= LINE_HR",
+ /*  10 */ "block ::= LINE_TOC",
+ /*  11 */ "block ::= blockquote",
+ /*  12 */ "block ::= def_citation",
+ /*  13 */ "block ::= def_footnote",
+ /*  14 */ "block ::= def_link",
+ /*  15 */ "block ::= definition_block",
+ /*  16 */ "block ::= empty",
+ /*  17 */ "block ::= fenced_block",
+ /*  18 */ "block ::= html_block",
+ /*  19 */ "block ::= indented_code",
+ /*  20 */ "block ::= list_bullet",
+ /*  21 */ "block ::= list_enum",
  /*  22 */ "block ::= meta_block",
- /*  23 */ "block ::= LINE_TOC",
- /*  24 */ "block ::= definition_block",
- /*  25 */ "para ::= LINE_PLAIN para_lines",
- /*  26 */ "para_lines ::= para_lines para_line",
- /*  27 */ "indented_code ::= indented_code code_line",
- /*  28 */ "empty ::= empty LINE_EMPTY",
- /*  29 */ "blockquote ::= LINE_BLOCKQUOTE quote_lines",
- /*  30 */ "quote_lines ::= quote_lines quote_line",
- /*  31 */ "list_bulleted ::= list_bulleted item_bulleted",
- /*  32 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks",
- /*  33 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines",
- /*  34 */ "item_bulleted ::= LINE_LIST_BULLETED cont_blocks",
- /*  35 */ "item_bulleted ::= LINE_LIST_BULLETED",
- /*  36 */ "list_enumerated ::= list_enumerated item_enumerated",
- /*  37 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks",
- /*  38 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines",
- /*  39 */ "item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks",
- /*  40 */ "item_enumerated ::= LINE_LIST_ENUMERATED",
- /*  41 */ "cont_blocks ::= cont_blocks cont_block",
- /*  42 */ "cont_block ::= empty indented_line para_lines",
- /*  43 */ "cont_block ::= empty indented_line",
- /*  44 */ "table_header ::= header_rows LINE_TABLE_SEPARATOR",
- /*  45 */ "table_section ::= all_rows LINE_EMPTY",
- /*  46 */ "table_section ::= all_rows",
- /*  47 */ "all_rows ::= all_rows row",
- /*  48 */ "table ::= table_header table_body",
- /*  49 */ "table_body ::= table_body table_section",
- /*  50 */ "header_rows ::= header_rows LINE_TABLE",
- /*  51 */ "def_citation ::= LINE_DEF_CITATION para_lines cont_blocks",
- /*  52 */ "def_citation ::= LINE_DEF_CITATION para_lines",
- /*  53 */ "def_citation ::= LINE_DEF_CITATION cont_blocks",
- /*  54 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks",
- /*  55 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines",
- /*  56 */ "def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks",
- /*  57 */ "def_link ::= LINE_DEF_LINK para_lines",
- /*  58 */ "html_block ::= LINE_HTML html_block_lines",
- /*  59 */ "html_block_lines ::= html_block_lines html_block_line",
- /*  60 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK",
- /*  61 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines",
- /*  62 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK",
- /*  63 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines",
- /*  64 */ "fenced_lines ::= fenced_lines fenced_line",
- /*  65 */ "meta_block ::= LINE_META meta_lines",
- /*  66 */ "meta_lines ::= meta_lines meta_line",
- /*  67 */ "definition_block ::= para defs",
- /*  68 */ "defs ::= defs def",
- /*  69 */ "def ::= LINE_DEFINITION def_lines",
- /*  70 */ "def ::= LINE_DEFINITION",
- /*  71 */ "def_lines ::= def_lines LINE_CONTINUATION",
- /*  72 */ "para ::= all_rows",
- /*  73 */ "para ::= LINE_PLAIN",
- /*  74 */ "para_lines ::= para_line",
- /*  75 */ "para_line ::= LINE_CONTINUATION",
- /*  76 */ "indented_code ::= indented_line",
- /*  77 */ "code_line ::= indented_line",
- /*  78 */ "code_line ::= LINE_EMPTY",
- /*  79 */ "indented_line ::= LINE_INDENTED_TAB",
- /*  80 */ "indented_line ::= LINE_INDENTED_SPACE",
+ /*  23 */ "block ::= para",
+ /*  24 */ "block ::= table",
+ /*  25 */ "chunk ::= chunk chunk_line",
+ /*  26 */ "nested_chunks ::= nested_chunks nested_chunk",
+ /*  27 */ "nested_chunk ::= empty indented_line chunk",
+ /*  28 */ "nested_chunk ::= empty indented_line",
+ /*  29 */ "ext_chunk ::= chunk nested_chunks",
+ /*  30 */ "opt_ext_chunk ::= chunk nested_chunks",
+ /*  31 */ "blockquote ::= blockquote quote_line",
+ /*  32 */ "def_citation ::= LINE_DEF_CITATION tail",
+ /*  33 */ "def_footnote ::= LINE_DEF_FOOTNOTE tail",
+ /*  34 */ "def_link ::= LINE_DEF_LINK chunk",
+ /*  35 */ "definition_block ::= para defs",
+ /*  36 */ "defs ::= defs def",
+ /*  37 */ "defs ::= def",
+ /*  38 */ "def ::= def LINE_CONTINUATION",
+ /*  39 */ "empty ::= empty LINE_EMPTY",
+ /*  40 */ "fenced_block ::= fenced LINE_FENCE_BACKTICK",
+ /*  41 */ "fenced ::= fenced fenced_line",
+ /*  42 */ "html_block ::= html_block html_line",
+ /*  43 */ "indented_code ::= indented_code indented_line",
+ /*  44 */ "indented_code ::= indented_code LINE_EMPTY",
+ /*  45 */ "list_bullet ::= list_bullet item_bullet",
+ /*  46 */ "item_bullet ::= LINE_LIST_BULLETED ext_chunk",
+ /*  47 */ "item_bullet ::= LINE_LIST_BULLETED chunk",
+ /*  48 */ "item_bullet ::= LINE_LIST_BULLETED nested_chunks",
+ /*  49 */ "item_bullet ::= LINE_LIST_BULLETED",
+ /*  50 */ "list_enum ::= list_enum item_enum",
+ /*  51 */ "item_enum ::= LINE_LIST_ENUMERATED ext_chunk",
+ /*  52 */ "item_enum ::= LINE_LIST_ENUMERATED chunk",
+ /*  53 */ "item_enum ::= LINE_LIST_ENUMERATED nested_chunks",
+ /*  54 */ "item_enum ::= LINE_LIST_ENUMERATED",
+ /*  55 */ "meta_block ::= meta_block meta_line",
+ /*  56 */ "para ::= LINE_PLAIN chunk",
+ /*  57 */ "table ::= table_header table_body",
+ /*  58 */ "table_header ::= header_rows LINE_TABLE_SEPARATOR",
+ /*  59 */ "header_rows ::= header_rows LINE_TABLE",
+ /*  60 */ "table_body ::= table_body table_section",
+ /*  61 */ "table_section ::= all_rows LINE_EMPTY",
+ /*  62 */ "table_section ::= all_rows",
+ /*  63 */ "all_rows ::= all_rows row",
+ /*  64 */ "para ::= all_rows",
+ /*  65 */ "chunk ::= chunk_line",
+ /*  66 */ "chunk_line ::= LINE_CONTINUATION",
+ /*  67 */ "nested_chunks ::= nested_chunk",
+ /*  68 */ "nested_chunk ::= empty",
+ /*  69 */ "indented_line ::= LINE_INDENTED_TAB",
+ /*  70 */ "indented_line ::= LINE_INDENTED_SPACE",
+ /*  71 */ "opt_ext_chunk ::= chunk",
+ /*  72 */ "tail ::= opt_ext_chunk",
+ /*  73 */ "tail ::= nested_chunks",
+ /*  74 */ "blockquote ::= LINE_BLOCKQUOTE",
+ /*  75 */ "quote_line ::= LINE_BLOCKQUOTE",
+ /*  76 */ "quote_line ::= LINE_CONTINUATION",
+ /*  77 */ "def_citation ::= LINE_DEF_CITATION",
+ /*  78 */ "def_footnote ::= LINE_DEF_FOOTNOTE",
+ /*  79 */ "def_link ::= LINE_DEF_LINK",
+ /*  80 */ "def ::= LINE_DEFINITION",
  /*  81 */ "empty ::= LINE_EMPTY",
- /*  82 */ "blockquote ::= LINE_BLOCKQUOTE",
- /*  83 */ "quote_lines ::= quote_line",
- /*  84 */ "quote_line ::= LINE_BLOCKQUOTE",
- /*  85 */ "quote_line ::= LINE_CONTINUATION",
- /*  86 */ "list_bulleted ::= item_bulleted",
- /*  87 */ "list_enumerated ::= item_enumerated",
- /*  88 */ "cont_blocks ::= cont_block",
- /*  89 */ "cont_block ::= empty",
- /*  90 */ "all_rows ::= row",
- /*  91 */ "row ::= header_rows",
- /*  92 */ "row ::= LINE_TABLE_SEPARATOR",
- /*  93 */ "table ::= table_header",
- /*  94 */ "table_body ::= table_section",
- /*  95 */ "header_rows ::= LINE_TABLE",
- /*  96 */ "def_citation ::= LINE_DEF_CITATION",
- /*  97 */ "def_footnote ::= LINE_DEF_FOOTNOTE",
- /*  98 */ "def_link ::= LINE_DEF_LINK",
- /*  99 */ "html_block ::= LINE_HTML",
- /* 100 */ "html_block_lines ::= html_block_line",
- /* 101 */ "html_block_line ::= LINE_CONTINUATION",
- /* 102 */ "html_block_line ::= LINE_HTML",
- /* 103 */ "fenced_lines ::= fenced_line",
- /* 104 */ "fenced_lines ::=",
- /* 105 */ "fenced_line ::= LINE_CONTINUATION",
- /* 106 */ "fenced_line ::= LINE_EMPTY",
- /* 107 */ "meta_block ::= LINE_META",
- /* 108 */ "meta_lines ::= meta_line",
- /* 109 */ "meta_line ::= LINE_META",
- /* 110 */ "meta_line ::= LINE_CONTINUATION",
- /* 111 */ "defs ::= def",
- /* 112 */ "def_lines ::= LINE_CONTINUATION",
- /* 113 */ "para ::= defs",
+ /*  82 */ "fenced_block ::= fenced",
+ /*  83 */ "fenced ::= LINE_FENCE_BACKTICK",
+ /*  84 */ "fenced ::= LINE_FENCE_BACKTICK_START",
+ /*  85 */ "fenced_line ::= LINE_CONTINUATION",
+ /*  86 */ "fenced_line ::= LINE_EMPTY",
+ /*  87 */ "html_block ::= LINE_HTML",
+ /*  88 */ "html_line ::= LINE_CONTINUATION",
+ /*  89 */ "html_line ::= LINE_HTML",
+ /*  90 */ "indented_code ::= indented_line",
+ /*  91 */ "list_bullet ::= item_bullet",
+ /*  92 */ "list_enum ::= item_enum",
+ /*  93 */ "meta_block ::= LINE_META",
+ /*  94 */ "meta_line ::= LINE_META",
+ /*  95 */ "meta_line ::= LINE_CONTINUATION",
+ /*  96 */ "para ::= LINE_PLAIN",
+ /*  97 */ "table ::= table_header",
+ /*  98 */ "header_rows ::= LINE_TABLE",
+ /*  99 */ "table_body ::= table_section",
+ /* 100 */ "all_rows ::= row",
+ /* 101 */ "row ::= header_rows",
+ /* 102 */ "row ::= LINE_TABLE_SEPARATOR",
+ /* 103 */ "para ::= defs",
 };
 #endif /* NDEBUG */
 
@@ -904,95 +886,85 @@ static const struct {
   { 30, 1 },
   { 30, 1 },
   { 30, 1 },
-  { 31, 2 },
   { 45, 2 },
+  { 47, 2 },
+  { 48, 3 },
+  { 48, 2 },
+  { 50, 2 },
+  { 51, 2 },
+  { 31, 2 },
   { 32, 2 },
   { 33, 2 },
-  { 36, 2 },
-  { 49, 2 },
   { 34, 2 },
-  { 51, 3 },
-  { 51, 2 },
-  { 51, 2 },
-  { 51, 1 },
   { 35, 2 },
-  { 53, 3 },
-  { 53, 2 },
-  { 53, 2 },
-  { 53, 1 },
-  { 52, 2 },
-  { 54, 3 },
   { 54, 2 },
+  { 54, 1 },
   { 55, 2 },
-  { 57, 2 },
-  { 57, 1 },
-  { 58, 2 },
+  { 36, 2 },
   { 37, 2 },
-  { 60, 2 },
   { 56, 2 },
-  { 38, 3 },
   { 38, 2 },
-  { 38, 2 },
-  { 39, 3 },
   { 39, 2 },
   { 39, 2 },
   { 40, 2 },
+  { 59, 2 },
+  { 59, 2 },
+  { 59, 2 },
+  { 59, 1 },
   { 41, 2 },
-  { 61, 2 },
-  { 42, 3 },
-  { 42, 2 },
-  { 42, 3 },
+  { 60, 2 },
+  { 60, 2 },
+  { 60, 2 },
+  { 60, 1 },
   { 42, 2 },
-  { 63, 2 },
   { 43, 2 },
-  { 65, 2 },
   { 44, 2 },
-  { 67, 2 },
-  { 68, 2 },
-  { 68, 1 },
-  { 69, 2 },
-  { 31, 1 },
-  { 31, 1 },
+  { 62, 2 },
+  { 64, 2 },
+  { 63, 2 },
+  { 65, 2 },
+  { 65, 1 },
+  { 66, 2 },
+  { 43, 1 },
   { 45, 1 },
   { 46, 1 },
-  { 32, 1 },
   { 47, 1 },
-  { 47, 1 },
-  { 48, 1 },
   { 48, 1 },
-  { 33, 1 },
-  { 36, 1 },
   { 49, 1 },
-  { 50, 1 },
-  { 50, 1 },
-  { 34, 1 },
-  { 35, 1 },
+  { 49, 1 },
+  { 51, 1 },
   { 52, 1 },
-  { 54, 1 },
-  { 58, 1 },
-  { 59, 1 },
-  { 59, 1 },
+  { 52, 1 },
+  { 31, 1 },
+  { 53, 1 },
+  { 53, 1 },
+  { 32, 1 },
+  { 33, 1 },
+  { 34, 1 },
+  { 55, 1 },
+  { 36, 1 },
   { 37, 1 },
-  { 60, 1 },
   { 56, 1 },
+  { 56, 1 },
+  { 57, 1 },
+  { 57, 1 },
   { 38, 1 },
+  { 58, 1 },
+  { 58, 1 },
   { 39, 1 },
   { 40, 1 },
   { 41, 1 },
+  { 42, 1 },
+  { 61, 1 },
   { 61, 1 },
-  { 62, 1 },
-  { 62, 1 },
-  { 63, 1 },
-  { 63, 0 },
-  { 64, 1 },
-  { 64, 1 },
   { 43, 1 },
-  { 65, 1 },
-  { 66, 1 },
+  { 44, 1 },
+  { 64, 1 },
+  { 63, 1 },
   { 66, 1 },
   { 67, 1 },
-  { 69, 1 },
-  { 31, 1 },
+  { 67, 1 },
+  { 43, 1 },
 };
 
 static void yy_accept(yyParser*);  /* Forward Declaration */
@@ -1081,235 +1053,216 @@ static void yy_reduce(
        }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 3: /* 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 4: /* block ::= indented_code */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_INDENTED); }
-  yymsp[0].minor.yy0 = yylhsminor.yy0;
-        break;
-      case 5: /* block ::= LINE_ATX_1 */
+      case 3: /* block ::= LINE_ATX_1 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H1); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 6: /* block ::= LINE_ATX_2 */
+      case 4: /* block ::= LINE_ATX_2 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H2); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 7: /* block ::= LINE_ATX_3 */
+      case 5: /* block ::= LINE_ATX_3 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H3); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 8: /* block ::= LINE_ATX_4 */
+      case 6: /* block ::= LINE_ATX_4 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H4); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 9: /* block ::= LINE_ATX_5 */
+      case 7: /* block ::= LINE_ATX_5 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H5); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 10: /* block ::= LINE_ATX_6 */
+      case 8: /* block ::= LINE_ATX_6 */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H6); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 11: /* block ::= empty */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_EMPTY); }
+      case 9: /* block ::= LINE_HR */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HR); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 12: /* block ::= list_bulleted */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_BULLETED); is_list_loose(yylhsminor.yy0); }
+      case 10: /* block ::= LINE_TOC */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TOC); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 13: /* block ::= list_enumerated */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ENUMERATED); is_list_loose(yylhsminor.yy0); }
+      case 11: /* block ::= blockquote */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 14: /* block ::= blockquote */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, yylhsminor.yy0); }
+      case 12: /* block ::= def_citation */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 15: /* block ::= table */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE); }
+      case 13: /* block ::= def_footnote */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, yylhsminor.yy0); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 16: /* block ::= LINE_HR */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HR); }
+      case 14: /* 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 17: /* block ::= def_citation */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, yylhsminor.yy0); }
+      case 15: /* block ::= definition_block */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFLIST); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 18: /* block ::= def_footnote */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, yylhsminor.yy0); }
+      case 16: /* block ::= empty */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_EMPTY); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 19: /* block ::= def_link */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_LINK); stack_push(engine->definition_stack, yylhsminor.yy0); }
+      case 17: /* 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 20: /* block ::= html_block */
+      case 18: /* block ::= html_block */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HTML); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 21: /* block ::= fenced_block */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_FENCED); yymsp[0].minor.yy0->child->type = CODE_FENCE; }
+      case 19: /* block ::= indented_code */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_INDENTED); }
+  yymsp[0].minor.yy0 = yylhsminor.yy0;
+        break;
+      case 20: /* 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 21: /* 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 22: /* block ::= meta_block */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_META); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 23: /* block ::= LINE_TOC */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TOC); }
+      case 23: /* 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 24: /* block ::= definition_block */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFLIST); }
+      case 24: /* block ::= table */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 25: /* para ::= LINE_PLAIN para_lines */
-      case 26: /* para_lines ::= para_lines para_line */ yytestcase(yyruleno==26);
-      case 27: /* indented_code ::= indented_code code_line */ yytestcase(yyruleno==27);
-      case 28: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==28);
-      case 29: /* blockquote ::= LINE_BLOCKQUOTE quote_lines */ yytestcase(yyruleno==29);
-      case 30: /* quote_lines ::= quote_lines quote_line */ yytestcase(yyruleno==30);
-      case 31: /* list_bulleted ::= list_bulleted item_bulleted */ yytestcase(yyruleno==31);
-      case 36: /* list_enumerated ::= list_enumerated item_enumerated */ yytestcase(yyruleno==36);
-      case 41: /* cont_blocks ::= cont_blocks cont_block */ yytestcase(yyruleno==41);
-      case 47: /* all_rows ::= all_rows row */ yytestcase(yyruleno==47);
-      case 48: /* table ::= table_header table_body */ yytestcase(yyruleno==48);
-      case 49: /* table_body ::= table_body table_section */ yytestcase(yyruleno==49);
-      case 50: /* header_rows ::= header_rows LINE_TABLE */ yytestcase(yyruleno==50);
-      case 52: /* def_citation ::= LINE_DEF_CITATION para_lines */ yytestcase(yyruleno==52);
-      case 53: /* def_citation ::= LINE_DEF_CITATION cont_blocks */ yytestcase(yyruleno==53);
-      case 55: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines */ yytestcase(yyruleno==55);
-      case 56: /* def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks */ yytestcase(yyruleno==56);
-      case 57: /* def_link ::= LINE_DEF_LINK para_lines */ yytestcase(yyruleno==57);
-      case 58: /* html_block ::= LINE_HTML html_block_lines */ yytestcase(yyruleno==58);
-      case 59: /* html_block_lines ::= html_block_lines html_block_line */ yytestcase(yyruleno==59);
-      case 61: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines */ yytestcase(yyruleno==61);
-      case 63: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines */ yytestcase(yyruleno==63);
-      case 64: /* fenced_lines ::= fenced_lines fenced_line */ yytestcase(yyruleno==64);
-      case 65: /* meta_block ::= LINE_META meta_lines */ yytestcase(yyruleno==65);
-      case 66: /* meta_lines ::= meta_lines meta_line */ yytestcase(yyruleno==66);
-      case 68: /* defs ::= defs def */ yytestcase(yyruleno==68);
-      case 71: /* def_lines ::= def_lines LINE_CONTINUATION */ yytestcase(yyruleno==71);
+      case 25: /* chunk ::= chunk chunk_line */
+      case 26: /* nested_chunks ::= nested_chunks nested_chunk */ yytestcase(yyruleno==26);
+      case 29: /* ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==29);
+      case 30: /* opt_ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==30);
+      case 31: /* blockquote ::= blockquote quote_line */ yytestcase(yyruleno==31);
+      case 32: /* def_citation ::= LINE_DEF_CITATION tail */ yytestcase(yyruleno==32);
+      case 33: /* def_footnote ::= LINE_DEF_FOOTNOTE tail */ yytestcase(yyruleno==33);
+      case 34: /* def_link ::= LINE_DEF_LINK chunk */ yytestcase(yyruleno==34);
+      case 38: /* def ::= def LINE_CONTINUATION */ yytestcase(yyruleno==38);
+      case 39: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==39);
+      case 41: /* fenced ::= fenced fenced_line */ yytestcase(yyruleno==41);
+      case 42: /* html_block ::= html_block html_line */ yytestcase(yyruleno==42);
+      case 43: /* indented_code ::= indented_code indented_line */ yytestcase(yyruleno==43);
+      case 44: /* indented_code ::= indented_code LINE_EMPTY */ yytestcase(yyruleno==44);
+      case 45: /* list_bullet ::= list_bullet item_bullet */ yytestcase(yyruleno==45);
+      case 50: /* list_enum ::= list_enum item_enum */ yytestcase(yyruleno==50);
+      case 55: /* meta_block ::= meta_block meta_line */ yytestcase(yyruleno==55);
+      case 56: /* para ::= LINE_PLAIN chunk */ yytestcase(yyruleno==56);
+      case 57: /* table ::= table_header table_body */ yytestcase(yyruleno==57);
+      case 59: /* header_rows ::= header_rows LINE_TABLE */ yytestcase(yyruleno==59);
+      case 60: /* table_body ::= table_body table_section */ yytestcase(yyruleno==60);
+      case 63: /* all_rows ::= all_rows row */ yytestcase(yyruleno==63);
 { 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 32: /* item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks */
-      case 37: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks */ yytestcase(yyruleno==37);
-{ 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); }
+      case 27: /* 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 33: /* item_bulleted ::= LINE_LIST_BULLETED para_lines */
-      case 38: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines */ yytestcase(yyruleno==38);
-{ 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); }
+      case 28: /* 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 34: /* 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);} }
+      case 35: /* 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 35: /* item_bulleted ::= LINE_LIST_BULLETED */
-      case 40: /* item_enumerated ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==40);
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ITEM_TIGHT); }
-  yymsp[0].minor.yy0 = yylhsminor.yy0;
-        break;
-      case 39: /* 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); }
+      case 36: /* defs ::= defs def */
+{ yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION)); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 42: /* 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;
+      case 37: /* defs ::= def */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION); }
+  yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 43: /* 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; }
+      case 40: /* fenced_block ::= fenced LINE_FENCE_BACKTICK */
+{ 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 44: /* 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); }
+      case 46: /* item_bullet ::= LINE_LIST_BULLETED ext_chunk */
+      case 48: /* item_bullet ::= LINE_LIST_BULLETED nested_chunks */ yytestcase(yyruleno==48);
+      case 51: /* item_enum ::= LINE_LIST_ENUMERATED ext_chunk */ yytestcase(yyruleno==51);
+      case 53: /* item_enum ::= LINE_LIST_ENUMERATED nested_chunks */ yytestcase(yyruleno==53);
+{ 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 45: /* 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); }
+      case 47: /* item_bullet ::= LINE_LIST_BULLETED chunk */
+      case 52: /* item_enum ::= LINE_LIST_ENUMERATED chunk */ yytestcase(yyruleno==52);
+{ 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 46: /* table_section ::= all_rows */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_SECTION); }
+      case 49: /* item_bullet ::= LINE_LIST_BULLETED */
+      case 54: /* item_enum ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==54);
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ITEM_TIGHT); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 51: /* def_citation ::= LINE_DEF_CITATION para_lines cont_blocks */
-      case 54: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks */ 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[-2].minor.yy0 = yylhsminor.yy0;
-        break;
-      case 60: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK */
-      case 62: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK */ yytestcase(yyruleno==62);
-{ 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;
-      case 67: /* 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; }
+      case 58: /* 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 69: /* def ::= LINE_DEFINITION def_lines */
-{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_DEFINITION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
+      case 61: /* 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 70: /* def ::= LINE_DEFINITION */
-{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION); }
+      case 62: /* table_section ::= all_rows */
+{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_SECTION); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 72: /* para ::= all_rows */
+      case 64: /* para ::= all_rows */
 { yylhsminor.yy0 = yymsp[0].minor.yy0; }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
       default:
-      /* (73) para ::= LINE_PLAIN */ yytestcase(yyruleno==73);
-      /* (74) para_lines ::= para_line (OPTIMIZED OUT) */ assert(yyruleno!=74);
-      /* (75) para_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==75);
-      /* (76) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=76);
-      /* (77) code_line ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=77);
-      /* (78) code_line ::= LINE_EMPTY */ yytestcase(yyruleno==78);
-      /* (79) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==79);
-      /* (80) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==80);
+      /* (65) chunk ::= chunk_line (OPTIMIZED OUT) */ assert(yyruleno!=65);
+      /* (66) chunk_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==66);
+      /* (67) nested_chunks ::= nested_chunk (OPTIMIZED OUT) */ assert(yyruleno!=67);
+      /* (68) nested_chunk ::= empty */ yytestcase(yyruleno==68);
+      /* (69) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==69);
+      /* (70) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==70);
+      /* (71) opt_ext_chunk ::= chunk */ yytestcase(yyruleno==71);
+      /* (72) tail ::= opt_ext_chunk (OPTIMIZED OUT) */ assert(yyruleno!=72);
+      /* (73) tail ::= nested_chunks */ yytestcase(yyruleno==73);
+      /* (74) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==74);
+      /* (75) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==75);
+      /* (76) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==76);
+      /* (77) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==77);
+      /* (78) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==78);
+      /* (79) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==79);
+      /* (80) def ::= LINE_DEFINITION */ yytestcase(yyruleno==80);
       /* (81) empty ::= LINE_EMPTY */ yytestcase(yyruleno==81);
-      /* (82) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==82);
-      /* (83) quote_lines ::= quote_line (OPTIMIZED OUT) */ assert(yyruleno!=83);
-      /* (84) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==84);
-      /* (85) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==85);
-      /* (86) list_bulleted ::= item_bulleted (OPTIMIZED OUT) */ assert(yyruleno!=86);
-      /* (87) list_enumerated ::= item_enumerated (OPTIMIZED OUT) */ assert(yyruleno!=87);
-      /* (88) cont_blocks ::= cont_block (OPTIMIZED OUT) */ assert(yyruleno!=88);
-      /* (89) cont_block ::= empty */ yytestcase(yyruleno==89);
-      /* (90) all_rows ::= row (OPTIMIZED OUT) */ assert(yyruleno!=90);
-      /* (91) row ::= header_rows */ yytestcase(yyruleno==91);
-      /* (92) row ::= LINE_TABLE_SEPARATOR */ yytestcase(yyruleno==92);
-      /* (93) table ::= table_header */ yytestcase(yyruleno==93);
-      /* (94) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=94);
-      /* (95) header_rows ::= LINE_TABLE */ yytestcase(yyruleno==95);
-      /* (96) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==96);
-      /* (97) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==97);
-      /* (98) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==98);
-      /* (99) html_block ::= LINE_HTML */ yytestcase(yyruleno==99);
-      /* (100) html_block_lines ::= html_block_line (OPTIMIZED OUT) */ assert(yyruleno!=100);
-      /* (101) html_block_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==101);
-      /* (102) html_block_line ::= LINE_HTML */ yytestcase(yyruleno==102);
-      /* (103) fenced_lines ::= fenced_line (OPTIMIZED OUT) */ assert(yyruleno!=103);
-      /* (104) fenced_lines ::= */ yytestcase(yyruleno==104);
-      /* (105) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==105);
-      /* (106) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==106);
-      /* (107) meta_block ::= LINE_META */ yytestcase(yyruleno==107);
-      /* (108) meta_lines ::= meta_line (OPTIMIZED OUT) */ assert(yyruleno!=108);
-      /* (109) meta_line ::= LINE_META */ yytestcase(yyruleno==109);
-      /* (110) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==110);
-      /* (111) defs ::= def (OPTIMIZED OUT) */ assert(yyruleno!=111);
-      /* (112) def_lines ::= LINE_CONTINUATION */ yytestcase(yyruleno==112);
-      /* (113) para ::= defs */ yytestcase(yyruleno==113);
+      /* (82) fenced_block ::= fenced */ yytestcase(yyruleno==82);
+      /* (83) fenced ::= LINE_FENCE_BACKTICK */ yytestcase(yyruleno==83);
+      /* (84) fenced ::= LINE_FENCE_BACKTICK_START */ yytestcase(yyruleno==84);
+      /* (85) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==85);
+      /* (86) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==86);
+      /* (87) html_block ::= LINE_HTML */ yytestcase(yyruleno==87);
+      /* (88) html_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==88);
+      /* (89) html_line ::= LINE_HTML */ yytestcase(yyruleno==89);
+      /* (90) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=90);
+      /* (91) list_bullet ::= item_bullet (OPTIMIZED OUT) */ assert(yyruleno!=91);
+      /* (92) list_enum ::= item_enum (OPTIMIZED OUT) */ assert(yyruleno!=92);
+      /* (93) meta_block ::= LINE_META */ yytestcase(yyruleno==93);
+      /* (94) meta_line ::= LINE_META */ yytestcase(yyruleno==94);
+      /* (95) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==95);
+      /* (96) para ::= LINE_PLAIN */ yytestcase(yyruleno==96);
+      /* (97) table ::= table_header */ yytestcase(yyruleno==97);
+      /* (98) header_rows ::= LINE_TABLE */ yytestcase(yyruleno==98);
+      /* (99) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=99);
+      /* (100) all_rows ::= row (OPTIMIZED OUT) */ assert(yyruleno!=100);
+      /* (101) row ::= header_rows */ yytestcase(yyruleno==101);
+      /* (102) row ::= LINE_TABLE_SEPARATOR */ yytestcase(yyruleno==102);
+      /* (103) para ::= defs */ yytestcase(yyruleno==103);
         break;
 /********** End reduce actions ************************************************/
   };
index 0eedfe9871c442ac94bf8956101dac81d53320cb..0be9004f5927d8ee4753216d86c9370cad6ad05c 100644 (file)
@@ -21,6 +21,6 @@
 #define LINE_FENCE_BACKTICK             21
 #define LINE_FENCE_BACKTICK_START       22
 #define LINE_TOC                        23
-#define LINE_EMPTY                      24
-#define LINE_META                       25
-#define LINE_DEFINITION                 26
+#define LINE_DEFINITION                 24
+#define LINE_EMPTY                      25
+#define LINE_META                       26
index 970616d0d48473f42ee2de3fd622d120a090d00d..e929ee9c0fd148c282518e64841104394a703974 100644 (file)
@@ -2,1012 +2,856 @@ State 0:
           doc ::= * blocks
           blocks ::= * blocks block
           blocks ::= * block
-          block ::= * para
-          block ::= * indented_code
           block ::= * LINE_ATX_1
           block ::= * LINE_ATX_2
           block ::= * LINE_ATX_3
           block ::= * LINE_ATX_4
           block ::= * LINE_ATX_5
           block ::= * LINE_ATX_6
-          block ::= * empty
-          block ::= * list_bulleted
-          block ::= * list_enumerated
-          block ::= * blockquote
-          block ::= * table
           block ::= * LINE_HR
+          block ::= * LINE_TOC
+          block ::= * blockquote
           block ::= * def_citation
           block ::= * def_footnote
           block ::= * def_link
-          block ::= * html_block
+          block ::= * definition_block
+          block ::= * empty
           block ::= * fenced_block
+          block ::= * html_block
+          block ::= * indented_code
+          block ::= * list_bullet
+          block ::= * list_enum
           block ::= * meta_block
-          block ::= * LINE_TOC
-          block ::= * definition_block
-          para ::= * LINE_PLAIN para_lines
-          para ::= * LINE_PLAIN
-          indented_code ::= * indented_code code_line
-          indented_code ::= * indented_line
+          block ::= * para
+          block ::= * table
           indented_line ::= * LINE_INDENTED_TAB
           indented_line ::= * LINE_INDENTED_SPACE
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-          blockquote ::= * LINE_BLOCKQUOTE quote_lines
+          blockquote ::= * blockquote quote_line
           blockquote ::= * LINE_BLOCKQUOTE
-          list_bulleted ::= * list_bulleted item_bulleted
-          list_bulleted ::= * item_bulleted
-          item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks
-          item_bulleted ::= * LINE_LIST_BULLETED para_lines
-          item_bulleted ::= * LINE_LIST_BULLETED cont_blocks
-          item_bulleted ::= * LINE_LIST_BULLETED
-          list_enumerated ::= * list_enumerated item_enumerated
-          list_enumerated ::= * item_enumerated
-          item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks
-          item_enumerated ::= * LINE_LIST_ENUMERATED para_lines
-          item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks
-          item_enumerated ::= * LINE_LIST_ENUMERATED
-          table_header ::= * header_rows LINE_TABLE_SEPARATOR
-          all_rows ::= * all_rows row
-          all_rows ::= * row
-          row ::= * header_rows
-          row ::= * LINE_TABLE_SEPARATOR
-          table ::= * table_header table_body
-          table ::= * table_header
-          header_rows ::= * header_rows LINE_TABLE
-          header_rows ::= * LINE_TABLE
-          def_citation ::= * LINE_DEF_CITATION para_lines cont_blocks
-          def_citation ::= * LINE_DEF_CITATION para_lines
-          def_citation ::= * LINE_DEF_CITATION cont_blocks
+          def_citation ::= * LINE_DEF_CITATION tail
           def_citation ::= * LINE_DEF_CITATION
-          def_footnote ::= * LINE_DEF_FOOTNOTE para_lines cont_blocks
-          def_footnote ::= * LINE_DEF_FOOTNOTE para_lines
-          def_footnote ::= * LINE_DEF_FOOTNOTE cont_blocks
+          def_footnote ::= * LINE_DEF_FOOTNOTE tail
           def_footnote ::= * LINE_DEF_FOOTNOTE
-          def_link ::= * LINE_DEF_LINK para_lines
+          def_link ::= * LINE_DEF_LINK chunk
           def_link ::= * LINE_DEF_LINK
-          html_block ::= * LINE_HTML html_block_lines
-          html_block ::= * LINE_HTML
-          fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK
-          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
           definition_block ::= * para defs
           defs ::= * defs def
           defs ::= * def
-          def ::= * LINE_DEFINITION def_lines
+          def ::= * def LINE_CONTINUATION
           def ::= * LINE_DEFINITION
+          empty ::= * empty LINE_EMPTY
+          empty ::= * LINE_EMPTY
+          fenced_block ::= * fenced LINE_FENCE_BACKTICK
+          fenced_block ::= * fenced
+          fenced ::= * fenced fenced_line
+          fenced ::= * LINE_FENCE_BACKTICK
+          fenced ::= * LINE_FENCE_BACKTICK_START
+          html_block ::= * html_block html_line
+          html_block ::= * LINE_HTML
+          indented_code ::= * indented_code indented_line
+          indented_code ::= * indented_code LINE_EMPTY
+          indented_code ::= * indented_line
+          list_bullet ::= * list_bullet item_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
+          list_enum ::= * list_enum item_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
+          meta_block ::= * meta_block meta_line
+          meta_block ::= * LINE_META
+          para ::= * LINE_PLAIN chunk
+          para ::= * LINE_PLAIN
+          table ::= * table_header table_body
+          table ::= * table_header
+          table_header ::= * header_rows LINE_TABLE_SEPARATOR
+          header_rows ::= * header_rows LINE_TABLE
+          header_rows ::= * LINE_TABLE
+          all_rows ::= * all_rows row
+          all_rows ::= * row
+          row ::= * header_rows
+          row ::= * LINE_TABLE_SEPARATOR
           para ::= * all_rows
           para ::= * defs
 
-                    LINE_PLAIN shift        25     
-          LINE_TABLE_SEPARATOR shift-reduce 92     row ::= LINE_TABLE_SEPARATOR
-             LINE_INDENTED_TAB shift-reduce 79     indented_line ::= LINE_INDENTED_TAB
-           LINE_INDENTED_SPACE shift-reduce 80     indented_line ::= LINE_INDENTED_SPACE
-                    LINE_TABLE shift-reduce 95     header_rows ::= LINE_TABLE
-                     LINE_HTML shift        17     
-                    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
-                    LINE_ATX_4 shift-reduce 8      block ::= LINE_ATX_4
-                    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        19     
-            LINE_LIST_BULLETED shift        6      
-          LINE_LIST_ENUMERATED shift        5      
+                    LINE_PLAIN shift        13     
+          LINE_TABLE_SEPARATOR shift-reduce 102    row ::= LINE_TABLE_SEPARATOR
+             LINE_INDENTED_TAB shift-reduce 69     indented_line ::= LINE_INDENTED_TAB
+           LINE_INDENTED_SPACE shift-reduce 70     indented_line ::= LINE_INDENTED_SPACE
+                    LINE_TABLE shift-reduce 98     header_rows ::= LINE_TABLE
+                     LINE_HTML shift-reduce 87     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      block ::= LINE_ATX_6
+                       LINE_HR shift-reduce      block ::= LINE_HR
+               LINE_BLOCKQUOTE shift-reduce 74     blockquote ::= LINE_BLOCKQUOTE
+            LINE_LIST_BULLETED shift        5      
+          LINE_LIST_ENUMERATED shift        4      
              LINE_DEF_CITATION shift        3      
              LINE_DEF_FOOTNOTE shift        2      
-                 LINE_DEF_LINK shift        20     
-           LINE_FENCE_BACKTICK shift        16     
-     LINE_FENCE_BACKTICK_START shift        15     
-                      LINE_TOC shift-reduce 23     block ::= LINE_TOC
+                 LINE_DEF_LINK shift        14     
+           LINE_FENCE_BACKTICK shift-reduce 83     fenced ::= LINE_FENCE_BACKTICK
+     LINE_FENCE_BACKTICK_START shift-reduce 84     fenced ::= LINE_FENCE_BACKTICK_START
+                      LINE_TOC shift-reduce 10     block ::= LINE_TOC
+               LINE_DEFINITION shift-reduce 80     def ::= LINE_DEFINITION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                     LINE_META shift        14     
-               LINE_DEFINITION shift        44     
+                     LINE_META shift-reduce 93     meta_block ::= LINE_META
                            doc accept
                         blocks shift        1      
                          block shift-reduce 2      blocks ::= block
-                          para shift        31     
-                 indented_code shift        13     
-                         empty shift        48     
-                 list_bulleted shift        43     
-               list_enumerated shift        41     
-                    blockquote shift-reduce 14     block ::= blockquote
-                         table shift-reduce 15     block ::= table
-                  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
-                    meta_block shift-reduce 22     block ::= meta_block
-              definition_block shift-reduce 24     block ::= definition_block
-                 indented_line shift        13       /* because indented_line==indented_code */
-                 item_bulleted shift        43       /* because item_bulleted==list_bulleted */
-               item_enumerated shift        41       /* because item_enumerated==list_enumerated */
-                  table_header shift        4      
-                   header_rows shift        46     
-                      all_rows shift        18     
-                           row shift        18       /* because row==all_rows */
-                          defs shift        38     
-                           def shift        38       /* because def==defs */
+                    blockquote shift        27     
+                  def_citation shift-reduce 12     block ::= def_citation
+                  def_footnote shift-reduce 13     block ::= def_footnote
+                      def_link shift-reduce 14     block ::= def_link
+              definition_block shift-reduce 15     block ::= definition_block
+                         empty shift        39     
+                  fenced_block shift-reduce 17     block ::= fenced_block
+                    html_block shift        26     
+                 indented_code shift        24     
+                   list_bullet shift        34     
+                     list_enum shift        32     
+                    meta_block shift        25     
+                          para shift        17     
+                         table shift-reduce 24     block ::= table
+                 indented_line shift        24       /* because indented_line==indented_code */
+                          defs shift        29     
+                           def shift        37     
+                        fenced shift        22     
+                   item_bullet shift        34       /* because item_bullet==list_bullet */
+                     item_enum shift        32       /* because item_enum==list_enum */
+                  table_header shift        6      
+                   header_rows shift        35     
+                      all_rows shift        12     
+                           row shift        12       /* because row==all_rows */
 
 State 1:
       (0) doc ::= blocks *
           blocks ::= blocks * block
-          block ::= * para
-          block ::= * indented_code
           block ::= * LINE_ATX_1
           block ::= * LINE_ATX_2
           block ::= * LINE_ATX_3
           block ::= * LINE_ATX_4
           block ::= * LINE_ATX_5
           block ::= * LINE_ATX_6
-          block ::= * empty
-          block ::= * list_bulleted
-          block ::= * list_enumerated
-          block ::= * blockquote
-          block ::= * table
           block ::= * LINE_HR
+          block ::= * LINE_TOC
+          block ::= * blockquote
           block ::= * def_citation
           block ::= * def_footnote
           block ::= * def_link
-          block ::= * html_block
+          block ::= * definition_block
+          block ::= * empty
           block ::= * fenced_block
+          block ::= * html_block
+          block ::= * indented_code
+          block ::= * list_bullet
+          block ::= * list_enum
           block ::= * meta_block
-          block ::= * LINE_TOC
-          block ::= * definition_block
-          para ::= * LINE_PLAIN para_lines
-          para ::= * LINE_PLAIN
-          indented_code ::= * indented_code code_line
-          indented_code ::= * indented_line
+          block ::= * para
+          block ::= * table
           indented_line ::= * LINE_INDENTED_TAB
           indented_line ::= * LINE_INDENTED_SPACE
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-          blockquote ::= * LINE_BLOCKQUOTE quote_lines
+          blockquote ::= * blockquote quote_line
           blockquote ::= * LINE_BLOCKQUOTE
-          list_bulleted ::= * list_bulleted item_bulleted
-          list_bulleted ::= * item_bulleted
-          item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks
-          item_bulleted ::= * LINE_LIST_BULLETED para_lines
-          item_bulleted ::= * LINE_LIST_BULLETED cont_blocks
-          item_bulleted ::= * LINE_LIST_BULLETED
-          list_enumerated ::= * list_enumerated item_enumerated
-          list_enumerated ::= * item_enumerated
-          item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks
-          item_enumerated ::= * LINE_LIST_ENUMERATED para_lines
-          item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks
-          item_enumerated ::= * LINE_LIST_ENUMERATED
-          table_header ::= * header_rows LINE_TABLE_SEPARATOR
-          all_rows ::= * all_rows row
-          all_rows ::= * row
-          row ::= * header_rows
-          row ::= * LINE_TABLE_SEPARATOR
-          table ::= * table_header table_body
-          table ::= * table_header
-          header_rows ::= * header_rows LINE_TABLE
-          header_rows ::= * LINE_TABLE
-          def_citation ::= * LINE_DEF_CITATION para_lines cont_blocks
-          def_citation ::= * LINE_DEF_CITATION para_lines
-          def_citation ::= * LINE_DEF_CITATION cont_blocks
+          def_citation ::= * LINE_DEF_CITATION tail
           def_citation ::= * LINE_DEF_CITATION
-          def_footnote ::= * LINE_DEF_FOOTNOTE para_lines cont_blocks
-          def_footnote ::= * LINE_DEF_FOOTNOTE para_lines
-          def_footnote ::= * LINE_DEF_FOOTNOTE cont_blocks
+          def_footnote ::= * LINE_DEF_FOOTNOTE tail
           def_footnote ::= * LINE_DEF_FOOTNOTE
-          def_link ::= * LINE_DEF_LINK para_lines
+          def_link ::= * LINE_DEF_LINK chunk
           def_link ::= * LINE_DEF_LINK
-          html_block ::= * LINE_HTML html_block_lines
-          html_block ::= * LINE_HTML
-          fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK
-          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
           definition_block ::= * para defs
           defs ::= * defs def
           defs ::= * def
-          def ::= * LINE_DEFINITION def_lines
+          def ::= * def LINE_CONTINUATION
           def ::= * LINE_DEFINITION
+          empty ::= * empty LINE_EMPTY
+          empty ::= * LINE_EMPTY
+          fenced_block ::= * fenced LINE_FENCE_BACKTICK
+          fenced_block ::= * fenced
+          fenced ::= * fenced fenced_line
+          fenced ::= * LINE_FENCE_BACKTICK
+          fenced ::= * LINE_FENCE_BACKTICK_START
+          html_block ::= * html_block html_line
+          html_block ::= * LINE_HTML
+          indented_code ::= * indented_code indented_line
+          indented_code ::= * indented_code LINE_EMPTY
+          indented_code ::= * indented_line
+          list_bullet ::= * list_bullet item_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
+          list_enum ::= * list_enum item_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
+          meta_block ::= * meta_block meta_line
+          meta_block ::= * LINE_META
+          para ::= * LINE_PLAIN chunk
+          para ::= * LINE_PLAIN
+          table ::= * table_header table_body
+          table ::= * table_header
+          table_header ::= * header_rows LINE_TABLE_SEPARATOR
+          header_rows ::= * header_rows LINE_TABLE
+          header_rows ::= * LINE_TABLE
+          all_rows ::= * all_rows row
+          all_rows ::= * row
+          row ::= * header_rows
+          row ::= * LINE_TABLE_SEPARATOR
           para ::= * all_rows
           para ::= * defs
 
                              $ reduce       0      doc ::= blocks
-                    LINE_PLAIN shift        25     
-          LINE_TABLE_SEPARATOR shift-reduce 92     row ::= LINE_TABLE_SEPARATOR
-             LINE_INDENTED_TAB shift-reduce 79     indented_line ::= LINE_INDENTED_TAB
-           LINE_INDENTED_SPACE shift-reduce 80     indented_line ::= LINE_INDENTED_SPACE
-                    LINE_TABLE shift-reduce 95     header_rows ::= LINE_TABLE
-                     LINE_HTML shift        17     
-                    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
-                    LINE_ATX_4 shift-reduce 8      block ::= LINE_ATX_4
-                    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        19     
-            LINE_LIST_BULLETED shift        6      
-          LINE_LIST_ENUMERATED shift        5      
+                    LINE_PLAIN shift        13     
+          LINE_TABLE_SEPARATOR shift-reduce 102    row ::= LINE_TABLE_SEPARATOR
+             LINE_INDENTED_TAB shift-reduce 69     indented_line ::= LINE_INDENTED_TAB
+           LINE_INDENTED_SPACE shift-reduce 70     indented_line ::= LINE_INDENTED_SPACE
+                    LINE_TABLE shift-reduce 98     header_rows ::= LINE_TABLE
+                     LINE_HTML shift-reduce 87     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      block ::= LINE_ATX_6
+                       LINE_HR shift-reduce      block ::= LINE_HR
+               LINE_BLOCKQUOTE shift-reduce 74     blockquote ::= LINE_BLOCKQUOTE
+            LINE_LIST_BULLETED shift        5      
+          LINE_LIST_ENUMERATED shift        4      
              LINE_DEF_CITATION shift        3      
              LINE_DEF_FOOTNOTE shift        2      
-                 LINE_DEF_LINK shift        20     
-           LINE_FENCE_BACKTICK shift        16     
-     LINE_FENCE_BACKTICK_START shift        15     
-                      LINE_TOC shift-reduce 23     block ::= LINE_TOC
+                 LINE_DEF_LINK shift        14     
+           LINE_FENCE_BACKTICK shift-reduce 83     fenced ::= LINE_FENCE_BACKTICK
+     LINE_FENCE_BACKTICK_START shift-reduce 84     fenced ::= LINE_FENCE_BACKTICK_START
+                      LINE_TOC shift-reduce 10     block ::= LINE_TOC
+               LINE_DEFINITION shift-reduce 80     def ::= LINE_DEFINITION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                     LINE_META shift        14     
-               LINE_DEFINITION shift        44     
+                     LINE_META shift-reduce 93     meta_block ::= LINE_META
                          block shift-reduce 1      blocks ::= blocks block
-                          para shift        31     
-                 indented_code shift        13     
-                         empty shift        48     
-                 list_bulleted shift        43     
-               list_enumerated shift        41     
-                    blockquote shift-reduce 14     block ::= blockquote
-                         table shift-reduce 15     block ::= table
-                  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
-                    meta_block shift-reduce 22     block ::= meta_block
-              definition_block shift-reduce 24     block ::= definition_block
-                 indented_line shift        13       /* because indented_line==indented_code */
-                 item_bulleted shift        43       /* because item_bulleted==list_bulleted */
-               item_enumerated shift        41       /* because item_enumerated==list_enumerated */
-                  table_header shift        4      
-                   header_rows shift        46     
-                      all_rows shift        18     
-                           row shift        18       /* because row==all_rows */
-                          defs shift        38     
-                           def shift        38       /* because def==defs */
+                    blockquote shift        27     
+                  def_citation shift-reduce 12     block ::= def_citation
+                  def_footnote shift-reduce 13     block ::= def_footnote
+                      def_link shift-reduce 14     block ::= def_link
+              definition_block shift-reduce 15     block ::= definition_block
+                         empty shift        39     
+                  fenced_block shift-reduce 17     block ::= fenced_block
+                    html_block shift        26     
+                 indented_code shift        24     
+                   list_bullet shift        34     
+                     list_enum shift        32     
+                    meta_block shift        25     
+                          para shift        17     
+                         table shift-reduce 24     block ::= table
+                 indented_line shift        24       /* because indented_line==indented_code */
+                          defs shift        29     
+                           def shift        37     
+                        fenced shift        22     
+                   item_bullet shift        34       /* because item_bullet==list_bullet */
+                     item_enum shift        32       /* because item_enum==list_enum */
+                  table_header shift        6      
+                   header_rows shift        35     
+                      all_rows shift        12     
+                           row shift        12       /* because row==all_rows */
 
 State 2:
-          para_lines ::= * para_lines para_line
-          para_lines ::= * para_line
-          para_line ::= * LINE_CONTINUATION
+          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
+          opt_ext_chunk ::= * chunk nested_chunks
+          opt_ext_chunk ::= * chunk
+          tail ::= * opt_ext_chunk
+          tail ::= * nested_chunks
+          def_footnote ::= LINE_DEF_FOOTNOTE * tail
+     (78) def_footnote ::= LINE_DEF_FOOTNOTE *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-          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
-          def_footnote ::= LINE_DEF_FOOTNOTE * para_lines cont_blocks
-          def_footnote ::= LINE_DEF_FOOTNOTE * para_lines
-          def_footnote ::= LINE_DEF_FOOTNOTE * cont_blocks
-     (97) def_footnote ::= LINE_DEF_FOOTNOTE *
-
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
+
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       97      ** Parsing conflict **
-                         empty shift        34     
-                    para_lines shift        7      
-                     para_line shift        7        /* because para_line==para_lines */
-                   cont_blocks shift        21     
-                    cont_block shift        21       /* because cont_block==cont_blocks */
-                     {default} reduce       97     def_footnote ::= LINE_DEF_FOOTNOTE
+                    LINE_EMPTY reduce       78      ** Parsing conflict **
+                         empty shift        23     
+                         chunk shift        8      
+                    chunk_line shift        8        /* because chunk_line==chunk */
+                 nested_chunks shift        15     
+                  nested_chunk shift        15       /* because nested_chunk==nested_chunks */
+                 opt_ext_chunk shift-reduce 33     def_footnote ::= LINE_DEF_FOOTNOTE tail  /* because opt_ext_chunk==tail */
+                          tail shift-reduce 33     def_footnote ::= LINE_DEF_FOOTNOTE tail
+                     {default} reduce       78     def_footnote ::= LINE_DEF_FOOTNOTE
 
 State 3:
-          para_lines ::= * para_lines para_line
-          para_lines ::= * para_line
-          para_line ::= * LINE_CONTINUATION
+          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
+          opt_ext_chunk ::= * chunk nested_chunks
+          opt_ext_chunk ::= * chunk
+          tail ::= * opt_ext_chunk
+          tail ::= * nested_chunks
+          def_citation ::= LINE_DEF_CITATION * tail
+     (77) def_citation ::= LINE_DEF_CITATION *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-          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
-          def_citation ::= LINE_DEF_CITATION * para_lines cont_blocks
-          def_citation ::= LINE_DEF_CITATION * para_lines
-          def_citation ::= LINE_DEF_CITATION * cont_blocks
-     (96) def_citation ::= LINE_DEF_CITATION *
-
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
+
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       96      ** Parsing conflict **
-                         empty shift        34     
-                    para_lines shift        8      
-                     para_line shift        8        /* because para_line==para_lines */
-                   cont_blocks shift        23     
-                    cont_block shift        23       /* because cont_block==cont_blocks */
-                     {default} reduce       96     def_citation ::= LINE_DEF_CITATION
+                    LINE_EMPTY reduce       77      ** Parsing conflict **
+                         empty shift        23     
+                         chunk shift        8      
+                    chunk_line shift        8        /* because chunk_line==chunk */
+                 nested_chunks shift        15     
+                  nested_chunk shift        15       /* because nested_chunk==nested_chunks */
+                 opt_ext_chunk shift-reduce 32     def_citation ::= LINE_DEF_CITATION tail  /* because opt_ext_chunk==tail */
+                          tail shift-reduce 32     def_citation ::= LINE_DEF_CITATION tail
+                     {default} reduce       77     def_citation ::= LINE_DEF_CITATION
 
 State 4:
-          table_section ::= * all_rows LINE_EMPTY
-          table_section ::= * all_rows
-          all_rows ::= * all_rows row
-          all_rows ::= * row
-          row ::= * header_rows
-          row ::= * LINE_TABLE_SEPARATOR
-          table ::= table_header * table_body
-     (93) table ::= table_header *
-          table_body ::= * table_body table_section
-          table_body ::= * table_section
-          header_rows ::= * header_rows LINE_TABLE
-          header_rows ::= * LINE_TABLE
-
-          LINE_TABLE_SEPARATOR shift-reduce 92     row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       93      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 95     header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       93      ** Parsing conflict **
-                   header_rows shift        47     
-                 table_section shift        9        /* because table_section==table_body */
-                      all_rows shift        12     
-                           row shift        12       /* because row==all_rows */
-                    table_body shift        9      
-                     {default} reduce       93     table ::= table_header
-
-State 5:
-          para_lines ::= * para_lines para_line
-          para_lines ::= * para_line
-          para_line ::= * LINE_CONTINUATION
+          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_enumerated ::= LINE_LIST_ENUMERATED * para_lines cont_blocks
-          item_enumerated ::= LINE_LIST_ENUMERATED * para_lines
-          item_enumerated ::= LINE_LIST_ENUMERATED * cont_blocks
-     (40) 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 75     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       40      ** Parsing conflict **
-                         empty shift        34     
-                    para_lines shift        10     
-                     para_line shift        10       /* because para_line==para_lines */
-                   cont_blocks shift        26     
-                    cont_block shift        26       /* because cont_block==cont_blocks */
-                     {default} reduce       40     item_enumerated ::= LINE_LIST_ENUMERATED
+          item_enum ::= LINE_LIST_ENUMERATED * ext_chunk
+          item_enum ::= LINE_LIST_ENUMERATED * chunk
+          item_enum ::= LINE_LIST_ENUMERATED * nested_chunks
+     (54) item_enum ::= LINE_LIST_ENUMERATED *
 
-State 6:
-          para_lines ::= * para_lines para_line
-          para_lines ::= * para_line
-          para_line ::= * LINE_CONTINUATION
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-          item_bulleted ::= LINE_LIST_BULLETED * para_lines cont_blocks
-          item_bulleted ::= LINE_LIST_BULLETED * para_lines
-          item_bulleted ::= LINE_LIST_BULLETED * cont_blocks
-     (35) 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 75     para_line ::= LINE_CONTINUATION
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       35      ** Parsing conflict **
-                         empty shift        34     
-                    para_lines shift        11     
-                     para_line shift        11       /* because para_line==para_lines */
-                   cont_blocks shift        28     
-                    cont_block shift        28       /* because cont_block==cont_blocks */
-                     {default} reduce       35     item_bulleted ::= LINE_LIST_BULLETED
+                    LINE_EMPTY reduce       54      ** Parsing conflict **
+                         empty shift        23     
+                         chunk shift        9      
+                    chunk_line shift        9        /* because chunk_line==chunk */
+                 nested_chunks shift        18     
+                  nested_chunk shift        18       /* because nested_chunk==nested_chunks */
+                     ext_chunk shift-reduce 51     item_enum ::= LINE_LIST_ENUMERATED ext_chunk
+                     {default} reduce       54     item_enum ::= LINE_LIST_ENUMERATED
 
-State 7:
-          para_lines ::= para_lines * para_line
-          para_line ::= * LINE_CONTINUATION
+State 5:
+          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
-          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
-          def_footnote ::= LINE_DEF_FOOTNOTE para_lines * cont_blocks
-     (55) def_footnote ::= LINE_DEF_FOOTNOTE para_lines *
-
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       55      ** Parsing conflict **
-                         empty shift        34     
-                     para_line shift-reduce 26     para_lines ::= para_lines para_line
-                   cont_blocks shift        22     
-                    cont_block shift        22       /* because cont_block==cont_blocks */
-                     {default} reduce       55     def_footnote ::= LINE_DEF_FOOTNOTE para_lines
+          item_bullet ::= LINE_LIST_BULLETED * ext_chunk
+          item_bullet ::= LINE_LIST_BULLETED * chunk
+          item_bullet ::= LINE_LIST_BULLETED * nested_chunks
+     (49) item_bullet ::= LINE_LIST_BULLETED *
 
-State 8:
-          para_lines ::= para_lines * para_line
-          para_line ::= * LINE_CONTINUATION
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-          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
-          def_citation ::= LINE_DEF_CITATION para_lines * cont_blocks
-     (52) def_citation ::= LINE_DEF_CITATION para_lines *
-
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       52      ** Parsing conflict **
-                         empty shift        34     
-                     para_line shift-reduce 26     para_lines ::= para_lines para_line
-                   cont_blocks shift        24     
-                    cont_block shift        24       /* because cont_block==cont_blocks */
-                     {default} reduce       52     def_citation ::= LINE_DEF_CITATION para_lines
+                    LINE_EMPTY reduce       49      ** Parsing conflict **
+                         empty shift        23     
+                         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 46     item_bullet ::= LINE_LIST_BULLETED ext_chunk
+                     {default} reduce       49     item_bullet ::= LINE_LIST_BULLETED
 
-State 9:
+State 6:
+          table ::= table_header * table_body
+     (97) table ::= table_header *
+          header_rows ::= * header_rows LINE_TABLE
+          header_rows ::= * LINE_TABLE
+          table_body ::= * table_body table_section
+          table_body ::= * table_section
           table_section ::= * all_rows LINE_EMPTY
           table_section ::= * all_rows
           all_rows ::= * all_rows row
           all_rows ::= * row
           row ::= * header_rows
           row ::= * LINE_TABLE_SEPARATOR
-     (48) table ::= table_header table_body *
-          table_body ::= table_body * table_section
+
+          LINE_TABLE_SEPARATOR shift-reduce 102    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       97      ** Parsing conflict **
+                    LINE_TABLE shift-reduce 98     header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       97      ** Parsing conflict **
+                    table_body shift        7      
+                   header_rows shift        36     
+                 table_section shift        7        /* because table_section==table_body */
+                      all_rows shift        11     
+                           row shift        11       /* because row==all_rows */
+                     {default} reduce       97     table ::= table_header
+
+State 7:
+     (57) table ::= table_header table_body *
           header_rows ::= * header_rows LINE_TABLE
           header_rows ::= * LINE_TABLE
+          table_body ::= table_body * table_section
+          table_section ::= * all_rows LINE_EMPTY
+          table_section ::= * all_rows
+          all_rows ::= * all_rows row
+          all_rows ::= * row
+          row ::= * header_rows
+          row ::= * LINE_TABLE_SEPARATOR
 
-          LINE_TABLE_SEPARATOR shift-reduce 92     row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       48      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 95     header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       48      ** Parsing conflict **
-                   header_rows shift        47     
-                 table_section shift-reduce 49     table_body ::= table_body table_section
-                      all_rows shift        12     
-                           row shift        12       /* because row==all_rows */
-                     {default} reduce       48     table ::= table_header table_body
+          LINE_TABLE_SEPARATOR shift-reduce 102    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       57      ** Parsing conflict **
+                    LINE_TABLE shift-reduce 98     header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       57      ** Parsing conflict **
+                   header_rows shift        36     
+                 table_section shift-reduce 60     table_body ::= table_body table_section
+                      all_rows shift        11     
+                           row shift        11       /* because row==all_rows */
+                     {default} reduce       57     table ::= table_header table_body
 
-State 10:
-          para_lines ::= para_lines * para_line
-          para_line ::= * LINE_CONTINUATION
+State 8:
+          chunk ::= 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
+          opt_ext_chunk ::= chunk * nested_chunks
+     (71) opt_ext_chunk ::= chunk *
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
-          item_enumerated ::= LINE_LIST_ENUMERATED para_lines * cont_blocks
-     (38) 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 75     para_line ::= LINE_CONTINUATION
+
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       38      ** Parsing conflict **
-                         empty shift        34     
-                     para_line shift-reduce 26     para_lines ::= para_lines para_line
-                   cont_blocks shift        27     
-                    cont_block shift        27       /* because cont_block==cont_blocks */
-                     {default} reduce       38     item_enumerated ::= LINE_LIST_ENUMERATED para_lines
+                    LINE_EMPTY reduce       71      ** Parsing conflict **
+                         empty shift        23     
+                    chunk_line shift-reduce 25     chunk ::= chunk chunk_line
+                 nested_chunks shift        16     
+                  nested_chunk shift        16       /* because nested_chunk==nested_chunks */
+                     {default} reduce       71     opt_ext_chunk ::= chunk
 
-State 11:
-          para_lines ::= para_lines * para_line
-          para_line ::= * LINE_CONTINUATION
+State 9:
+          chunk ::= 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_bulleted ::= LINE_LIST_BULLETED para_lines * cont_blocks
-     (33) 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 75     para_line ::= LINE_CONTINUATION
+     (52) item_enum ::= LINE_LIST_ENUMERATED chunk *
+
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       33      ** Parsing conflict **
-                         empty shift        34     
-                     para_line shift-reduce 26     para_lines ::= para_lines para_line
-                   cont_blocks shift        29     
-                    cont_block shift        29       /* because cont_block==cont_blocks */
-                     {default} reduce       33     item_bulleted ::= LINE_LIST_BULLETED para_lines
+                    LINE_EMPTY reduce       52      ** Parsing conflict **
+                         empty shift        23     
+                    chunk_line shift-reduce 25     chunk ::= chunk chunk_line
+                 nested_chunks shift        21     
+                  nested_chunk shift        21       /* because nested_chunk==nested_chunks */
+                     {default} reduce       52     item_enum ::= LINE_LIST_ENUMERATED chunk
 
-State 12:
+State 10:
+          chunk ::= 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
+     (47) item_bullet ::= LINE_LIST_BULLETED chunk *
+
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       47      ** Parsing conflict **
+                         empty shift        23     
+                    chunk_line shift-reduce 25     chunk ::= chunk chunk_line
+                 nested_chunks shift        21     
+                  nested_chunk shift        21       /* because nested_chunk==nested_chunks */
+                     {default} reduce       47     item_bullet ::= LINE_LIST_BULLETED chunk
+
+State 11:
+          header_rows ::= * header_rows LINE_TABLE
+          header_rows ::= * LINE_TABLE
           table_section ::= all_rows * LINE_EMPTY
-     (46) table_section ::= all_rows *
+     (62) table_section ::= all_rows *
           all_rows ::= all_rows * row
           row ::= * header_rows
           row ::= * LINE_TABLE_SEPARATOR
+
+          LINE_TABLE_SEPARATOR shift-reduce 102    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       62      ** Parsing conflict **
+                    LINE_TABLE shift-reduce 98     header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       62      ** Parsing conflict **
+                    LINE_EMPTY shift-reduce 61     table_section ::= all_rows LINE_EMPTY
+                    LINE_EMPTY reduce       62      ** Parsing conflict **
+                   header_rows shift        36     
+                           row shift-reduce 63     all_rows ::= all_rows row
+                     {default} reduce       62     table_section ::= all_rows
+
+State 12:
           header_rows ::= * header_rows LINE_TABLE
           header_rows ::= * LINE_TABLE
+          all_rows ::= all_rows * row
+          row ::= * header_rows
+          row ::= * LINE_TABLE_SEPARATOR
+     (64) para ::= all_rows *
 
-          LINE_TABLE_SEPARATOR shift-reduce 92     row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       46      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 95     header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       46      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 45     table_section ::= all_rows LINE_EMPTY
-                    LINE_EMPTY reduce       46      ** Parsing conflict **
-                   header_rows shift        47     
-                           row shift-reduce 47     all_rows ::= all_rows row
-                     {default} reduce       46     table_section ::= all_rows
+          LINE_TABLE_SEPARATOR shift-reduce 102    row ::= LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       64      ** Parsing conflict **
+                    LINE_TABLE shift-reduce 98     header_rows ::= LINE_TABLE
+                    LINE_TABLE reduce       64      ** Parsing conflict **
+                   header_rows shift        36     
+                           row shift-reduce 63     all_rows ::= all_rows row
+                     {default} reduce       64     para ::= all_rows
 
 State 13:
-      (4) block ::= indented_code *
-          indented_code ::= indented_code * code_line
-          code_line ::= * indented_line
-          code_line ::= * LINE_EMPTY
-          indented_line ::= * LINE_INDENTED_TAB
-          indented_line ::= * LINE_INDENTED_SPACE
+          chunk ::= * chunk chunk_line
+          chunk ::= * chunk_line
+          chunk_line ::= * LINE_CONTINUATION
+          para ::= LINE_PLAIN * chunk
+     (96) para ::= LINE_PLAIN *
 
-             LINE_INDENTED_TAB shift-reduce 79     indented_line ::= LINE_INDENTED_TAB
-             LINE_INDENTED_TAB reduce       4       ** Parsing conflict **
-           LINE_INDENTED_SPACE shift-reduce 80     indented_line ::= LINE_INDENTED_SPACE
-           LINE_INDENTED_SPACE reduce       4       ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 78     code_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       4       ** Parsing conflict **
-                     code_line shift-reduce 27     indented_code ::= indented_code code_line
-                 indented_line shift-reduce 27     indented_code ::= indented_code code_line  /* because indented_line==code_line */
-                     {default} reduce       4      block ::= indented_code
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
+                         chunk shift        28     
+                    chunk_line shift        28       /* because chunk_line==chunk */
+                     {default} reduce       96     para ::= LINE_PLAIN
 
 State 14:
-          meta_block ::= LINE_META * meta_lines
-    (107) meta_block ::= LINE_META *
-          meta_lines ::= * meta_lines meta_line
-          meta_lines ::= * meta_line
-          meta_line ::= * LINE_META
-          meta_line ::= * LINE_CONTINUATION
+          chunk ::= * chunk chunk_line
+          chunk ::= * chunk_line
+          chunk_line ::= * LINE_CONTINUATION
+          def_link ::= LINE_DEF_LINK * chunk
+     (79) def_link ::= LINE_DEF_LINK *
 
-             LINE_CONTINUATION shift-reduce 110    meta_line ::= LINE_CONTINUATION
-                     LINE_META shift-reduce 109    meta_line ::= LINE_META
-                     LINE_META reduce       107     ** Parsing conflict **
-                    meta_lines shift        35     
-                     meta_line shift        35       /* because meta_line==meta_lines */
-                     {default} reduce       107    meta_block ::= LINE_META
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
+                         chunk shift        30     
+                    chunk_line shift        30       /* because chunk_line==chunk */
+                     {default} reduce       79     def_link ::= LINE_DEF_LINK
 
 State 15:
-          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
-          fenced_lines ::= * fenced_line
-    (104) fenced_lines ::= *
-          fenced_line ::= * LINE_CONTINUATION
-          fenced_line ::= * LINE_EMPTY
+          nested_chunks ::= nested_chunks * nested_chunk
+          nested_chunk ::= * empty indented_line chunk
+          nested_chunk ::= * empty indented_line
+          nested_chunk ::= * empty
+     (73) tail ::= nested_chunks *
+          empty ::= * empty LINE_EMPTY
+          empty ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 105    fenced_line ::= LINE_CONTINUATION
-             LINE_CONTINUATION reduce       104     ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 106    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       104     ** Parsing conflict **
-                  fenced_lines shift        32     
-                   fenced_line shift        32       /* because fenced_line==fenced_lines */
-                     {default} reduce       104    fenced_lines ::=
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       73      ** Parsing conflict **
+                         empty shift        23     
+                  nested_chunk shift-reduce 26     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       73     tail ::= nested_chunks
 
 State 16:
-          fenced_block ::= LINE_FENCE_BACKTICK * fenced_lines LINE_FENCE_BACKTICK
-          fenced_block ::= LINE_FENCE_BACKTICK * fenced_lines
-          fenced_lines ::= * fenced_lines fenced_line
-          fenced_lines ::= * fenced_line
-    (104) fenced_lines ::= *
-          fenced_line ::= * LINE_CONTINUATION
-          fenced_line ::= * LINE_EMPTY
+          nested_chunks ::= nested_chunks * nested_chunk
+          nested_chunk ::= * empty indented_line chunk
+          nested_chunk ::= * empty indented_line
+          nested_chunk ::= * empty
+     (30) opt_ext_chunk ::= chunk nested_chunks *
+          empty ::= * empty LINE_EMPTY
+          empty ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 105    fenced_line ::= LINE_CONTINUATION
-             LINE_CONTINUATION reduce       104     ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 106    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       104     ** Parsing conflict **
-                  fenced_lines shift        33     
-                   fenced_line shift        33       /* because fenced_line==fenced_lines */
-                     {default} reduce       104    fenced_lines ::=
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       30      ** Parsing conflict **
+                         empty shift        23     
+                  nested_chunk shift-reduce 26     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       30     opt_ext_chunk ::= chunk nested_chunks
 
 State 17:
-          html_block ::= LINE_HTML * html_block_lines
-     (99) 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 101    html_block_line ::= LINE_CONTINUATION
-                     LINE_HTML shift-reduce 102    html_block_line ::= LINE_HTML
-                     LINE_HTML reduce       99      ** Parsing conflict **
-              html_block_lines shift        36     
-               html_block_line shift        36       /* because html_block_line==html_block_lines */
-                     {default} reduce       99     html_block ::= LINE_HTML
+     (23) block ::= para *
+          definition_block ::= para * defs
+          defs ::= * defs def
+          defs ::= * def
+          def ::= * def LINE_CONTINUATION
+          def ::= * LINE_DEFINITION
+
+               LINE_DEFINITION shift-reduce 80     def ::= LINE_DEFINITION
+               LINE_DEFINITION reduce       23      ** Parsing conflict **
+                          defs shift        31     
+                           def shift        37     
+                     {default} reduce       23     block ::= para
 
 State 18:
-          all_rows ::= all_rows * row
-          row ::= * header_rows
-          row ::= * LINE_TABLE_SEPARATOR
-          header_rows ::= * header_rows LINE_TABLE
-          header_rows ::= * LINE_TABLE
-     (72) para ::= all_rows *
+          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
+     (53) item_enum ::= LINE_LIST_ENUMERATED nested_chunks *
 
-          LINE_TABLE_SEPARATOR shift-reduce 92     row ::= LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       72      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 95     header_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       72      ** Parsing conflict **
-                   header_rows shift        47     
-                           row shift-reduce 47     all_rows ::= all_rows row
-                     {default} reduce       72     para ::= all_rows
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       53      ** Parsing conflict **
+                         empty shift        23     
+                  nested_chunk shift-reduce 26     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       53     item_enum ::= LINE_LIST_ENUMERATED nested_chunks
 
 State 19:
-          blockquote ::= LINE_BLOCKQUOTE * quote_lines
-     (82) blockquote ::= LINE_BLOCKQUOTE *
-          quote_lines ::= * quote_lines quote_line
-          quote_lines ::= * quote_line
-          quote_line ::= * LINE_BLOCKQUOTE
-          quote_line ::= * LINE_CONTINUATION
+          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
+     (48) item_bullet ::= LINE_LIST_BULLETED nested_chunks *
 
-             LINE_CONTINUATION shift-reduce 85     quote_line ::= LINE_CONTINUATION
-               LINE_BLOCKQUOTE shift-reduce 84     quote_line ::= LINE_BLOCKQUOTE
-               LINE_BLOCKQUOTE reduce       82      ** Parsing conflict **
-                   quote_lines shift        37     
-                    quote_line shift        37       /* because quote_line==quote_lines */
-                     {default} reduce       82     blockquote ::= LINE_BLOCKQUOTE
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
+                    LINE_EMPTY reduce       48      ** Parsing conflict **
+                         empty shift        23     
+                  nested_chunk shift-reduce 26     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       48     item_bullet ::= LINE_LIST_BULLETED nested_chunks
 
 State 20:
-          para_lines ::= * para_lines para_line
-          para_lines ::= * para_line
-          para_line ::= * LINE_CONTINUATION
-          def_link ::= LINE_DEF_LINK * para_lines
-     (98) def_link ::= LINE_DEF_LINK *
+          chunk ::= * chunk chunk_line
+          chunk ::= * chunk_line
+          chunk_line ::= * LINE_CONTINUATION
+          nested_chunk ::= empty indented_line * chunk
+     (28) nested_chunk ::= empty indented_line *
 
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
-                    para_lines shift        39     
-                     para_line shift        39       /* because para_line==para_lines */
-                     {default} reduce       98     def_link ::= LINE_DEF_LINK
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
+                         chunk shift        33     
+                    chunk_line shift        33       /* because chunk_line==chunk */
+                     {default} reduce       28     nested_chunk ::= empty indented_line
 
 State 21:
+          nested_chunks ::= nested_chunks * nested_chunk
+          nested_chunk ::= * empty indented_line chunk
+          nested_chunk ::= * empty indented_line
+          nested_chunk ::= * empty
+     (29) ext_chunk ::= chunk nested_chunks *
           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
-     (56) def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks *
 
                     LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       56      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       56     def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks
+                    LINE_EMPTY reduce       29      ** Parsing conflict **
+                         empty shift        23     
+                  nested_chunk shift-reduce 26     nested_chunks ::= nested_chunks nested_chunk
+                     {default} reduce       29     ext_chunk ::= chunk nested_chunks
 
 State 22:
-          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
-     (54) def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks *
+          fenced_block ::= fenced * LINE_FENCE_BACKTICK
+     (82) fenced_block ::= fenced *
+          fenced ::= fenced * fenced_line
+          fenced_line ::= * LINE_CONTINUATION
+          fenced_line ::= * LINE_EMPTY
 
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       54      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       54     def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks
+             LINE_CONTINUATION shift-reduce 85     fenced_line ::= LINE_CONTINUATION
+           LINE_FENCE_BACKTICK shift-reduce 40     fenced_block ::= fenced LINE_FENCE_BACKTICK
+           LINE_FENCE_BACKTICK reduce       82      ** Parsing conflict **
+                    LINE_EMPTY shift-reduce 86     fenced_line ::= LINE_EMPTY
+                    LINE_EMPTY reduce       82      ** Parsing conflict **
+                   fenced_line shift-reduce 41     fenced ::= fenced fenced_line
+                     {default} reduce       82     fenced_block ::= fenced
 
 State 23:
-          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
-     (53) def_citation ::= LINE_DEF_CITATION cont_blocks *
+          nested_chunk ::= empty * indented_line chunk
+          nested_chunk ::= empty * indented_line
+     (68) nested_chunk ::= empty *
+          indented_line ::= * LINE_INDENTED_TAB
+          indented_line ::= * LINE_INDENTED_SPACE
+          empty ::= empty * LINE_EMPTY
 
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       53      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       53     def_citation ::= LINE_DEF_CITATION cont_blocks
+             LINE_INDENTED_TAB shift-reduce 69     indented_line ::= LINE_INDENTED_TAB
+             LINE_INDENTED_TAB reduce       68      ** Parsing conflict **
+           LINE_INDENTED_SPACE shift-reduce 70     indented_line ::= LINE_INDENTED_SPACE
+           LINE_INDENTED_SPACE reduce       68      ** Parsing conflict **
+                    LINE_EMPTY shift-reduce 39     empty ::= empty LINE_EMPTY
+                    LINE_EMPTY reduce       68      ** Parsing conflict **
+                 indented_line shift        20     
+                     {default} reduce       68     nested_chunk ::= empty
 
 State 24:
-          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
-     (51) def_citation ::= LINE_DEF_CITATION para_lines cont_blocks *
-
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       51      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       51     def_citation ::= LINE_DEF_CITATION para_lines cont_blocks
+     (19) 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 69     indented_line ::= LINE_INDENTED_TAB
+             LINE_INDENTED_TAB reduce       19      ** Parsing conflict **
+           LINE_INDENTED_SPACE shift-reduce 70     indented_line ::= LINE_INDENTED_SPACE
+           LINE_INDENTED_SPACE reduce       19      ** Parsing conflict **
+                    LINE_EMPTY shift-reduce 44     indented_code ::= indented_code LINE_EMPTY
+                    LINE_EMPTY reduce       19      ** Parsing conflict **
+                 indented_line shift-reduce 43     indented_code ::= indented_code indented_line
+                     {default} reduce       19     block ::= indented_code
 
 State 25:
-          para ::= LINE_PLAIN * para_lines
-     (73) para ::= LINE_PLAIN *
-          para_lines ::= * para_lines para_line
-          para_lines ::= * para_line
-          para_line ::= * LINE_CONTINUATION
+     (22) block ::= meta_block *
+          meta_block ::= meta_block * meta_line
+          meta_line ::= * LINE_META
+          meta_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
-                    para_lines shift        40     
-                     para_line shift        40       /* because para_line==para_lines */
-                     {default} reduce       73     para ::= LINE_PLAIN
+             LINE_CONTINUATION shift-reduce 95     meta_line ::= LINE_CONTINUATION
+                     LINE_META shift-reduce 94     meta_line ::= LINE_META
+                     LINE_META reduce       22      ** Parsing conflict **
+                     meta_line shift-reduce 55     meta_block ::= meta_block meta_line
+                     {default} reduce       22     block ::= meta_block
 
 State 26:
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-     (39) 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
+     (18) block ::= html_block *
+          html_block ::= html_block * html_line
+          html_line ::= * LINE_CONTINUATION
+          html_line ::= * LINE_HTML
 
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       39      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       39     item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks
+             LINE_CONTINUATION shift-reduce 88     html_line ::= LINE_CONTINUATION
+                     LINE_HTML shift-reduce 89     html_line ::= LINE_HTML
+                     LINE_HTML reduce       18      ** Parsing conflict **
+                     html_line shift-reduce 42     html_block ::= html_block html_line
+                     {default} reduce       18     block ::= html_block
 
 State 27:
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-     (37) 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
+     (11) block ::= blockquote *
+          blockquote ::= blockquote * quote_line
+          quote_line ::= * LINE_BLOCKQUOTE
+          quote_line ::= * LINE_CONTINUATION
 
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       37      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       37     item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks
+             LINE_CONTINUATION shift-reduce 76     quote_line ::= LINE_CONTINUATION
+               LINE_BLOCKQUOTE shift-reduce 75     quote_line ::= LINE_BLOCKQUOTE
+               LINE_BLOCKQUOTE reduce       11      ** Parsing conflict **
+                    quote_line shift-reduce 31     blockquote ::= blockquote quote_line
+                     {default} reduce       11     block ::= blockquote
 
 State 28:
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-     (34) 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
+          chunk ::= chunk * chunk_line
+          chunk_line ::= * LINE_CONTINUATION
+     (56) para ::= LINE_PLAIN chunk *
 
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       34      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       34     item_bulleted ::= LINE_LIST_BULLETED cont_blocks
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
+                    chunk_line shift-reduce 25     chunk ::= chunk chunk_line
+                     {default} reduce       56     para ::= LINE_PLAIN chunk
 
 State 29:
-          empty ::= * empty LINE_EMPTY
-          empty ::= * LINE_EMPTY
-     (32) 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
+          defs ::= defs * def
+          def ::= * def LINE_CONTINUATION
+          def ::= * LINE_DEFINITION
+    (103) para ::= defs *
 
-                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       32      ** Parsing conflict **
-                         empty shift        34     
-                    cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
-                     {default} reduce       32     item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks
+               LINE_DEFINITION shift-reduce 80     def ::= LINE_DEFINITION
+               LINE_DEFINITION reduce       103     ** Parsing conflict **
+                           def shift        38     
+                     {default} reduce       103    para ::= defs
 
 State 30:
-          para_lines ::= * para_lines para_line
-          para_lines ::= * para_line
-          para_line ::= * LINE_CONTINUATION
-          cont_block ::= empty indented_line * para_lines
-     (43) cont_block ::= empty indented_line *
+          chunk ::= chunk * chunk_line
+          chunk_line ::= * LINE_CONTINUATION
+     (34) def_link ::= LINE_DEF_LINK chunk *
 
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
-                    para_lines shift        42     
-                     para_line shift        42       /* because para_line==para_lines */
-                     {default} reduce       43     cont_block ::= empty indented_line
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
+                    chunk_line shift-reduce 25     chunk ::= chunk chunk_line
+                     {default} reduce       34     def_link ::= LINE_DEF_LINK chunk
 
 State 31:
-      (3) block ::= para *
-          definition_block ::= para * defs
-          defs ::= * defs def
-          defs ::= * def
-          def ::= * LINE_DEFINITION def_lines
+     (35) definition_block ::= para defs *
+          defs ::= defs * def
+          def ::= * def LINE_CONTINUATION
           def ::= * LINE_DEFINITION
 
-               LINE_DEFINITION shift        44     
-               LINE_DEFINITION reduce       3       ** Parsing conflict **
-                          defs shift        45     
-                           def shift        45       /* because def==defs */
-                     {default} reduce       3      block ::= para
+               LINE_DEFINITION shift-reduce 80     def ::= LINE_DEFINITION
+               LINE_DEFINITION reduce       35      ** Parsing conflict **
+                           def shift        38     
+                     {default} reduce       35     definition_block ::= para defs
 
 State 32:
-          fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines * LINE_FENCE_BACKTICK
-     (63) 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 105    fenced_line ::= LINE_CONTINUATION
-           LINE_FENCE_BACKTICK shift-reduce 62     fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK
-           LINE_FENCE_BACKTICK reduce       63      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 106    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       63      ** Parsing conflict **
-                   fenced_line shift-reduce 64     fenced_lines ::= fenced_lines fenced_line
-                     {default} reduce       63     fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines
+     (21) 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        4      
+          LINE_LIST_ENUMERATED reduce       21      ** Parsing conflict **
+                     item_enum shift-reduce 50     list_enum ::= list_enum item_enum
+                     {default} reduce       21     block ::= list_enum
 
 State 33:
-          fenced_block ::= LINE_FENCE_BACKTICK fenced_lines * LINE_FENCE_BACKTICK
-     (61) fenced_block ::= LINE_FENCE_BACKTICK fenced_lines *
-          fenced_lines ::= fenced_lines * fenced_line
-          fenced_line ::= * LINE_CONTINUATION
-          fenced_line ::= * LINE_EMPTY
+          chunk ::= chunk * chunk_line
+          chunk_line ::= * LINE_CONTINUATION
+     (27) nested_chunk ::= empty indented_line chunk *
 
-             LINE_CONTINUATION shift-reduce 105    fenced_line ::= LINE_CONTINUATION
-           LINE_FENCE_BACKTICK shift-reduce 60     fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK
-           LINE_FENCE_BACKTICK reduce       61      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 106    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       61      ** Parsing conflict **
-                   fenced_line shift-reduce 64     fenced_lines ::= fenced_lines fenced_line
-                     {default} reduce       61     fenced_block ::= LINE_FENCE_BACKTICK fenced_lines
+             LINE_CONTINUATION shift-reduce 66     chunk_line ::= LINE_CONTINUATION
+                    chunk_line shift-reduce 25     chunk ::= chunk chunk_line
+                     {default} reduce       27     nested_chunk ::= empty indented_line chunk
 
 State 34:
-          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
-     (89) cont_block ::= empty *
-
-             LINE_INDENTED_TAB shift-reduce 79     indented_line ::= LINE_INDENTED_TAB
-             LINE_INDENTED_TAB reduce       89      ** Parsing conflict **
-           LINE_INDENTED_SPACE shift-reduce 80     indented_line ::= LINE_INDENTED_SPACE
-           LINE_INDENTED_SPACE reduce       89      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 28     empty ::= empty LINE_EMPTY
-                    LINE_EMPTY reduce       89      ** Parsing conflict **
-                 indented_line shift        30     
-                     {default} reduce       89     cont_block ::= empty
+     (20) 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        5      
+            LINE_LIST_BULLETED reduce       20      ** Parsing conflict **
+                   item_bullet shift-reduce 45     list_bullet ::= list_bullet item_bullet
+                     {default} reduce       20     block ::= list_bullet
 
 State 35:
-     (65) meta_block ::= LINE_META meta_lines *
-          meta_lines ::= meta_lines * meta_line
-          meta_line ::= * LINE_META
-          meta_line ::= * LINE_CONTINUATION
+          table_header ::= header_rows * LINE_TABLE_SEPARATOR
+          header_rows ::= header_rows * LINE_TABLE
+    (101) row ::= header_rows *
 
-             LINE_CONTINUATION shift-reduce 110    meta_line ::= LINE_CONTINUATION
-                     LINE_META shift-reduce 109    meta_line ::= LINE_META
-                     LINE_META reduce       65      ** Parsing conflict **
-                     meta_line shift-reduce 66     meta_lines ::= meta_lines meta_line
-                     {default} reduce       65     meta_block ::= LINE_META meta_lines
+          LINE_TABLE_SEPARATOR shift-reduce 58     table_header ::= header_rows LINE_TABLE_SEPARATOR
+          LINE_TABLE_SEPARATOR reduce       101     ** Parsing conflict **
+                    LINE_TABLE shift-reduce 59     header_rows ::= header_rows LINE_TABLE
+                    LINE_TABLE reduce       101     ** Parsing conflict **
+                     {default} reduce       101    row ::= header_rows
 
 State 36:
-     (58) 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
+          header_rows ::= header_rows * LINE_TABLE
+    (101) row ::= header_rows *
 
-             LINE_CONTINUATION shift-reduce 101    html_block_line ::= LINE_CONTINUATION
-                     LINE_HTML shift-reduce 102    html_block_line ::= LINE_HTML
-                     LINE_HTML reduce       58      ** Parsing conflict **
-               html_block_line shift-reduce 59     html_block_lines ::= html_block_lines html_block_line
-                     {default} reduce       58     html_block ::= LINE_HTML html_block_lines
+                    LINE_TABLE shift-reduce 59     header_rows ::= header_rows LINE_TABLE
+                    LINE_TABLE reduce       101     ** Parsing conflict **
+                     {default} reduce       101    row ::= header_rows
 
 State 37:
-     (29) blockquote ::= LINE_BLOCKQUOTE quote_lines *
-          quote_lines ::= quote_lines * quote_line
-          quote_line ::= * LINE_BLOCKQUOTE
-          quote_line ::= * LINE_CONTINUATION
+     (37) defs ::= def *
+          def ::= def * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 85     quote_line ::= LINE_CONTINUATION
-               LINE_BLOCKQUOTE shift-reduce 84     quote_line ::= LINE_BLOCKQUOTE
-               LINE_BLOCKQUOTE reduce       29      ** Parsing conflict **
-                    quote_line shift-reduce 30     quote_lines ::= quote_lines quote_line
-                     {default} reduce       29     blockquote ::= LINE_BLOCKQUOTE quote_lines
+             LINE_CONTINUATION shift-reduce 38     def ::= def LINE_CONTINUATION
+                     {default} reduce       37     defs ::= def
 
 State 38:
-          defs ::= defs * def
-          def ::= * LINE_DEFINITION def_lines
-          def ::= * LINE_DEFINITION
-    (113) para ::= defs *
+     (36) defs ::= defs def *
+          def ::= def * LINE_CONTINUATION
 
-               LINE_DEFINITION shift        44     
-               LINE_DEFINITION reduce       113     ** Parsing conflict **
-                           def shift-reduce 68     defs ::= defs def
-                     {default} reduce       113    para ::= defs
+             LINE_CONTINUATION shift-reduce 38     def ::= def LINE_CONTINUATION
+                     {default} reduce       36     defs ::= defs def
 
 State 39:
-          para_lines ::= para_lines * para_line
-          para_line ::= * LINE_CONTINUATION
-     (57) def_link ::= LINE_DEF_LINK para_lines *
-
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
-                     para_line shift-reduce 26     para_lines ::= para_lines para_line
-                     {default} reduce       57     def_link ::= LINE_DEF_LINK para_lines
-
-State 40:
-     (25) para ::= LINE_PLAIN para_lines *
-          para_lines ::= para_lines * para_line
-          para_line ::= * LINE_CONTINUATION
-
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
-                     para_line shift-reduce 26     para_lines ::= para_lines para_line
-                     {default} reduce       25     para ::= LINE_PLAIN para_lines
-
-State 41:
-     (13) block ::= list_enumerated *
-          list_enumerated ::= list_enumerated * item_enumerated
-          item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks
-          item_enumerated ::= * LINE_LIST_ENUMERATED para_lines
-          item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks
-          item_enumerated ::= * LINE_LIST_ENUMERATED
-
-          LINE_LIST_ENUMERATED shift        5      
-          LINE_LIST_ENUMERATED reduce       13      ** Parsing conflict **
-               item_enumerated shift-reduce 36     list_enumerated ::= list_enumerated item_enumerated
-                     {default} reduce       13     block ::= list_enumerated
-
-State 42:
-          para_lines ::= para_lines * para_line
-          para_line ::= * LINE_CONTINUATION
-     (42) cont_block ::= empty indented_line para_lines *
-
-             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
-                     para_line shift-reduce 26     para_lines ::= para_lines para_line
-                     {default} reduce       42     cont_block ::= empty indented_line para_lines
-
-State 43:
-     (12) block ::= list_bulleted *
-          list_bulleted ::= list_bulleted * item_bulleted
-          item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks
-          item_bulleted ::= * LINE_LIST_BULLETED para_lines
-          item_bulleted ::= * LINE_LIST_BULLETED cont_blocks
-          item_bulleted ::= * LINE_LIST_BULLETED
-
-            LINE_LIST_BULLETED shift        6      
-            LINE_LIST_BULLETED reduce       12      ** Parsing conflict **
-                 item_bulleted shift-reduce 31     list_bulleted ::= list_bulleted item_bulleted
-                     {default} reduce       12     block ::= list_bulleted
-
-State 44:
-          def ::= LINE_DEFINITION * def_lines
-     (70) def ::= LINE_DEFINITION *
-          def_lines ::= * def_lines LINE_CONTINUATION
-          def_lines ::= * LINE_CONTINUATION
-
-             LINE_CONTINUATION shift-reduce 112    def_lines ::= LINE_CONTINUATION
-                     def_lines shift        49     
-                     {default} reduce       70     def ::= LINE_DEFINITION
-
-State 45:
-     (67) definition_block ::= para defs *
-          defs ::= defs * def
-          def ::= * LINE_DEFINITION def_lines
-          def ::= * LINE_DEFINITION
-
-               LINE_DEFINITION shift        44     
-               LINE_DEFINITION reduce       67      ** Parsing conflict **
-                           def shift-reduce 68     defs ::= defs def
-                     {default} reduce       67     definition_block ::= para defs
-
-State 46:
-          table_header ::= header_rows * LINE_TABLE_SEPARATOR
-     (91) row ::= header_rows *
-          header_rows ::= header_rows * LINE_TABLE
-
-          LINE_TABLE_SEPARATOR shift-reduce 44     table_header ::= header_rows LINE_TABLE_SEPARATOR
-          LINE_TABLE_SEPARATOR reduce       91      ** Parsing conflict **
-                    LINE_TABLE shift-reduce 50     header_rows ::= header_rows LINE_TABLE
-                    LINE_TABLE reduce       91      ** Parsing conflict **
-                     {default} reduce       91     row ::= header_rows
-
-State 47:
-     (91) row ::= header_rows *
-          header_rows ::= header_rows * LINE_TABLE
-
-                    LINE_TABLE shift-reduce 50     header_rows ::= header_rows LINE_TABLE
-                    LINE_TABLE reduce       91      ** Parsing conflict **
-                     {default} reduce       91     row ::= header_rows
-
-State 48:
-     (11) block ::= empty *
+     (16) block ::= empty *
           empty ::= empty * LINE_EMPTY
 
-                    LINE_EMPTY shift-reduce 28     empty ::= empty LINE_EMPTY
-                    LINE_EMPTY reduce       11      ** Parsing conflict **
-                     {default} reduce       11     block ::= empty
-
-State 49:
-     (69) def ::= LINE_DEFINITION def_lines *
-          def_lines ::= def_lines * LINE_CONTINUATION
-
-             LINE_CONTINUATION shift-reduce 71     def_lines ::= def_lines LINE_CONTINUATION
-                     {default} reduce       69     def ::= LINE_DEFINITION def_lines
+                    LINE_EMPTY shift-reduce 39     empty ::= empty LINE_EMPTY
+                    LINE_EMPTY reduce       16      ** Parsing conflict **
+                     {default} reduce       16     block ::= empty
 
 ----------------------------------------------------
 Symbols:
@@ -1035,49 +879,47 @@ Symbols:
    21: LINE_FENCE_BACKTICK
    22: LINE_FENCE_BACKTICK_START
    23: LINE_TOC
-   24: LINE_EMPTY
-   25: LINE_META
-   26: LINE_DEFINITION
+   24: LINE_DEFINITION
+   25: LINE_EMPTY
+   26: LINE_META
    27: error:
-   28: doc: 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_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 LINE_TOC LINE_EMPTY LINE_META LINE_DEFINITION
-   29: blocks: 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_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 LINE_TOC LINE_EMPTY LINE_META LINE_DEFINITION
-   30: block: 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_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 LINE_TOC LINE_EMPTY LINE_META LINE_DEFINITION
-   31: para: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
-   32: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE
-   33: empty: LINE_EMPTY
-   34: list_bulleted: LINE_LIST_BULLETED
-   35: list_enumerated: LINE_LIST_ENUMERATED
-   36: blockquote: LINE_BLOCKQUOTE
-   37: table: LINE_TABLE
-   38: def_citation: LINE_DEF_CITATION
-   39: def_footnote: LINE_DEF_FOOTNOTE
-   40: def_link: LINE_DEF_LINK
-   41: html_block: LINE_HTML
-   42: fenced_block: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START
-   43: meta_block: LINE_META
-   44: definition_block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
-   45: para_lines: LINE_CONTINUATION
-   46: para_line: LINE_CONTINUATION
-   47: code_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_EMPTY
-   48: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE
-   49: quote_lines: LINE_CONTINUATION LINE_BLOCKQUOTE
-   50: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE
-   51: item_bulleted: LINE_LIST_BULLETED
-   52: cont_blocks: LINE_EMPTY
-   53: item_enumerated: LINE_LIST_ENUMERATED
-   54: cont_block: LINE_EMPTY
-   55: table_header: LINE_TABLE
-   56: header_rows: LINE_TABLE
-   57: table_section: LINE_TABLE_SEPARATOR LINE_TABLE
-   58: all_rows: LINE_TABLE_SEPARATOR LINE_TABLE
-   59: row: LINE_TABLE_SEPARATOR LINE_TABLE
-   60: table_body: LINE_TABLE_SEPARATOR LINE_TABLE
-   61: html_block_lines: LINE_CONTINUATION LINE_HTML
-   62: html_block_line: LINE_CONTINUATION LINE_HTML
-   63: fenced_lines: <lambda> LINE_CONTINUATION LINE_EMPTY
-   64: fenced_line: LINE_CONTINUATION LINE_EMPTY
-   65: meta_lines: LINE_CONTINUATION LINE_META
-   66: meta_line: LINE_CONTINUATION LINE_META
-   67: defs: LINE_DEFINITION
-   68: def: LINE_DEFINITION
-   69: def_lines: LINE_CONTINUATION
+   28: doc: 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_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 LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_META
+   29: blocks: 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_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 LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_META
+   30: block: 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_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 LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_META
+   31: blockquote: LINE_BLOCKQUOTE
+   32: def_citation: LINE_DEF_CITATION
+   33: def_footnote: LINE_DEF_FOOTNOTE
+   34: def_link: LINE_DEF_LINK
+   35: definition_block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
+   36: empty: LINE_EMPTY
+   37: fenced_block: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START
+   38: html_block: LINE_HTML
+   39: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE
+   40: list_bullet: LINE_LIST_BULLETED
+   41: list_enum: LINE_LIST_ENUMERATED
+   42: meta_block: LINE_META
+   43: para: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION
+   44: table: LINE_TABLE
+   45: chunk: LINE_CONTINUATION
+   46: chunk_line: LINE_CONTINUATION
+   47: nested_chunks: LINE_EMPTY
+   48: nested_chunk: LINE_EMPTY
+   49: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE
+   50: ext_chunk: LINE_CONTINUATION
+   51: opt_ext_chunk: LINE_CONTINUATION
+   52: tail: LINE_CONTINUATION LINE_EMPTY
+   53: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE
+   54: defs: LINE_DEFINITION
+   55: def: LINE_DEFINITION
+   56: fenced: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START
+   57: fenced_line: LINE_CONTINUATION LINE_EMPTY
+   58: html_line: LINE_CONTINUATION LINE_HTML
+   59: item_bullet: LINE_LIST_BULLETED
+   60: item_enum: LINE_LIST_ENUMERATED
+   61: meta_line: LINE_CONTINUATION LINE_META
+   62: table_header: LINE_TABLE
+   63: table_body: LINE_TABLE_SEPARATOR LINE_TABLE
+   64: header_rows: LINE_TABLE
+   65: table_section: LINE_TABLE_SEPARATOR LINE_TABLE
+   66: all_rows: LINE_TABLE_SEPARATOR LINE_TABLE
+   67: row: LINE_TABLE_SEPARATOR LINE_TABLE
index 1196bc6516c6ce2af29040b82f135c156122e7ca..416e7feae3cc19bf60637d7a47bc3e785e69bdc9 100644 (file)
@@ -89,168 +89,208 @@ blocks(A)                 ::= block(B).
                A = B;
        }
 
-       
-block(A)                       ::= para(B).                                                            { A = token_new_parent(B, BLOCK_PARA); is_para_html(engine, A); }
-block(A)                       ::= indented_code(B).                                           { A = token_new_parent(B, BLOCK_CODE_INDENTED); }
-block(A)                       ::= LINE_ATX_1(B).                                                      { A = token_new_parent(B, BLOCK_H1); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
-block(A)                       ::= LINE_ATX_2(B).                                                      { A = token_new_parent(B, BLOCK_H2); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
-block(A)                       ::= LINE_ATX_3(B).                                                      { A = token_new_parent(B, BLOCK_H3); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
-block(A)                       ::= LINE_ATX_4(B).                                                      { A = token_new_parent(B, BLOCK_H4); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
-block(A)                       ::= LINE_ATX_5(B).                                                      { A = token_new_parent(B, BLOCK_H5); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
-block(A)                       ::= LINE_ATX_6(B).                                                      { A = token_new_parent(B, BLOCK_H6); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
-block(A)                       ::= empty(B).                                                           { A = token_new_parent(B, BLOCK_EMPTY); }
-block(A)                       ::= list_bulleted(B).                                           { A = token_new_parent(B, BLOCK_LIST_BULLETED); is_list_loose(A); }
-block(A)                       ::= list_enumerated(B).                                         { A = token_new_parent(B, BLOCK_LIST_ENUMERATED); is_list_loose(A); }
-block(A)                       ::= blockquote(B).                                                      { A = token_new_parent(B, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, A); }
-block(A)                       ::= table(B).                                                           { A = token_new_parent(B, BLOCK_TABLE); }
-block(A)                       ::= LINE_HR(B).                                                         { A = token_new_parent(B, BLOCK_HR); }
-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); }
-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); }
-block(A)                       ::= LINE_TOC(B).                                                        { A = token_new_parent(B, BLOCK_TOC); }
-block(A)                       ::= definition_block(B).                                        { A = token_new_parent(B, BLOCK_DEFLIST); }
-
-para(A)                                ::= LINE_PLAIN(B) para_lines(C).                        { A = B; token_chain_append(B, C); }
-para                           ::= LINE_PLAIN.
 
-para_lines(A)          ::= para_lines(B) para_line(C).                         { A = B; token_chain_append(B, C); }
-para_lines                     ::= para_line.
+// Blocks
 
-para_line                      ::= LINE_CONTINUATION.
+// Single line blocks
 
-indented_code(A)       ::= indented_code(B) code_line(C).                      { A = B; token_chain_append(B, C); }
-indented_code          ::= indented_line.
+block(A)                       ::= LINE_ATX_1(B).              { A = token_new_parent(B, BLOCK_H1); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
+block(A)                       ::= LINE_ATX_2(B).              { A = token_new_parent(B, BLOCK_H2); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
+block(A)                       ::= LINE_ATX_3(B).              { A = token_new_parent(B, BLOCK_H3); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
+block(A)                       ::= LINE_ATX_4(B).              { A = token_new_parent(B, BLOCK_H4); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
+block(A)                       ::= LINE_ATX_5(B).              { A = token_new_parent(B, BLOCK_H5); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
+block(A)                       ::= LINE_ATX_6(B).              { A = token_new_parent(B, BLOCK_H6); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); }
 
-code_line                      ::= indented_line.
-code_line                      ::= LINE_EMPTY.
+block(A)                       ::= LINE_HR(B).                 { A = token_new_parent(B, BLOCK_HR); }
 
-indented_line          ::= LINE_INDENTED_TAB.
-indented_line          ::= LINE_INDENTED_SPACE.
+block(A)                       ::= LINE_TOC(B).                { A = token_new_parent(B, BLOCK_TOC); }
 
-empty(A)                       ::= empty(B) LINE_EMPTY(C).                                     { A = B; token_chain_append(B, C); }
-empty                          ::= LINE_EMPTY.
 
-blockquote(A)          ::= LINE_BLOCKQUOTE(B) quote_lines(C).          { A = B; token_chain_append(B, C); }
-blockquote                     ::= LINE_BLOCKQUOTE.
+// Multi-line blocks
 
-quote_lines(A)         ::= quote_lines(B) quote_line(C).                       { A = B; token_chain_append(B, C); }
-quote_lines                    ::= quote_line.
+block(A)                       ::= blockquote(B).                      { A = token_new_parent(B, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, 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); }
+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); }
+block(A)                       ::= fenced_block(B).            { A = token_new_parent(B, BLOCK_CODE_FENCED); B->child->type = CODE_FENCE; }
+block(A)                       ::= html_block(B).                      { A = token_new_parent(B, BLOCK_HTML); }
+block(A)                       ::= indented_code(B).           { A = token_new_parent(B, BLOCK_CODE_INDENTED); }
+block(A)                       ::= list_bullet(B).                     { A = token_new_parent(B, BLOCK_LIST_BULLETED); is_list_loose(A); }
+block(A)                       ::= list_enum(B).                       { A = token_new_parent(B, BLOCK_LIST_ENUMERATED); is_list_loose(A); }
+block(A)                       ::= meta_block(B).                      { A = token_new_parent(B, BLOCK_META); }
+block(A)                       ::= para(B).                            { A = token_new_parent(B, BLOCK_PARA); is_para_html(engine, A); }
+block(A)                       ::= table(B).                           { A = token_new_parent(B, BLOCK_TABLE); }
 
-quote_line                     ::= LINE_BLOCKQUOTE.
-quote_line                     ::= LINE_CONTINUATION.
 
-list_bulleted(A)       ::= list_bulleted(B) item_bulleted(C).          { A = B; token_chain_append(B, C); }
-list_bulleted          ::=     item_bulleted.
+// Reusable components
 
-item_bulleted(A)       ::= LINE_LIST_BULLETED(B) para_lines(C) cont_blocks(D). { token_chain_append(B, C); token_chain_append(B, D); A = token_new_parent(B, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, A); }
-item_bulleted(A)       ::= LINE_LIST_BULLETED(B) para_lines(C).        { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); recursive_parse_list_item(engine, A); }
-item_bulleted(A)       ::= LINE_LIST_BULLETED(B) cont_blocks(C).       { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM); if (C) {recursive_parse_list_item(engine, A);} }
-item_bulleted(A)       ::= LINE_LIST_BULLETED(B).                                      { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); }
+// A "chunk" allows you to grab all regular lines before the next empty line.
+// For example, to grab all lines after the first line in a paragraph.
+// You will want to specify a certain line type to start a chunk, but
+// this can grab the remaining lines, if any.
 
-list_enumerated(A)     ::= list_enumerated(B) item_enumerated(C).      { A = B; token_chain_append(B, C); }
-list_enumerated                ::=     item_enumerated.
+chunk(A)                       ::= chunk(B) chunk_line(C).                                     { A = B; token_chain_append(B, C); }
+chunk                          ::= chunk_line.
 
-item_enumerated(A)     ::= LINE_LIST_ENUMERATED(B) para_lines(C) cont_blocks(D).       { token_chain_append(B, C); token_chain_append(B, D); A = token_new_parent(B, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, A); }
-item_enumerated(A)     ::= LINE_LIST_ENUMERATED(B) para_lines(C).      { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); recursive_parse_list_item(engine, A); }
-item_enumerated(A)     ::= LINE_LIST_ENUMERATED(B) cont_blocks(C).     { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, A); }
-item_enumerated(A)     ::= LINE_LIST_ENUMERATED(B).                            { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); }
+chunk_line                     ::= LINE_CONTINUATION.
 
-cont_blocks(A)         ::= cont_blocks(B) cont_block(C).                       { A = B; token_chain_append(B, C); }
-cont_blocks                    ::= cont_block.
 
-cont_block(A)          ::= empty(B) indented_line(C) para_lines(D).{ A = B; token_chain_append(B, C); token_chain_append(B, D); C->type = LINE_CONTINUATION; }
-cont_block(A)          ::= empty(B) indented_line(C).                          { A = B; token_chain_append(B, C); C->type = LINE_CONTINUATION; }
-cont_block                     ::= empty.
+// A "nested chunk" is useful when a chunk can also include following blocks
+// that have an extra level of indention to indicate that they belong together.
+// For example, a list item can include multiple paragraphs, even other lists.
+// This structure is also used in footnotes and definitions.
 
+nested_chunks(A)       ::= nested_chunks(B) nested_chunk(C).           { A = B; token_chain_append(B, C); }
+nested_chunks          ::= nested_chunk.
 
-table_header(A)                ::= header_rows(B) LINE_TABLE_SEPARATOR(C).     { A = token_new_parent(B, BLOCK_TABLE_HEADER); token_chain_append(B, C); }
+nested_chunk(A)                ::= empty(B) indented_line(C) chunk(D).         { A = B; token_chain_append(B, C); token_chain_append(B, D); C->type = LINE_CONTINUATION; }
+nested_chunk(A)                ::= empty(B) indented_line(C).                          { A = B; token_chain_append(B, C); C->type = LINE_CONTINUATION; }
+nested_chunk           ::= empty.
 
-table_section(A)       ::= all_rows(B) LINE_EMPTY(C).                          { A = token_new_parent(B, BLOCK_TABLE_SECTION); token_chain_append(B, C); }
-table_section(A)       ::= all_rows(B).                                                        { A = token_new_parent(B, BLOCK_TABLE_SECTION); }
+indented_line          ::= LINE_INDENTED_TAB.
+indented_line          ::= LINE_INDENTED_SPACE.
 
-all_rows(A)                    ::= all_rows(B) row(C).                                         { A = B; token_chain_append(B, C); }
-all_rows                       ::= row.
 
-row                                    ::= header_rows.
-row                                    ::= LINE_TABLE_SEPARATOR.
+// Shortcut for optional chunk
+//opt_chunk                    ::= chunk.
+//opt_chunk                    ::= .
 
-table(A)                       ::= table_header(B) table_body(C).                      { A = B; token_chain_append(B, C); }
-table                          ::= table_header.
 
-table_body(A)          ::= table_body(B) table_section(C).                     { A = B; token_chain_append(B, C); }
-table_body                     ::= table_section.
+// Shortcut for "extended chunk" (chunk with following blocks)
+ext_chunk(A)           ::= chunk(B) nested_chunks(C).                          { A = B; token_chain_append(B, C); }
 
-header_rows(A)         ::= header_rows(B) LINE_TABLE(C).                       { A = B; token_chain_append(B, C); }
-header_rows                    ::= LINE_TABLE.
+
+// Shortcut for optionally extended chunk
+opt_ext_chunk(A)       ::= chunk(B) nested_chunks(C).                          { A = B; token_chain_append(B, C); }
+opt_ext_chunk          ::= chunk.
 
 
-def_citation(A)                ::= LINE_DEF_CITATION(B) para_lines(C) cont_blocks(D).  { A = B; token_chain_append(B, C); token_chain_append(B, D); }
-def_citation(A)                ::= LINE_DEF_CITATION(B) para_lines(C).         { A = B; token_chain_append(B, C); }
-def_citation(A)                ::= LINE_DEF_CITATION(B) cont_blocks(C).        { A = B; token_chain_append(B, C); }
+// Shortcut for anything that falls into the extended chunk pattern
+tail                           ::= opt_ext_chunk.
+tail                           ::= nested_chunks.
+
+
+// Blockquotes
+blockquote(A)          ::= blockquote(B) quote_line(C).                        { A = B; token_chain_append(B, C); }
+blockquote                     ::= LINE_BLOCKQUOTE.
+
+quote_line                     ::= LINE_BLOCKQUOTE.
+quote_line                     ::= LINE_CONTINUATION.
+
+
+// Reference definitions
+def_citation(A)                ::= LINE_DEF_CITATION(B) tail(C).                       { A = B; token_chain_append(B, C); }
 def_citation           ::= LINE_DEF_CITATION.
 
-def_footnote(A)                ::= LINE_DEF_FOOTNOTE(B) para_lines(C) cont_blocks(D).  { A = B; token_chain_append(B, C); token_chain_append(B, D); }
-def_footnote(A)                ::= LINE_DEF_FOOTNOTE(B) para_lines(C).         { A = B; token_chain_append(B, C); }
-def_footnote(A)                ::= LINE_DEF_FOOTNOTE(B) cont_blocks(C).        { A = B; token_chain_append(B, C); }
+def_footnote(A)                ::= LINE_DEF_FOOTNOTE(B) tail(C).                       { A = B; token_chain_append(B, C); }
 def_footnote           ::= LINE_DEF_FOOTNOTE.
 
-def_link(A)                    ::= LINE_DEF_LINK(B) para_lines(C).                     { A = B; token_chain_append(B, C); }
+def_link(A)                    ::= LINE_DEF_LINK(B) chunk(C).                          { A = B; token_chain_append(B, C); }
 def_link                       ::= LINE_DEF_LINK.
 
-html_block(A)          ::= LINE_HTML(B) html_block_lines(C).           { A = B; token_chain_append(B, C); }
-html_block                     ::= LINE_HTML.
 
+// Definition lists
+// Lemon's LALR(1) parser can't properly allow for detecting consecutive definition blocks and concatenating them,
+// because 'para defs para' could be the beginning of the next definition, OR the next regular para.
+// We have to bundle them when exporting, if desired.
+definition_block(A)    ::= para(B) defs(C).                                            { A = B; token_chain_append(B, C); B->type = BLOCK_TERM; }
 
-html_block_lines(A)    ::= html_block_lines(B) html_block_line(C).     { A = B; token_chain_append(B, C); }
-html_block_lines       ::= html_block_line.
+defs(A)                                ::= defs(B) def(C).                                                     { A = B; token_chain_append(B, token_new_parent(C, BLOCK_DEFINITION)); }
+defs(A)                                ::= def(B).                                                                     { A = token_new_parent(B, BLOCK_DEFINITION); }
 
-html_block_line                ::= LINE_CONTINUATION.
-html_block_line                ::= LINE_HTML.
+def(A)                         ::= def(B) LINE_CONTINUATION(C).                        { A = B; token_chain_append(B, C); }
+def                                    ::= LINE_DEFINITION.
 
-fenced_block(A)                ::= LINE_FENCE_BACKTICK(B) fenced_lines(C) LINE_FENCE_BACKTICK(D).              { A = B; token_chain_append(B, C); token_chain_append(B, D); D->child->type = CODE_FENCE; }
-fenced_block(A)                ::= LINE_FENCE_BACKTICK(B) fenced_lines(C).                                                             { A = B; token_chain_append(B, C); }
-fenced_block(A)                ::= LINE_FENCE_BACKTICK_START(B) fenced_lines(C) LINE_FENCE_BACKTICK(D).        { A = B; token_chain_append(B, C); token_chain_append(B, D); D->child->type = CODE_FENCE; }
-fenced_block(A)                ::= LINE_FENCE_BACKTICK_START(B) fenced_lines(C).                                                       { A = B; token_chain_append(B, C); }
 
+// Empty lines
+empty(A)                       ::= empty(B) LINE_EMPTY(C).                                     { A = B; token_chain_append(B, C); }
+empty                          ::= LINE_EMPTY.
 
-fenced_lines(A)                ::= fenced_lines(B) fenced_line(C).                     { A = B; token_chain_append(B, C); }
-fenced_lines           ::= fenced_line.
-fenced_lines           ::= .
+
+// Fenced code blocks
+fenced_block(A)                ::= fenced(B) LINE_FENCE_BACKTICK(C).           { A = B; token_chain_append(B, C); C->child->type = CODE_FENCE; }
+fenced_block           ::= fenced.
+
+fenced(A)                      ::= fenced(B) fenced_line(C).                           { A = B; token_chain_append(B, C); }
+fenced                         ::= LINE_FENCE_BACKTICK.
+fenced                         ::= LINE_FENCE_BACKTICK_START.
 
 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.
+// HTML
+html_block(A)          ::= html_block(B) html_line(C).                         { A = B; token_chain_append(B, C); }
+html_block                     ::= LINE_HTML.
+
+html_line                      ::= LINE_CONTINUATION.
+html_line                      ::= LINE_HTML.
+
+
+// Indented code blocks
+indented_code(A)       ::= indented_code(B) indented_line(C).          { A = B; token_chain_append(B, C); }
+indented_code(A)       ::= indented_code(B) LINE_EMPTY(C).                     { A = B; token_chain_append(B, C); }
+indented_code          ::= indented_line.
+
+
+// Bulleted lists
+list_bullet(A)         ::= list_bullet(B) item_bullet(C).                      { A = B; token_chain_append(B, C); }
+list_bullet                    ::=     item_bullet.
+
+item_bullet(A)         ::= LINE_LIST_BULLETED(B) ext_chunk(C).         { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); }
+item_bullet(A)         ::= LINE_LIST_BULLETED(B) chunk(C).                     { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); token_chain_append(B, C); recursive_parse_list_item(engine, A); }
+item_bullet(A)         ::= LINE_LIST_BULLETED(B) nested_chunks(C).     { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); }
+item_bullet(A)         ::= LINE_LIST_BULLETED(B).                                      { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); }
 
-meta_lines(A)          ::= meta_lines(B) meta_line(C).                         { A = B; token_chain_append(B, C); }
-meta_lines                     ::= meta_line.
+
+// Enumerated lists
+list_enum(A)           ::= list_enum(B) item_enum(C).                          { A = B; token_chain_append(B, C); }
+list_enum                      ::=     item_enum.
+
+item_enum(A)           ::= LINE_LIST_ENUMERATED(B) ext_chunk(C).       { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); }
+item_enum(A)           ::= LINE_LIST_ENUMERATED(B) chunk(C).           { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); token_chain_append(B, C); recursive_parse_list_item(engine, A); }
+item_enum(A)           ::= LINE_LIST_ENUMERATED(B) nested_chunks(C).   { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); }
+item_enum(A)           ::= LINE_LIST_ENUMERATED(B).                            { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); }
+
+
+// Metadata
+meta_block(A)          ::= meta_block(B) meta_line(C).                         { A = B; token_chain_append(B, C); }
+meta_block                     ::= LINE_META.
 
 meta_line                      ::= LINE_META.
 meta_line                      ::= LINE_CONTINUATION.
 
-// Lemon's LALR(1) parser can't properly allow for detecting consecutive definition blocks and concatenating them,
-// because 'para defs para' could be the beginning of the next definition, OR the next regular para.
-// We have to bundle them when exporting, if desired.
-definition_block(A)    ::= para(B) defs(C).                                            { A = B; token_chain_append(B, C); B->type = BLOCK_TERM; }
 
-defs(A)                                ::= defs(B) def(C).                                                     { A = B; token_chain_append(B, C); }
-defs                           ::= def.
+// Paragraphs
+para(A)                                ::= LINE_PLAIN(B) chunk(C).                                     { A = B; token_chain_append(B, C); }
+para                           ::= LINE_PLAIN.
+
+
+// Tables
+table(A)                       ::= table_header(B) table_body(C).                      { A = B; token_chain_append(B, C); }
+table                          ::= table_header.
+
+table_header(A)                ::= header_rows(B) LINE_TABLE_SEPARATOR(C).     { A = token_new_parent(B, BLOCK_TABLE_HEADER); token_chain_append(B, C); }
 
-def(A)                         ::= LINE_DEFINITION(B) def_lines(C).            { A = token_new_parent(B, BLOCK_DEFINITION); token_chain_append(B, C); }
-def(A)                         ::= LINE_DEFINITION(B).                                         { A = token_new_parent(B, BLOCK_DEFINITION); }
+header_rows(A)         ::= header_rows(B) LINE_TABLE(C).                       { A = B; token_chain_append(B, C); }
+header_rows                    ::= LINE_TABLE.
 
-def_lines(A)           ::= def_lines(B) LINE_CONTINUATION(C).          { A = B; token_chain_append(B, C); }
-def_lines                      ::= LINE_CONTINUATION.
+table_body(A)          ::= table_body(B) table_section(C).                     { A = B; token_chain_append(B, C); }
+table_body                     ::= table_section.
+
+table_section(A)       ::= all_rows(B) LINE_EMPTY(C).                          { A = token_new_parent(B, BLOCK_TABLE_SECTION); token_chain_append(B, C); }
+table_section(A)       ::= all_rows(B).                                                        { A = token_new_parent(B, BLOCK_TABLE_SECTION); }
+
+all_rows(A)                    ::= all_rows(B) row(C).                                         { A = B; token_chain_append(B, C); }
+all_rows                       ::= row.
+
+row                                    ::= header_rows.
+row                                    ::= LINE_TABLE_SEPARATOR.
 
 
 // Fallbacks for improper structures
-// para(A)                             ::= table_section(B) LINE_EMPTY(C).                     { A = B; token_chain_append(B, C); }
-// para(A)                             ::= table_section(B) para_lines(C).                     { A = B; token_chain_append(B, C); }
 para(A)                                ::= all_rows(B).                                                        { A = B; }
 para                           ::= defs.
 
index 8684fe7a4848aca07b01a26b87f2ae4a3eac8c58..e5512cdcb32ad6b9aef9f7accf5ec675f8cb77bb 100644 (file)
 doc ::= blocks.
 blocks ::= blocks block.
 blocks ::= block.
-block ::= para.
-block ::= indented_code.
 block ::= LINE_ATX_1.
 block ::= LINE_ATX_2.
 block ::= LINE_ATX_3.
 block ::= LINE_ATX_4.
 block ::= LINE_ATX_5.
 block ::= LINE_ATX_6.
-block ::= empty.
-block ::= list_bulleted.
-block ::= list_enumerated.
-block ::= blockquote.
-block ::= table.
 block ::= LINE_HR.
+block ::= LINE_TOC.
+block ::= blockquote.
 block ::= def_citation.
 block ::= def_footnote.
 block ::= def_link.
-block ::= html_block.
+block ::= definition_block.
+block ::= empty.
 block ::= fenced_block.
+block ::= html_block.
+block ::= indented_code.
+block ::= list_bullet.
+block ::= list_enum.
 block ::= meta_block.
-block ::= LINE_TOC.
-block ::= definition_block.
-para ::= LINE_PLAIN para_lines.
-para_lines ::= para_lines para_line.
-indented_code ::= indented_code code_line.
+block ::= para.
+block ::= table.
+chunk ::= chunk chunk_line.
+nested_chunks ::= nested_chunks nested_chunk.
+nested_chunk ::= empty indented_line chunk.
+nested_chunk ::= empty indented_line.
+ext_chunk ::= chunk nested_chunks.
+opt_ext_chunk ::= chunk nested_chunks.
+blockquote ::= blockquote quote_line.
+def_citation ::= LINE_DEF_CITATION tail.
+def_footnote ::= LINE_DEF_FOOTNOTE tail.
+def_link ::= LINE_DEF_LINK chunk.
+definition_block ::= para defs.
+defs ::= defs def.
+defs ::= def.
+def ::= def LINE_CONTINUATION.
 empty ::= empty LINE_EMPTY.
-blockquote ::= LINE_BLOCKQUOTE quote_lines.
-quote_lines ::= quote_lines quote_line.
-list_bulleted ::= list_bulleted item_bulleted.
-item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks.
-item_bulleted ::= LINE_LIST_BULLETED para_lines.
-item_bulleted ::= LINE_LIST_BULLETED cont_blocks.
-item_bulleted ::= LINE_LIST_BULLETED.
-list_enumerated ::= list_enumerated item_enumerated.
-item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks.
-item_enumerated ::= LINE_LIST_ENUMERATED para_lines.
-item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks.
-item_enumerated ::= LINE_LIST_ENUMERATED.
-cont_blocks ::= cont_blocks cont_block.
-cont_block ::= empty indented_line para_lines.
-cont_block ::= empty indented_line.
+fenced_block ::= fenced LINE_FENCE_BACKTICK.
+fenced ::= fenced fenced_line.
+html_block ::= html_block html_line.
+indented_code ::= indented_code indented_line.
+indented_code ::= indented_code LINE_EMPTY.
+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.
+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.
+meta_block ::= meta_block meta_line.
+para ::= LINE_PLAIN chunk.
+table ::= table_header table_body.
 table_header ::= header_rows LINE_TABLE_SEPARATOR.
+header_rows ::= header_rows LINE_TABLE.
+table_body ::= table_body table_section.
 table_section ::= all_rows LINE_EMPTY.
 table_section ::= all_rows.
 all_rows ::= all_rows row.
-table ::= table_header table_body.
-table_body ::= table_body table_section.
-header_rows ::= header_rows LINE_TABLE.
-def_citation ::= LINE_DEF_CITATION para_lines cont_blocks.
-def_citation ::= LINE_DEF_CITATION para_lines.
-def_citation ::= LINE_DEF_CITATION cont_blocks.
-def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks.
-def_footnote ::= LINE_DEF_FOOTNOTE para_lines.
-def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks.
-def_link ::= LINE_DEF_LINK para_lines.
-html_block ::= LINE_HTML html_block_lines.
-html_block_lines ::= html_block_lines html_block_line.
-fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK.
-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.
-fenced_lines ::= fenced_lines fenced_line.
-meta_block ::= LINE_META meta_lines.
-meta_lines ::= meta_lines meta_line.
-definition_block ::= para defs.
-defs ::= defs def.
-def ::= LINE_DEFINITION def_lines.
-def ::= LINE_DEFINITION.
-def_lines ::= def_lines LINE_CONTINUATION.
 para ::= all_rows.
-para ::= LINE_PLAIN.
-para_lines ::= para_line.
-para_line ::= LINE_CONTINUATION.
-indented_code ::= indented_line.
-code_line ::= indented_line.
-code_line ::= LINE_EMPTY.
+chunk ::= chunk_line.
+chunk_line ::= LINE_CONTINUATION.
+nested_chunks ::= nested_chunk.
+nested_chunk ::= empty.
 indented_line ::= LINE_INDENTED_TAB.
 indented_line ::= LINE_INDENTED_SPACE.
-empty ::= LINE_EMPTY.
+opt_ext_chunk ::= chunk.
+tail ::= opt_ext_chunk.
+tail ::= nested_chunks.
 blockquote ::= LINE_BLOCKQUOTE.
-quote_lines ::= quote_line.
 quote_line ::= LINE_BLOCKQUOTE.
 quote_line ::= LINE_CONTINUATION.
-list_bulleted ::= item_bulleted.
-list_enumerated ::= item_enumerated.
-cont_blocks ::= cont_block.
-cont_block ::= empty.
-all_rows ::= row.
-row ::= header_rows.
-row ::= LINE_TABLE_SEPARATOR.
-table ::= table_header.
-table_body ::= table_section.
-header_rows ::= LINE_TABLE.
 def_citation ::= LINE_DEF_CITATION.
 def_footnote ::= LINE_DEF_FOOTNOTE.
 def_link ::= LINE_DEF_LINK.
-html_block ::= LINE_HTML.
-html_block_lines ::= html_block_line.
-html_block_line ::= LINE_CONTINUATION.
-html_block_line ::= LINE_HTML.
-fenced_lines ::= fenced_line.
-fenced_lines ::=.
+def ::= LINE_DEFINITION.
+empty ::= LINE_EMPTY.
+fenced_block ::= fenced.
+fenced ::= LINE_FENCE_BACKTICK.
+fenced ::= LINE_FENCE_BACKTICK_START.
 fenced_line ::= LINE_CONTINUATION.
 fenced_line ::= LINE_EMPTY.
+html_block ::= LINE_HTML.
+html_line ::= LINE_CONTINUATION.
+html_line ::= LINE_HTML.
+indented_code ::= indented_line.
+list_bullet ::= item_bullet.
+list_enum ::= item_enum.
 meta_block ::= LINE_META.
-meta_lines ::= meta_line.
 meta_line ::= LINE_META.
 meta_line ::= LINE_CONTINUATION.
-defs ::= def.
-def_lines ::= LINE_CONTINUATION.
+para ::= LINE_PLAIN.
+table ::= table_header.
+header_rows ::= LINE_TABLE.
+table_body ::= table_section.
+all_rows ::= row.
+row ::= header_rows.
+row ::= LINE_TABLE_SEPARATOR.
 para ::= defs.