@@ -28,26 +28,22 @@ Pandoc module for lua.
2828-}
2929module Text.Pandoc.Lua.Module.Pandoc
3030 ( pushModule
31− , pushMediaBagModule
3231 ) where
3332
34−import Control.Monad (when, zipWithM_)
33+import Control.Monad (when)
3534import Data.Default (Default (..))
3635import Data.Digest.Pure.SHA (sha1, showDigest)
37−import Data.IORef (IORef, modifyIORef', readIORef)
3836import Data.Maybe (fromMaybe)
3937import Data.Text (pack)
4038import Foreign.Lua (ToLuaStack, FromLuaStack, Lua, NumResults, liftIO)
4139import System.Exit (ExitCode (..))
42−import Text.Pandoc.Class (CommonState (..), fetchItem, putCommonState,
43− runIO, runIOorExplode, setMediaBag)
40+import Text.Pandoc.Class (runIO)
4441import Text.Pandoc.Definition (Block, Inline)
4542import Text.Pandoc.Lua.Filter (walkInlines, walkBlocks, LuaFilter)
4643import Text.Pandoc.Lua.StackInstances ()
4744import Text.Pandoc.Lua.Util (OrNil (toMaybe), addFunction, addValue,
4845 loadScriptFromDataDir, raiseError)
4946import Text.Pandoc.Walk (Walkable)
50−import Text.Pandoc.MIME (MimeType)
5147import Text.Pandoc.Options (ReaderOptions (readerExtensions))
5248import Text.Pandoc.Process (pipeProcess)
5349import Text.Pandoc.Readers (Reader (..), getReader)
@@ -55,7 +51,6 @@ import Text.Pandoc.Readers (Reader (..), getReader)
5551import qualified Data.ByteString.Lazy as BL
5652import qualified Data.ByteString.Lazy.Char8 as BSL
5753import qualified Foreign.Lua as Lua
58−import qualified Text.Pandoc.MediaBag as MB
5954
6055-- | Push the "pandoc" on the lua stack. Requires the `list` module to be
6156-- loaded.
@@ -93,18 +88,6 @@ readDoc content formatSpecOrNil = do
9388 Left s -> raiseError (show s) -- error while reading
9489 _ -> raiseError "Only string formats are supported at the moment."
9590
96−--
97−-- MediaBag submodule
98−--
99−pushMediaBagModule :: CommonState -> IORef MB.MediaBag -> Lua NumResults
100−pushMediaBagModule commonState mediaBagRef = do
101− Lua.newtable
102− addFunction "insert" (insertMediaFn mediaBagRef)
103− addFunction "lookup" (lookupMediaFn mediaBagRef)
104− addFunction "list" (mediaDirectoryFn mediaBagRef)
105− addFunction "fetch" (fetch commonState mediaBagRef)
106− return 1
107−
10891sha1HashFn :: BL.ByteString
10992 -> Lua NumResults
11093sha1HashFn contents = do
@@ -158,56 +141,3 @@ instance ToLuaStack PipeError where
158141 , BSL.pack "): "
159142 , if output == mempty then BSL.pack "<no output>" else output
160143 ]
161−-- end: pipe
162−
163−insertMediaFn :: IORef MB.MediaBag
164− -> FilePath
165− -> OrNil MimeType
166− -> BL.ByteString
167− -> Lua NumResults
168−insertMediaFn mbRef fp nilOrMime contents = do
169− liftIO . modifyIORef' mbRef $
170− MB.insertMedia fp (toMaybe nilOrMime) contents
171− return 0
172−
173−lookupMediaFn :: IORef MB.MediaBag
174− -> FilePath
175− -> Lua NumResults
176−lookupMediaFn mbRef fp = do
177− res <- MB.lookupMedia fp <$> liftIO (readIORef mbRef)
178− case res of
179− Nothing -> Lua.pushnil *> return 1
180− Just (mimeType, contents) -> do
181− Lua.push mimeType
182− Lua.push contents
183− return 2
184−
185−mediaDirectoryFn :: IORef MB.MediaBag
186− -> Lua NumResults
187−mediaDirectoryFn mbRef = do
188− dirContents <- MB.mediaDirectory <$> liftIO (readIORef mbRef)
189− Lua.newtable
190− zipWithM_ addEntry [1..] dirContents
191− return 1
192− where
193− addEntry :: Int -> (FilePath, MimeType, Int) -> Lua ()
194− addEntry idx (fp, mimeType, contentLength) = do
195− Lua.newtable
196− Lua.push "path" *> Lua.push fp *> Lua.rawset (-3)
197− Lua.push "type" *> Lua.push mimeType *> Lua.rawset (-3)
198− Lua.push "length" *> Lua.push contentLength *> Lua.rawset (-3)
199− Lua.rawseti (-2) idx
200−
201−fetch :: CommonState
202− -> IORef MB.MediaBag
203− -> String
204− -> Lua NumResults
205−fetch commonState mbRef src = do
206− mediaBag <- liftIO $ readIORef mbRef
207− (bs, mimeType) <- liftIO . runIOorExplode $ do
208− putCommonState commonState
209− setMediaBag mediaBag
210− fetchItem src
211− Lua.push $ fromMaybe "" mimeType
212− Lua.push bs
213− return 2 -- returns 2 values: contents, mimetype