summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2021-12-31 10:23:32 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2021-12-31 17:35:52 -0800
commit03054a33e895cacc9b2c74fd6dd5b698c58c3877 (patch)
tree0bb4ee9a9a8fa3e9404b28951d7feaa6cb7cf336
parentd6e66b1f1d79ddb0a4b402461da5e1f42ed6b658 (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.md10
-rw-r--r--src/Text/Pandoc/Lua/Module/Pandoc.hs19
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) ->