git.iko.soy/typeable/pandoc
on master help sign in
Handle \address and \signature in letter environment. Closes #393.
commit4257b9aff59c800e86658a64bd59101b11719967 authorJohn MacFarlane <fiddlosopher@gmail.com> dateSat 4 Feb 2012, 20:02 (15 years ago) parent1fc57ed
1 file changed+19−2
src/Text/Pandoc/Readers/LaTeX.hs+19−2
src/Text/Pandoc/Readers/LaTeX.hs+19−2
@@ -205,6 +205,9 @@ blockCommands = M.fromList
205205 , ("title", mempty <$ (tok >>= addTitle))
206206 , ("subtitle", mempty <$ (tok >>= addSubtitle))
207207 , ("author", mempty <$ authors)
208+ -- in letter class, temp. store address & sig as title, author
209+ , ("address", mempty <$ (tok >>= addTitle))
210+ , ("signature", mempty <$ authors)
208211 , ("date", mempty <$ (tok >>= addDate))
209212 , ("maketitle", pure mempty)
210213 -- \ignore{} is used conventionally in literate haskell for definitions
@@ -345,7 +348,7 @@ inlineCommands = M.fromList
345348 , (".", option (str ".") $ try $ tok >>= accent dot)
346349 , ("=", option (str "=") $ try $ tok >>= accent macron)
347350 , ("i", lit "i")
348− , ("\\", linebreak <$ optional (bracketed inline *> optional sp))
351+ , ("\\", linebreak <$ (optional (bracketed inline) *> optional sp))
349352 , (",", pure mempty)
350353 , ("@", pure mempty)
351354 , (" ", lit "\160")
@@ -620,7 +623,7 @@ rawLaTeXInline = do
620623environments :: M.Map String (LP Blocks)
621624environments = M.fromList
622625 [ ("document", env "document" blocks)
623− , ("letter", env "letter" blocks)
626+ , ("letter", env "letter" letter_contents)
624627 , ("center", env "center" blocks)
625628 , ("tabular", env "tabular" simpTable)
626629 , ("quote", blockQuote <$> env "quote" blocks)
@@ -649,6 +652,20 @@ environments = M.fromList
649652 , ("alignat*", mathEnv (Just "aligned*") "alignat*")
650653 ]
651654
655+letter_contents :: LP Blocks
656+letter_contents = do
657+ bs <- blocks
658+ st <- getState
659+ -- add signature (author) and address (title)
660+ let addr = case stateTitle st of
661+ [] -> mempty
662+ x -> para $ fromList x
663+ let sigs = case stateAuthors st of
664+ [] -> mempty
665+ xs -> para $ fromList $ intercalate [LineBreak] xs
666+ updateState $ \s -> s{ stateAuthors = [], stateTitle = [] }
667+ return $ addr <> bs <> sigs
668+
652669item :: LP Blocks
653670item = blocks *> controlSeq "item" *> optional opt *> blocks
654671