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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
if not modules then modules = { } end modules ['mtx-cache'] = {
version = 1.001,
comment = "companion to mtxrun.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local helpinfo = [[
<?xml version="1.0"?>
<application>
<metadata>
<entry name="name">mtx-cache</entry>
<entry name="detail">ConTeXt & MetaTeX Cache Management</entry>
<entry name="version">1.01</entry>
</metadata>
<flags>
<category name="basic">
<subcategory>
<flag name="make"><short>generate databases and formats</short></flag>
<flag name="erase"><short>completely remove cache</short></flag>
<flag name="list"><short>show cache</short></flag>
</subcategory>
<subcategory>
<flag name="fonts"><short>only wipe fonts</short></flag>
</subcategory>
</category>
</flags>
</application>
]]
local find = string.find
local filesuffix, replacesuffix = file.suffix, file.replacesuffix
local isfile = lfs.isfile
local remove = os.remove
local application = logs.application {
name = "mtx-cache",
banner = "ConTeXt & MetaTeX Cache Management 0.10",
helpinfo = helpinfo,
}
local report = application.report
scripts = scripts or { }
scripts.cache = scripts.cache or { }
local function collect(path)
local all = dir.glob(path .. "/**/*")
local ext = table.setmetatableindex("table")
for i=1,#all do
local name = all[i]
local list = ext[filesuffix(name)]
list[#list+1] = name
end
return ext
end
local function list(banner,path,ext)
local total = 0
report("%s: %s",banner,path)
report()
for k, v in table.sortedhash(ext) do
total = total + #v
report("%-6s : %4i",k,#v)
end
report()
report("total : %4i",total)
report()
end
local function erase(banner,path,list)
report("%s: %s",banner,path)
report()
for ext, list in table.sortedhash(list) do
local gone = 0
local kept = 0
for i=1,#list do
local filename = list[i]
if find(filename,"luatex%-cache") then
remove(filename)
if isfile(filename) then
kept = kept + 1
else
gone = gone + 1
end
end
end
report("%-6s : %4i gone, %4i kept",ext,gone,kept)
end
report()
end
function scripts.cache.make()
os.execute("mtxrun --generate")
os.execute("context --make")
os.execute("mtxrun --script font --reload")
end
function scripts.cache.erase()
local writable = caches.getwritablepath()
local groups = collect(writable)
list("writable path",writable,groups)
erase("writable path",writable,groups)
if environment.argument("make") then
scripts.cache.make()
end
end
function scripts.cache.list()
local readables = caches.getreadablepaths()
local writable = caches.getwritablepath()
local groups = collect(writable)
list("writable path",writable,groups)
for i=1,#readables do
local readable = readables[i]
if readable ~= writable then
local groups = collect(readable)
list("readable path",readable,groups)
end
end
end
if environment.argument("erase") then
scripts.cache.erase()
elseif environment.argument("list") then
scripts.cache.list()
elseif environment.argument("make") then
scripts.cache.make()
elseif environment.argument("exporthelp") then
application.export(environment.argument("exporthelp"),environment.files[1])
else
application.help()
end
|