Skip to content

Commit

Permalink
Added "post_execute" callback
Browse files Browse the repository at this point in the history
  • Loading branch information
tndrle committed Jan 13, 2024
1 parent 257f81a commit e2eae51
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 0 deletions.
47 changes: 47 additions & 0 deletions pyluatex.lua
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ local parent_env = nil
local last_code = nil
local last_output = nil

local callback_handlers = {
post_execute = {}
}

local function get_tex_file_folder()
for _, v in ipairs(arg) do
if v:sub(1, 1) ~= "-" then
Expand Down Expand Up @@ -145,6 +149,17 @@ function pyluatex.execute(code, auto_print, write, repl_mode, store)
last_output = output_lines
end

for _, handler in pairs(callback_handlers["post_execute"]) do
handler({
session = pyluatex.session,
success = resp.success,
code = code_lines,
output = output_lines,
log_message = resp.log_msg,
repl_mode = repl_mode
})
end

if pyluatex.verbose or not resp.success then
texio.write_nl('PyLuaTeX input for session "' .. pyluatex.session ..
'": ' .. full_code)
Expand Down Expand Up @@ -222,6 +237,38 @@ function pyluatex.get_last_output()
return last_output
end

function pyluatex.register_event_handler(event, name, handler)
local handlers = callback_handlers[event]
if handlers ~= nil then
if handlers[name] ~= nil then
show_err(
'Event handler "' .. name .. '" already registered' ..
' for event "' .. event .. '"'
)
return
end
handlers[name] = handler
else
show_err('Unknown event "' .. event .. '"')
end
end

function pyluatex.unregister_event_handler(event, name)
local handlers = callback_handlers[event]
if handlers ~= nil then
if handlers[name] == nil then
show_err(
'Event handler "' .. name .. '" not registered' ..
' for event "' .. event .. '"'
)
return
end
handlers[name] = nil
else
show_err('Unknown event "' .. event .. '"')
end
end

local function parse_bool(name, value)
value = value:fullstrip()
if value == "true" then
Expand Down
79 changes: 79 additions & 0 deletions test/test-cases/callback.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
tests:
- code: |
\directlua{
pyluatex.register_event_handler(
"post_execute",
"handler_name",
function() texio.write("CALLBACK TEST") end
)
}
\py{1}
log: CALLBACK TEST
pdf: 1
- success: false
code: |
\directlua{
pyluatex.register_event_handler(
"unknown_event",
"handler_name",
function() texio.write("CALLBACK TEST") end
)
}
log: |
! Package PyLuaTeX Error: Unknown event "unknown_event".
- success: false
code: |
\directlua{
pyluatex.register_event_handler(
"post_execute",
"handler_name",
function() texio.write("CALLBACK TEST") end
)
pyluatex.register_event_handler(
"post_execute",
"handler_name",
function() texio.write("CALLBACK TEST") end
)
}
log: |
! Package PyLuaTeX Error: Event handler "handler_name" already registered for e
vent "post_execute".
- code: |
\directlua{
pyluatex.register_event_handler(
"post_execute",
"handler_name",
function() texio.write("CALLBACK TEST") end
)
pyluatex.unregister_event_handler("post_execute", "handler_name")
}
not_log: CALLBACK TEST
- success: false
code: |
\directlua{
pyluatex.unregister_event_handler("post_execute", "handler_name")
}
log: |
! Package PyLuaTeX Error: Event handler "handler_name" not registered for event
"post_execute".
- success: false
code: |
\directlua{
pyluatex.unregister_event_handler("unknown_event", "handler_name")
}
log: |
! Package PyLuaTeX Error: Unknown event "unknown_event".
- code: |
\directlua{
function handler(info)
texio.write_nl("TEST")
texio.write_nl("Code: " .. table.concat(info.code))
end
pyluatex.register_event_handler("post_execute", "handler_name", handler)
}
\py{1}
log: |
TEST
Code: 1
pdf: 1

0 comments on commit e2eae51

Please sign in to comment.