diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2017-12-01 17:58:12 +0100 |
---|---|---|
committer | Albert Krewinkel <albert@zeitkraut.de> | 2017-12-01 17:58:12 +0100 |
commit | 6640506ddc0ab848824d818a363c2e685b8b31a5 (patch) | |
tree | 75c7cc09e5f2d7a835dcdb10c0f48e1ae66b8fee | |
parent | 5026dfaedf4a8043fd1d76c1b7da8880770f9255 (diff) | |
download | pandoc-6640506ddc0ab848824d818a363c2e685b8b31a5.tar.gz |
Lua/StackInstances: push Pandoc and Meta via constructor
Pandoc and Meta elements are now pushed by calling the respective
constructor functions of the pandoc Lua module. This makes serialization
consistent with the way blocks and inlines are pushed to lua and allows
to use List methods with the `blocks` value.
-rw-r--r-- | data/pandoc.lua | 15 | ||||
-rw-r--r-- | doc/lua-filters.md | 11 | ||||
-rw-r--r-- | src/Text/Pandoc/Lua/StackInstances.hs | 12 |
3 files changed, 31 insertions, 7 deletions
diff --git a/data/pandoc.lua b/data/pandoc.lua index 74263b1fd..d8f7adb97 100644 --- a/data/pandoc.lua +++ b/data/pandoc.lua @@ -153,6 +153,21 @@ end M.Doc = M.Pandoc ------------------------------------------------------------------------ +-- Meta +-- @section Meta + +--- Create a new Meta object. It sets the metatable of the given table to +--- `Meta`. +-- @function Meta +-- @tparam meta table table containing document meta information +M.Meta = {} +M.Meta.__call = function(t, meta) + return setmetatable(meta, self) +end +setmetatable(M.Meta, M.Meta) + + +------------------------------------------------------------------------ -- MetaValue -- @section MetaValue M.MetaValue = Element:make_subtype{} diff --git a/doc/lua-filters.md b/doc/lua-filters.md index 8cdb96194..11643da84 100644 --- a/doc/lua-filters.md +++ b/doc/lua-filters.md @@ -617,6 +617,17 @@ Lua functions for pandoc scripts. `meta`: : document meta data +## Meta + +[`Meta (table)`]{#Meta} + +: Create a new Meta object. + + Parameters: + + `table`: + : table containing document meta information + ## MetaValue [`MetaBlocks (blocks)`]{#MetaBlocks} diff --git a/src/Text/Pandoc/Lua/StackInstances.hs b/src/Text/Pandoc/Lua/StackInstances.hs index 3eb14eba3..ce6dbdb98 100644 --- a/src/Text/Pandoc/Lua/StackInstances.hs +++ b/src/Text/Pandoc/Lua/StackInstances.hs @@ -36,17 +36,14 @@ import Control.Applicative ((<|>)) import Foreign.Lua (FromLuaStack (peek), Lua, LuaInteger, LuaNumber, StackIndex, ToLuaStack (push), Type (..), throwLuaError, tryLua) import Text.Pandoc.Definition -import Text.Pandoc.Lua.Util (addValue, adjustIndexBy, getTable, - pushViaConstructor) +import Text.Pandoc.Lua.Util (adjustIndexBy, getTable, pushViaConstructor) import Text.Pandoc.Shared (safeRead) import qualified Foreign.Lua as Lua instance ToLuaStack Pandoc where - push (Pandoc meta blocks) = do - Lua.newtable - addValue "blocks" blocks - addValue "meta" meta + push (Pandoc meta blocks) = + pushViaConstructor "Pandoc" blocks meta instance FromLuaStack Pandoc where peek idx = do @@ -55,7 +52,8 @@ instance FromLuaStack Pandoc where return $ Pandoc meta blocks instance ToLuaStack Meta where - push (Meta mmap) = push mmap + push (Meta mmap) = + pushViaConstructor "Meta" mmap instance FromLuaStack Meta where peek idx = Meta <$> peek idx |