1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
if not modules then modules = { } end modules ['luat-run'] = {
version = 1.001,
comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local format, rpadd = string.format, string.rpadd
local insert = table.insert
local trace_lua_dump = false trackers.register("system.dump", function(v) trace_lua_dump = v end)
local trace_temp_files = false trackers.register("system.tempfiles", function(v) trace_temp_files = v end)
local report_lua_dump = logs.new("lua dump actions")
local report_temp_files = logs.new("temporary files")
luatex = luatex or { }
local luatex = luatex
local startactions = { }
local stopactions = { }
function luatex.registerstartactions(...) insert(startactions, ...) end
function luatex.registerstopactions (...) insert(stopactions, ...) end
luatex.showtexstat = luatex.showtexstat or function() end
luatex.showjobstat = luatex.showjobstat or statistics.showjobstat
local function start_run()
if logs.start_run then
logs.start_run()
end
for i=1,#startactions do
startactions[i]()
end
end
local function stop_run()
for i=1,#stopactions do
stopactions[i]()
end
if luatex.showjobstat then
statistics.show(logs.report_job_stat)
end
if luatex.showtexstat then
for k,v in next, status.list() do
logs.report_tex_stat(k,v)
end
end
if logs.stop_run then
logs.stop_run()
end
end
local function start_shipout_page()
logs.start_page_number()
end
local function stop_shipout_page()
logs.stop_page_number()
end
local function report_output_pages()
end
local function report_output_log()
end
local function pre_dump_actions()
lua.finalize(trace_lua_dump and report_lua_dump or nil)
statistics.reportstorage("log")
-- statistics.savefmtstatus("\jobname","\contextversion","context.tex")
end
-- this can be done later
callbacks.register('start_run', start_run, "actions performed at the beginning of a run")
callbacks.register('stop_run', stop_run, "actions performed at the end of a run")
callbacks.register('report_output_pages', report_output_pages, "actions performed when reporting pages")
callbacks.register('report_output_log', report_output_log, "actions performed when reporting log file")
callbacks.register('start_page_number', start_shipout_page, "actions performed at the beginning of a shipout")
callbacks.register('stop_page_number', stop_shipout_page, "actions performed at the end of a shipout")
callbacks.register('process_input_buffer', false, "actions performed when reading data")
callbacks.register('process_output_buffer', false, "actions performed when writing data")
callbacks.register("pre_dump", pre_dump_actions, "lua related finalizers called before we dump the format") -- comes after \everydump
-- an example:
local tempfiles = { }
function luatex.registertempfile(name)
name = name .. ".mkiv-tmp" -- maybe just .tmp
if trace_temp_files and not tempfiles[name] then
report_temp_files("registering: %s",name)
end
tempfiles[name] = true
return name
end
function luatex.cleanuptempfiles()
for name, _ in next, tempfiles do
if trace_temp_files then
report_temp_files("removing: %s",name)
end
os.remove(name)
end
tempfiles = { }
end
luatex.registerstopactions(luatex.cleanuptempfiles)
|