summaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Lua/Init.hs
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2018-10-26 22:15:25 +0200
committerAlbert Krewinkel <albert@zeitkraut.de>2018-10-26 22:24:21 +0200
commit7f70aaa5fa5f69f5f72ff7ee67a1306425052113 (patch)
treeda5a638e0a7cdcee4acb41a70668d2ca016e313f /src/Text/Pandoc/Lua/Init.hs
parentdc572e8a250e7561e39286fda94d7c315f6331a0 (diff)
Text.Pandoc.Lua: move globals handling to separate module
Diffstat (limited to 'src/Text/Pandoc/Lua/Init.hs')
-rw-r--r--src/Text/Pandoc/Lua/Init.hs39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/Text/Pandoc/Lua/Init.hs b/src/Text/Pandoc/Lua/Init.hs
index 78fb6204e..c9ee7267a 100644
--- a/src/Text/Pandoc/Lua/Init.hs
+++ b/src/Text/Pandoc/Lua/Init.hs
@@ -32,20 +32,17 @@ module Text.Pandoc.Lua.Init
, runPandocLua
, initLuaState
, luaPackageParams
- , registerScriptPath
) where
import Prelude
import Control.Monad.Trans (MonadIO (..))
import Data.Data (Data, dataTypeConstrs, dataTypeOf, showConstr)
import Data.IORef (newIORef, readIORef)
-import Data.Version (Version (versionBranch))
import Foreign.Lua (Lua)
import GHC.IO.Encoding (getForeignEncoding, setForeignEncoding, utf8)
-import Paths_pandoc (version)
-import Text.Pandoc.Class (CommonState, PandocIO, getCommonState,
- getUserDataDir, getMediaBag, setMediaBag)
-import Text.Pandoc.Definition (pandocTypesVersion)
+import Text.Pandoc.Class (PandocIO, getCommonState, getUserDataDir,
+ getMediaBag, setMediaBag)
+import Text.Pandoc.Lua.Global (Global (..), setGlobals)
import Text.Pandoc.Lua.Packages (LuaPackageParams (..),
installPandocPackageSearcher)
import Text.Pandoc.Lua.Util (loadScriptFromDataDir)
@@ -61,11 +58,12 @@ newtype LuaException = LuaException String deriving (Show)
-- initialization.
runPandocLua :: Lua a -> PandocIO (Either LuaException a)
runPandocLua luaOp = do
- commonState <- getCommonState
luaPkgParams <- luaPackageParams
+ globals <- defaultGlobals
enc <- liftIO $ getForeignEncoding <* setForeignEncoding utf8
res <- liftIO . Lua.runEither $ do
- initLuaState commonState luaPkgParams
+ setGlobals globals
+ initLuaState luaPkgParams
luaOp
liftIO $ setForeignEncoding enc
newMediaBag <- liftIO (readIORef (luaPkgMediaBag luaPkgParams))
@@ -74,6 +72,16 @@ runPandocLua luaOp = do
Left (Lua.Exception msg) -> Left (LuaException msg)
Right x -> Right x
+-- | Global variables which should always be set.
+defaultGlobals :: PandocIO [Global]
+defaultGlobals = do
+ commonState <- getCommonState
+ return
+ [ PANDOC_API_VERSION
+ , PANDOC_STATE commonState
+ , PANDOC_VERSION
+ ]
+
-- | Generate parameters required to setup pandoc's lua environment.
luaPackageParams :: PandocIO LuaPackageParams
luaPackageParams = do
@@ -87,25 +95,14 @@ luaPackageParams = do
}
-- Initialize the lua state with all required values
-initLuaState :: CommonState -> LuaPackageParams -> Lua ()
-initLuaState commonState luaPkgParams = do
+initLuaState :: LuaPackageParams -> Lua ()
+initLuaState luaPkgParams = do
Lua.openlibs
Lua.preloadTextModule "text"
- Lua.push (versionBranch version)
- Lua.setglobal "PANDOC_VERSION"
- Lua.push (versionBranch pandocTypesVersion)
- Lua.setglobal "PANDOC_API_VERSION"
- Lua.push commonState
- Lua.setglobal "PANDOC_STATE"
installPandocPackageSearcher luaPkgParams
loadScriptFromDataDir (luaPkgDataDir luaPkgParams) "init.lua"
putConstructorsInRegistry
-registerScriptPath :: FilePath -> Lua ()
-registerScriptPath fp = do
- Lua.push fp
- Lua.setglobal "PANDOC_SCRIPT_FILE"
-
putConstructorsInRegistry :: Lua ()
putConstructorsInRegistry = do
Lua.getglobal "pandoc"