diff options
author | Karl Berry <karl@freefriends.org> | 2021-03-06 21:58:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-03-06 21:58:15 +0000 |
commit | 974640d66e61e81cb197ad96fdff7b08343e4c5a (patch) | |
tree | 2e1f75f32f312b7f24ba82b4590ae230bcd6f399 /Master/texmf-dist/tex/context/base/mkxl/attr-alt.lmt | |
parent | b4fa72e61230aca75f7f6fbf988821f71edfb6b2 (diff) |
context
git-svn-id: svn://tug.org/texlive/trunk@58167 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/attr-alt.lmt')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/attr-alt.lmt | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/attr-alt.lmt b/Master/texmf-dist/tex/context/base/mkxl/attr-alt.lmt new file mode 100644 index 00000000000..9d85920741d --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/attr-alt.lmt @@ -0,0 +1,111 @@ +if not modules then modules = { } end modules ['attr-eff'] = { + version = 1.001, + comment = "companion to attr-eff.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local attributes, nodes, backends, utilities = attributes, nodes, backends, utilities +local tex = tex + +local states = attributes.states +local enableaction = nodes.tasks.enableaction +local nodeinjections = backends.nodeinjections +local texsetattribute = tex.setattribute +local allocate = utilities.storage.allocate +local setmetatableindex = table.setmetatableindex + +local interfaces = interfaces +local implement = interfaces.implement + +attributes.alternates = attributes.alternates or { } +local alternates = attributes.alternates + +local a_alternate = attributes.private('alternate') + +alternates.data = allocate() +alternates.values = alternates.values or { } +alternates.registered = alternates.registered or { } +alternates.attribute = a_alternate + +local data = alternates.data +local registered = alternates.registered +local values = alternates.values + +storage.register("attributes/alternates/registered", registered, "attributes.alternates.registered") +storage.register("attributes/alternates/values", values, "attributes.alternates.values") + +local function extender(alternates,key) + if key == "none" then + local d = nodeinjections.stopalternate() + alternates.none = d + return d + end +end + +local function reviver(data,n) + local d = values[n] and nodeinjections.startalternate(values[n]) or nodeinjections.stopalternate() + data[n] = d + return d +end + +setmetatableindex(alternates, extender) +setmetatableindex(alternates.data, reviver) + +alternates.handler = nodes.installattributehandler { + name = "alternate", + namespace = alternates, + initializer = states.initialize, + finalizer = states.finalize, + processor = states.simple, +} + +local function register(specification) + local text = specification.text or "unknown" + local n = registered[text] + if not n then + n = #values + 1 + values[n] = text + registered[text] = n + end + return n +end + +local enabled = false + +local function enable() + if not enabled then + enableaction("shipouts","attributes.alternates.handler") + enabled = true + end +end + +alternates.register = register +alternates.enable = enable + +-- interface + +implement { + name = "setalternate", + actions = function(specification) + if not enabled then + enable() + end + texsetattribute(a_alternate,register(specification)) + end, + arguments = { + { + { "text", "string" }, + } + } +} + +implement { + name = "resetalternate", + actions = function() + if enabled then + texsetattribute(a_alternate) + end + end +} |