diff options
| author | Albert Krewinkel <[email protected]> | 2022-06-23 22:49:32 +0200 |
|---|---|---|
| committer | Albert Krewinkel <[email protected]> | 2022-06-23 22:53:11 +0200 |
| commit | 6d351df1ed6a1ea4e36713d50951403121271742 (patch) | |
| tree | a205e1f154f8926eba48e71090cdd1506b246594 /src | |
| parent | 2abf56f508760a9a7711a00a4d3fd9fa83c6f61e (diff) | |
Lua: ensure that tables marshaled via JSON arrays behave like Lists.
This allows to invoke methods like `map` and `includes` on lists like
`PANDOC_WRITER_OPTIONS.extensions`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Lua/Init.hs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Lua/Init.hs b/src/Text/Pandoc/Lua/Init.hs index ab03296ad..966f0a581 100644 --- a/src/Text/Pandoc/Lua/Init.hs +++ b/src/Text/Pandoc/Lua/Init.hs @@ -21,11 +21,12 @@ import Data.Maybe (catMaybes) import HsLua as Lua hiding (status, try) import Text.Pandoc.Class.PandocMonad (PandocMonad, readDataFile) import Text.Pandoc.Error (PandocError (PandocLuaError)) -import Text.Pandoc.Lua.Marshal.List (pushListModule) +import Text.Pandoc.Lua.Marshal.List (newListMetatable, pushListModule) import Text.Pandoc.Lua.PandocLua (PandocLua, liftPandocLua, runPandocLua) import qualified Data.ByteString.Char8 as Char8 import qualified Data.Text as T import qualified Lua.LPeg as LPeg +import qualified HsLua.Aeson import qualified HsLua.Module.DocLayout as Module.Layout import qualified HsLua.Module.Path as Module.Path import qualified HsLua.Module.Text as Module.Text @@ -66,6 +67,7 @@ loadedModules = initLuaState :: PandocLua () initLuaState = do liftPandocLua Lua.openlibs + initJsonMetatable initPandocModule installLpegSearcher setGlobalModules @@ -143,3 +145,9 @@ initLuaState = do 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 + +-- | Setup the metatable that's assigned to Lua tables that were created +-- from/via JSON arrays. +initJsonMetatable :: PandocLua () +initJsonMetatable = liftPandocLua $ do + newListMetatable HsLua.Aeson.jsonarray (pure ()) |
