OSDN Git Service

cleanup
[luatex-ja/luatexja.git] / src / ltj-infomute.lua
1 --
2 -- luatexja/infomute.lua
3 --
4 luatexbase.provides_module({
5   name = 'luatexja.infomute',
6   date = '2011/06/05',
7   description = '',
8 })
9 module('luatexja.infomute', package.seeall)
10 local err, warn, info, log = luatexbase.errwarinf(_NAME)
11
12 --------------------
13 --! luatexbase.module_info() で特定のモジュールの情報出力だけ
14 --! 抑止したい. 
15
16 local org_texio = texio
17 local patch_applied = false
18 local info_mute = {}
19
20 local function pick_module_name(line)
21   local mod
22   if line:sub(1, 7) == "Module " then
23      local s, e = line:find(" ", 8, true)
24      if s then mod = line:sub(8, s - 1) end
25   elseif line:sub(1, 1) == "(" then
26      local s, e = line:find(")", 2, true)
27      if s then mod = line:sub(2, s - 1) end
28   end
29   return mod
30 end
31
32 local function patched_write_nl(line, ...)
33   local mod = pick_module_name(line)
34   if not (mod and info_mute[mod]) then
35     org_texio.write_nl(line, ...)
36   end
37 end
38
39 local new_texio = setmetatable({ write_nl = patched_write_nl },
40   { __index = org_texio })
41 local org_fenv = getfenv(luatexbase.module_info)
42
43 local function apply_patch()
44   setfenv(luatexbase.module_info,
45     setmetatable({ texio = new_texio }, { __index = org_fenv }))
46   patch_applied = true
47 end
48
49 --! モジュール mod の情報出力を抑止する.
50 function add_mute(mod)
51   info_mute[mod] = true
52   if not patch_applied then
53     apply_patch()
54   end
55 end
56
57 -------------------- all done
58 -- EOF