@@ -34,6 +34,7 @@ module Text.Pandoc.Lua.Init
36import Control.Monad.Trans (MonadIO (..))
36import Control.Monad.Trans (MonadIO (..))
37+import Data.Data (Data, dataTypeConstrs, dataTypeOf, showConstr)
37import Data.IORef (newIORef, readIORef)
38import Data.IORef (newIORef, readIORef)
38import Data.Version (Version (versionBranch))
39import Data.Version (Version (versionBranch))
39import Foreign.Lua (Lua, LuaException (..))
40import Foreign.Lua (Lua, LuaException (..))
@@ -48,6 +49,7 @@ import Text.Pandoc.Lua.Util (loadScriptFromDataDir)
49import qualified Foreign.Lua as Lua
50import qualified Foreign.Lua as Lua
50import qualified Foreign.Lua.Module.Text as Lua
51import qualified Foreign.Lua.Module.Text as Lua
52+import qualified Text.Pandoc.Definition as Pandoc
52-- | Run the lua interpreter, using pandoc's default way of environment
54-- | Run the lua interpreter, using pandoc's default way of environment
53-- initalization.
55-- initalization.
@@ -84,3 +86,26 @@ initLuaState luaPkgParams = do
84 Lua.setglobal "PANDOC_API_VERSION"
86 Lua.setglobal "PANDOC_API_VERSION"
85 installPandocPackageSearcher luaPkgParams
87 installPandocPackageSearcher luaPkgParams
86 loadScriptFromDataDir (luaPkgDataDir luaPkgParams) "init.lua"
88 loadScriptFromDataDir (luaPkgDataDir luaPkgParams) "init.lua"
89+ putConstructorsInRegistry
91+putConstructorsInRegistry :: Lua ()
92+putConstructorsInRegistry = do
93+ Lua.getglobal "pandoc"
94+ constrsToReg $ Pandoc.Pandoc mempty mempty
95+ constrsToReg $ Pandoc.Str mempty
96+ constrsToReg $ Pandoc.Para mempty
97+ constrsToReg $ Pandoc.Meta mempty
98+ constrsToReg $ Pandoc.MetaList mempty
99+ constrsToReg $ Pandoc.Citation mempty mempty mempty Pandoc.AuthorInText 0 0
100+ putInReg "Attr" -- used for Attr type alias
103+ constrsToReg :: Data a => a -> Lua ()
104+ constrsToReg = mapM_ putInReg . map showConstr . dataTypeConstrs . dataTypeOf
106+ putInReg :: String -> Lua ()
108+ Lua.push ("pandoc." ++ name) -- name in registry
109+ Lua.push name -- in pandoc module
110+ Lua.rawget (Lua.nthFromTop 3)
111+ Lua.rawset Lua.registryindex