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
|
if not modules then modules = { } end modules ['mult-aux'] = {
version = 1.001,
comment = "companion to mult-aux.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
interfaces.namespaces = interfaces.namespaces or { }
local namespaces = interfaces.namespaces
local variables = interfaces.variables
local trace_namespaces = false trackers.register("interfaces.namespaces", function(v) trace_namespaces = v end)
local report_namespaces = logs.new("namespaces")
local v_yes, v_list = variables.yes, variables.list
local prefix = "????"
local meaning = "@@@@"
local data = { }
function namespaces.define(namespace,settings)
if data[namespace] then
report_namespaces("namespace '%s' is already taken",namespace)
end
if #namespace < 2 then
report_namespaces("namespace '%s' should have more than 1 character",namespace)
end
local ns = { }
data[namespace] = ns
utilities.parsers.settings_to_hash(settings,ns)
local name = ns.name
if not name or name == "" then
report_namespaces("provide a (command) name in namespace '%s'",namespace)
end
local self = prefix .. namespace
context.unprotect()
-- context.installnamespace(namespace)
context("\\def\\%s%s{%s%s}",prefix,self,meaning,namespace)
if trace_namespaces then
report_namespaces("installing namespace '%s' for '%s'",namespace,name)
end
local parent = ns.parent or ""
if parent ~= "" then
if trace_namespaces then
report_namespaces("namespace '%s' for '%s' uses parent '%s'",namespace,name,parent)
end
parent = prefix .. parent
-- todo: check if defined
end
context.installparameterhandler(self,name)
if trace_namespaces then
report_namespaces("installing parameter handler for '%s'",name)
end
context.installparameterhashhandler(self,name)
if trace_namespaces then
report_namespaces("installing parameterhash handler for '%s'",name)
end
local style = ns.style
if style == v_yes then
context.installattributehandler(self,name)
if trace_namespaces then
report_namespaces("installing attribute handler for '%s'",name)
end
end
local command = ns.command
if command == v_yes then
context.installdefinehandler(self,name,parent)
if trace_namespaces then
report_namespaces("installing definition command for '%s' (single)",name)
end
elseif command == v_list then
context.installdefinehandler(self,name,parent)
if trace_namespaces then
report_namespaces("installing definition command for '%s' (multiple)",name)
end
end
local setup = ns.setup
if setup == v_yes then
context.installsetuphandler(self,name)
if trace_namespaces then
report_namespaces("installing setup command for '%s' (single)",name)
end
elseif setup == v_list then
context.installsetuphandler(self,name)
if trace_namespaces then
report_namespaces("installing setup command for '%s' (multiple)",name)
end
end
context.protect()
end
function utilities.formatters.list(data,key,keys)
if not keys then
keys = { }
for _, v in next, data do
for k, _ in next, v do
keys[k] = true
end
end
keys = table.sortedkeys(keys)
end
context.starttabulate { "|"..string.rep("l|",#keys+1) }
context.NC()
context(key)
for i=1,#keys do
context.NC()
context(keys[i])
end context.NR()
context.HL()
for k, v in table.sortedhash(data) do
context.NC()
context(k)
for i=1,#keys do
context.NC()
context(v[keys[i]])
end context.NR()
end
context.stoptabulate()
end
function namespaces.list()
-- utilities.formatters.list(data,"namespace")
local keys = { "type", "name", "comment", "version", "parent", "definition", "setup", "style" }
utilities.formatters.list(data,"namespace",keys)
end
|