blob: 4a7d14d2f21f442f0902ed26ec44d0eeaab61137 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Text.Pandoc.Lua.Module.Types
Copyright : © 2019-2021 Albert Krewinkel
License : GNU GPL, version 2 or above
Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de>
Stability : alpha
Pandoc data type constructors.
-}
module Text.Pandoc.Lua.Module.Types
( pushModule
) where
import HsLua (LuaE, NumResults, Peeker, Pusher)
import Text.Pandoc.Error (PandocError)
import Text.Pandoc.Lua.ErrorConversion ()
import Text.Pandoc.Lua.Marshaling.AST
import Text.Pandoc.Lua.Util (addFunction)
import qualified HsLua as Lua
import qualified HsLua.Module.Version as Version
-- | Push the pandoc.types module on the Lua stack.
pushModule :: LuaE PandocError NumResults
pushModule = do
Lua.newtable
Lua.pushName "Version" *> Lua.pushModule Version.documentedModule
*> Lua.rawset (Lua.nth 3)
pushCloneTable
Lua.setfield (Lua.nth 2) "clone"
return 1
pushCloneTable :: LuaE PandocError NumResults
pushCloneTable = do
Lua.newtable
addFunction "Attr" $ cloneWith peekAttr pushAttr
addFunction "Block" $ cloneWith peekBlock pushBlock
addFunction "Inline" $ cloneWith peekInline pushInline
addFunction "Meta" $ cloneWith peekMeta Lua.push
addFunction "MetaValue" $ cloneWith peekMetaValue pushMetaValue
addFunction "ListAttributes" $ cloneWith peekListAttributes pushListAttributes
addFunction "Pandoc" $ cloneWith peekPandoc pushPandoc
return 1
cloneWith :: Peeker PandocError a
-> Pusher PandocError a
-> LuaE PandocError NumResults
cloneWith peeker pusher = do
x <- Lua.forcePeek $ peeker (Lua.nthBottom 1)
pusher x
return (Lua.NumResults 1)
|