@@ -48,6 +48,8 @@ import Text.Pandoc.Options (ReaderOptions(readerExtensions))
48import Text.Pandoc.Lua.StackInstances ()
48import Text.Pandoc.Lua.StackInstances ()
49import Text.Pandoc.Readers (Reader (..), getReader)
49import Text.Pandoc.Readers (Reader (..), getReader)
50import Text.Pandoc.MIME (MimeType)
50import Text.Pandoc.MIME (MimeType)
51+import Text.Pandoc.Process (pipeProcess)
52+import System.Exit (ExitCode(..))
51import Data.Digest.Pure.SHA (sha1, showDigest)
53import Data.Digest.Pure.SHA (sha1, showDigest)
53import qualified Foreign.Lua as Lua
55import qualified Foreign.Lua as Lua
@@ -66,6 +68,9 @@ pushPandocModule datadir = do
66 Lua.push "sha1"
68 Lua.push "sha1"
67 Lua.pushHaskellFunction sha1HashFn
69 Lua.pushHaskellFunction sha1HashFn
68 Lua.rawset (-3)
70 Lua.rawset (-3)
72+ Lua.pushHaskellFunction pipeFn
70-- | Get the string representation of the pandoc module
75-- | Get the string representation of the pandoc module
71pandocModuleScript :: Maybe FilePath -> IO String
76pandocModuleScript :: Maybe FilePath -> IO String
@@ -109,6 +114,18 @@ sha1HashFn contents = do
109 Lua.push $ showDigest (sha1 contents)
114 Lua.push $ showDigest (sha1 contents)
121+pipeFn command args input = do
122+ (ec, output) <- liftIO $ pipeProcess Nothing command args input
123+ Lua.push $ case ec of
112insertMediaFn :: IORef MB.MediaBag
129insertMediaFn :: IORef MB.MediaBag
113 -> FilePath
130 -> FilePath
114 -> OrNil MimeType
131 -> OrNil MimeType