git.iko.soy/typeable/pandoc
on master help sign in
HTML reader tests: improve test coverage of new features
8c38390Albert Krewinkel
src/Text/Pandoc/Readers/HTML/Table.hs+2−1
@@ -214,7 +214,8 @@ normalize :: [ColWidth] -> TableHead -> [TableBody] -> TableFoot
214 -> Either String ([ColSpec], TableHead, [TableBody], TableFoot)
214 -> Either String ([ColSpec], TableHead, [TableBody], TableFoot)
215normalize widths head' bodies foot = do
215normalize widths head' bodies foot = do
216 let rows = headRows head' <> concatMap bodyRows bodies <> footRows foot
216 let rows = headRows head' <> concatMap bodyRows bodies <> footRows foot
217+ let cellWidth (Cell _ _ _ (ColSpan cs) _) = cs
217− let rowLength = length . rowCells
218+ let rowLength = foldr (\cell acc -> cellWidth cell + acc) 0 . rowCells
218 let ncols = maximum (map rowLength rows)
219 let ncols = maximum (map rowLength rows)
219 let tblType = tableType (map rowCells rows)
220 let tblType = tableType (map rowCells rows)
220 -- fail on empty table
221 -- fail on empty table
test/html-reader.html+76
@@ -487,6 +487,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote>
487 </tbody>
487 </tbody>
488</table>
488</table>
489<hr />
489<hr />
490+<p>Row headers</p>
490<table>
491<table>
491 <thead>
492 <thead>
492 <tr>
493 <tr>
@@ -656,6 +657,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote>
656 </tbody>
657 </tbody>
657</table>
658</table>
658<hr />
659<hr />
660+<p>tbody tags omitted</p>
659<table>
661<table>
660 <tr>
662 <tr>
661 <td>1</td>
663 <td>1</td>
@@ -669,6 +671,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote>
669 </tr>
671 </tr>
670</table>
672</table>
671<hr />
673<hr />
674+<p>empty head</p>
672<table>
675<table>
673 <thead>
676 <thead>
674 </thead>
677 </thead>
@@ -686,6 +689,7 @@ An e-mail address: nobody [at] nowhere.net<blockquote>
686 </tbody>
689 </tbody>
687</table>
690</table>
688<hr />
691<hr />
692+<p>explicit body and foot</p>
689<table>
693<table>
690 <tbody>
694 <tbody>
691 <tr>
695 <tr>
@@ -702,6 +706,78 @@ An e-mail address: nobody [at] nowhere.net<blockquote>
702 </tr>
706 </tr>
703 </tfoot>
707 </tfoot>
704</table>
708</table>
709+<h2>Colspans and Rowspans</h2>
710+<table>
711+ <tr>
712+ <td colspan="2">1 and 2</td>
713+ <td>3</td>
714+ </tr>
715+ <tr>
716+ <td colspan="3">4, 5, and 6</td>
717+ </tr>
718+</table>
719+<hr/>
720+<table>
721+ <thead>
722+ <tr>
723+ <th colspan="3">Numbers</th>
724+ </tr>
725+ </thead>
726+ <tbody>
727+ <tr>
728+ <td rowspan="2">1 and 4</td>
729+ <td>2</td>
730+ <td>3</td>
731+ </tr>
732+ <tr>
733+ <td>5</td>
734+ <td>6</td>
735+ </tr>
736+ </tbody>
737+</table>
738+<h2>Attributes</h2>
739+<table id="attrib-test-table">
740+ <thead class="table-head">
741+ <tr class="table-head-row">
742+ <th abbr="x" colspan="3">Cat X</th>
743+ </tr>
744+ <tbody data-part="body" class="main">
745+ <tr data-part="row">
746+ <td data-part="cell">1</td>
747+ <td valign="bottom">2</td>
748+ <td style="color: #151950">3</td>
749+ </tr>
750+ </tbody>
751+ <tfoot class="summary">
752+ <tr bgcolor="#ccc">
753+ <td data-square="true">4</td>
754+ <td>5</td>
755+ <td>6</td>
756+ </tr>
757+ </tfoot>
758+</table>
759+<h2>Tag omission</h2>
760+<p>thead, tbody, and tfoot</p>
761+<table>
762+ <thead>
763+ <tr>
764+ <td>X</td>
765+ <td>Y</td>
766+ <td>Z</td>
767+ </tr>
768+ <tbody>
769+ <tr>
770+ <td>1</td>
771+ <td>2</td>
772+ <td>3</td>
773+ </tr>
774+ <tfoot>
775+ <tr>
776+ <td>4</td>
777+ <td>5</td>
778+ <td>6</td>
779+ </tr>
780+</table>
705<h2>Empty Tables</h2>
781<h2>Empty Tables</h2>
706<p>This section should be empty.</p>
782<p>This section should be empty.</p>
707<table>
783<table>
test/html-reader.native+109
@@ -395,6 +395,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
395 (TableFoot ("",[],[])
395 (TableFoot ("",[],[])
396 [])
396 [])
397,HorizontalRule
397,HorizontalRule
398+,Para [Str "Row",Space,Str "headers"]
398,Table ("",[],[]) (Caption Nothing
399,Table ("",[],[]) (Caption Nothing
399 [])
400 [])
400 [(AlignDefault,ColWidthDefault)
401 [(AlignDefault,ColWidthDefault)
@@ -647,6 +648,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
647 (TableFoot ("",[],[])
648 (TableFoot ("",[],[])
648 [])
649 [])
649,HorizontalRule
650,HorizontalRule
651+,Para [Str "tbody",Space,Str "tags",Space,Str "omitted"]
650,Table ("",[],[]) (Caption Nothing
652,Table ("",[],[]) (Caption Nothing
651 [])
653 [])
652 [(AlignDefault,ColWidthDefault)
654 [(AlignDefault,ColWidthDefault)
@@ -673,6 +675,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
673 (TableFoot ("",[],[])
675 (TableFoot ("",[],[])
674 [])
676 [])
675,HorizontalRule
677,HorizontalRule
678+,Para [Str "empty",Space,Str "head"]
676,Table ("",[],[]) (Caption Nothing
679,Table ("",[],[]) (Caption Nothing
677 [])
680 [])
678 [(AlignDefault,ColWidthDefault)
681 [(AlignDefault,ColWidthDefault)
@@ -699,6 +702,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
699 (TableFoot ("",[],[])
702 (TableFoot ("",[],[])
700 [])
703 [])
701,HorizontalRule
704,HorizontalRule
705+,Para [Str "explicit",Space,Str "body",Space,Str "and",Space,Str "foot"]
702,Table ("",[],[]) (Caption Nothing
706,Table ("",[],[]) (Caption Nothing
703 [])
707 [])
704 [(AlignDefault,ColWidthDefault)
708 [(AlignDefault,ColWidthDefault)
@@ -723,5 +727,110 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
723 [Plain [Str "5"]]
727 [Plain [Str "5"]]
724 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
728 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
725 [Plain [Str "6"]]]])
729 [Plain [Str "6"]]]])
730+,Header 2 ("colspans-and-rowspans",[],[]) [Str "Colspans",Space,Str "and",Space,Str "Rowspans"]
731+,Table ("",[],[]) (Caption Nothing
732+ [])
733+ [(AlignDefault,ColWidthDefault)
734+ ,(AlignDefault,ColWidthDefault)
735+ ,(AlignDefault,ColWidthDefault)]
736+ (TableHead ("",[],[])
737+ [])
738+ [(TableBody ("",[],[]) (RowHeadColumns 0)
739+ []
740+ [Row ("",[],[])
741+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 2)
742+ [Plain [Str "1",Space,Str "and",Space,Str "2"]]
743+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
744+ [Plain [Str "3"]]]
745+ ,Row ("",[],[])
746+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 3)
747+ [Plain [Str "4,",Space,Str "5,",Space,Str "and",Space,Str "6"]]]])]
748+ (TableFoot ("",[],[])
749+ [])
750+,HorizontalRule
751+,Table ("",[],[]) (Caption Nothing
752+ [])
753+ [(AlignDefault,ColWidthDefault)
754+ ,(AlignDefault,ColWidthDefault)
755+ ,(AlignDefault,ColWidthDefault)]
756+ (TableHead ("",[],[])
757+ [Row ("",[],[])
758+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 3)
759+ [Plain [Str "Numbers"]]]])
760+ [(TableBody ("",[],[]) (RowHeadColumns 0)
761+ []
762+ [Row ("",[],[])
763+ [Cell ("",[],[]) AlignDefault (RowSpan 2) (ColSpan 1)
764+ [Plain [Str "1",Space,Str "and",Space,Str "4"]]
765+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
766+ [Plain [Str "2"]]
767+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
768+ [Plain [Str "3"]]]
769+ ,Row ("",[],[])
770+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
771+ [Plain [Str "5"]]
772+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
773+ [Plain [Str "6"]]]])]
774+ (TableFoot ("",[],[])
775+ [])
776+,Header 2 ("attributes",[],[]) [Str "Attributes"]
777+,Table ("attrib-test-table",[],[]) (Caption Nothing
778+ [])
779+ [(AlignDefault,ColWidthDefault)
780+ ,(AlignDefault,ColWidthDefault)
781+ ,(AlignDefault,ColWidthDefault)]
782+ (TableHead ("",["table-head"],[])
783+ [Row ("",["table-head-row"],[])
784+ [Cell ("",[],[("abbr","x")]) AlignDefault (RowSpan 1) (ColSpan 3)
785+ [Plain [Str "Cat",Space,Str "X"]]]])
786+ [(TableBody ("",["main"],[("part","body")]) (RowHeadColumns 0)
787+ []
788+ [Row ("",[],[("part","row")])
789+ [Cell ("",[],[("part","cell")]) AlignDefault (RowSpan 1) (ColSpan 1)
790+ [Plain [Str "1"]]
791+ ,Cell ("",[],[("valign","bottom")]) AlignDefault (RowSpan 1) (ColSpan 1)
792+ [Plain [Str "2"]]
793+ ,Cell ("",[],[("style","color: #151950")]) AlignDefault (RowSpan 1) (ColSpan 1)
794+ [Plain [Str "3"]]]])]
795+ (TableFoot ("",["summary"],[])
796+ [Row ("",[],[("bgcolor","#ccc")])
797+ [Cell ("",[],[("square","true")]) AlignDefault (RowSpan 1) (ColSpan 1)
798+ [Plain [Str "4"]]
799+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
800+ [Plain [Str "5"]]
801+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
802+ [Plain [Str "6"]]]])
803+,Header 2 ("tag-omission",[],[]) [Str "Tag",Space,Str "omission"]
804+,Para [Str "thead,",Space,Str "tbody,",Space,Str "and",Space,Str "tfoot"]
805+,Table ("",[],[]) (Caption Nothing
806+ [])
807+ [(AlignDefault,ColWidthDefault)
808+ ,(AlignDefault,ColWidthDefault)
809+ ,(AlignDefault,ColWidthDefault)]
810+ (TableHead ("",[],[])
811+ [Row ("",[],[])
812+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
813+ [Plain [Str "X"]]
814+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
815+ [Plain [Str "Y"]]
816+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
817+ [Plain [Str "Z"]]]])
818+ [(TableBody ("",[],[]) (RowHeadColumns 0)
819+ []
820+ [Row ("",[],[])
821+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
822+ [Plain [Str "1"]]
823+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
824+ [Plain [Str "2"]]
825+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
826+ [Plain [Str "3"]]]])]
827+ (TableFoot ("",[],[])
828+ [Row ("",[],[])
829+ [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
830+ [Plain [Str "4"]]
831+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
832+ [Plain [Str "5"]]
833+ ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
834+ [Plain [Str "6"]]]])
726,Header 2 ("empty-tables",[],[]) [Str "Empty",Space,Str "Tables"]
835,Header 2 ("empty-tables",[],[]) [Str "Empty",Space,Str "Tables"]
727,Para [Str "This",Space,Str "section",Space,Str "should",Space,Str "be",Space,Str "empty."]]
836,Para [Str "This",Space,Str "section",Space,Str "should",Space,Str "be",Space,Str "empty."]]