From e24ce1c11da99b69c14f094ef04ed00d75c79a37 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 12 Mar 2011 13:36:22 -0800 Subject: [PATCH] OpenDocument: Use special style for 1st para after heading. "First paragraph" as opposed to "Text body." This allows users to specify e.g. that only paragraphs after the first paragraph of a section are to be indented. Thanks to Andrea Rossato for the patch. Closes github Issue #20. --- reference.odt | Bin 9572 -> 9720 bytes src/Text/Pandoc/Writers/OpenDocument.hs | 33 ++++++++++------ tests/writer.opendocument | 48 ++++++++++++------------ 3 files changed, 46 insertions(+), 35 deletions(-) diff --git a/reference.odt b/reference.odt index 64a74493bba53ac6a01391f23298314e31678c25..32e14f8b4936bd2e23854315e9001abf78e5e19e 100644 GIT binary patch literal 9720 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 literal 9572 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 Doc -> Doc @@ -111,10 +113,15 @@ inTightList f = modify (\s -> s { stTight = True }) >> f >>= \r -> setInDefinitionList :: Bool -> State WriterState () setInDefinitionList b = modify $ \s -> s { stInDefinition = b } -inParagraphTags :: Doc -> Doc -inParagraphTags d | isEmpty d = empty -inParagraphTags d = - inTags False "text:p" [("text:style-name", "Text_20_body")] d +inParagraphTags :: Doc -> State WriterState Doc +inParagraphTags d | isEmpty d = return empty +inParagraphTags d = do + b <- gets stFirstPara + a <- if b + then do modify $ \st -> st { stFirstPara = False } + return $ [("text:style-name", "First_20_paragraph")] + else return [("text:style-name", "Text_20_body")] + return $ inTags False "text:p" a d inParagraphTagsWithStyle :: String -> Doc -> Doc inParagraphTagsWithStyle sty = inTags False "text:p" [("text:style-name", sty)] @@ -138,9 +145,11 @@ inTextStyle d = do $ selfClosingTag "style:text-properties" (concatMap snd $ Map.toList at) return $ inTags False "text:span" [("text:style-name","T" ++ show tn)] d -inHeaderTags :: Int -> Doc -> Doc -inHeaderTags i = inTags False "text:h" [ ("text:style-name", "Heading_20_" ++ show i) - , ("text:outline-level", show i)] +inHeaderTags :: Int -> Doc -> State WriterState Doc +inHeaderTags i d = do + modify $ \st -> st { stFirstPara = True } + return $ inTags False "text:h" [ ("text:style-name", "Heading_20_" ++ show i) + , ("text:outline-level", show i)] d inQuotes :: QuoteType -> Doc -> Doc inQuotes SingleQuote s = text "‘" <> s <> text "’" @@ -164,7 +173,7 @@ writeOpenDocument :: WriterOptions -> Pandoc -> String writeOpenDocument opts (Pandoc (Meta title authors date) blocks) = let ((doc, title', authors', date'),s) = flip runState defaultWriterState $ do - title'' <- inlinesToOpenDocument opts title + title'' <- inlinesToOpenDocument opts title authors'' <- mapM (inlinesToOpenDocument opts) authors date'' <- inlinesToOpenDocument opts date doc'' <- blocksToOpenDocument opts blocks @@ -274,9 +283,9 @@ blocksToOpenDocument o b = vcat <$> mapM (blockToOpenDocument o) b -- | Convert a Pandoc block element to OpenDocument. blockToOpenDocument :: WriterOptions -> Block -> State WriterState Doc blockToOpenDocument o bs - | Plain b <- bs = inParagraphTags <$> inlinesToOpenDocument o b - | Para b <- bs = inParagraphTags <$> inlinesToOpenDocument o b - | Header i b <- bs = inHeaderTags i <$> inlinesToOpenDocument o b + | Plain b <- bs = inParagraphTags =<< inlinesToOpenDocument o b + | Para b <- bs = inParagraphTags =<< inlinesToOpenDocument o b + | Header i b <- bs = inHeaderTags i =<< inlinesToOpenDocument o b | BlockQuote b <- bs = mkBlockQuote b | CodeBlock _ s <- bs = preformatted s | RawBlock _ _ <- bs = return empty @@ -388,7 +397,7 @@ inlineToOpenDocument o ils let footNote t = inTags False "text:note" [ ("text:id" , "ftn" ++ show n) , ("text:note-class", "footnote" )] $ - inTagsSimple "text:note-citation" (text . show $ n + 1) <> + inTagsSimple "text:note-citation" (text . show $ n + 1) <> inTagsSimple "text:note-body" t nn <- footNote <$> withParagraphStyle o "Footnote" l addNote nn diff --git a/tests/writer.opendocument b/tests/writer.opendocument index 05d45792a..6a9c18c1f 100644 --- a/tests/writer.opendocument +++ b/tests/writer.opendocument @@ -874,12 +874,12 @@ link Level 2 with emphasis Level 3 -with no blank line +with no blank line Level 2 -with no blank line +with no blank line Paragraphs -Here’s a regular +Here’s a regular paragraph. In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle @@ -891,7 +891,7 @@ breakhere. Block Quotes -E-mail style: +E-mail style: This is a block quote. It is pretty short. Code in a block quote: @@ -916,7 +916,7 @@ short. Code Blocks -Code: +Code: ---- (should be four hyphens) sub status { @@ -931,7 +931,7 @@ Blocks Lists Unordered -Asterisks tight: +Asterisks tight: asterisk 1 @@ -1004,7 +1004,7 @@ Blocks Ordered -Tight: +Tight: First @@ -1080,7 +1080,7 @@ Blocks -Here’s another: +Here’s another: First @@ -1176,7 +1176,7 @@ markers -Nesting: +Nesting: Upper Alpha @@ -1217,7 +1217,7 @@ markers Definition Lists -Tight using spaces: +Tight using spaces: apple red fruit orange @@ -1282,7 +1282,8 @@ fruit HTML Blocks -Simple block on one line: +Simple block on one +line: foo And nested without indentation: @@ -1318,7 +1319,7 @@ spaces on the line: Inline Markup -This is +This is emphasized, and so is this. @@ -1365,8 +1366,8 @@ subscripts, because of the unescaped spaces: a^b c^d, a~b c~d. Smart quotes, ellipses, dashes -“Hello,” said the spider. -“‘Shelob’ is my name.” +“Hello,” said the +spider. “‘Shelob’ is my name.” ‘A’, ‘B’, and ‘C’ are letters. ‘Oak,’ ‘elm,’ @@ -1413,7 +1414,8 @@ three—four — five. α + ω × x2. -These shouldn’t be math: +These shouldn’t be +math: To get the famous equation, write @@ -1441,7 +1443,7 @@ three—four — five. Special Characters -Here is some unicode: +Here is some unicode: I hat: Î @@ -1485,7 +1487,7 @@ it. Links Explicit -Just a +Just a URL. URL and title. @@ -1502,7 +1504,7 @@ and title link Empty. Reference -Foo +Foo bar. Foo bar. @@ -1527,7 +1529,7 @@ by itself should be a link. biz. With ampersands -Here’s a +Here’s a link with an ampersand in the URL. Here’s a link with an amersand in @@ -1540,7 +1542,7 @@ link. inline link in pointy braces. Autolinks -With an ampersand: +With an ampersand: http://example.com/?foo=1&bar=2 @@ -1562,15 +1564,15 @@ link in pointy braces. or here: <http://example.com/> Images -From “Voyage dans la Lune” -by Georges Melies (1902): +From “Voyage dans la +Lune” by Georges Melies (1902): Here is a movie icon. Footnotes -Here is a footnote +Here is a footnote reference,1Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.