@@ -1,4 +1,5 @@
11{-# LANGUAGE FlexibleContexts #-}
2+{-# LANGUAGE LambdaCase #-}
23{-# LANGUAGE OverloadedStrings #-}
34{-# LANGUAGE PatternGuards #-}
45{-# LANGUAGE ViewPatterns #-}
@@ -372,36 +373,32 @@ blocksToOpenDocument o b = vcat <$> mapM (blockToOpenDocument o) b
372373
373374-- | Convert a Pandoc block element to OpenDocument.
374375blockToOpenDocument :: PandocMonad m => WriterOptions -> Block -> OD m (Doc Text)
375−blockToOpenDocument o bs
376− | Plain b <- bs = if null b
377− then return empty
378− else inParagraphTags =<< inlinesToOpenDocument o b
379− | Para [Image attr c (s,T.stripPrefix "fig:" -> Just t)] <- bs
380− = figure attr c s t
381− | Para b <- bs = if null b &&
382− not (isEnabled Ext_empty_paragraphs o)
383− then return empty
384− else inParagraphTags =<< inlinesToOpenDocument o b
385− | LineBlock b <- bs = blockToOpenDocument o $ linesToPara b
386− | Div attr xs <- bs = mkDiv attr xs
387− | Header i (ident,_,_) b
388− <- bs = setFirstPara >> (inHeaderTags i ident
389− =<< inlinesToOpenDocument o b)
390− | BlockQuote b <- bs = setFirstPara >> mkBlockQuote b
391− | DefinitionList b <- bs = setFirstPara >> defList b
392− | BulletList b <- bs = setFirstPara >> bulletListToOpenDocument o b
393− | OrderedList a b <- bs = setFirstPara >> orderedList a b
394− | CodeBlock _ s <- bs = setFirstPara >> preformatted s
395− | Table a bc s th tb tf <- bs = setFirstPara >> table (Ann.toTable a bc s th tb tf)
396− | HorizontalRule <- bs = setFirstPara >> return (selfClosingTag "text:p"
397− [ ("text:style-name", "Horizontal_20_Line") ])
398− | RawBlock f s <- bs = if f == Format "opendocument"
399− then return $ text $ T.unpack s
400− else do
401− report $ BlockNotRendered bs
402− return empty
403− | Null <- bs = return empty
404− | otherwise = return empty
376+blockToOpenDocument o = \case
377+ Plain b -> if null b
378+ then return empty
379+ else inParagraphTags =<< inlinesToOpenDocument o b
380+ Para [Image attr c (s,T.stripPrefix "fig:" -> Just t)] -> figure attr c s t
381+ Para b -> if null b &&
382+ not (isEnabled Ext_empty_paragraphs o)
383+ then return empty
384+ else inParagraphTags =<< inlinesToOpenDocument o b
385+ LineBlock b -> blockToOpenDocument o $ linesToPara b
386+ Div attr xs -> mkDiv attr xs
387+ Header i (ident,_,_) b -> do
388+ setFirstPara
389+ inHeaderTags i ident =<< inlinesToOpenDocument o b
390+ BlockQuote b -> setFirstPara >> mkBlockQuote b
391+ DefinitionList b -> setFirstPara >> defList b
392+ BulletList b -> setFirstPara >> bulletListToOpenDocument o b
393+ OrderedList a b -> setFirstPara >> orderedList a b
394+ CodeBlock _ s -> setFirstPara >> preformatted s
395+ Table a bc s th tb tf -> setFirstPara >> table (Ann.toTable a bc s th tb tf)
396+ HorizontalRule -> setFirstPara >> return (selfClosingTag "text:p"
397+ [ ("text:style-name", "Horizontal_20_Line") ])
398+ b@(RawBlock f s) -> if f == Format "opendocument"
399+ then return $ text $ T.unpack s
400+ else empty <$ report (BlockNotRendered b)
401+ Null -> return empty
405402 where
406403 defList b = do setInDefinitionList True
407404 r <- vcat <$> mapM (deflistItemToOpenDocument o) b
@@ -874,27 +871,26 @@ data TextStyle = Italic
874871textStyleAttr :: Map.Map Text Text
875872 -> TextStyle
876873 -> Map.Map Text Text
877−textStyleAttr m s
878− | Italic <- s = Map.insert "fo:font-style" "italic" .
879− Map.insert "style:font-style-asian" "italic" .
880− Map.insert "style:font-style-complex" "italic" $ m
881− | Bold <- s = Map.insert "fo:font-weight" "bold" .
882− Map.insert "style:font-weight-asian" "bold" .
883− Map.insert "style:font-weight-complex" "bold" $ m
884− | Under <- s = Map.insert "style:text-underline-style" "solid" .
885− Map.insert "style:text-underline-width" "auto" .
886− Map.insert "style:text-underline-color" "font-color" $ m
887− | Strike <- s = Map.insert "style:text-line-through-style" "solid" m
888− | Sub <- s = Map.insert "style:text-position" "sub 58%" m
889− | Sup <- s = Map.insert "style:text-position" "super 58%" m
890− | SmallC <- s = Map.insert "fo:font-variant" "small-caps" m
891− | Pre <- s = Map.insert "style:font-name" "Courier New" .
892− Map.insert "style:font-name-asian" "Courier New" .
893− Map.insert "style:font-name-complex" "Courier New" $ m
894− | Language lang <- s
895− = Map.insert "fo:language" (langLanguage lang) .
896− maybe id (Map.insert "fo:country") (langRegion lang) $ m
897− | otherwise = m
874+textStyleAttr m = \case
875+ Italic -> Map.insert "fo:font-style" "italic" .
876+ Map.insert "style:font-style-asian" "italic" .
877+ Map.insert "style:font-style-complex" "italic" $ m
878+ Bold -> Map.insert "fo:font-weight" "bold" .
879+ Map.insert "style:font-weight-asian" "bold" .
880+ Map.insert "style:font-weight-complex" "bold" $ m
881+ Under -> Map.insert "style:text-underline-style" "solid" .
882+ Map.insert "style:text-underline-width" "auto" .
883+ Map.insert "style:text-underline-color" "font-color" $ m
884+ Strike -> Map.insert "style:text-line-through-style" "solid" m
885+ Sub -> Map.insert "style:text-position" "sub 58%" m
886+ Sup -> Map.insert "style:text-position" "super 58%" m
887+ SmallC -> Map.insert "fo:font-variant" "small-caps" m
888+ Pre -> Map.insert "style:font-name" "Courier New" .
889+ Map.insert "style:font-name-asian" "Courier New" .
890+ Map.insert "style:font-name-complex" "Courier New" $ m
891+ Language lang ->
892+ Map.insert "fo:language" (langLanguage lang) .
893+ maybe id (Map.insert "fo:country") (langRegion lang) $ m
898894
899895withLangFromAttr :: PandocMonad m => Attr -> OD m a -> OD m a
900896withLangFromAttr (_,_,kvs) action =