1if not modules then modules = { } end modules ['mult-chk'] = {
2 version = 1.001,
3 comment = "companion to mult-chk.mkiv",
4 author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5 copyright = "PRAGMA ADE / ConTeXt Development Team",
6 license = "see context related readme files"
7}
8
9local format = string.format
10local lpegmatch = lpeg.match
11local type = type
12
13local make_settings_to_hash_pattern = utilities.parsers.make_settings_to_hash_pattern
14local settings_to_set = utilities.parsers.settings_to_set
15local allocate = utilities.storage.allocate
16
17local report_interface = logs.reporter("interface","checking")
18
19local interfaces = interfaces
20local implement = interfaces.implement
21
22interfaces.syntax = allocate {
23 test = { keys = table.tohash { "a","b","c","d","e","f","g" } }
24}
25
26function interfaces.invalidkey(category,key)
27 report_interface("invalid key %a for %a in line %a",key,category,tex.inputlineno)
28end
29
30function interfaces.setvalidkeys(category,list)
31 local s = interfaces.syntax[category]
32 if not s then
33 interfaces.syntax[category] = {
34 keys = settings_to_set(list)
35 }
36 else
37 s.keys = settings_to_set(list)
38 end
39end
40
41function interfaces.addvalidkeys(category,list)
42 local s = interfaces.syntax[category]
43 if not s then
44 interfaces.syntax[category] = {
45 keys = settings_to_set(list)
46 }
47 else
48 settings_to_set(list,s.keys)
49 end
50end
51
52implement {
53 name = "setvalidinterfacekeys",
54 actions = interfaces.setvalidkeys,
55 arguments = "2 strings"
56}
57
58implement {
59 name = "addvalidinterfacekeys",
60 actions = interfaces.addvalidkeys,
61 arguments = "2 strings"
62}
63
64
65
66local prefix, category, keys
67
68local setsomevalue = context.setsomevalue
69local invalidkey = interfaces.invalidkey
70
71local function set(key,value)
72 if keys and not keys[key] then
73 invalidkey(category,key)
74 else
75 setsomevalue(prefix,key,value)
76 end
77end
78
79local pattern = make_settings_to_hash_pattern(set,"tolerant")
80
81function interfaces.getcheckedparameters(k,p,s)
82 if s and s ~= "" then
83 prefix, category = p, k
84 keys = k and k ~= "" and interfaces.syntax[k].keys
85 lpegmatch(pattern,s)
86 end
87end
88
89implement {
90 name = "getcheckedinterfaceparameters",
91 actions = interfaces.getcheckedparameters,
92 arguments = "3 strings"
93}
94 |