@@ -41,7 +41,8 @@ import Data.IORef
41import Data.Text (pack)
41import Data.Text (pack)
42import Foreign.Lua (Lua, FromLuaStack, ToLuaStack, NumResults, liftIO)
42import Foreign.Lua (Lua, FromLuaStack, ToLuaStack, NumResults, liftIO)
43import Text.Pandoc.Class (fetchMediaResource, readDataFile, runIO,
43import Text.Pandoc.Class (fetchMediaResource, readDataFile, runIO,
44− runIOorExplode, setUserDataDir)
44+ runIOorExplode, setUserDataDir, CommonState(..),
45import Text.Pandoc.Options (ReaderOptions(readerExtensions))
46import Text.Pandoc.Options (ReaderOptions(readerExtensions))
46import Text.Pandoc.Lua.StackInstances ()
47import Text.Pandoc.Lua.StackInstances ()
47import Text.Pandoc.Readers (Reader (..), getReader)
48import Text.Pandoc.Readers (Reader (..), getReader)
@@ -83,13 +84,13 @@ readDoc formatSpec content = do
84-- MediaBag submodule
85-- MediaBag submodule
86−pushMediaBagModule :: IORef MB.MediaBag -> Lua ()
87+pushMediaBagModule :: CommonState -> IORef MB.MediaBag -> Lua ()
87−pushMediaBagModule mediaBagRef = do
88+pushMediaBagModule commonState mediaBagRef = do
88 Lua.newtable
89 Lua.newtable
89 addFunction "insert" (insertMediaFn mediaBagRef)
90 addFunction "insert" (insertMediaFn mediaBagRef)
90 addFunction "lookup" (lookupMediaFn mediaBagRef)
91 addFunction "lookup" (lookupMediaFn mediaBagRef)
91 addFunction "list" (mediaDirectoryFn mediaBagRef)
92 addFunction "list" (mediaDirectoryFn mediaBagRef)
92− addFunction "fetch" (insertResource mediaBagRef)
93+ addFunction "fetch" (insertResource commonState mediaBagRef)
95 addFunction name fn = do
96 addFunction name fn = do
@@ -103,7 +104,8 @@ insertMediaFn :: IORef MB.MediaBag
103 -> BL.ByteString
104 -> BL.ByteString
104 -> Lua NumResults
105 -> Lua NumResults
105insertMediaFn mbRef fp nilOrMime contents = do
106insertMediaFn mbRef fp nilOrMime contents = do
107+ liftIO . modifyIORef' mbRef $
106− liftIO . modifyIORef' mbRef $ MB.insertMedia fp (toMaybe nilOrMime) contents
108+ MB.insertMedia fp (toMaybe nilOrMime) contents
109lookupMediaFn :: IORef MB.MediaBag
111lookupMediaFn :: IORef MB.MediaBag
@@ -134,12 +136,15 @@ mediaDirectoryFn mbRef = do
134 Lua.push "length" *> Lua.push contentLength *> Lua.rawset (-3)
136 Lua.push "length" *> Lua.push contentLength *> Lua.rawset (-3)
135 Lua.rawseti (-2) idx
137 Lua.rawseti (-2) idx
139+insertResource :: CommonState
137−insertResource :: IORef MB.MediaBag
140+ -> IORef MB.MediaBag
138 -> String
141 -> String
139 -> Lua NumResults
142 -> Lua NumResults
140−insertResource mbRef src = do
143+insertResource commonState mbRef src = do
141− (fp, mimeType, bs) <- liftIO . runIOorExplode $ fetchMediaResource src
144+ (fp, mimeType, bs) <- liftIO . runIOorExplode $ do
145+ putCommonState commonState
146+ fetchMediaResource src
142− liftIO $ print (fp, mimeType)
147+ liftIO $ print (fp, mimeType) -- TODO DEBUG
143 insertMediaFn mbRef fp (OrNil mimeType) bs
148 insertMediaFn mbRef fp (OrNil mimeType) bs