diff options
Diffstat (limited to 'src/Text/Pandoc/Writers')
-rw-r--r-- | src/Text/Pandoc/Writers/OpenDocument.hs | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Writers/OpenDocument.hs b/src/Text/Pandoc/Writers/OpenDocument.hs index 8f0e037c5..444a09587 100644 --- a/src/Text/Pandoc/Writers/OpenDocument.hs +++ b/src/Text/Pandoc/Writers/OpenDocument.hs @@ -36,6 +36,7 @@ import Text.Pandoc.XML import Text.Pandoc.Shared (linesToPara) import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Readers.TeXMath +import Text.Pandoc.Readers.Odt.StyleReader import Text.Pandoc.Pretty import Text.Printf ( printf ) import Control.Arrow ( (***), (>>>) ) @@ -307,9 +308,7 @@ blockToOpenDocument o bs else inParagraphTags =<< inlinesToOpenDocument o b | Para [Image attr c (s,'f':'i':'g':':':t)] <- bs = figure attr c s t - | Para b <- bs = if null b - then return empty - else inParagraphTags =<< inlinesToOpenDocument o b + | Para b <- bs = paragraph b | LineBlock b <- bs = blockToOpenDocument o $ linesToPara b | Div _ xs <- bs = blocksToOpenDocument o xs | Header i _ b <- bs = setFirstPara >> @@ -370,6 +369,22 @@ blockToOpenDocument o bs captionDoc <- withParagraphStyle o "FigureCaption" [Para caption] return $ imageDoc $$ captionDoc + endsWithPageBreak [] = False + endsWithPageBreak [PageBreak] = True + endsWithPageBreak (_ : xs) = endsWithPageBreak xs + + paragraph :: [Inline] -> State WriterState Doc + paragraph [] = return empty + paragraph (PageBreak : rest) | endsWithPageBreak rest = paraWithBreak PageBoth rest + paragraph (PageBreak : rest) = paraWithBreak PageBefore rest + paragraph inlines | endsWithPageBreak inlines = paraWithBreak PageAfter inlines + paragraph inlines = inParagraphTags =<< inlinesToOpenDocument o inlines + + paraWithBreak :: ParaBreak -> [Inline] -> State WriterState Doc + paraWithBreak breakKind bs = do + pn <- paraBreakStyle breakKind + withParagraphStyle o ("P" ++ show pn) [Para bs] + colHeadsToOpenDocument :: WriterOptions -> String -> [String] -> [[Block]] -> State WriterState Doc colHeadsToOpenDocument o tn ns hs = inTagsIndented "table:table-header-rows" . inTagsIndented "table:table-row" . vcat <$> @@ -562,6 +577,13 @@ paraStyle attrs = do addParaStyle $ inTags True "style:style" (styleAttr ++ attrs) paraProps return pn +paraBreakStyle :: ParaBreak -> State WriterState Int +paraBreakStyle PageBefore = paraStyle "Text_20_body" [("fo:break-before", "page")] +paraBreakStyle PageAfter = paraStyle "Text_20_body" [("fo:break-after", "page")] +paraBreakStyle PageBoth = paraStyle "Text_20_body" [("fo:break-before", "page"), ("fo:break-after", "page")] +paraBreakStyle AutoNone = paraStyle "Text_20_body" [] + + paraListStyle :: Int -> State WriterState Int paraListStyle l = paraStyle [("style:parent-style-name","Text_20_body") |