From 9abcb4f2010348ae7d25a2199d8e7fcb91a6315d Mon Sep 17 00:00:00 2001 From: Jesse Rosenthal <jrosenthal@jhu.edu> Date: Tue, 27 Feb 2018 10:19:35 -0500 Subject: [PATCH] Powerpoint writer: Use table styles This will use the default table style in the reference-doc file. As a result they will be easier when using in a template, and match the color scheme. --- src/Text/Pandoc/Writers/Powerpoint/Output.hs | 20 ++++++++++++++++--- test/pptx/tables.pptx | Bin 27175 -> 27282 bytes test/pptx/tables_templated.pptx | Bin 394504 -> 394610 bytes 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Text/Pandoc/Writers/Powerpoint/Output.hs b/src/Text/Pandoc/Writers/Powerpoint/Output.hs index b5138b514..410b6c20c 100644 --- a/src/Text/Pandoc/Writers/Powerpoint/Output.hs +++ b/src/Text/Pandoc/Writers/Powerpoint/Output.hs @@ -930,6 +930,13 @@ graphicFrameToElements layout tbls caption = do return [graphicFrameElts, capElt] else return [graphicFrameElts] +getDefaultTableStyle :: PandocMonad m => P m (Maybe String) +getDefaultTableStyle = do + refArchive <- asks envRefArchive + distArchive <- asks envDistArchive + tblStyleLst <- parseXml refArchive distArchive "ppt/tableStyles.xml" + return $ findAttr (QName "def" Nothing Nothing) tblStyleLst + graphicToElement :: PandocMonad m => Integer -> Graphic -> P m Element graphicToElement tableWidth (Tbl tblPr hdrCells rows) = do let colWidths = if null hdrCells @@ -967,12 +974,19 @@ graphicToElement tableWidth (Tbl tblPr hdrCells rows) = do let mkgridcol w = mknode "a:gridCol" [("w", show ((12700 * w) :: Integer))] () let hasHeader = not (all null hdrCells) + + mbDefTblStyle <- getDefaultTableStyle + let tblPrElt = mknode "a:tblPr" + [ ("firstRow", if tblPrFirstRow tblPr then "1" else "0") + , ("bandRow", if tblPrBandRow tblPr then "1" else "0") + ] (case mbDefTblStyle of + Nothing -> [] + Just sty -> [mknode "a:tableStyleId" [] sty]) + return $ mknode "a:graphic" [] $ [mknode "a:graphicData" [("uri", "http://schemas.openxmlformats.org/drawingml/2006/table")] $ [mknode "a:tbl" [] $ - [ mknode "a:tblPr" [ ("firstRow", if tblPrFirstRow tblPr then "1" else "0") - , ("bandRow", if tblPrBandRow tblPr then "1" else "0") - ] () + [ tblPrElt , mknode "a:tblGrid" [] (if all (==0) colWidths then [] else map mkgridcol colWidths) diff --git a/test/pptx/tables.pptx b/test/pptx/tables.pptx index 0e8aea9ba38bbd52eaeacf8daaae0c50177cb05f..c3e215a301bdc75a11af5cc5d47ad0a82f3404e4 100644 GIT binary patch delta 3175 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 delta 3046 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 diff --git a/test/pptx/tables_templated.pptx b/test/pptx/tables_templated.pptx index 0ae560ad3f5fcd4722e4c7dbf6369c102283ef9d..46f72edabca657327df669f6cf6e97eb7dcb132a 100644 GIT binary patch delta 2894 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 JFahY>`!7Eh-~0do delta 2643 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