diff options
author | Taco Hoekwater <taco@elvenkind.com> | 2010-05-24 14:05:02 +0000 |
---|---|---|
committer | Taco Hoekwater <taco@elvenkind.com> | 2010-05-24 14:05:02 +0000 |
commit | 57ea7dad48fbf2541c04e434c31bde655ada3ac4 (patch) | |
tree | 1f8b43bc7cb92939271e1f5bec610710be69097f /Master/texmf-dist/tex/context/base/mult-ini.lua | |
parent | 6ee41e1f1822657f7f23231ec56c0272de3855e3 (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.lua | 47 |
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 |