aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Lua/Init.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Lua/Init.hs')
-rw-r--r--src/Text/Pandoc/Lua/Init.hs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Lua/Init.hs b/src/Text/Pandoc/Lua/Init.hs
index f3ee2caf1..d1a26ebad 100644
--- a/src/Text/Pandoc/Lua/Init.hs
+++ b/src/Text/Pandoc/Lua/Init.hs
@@ -34,6 +34,7 @@ module Text.Pandoc.Lua.Init
) where
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, LuaException (..))
@@ -48,6 +49,7 @@ import Text.Pandoc.Lua.Util (loadScriptFromDataDir)
import qualified Foreign.Lua as Lua
import qualified Foreign.Lua.Module.Text as Lua
+import qualified Text.Pandoc.Definition as Pandoc
-- | Run the lua interpreter, using pandoc's default way of environment
-- initalization.
@@ -84,3 +86,26 @@ initLuaState luaPkgParams = do
Lua.setglobal "PANDOC_API_VERSION"
installPandocPackageSearcher luaPkgParams
loadScriptFromDataDir (luaPkgDataDir luaPkgParams) "init.lua"
+ putConstructorsInRegistry
+
+putConstructorsInRegistry :: Lua ()
+putConstructorsInRegistry = do
+ Lua.getglobal "pandoc"
+ constrsToReg $ Pandoc.Pandoc mempty mempty
+ constrsToReg $ Pandoc.Str mempty
+ constrsToReg $ Pandoc.Para mempty
+ constrsToReg $ Pandoc.Meta mempty
+ constrsToReg $ Pandoc.MetaList mempty
+ constrsToReg $ Pandoc.Citation mempty mempty mempty Pandoc.AuthorInText 0 0
+ putInReg "Attr" -- used for Attr type alias
+ Lua.pop 1
+ where
+ constrsToReg :: Data a => a -> Lua ()
+ constrsToReg = mapM_ putInReg . map showConstr . dataTypeConstrs . dataTypeOf
+
+ putInReg :: String -> Lua ()
+ putInReg name = do
+ Lua.push ("pandoc." ++ name) -- name in registry
+ Lua.push name -- in pandoc module
+ Lua.rawget (Lua.nthFromTop 3)
+ Lua.rawset Lua.registryindex