git.iko.soy/typeable/pandoc
on master help sign in
Checkpoint
commit4e26a5cd3282698a0a86cc9c6115604cbf31a4fc authorJohn MacFarlane <jgm@berkeley.edu> dateSun 2 Jul 2017, 17:37 (9 years ago) parentd23489a
1 file changed+105−91
src/Text/Pandoc/Readers/LaTeX.hs+105−91
src/Text/Pandoc/Readers/LaTeX.hs+105−91
@@ -1230,9 +1230,113 @@ blockCommands = M.fromList $
12301230 , "pagebreak"
12311231 ]
12321232
1233+environments :: PandocMonad m => M.Map Text (LP m Blocks)
1234+environments = M.fromList
1235+ [ ("document", env "document" blocks)
1236+-- , ("abstract", mempty <$ (env "abstract" blocks >>= addMeta "abstract"))
1237+-- , ("letter", env "letter" letterContents)
1238+-- , ("minipage", env "minipage" $
1239+-- skipopts *> spaces' *> optional braced *> spaces' *> blocks)
1240+-- , ("figure", env "figure" $ skipopts *> figure)
1241+-- , ("subfigure", env "subfigure" $ skipopts *> tok *> figure)
1242+-- , ("center", env "center" blocks)
1243+-- , ("longtable", env "longtable" $
1244+-- resetCaption *> simpTable "longtable" False >>= addTableCaption)
1245+-- , ("table", env "table" $
1246+-- resetCaption *> skipopts *> blocks >>= addTableCaption)
1247+-- , ("tabular*", env "tabular" $ simpTable "tabular*" True)
1248+-- , ("tabularx", env "tabularx" $ simpTable "tabularx" True)
1249+-- , ("tabular", env "tabular" $ simpTable "tabular" False)
1250+-- , ("quote", blockQuote <$> env "quote" blocks)
1251+-- , ("quotation", blockQuote <$> env "quotation" blocks)
1252+-- , ("verse", blockQuote <$> env "verse" blocks)
1253+-- , ("itemize", bulletList <$> listenv "itemize" (many item))
1254+-- , ("description", definitionList <$> listenv "description" (many descItem))
1255+-- , ("enumerate", orderedList')
1256+-- , ("alltt", alltt =<< verbEnv "alltt")
1257+-- , ("code", guardEnabled Ext_literate_haskell *>
1258+-- (codeBlockWith ("",["sourceCode","literate","haskell"],[]) <$>
1259+-- verbEnv "code"))
1260+-- , ("comment", mempty <$ verbEnv "comment")
1261+-- , ("verbatim", codeBlock <$> verbEnv "verbatim")
1262+-- , ("Verbatim", fancyverbEnv "Verbatim")
1263+-- , ("BVerbatim", fancyverbEnv "BVerbatim")
1264+-- , ("lstlisting", do attr <- parseListingsOptions <$> option [] keyvals
1265+-- codeBlockWith attr <$> verbEnv "lstlisting")
1266+-- , ("minted", do options <- option [] keyvals
1267+-- lang <- grouped (many1 $ satisfy (/='}'))
1268+-- let kvs = [ (if k == "firstnumber"
1269+-- then "startFrom"
1270+-- else k, v) | (k,v) <- options ]
1271+-- let classes = [ lang | not (null lang) ] ++
1272+-- [ "numberLines" |
1273+-- lookup "linenos" options == Just "true" ]
1274+-- let attr = ("",classes,kvs)
1275+-- codeBlockWith attr <$> verbEnv "minted")
1276+-- , ("obeylines", parseFromString
1277+-- (para . trimInlines . mconcat <$> many inline) =<<
1278+-- intercalate "\\\\\n" . lines <$> verbEnv "obeylines")
1279+-- , ("displaymath", mathEnvWith para Nothing "displaymath")
1280+-- , ("equation", mathEnvWith para Nothing "equation")
1281+-- , ("equation*", mathEnvWith para Nothing "equation*")
1282+-- , ("gather", mathEnvWith para (Just "gathered") "gather")
1283+-- , ("gather*", mathEnvWith para (Just "gathered") "gather*")
1284+-- , ("multline", mathEnvWith para (Just "gathered") "multline")
1285+-- , ("multline*", mathEnvWith para (Just "gathered") "multline*")
1286+-- , ("eqnarray", mathEnvWith para (Just "aligned") "eqnarray")
1287+-- , ("eqnarray*", mathEnvWith para (Just "aligned") "eqnarray*")
1288+-- , ("align", mathEnvWith para (Just "aligned") "align")
1289+-- , ("align*", mathEnvWith para (Just "aligned") "align*")
1290+-- , ("alignat", mathEnvWith para (Just "aligned") "alignat")
1291+-- , ("alignat*", mathEnvWith para (Just "aligned") "alignat*")
1292+-- , ("tikzpicture", rawVerbEnv "tikzpicture")
1293+ ]
1294+
1295+environment :: PandocMonad m => LP m Blocks
1296+environment = do
1297+ controlSeq "begin"
1298+ name <- untokenize <$> braced
1299+ M.findWithDefault mzero name environments
1300+ <|> rawEnv name
1301+
1302+env :: PandocMonad m => Text -> LP m a -> LP m a
1303+env name p = p <*
1304+ (try (controlSeq "end" *> braced >>= guard . (== name) . untokenize)
1305+ <?> ("\\end{" ++ T.unpack name ++ "}"))
1306+
1307+rawEnv :: PandocMonad m => Text -> LP m Blocks
1308+rawEnv name = do
1309+ exts <- getOption readerExtensions
1310+ let parseRaw = extensionEnabled Ext_raw_tex exts
1311+ rawOptions <- mconcat <$> many rawopt
1312+ let beginCommand = "\\begin{" <> name <> "}" <> rawOptions
1313+ pos1 <- getPosition
1314+ (bs, raw) <- withRaw $ env name blocks
1315+ if parseRaw
1316+ then return $ rawBlock "latex"
1317+ $ T.unpack $ beginCommand <> untokenize raw
1318+ else do
1319+ unless parseRaw $ do
1320+ report $ SkippedContent (T.unpack beginCommand) pos1
1321+ pos2 <- getPosition
1322+ report $ SkippedContent ("\\end{" ++ T.unpack name ++ "}") pos2
1323+ return bs
1324+
1325+ -- raw' <- applyMacros' $ beginCommand <> untokenize raw
1326+ -- if raw' /= beginCommand ++ raw
1327+ -- then parseFromString' blocks raw'
1328+ -- else if parseRaw
1329+ -- then return $ rawBlock "latex" $ beginCommand ++ raw'
1330+ -- else do
1331+ -- unless parseRaw $ do
1332+ -- report $ SkippedContent beginCommand pos1
1333+ -- pos2 <- getPosition
1334+ -- report $ SkippedContent ("\\end{" ++ name ++ "}") pos2
1335+ -- return bs
1336+
12331337block :: PandocMonad m => LP m Blocks
12341338block = (mempty <$ spaces1)
1235− -- <|> environment
1339+ <|> environment
12361340 <|> include
12371341 -- <|> macro
12381342 <|> blockCommand
@@ -1314,12 +1418,6 @@ blocks = mconcat <$> many block
13141418-- inlineChar :: PandocMonad m => LP m Char
13151419-- inlineChar = noneOf "\\$%&~#{}^'`\"‘’“”-[] \t\n"
13161420--
1317−-- environment :: PandocMonad m => LP m Blocks
1318−-- environment = do
1319−-- controlSeq "begin"
1320−-- name <- braced
1321−-- M.findWithDefault mzero name environments
1322−-- <|> rawEnv name
13231421--
13241422-- inlineEnvironment :: PandocMonad m => LP m Inlines
13251423-- inlineEnvironment = try $ do
@@ -1327,25 +1425,6 @@ blocks = mconcat <$> many block
13271425-- name <- braced
13281426-- M.findWithDefault mzero name inlineEnvironments
13291427--
1330−-- rawEnv :: PandocMonad m => String -> LP m Blocks
1331−-- rawEnv name = do
1332−-- exts <- getOption readerExtensions
1333−-- let parseRaw = extensionEnabled Ext_raw_tex exts
1334−-- rawOptions <- mconcat <$> many rawopt
1335−-- let beginCommand = "\\begin{" ++ name ++ "}" ++ rawOptions
1336−-- pos1 <- getPosition
1337−-- (bs, raw) <- withRaw $ env name blocks
1338−-- raw' <- applyMacros' $ beginCommand ++ raw
1339−-- if raw' /= beginCommand ++ raw
1340−-- then parseFromString' blocks raw'
1341−-- else if parseRaw
1342−-- then return $ rawBlock "latex" $ beginCommand ++ raw'
1343−-- else do
1344−-- unless parseRaw $ do
1345−-- report $ SkippedContent beginCommand pos1
1346−-- pos2 <- getPosition
1347−-- report $ SkippedContent ("\\end{" ++ name ++ "}") pos2
1348−-- return bs
13491428--
13501429-- rawVerbEnv :: PandocMonad m => String -> LP m Blocks
13511430-- rawVerbEnv name = do
@@ -1398,67 +1477,6 @@ blocks = mconcat <$> many block
13981477-- Nothing -> Table c als ws hs rs
13991478-- go x = return x
14001479--
1401−-- environments :: PandocMonad m => M.Map String (LP m Blocks)
1402−-- environments = M.fromList
1403−-- [ ("document", env "document" blocks <* skipMany anyChar)
1404−-- , ("abstract", mempty <$ (env "abstract" blocks >>= addMeta "abstract"))
1405−-- , ("letter", env "letter" letterContents)
1406−-- , ("minipage", env "minipage" $
1407−-- skipopts *> spaces' *> optional braced *> spaces' *> blocks)
1408−-- , ("figure", env "figure" $ skipopts *> figure)
1409−-- , ("subfigure", env "subfigure" $ skipopts *> tok *> figure)
1410−-- , ("center", env "center" blocks)
1411−-- , ("longtable", env "longtable" $
1412−-- resetCaption *> simpTable "longtable" False >>= addTableCaption)
1413−-- , ("table", env "table" $
1414−-- resetCaption *> skipopts *> blocks >>= addTableCaption)
1415−-- , ("tabular*", env "tabular" $ simpTable "tabular*" True)
1416−-- , ("tabularx", env "tabularx" $ simpTable "tabularx" True)
1417−-- , ("tabular", env "tabular" $ simpTable "tabular" False)
1418−-- , ("quote", blockQuote <$> env "quote" blocks)
1419−-- , ("quotation", blockQuote <$> env "quotation" blocks)
1420−-- , ("verse", blockQuote <$> env "verse" blocks)
1421−-- , ("itemize", bulletList <$> listenv "itemize" (many item))
1422−-- , ("description", definitionList <$> listenv "description" (many descItem))
1423−-- , ("enumerate", orderedList')
1424−-- , ("alltt", alltt =<< verbEnv "alltt")
1425−-- , ("code", guardEnabled Ext_literate_haskell *>
1426−-- (codeBlockWith ("",["sourceCode","literate","haskell"],[]) <$>
1427−-- verbEnv "code"))
1428−-- , ("comment", mempty <$ verbEnv "comment")
1429−-- , ("verbatim", codeBlock <$> verbEnv "verbatim")
1430−-- , ("Verbatim", fancyverbEnv "Verbatim")
1431−-- , ("BVerbatim", fancyverbEnv "BVerbatim")
1432−-- , ("lstlisting", do attr <- parseListingsOptions <$> option [] keyvals
1433−-- codeBlockWith attr <$> verbEnv "lstlisting")
1434−-- , ("minted", do options <- option [] keyvals
1435−-- lang <- grouped (many1 $ satisfy (/='}'))
1436−-- let kvs = [ (if k == "firstnumber"
1437−-- then "startFrom"
1438−-- else k, v) | (k,v) <- options ]
1439−-- let classes = [ lang | not (null lang) ] ++
1440−-- [ "numberLines" |
1441−-- lookup "linenos" options == Just "true" ]
1442−-- let attr = ("",classes,kvs)
1443−-- codeBlockWith attr <$> verbEnv "minted")
1444−-- , ("obeylines", parseFromString
1445−-- (para . trimInlines . mconcat <$> many inline) =<<
1446−-- intercalate "\\\\\n" . lines <$> verbEnv "obeylines")
1447−-- , ("displaymath", mathEnvWith para Nothing "displaymath")
1448−-- , ("equation", mathEnvWith para Nothing "equation")
1449−-- , ("equation*", mathEnvWith para Nothing "equation*")
1450−-- , ("gather", mathEnvWith para (Just "gathered") "gather")
1451−-- , ("gather*", mathEnvWith para (Just "gathered") "gather*")
1452−-- , ("multline", mathEnvWith para (Just "gathered") "multline")
1453−-- , ("multline*", mathEnvWith para (Just "gathered") "multline*")
1454−-- , ("eqnarray", mathEnvWith para (Just "aligned") "eqnarray")
1455−-- , ("eqnarray*", mathEnvWith para (Just "aligned") "eqnarray*")
1456−-- , ("align", mathEnvWith para (Just "aligned") "align")
1457−-- , ("align*", mathEnvWith para (Just "aligned") "align*")
1458−-- , ("alignat", mathEnvWith para (Just "aligned") "alignat")
1459−-- , ("alignat*", mathEnvWith para (Just "aligned") "alignat*")
1460−-- , ("tikzpicture", rawVerbEnv "tikzpicture")
1461−-- ]
14621480--
14631481-- figure :: PandocMonad m => LP m Blocks
14641482-- figure = try $ do
@@ -1496,10 +1514,6 @@ blocks = mconcat <$> many block
14961514-- bs <- blocks
14971515-- return (ils, [bs])
14981516--
1499−-- env :: PandocMonad m => String -> LP m a -> LP m a
1500−-- env name p = p <*
1501−-- (try (controlSeq "end" *> braced >>= guard . (== name))
1502−-- <?> ("\\end{" ++ name ++ "}"))
15031517--
15041518-- listenv :: PandocMonad m => String -> LP m a -> LP m a
15051519-- listenv name p = try $ do