@@ -32,20 +32,17 @@ module Text.Pandoc.Lua.Init
32 , runPandocLua
32 , runPandocLua
33 , initLuaState
33 , initLuaState
34 , luaPackageParams
34 , luaPackageParams
38import Prelude
37import Prelude
39import Control.Monad.Trans (MonadIO (..))
38import Control.Monad.Trans (MonadIO (..))
40import Data.Data (Data, dataTypeConstrs, dataTypeOf, showConstr)
39import Data.Data (Data, dataTypeConstrs, dataTypeOf, showConstr)
41import Data.IORef (newIORef, readIORef)
40import Data.IORef (newIORef, readIORef)
42−import Data.Version (Version (versionBranch))
43import Foreign.Lua (Lua)
41import Foreign.Lua (Lua)
44import GHC.IO.Encoding (getForeignEncoding, setForeignEncoding, utf8)
42import GHC.IO.Encoding (getForeignEncoding, setForeignEncoding, utf8)
45−import Paths_pandoc (version)
46−import Text.Pandoc.Class (CommonState, PandocIO, getCommonState,
43+import Text.Pandoc.Class (PandocIO, getCommonState, getUserDataDir,
47− getUserDataDir, getMediaBag, setMediaBag)
44+ getMediaBag, setMediaBag)
48−import Text.Pandoc.Definition (pandocTypesVersion)
45+import Text.Pandoc.Lua.Global (Global (..), setGlobals)
49import Text.Pandoc.Lua.Packages (LuaPackageParams (..),
46import Text.Pandoc.Lua.Packages (LuaPackageParams (..),
50 installPandocPackageSearcher)
47 installPandocPackageSearcher)
51import Text.Pandoc.Lua.Util (loadScriptFromDataDir)
48import Text.Pandoc.Lua.Util (loadScriptFromDataDir)
@@ -61,11 +58,12 @@ newtype LuaException = LuaException String deriving (Show)
61-- initialization.
58-- initialization.
62runPandocLua :: Lua a -> PandocIO (Either LuaException a)
59runPandocLua :: Lua a -> PandocIO (Either LuaException a)
63runPandocLua luaOp = do
60runPandocLua luaOp = do
64− commonState <- getCommonState
65 luaPkgParams <- luaPackageParams
61 luaPkgParams <- luaPackageParams
62+ globals <- defaultGlobals
66 enc <- liftIO $ getForeignEncoding <* setForeignEncoding utf8
63 enc <- liftIO $ getForeignEncoding <* setForeignEncoding utf8
67 res <- liftIO . Lua.runEither $ do
64 res <- liftIO . Lua.runEither $ do
68− initLuaState commonState luaPkgParams
66+ initLuaState luaPkgParams
70 liftIO $ setForeignEncoding enc
68 liftIO $ setForeignEncoding enc
71 newMediaBag <- liftIO (readIORef (luaPkgMediaBag luaPkgParams))
69 newMediaBag <- liftIO (readIORef (luaPkgMediaBag luaPkgParams))
@@ -74,6 +72,16 @@ runPandocLua luaOp = do
74 Left (Lua.Exception msg) -> Left (LuaException msg)
72 Left (Lua.Exception msg) -> Left (LuaException msg)
75 Right x -> Right x
73 Right x -> Right x
75+-- | Global variables which should always be set.
76+defaultGlobals :: PandocIO [Global]
78+ commonState <- getCommonState
81+ , PANDOC_STATE commonState
77-- | Generate parameters required to setup pandoc's lua environment.
85-- | Generate parameters required to setup pandoc's lua environment.
78luaPackageParams :: PandocIO LuaPackageParams
86luaPackageParams :: PandocIO LuaPackageParams
79luaPackageParams = do
87luaPackageParams = do
@@ -87,25 +95,14 @@ luaPackageParams = do
89-- Initialize the lua state with all required values
97-- Initialize the lua state with all required values
90−initLuaState :: CommonState -> LuaPackageParams -> Lua ()
98+initLuaState :: LuaPackageParams -> Lua ()
91−initLuaState commonState luaPkgParams = do
99+initLuaState luaPkgParams = do
92 Lua.openlibs
100 Lua.openlibs
93 Lua.preloadTextModule "text"
101 Lua.preloadTextModule "text"
94− Lua.push (versionBranch version)
95− Lua.setglobal "PANDOC_VERSION"
96− Lua.push (versionBranch pandocTypesVersion)
97− Lua.setglobal "PANDOC_API_VERSION"
99− Lua.setglobal "PANDOC_STATE"
100 installPandocPackageSearcher luaPkgParams
102 installPandocPackageSearcher luaPkgParams
101 loadScriptFromDataDir (luaPkgDataDir luaPkgParams) "init.lua"
103 loadScriptFromDataDir (luaPkgDataDir luaPkgParams) "init.lua"
102 putConstructorsInRegistry
104 putConstructorsInRegistry
104−registerScriptPath :: FilePath -> Lua ()
105−registerScriptPath fp = do
107− Lua.setglobal "PANDOC_SCRIPT_FILE"
109putConstructorsInRegistry :: Lua ()
106putConstructorsInRegistry :: Lua ()
110putConstructorsInRegistry = do
107putConstructorsInRegistry = do
111 Lua.getglobal "pandoc"
108 Lua.getglobal "pandoc"