aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <[email protected]>2023-05-01 14:21:16 +0200
committerJohn MacFarlane <[email protected]>2023-05-01 20:55:37 -0700
commit737446f33d9d8383bdd95d218f77391e0fc08a13 (patch)
tree5d42571a8452a0ea77fb77db12d87fc8220b43b1
parent2881c1274018a31e78ccba647cae4c2764fb5dad (diff)
Writers.OpenDocument: handle row header column cells as header cells
The previous commit prevented header column cells from being dropped on the floor, this one changes the paragraph style to "Table_20_Heading". Note that for the test input, the result is not correct: the AnnotatedTable type cannot represent the HTML input properly, as it only has a concept of header rows and header columns, but HTML can have an individual cell that is a header (not 100% sure but they way i read https://html.spec.whatwg.org/#header-and-data-cell-semantics the <th> cell here is both a row header cell and a column header cell while the other cells in the row and column are not header cells), and header cells may even appear "in the middle" of a table (see example in https://html.spec.whatwg.org/#the-th-element). So while this appears like it's the right thing to do for Writer.OpenDocument, it's not clear if this is going to make things better or worse overall. Fixes: #8764
-rw-r--r--src/Text/Pandoc/Writers/OpenDocument.hs16
-rw-r--r--test/command/8764.md4
2 files changed, 11 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Writers/OpenDocument.hs b/src/Text/Pandoc/Writers/OpenDocument.hs
index fa2750b90..feea97d8e 100644
--- a/src/Text/Pandoc/Writers/OpenDocument.hs
+++ b/src/Text/Pandoc/Writers/OpenDocument.hs
@@ -442,7 +442,7 @@ blockToOpenDocument o = \case
then numberedTableCaption ident
else unNumberedCaption "TableCaption"
th <- colHeadsToOpenDocument o (map fst paraHStyles) thead
- tr <- mapM (tableBodyToOpenDocument o (map fst paraStyles)) tbodies
+ tr <- mapM (tableBodyToOpenDocument o (map fst paraHStyles) (map fst paraStyles)) tbodies
let tableDoc = inTags True "table:table" [
("table:name" , name)
, ("table:style-name", name)
@@ -506,19 +506,21 @@ colHeadsToOpenDocument o ns (Ann.TableHead _ hs) =
vcat <$> mapM (tableItemToOpenDocument o "TableHeaderRowCell") (zip ns c)
tableBodyToOpenDocument:: PandocMonad m
- => WriterOptions -> [Text] -> Ann.TableBody
+ => WriterOptions -> [Text] -> [Text] -> Ann.TableBody
-> OD m (Doc Text)
-tableBodyToOpenDocument o ns tb =
+tableBodyToOpenDocument o headns bodyns tb =
let (Ann.TableBody _ _ _ r) = tb
- in vcat <$> mapM (tableRowToOpenDocument o ns) r
+ in vcat <$> mapM (tableRowToOpenDocument o headns bodyns) r
tableRowToOpenDocument :: PandocMonad m
- => WriterOptions -> [Text] -> Ann.BodyRow
+ => WriterOptions -> [Text] -> [Text] -> Ann.BodyRow
-> OD m (Doc Text)
-tableRowToOpenDocument o ns r =
+
+tableRowToOpenDocument o headns bodyns r =
let (Ann.BodyRow _ _ rowheaders cs) = r
in inTagsIndented "table:table-row" . vcat <$>
- mapM (tableItemToOpenDocument o "TableRowCell") (zip ns (rowheaders ++ cs))
+ mapM (tableItemToOpenDocument o "TableRowCell")
+ ((zip headns rowheaders) ++ (zip (drop (length rowheaders) bodyns) cs))
colspanAttrib :: ColSpan -> [(Text, Text)]
colspanAttrib cs =
diff --git a/test/command/8764.md b/test/command/8764.md
index e5fe43d25..919f8c738 100644
--- a/test/command/8764.md
+++ b/test/command/8764.md
@@ -21,7 +21,7 @@
<table:table-column table:style-name="Table1.C" />
<table:table-row>
<table:table-cell table:style-name="TableRowCell" office:value-type="string">
- <text:p text:style-name="Table_20_Contents">Header</text:p>
+ <text:p text:style-name="Table_20_Heading">Header</text:p>
</table:table-cell>
<table:table-cell table:style-name="TableRowCell" office:value-type="string">
<text:p text:style-name="Table_20_Contents">Normal cell (column
@@ -34,7 +34,7 @@
</table:table-row>
<table:table-row>
<table:table-cell table:style-name="TableRowCell" office:value-type="string">
- <text:p text:style-name="Table_20_Contents">Normal cell (column
+ <text:p text:style-name="Table_20_Heading">Normal cell (column
1)</text:p>
</table:table-cell>
<table:table-cell table:style-name="TableRowCell" office:value-type="string">