diff options
| author | Albert Krewinkel <albert@zeitkraut.de> | 2021-12-31 10:23:32 +0100 |
|---|---|---|
| committer | John MacFarlane <jgm@berkeley.edu> | 2021-12-31 17:35:52 -0800 |
| commit | 03054a33e895cacc9b2c74fd6dd5b698c58c3877 (patch) | |
| tree | 0bb4ee9a9a8fa3e9404b28951d7feaa6cb7cf336 | |
| parent | d6e66b1f1d79ddb0a4b402461da5e1f42ed6b658 (diff) | |
Lua: use global state when parsing documents in `pandoc.read`
The function `pandoc.read` is updated to use the same state that was
used while parsing the main input files. This ensures that log messages
are preserved and that images embedded in the input are added to the
mediabag.
| -rw-r--r-- | doc/lua-filters.md | 10 | ||||
| -rw-r--r-- | src/Text/Pandoc/Lua/Module/Pandoc.hs | 19 |
2 files changed, 19 insertions, 10 deletions
diff --git a/doc/lua-filters.md b/doc/lua-filters.md index eba4dcfe9..29fa7b9e4 100644 --- a/doc/lua-filters.md +++ b/doc/lua-filters.md @@ -3232,6 +3232,14 @@ Returns: the transformed inline element Parse the given string into a Pandoc document. +The parser is run in the same environment that was used to read +the main input files; it has full access to the file-system and +the mediabag. This means that if the document specifies files to +be included, as is possible in formats like LaTeX, +reStructuredText, and Org, then these will be included in the +resulting document. Any media elements are added to those +retrieved from the other parsed input files. + Parameters: `markup`: @@ -3246,7 +3254,7 @@ Parameters: ReaderOptions object; defaults to the default values documented in the manual. ([ReaderOptions]|table) -Returns: pandoc document +Returns: pandoc document ([Pandoc](#type-pandoc)) Usage: diff --git a/src/Text/Pandoc/Lua/Module/Pandoc.hs b/src/Text/Pandoc/Lua/Module/Pandoc.hs index d2d74aaa8..c2f1f68fd 100644 --- a/src/Text/Pandoc/Lua/Module/Pandoc.hs +++ b/src/Text/Pandoc/Lua/Module/Pandoc.hs @@ -28,7 +28,6 @@ import Data.Proxy (Proxy (Proxy)) import HsLua hiding (pushModule) import HsLua.Class.Peekable (PeekError) import System.Exit (ExitCode (..)) -import Text.Pandoc.Class.PandocIO (runIO) import Text.Pandoc.Definition import Text.Pandoc.Lua.Orphans () import Text.Pandoc.Lua.Marshal.AST @@ -36,7 +35,7 @@ import Text.Pandoc.Lua.Marshal.Filter (peekFilter) import Text.Pandoc.Lua.Marshal.ReaderOptions ( peekReaderOptions , pushReaderOptions) import Text.Pandoc.Lua.Module.Utils (sha1) -import Text.Pandoc.Lua.PandocLua (PandocLua, liftPandocLua) +import Text.Pandoc.Lua.PandocLua (PandocLua (unPandocLua), liftPandocLua) import Text.Pandoc.Options (ReaderOptions (readerExtensions)) import Text.Pandoc.Process (pipeProcess) import Text.Pandoc.Readers (Reader (..), getReader) @@ -171,13 +170,15 @@ functions = ### (\content mformatspec mreaderOptions -> do let formatSpec = fromMaybe "markdown" mformatspec readerOpts = fromMaybe def mreaderOptions - res <- Lua.liftIO . runIO $ getReader formatSpec >>= \case - (TextReader r, es) -> - r readerOpts{ readerExtensions = es } (UTF8.toText content) - (ByteStringReader r, es) -> - r readerOpts{ readerExtensions = es } (BSL.fromStrict content) - case res of - Right pd -> return pd -- success, got a Pandoc document + readAction = getReader formatSpec >>= \case + (TextReader r, es) -> + r readerOpts{readerExtensions = es} (UTF8.toText content) + (ByteStringReader r, es) -> + r readerOpts{readerExtensions = es} (BSL.fromStrict content) + try (unPandocLua readAction) >>= \case + Right pd -> + -- success, got a Pandoc document + return pd Left (PandocUnknownReaderError f) -> Lua.failLua . T.unpack $ "Unknown reader: " <> f Left (PandocUnsupportedExtensionError e f) -> |
