aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2021-11-08 12:14:44 +0100
committerAlbert Krewinkel <albert@zeitkraut.de>2021-11-08 12:22:33 +0100
commitab0fe676a8507ea1ff4e77b97f548a92b13b6317 (patch)
tree7b181b9b1d433b0dc163254436c8652907b41ed0
parentcc46667953b609d87bbf5611f50843871b304a0c (diff)
downloadpandoc-ab0fe676a8507ea1ff4e77b97f548a92b13b6317.tar.gz
Lua: ensure that 're' module is always available.
The module is shipped with LPeg.
-rw-r--r--pandoc.cabal2
-rw-r--r--src/Text/Pandoc/Lua/Init.hs8
-rw-r--r--test/Tests/Lua.hs10
3 files changed, 18 insertions, 2 deletions
diff --git a/pandoc.cabal b/pandoc.cabal
index 764b459ba..438ad3942 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -563,7 +563,7 @@ library
http-types >= 0.8 && < 0.13,
ipynb >= 0.1.0.2 && < 0.2,
jira-wiki-markup >= 1.4 && < 1.5,
- lpeg >= 1.0 && < 1.1,
+ lpeg >= 1.0.1 && < 1.1,
mtl >= 2.2 && < 2.3,
network >= 2.6,
network-uri >= 2.6 && < 2.8,
diff --git a/src/Text/Pandoc/Lua/Init.hs b/src/Text/Pandoc/Lua/Init.hs
index 5b2a2f3e4..727c79d84 100644
--- a/src/Text/Pandoc/Lua/Init.hs
+++ b/src/Text/Pandoc/Lua/Init.hs
@@ -46,6 +46,7 @@ initLuaState :: PandocLua ()
initLuaState = do
liftPandocLua Lua.openlibs
installPandocPackageSearcher
+ installLpegSearcher
initPandocModule
requireGlobalModules
loadInitScript "init.lua"
@@ -99,6 +100,13 @@ initLuaState = do
-- Module on top of stack. Register as global
Lua.setglobal "lpeg"
+ installLpegSearcher :: PandocLua ()
+ installLpegSearcher = liftPandocLua $ do
+ Lua.getglobal' "package.searchers"
+ Lua.pushHaskellFunction $ Lua.state >>= liftIO . LPeg.lpeg_searcher
+ Lua.rawseti (Lua.nth 2) . (+1) . fromIntegral =<< Lua.rawlen (Lua.nth 2)
+ Lua.pop 1 -- remove 'package.searchers' from stack
+
-- | AST elements are marshaled via normal constructor functions in the
-- @pandoc@ module. However, accessing Lua globals from Haskell is
-- expensive (due to error handling). Accessing the Lua registry is much
diff --git a/test/Tests/Lua.hs b/test/Tests/Lua.hs
index d3694d8a9..6ee07f8fa 100644
--- a/test/Tests/Lua.hs
+++ b/test/Tests/Lua.hs
@@ -18,7 +18,7 @@ import Control.Monad (when)
import HsLua as Lua hiding (Operation (Div), error)
import System.FilePath ((</>))
import Test.Tasty (TestTree, localOption)
-import Test.Tasty.HUnit (Assertion, HasCallStack, assertEqual, testCase)
+import Test.Tasty.HUnit ((@=?), Assertion, HasCallStack, assertEqual, testCase)
import Test.Tasty.QuickCheck (QuickCheckTests (..), ioProperty, testProperty)
import Text.Pandoc.Arbitrary ()
import Text.Pandoc.Builder (bulletList, definitionList, displayMath, divWith,
@@ -211,6 +211,14 @@ tests = map (localOption (QuickCheckTests 20))
ty <- Lua.ltype Lua.top
Lua.liftIO $ assertEqual "module should be a table" Lua.TypeTable ty
+ , testCase "module 'lpeg' is loaded into a global" . runLuaTest $ do
+ s <- Lua.dostring "assert(type(lpeg)=='table');assert(lpeg==require'lpeg')"
+ Lua.liftIO $ Lua.OK @=? s
+
+ , testCase "module 're' is available" . runLuaTest $ do
+ s <- Lua.dostring "require 're'"
+ Lua.liftIO $ Lua.OK @=? s
+
, testCase "informative error messages" . runLuaTest $ do
Lua.pushboolean True
-- Lua.newtable