]> granicus.if.org Git - multimarkdown/commitdiff
ADDED: Modify table parsing to be more consistent with PHP Markdown Extra in regards...
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 7 Feb 2017 14:19:22 +0000 (09:19 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 7 Feb 2017 14:19:22 +0000 (09:19 -0500)
src/mmd.c
src/parser.c
src/parser.out
src/parser.y
test/parser_test.y
tests/MMD6Tests/Tables.html

index 3a2ff4c46056dbbf35a2d5cd82a53f34ade957b0..cd1c3612a0b578058d9102c2f360ab64ae3f1750 100644 (file)
--- a/src/mmd.c
+++ b/src/mmd.c
@@ -1597,10 +1597,12 @@ void strip_line_tokens_from_block(mmd_engine * e, token * block) {
                                break;
                        case LINE_TABLE_SEPARATOR:
                        case LINE_TABLE:
-                               if ((block->type == BLOCK_TABLE_SECTION) ||
-                                       (block->type == BLOCK_TABLE_HEADER)) {
+                               if (block->type == BLOCK_TABLE_HEADER) {
                                        l->type = (l->type == LINE_TABLE) ? TABLE_ROW : LINE_TABLE_SEPARATOR;
                                        parse_table_row_into_cells(l);
+                               } else if (block->type == BLOCK_TABLE_SECTION) {
+                                       l->type =  TABLE_ROW;
+                                       parse_table_row_into_cells(l);
                                } else {
                                        goto handle_line;
                                }
index 3c72a7b72468fe756c4acf5661c1c04f0b401e44..eef46be70ac73e598fdace64d4ae094d6b9dacf2 100644 (file)
@@ -92,7 +92,7 @@
 #endif
 /************* Begin control #defines *****************************************/
 #define YYCODETYPE unsigned char
-#define YYNOCODE 69
+#define YYNOCODE 71
 #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             48
-#define YYNRULE              110
-#define YY_MAX_SHIFT         47
-#define YY_MIN_SHIFTREDUCE   112
-#define YY_MAX_SHIFTREDUCE   221
-#define YY_MIN_REDUCE        222
-#define YY_MAX_REDUCE        331
-#define YY_ERROR_ACTION      332
-#define YY_ACCEPT_ACTION     333
-#define YY_NO_ACTION         334
+#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
 /************* End control #defines *******************************************/
 
 /* Define the yytestcase() macro to be a no-op if is not already defined
@@ -188,81 +188,83 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (203)
+#define YY_ACTTAB_COUNT (220)
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */   222,   23,  139,  139,  190,  191,  203,   15,  117,  118,
- /*    10 */   119,  120,  121,  122,  128,   16,    5,    4,    3,    2,
- /*    20 */    17,   14,   13,  135,  192,   12,   42,   23,   33,   33,
- /*    30 */   190,  191,  203,   15,  117,  118,  119,  120,  121,  122,
- /*    40 */   128,   16,    5,    4,    3,    2,   17,   14,   13,  135,
- /*    50 */   192,   12,   42,  333,    1,  114,   29,   11,   46,   41,
- /*    60 */    39,  126,  127,  129,  130,  131,  132,  133,  134,  136,
- /*    70 */    44,   22,   22,   11,   30,   30,   41,  196,   39,  203,
- /*    80 */    10,   45,   31,   31,  209,  218,   34,   34,  210,  195,
- /*    90 */    36,   36,  113,   29,   11,   46,   41,   39,  126,  127,
- /*   100 */   129,  130,  131,  132,  133,  134,  136,  217,   35,   35,
- /*   110 */    11,  213,   32,   41,  192,   39,  186,   10,   45,  175,
- /*   120 */    37,   37,   44,  160,    6,    6,   32,   36,   36,   32,
- /*   130 */    32,   18,  214,   18,  190,  191,  190,  191,    7,    7,
- /*   140 */    32,    8,    8,  138,   32,   20,  213,   20,   24,   19,
- /*   150 */    24,   19,    9,    9,  189,  213,  140,  138,   32,   26,
- /*   160 */   161,   26,   32,   21,  173,   21,  186,  214,   32,   38,
- /*   170 */    38,  138,   42,  171,  177,  138,  214,   25,  157,   25,
- /*   180 */   170,   27,  156,   27,   40,   40,  161,  192,   28,  153,
- /*   190 */     4,   43,   43,  179,  142,  138,  220,    5,  148,  143,
- /*   200 */    47,  140,  182,
+ /*     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,
 };
 static const YYCODETYPE yy_lookahead[] = {
- /*     0 */     0,    1,   47,   48,    4,    5,    6,    7,    8,    9,
- /*    10 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
- /*    20 */    20,   21,   22,   23,   24,   25,   26,    1,   63,   64,
- /*    30 */     4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
- /*    40 */    14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
- /*    50 */    24,   25,   26,   28,   29,   30,   31,   32,   33,   34,
- /*    60 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
- /*    70 */    56,   57,   58,   48,   61,   62,   51,    3,   53,    6,
- /*    80 */    55,   56,   61,   62,    3,    3,   59,   60,    7,   15,
- /*    90 */    65,   66,   30,   31,   32,   33,   34,   35,   36,   37,
- /*   100 */    38,   39,   40,   41,   42,   43,   44,   25,   49,   50,
- /*   110 */    48,    3,   33,   51,   24,   53,    3,   55,   56,   62,
- /*   120 */    45,   46,   56,   57,   45,   46,   33,   65,   66,   33,
- /*   130 */    33,   52,   24,   54,    4,    5,    4,    5,   45,   46,
- /*   140 */    33,   45,   46,   46,   33,   52,    3,   54,   52,   52,
- /*   150 */    54,   54,   45,   46,   24,    3,   24,   46,   33,   52,
- /*   160 */     6,   54,   33,   52,   21,   54,    3,   24,   33,   45,
- /*   170 */    46,   46,   26,   21,   64,   46,   24,   52,   24,   54,
- /*   180 */    60,   52,    2,   54,   45,   46,    6,   24,   48,   54,
- /*   190 */    17,   65,   66,   66,   50,   46,    3,   16,   53,   51,
- /*   200 */    67,   24,    3,
+ /*     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,
 };
-#define YY_SHIFT_USE_DFLT (203)
-#define YY_SHIFT_COUNT    (47)
+#define YY_SHIFT_USE_DFLT (220)
+#define YY_SHIFT_COUNT    (49)
 #define YY_SHIFT_MIN      (0)
-#define YY_SHIFT_MAX      (199)
+#define YY_SHIFT_MAX      (213)
 static const unsigned char yy_shift_ofst[] = {
- /*     0 */    26,    0,  163,  163,  163,  163,  163,  163,  163,  163,
- /*    10 */    73,  130,   82,  108,  108,   81,   74,  113,   90,   90,
- /*    20 */    90,   90,   73,  113,   90,   90,   90,   90,  113,  146,
- /*    30 */   143,  152,  132,   82,   81,   74,  146,  113,  113,  173,
- /*    40 */   113,  181,  193,  146,  154,  180,  177,  199,
+ /*     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,
 };
-#define YY_REDUCE_USE_DFLT (-46)
-#define YY_REDUCE_COUNT (43)
-#define YY_REDUCE_MIN   (-45)
-#define YY_REDUCE_MAX   (149)
+#define YY_REDUCE_USE_DFLT (-38)
+#define YY_REDUCE_COUNT (45)
+#define YY_REDUCE_MIN   (-37)
+#define YY_REDUCE_MAX   (165)
 static const short yy_reduce_ofst[] = {
- /*     0 */    25,   62,   79,   93,   96,  107,   97,  111,  125,  129,
- /*    10 */    14,  -45,  -35,   13,   21,   27,   59,   75,  135,  135,
- /*    20 */   135,  135,   66,  124,  135,  135,  135,  135,  139,  126,
- /*    30 */    57,   57,  140,  110,  120,  144,  127,  149,  149,  145,
- /*    40 */   149,  148,  133,  127,
+ /*     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,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */   332,  332,  315,  314,  262,  257,  276,  273,  260,  255,
- /*    10 */   311,  226,  325,  322,  322,  317,  303,  316,  277,  275,
- /*    20 */   274,  272,  269,  294,  261,  259,  256,  254,  265,  225,
- /*    30 */   284,  282,  310,  286,  279,  251,  331,  278,  247,  235,
- /*    40 */   264,  234,  291,  288,  268,  293,  233,  290,
+ /*     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,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -404,9 +406,10 @@ static const char *const yyTokenName[] = {
   "definition_block",  "para_lines",    "para_line",     "code_line",   
   "indented_line",  "quote_lines",   "quote_line",    "item_bulleted",
   "cont_blocks",   "item_enumerated",  "cont_block",    "table_header",
-  "table_rows",    "table_section",  "table_body",    "html_block_lines",
-  "html_block_line",  "fenced_lines",  "fenced_line",   "meta_lines",  
-  "meta_line",     "defs",          "def",           "def_lines",   
+  "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 */
 
@@ -458,72 +461,76 @@ static const char *const yyRuleName[] = {
  /*  41 */ "cont_blocks ::= cont_blocks cont_block",
  /*  42 */ "cont_block ::= empty indented_line para_lines",
  /*  43 */ "cont_block ::= empty indented_line",
- /*  44 */ "table_header ::= table_rows LINE_TABLE_SEPARATOR",
- /*  45 */ "table_section ::= table_rows LINE_EMPTY",
- /*  46 */ "table_section ::= table_rows",
- /*  47 */ "table ::= table_header table_body",
- /*  48 */ "table_body ::= table_body table_section",
- /*  49 */ "table_rows ::= table_rows LINE_TABLE",
- /*  50 */ "def_citation ::= LINE_DEF_CITATION para_lines cont_blocks",
- /*  51 */ "def_citation ::= LINE_DEF_CITATION para_lines",
- /*  52 */ "def_citation ::= LINE_DEF_CITATION cont_blocks",
- /*  53 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks",
- /*  54 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines",
- /*  55 */ "def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks",
- /*  56 */ "def_link ::= LINE_DEF_LINK para_lines",
- /*  57 */ "html_block ::= LINE_HTML html_block_lines",
- /*  58 */ "html_block_lines ::= html_block_lines html_block_line",
- /*  59 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK",
- /*  60 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines",
- /*  61 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK",
- /*  62 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines",
- /*  63 */ "fenced_lines ::= fenced_lines fenced_line",
- /*  64 */ "meta_block ::= LINE_META meta_lines",
- /*  65 */ "meta_lines ::= meta_lines meta_line",
- /*  66 */ "definition_block ::= para defs",
- /*  67 */ "defs ::= defs def",
- /*  68 */ "def ::= LINE_DEFINITION def_lines",
- /*  69 */ "def ::= LINE_DEFINITION",
- /*  70 */ "def_lines ::= def_lines LINE_CONTINUATION",
- /*  71 */ "para ::= table_rows",
- /*  72 */ "para ::= LINE_PLAIN",
- /*  73 */ "para_lines ::= para_line",
- /*  74 */ "para_line ::= LINE_CONTINUATION",
- /*  75 */ "indented_code ::= indented_line",
- /*  76 */ "code_line ::= indented_line",
- /*  77 */ "code_line ::= LINE_EMPTY",
- /*  78 */ "indented_line ::= LINE_INDENTED_TAB",
- /*  79 */ "indented_line ::= LINE_INDENTED_SPACE",
- /*  80 */ "empty ::= LINE_EMPTY",
- /*  81 */ "blockquote ::= LINE_BLOCKQUOTE",
- /*  82 */ "quote_lines ::= quote_line",
- /*  83 */ "quote_line ::= LINE_BLOCKQUOTE",
- /*  84 */ "quote_line ::= LINE_CONTINUATION",
- /*  85 */ "list_bulleted ::= item_bulleted",
- /*  86 */ "list_enumerated ::= item_enumerated",
- /*  87 */ "cont_blocks ::= cont_block",
- /*  88 */ "cont_block ::= empty",
- /*  89 */ "table ::= table_header",
- /*  90 */ "table_body ::= table_section",
- /*  91 */ "table_rows ::= LINE_TABLE",
- /*  92 */ "def_citation ::= LINE_DEF_CITATION",
- /*  93 */ "def_footnote ::= LINE_DEF_FOOTNOTE",
- /*  94 */ "def_link ::= LINE_DEF_LINK",
- /*  95 */ "html_block ::= LINE_HTML",
- /*  96 */ "html_block_lines ::= html_block_line",
- /*  97 */ "html_block_line ::= LINE_CONTINUATION",
- /*  98 */ "html_block_line ::= LINE_HTML",
- /*  99 */ "fenced_lines ::= fenced_line",
- /* 100 */ "fenced_lines ::=",
- /* 101 */ "fenced_line ::= LINE_CONTINUATION",
- /* 102 */ "fenced_line ::= LINE_EMPTY",
- /* 103 */ "meta_block ::= LINE_META",
- /* 104 */ "meta_lines ::= meta_line",
- /* 105 */ "meta_line ::= LINE_META",
- /* 106 */ "meta_line ::= LINE_CONTINUATION",
- /* 107 */ "defs ::= def",
- /* 108 */ "def_lines ::= LINE_CONTINUATION",
- /* 109 */ "para ::= defs",
+ /*  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",
+ /*  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",
 };
 #endif /* NDEBUG */
 
@@ -919,8 +926,9 @@ static const struct {
   { 55, 2 },
   { 57, 2 },
   { 57, 1 },
-  { 37, 2 },
   { 58, 2 },
+  { 37, 2 },
+  { 60, 2 },
   { 56, 2 },
   { 38, 3 },
   { 38, 2 },
@@ -930,19 +938,19 @@ static const struct {
   { 39, 2 },
   { 40, 2 },
   { 41, 2 },
-  { 59, 2 },
+  { 61, 2 },
   { 42, 3 },
   { 42, 2 },
   { 42, 3 },
   { 42, 2 },
-  { 61, 2 },
-  { 43, 2 },
   { 63, 2 },
-  { 44, 2 },
+  { 43, 2 },
   { 65, 2 },
-  { 66, 2 },
-  { 66, 1 },
+  { 44, 2 },
   { 67, 2 },
+  { 68, 2 },
+  { 68, 1 },
+  { 69, 2 },
   { 31, 1 },
   { 31, 1 },
   { 45, 1 },
@@ -961,26 +969,29 @@ static const struct {
   { 35, 1 },
   { 52, 1 },
   { 54, 1 },
-  { 37, 1 },
   { 58, 1 },
+  { 59, 1 },
+  { 59, 1 },
+  { 37, 1 },
+  { 60, 1 },
   { 56, 1 },
   { 38, 1 },
   { 39, 1 },
   { 40, 1 },
   { 41, 1 },
-  { 59, 1 },
-  { 60, 1 },
-  { 60, 1 },
   { 61, 1 },
-  { 61, 0 },
   { 62, 1 },
   { 62, 1 },
-  { 43, 1 },
   { 63, 1 },
+  { 63, 0 },
   { 64, 1 },
   { 64, 1 },
+  { 43, 1 },
   { 65, 1 },
+  { 66, 1 },
+  { 66, 1 },
   { 67, 1 },
+  { 69, 1 },
   { 31, 1 },
 };
 
@@ -1167,23 +1178,24 @@ static void yy_reduce(
       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: /* table ::= table_header table_body */ yytestcase(yyruleno==47);
-      case 48: /* table_body ::= table_body table_section */ yytestcase(yyruleno==48);
-      case 49: /* table_rows ::= table_rows LINE_TABLE */ yytestcase(yyruleno==49);
-      case 51: /* def_citation ::= LINE_DEF_CITATION para_lines */ yytestcase(yyruleno==51);
-      case 52: /* def_citation ::= LINE_DEF_CITATION cont_blocks */ yytestcase(yyruleno==52);
-      case 54: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines */ yytestcase(yyruleno==54);
-      case 55: /* def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks */ yytestcase(yyruleno==55);
-      case 56: /* def_link ::= LINE_DEF_LINK para_lines */ yytestcase(yyruleno==56);
-      case 57: /* html_block ::= LINE_HTML html_block_lines */ yytestcase(yyruleno==57);
-      case 58: /* html_block_lines ::= html_block_lines html_block_line */ yytestcase(yyruleno==58);
-      case 60: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines */ yytestcase(yyruleno==60);
-      case 62: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines */ yytestcase(yyruleno==62);
-      case 63: /* fenced_lines ::= fenced_lines fenced_line */ yytestcase(yyruleno==63);
-      case 64: /* meta_block ::= LINE_META meta_lines */ yytestcase(yyruleno==64);
-      case 65: /* meta_lines ::= meta_lines meta_line */ yytestcase(yyruleno==65);
-      case 67: /* defs ::= defs def */ yytestcase(yyruleno==67);
-      case 70: /* def_lines ::= def_lines LINE_CONTINUATION */ yytestcase(yyruleno==70);
+      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);
 { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
@@ -1218,83 +1230,86 @@ static void yy_reduce(
 { 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 44: /* table_header ::= table_rows LINE_TABLE_SEPARATOR */
+      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); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 45: /* table_section ::= table_rows LINE_EMPTY */
+      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); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 46: /* table_section ::= table_rows */
+      case 46: /* table_section ::= all_rows */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_SECTION); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 50: /* def_citation ::= LINE_DEF_CITATION para_lines cont_blocks */
-      case 53: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks */ yytestcase(yyruleno==53);
+      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 59: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK */
-      case 61: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK */ yytestcase(yyruleno==61);
+      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 66: /* definition_block ::= para defs */
+      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; }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 68: /* def ::= LINE_DEFINITION def_lines */
+      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); }
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 69: /* def ::= LINE_DEFINITION */
+      case 70: /* def ::= LINE_DEFINITION */
 { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION); }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 71: /* para ::= table_rows */
+      case 72: /* para ::= all_rows */
 { yylhsminor.yy0 = yymsp[0].minor.yy0; }
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
       default:
-      /* (72) para ::= LINE_PLAIN */ yytestcase(yyruleno==72);
-      /* (73) para_lines ::= para_line (OPTIMIZED OUT) */ assert(yyruleno!=73);
-      /* (74) para_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==74);
-      /* (75) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=75);
-      /* (76) code_line ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=76);
-      /* (77) code_line ::= LINE_EMPTY */ yytestcase(yyruleno==77);
-      /* (78) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==78);
-      /* (79) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==79);
-      /* (80) empty ::= LINE_EMPTY */ yytestcase(yyruleno==80);
-      /* (81) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==81);
-      /* (82) quote_lines ::= quote_line (OPTIMIZED OUT) */ assert(yyruleno!=82);
-      /* (83) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==83);
-      /* (84) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==84);
-      /* (85) list_bulleted ::= item_bulleted (OPTIMIZED OUT) */ assert(yyruleno!=85);
-      /* (86) list_enumerated ::= item_enumerated (OPTIMIZED OUT) */ assert(yyruleno!=86);
-      /* (87) cont_blocks ::= cont_block (OPTIMIZED OUT) */ assert(yyruleno!=87);
-      /* (88) cont_block ::= empty */ yytestcase(yyruleno==88);
-      /* (89) table ::= table_header */ yytestcase(yyruleno==89);
-      /* (90) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=90);
-      /* (91) table_rows ::= LINE_TABLE */ yytestcase(yyruleno==91);
-      /* (92) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==92);
-      /* (93) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==93);
-      /* (94) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==94);
-      /* (95) html_block ::= LINE_HTML */ yytestcase(yyruleno==95);
-      /* (96) html_block_lines ::= html_block_line (OPTIMIZED OUT) */ assert(yyruleno!=96);
-      /* (97) html_block_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==97);
-      /* (98) html_block_line ::= LINE_HTML */ yytestcase(yyruleno==98);
-      /* (99) fenced_lines ::= fenced_line (OPTIMIZED OUT) */ assert(yyruleno!=99);
-      /* (100) fenced_lines ::= */ yytestcase(yyruleno==100);
-      /* (101) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==101);
-      /* (102) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==102);
-      /* (103) meta_block ::= LINE_META */ yytestcase(yyruleno==103);
-      /* (104) meta_lines ::= meta_line (OPTIMIZED OUT) */ assert(yyruleno!=104);
-      /* (105) meta_line ::= LINE_META */ yytestcase(yyruleno==105);
-      /* (106) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==106);
-      /* (107) defs ::= def (OPTIMIZED OUT) */ assert(yyruleno!=107);
-      /* (108) def_lines ::= LINE_CONTINUATION */ yytestcase(yyruleno==108);
-      /* (109) para ::= defs */ yytestcase(yyruleno==109);
+      /* (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);
+      /* (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);
         break;
 /********** End reduce actions ************************************************/
   };
index d352b90eacbfe3e501753f804685bea5491d6af4..970616d0d48473f42ee2de3fd622d120a090d00d 100644 (file)
@@ -46,11 +46,15 @@ State 0:
           item_enumerated ::= * LINE_LIST_ENUMERATED para_lines
           item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks
           item_enumerated ::= * LINE_LIST_ENUMERATED
-          table_header ::= * table_rows LINE_TABLE_SEPARATOR
+          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
-          table_rows ::= * table_rows LINE_TABLE
-          table_rows ::= * LINE_TABLE
+          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
@@ -74,14 +78,15 @@ State 0:
           defs ::= * def
           def ::= * LINE_DEFINITION def_lines
           def ::= * LINE_DEFINITION
-          para ::= * table_rows
+          para ::= * all_rows
           para ::= * defs
 
-                    LINE_PLAIN shift        23     
-             LINE_INDENTED_TAB shift-reduce 78     indented_line ::= LINE_INDENTED_TAB
-           LINE_INDENTED_SPACE shift-reduce 79     indented_line ::= LINE_INDENTED_SPACE
-                    LINE_TABLE shift-reduce 91     table_rows ::= LINE_TABLE
-                     LINE_HTML shift        15     
+                    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
@@ -89,26 +94,26 @@ State 0:
                     LINE_ATX_5 shift-reduce 9      block ::= LINE_ATX_5
                     LINE_ATX_6 shift-reduce 10     block ::= LINE_ATX_6
                        LINE_HR shift-reduce 16     block ::= LINE_HR
-               LINE_BLOCKQUOTE shift        16     
-            LINE_LIST_BULLETED shift        5      
-          LINE_LIST_ENUMERATED shift        4      
+               LINE_BLOCKQUOTE shift        19     
+            LINE_LIST_BULLETED shift        6      
+          LINE_LIST_ENUMERATED shift        5      
              LINE_DEF_CITATION shift        3      
              LINE_DEF_FOOTNOTE shift        2      
-                 LINE_DEF_LINK shift        17     
-           LINE_FENCE_BACKTICK shift        14     
-     LINE_FENCE_BACKTICK_START shift        13     
+                 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_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                     LINE_META shift        12     
-               LINE_DEFINITION shift        42     
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
+                     LINE_META shift        14     
+               LINE_DEFINITION shift        44     
                            doc accept
                         blocks shift        1      
                          block shift-reduce 2      blocks ::= block
-                          para shift        29     
-                 indented_code shift        11     
-                         empty shift        46     
-                 list_bulleted shift        41     
-               list_enumerated shift        39     
+                          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
@@ -118,13 +123,15 @@ State 0:
                   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        11       /* because indented_line==indented_code */
-                 item_bulleted shift        41       /* because item_bulleted==list_bulleted */
-               item_enumerated shift        39       /* because item_enumerated==list_enumerated */
-                  table_header shift        10     
-                    table_rows shift        45     
-                          defs shift        36     
-                           def shift        36       /* because def==defs */
+                 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 */
 
 State 1:
       (0) doc ::= blocks *
@@ -173,11 +180,15 @@ State 1:
           item_enumerated ::= * LINE_LIST_ENUMERATED para_lines
           item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks
           item_enumerated ::= * LINE_LIST_ENUMERATED
-          table_header ::= * table_rows LINE_TABLE_SEPARATOR
+          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
-          table_rows ::= * table_rows LINE_TABLE
-          table_rows ::= * LINE_TABLE
+          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
@@ -201,15 +212,16 @@ State 1:
           defs ::= * def
           def ::= * LINE_DEFINITION def_lines
           def ::= * LINE_DEFINITION
-          para ::= * table_rows
+          para ::= * all_rows
           para ::= * defs
 
                              $ reduce       0      doc ::= blocks
-                    LINE_PLAIN shift        23     
-             LINE_INDENTED_TAB shift-reduce 78     indented_line ::= LINE_INDENTED_TAB
-           LINE_INDENTED_SPACE shift-reduce 79     indented_line ::= LINE_INDENTED_SPACE
-                    LINE_TABLE shift-reduce 91     table_rows ::= LINE_TABLE
-                     LINE_HTML shift        15     
+                    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
@@ -217,24 +229,24 @@ State 1:
                     LINE_ATX_5 shift-reduce 9      block ::= LINE_ATX_5
                     LINE_ATX_6 shift-reduce 10     block ::= LINE_ATX_6
                        LINE_HR shift-reduce 16     block ::= LINE_HR
-               LINE_BLOCKQUOTE shift        16     
-            LINE_LIST_BULLETED shift        5      
-          LINE_LIST_ENUMERATED shift        4      
+               LINE_BLOCKQUOTE shift        19     
+            LINE_LIST_BULLETED shift        6      
+          LINE_LIST_ENUMERATED shift        5      
              LINE_DEF_CITATION shift        3      
              LINE_DEF_FOOTNOTE shift        2      
-                 LINE_DEF_LINK shift        17     
-           LINE_FENCE_BACKTICK shift        14     
-     LINE_FENCE_BACKTICK_START shift        13     
+                 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_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                     LINE_META shift        12     
-               LINE_DEFINITION shift        42     
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
+                     LINE_META shift        14     
+               LINE_DEFINITION shift        44     
                          block shift-reduce 1      blocks ::= blocks block
-                          para shift        29     
-                 indented_code shift        11     
-                         empty shift        46     
-                 list_bulleted shift        41     
-               list_enumerated shift        39     
+                          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
@@ -244,13 +256,15 @@ State 1:
                   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        11       /* because indented_line==indented_code */
-                 item_bulleted shift        41       /* because item_bulleted==list_bulleted */
-               item_enumerated shift        39       /* because item_enumerated==list_enumerated */
-                  table_header shift        10     
-                    table_rows shift        45     
-                          defs shift        36     
-                           def shift        36       /* because def==defs */
+                 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 */
 
 State 2:
           para_lines ::= * para_lines para_line
@@ -266,17 +280,17 @@ State 2:
           def_footnote ::= LINE_DEF_FOOTNOTE * para_lines cont_blocks
           def_footnote ::= LINE_DEF_FOOTNOTE * para_lines
           def_footnote ::= LINE_DEF_FOOTNOTE * cont_blocks
-     (93) def_footnote ::= LINE_DEF_FOOTNOTE *
-
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       93      ** Parsing conflict **
-                         empty shift        32     
-                    para_lines shift        6      
-                     para_line shift        6        /* because para_line==para_lines */
-                   cont_blocks shift        18     
-                    cont_block shift        18       /* because cont_block==cont_blocks */
-                     {default} reduce       93     def_footnote ::= LINE_DEF_FOOTNOTE
+     (97) def_footnote ::= LINE_DEF_FOOTNOTE *
+
+             LINE_CONTINUATION shift-reduce 75     para_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
 
 State 3:
           para_lines ::= * para_lines para_line
@@ -292,19 +306,44 @@ State 3:
           def_citation ::= LINE_DEF_CITATION * para_lines cont_blocks
           def_citation ::= LINE_DEF_CITATION * para_lines
           def_citation ::= LINE_DEF_CITATION * cont_blocks
-     (92) def_citation ::= LINE_DEF_CITATION *
+     (96) def_citation ::= LINE_DEF_CITATION *
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       92      ** Parsing conflict **
-                         empty shift        32     
-                    para_lines shift        7      
-                     para_line shift        7        /* because para_line==para_lines */
-                   cont_blocks shift        20     
-                    cont_block shift        20       /* because cont_block==cont_blocks */
-                     {default} reduce       92     def_citation ::= LINE_DEF_CITATION
+             LINE_CONTINUATION shift-reduce 75     para_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
 
 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
@@ -320,17 +359,17 @@ State 4:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_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        32     
-                    para_lines shift             
-                     para_line shift               /* because para_line==para_lines */
-                   cont_blocks shift        24     
-                    cont_block shift        24       /* because cont_block==cont_blocks */
+                         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
 
-State 5:
+State 6:
           para_lines ::= * para_lines para_line
           para_lines ::= * para_line
           para_line ::= * LINE_CONTINUATION
@@ -346,17 +385,17 @@ State 5:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
+             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
                     LINE_EMPTY reduce       35      ** Parsing conflict **
-                         empty shift        32     
-                    para_lines shift             
-                     para_line shift               /* because para_line==para_lines */
-                   cont_blocks shift        26     
-                    cont_block shift        26       /* because cont_block==cont_blocks */
+                         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
 
-State 6:
+State 7:
           para_lines ::= para_lines * para_line
           para_line ::= * LINE_CONTINUATION
           empty ::= * empty LINE_EMPTY
@@ -367,18 +406,18 @@ State 6:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
           def_footnote ::= LINE_DEF_FOOTNOTE para_lines * cont_blocks
-     (54) def_footnote ::= LINE_DEF_FOOTNOTE para_lines *
+     (55) def_footnote ::= LINE_DEF_FOOTNOTE para_lines *
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       54      ** Parsing conflict **
-                         empty shift        32     
+             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        19     
-                    cont_block shift        19       /* because cont_block==cont_blocks */
-                     {default} reduce       54     def_footnote ::= LINE_DEF_FOOTNOTE para_lines
+                   cont_blocks shift        22     
+                    cont_block shift        22       /* because cont_block==cont_blocks */
+                     {default} reduce       55     def_footnote ::= LINE_DEF_FOOTNOTE para_lines
 
-State 7:
+State 8:
           para_lines ::= para_lines * para_line
           para_line ::= * LINE_CONTINUATION
           empty ::= * empty LINE_EMPTY
@@ -389,18 +428,40 @@ State 7:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
           def_citation ::= LINE_DEF_CITATION para_lines * cont_blocks
-     (51) def_citation ::= LINE_DEF_CITATION para_lines *
+     (52) def_citation ::= LINE_DEF_CITATION para_lines *
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       51      ** Parsing conflict **
-                         empty shift        32     
+             LINE_CONTINUATION shift-reduce 75     para_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        21     
-                    cont_block shift        21       /* because cont_block==cont_blocks */
-                     {default} reduce       51     def_citation ::= LINE_DEF_CITATION para_lines
+                   cont_blocks shift        24     
+                    cont_block shift        24       /* because cont_block==cont_blocks */
+                     {default} reduce       52     def_citation ::= LINE_DEF_CITATION para_lines
 
-State 8:
+State 9:
+          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
+          header_rows ::= * header_rows LINE_TABLE
+          header_rows ::= * LINE_TABLE
+
+          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
+
+State 10:
           para_lines ::= para_lines * para_line
           para_line ::= * LINE_CONTINUATION
           empty ::= * empty LINE_EMPTY
@@ -413,16 +474,16 @@ State 8:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
+             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
                     LINE_EMPTY reduce       38      ** Parsing conflict **
-                         empty shift        32     
+                         empty shift        34     
                      para_line shift-reduce 26     para_lines ::= para_lines para_line
-                   cont_blocks shift        25     
-                    cont_block shift        25       /* because cont_block==cont_blocks */
+                   cont_blocks shift        27     
+                    cont_block shift        27       /* because cont_block==cont_blocks */
                      {default} reduce       38     item_enumerated ::= LINE_LIST_ENUMERATED para_lines
 
-State 9:
+State 11:
           para_lines ::= para_lines * para_line
           para_line ::= * LINE_CONTINUATION
           empty ::= * empty LINE_EMPTY
@@ -435,33 +496,35 @@ State 9:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
+             LINE_CONTINUATION shift-reduce 75     para_line ::= LINE_CONTINUATION
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
                     LINE_EMPTY reduce       33      ** Parsing conflict **
-                         empty shift        32     
+                         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 */
+                   cont_blocks shift        29     
+                    cont_block shift        29       /* because cont_block==cont_blocks */
                      {default} reduce       33     item_bulleted ::= LINE_LIST_BULLETED para_lines
 
-State 10:
-          table_section ::= * table_rows LINE_EMPTY
-          table_section ::= * table_rows
-          table ::= table_header * table_body
-     (89) table ::= table_header *
-          table_body ::= * table_body table_section
-          table_body ::= * table_section
-          table_rows ::= * table_rows LINE_TABLE
-          table_rows ::= * LINE_TABLE
-
-                    LINE_TABLE shift-reduce 91     table_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       89      ** Parsing conflict **
-                    table_rows shift        44     
-                 table_section shift        22       /* because table_section==table_body */
-                    table_body shift        22     
-                     {default} reduce       89     table ::= table_header
+State 12:
+          table_section ::= all_rows * LINE_EMPTY
+     (46) table_section ::= all_rows *
+          all_rows ::= all_rows * row
+          row ::= * header_rows
+          row ::= * LINE_TABLE_SEPARATOR
+          header_rows ::= * header_rows LINE_TABLE
+          header_rows ::= * LINE_TABLE
+
+          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
 
-State 11:
+State 13:
       (4) block ::= indented_code *
           indented_code ::= indented_code * code_line
           code_line ::= * indented_line
@@ -469,194 +532,196 @@ State 11:
           indented_line ::= * LINE_INDENTED_TAB
           indented_line ::= * LINE_INDENTED_SPACE
 
-             LINE_INDENTED_TAB shift-reduce 78     indented_line ::= LINE_INDENTED_TAB
+             LINE_INDENTED_TAB shift-reduce 79     indented_line ::= LINE_INDENTED_TAB
              LINE_INDENTED_TAB reduce       4       ** Parsing conflict **
-           LINE_INDENTED_SPACE shift-reduce 79     indented_line ::= LINE_INDENTED_SPACE
+           LINE_INDENTED_SPACE shift-reduce 80     indented_line ::= LINE_INDENTED_SPACE
            LINE_INDENTED_SPACE reduce       4       ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 77     code_line ::= LINE_EMPTY
+                    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
 
-State 12:
+State 14:
           meta_block ::= LINE_META * meta_lines
-    (103) meta_block ::= LINE_META *
+    (107) meta_block ::= LINE_META *
           meta_lines ::= * meta_lines meta_line
           meta_lines ::= * meta_line
           meta_line ::= * LINE_META
           meta_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 106    meta_line ::= LINE_CONTINUATION
-                     LINE_META shift-reduce 105    meta_line ::= LINE_META
-                     LINE_META reduce       103     ** Parsing conflict **
-                    meta_lines shift        33     
-                     meta_line shift        33       /* because meta_line==meta_lines */
-                     {default} reduce       103    meta_block ::= LINE_META
+             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
 
-State 13:
+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
-    (100) fenced_lines ::= *
+    (104) fenced_lines ::= *
           fenced_line ::= * LINE_CONTINUATION
           fenced_line ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 101    fenced_line ::= LINE_CONTINUATION
-             LINE_CONTINUATION reduce       100     ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 102    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       100     ** Parsing conflict **
-                  fenced_lines shift        30     
-                   fenced_line shift        30       /* because fenced_line==fenced_lines */
-                     {default} reduce       100    fenced_lines ::=
+             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 ::=
 
-State 14:
+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
-    (100) fenced_lines ::= *
+    (104) fenced_lines ::= *
           fenced_line ::= * LINE_CONTINUATION
           fenced_line ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 101    fenced_line ::= LINE_CONTINUATION
-             LINE_CONTINUATION reduce       100     ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 102    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       100     ** Parsing conflict **
-                  fenced_lines shift        31     
-                   fenced_line shift        31       /* because fenced_line==fenced_lines */
-                     {default} reduce       100    fenced_lines ::=
+             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 ::=
 
-State 15:
+State 17:
           html_block ::= LINE_HTML * html_block_lines
-     (95) html_block ::= LINE_HTML *
+     (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 97     html_block_line ::= LINE_CONTINUATION
-                     LINE_HTML shift-reduce 98     html_block_line ::= LINE_HTML
-                     LINE_HTML reduce       95      ** Parsing conflict **
-              html_block_lines shift        34     
-               html_block_line shift        34       /* because html_block_line==html_block_lines */
-                     {default} reduce       95     html_block ::= 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
 
-State 16:
+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 *
+
+          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
+
+State 19:
           blockquote ::= LINE_BLOCKQUOTE * quote_lines
-     (81) blockquote ::= LINE_BLOCKQUOTE *
+     (82) blockquote ::= LINE_BLOCKQUOTE *
           quote_lines ::= * quote_lines quote_line
           quote_lines ::= * quote_line
           quote_line ::= * LINE_BLOCKQUOTE
           quote_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 84     quote_line ::= LINE_CONTINUATION
-               LINE_BLOCKQUOTE shift-reduce 83     quote_line ::= LINE_BLOCKQUOTE
-               LINE_BLOCKQUOTE reduce       81      ** Parsing conflict **
-                   quote_lines shift        35     
-                    quote_line shift        35       /* because quote_line==quote_lines */
-                     {default} reduce       81     blockquote ::= LINE_BLOCKQUOTE
+             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
 
-State 17:
+State 20:
           para_lines ::= * para_lines para_line
           para_lines ::= * para_line
           para_line ::= * LINE_CONTINUATION
           def_link ::= LINE_DEF_LINK * para_lines
-     (94) def_link ::= LINE_DEF_LINK *
+     (98) def_link ::= LINE_DEF_LINK *
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    para_lines shift        37     
-                     para_line shift        37       /* because para_line==para_lines */
-                     {default} reduce       94     def_link ::= LINE_DEF_LINK
+             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
 
-State 18:
+State 21:
           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
-     (55) def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks *
+     (56) def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks *
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       55      ** Parsing conflict **
-                         empty shift        32     
+                    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       55     def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks
+                     {default} reduce       56     def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks
 
-State 19:
+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
-     (53) def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks *
+     (54) def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks *
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       53      ** Parsing conflict **
-                         empty shift        32     
+                    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       53     def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks
+                     {default} reduce       54     def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks
 
-State 20:
+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
-     (52) def_citation ::= LINE_DEF_CITATION cont_blocks *
+     (53) def_citation ::= LINE_DEF_CITATION cont_blocks *
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       52      ** Parsing conflict **
-                         empty shift        32     
+                    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       52     def_citation ::= LINE_DEF_CITATION cont_blocks
+                     {default} reduce       53     def_citation ::= LINE_DEF_CITATION cont_blocks
 
-State 21:
+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
-     (50) def_citation ::= LINE_DEF_CITATION para_lines cont_blocks *
+     (51) def_citation ::= LINE_DEF_CITATION para_lines cont_blocks *
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
-                    LINE_EMPTY reduce       50      ** Parsing conflict **
-                         empty shift        32     
+                    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       50     def_citation ::= LINE_DEF_CITATION para_lines cont_blocks
+                     {default} reduce       51     def_citation ::= LINE_DEF_CITATION para_lines cont_blocks
 
-State 22:
-          table_section ::= * table_rows LINE_EMPTY
-          table_section ::= * table_rows
-     (47) table ::= table_header table_body *
-          table_body ::= table_body * table_section
-          table_rows ::= * table_rows LINE_TABLE
-          table_rows ::= * LINE_TABLE
-
-                    LINE_TABLE shift-reduce 91     table_rows ::= LINE_TABLE
-                    LINE_TABLE reduce       47      ** Parsing conflict **
-                    table_rows shift        44     
-                 table_section shift-reduce 48     table_body ::= table_body table_section
-                     {default} reduce       47     table ::= table_header table_body
-
-State 23:
+State 25:
           para ::= LINE_PLAIN * para_lines
-     (72) para ::= LINE_PLAIN *
+     (73) para ::= LINE_PLAIN *
           para_lines ::= * para_lines para_line
           para_lines ::= * para_line
           para_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    para_lines shift        38     
-                     para_line shift        38       /* because para_line==para_lines */
-                     {default} reduce       72     para ::= LINE_PLAIN
+             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
 
-State 24:
+State 26:
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
      (39) item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks *
@@ -665,13 +730,13 @@ State 24:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
                     LINE_EMPTY reduce       39      ** Parsing conflict **
-                         empty shift        32     
+                         empty shift        34     
                     cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
                      {default} reduce       39     item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks
 
-State 25:
+State 27:
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
      (37) item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks *
@@ -680,13 +745,13 @@ State 25:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
                     LINE_EMPTY reduce       37      ** Parsing conflict **
-                         empty shift        32     
+                         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
 
-State 26:
+State 28:
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
      (34) item_bulleted ::= LINE_LIST_BULLETED cont_blocks *
@@ -695,13 +760,13 @@ State 26:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
                     LINE_EMPTY reduce       34      ** Parsing conflict **
-                         empty shift        32     
+                         empty shift        34     
                     cont_block shift-reduce 41     cont_blocks ::= cont_blocks cont_block
                      {default} reduce       34     item_bulleted ::= LINE_LIST_BULLETED cont_blocks
 
-State 27:
+State 29:
           empty ::= * empty LINE_EMPTY
           empty ::= * LINE_EMPTY
      (32) item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks *
@@ -710,25 +775,25 @@ State 27:
           cont_block ::= * empty indented_line
           cont_block ::= * empty
 
-                    LINE_EMPTY shift-reduce 80     empty ::= LINE_EMPTY
+                    LINE_EMPTY shift-reduce 81     empty ::= LINE_EMPTY
                     LINE_EMPTY reduce       32      ** Parsing conflict **
-                         empty shift        32     
+                         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
 
-State 28:
+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 *
 
-             LINE_CONTINUATION shift-reduce 74     para_line ::= LINE_CONTINUATION
-                    para_lines shift        40     
-                     para_line shift        40       /* because para_line==para_lines */
+             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
 
-State 29:
+State 31:
       (3) block ::= para *
           definition_block ::= para * defs
           defs ::= * defs def
@@ -736,125 +801,125 @@ State 29:
           def ::= * LINE_DEFINITION def_lines
           def ::= * LINE_DEFINITION
 
-               LINE_DEFINITION shift        42     
+               LINE_DEFINITION shift        44     
                LINE_DEFINITION reduce       3       ** Parsing conflict **
-                          defs shift        43     
-                           def shift        43       /* because def==defs */
+                          defs shift        45     
+                           def shift        45       /* because def==defs */
                      {default} reduce       3      block ::= para
 
-State 30:
+State 32:
           fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines * LINE_FENCE_BACKTICK
-     (62) fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines *
+     (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 101    fenced_line ::= LINE_CONTINUATION
-           LINE_FENCE_BACKTICK shift-reduce 61     fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK
-           LINE_FENCE_BACKTICK reduce       62      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 102    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       62      ** Parsing conflict **
-                   fenced_line shift-reduce 63     fenced_lines ::= fenced_lines fenced_line
-                     {default} reduce       62     fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines
+             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
 
-State 31:
+State 33:
           fenced_block ::= LINE_FENCE_BACKTICK fenced_lines * LINE_FENCE_BACKTICK
-     (60) fenced_block ::= LINE_FENCE_BACKTICK fenced_lines *
+     (61) fenced_block ::= LINE_FENCE_BACKTICK fenced_lines *
           fenced_lines ::= fenced_lines * fenced_line
           fenced_line ::= * LINE_CONTINUATION
           fenced_line ::= * LINE_EMPTY
 
-             LINE_CONTINUATION shift-reduce 101    fenced_line ::= LINE_CONTINUATION
-           LINE_FENCE_BACKTICK shift-reduce 59     fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK
-           LINE_FENCE_BACKTICK reduce       60      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 102    fenced_line ::= LINE_EMPTY
-                    LINE_EMPTY reduce       60      ** Parsing conflict **
-                   fenced_line shift-reduce 63     fenced_lines ::= fenced_lines fenced_line
-                     {default} reduce       60     fenced_block ::= LINE_FENCE_BACKTICK fenced_lines
+             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
 
-State 32:
+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
-     (88) cont_block ::= empty *
+     (89) cont_block ::= empty *
 
-             LINE_INDENTED_TAB shift-reduce 78     indented_line ::= LINE_INDENTED_TAB
-             LINE_INDENTED_TAB reduce       88      ** Parsing conflict **
-           LINE_INDENTED_SPACE shift-reduce 79     indented_line ::= LINE_INDENTED_SPACE
-           LINE_INDENTED_SPACE reduce       88      ** Parsing conflict **
+             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       88      ** Parsing conflict **
-                 indented_line shift        28     
-                     {default} reduce       88     cont_block ::= empty
+                    LINE_EMPTY reduce       89      ** Parsing conflict **
+                 indented_line shift        30     
+                     {default} reduce       89     cont_block ::= empty
 
-State 33:
-     (64) meta_block ::= LINE_META meta_lines *
+State 35:
+     (65) meta_block ::= LINE_META meta_lines *
           meta_lines ::= meta_lines * meta_line
           meta_line ::= * LINE_META
           meta_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 106    meta_line ::= LINE_CONTINUATION
-                     LINE_META shift-reduce 105    meta_line ::= LINE_META
-                     LINE_META reduce       64      ** Parsing conflict **
-                     meta_line shift-reduce 65     meta_lines ::= meta_lines meta_line
-                     {default} reduce       64     meta_block ::= LINE_META meta_lines
+             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
 
-State 34:
-     (57) html_block ::= LINE_HTML html_block_lines *
+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
 
-             LINE_CONTINUATION shift-reduce 97     html_block_line ::= LINE_CONTINUATION
-                     LINE_HTML shift-reduce 98     html_block_line ::= LINE_HTML
-                     LINE_HTML reduce       57      ** Parsing conflict **
-               html_block_line shift-reduce 58     html_block_lines ::= html_block_lines html_block_line
-                     {default} reduce       57     html_block ::= LINE_HTML html_block_lines
+             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
 
-State 35:
+State 37:
      (29) blockquote ::= LINE_BLOCKQUOTE quote_lines *
           quote_lines ::= quote_lines * quote_line
           quote_line ::= * LINE_BLOCKQUOTE
           quote_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 84     quote_line ::= LINE_CONTINUATION
-               LINE_BLOCKQUOTE shift-reduce 83     quote_line ::= LINE_BLOCKQUOTE
+             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
 
-State 36:
+State 38:
           defs ::= defs * def
           def ::= * LINE_DEFINITION def_lines
           def ::= * LINE_DEFINITION
-    (109) para ::= defs *
+    (113) para ::= defs *
 
-               LINE_DEFINITION shift        42     
-               LINE_DEFINITION reduce       109     ** Parsing conflict **
-                           def shift-reduce 67     defs ::= defs def
-                     {default} reduce       109    para ::= defs
+               LINE_DEFINITION shift        44     
+               LINE_DEFINITION reduce       113     ** Parsing conflict **
+                           def shift-reduce 68     defs ::= defs def
+                     {default} reduce       113    para ::= defs
 
-State 37:
+State 39:
           para_lines ::= para_lines * para_line
           para_line ::= * LINE_CONTINUATION
-     (56) def_link ::= LINE_DEF_LINK para_lines *
+     (57) def_link ::= LINE_DEF_LINK para_lines *
 
-             LINE_CONTINUATION shift-reduce 74     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       56     def_link ::= LINE_DEF_LINK para_lines
+                     {default} reduce       57     def_link ::= LINE_DEF_LINK para_lines
 
-State 38:
+State 40:
      (25) para ::= LINE_PLAIN para_lines *
           para_lines ::= para_lines * para_line
           para_line ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 74     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 39:
+State 41:
      (13) block ::= list_enumerated *
           list_enumerated ::= list_enumerated * item_enumerated
           item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks
@@ -862,21 +927,21 @@ State 39:
           item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks
           item_enumerated ::= * LINE_LIST_ENUMERATED
 
-          LINE_LIST_ENUMERATED shift        4      
+          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 40:
+State 42:
           para_lines ::= para_lines * para_line
           para_line ::= * LINE_CONTINUATION
      (42) cont_block ::= empty indented_line para_lines *
 
-             LINE_CONTINUATION shift-reduce 74     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       42     cont_block ::= empty indented_line para_lines
 
-State 41:
+State 43:
      (12) block ::= list_bulleted *
           list_bulleted ::= list_bulleted * item_bulleted
           item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks
@@ -884,54 +949,52 @@ State 41:
           item_bulleted ::= * LINE_LIST_BULLETED cont_blocks
           item_bulleted ::= * LINE_LIST_BULLETED
 
-            LINE_LIST_BULLETED shift        5      
+            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 42:
+State 44:
           def ::= LINE_DEFINITION * def_lines
-     (69) def ::= LINE_DEFINITION *
+     (70) def ::= LINE_DEFINITION *
           def_lines ::= * def_lines LINE_CONTINUATION
           def_lines ::= * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 108    def_lines ::= LINE_CONTINUATION
-                     def_lines shift        47     
-                     {default} reduce       69     def ::= LINE_DEFINITION
+             LINE_CONTINUATION shift-reduce 112    def_lines ::= LINE_CONTINUATION
+                     def_lines shift        49     
+                     {default} reduce       70     def ::= LINE_DEFINITION
 
-State 43:
-     (66) definition_block ::= para defs *
+State 45:
+     (67) definition_block ::= para defs *
           defs ::= defs * def
           def ::= * LINE_DEFINITION def_lines
           def ::= * LINE_DEFINITION
 
-               LINE_DEFINITION shift        42     
-               LINE_DEFINITION reduce       66      ** Parsing conflict **
-                           def shift-reduce 67     defs ::= defs def
-                     {default} reduce       66     definition_block ::= para defs
+               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 44:
-          table_section ::= table_rows * LINE_EMPTY
-     (46) table_section ::= table_rows *
-          table_rows ::= table_rows * LINE_TABLE
+State 46:
+          table_header ::= header_rows * LINE_TABLE_SEPARATOR
+     (91) row ::= header_rows *
+          header_rows ::= header_rows * LINE_TABLE
 
-                    LINE_TABLE shift-reduce 49     table_rows ::= table_rows LINE_TABLE
-                    LINE_TABLE reduce       46      ** Parsing conflict **
-                    LINE_EMPTY shift-reduce 45     table_section ::= table_rows LINE_EMPTY
-                    LINE_EMPTY reduce       46      ** Parsing conflict **
-                     {default} reduce       46     table_section ::= table_rows
+          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 45:
-          table_header ::= table_rows * LINE_TABLE_SEPARATOR
-          table_rows ::= table_rows * LINE_TABLE
-     (71) para ::= table_rows *
+State 47:
+     (91) row ::= header_rows *
+          header_rows ::= header_rows * LINE_TABLE
 
-          LINE_TABLE_SEPARATOR shift-reduce 44     table_header ::= table_rows LINE_TABLE_SEPARATOR
-                    LINE_TABLE shift-reduce 49     table_rows ::= table_rows LINE_TABLE
-                    LINE_TABLE reduce       71      ** Parsing conflict **
-                     {default} reduce       71     para ::= table_rows
+                    LINE_TABLE shift-reduce 50     header_rows ::= header_rows LINE_TABLE
+                    LINE_TABLE reduce       91      ** Parsing conflict **
+                     {default} reduce       91     row ::= header_rows
 
-State 46:
+State 48:
      (11) block ::= empty *
           empty ::= empty * LINE_EMPTY
 
@@ -939,12 +1002,12 @@ State 46:
                     LINE_EMPTY reduce       11      ** Parsing conflict **
                      {default} reduce       11     block ::= empty
 
-State 47:
-     (68) def ::= LINE_DEFINITION def_lines *
+State 49:
+     (69) def ::= LINE_DEFINITION def_lines *
           def_lines ::= def_lines * LINE_CONTINUATION
 
-             LINE_CONTINUATION shift-reduce 70     def_lines ::= def_lines LINE_CONTINUATION
-                     {default} reduce       68     def ::= LINE_DEFINITION def_lines
+             LINE_CONTINUATION shift-reduce 71     def_lines ::= def_lines LINE_CONTINUATION
+                     {default} reduce       69     def ::= LINE_DEFINITION def_lines
 
 ----------------------------------------------------
 Symbols:
@@ -976,10 +1039,10 @@ Symbols:
    25: LINE_META
    26: LINE_DEFINITION
    27: error:
-   28: doc: LINE_PLAIN 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_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_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 LINE_DEFINITION
+   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
@@ -992,7 +1055,7 @@ Symbols:
    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 LINE_DEFINITION
+   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
@@ -1004,15 +1067,17 @@ Symbols:
    53: item_enumerated: LINE_LIST_ENUMERATED
    54: cont_block: LINE_EMPTY
    55: table_header: LINE_TABLE
-   56: table_rows: LINE_TABLE
-   57: table_section: LINE_TABLE
-   58: table_body: LINE_TABLE
-   59: html_block_lines: LINE_CONTINUATION LINE_HTML
-   60: html_block_line: LINE_CONTINUATION LINE_HTML
-   61: fenced_lines: <lambda> LINE_CONTINUATION LINE_EMPTY
-   62: fenced_line: LINE_CONTINUATION LINE_EMPTY
-   63: meta_lines: LINE_CONTINUATION LINE_META
-   64: meta_line: LINE_CONTINUATION LINE_META
-   65: defs: LINE_DEFINITION
-   66: def: LINE_DEFINITION
-   67: def_lines: LINE_CONTINUATION
+   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
index 9dc85983d9fef9279f19403923b4895a2289c9eb..1196bc6516c6ce2af29040b82f135c156122e7ca 100644 (file)
@@ -166,20 +166,25 @@ cont_block(A)             ::= empty(B) indented_line(C).                          { A = B; token_chain_append(B,
 cont_block                     ::= empty.
 
 
-table_header(A)                ::= table_rows(B) LINE_TABLE_SEPARATOR(C).      { A = token_new_parent(B, BLOCK_TABLE_HEADER); token_chain_append(B, C); }
-table_section(A)       ::= table_rows(B) LINE_EMPTY(C).                        { A = token_new_parent(B, BLOCK_TABLE_SECTION); token_chain_append(B, C); }
-table_section(A)       ::= table_rows(B).                                                      { A = token_new_parent(B, BLOCK_TABLE_SECTION); }
+table_header(A)                ::= header_rows(B) LINE_TABLE_SEPARATOR(C).     { A = token_new_parent(B, BLOCK_TABLE_HEADER); token_chain_append(B, C); }
 
+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.
 
 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(A)                ::= table_body(B) error.                                        { A = B; }
 table_body                     ::= table_section.
 
-table_rows(A)          ::= table_rows(B) LINE_TABLE(C).                        { A = B; token_chain_append(B, C); }
-table_rows                     ::= LINE_TABLE.
+header_rows(A)         ::= header_rows(B) LINE_TABLE(C).                       { A = B; token_chain_append(B, C); }
+header_rows                    ::= LINE_TABLE.
 
 
 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); }
@@ -246,7 +251,7 @@ def_lines                   ::= LINE_CONTINUATION.
 // 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)                                ::= table_rows(B).                                                      { A = B; }
+para(A)                                ::= all_rows(B).                                                        { A = B; }
 para                           ::= defs.
 
 
index 32a7c85b8527830e87aeea606f93241928018ef1..8684fe7a4848aca07b01a26b87f2ae4a3eac8c58 100644 (file)
@@ -121,12 +121,13 @@ item_enumerated ::= LINE_LIST_ENUMERATED.
 cont_blocks ::= cont_blocks cont_block.
 cont_block ::= empty indented_line para_lines.
 cont_block ::= empty indented_line.
-table_header ::= table_rows LINE_TABLE_SEPARATOR.
-table_section ::= table_rows LINE_EMPTY.
-table_section ::= table_rows.
+table_header ::= header_rows LINE_TABLE_SEPARATOR.
+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.
-table_rows ::= table_rows LINE_TABLE.
+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.
@@ -148,7 +149,7 @@ defs ::= defs def.
 def ::= LINE_DEFINITION def_lines.
 def ::= LINE_DEFINITION.
 def_lines ::= def_lines LINE_CONTINUATION.
-para ::= table_rows.
+para ::= all_rows.
 para ::= LINE_PLAIN.
 para_lines ::= para_line.
 para_line ::= LINE_CONTINUATION.
@@ -166,9 +167,12 @@ 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.
-table_rows ::= LINE_TABLE.
+header_rows ::= LINE_TABLE.
 def_citation ::= LINE_DEF_CITATION.
 def_footnote ::= LINE_DEF_FOOTNOTE.
 def_link ::= LINE_DEF_LINK.
@@ -188,6 +192,7 @@ defs ::= def.
 def_lines ::= LINE_CONTINUATION.
 para ::= defs.
 
+
 //
 // Additional Configuration
 //
index 7ee3ec1458a7c6c8a26f08bc019dae9dd5fb58e9..32a29361e9d5081da7d672bb5af23db217c6b757 100644 (file)
        <td style="text-align:left;"> foo6 </td>
        <td style="text-align:right;"> bar6 </td>
 </tr>
+<tr>
+       <td style="text-align:left;"> :&#8212;&#8211; </td>
+       <td style="text-align:right;"> &#8212;&#8211;: </td>
+</tr>
+<tr>
+       <td style="text-align:left;"><em>foo</em> </td>
+       <td style="text-align:right;"> <em>bar</em> </td>
+</tr>
+<tr>
+       <td style="text-align:left;" colspan="2"> <strong>foo bar</strong> </td>
+</tr>
 </tbody>
 </table>
-
-<p>| :&#8212;- | &#8212;-: |
-<em>foo</em> | <em>bar</em> |
-| <strong>foo bar</strong> ||</p>