git.iko.soy/typeable/pandoc
on master help sign in
HTML writer: support attributes on all table elements
8711640Albert Krewinkel
src/Text/Pandoc/Writers/HTML.hs+10−6
@@ -948,8 +948,8 @@ tableBodyToHtml :: PandocMonad m
948 => WriterOptions
948 => WriterOptions
949 -> Ann.TableBody
949 -> Ann.TableBody
950 -> StateT WriterState m Html
950 -> StateT WriterState m Html
951−tableBodyToHtml opts (Ann.TableBody _attr _rowHeadCols _intm rows) =
951+tableBodyToHtml opts (Ann.TableBody attr _rowHeadCols _intm rows) =
952− H.tbody <$> bodyRowsToHtml opts rows
952+ addAttrs opts attr . H.tbody =<< bodyRowsToHtml opts rows
953
953
954tableHeadToHtml :: PandocMonad m
954tableHeadToHtml :: PandocMonad m
955 => WriterOptions
955 => WriterOptions
@@ -1060,7 +1060,7 @@ tableRowToHtml :: PandocMonad m
1060 => WriterOptions
1060 => WriterOptions
1061 -> TableRow
1061 -> TableRow
1062 -> StateT WriterState m Html
1062 -> StateT WriterState m Html
1063−tableRowToHtml opts (TableRow tblpart _attr rownum rowhead rowbody) = do
1063+tableRowToHtml opts (TableRow tblpart attr rownum rowhead rowbody) = do
1064 let rowclass = A.class_ $ case rownum of
1064 let rowclass = A.class_ $ case rownum of
1065 Ann.RowNumber x | x `rem` 2 == 1 -> "odd"
1065 Ann.RowNumber x | x `rem` 2 == 1 -> "odd"
1066 _ | tblpart /= Thead -> "even"
1066 _ | tblpart /= Thead -> "even"
@@ -1068,10 +1068,14 @@ tableRowToHtml opts (TableRow tblpart _attr rownum rowhead rowbody) = do
1068 let celltype = case tblpart of
1068 let celltype = case tblpart of
1069 Thead -> HeaderCell
1069 Thead -> HeaderCell
1070 _ -> BodyCell
1070 _ -> BodyCell
1071− head' <- mapM (cellToHtml opts HeaderCell) rowhead
1071+ headcells <- mapM (cellToHtml opts HeaderCell) rowhead
1072− body <- mapM (cellToHtml opts celltype) rowbody
1072+ bodycells <- mapM (cellToHtml opts celltype) rowbody
1073+ rowHtml <- addAttrs opts attr $ H.tr ! rowclass $ do
1074+ nl opts
1075+ mconcat headcells
1076+ mconcat bodycells
1073 return $ do
1077 return $ do
1074− H.tr ! rowclass $ nl opts *> mconcat (head' <> body)
1078+ rowHtml
1075 nl opts
1079 nl opts
1076
1080
1077alignmentToString :: Alignment -> Maybe Text
1081alignmentToString :: Alignment -> Maybe Text
test/tables/nordics.html4+11−11
@@ -1,4 +1,4 @@
1−<table>
1+<table id="nordics" source="wikipedia">
2<caption><p>States belonging to the <em>Nordics.</em></p></caption>
2<caption><p>States belonging to the <em>Nordics.</em></p></caption>
3<colgroup>
3<colgroup>
4<col width="30%" />
4<col width="30%" />
@@ -6,7 +6,7 @@
6<col width="20%" />
6<col width="20%" />
7<col width="20%" />
7<col width="20%" />
8</colgroup>
8</colgroup>
9−<thead>
9+<thead class="simple-head">
10<tr class="header">
10<tr class="header">
11<th align="center">Name</th>
11<th align="center">Name</th>
12<th align="center">Capital</th>
12<th align="center">Capital</th>
@@ -16,43 +16,43 @@
16(in km<sup>2</sup>)</th>
16(in km<sup>2</sup>)</th>
17</tr>
17</tr>
18</thead>
18</thead>
19−<tbody>
19+<tbody class="souvereign-states">
20−<tr class="odd">
20+<tr class="odd" class="country">
21<th align="center">Denmark</th>
21<th align="center">Denmark</th>
22<td align="left">Copenhagen</td>
22<td align="left">Copenhagen</td>
23<td align="left">5,809,502</td>
23<td align="left">5,809,502</td>
24<td align="left">43,094</td>
24<td align="left">43,094</td>
25</tr>
25</tr>
26−<tr class="even">
26+<tr class="even" class="country">
27<th align="center">Finland</th>
27<th align="center">Finland</th>
28<td align="left">Helsinki</td>
28<td align="left">Helsinki</td>
29<td align="left">5,537,364</td>
29<td align="left">5,537,364</td>
30<td align="left">338,145</td>
30<td align="left">338,145</td>
31</tr>
31</tr>
32−<tr class="odd">
32+<tr class="odd" class="country">
33<th align="center">Iceland</th>
33<th align="center">Iceland</th>
34<td align="left">Reykjavik</td>
34<td align="left">Reykjavik</td>
35<td align="left">343,518</td>
35<td align="left">343,518</td>
36<td align="left">103,000</td>
36<td align="left">103,000</td>
37</tr>
37</tr>
38−<tr class="even">
38+<tr class="even" class="country">
39<th align="center">Norway</th>
39<th align="center">Norway</th>
40<td align="left">Oslo</td>
40<td align="left">Oslo</td>
41<td align="left">5,372,191</td>
41<td align="left">5,372,191</td>
42<td align="left">323,802</td>
42<td align="left">323,802</td>
43</tr>
43</tr>
44−<tr class="odd">
44+<tr class="odd" class="country">
45<th align="center">Sweden</th>
45<th align="center">Sweden</th>
46<td align="left">Stockholm</td>
46<td align="left">Stockholm</td>
47<td align="left">10,313,447</td>
47<td align="left">10,313,447</td>
48<td align="left">450,295</td>
48<td align="left">450,295</td>
49</tr>
49</tr>
50</tbody><tfoot>
50</tbody><tfoot>
51−<tr class="even">
51+<tr class="even" id="summary">
52<td align="center">Total</td>
52<td align="center">Total</td>
53<td align="left"></td>
53<td align="left"></td>
54−<td align="left">27,376,022</td>
54+<td align="left" id="total-population">27,376,022</td>
55−<td align="left">1,258,336</td>
55+<td align="left" id="total-area">1,258,336</td>
56</tr>
56</tr>
57</tfoot>
57</tfoot>
58
58
test/tables/nordics.html5+11−11
@@ -1,4 +1,4 @@
1−<table>
1+<table id="nordics" data-source="wikipedia">
2<caption><p>States belonging to the <em>Nordics.</em></p></caption>
2<caption><p>States belonging to the <em>Nordics.</em></p></caption>
3<colgroup>
3<colgroup>
4<col style="width: 30%" />
4<col style="width: 30%" />
@@ -6,7 +6,7 @@
6<col style="width: 20%" />
6<col style="width: 20%" />
7<col style="width: 20%" />
7<col style="width: 20%" />
8</colgroup>
8</colgroup>
9−<thead>
9+<thead class="simple-head">
10<tr class="header">
10<tr class="header">
11<th style="text-align: center;">Name</th>
11<th style="text-align: center;">Name</th>
12<th style="text-align: center;">Capital</th>
12<th style="text-align: center;">Capital</th>
@@ -16,43 +16,43 @@
16(in km<sup>2</sup>)</th>
16(in km<sup>2</sup>)</th>
17</tr>
17</tr>
18</thead>
18</thead>
19−<tbody>
19+<tbody class="souvereign-states">
20−<tr class="odd">
20+<tr class="odd" class="country">
21<th style="text-align: center;">Denmark</th>
21<th style="text-align: center;">Denmark</th>
22<td style="text-align: left;">Copenhagen</td>
22<td style="text-align: left;">Copenhagen</td>
23<td style="text-align: left;">5,809,502</td>
23<td style="text-align: left;">5,809,502</td>
24<td style="text-align: left;">43,094</td>
24<td style="text-align: left;">43,094</td>
25</tr>
25</tr>
26−<tr class="even">
26+<tr class="even" class="country">
27<th style="text-align: center;">Finland</th>
27<th style="text-align: center;">Finland</th>
28<td style="text-align: left;">Helsinki</td>
28<td style="text-align: left;">Helsinki</td>
29<td style="text-align: left;">5,537,364</td>
29<td style="text-align: left;">5,537,364</td>
30<td style="text-align: left;">338,145</td>
30<td style="text-align: left;">338,145</td>
31</tr>
31</tr>
32−<tr class="odd">
32+<tr class="odd" class="country">
33<th style="text-align: center;">Iceland</th>
33<th style="text-align: center;">Iceland</th>
34<td style="text-align: left;">Reykjavik</td>
34<td style="text-align: left;">Reykjavik</td>
35<td style="text-align: left;">343,518</td>
35<td style="text-align: left;">343,518</td>
36<td style="text-align: left;">103,000</td>
36<td style="text-align: left;">103,000</td>
37</tr>
37</tr>
38−<tr class="even">
38+<tr class="even" class="country">
39<th style="text-align: center;">Norway</th>
39<th style="text-align: center;">Norway</th>
40<td style="text-align: left;">Oslo</td>
40<td style="text-align: left;">Oslo</td>
41<td style="text-align: left;">5,372,191</td>
41<td style="text-align: left;">5,372,191</td>
42<td style="text-align: left;">323,802</td>
42<td style="text-align: left;">323,802</td>
43</tr>
43</tr>
44−<tr class="odd">
44+<tr class="odd" class="country">
45<th style="text-align: center;">Sweden</th>
45<th style="text-align: center;">Sweden</th>
46<td style="text-align: left;">Stockholm</td>
46<td style="text-align: left;">Stockholm</td>
47<td style="text-align: left;">10,313,447</td>
47<td style="text-align: left;">10,313,447</td>
48<td style="text-align: left;">450,295</td>
48<td style="text-align: left;">450,295</td>
49</tr>
49</tr>
50</tbody><tfoot>
50</tbody><tfoot>
51−<tr class="even">
51+<tr class="even" id="summary">
52<td style="text-align: center;">Total</td>
52<td style="text-align: center;">Total</td>
53<td style="text-align: left;"></td>
53<td style="text-align: left;"></td>
54−<td style="text-align: left;">27,376,022</td>
54+<td style="text-align: left;" id="total-population">27,376,022</td>
55−<td style="text-align: left;">1,258,336</td>
55+<td style="text-align: left;" id="total-area">1,258,336</td>
56</tr>
56</tr>
57</tfoot>
57</tfoot>
58
58
test/tables/nordics.native+11−11
@@ -1,46 +1,46 @@
1−[Table ("",[],[]) (Caption (Just [Str "Nordic countries"])
1+[Table ("nordics",[],[("source","wikipedia")]) (Caption (Just [Str "Nordic countries"])
2 [Para [Str "States", Space, Str "belonging", Space, Str "to", Space, Str "the", Space, Emph [Str "Nordics."]]])
2 [Para [Str "States", Space, Str "belonging", Space, Str "to", Space, Str "the", Space, Emph [Str "Nordics."]]])
3 [(AlignCenter,ColWidth 0.3)
3 [(AlignCenter,ColWidth 0.3)
4 ,(AlignLeft,ColWidth 0.3)
4 ,(AlignLeft,ColWidth 0.3)
5 ,(AlignLeft,ColWidth 0.2)
5 ,(AlignLeft,ColWidth 0.2)
6 ,(AlignLeft,ColWidth 0.2)]
6 ,(AlignLeft,ColWidth 0.2)]
7− (TableHead ("",[],[])
7+ (TableHead ("",["simple-head"],[])
8 [Row ("",[],[])
8 [Row ("",[],[])
9 [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Name"]]
9 [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Name"]]
10 ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Capital"]]
10 ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Capital"]]
11 ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Population", LineBreak, Str "(in", Space, Str "2018)"]]
11 ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Population", LineBreak, Str "(in", Space, Str "2018)"]]
12 ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Area", LineBreak, Str "(in", Space, Str "km", Superscript [Str "2"], Str ")"]]]])
12 ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1) [Plain [Str "Area", LineBreak, Str "(in", Space, Str "km", Superscript [Str "2"], Str ")"]]]])
13− [(TableBody ("",[],[]) (RowHeadColumns 1)
13+ [(TableBody ("",["souvereign-states"],[]) (RowHeadColumns 1)
14 []
14 []
15− [Row ("",[],[])
15+ [Row ("",["country"],[])
16 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Denmark"]]
16 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Denmark"]]
17 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Copenhagen"]]
17 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Copenhagen"]]
18 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "5,809,502"]]
18 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "5,809,502"]]
19 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "43,094"]]]
19 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "43,094"]]]
20− ,Row ("",[],[])
20+ ,Row ("",["country"],[])
21 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Finland"]]
21 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Finland"]]
22 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Helsinki"]]
22 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Helsinki"]]
23 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "5,537,364"]]
23 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "5,537,364"]]
24 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "338,145"]]]
24 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "338,145"]]]
25− ,Row ("",[],[])
25+ ,Row ("",["country"],[])
26 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Iceland"]]
26 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Iceland"]]
27 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Reykjavik"]]
27 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Reykjavik"]]
28 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "343,518"]]
28 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "343,518"]]
29 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "103,000"]]]
29 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "103,000"]]]
30− ,Row ("",[],[])
30+ ,Row ("",["country"],[])
31 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Norway"]]
31 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Norway"]]
32 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Oslo"]]
32 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Oslo"]]
33 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "5,372,191"]]
33 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "5,372,191"]]
34 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "323,802"]]]
34 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "323,802"]]]
35− ,Row ("",[],[])
35+ ,Row ("",["country"],[])
36 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Sweden"]]
36 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Sweden"]]
37 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Stockholm"]]
37 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Stockholm"]]
38 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "10,313,447"]]
38 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "10,313,447"]]
39 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "450,295"]]]])]
39 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "450,295"]]]])]
40 (TableFoot ("",[],[])
40 (TableFoot ("",[],[])
41− [Row ("",[],[])
41+ [Row ("summary",[],[])
42 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Total"]]
42 [Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "Total"]]
43 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) []
43 ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) []
44− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "27,376,022"]]
44+ ,Cell ("total-population",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "27,376,022"]]
45− ,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "1,258,336"]]]])
45+ ,Cell ("total-area",[],[]) AlignDefault (RowSpan 1) (ColSpan 1) [Plain [Str "1,258,336"]]]])
46]
46]