diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2019-02-15 17:13:04 +0100 |
---|---|---|
committer | Albert Krewinkel <albert@zeitkraut.de> | 2019-05-29 23:17:12 +0200 |
commit | 3097ee100ed260a5c2cea7df5bf80c989687df44 (patch) | |
tree | e42fc606fb96b93f09422203470013b9b825832c /src/Text/Pandoc/Lua/Module | |
parent | 8507d98a1534ba4049e4c1ca3671ee41a1f56c70 (diff) | |
download | pandoc-3097ee100ed260a5c2cea7df5bf80c989687df44.tar.gz |
pandoc.mediabag module: add items function iterating over mediabag
A new function `pandoc.mediabag.items` was added to Lua module
pandoc.mediabag. This allows users to lazily iterate over all media bag
items, loading items into Lua one-by-one. Example:
for filename, mime_type, content in pandoc.mediabag.items() do
-- use media bag item.
end
This is a convenient alternative to using `mediabag.list` in combination
with `mediabag.lookup`.
Diffstat (limited to 'src/Text/Pandoc/Lua/Module')
-rw-r--r-- | src/Text/Pandoc/Lua/Module/MediaBag.hs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Lua/Module/MediaBag.hs b/src/Text/Pandoc/Lua/Module/MediaBag.hs index 52aeaa1af..ce6303ec6 100644 --- a/src/Text/Pandoc/Lua/Module/MediaBag.hs +++ b/src/Text/Pandoc/Lua/Module/MediaBag.hs @@ -20,6 +20,7 @@ import Foreign.Lua (Lua, NumResults, Optional, liftIO) import Text.Pandoc.Class (CommonState (..), fetchItem, putCommonState, runIOorExplode, setMediaBag) import Text.Pandoc.Lua.Marshaling () +import Text.Pandoc.Lua.Marshaling.MediaBag (pushIterator) import Text.Pandoc.Lua.Util (addFunction) import Text.Pandoc.MIME (MimeType) @@ -34,6 +35,7 @@ pushModule :: Lua NumResults pushModule = do Lua.newtable addFunction "insert" insertMediaFn + addFunction "items" items addFunction "lookup" lookupMediaFn addFunction "list" mediaDirectoryFn addFunction "fetch" fetch @@ -66,9 +68,13 @@ insertMediaFn fp optionalMime contents = do modifyCommonState $ \st -> let mb = MB.insertMedia fp (Lua.fromOptional optionalMime) contents (stMediaBag st) - in st { stMediaBag = mb} + in st { stMediaBag = mb } return 0 +-- | Returns iterator values to be used with a Lua @for@ loop. +items :: Lua NumResults +items = stMediaBag <$> getCommonState >>= pushIterator + lookupMediaFn :: FilePath -> Lua NumResults lookupMediaFn fp = do |