{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Text.Pandoc.Lua
(
applyFilter
, loadCustom
, Global(..)
, setGlobals
, runLua
, runLuaNoEnv
, 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.Custom (loadCustom)
import Text.Pandoc.Lua.Orphans ()
import Text.Pandoc.Scripting (ScriptingEngine (..))
import qualified Text.Pandoc.UTF8 as UTF8
getEngine :: MonadIO m => m ScriptingEngine
getEngine :: forall (m :: * -> *). MonadIO m => m ScriptingEngine
getEngine = do
Maybe ByteString
versionName <- forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall e a. LuaE e a -> IO a
run @PandocError forall a b. (a -> b) -> a -> b
$ do
forall e. LuaE e ()
openlibs
forall e. LuaError e => Name -> LuaE e Type
getglobal Name
"_VERSION"
forall e. StackIndex -> LuaE e (Maybe ByteString)
tostring StackIndex
top
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ ScriptingEngine
{ engineName :: Text
engineName = forall b a. b -> (a -> b) -> Maybe a -> b
maybe Text
"Lua (unknown version)" ByteString -> Text
UTF8.toText Maybe ByteString
versionName
, engineApplyFilter :: forall (m :: * -> *).
(PandocMonad m, MonadIO m) =>
Environment -> [String] -> String -> Pandoc -> m Pandoc
engineApplyFilter = forall (m :: * -> *).
(PandocMonad m, MonadIO m) =>
Environment -> [String] -> String -> Pandoc -> m Pandoc
applyFilter
, engineLoadCustom :: forall (m :: * -> *).
(PandocMonad m, MonadIO m) =>
String -> m (CustomComponents m)
engineLoadCustom = forall (m :: * -> *).
(PandocMonad m, MonadIO m) =>
String -> m (CustomComponents m)
loadCustom
}