@@ -21,10 +21,10 @@ import Prelude
2121import Control.Applicative ((<|>))
2222import Control.Monad.State.Strict
2323import Data.Monoid (Any(..))
24−import Data.Aeson (FromJSON, object, (.=))
24+import Data.Aeson (object, (.=))
2525import Data.Char (isAlphaNum, isAscii, isDigit, isLetter, isSpace,
2626 isPunctuation, ord, toLower)
27−import Data.List (foldl', intercalate, intersperse, isInfixOf, nubBy,
27+import Data.List (foldl', intercalate, intersperse, nubBy,
2828 stripPrefix, (\\), uncons)
2929import Data.Maybe (catMaybes, fromMaybe, isJust, mapMaybe, isNothing)
3030import qualified Data.Map as M
@@ -45,7 +45,6 @@ import Text.Pandoc.Slides
4545import Text.Pandoc.Templates
4646import Text.Pandoc.Walk
4747import Text.Pandoc.Writers.Shared
48−import qualified Text.Parsec as P
4948import Text.Printf (printf)
5049import qualified Data.Text.Normalize as Normalize
5150
@@ -131,7 +130,6 @@ pandocToLaTeX options (Pandoc meta blocks) = do
131130 let isInternalLink (Link _ _ ('#':xs,_)) = [xs]
132131 isInternalLink _ = []
133132 modify $ \s -> s{ stInternalLinks = query isInternalLink blocks' }
134− let template = fromMaybe "" $ writerTemplate options
135133 let colwidth = if writerWrapText options == WrapAuto
136134 then Just $ writerColumns options
137135 else Nothing
@@ -149,26 +147,17 @@ pandocToLaTeX options (Pandoc meta blocks) = do
149147 case lookup "documentclass" (writerVariables options) `mplus`
150148 fmap stringify (lookupMeta "documentclass" meta) of
151149 Just x -> x
152− Nothing ->
153− case P.parse pDocumentClass "template" template of
154− Right r -> r
155− Left _
156− | beamer -> "beamer"
157− | otherwise -> case writerTopLevelDivision options of
158− TopLevelPart -> "book"
159− TopLevelChapter -> "book"
160− _ -> "article"
150+ Nothing | beamer -> "beamer"
151+ | otherwise -> case writerTopLevelDivision options of
152+ TopLevelPart -> "book"
153+ TopLevelChapter -> "book"
154+ _ -> "article"
161155 when (documentClass `elem` chaptersClasses) $
162156 modify $ \s -> s{ stHasChapters = True }
163− -- check for \usepackage...{csquotes}; if present, we'll use
164− -- \enquote{...} for smart quotes:
165− let headerIncludesField :: FromJSON a => Maybe a
166− headerIncludesField = getField "header-includes" metadata
167− let headerIncludes = fromMaybe [] $ mplus
168− (fmap return headerIncludesField)
169− headerIncludesField
170− when (any (isInfixOf "{csquotes}") (template : headerIncludes)) $
171− modify $ \s -> s{stCsquotes = True}
157+ case T.toLower <$> getField "csquotes" metadata of
158+ Nothing -> return ()
159+ Just "false" -> return ()
160+ Just _ -> modify $ \s -> s{stCsquotes = True}
172161 let (blocks'', lastHeader) = if writerCiteMethod options == Citeproc then
173162 (blocks', [])
174163 else case reverse blocks' of
@@ -288,9 +277,10 @@ pandocToLaTeX options (Pandoc meta blocks) = do
288277 $
289278 defField "latex-dir-rtl"
290279 (getField "dir" context == Just ("rtl" :: String)) context
291− case writerTemplate options of
292− Nothing -> return main
293− Just tpl -> renderTemplate' tpl context'
280+ return $
281+ case writerTemplate options of
282+ Nothing -> main
283+ Just tpl -> renderTemplate tpl context'
294284
295285-- | Convert Elements to LaTeX
296286elementToLaTeX :: PandocMonad m => WriterOptions -> Element -> LW m Doc
@@ -1658,22 +1648,3 @@ commonFromBcp47 (Lang l _ _ _) = fromIso l
16581648 fromIso "vi" = "vietnamese"
16591649 fromIso _ = ""
16601650
1661−pDocumentOptions :: P.Parsec String () [String]
1662−pDocumentOptions = do
1663− P.char '['
1664− opts <- P.sepBy
1665− (P.many $ P.spaces *> P.noneOf (" ,]" :: String) <* P.spaces)
1666− (P.char ',')
1667− P.char ']'
1668− return opts
1669−
1670−pDocumentClass :: P.Parsec String () String
1671−pDocumentClass =
1672− do P.skipMany (P.satisfy (/='\\'))
1673− P.string "\\documentclass"
1674− classOptions <- pDocumentOptions <|> return []
1675− if ("article" :: String) `elem` classOptions
1676− then return "article"
1677− else do P.skipMany (P.satisfy (/='{'))
1678− P.char '{'
1679− P.manyTill P.letter (P.char '}')