summaryrefslogtreecommitdiff
path: root/pandoc-lua-engine/src/Text/Pandoc/Lua.hs
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2022-09-29 17:24:31 +0200
committerJohn MacFarlane <jgm@berkeley.edu>2022-09-30 08:33:40 -0700
commit5be9052f5fb7283372b3d5497bef499718a34992 (patch)
tree80e5805786ef7ab08f363135861e1aa9c8868f6f /pandoc-lua-engine/src/Text/Pandoc/Lua.hs
parent79980eee4a1854921d7fb8b14848894b53cc21a7 (diff)
[API Change] Extract Lua code into new package pandoc-lua-engine
The flag 'lua53` must now be used with that package if pandoc is to be compiled against Lua 5.3.
Diffstat (limited to 'pandoc-lua-engine/src/Text/Pandoc/Lua.hs')
-rw-r--r--pandoc-lua-engine/src/Text/Pandoc/Lua.hs52
1 files changed, 52 insertions, 0 deletions
diff --git a/pandoc-lua-engine/src/Text/Pandoc/Lua.hs b/pandoc-lua-engine/src/Text/Pandoc/Lua.hs
new file mode 100644
index 000000000..d6134fc01
--- /dev/null
+++ b/pandoc-lua-engine/src/Text/Pandoc/Lua.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeApplications #-}
+{- |
+ Module : Text.Pandoc.Lua
+ Copyright : Copyright © 2017-2022 Albert Krewinkel
+ License : GNU GPL, version 2 or above
+
+ Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>
+ Stability : alpha
+
+Running pandoc Lua filters.
+-}
+module Text.Pandoc.Lua
+ ( -- * High-level functions
+ applyFilter
+ , readCustom
+ , writeCustom
+ -- * Low-level functions
+ , Global(..)
+ , setGlobals
+ , runLua
+ , runLuaNoEnv
+ -- * Engine
+ , getEngine
+ ) where
+
+import Control.Monad.IO.Class (MonadIO (liftIO))
+import HsLua.Core (getglobal, openlibs, run, top, tostring)
+import Text.Pandoc.Error (PandocError)
+import Text.Pandoc.Lua.Filter (applyFilter)
+import Text.Pandoc.Lua.Global (Global (..), setGlobals)
+import Text.Pandoc.Lua.Init (runLua, runLuaNoEnv)
+import Text.Pandoc.Lua.Reader (readCustom)
+import Text.Pandoc.Lua.Writer (writeCustom)
+import Text.Pandoc.Lua.Orphans ()
+import Text.Pandoc.Scripting (ScriptingEngine (..))
+import qualified Text.Pandoc.UTF8 as UTF8
+
+-- | Constructs the Lua scripting engine.
+getEngine :: MonadIO m => m ScriptingEngine
+getEngine = do
+ versionName <- liftIO . run @PandocError $ do
+ openlibs
+ getglobal "_VERSION"
+ tostring top
+ pure $ ScriptingEngine
+ { engineName = maybe "Lua (unknown version)" UTF8.toText versionName
+ , engineApplyFilter = applyFilter
+ , engineReadCustom = readCustom
+ , engineWriteCustom = writeCustom
+ }