git.iko.soy/typeable/pandoc
on master help sign in
LaTeX writer: Fixed detection of 'chapters' from template.
075ad9aJohn MacFarlane
src/Text/Pandoc/Writers/LaTeX.hs+11−3
@@ -45,6 +45,7 @@ import Data.Maybe ( fromMaybe )
45import Data.Aeson.Types ( (.:), parseMaybe, withObject )
45import Data.Aeson.Types ( (.:), parseMaybe, withObject )
46import Control.Applicative ((<|>))
46import Control.Applicative ((<|>))
47import Control.Monad.State
47import Control.Monad.State
48+import qualified Text.Parsec as P
48import Text.Pandoc.Pretty
49import Text.Pandoc.Pretty
49import Text.Pandoc.Slides
50import Text.Pandoc.Slides
50import Text.Pandoc.Highlighting (highlight, styleToLaTeX,
51import Text.Pandoc.Highlighting (highlight, styleToLaTeX,
@@ -111,13 +112,20 @@ pandocToLaTeX options (Pandoc meta blocks) = do
111 (fmap (render colwidth) . inlineListToLaTeX)
112 (fmap (render colwidth) . inlineListToLaTeX)
112 meta
113 meta
113 let bookClasses = ["memoir","book","report","scrreprt","scrbook"]
114 let bookClasses = ["memoir","book","report","scrreprt","scrbook"]
115+ let documentClass = case P.parse (do P.skipMany (P.satisfy (/='\\'))
116+ P.string "\\documentclass"
117+ P.skipMany (P.satisfy (/='{'))
118+ P.char '{'
119+ P.manyTill P.letter (P.char '}')) "template"
120+ template of
121+ Right r -> r
122+ Left _ -> ""
114 case lookup "documentclass" (writerVariables options) `mplus`
123 case lookup "documentclass" (writerVariables options) `mplus`
115 parseMaybe (withObject "object" (.: "documentclass")) metadata of
124 parseMaybe (withObject "object" (.: "documentclass")) metadata of
116 Just x | x `elem` bookClasses -> modify $ \s -> s{stBook = True}
125 Just x | x `elem` bookClasses -> modify $ \s -> s{stBook = True}
117 | otherwise -> return ()
126 | otherwise -> return ()
118− Nothing | any (\x -> "\\documentclass" `isPrefixOf` x &&
127+ Nothing | documentClass `elem` bookClasses
119− (any (`isSuffixOf` x) bookClasses))
120− (lines template) -> modify $ \s -> s{stBook = True}
128+ -> modify $ \s -> s{stBook = True}
121 | otherwise -> return ()
129 | otherwise -> return ()
122 -- check for \usepackage...{csquotes}; if present, we'll use
130 -- check for \usepackage...{csquotes}; if present, we'll use
123 -- \enquote{...} for smart quotes:
131 -- \enquote{...} for smart quotes: