git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: don't parse beyond `\end{document}`.

This required some internal changes to `\subfile` handling. Closes #6380.

commit311d4c9dfcf61e6e0bd9fdf8ff351d8900bc9a58 authorJohn MacFarlane <jgm@berkeley.edu> dateTue 19 May 2020, 15:17 (6 years ago) parente2bc913
1 file changed+25−13
src/Text/Pandoc/Readers/LaTeX.hs+25−13
src/Text/Pandoc/Readers/LaTeX.hs+25−13
@@ -1510,26 +1510,38 @@ rawBlockOr name fallback = do
15101510 then rawBlock "latex" <$> getRawCommand name ("\\" <> name)
15111511 else fallback
15121512
1513+doSubfile :: PandocMonad m => LP m Blocks
1514+doSubfile = do
1515+ skipMany opt
1516+ f <- T.unpack . removeDoubleQuotes . T.strip . untokenize <$> braced
1517+ oldToks <- getInput
1518+ setInput []
1519+ insertIncluded ".tex" f
1520+ bs <- blocks
1521+ eof
1522+ setInput oldToks
1523+ return bs
1524+
15131525include :: (PandocMonad m, Monoid a) => Text -> LP m a
15141526include name = do
15151527 skipMany opt
15161528 fs <- (map (T.unpack . removeDoubleQuotes . T.strip) . T.splitOn "," .
15171529 untokenize) <$> braced
1518− let addExt f = case takeExtension f of
1519− ".tex" -> f
1520− ".sty" -> f
1521− -- note, we can have cc_by_4.0 for example...
1522− _ | name == "usepackage" -> addExtension f ".sty"
1523− | otherwise -> addExtension f ".tex"
1524− dirs <- (map T.unpack . splitTextBy (==':') . fromMaybe ".") <$> lookupEnv "TEXINPUTS"
1525− mapM_ (insertIncluded dirs . addExt) fs
1530+ let defaultExt | name == "usepackage" = ".sty"
1531+ | otherwise = ".tex"
1532+ mapM_ (insertIncluded defaultExt) fs
15261533 return mempty
15271534
15281535insertIncluded :: PandocMonad m
1529− => [FilePath]
1536+ => FilePath
15301537 -> FilePath
15311538 -> LP m ()
1532−insertIncluded dirs f = do
1539+insertIncluded defaultExtension f' = do
1540+ let f = case takeExtension f' of
1541+ ".tex" -> f'
1542+ ".sty" -> f'
1543+ _ -> addExtension f' defaultExtension
1544+ dirs <- (map T.unpack . splitTextBy (==':') . fromMaybe ".") <$> lookupEnv "TEXINPUTS"
15331545 pos <- getPosition
15341546 containers <- getIncludeFiles <$> getState
15351547 when (T.pack f `elem` containers) $
@@ -1863,7 +1875,7 @@ blockCommands = M.fromList
18631875 addMeta "bibliography" . splitBibs . untokenize))
18641876 , ("addbibresource", mempty <$ (skipopts *> braced >>=
18651877 addMeta "bibliography" . splitBibs . untokenize))
1866− , ("endinput", mempty <$ skipMany tok)
1878+ , ("endinput", mempty <$ skipMany anyTok)
18671879 -- includes
18681880 , ("lstinputlisting", inputListing)
18691881 , ("inputminted", inputMinted)
@@ -1886,7 +1898,7 @@ blockCommands = M.fromList
18861898 -- include
18871899 , ("include", rawBlockOr "include" $ include "include")
18881900 , ("input", rawBlockOr "input" $ include "input")
1889− , ("subfile", rawBlockOr "subfile" $ include "subfile")
1901+ , ("subfile", rawBlockOr "subfile" doSubfile)
18901902 , ("usepackage", rawBlockOr "usepackage" $ include "usepackage")
18911903 -- preamble
18921904 , ("PackageError", mempty <$ (braced >> braced >> braced))
@@ -1897,7 +1909,7 @@ blockCommands = M.fromList
18971909
18981910environments :: PandocMonad m => M.Map Text (LP m Blocks)
18991911environments = M.fromList
1900− [ ("document", env "document" blocks)
1912+ [ ("document", env "document" blocks <* skipMany anyTok)
19011913 , ("abstract", mempty <$ (env "abstract" blocks >>= addMeta "abstract"))
19021914 , ("sloppypar", env "sloppypar" $ blocks)
19031915 , ("letter", env "letter" letterContents)