summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2023-12-17 11:32:27 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2023-12-17 11:32:27 -0800
commit3abbf97d0bfb17c6ffe26ff8079b93f5cf2faa5d (patch)
treeb0103a540820df383935801dc34f759f3aab45f3
parent5875de3f86fc05b1741f30eb30130892629e067f (diff)
Docx writer: don't emit empty rows.
These (`<w:tr />`) seem to cause problems for word. Closes #9224.
-rw-r--r--src/Text/Pandoc/Writers/Docx.hs2
-rw-r--r--src/Text/Pandoc/Writers/Docx/Table.hs23
2 files changed, 14 insertions, 11 deletions
diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs
index 989518004..1a2cc79a4 100644
--- a/src/Text/Pandoc/Writers/Docx.hs
+++ b/src/Text/Pandoc/Writers/Docx.hs
@@ -1074,7 +1074,7 @@ toFigureTable opts blks = do
[]
)
: mknode "w:tblGrid" [] gridCols
- : [tblBody]
+ : (maybeToList tblBody)
)
modify $ \s -> s { stInTable = False }
return $ Elem tbl
diff --git a/src/Text/Pandoc/Writers/Docx/Table.hs b/src/Text/Pandoc/Writers/Docx/Table.hs
index 70a2f66ed..d80426da3 100644
--- a/src/Text/Pandoc/Writers/Docx/Table.hs
+++ b/src/Text/Pandoc/Writers/Docx/Table.hs
@@ -22,6 +22,7 @@ import Control.Monad ( unless , zipWithM )
import Control.Monad.Except ( throwError )
import Data.Array ( elems, (!), assocs, indices )
import Data.Text (Text)
+import Data.Maybe (catMaybes)
import Text.Pandoc.Definition
( ColSpec,
Caption(Caption),
@@ -189,7 +190,7 @@ cellGridToOpenXML blocksToOpenXML rowType aligns part@(Part _ cellArray _) =
if null (elems cellArray)
then return mempty
else partToRows rowType aligns part >>=
- mapM (rowToOpenXML blocksToOpenXML)
+ fmap catMaybes . mapM (rowToOpenXML blocksToOpenXML)
data OOXMLCell
= OOXMLCell Attr Alignment RowSpan ColSpan [Block]
@@ -228,15 +229,17 @@ partToRows rowType aligns part = do
rowToOpenXML :: PandocMonad m
=> ([Block] -> WS m [Content])
-> OOXMLRow
- -> WS m Element
-rowToOpenXML blocksToOpenXML (OOXMLRow rowType _attr cells) = do
- xmlcells <- mapM (ooxmlCellToOpenXML blocksToOpenXML) cells
- let addTrPr = case rowType of
- HeadRow -> (mknode "w:trPr" []
- [mknode "w:tblHeader" [("w:val", "true")] ()] :)
- BodyRow -> id
- FootRow -> id
- return $ mknode "w:tr" [] (addTrPr xmlcells)
+ -> WS m (Maybe Element)
+rowToOpenXML blocksToOpenXML (OOXMLRow rowType _attr cells)
+ | null cells = return Nothing
+ | otherwise = do
+ xmlcells <- mapM (ooxmlCellToOpenXML blocksToOpenXML) cells
+ let addTrPr = case rowType of
+ HeadRow -> (mknode "w:trPr" []
+ [mknode "w:tblHeader" [("w:val", "true")] ()] :)
+ BodyRow -> id
+ FootRow -> id
+ return $ Just $ mknode "w:tr" [] (addTrPr xmlcells)
ooxmlCellToOpenXML :: PandocMonad m
=> ([Block] -> WS m [Content])