pandoc.lua: use wrapper funciton for pipe command
The pipe command is wrapped in a lua function, throwing a lua error if the command returns with an error. A wrapper is needed as Haskell functions exposed to lua may not throw lua errors due to limitations of hslua. The error handling is written such that a table can be returned as an error object in the future. This is potentially useful when finer control is required while catching the error in lua code. Current limitations of hslua require error objects to be strings.
This commit is contained in:
parent
9b750f7d87
commit
371f9b7084
2 changed files with 24 additions and 1 deletions
|
@ -790,6 +790,29 @@ function M.read(markup, format)
|
|||
end
|
||||
end
|
||||
|
||||
--- Runs command with arguments, passing it some input, and returns the output.
|
||||
-- @treturn string Output of command.
|
||||
-- @usage
|
||||
-- local ec, output = pandoc.pipe("sed", {"-e","s/a/b/"}, "abc")
|
||||
function M.pipe (command, args, input)
|
||||
local ec, output = pandoc._pipe(command, args, input)
|
||||
if ec ~= 0 then
|
||||
err = setmetatable(
|
||||
{ command = command, error_code = ec, output = output},
|
||||
{ __tostring = function(e)
|
||||
return "Error running " .. e.command
|
||||
.. " (error code " .. e.error_code .. "): "
|
||||
.. e.output
|
||||
end
|
||||
}
|
||||
)
|
||||
-- TODO: drop the wrapping call to `tostring` as soon as hslua supports
|
||||
-- non-string error objects.
|
||||
error(tostring(err))
|
||||
end
|
||||
return output
|
||||
end
|
||||
|
||||
--- Use functions defined in the global namespace to create a pandoc filter.
|
||||
-- All globally defined functions which have names of pandoc elements are
|
||||
-- collected into a new table.
|
||||
|
|
|
@ -63,7 +63,7 @@ pushPandocModule datadir = do
|
|||
script <- liftIO (pandocModuleScript datadir)
|
||||
status <- Lua.loadstring script
|
||||
unless (status /= Lua.OK) $ Lua.call 0 1
|
||||
addFunction "pipe" pipeFn
|
||||
addFunction "_pipe" pipeFn
|
||||
addFunction "_read" readDoc
|
||||
addFunction "sha1" sha1HashFn
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue