From 3097ee100ed260a5c2cea7df5bf80c989687df44 Mon Sep 17 00:00:00 2001 From: Albert Krewinkel Date: Fri, 15 Feb 2019 17:13:04 +0100 Subject: 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`. --- src/Text/Pandoc/Lua/Module/MediaBag.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/Text/Pandoc/Lua/Module') 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 -- cgit v1.2.3