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
|
local function create_initialization_script(filename, options)
local initscript = assert(io.open(filename,"w"))
if type(options.file_line_error) == "boolean" then
initscript:write(string.format("texconfig.file_line_error = %s\n", options.file_line_error))
end
if type(options.halt_on_error) == "boolean" then
initscript:write(string.format("texconfig.halt_on_error = %s\n", options.halt_on_error))
end
initscript:write([==[
local print = print
local io_open = io.open
local io_write = io.write
local os_execute = os.execute
local texio_write = texio.write
local texio_write_nl = texio.write_nl
]==])
-- Packages coded in Lua doesn't follow -output-directory option and doesn't write command to the log file
initscript:write(string.format("local output_directory = %q\n", options.output_directory))
initscript:write([==[
local luawritelog
local function openluawritelog()
if not luawritelog then
luawritelog = assert(io_open(output_directory .. "/" .. tex.jobname .. ".cluttex-fls", "w"))
end
return luawritelog
end
io.open = function(fname, mode)
-- luatexja-ruby
if mode == "w" and fname == tex.jobname .. ".ltjruby" then
fname = output_directory .. "/" .. fname
end
if type(mode) == "string" and string.find(mode, "w") ~= nil then
-- write mode
openluawritelog():write("OUTPUT " .. fname .. "\n")
end
return io_open(fname, mode)
end
os.execute = function(...)
texio_write_nl("log", string.format("CLUTTEX_EXEC %s", ...), "")
return os_execute(...)
end
]==])
-- Silence some of the TeX output to the terminal.
initscript:write([==[
local function start_file_cb(category, filename)
if category == 1 then -- a normal data file, like a TeX source
texio_write_nl("log", "("..filename)
elseif category == 2 then -- a font map coupling font names to resources
texio_write("log", "{"..filename)
elseif category == 3 then -- an image file (png, pdf, etc)
texio_write("<"..filename)
elseif category == 4 then -- an embedded font subset
texio_write("<"..filename)
elseif category == 5 then -- a fully embedded font
texio_write("<<"..filename)
else
print("start_file: unknown category", category, filename)
end
end
callback.register("start_file", start_file_cb)
local function stop_file_cb(category)
if category == 1 then
texio_write("log", ")")
elseif category == 2 then
texio_write("log", "}")
elseif category == 3 then
texio_write(">")
elseif category == 4 then
texio_write(">")
elseif category == 5 then
texio_write(">>")
else
print("stop_file: unknown category", category)
end
end
callback.register("stop_file", stop_file_cb)
texio.write = function(...)
if select("#",...) == 1 then
-- Suppress luaotfload's message (See src/fontloader/runtime/fontload-reference.lua)
local s = ...
if string.match(s, "^%(using cache: ")
or string.match(s, "^%(using write cache: ")
or string.match(s, "^%(using read cache: ")
or string.match(s, "^%(load luc: ")
or string.match(s, "^%(load cache: ") then
return texio_write("log", ...)
end
end
return texio_write(...)
end
]==])
initscript:close()
end
return {
create_initialization_script = create_initialization_script
}
|