summaryrefslogtreecommitdiff
path: root/scripts/context/lua/mtx-base.lua
blob: eab82c9005e35b71a0b28961af468c4ab6d50084 (plain)
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
if not modules then modules = { } end modules ['mtx-base'] = {
    version   = 1.001,
    comment   = "formerly known as luatools",
    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-base</entry>
  <entry name="detail">ConTeXt TDS Management Tool (aka luatools)</entry>
  <entry name="version">1.35</entry>
 </metadata>
 <flags>
  <category name="basic">
   <subcategory>
    <flag name="generate"><short>generate file database</short></flag>
    <flag name="variables"><short>show configuration variables</short></flag>
    <flag name="configurations"><short>show configuration order</short></flag>
    <flag name="expand-braces"><short>expand complex variable</short></flag>
    <flag name="expand-path"><short>expand variable (resolve paths)</short></flag>
    <flag name="expand-var"><short>expand variable (resolve references)</short></flag>
    <flag name="show-path"><short>show path expansion of ...</short></flag>
    <flag name="var-value"><short>report value of variable</short></flag>
    <flag name="find-file"><short>report file location</short></flag>
    <flag name="find-path"><short>report path of file</short></flag>
    <flag name="make"><short>[or <ref name="ini"/>] make luatex format</short></flag>
    <flag name="run"><short>[or <ref name="fmt"/>] run luatex format</short></flag>
    <flag name="compile"><short>assemble and compile lua inifile</short></flag>
    <flag name="verbose"><short>give a bit more info</short></flag>
    <flag name="all"><short>show all found files</short></flag>
    <flag name="format" value="str"><short>filter cf format specification (default 'tex', use 'any' for any match)</short></flag>
    <flag name="pattern" value="str"><short>filter variables</short></flag>
    <flag name="trackers" value="list"><short>enable given trackers</short></flag>
   </subcategory>
  </category>
 </flags>
</application>
]]

local application = logs.application {
    name     = "mtx-base",
    banner   = "ConTeXt TDS Management Tool (aka luatools) 1.35",
    helpinfo = helpinfo,
}

local report = application.report

-- private option --noluc for testing errors in the stub

local pattern    = environment.arguments["pattern"]  or nil
local fileformat = environment.arguments["format"]   or "" -- nil ?
local allresults = environment.arguments["all"]      or false
local trace      = environment.arguments["trace"]

if type(pattern) == 'boolean' then
    report("invalid pattern specification")
    pattern = nil
end

if trace then
    resolvers.settrace(trace)  -- move to mtxrun ?
end

if environment.arguments["find-file"] then
    resolvers.load()
    if pattern then
        resolvers.dowithfilesandreport(resolvers.findfiles, { pattern }, fileformat, allresults)
    else
        resolvers.dowithfilesandreport(resolvers.findfiles, environment.files, fileformat, allresults)
    end
elseif environment.arguments["find-path"] then
    resolvers.load()
    local path = resolvers.findpath(environment.files[1], fileformat)
    print(path) -- quite basic, wil become function in logs
elseif environment.arguments["expand-braces"] then
    resolvers.load("nofiles")
    resolvers.dowithfilesandreport(resolvers.expandbraces, environment.files)
elseif environment.arguments["expand-path"] then
    resolvers.load("nofiles")
    resolvers.dowithfilesandreport(resolvers.expandpath, environment.files)
elseif environment.arguments["expand-var"] or environment.arguments["expand-variable"] then
    resolvers.load("nofiles")
    resolvers.dowithfilesandreport(resolvers.expansion, environment.files)
elseif environment.arguments["show-path"] or environment.arguments["path-value"] then
    resolvers.load("nofiles")
    resolvers.dowithfilesandreport(resolvers.showpath, environment.files)
elseif environment.arguments["var-value"] or environment.arguments["show-value"] then
    resolvers.load("nofiles")
    resolvers.dowithfilesandreport(resolvers.variable, environment.files)
elseif environment.arguments["format-path"] then
    resolvers.load()
    report(caches.getwritablepath("format"))
elseif pattern then -- brrr
    resolvers.load()
    resolvers.dowithfilesandreport(resolvers.findfiles, { pattern }, fileformat, allresults)
elseif environment.arguments["generate"] then
    resolvers.renewcache()
    trackers.enable("resolvers.locating")
    resolvers.load()
elseif environment.arguments["make"] or environment.arguments["ini"] or environment.arguments["compile"] then
    resolvers.load()
    trackers.enable("resolvers.locating")
    environment.make_format(environment.files[1] or "")
elseif environment.arguments["variables"] or environment.arguments["show-variables"] or environment.arguments["expansions"] or environment.arguments["show-expansions"] then
    resolvers.load("nofiles")
    resolvers.listers.variables(pattern)
elseif environment.arguments["configurations"] or environment.arguments["show-configurations"] then
    resolvers.load("nofiles")
    resolvers.listers.configurations()
elseif environment.arguments["exporthelp"] then
    application.export(environment.arguments["exporthelp"],environment.files[1])
elseif environment.arguments["help"] or (environment.files[1]=='help') or (#environment.files==0) then
    application.help()
elseif environment.files[1] == 'texmfcnf.lua' then
    resolvers.load("nofiles")
    resolvers.listers.configurations()
else
    resolvers.load()
    resolvers.dowithfilesandreport(resolvers.findfiles, environment.files, fileformat, allresults)
end