aboutsummaryrefslogtreecommitdiff
path: root/pandoc-lua-engine/src/Text/Pandoc/Lua/Global.hs
diff options
context:
space:
mode:
Diffstat (limited to 'pandoc-lua-engine/src/Text/Pandoc/Lua/Global.hs')
-rw-r--r--pandoc-lua-engine/src/Text/Pandoc/Lua/Global.hs56
1 files changed, 50 insertions, 6 deletions
diff --git a/pandoc-lua-engine/src/Text/Pandoc/Lua/Global.hs b/pandoc-lua-engine/src/Text/Pandoc/Lua/Global.hs
index 079181d74..d9902df98 100644
--- a/pandoc-lua-engine/src/Text/Pandoc/Lua/Global.hs
+++ b/pandoc-lua-engine/src/Text/Pandoc/Lua/Global.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Text.Pandoc.Lua
@@ -16,14 +17,18 @@ module Text.Pandoc.Lua.Global
import HsLua as Lua
import HsLua.Module.Version (pushVersion)
-import Text.Pandoc.Class (CommonState)
+import Text.Pandoc.Class ( getInputFiles, getOutputFile, getLog
+ , getRequestHeaders, getResourcePath, getSourceURL
+ , getUserDataDir, getTrace, getVerbosity
+ )
import Text.Pandoc.Definition (Pandoc, pandocTypesVersion)
import Text.Pandoc.Error (PandocError)
-import Text.Pandoc.Lua.Marshal.CommonState (pushCommonState)
+import Text.Pandoc.Lua.Marshal.List (pushPandocList)
+import Text.Pandoc.Lua.Marshal.LogMessage (pushLogMessage)
import Text.Pandoc.Lua.Marshal.Pandoc (pushPandoc)
import Text.Pandoc.Lua.Marshal.ReaderOptions (pushReaderOptionsReadonly)
import Text.Pandoc.Lua.Marshal.WriterOptions (pushWriterOptions)
-import Text.Pandoc.Lua.PandocLua ()
+import Text.Pandoc.Lua.PandocLua (unPandocLua)
import Text.Pandoc.Options (ReaderOptions, WriterOptions)
import Text.Pandoc.Version (pandocVersion)
@@ -37,7 +42,7 @@ data Global =
| PANDOC_READER_OPTIONS ReaderOptions
| PANDOC_WRITER_OPTIONS WriterOptions
| PANDOC_SCRIPT_FILE FilePath
- | PANDOC_STATE CommonState
+ | PANDOC_STATE
| PANDOC_VERSION
-- Cannot derive instance of Data because of CommonState
@@ -66,8 +71,47 @@ setGlobal global = case global of
PANDOC_SCRIPT_FILE filePath -> do
Lua.pushString filePath
Lua.setglobal "PANDOC_SCRIPT_FILE"
- PANDOC_STATE commonState -> do
- pushCommonState commonState
+ PANDOC_STATE -> do
+ -- The common state is an opaque value. We provide a table that
+ -- contains the values accessible through the PandocMonad API. This
+ -- is for backwards compatibility, as the state used to be exposed
+ -- as a read-only object.
+ Lua.newtable
+ Lua.newmetatable "CommonStateInterface"
+ Lua.pushHaskellFunction $ do
+ Lua.forcePeek (peekText (Lua.nthBottom 2)) >>= \case
+ "input_files" -> do
+ pushPandocList pushString =<< unPandocLua getInputFiles
+ return 1
+ "output_file" -> do
+ maybe pushnil pushString =<< unPandocLua getOutputFile
+ return 1
+ "log" -> do
+ pushPandocList pushLogMessage =<< unPandocLua getLog
+ return 1
+ "request_headers" -> do
+ pushPandocList (pushPair pushText pushText)
+ =<< unPandocLua getRequestHeaders
+ return 1
+ "resource_path" -> do
+ pushPandocList pushString =<< unPandocLua getResourcePath
+ return 1
+ "source_url" -> do
+ maybe pushnil pushText =<< unPandocLua getSourceURL
+ return 1
+ "user_data_dir" -> do
+ maybe pushnil pushString =<< unPandocLua getUserDataDir
+ return 1
+ "trace" -> do
+ pushBool =<< unPandocLua getTrace
+ return 1
+ "verbosity" -> do
+ pushString . show =<< unPandocLua getVerbosity
+ return 1
+ _ ->
+ failLua "Unknown key"
+ Lua.setfield (Lua.nth 2) "__index"
+ Lua.setmetatable (Lua.nth 2)
Lua.setglobal "PANDOC_STATE"
PANDOC_VERSION -> do
pushVersion pandocVersion