summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mult-ini.lua
diff options
context:
space:
mode:
authorTaco Hoekwater <taco@elvenkind.com>2010-05-24 14:05:02 +0000
committerTaco Hoekwater <taco@elvenkind.com>2010-05-24 14:05:02 +0000
commit57ea7dad48fbf2541c04e434c31bde655ada3ac4 (patch)
tree1f8b43bc7cb92939271e1f5bec610710be69097f /Master/texmf-dist/tex/context/base/mult-ini.lua
parent6ee41e1f1822657f7f23231ec56c0272de3855e3 (diff)
here is context 2010.05.24 13:05
git-svn-id: svn://tug.org/texlive/trunk@18445 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mult-ini.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.lua47
1 files changed, 41 insertions, 6 deletions
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.lua b/Master/texmf-dist/tex/context/base/mult-ini.lua
index 06707adf87a..92a7bc62965 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.lua
+++ b/Master/texmf-dist/tex/context/base/mult-ini.lua
@@ -1,12 +1,14 @@
if not modules then modules = { } end modules ['mult-ini'] = {
version = 1.001,
- comment = "companion to mult-ini.tex",
+ comment = "companion to mult-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local format, gmatch, gsub = string.format, string.gmatch, string.gsub
+local lpegmatch = lpeg.match
+local serialize = table.serialize
interfaces = interfaces or { }
interfaces.messages = interfaces.messages or { }
@@ -33,25 +35,30 @@ function interfaces.setmessage(category,tag,message)
m = { }
messages[category] = m
end
- m[tag] = message:gsub("%-%-","%%s")
+ m[tag] = gsub(message,"%-%-","%%s")
end
-function interfaces.getmessage(category,tag)
+function interfaces.getmessage(category,tag,default)
local m = messages[category]
- return (m and m[tag]) or "unknown message"
+ return (m and m[tag]) or default or "unknown message"
+end
+
+function interfaces.doifelsemessage(category,tag)
+ local m = messages[category]
+ return commands.testcase(m and m[tag])
end
local messagesplitter = lpeg.splitat(",")
function interfaces.makemessage(category,tag,arguments)
local m = messages[category]
- m = (m and m[tag] ) or format("unknown message, category '%s', tag '%s'",category,tag)
+ m = (m and (m[tag] or m[tostring(tag)])) or format("unknown message, category '%s', tag '%s'",category,tag)
if not m then
return m .. " " .. tag
elseif not arguments then
return m
else
- return format(m,messagesplitter:match(arguments))
+ return format(m,lpegmatch(messagesplitter,arguments))
end
end
@@ -68,3 +75,31 @@ end
function interfaces.setconstant(constant,given)
constants[given] = constant
end
+
+-- it's nicer to have numbers as reference than a hash
+
+interfaces.cachedsetups = interfaces.cachedsetups or { }
+interfaces.hashedsetups = interfaces.hashedsetups or { }
+
+storage.register("interfaces.cachedsetups", interfaces.cachedsetups, "interfaces.cachedsetups")
+storage.register("interfaces.hashedsetups", interfaces.hashedsetups, "interfaces.hashedsetups")
+
+local cachedsetups = interfaces.cachedsetups
+local hashedsetups = interfaces.hashedsetups
+
+function interfaces.cachesetup(t)
+ local hash = serialize(t)
+ local done = hashedsetups[hash]
+ if done then
+ return cachedsetups[done]
+ else
+ done = #cachedsetups + 1
+ cachedsetups[done] = t
+ hashedsetups[hash] = done
+ return t
+ end
+end
+
+function interfaces.is_command(str)
+ return (str and str ~= "" and token.csname_name(token.create(str)) ~= "") or false
+end