diff --git a/lib/rdoc/markdown.kpeg b/lib/rdoc/markdown.kpeg index 53c17b2a04..c9900c8cad 100644 --- a/lib/rdoc/markdown.kpeg +++ b/lib/rdoc/markdown.kpeg @@ -1198,17 +1198,22 @@ CodeFence = &{ github? } } Table = &{ github? } - TableRow:header TableLine:line TableRow+:body + TableHead:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) } -TableRow = TableItem+:row "|"? @Newline - { row } -TableItem = "|" < (!"|" !@Newline .)+ > +TableHead = TableItem2+:items "|"? @Newline + { items } + +TableRow = ( ( TableItem:item1 TableItem2*:items { [item1, *items] } ):row | TableItem2+:row ) "|"? @Newline + { row } +TableItem2 = "|" TableItem +TableItem = < (!"|" !@Newline .)+ > { text.strip } -TableLine = TableColumn+:line "|"? @Newline - { line } -TableColumn = "|" < ( "-"+ ":"? | ":" "-"* ) > +TableLine = ( ( TableAlign:align1 TableAlign2*:aligns {[align1, *aligns] } ):line | TableAlign2+:line ) "|"? @Newline + { line } +TableAlign2 = "|" TableAlign +TableAlign = < /:?-+:?/ > { text.start_with?(":") ? :left : text.end_with?(":") ? :right : nil } diff --git a/test/rdoc/test_rdoc_markdown.rb b/test/rdoc/test_rdoc_markdown.rb index 4c45794343..1b13e2e7e6 100644 --- a/test/rdoc/test_rdoc_markdown.rb +++ b/test/rdoc/test_rdoc_markdown.rb @@ -1065,9 +1065,9 @@ def test_gfm_table def test_gfm_table_2 doc = parse <<~MD | Cmd | Returns | Meaning - |-----|---------|-------- - | "b" | boolean | True if file1 is a block device - | "c" | boolean | True if file1 is a character device + ------|---------|-------- + |"b" | boolean | True if file1 is a block device + "c" | boolean | True if file1 is a character device MD head = %w[Cmd Returns Meaning]