diff options
| author | John MacFarlane <jgm@berkeley.edu> | 2023-12-17 11:32:27 -0800 |
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2023-12-17 11:32:27 -0800 |
| commit | 3abbf97d0bfb17c6ffe26ff8079b93f5cf2faa5d (patch) | |
| tree | b0103a540820df383935801dc34f759f3aab45f3 /src | |
| parent | 5875de3f86fc05b1741f30eb30130892629e067f (diff) | |
Docx writer: don't emit empty rows.
These (`<w:tr />`) seem to cause problems for word. Closes #9224.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Writers/Docx.hs | 2 | ||||
| -rw-r--r-- | src/Text/Pandoc/Writers/Docx/Table.hs | 23 |
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]) |
