trac-ctx.lua /size: 2795 b    last modification: 2021-10-28 13:50
1if not modules then modules = { } end modules ['trac-ctx'] = {
2    version   = 1.001,
3    comment   = "companion to trac-ctx.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 next = next
10
11local context        = context
12local implement      = interfaces.implement
13local register       = trackers.register
14
15local textrackers    = tex.trackers    or { }
16local texdirectives  = tex.directives  or { }
17local texexperiments = tex.experiments or { }
18
19tex.trackers         = textrackers
20tex.directives       = texdirectives
21tex.experiments      = texexperiments
22
23storage.register("tex/trackers",   textrackers,   "tex.trackers")
24storage.register("tex/directives", texdirectives, "tex.directives")
25storage.register("tex/experiments",texexperiments,"tex.experiments")
26
27local function doit(category,tag,v)
28    local tt = category[tag]
29    if tt then
30        context.unprotect()
31        context(v and tt[1] or tt[2]) -- could be one call
32        context.protect()
33    end
34end
35
36local function initialize(category,register)
37    for tag, commands in next, category do
38        register(tag, function(v) doit(category,tag,v) end) -- todo: v,tag in caller
39    end
40end
41
42local function install(category,register,tag,enable,disable)
43    category[tag] = { enable, disable }
44    register(tag, function(v) doit(category,tag,v) end) -- todo: v,tag in caller
45end
46
47implement {
48    name    = "initializetextrackers",
49    actions = function()
50        initialize(textrackers,trackers.register)
51    end
52}
53
54implement {
55    name    = "initializetexdirectives",
56    actions = function()
57        initialize(texdirectives,directives.register)
58    end
59}
60
61implement {
62    name    = "initializetexexperiments",
63    actions = function()
64        initialize(texexperiments,experiments.register)
65    end
66}
67
68implement {
69    name      = "installtextracker",
70    arguments = "3 strings",
71    actions   = function(tag,enable,disable)
72        install(textrackers,trackers.register,tag,enable,disable)
73    end,
74}
75
76implement {
77    name      = "installtexdirective",
78    arguments = "3 strings",
79    actions   = function(tag,enable,disable)
80        install(texdirectives,directives.register,tag,enable,disable)
81    end,
82}
83
84implement {
85    name      = "installtexexperiment",
86    arguments = "3 strings",
87    actions   = function(tag,enable,disable)
88        install(texexperiments,experiments.register,tag,enable,disable)
89    end,
90}
91
92-- this one might move
93
94interfaces.implement {
95    name    = "unsupportedcs",
96    public  = true,
97    actions = function()
98        logs.newline()
99        logs.report("fatal error","unsupported cs \\%s",tokens.scanners.csname())
100        logs.newline()
101        luatex.abort()
102    end
103}
104
105