summaryrefslogtreecommitdiff
path: root/tex/context/base/mult-ini.lua
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
committerMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
commit85b7bc695629926641c7cb752fd478adfdf374f3 (patch)
tree80293f5aaa7b95a500a78392c39688d8ee7a32fc /tex/context/base/mult-ini.lua
downloadcontext-85b7bc695629926641c7cb752fd478adfdf374f3.tar.gz
stable 2010-05-24 13:10
Diffstat (limited to 'tex/context/base/mult-ini.lua')
-rw-r--r--tex/context/base/mult-ini.lua105
1 files changed, 105 insertions, 0 deletions
diff --git a/tex/context/base/mult-ini.lua b/tex/context/base/mult-ini.lua
new file mode 100644
index 000000000..92a7bc629
--- /dev/null
+++ b/tex/context/base/mult-ini.lua
@@ -0,0 +1,105 @@
+if not modules then modules = { } end modules ['mult-ini'] = {
+ version = 1.001,
+ 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 { }
+interfaces.constants = interfaces.constants or { }
+interfaces.variables = interfaces.variables or { }
+
+storage.register("interfaces/messages", interfaces.messages, "interfaces.messages" )
+storage.register("interfaces/constants", interfaces.constants, "interfaces.constants")
+storage.register("interfaces/variables", interfaces.variables, "interfaces.variables")
+
+local messages, constants, variables = interfaces.messages, interfaces.constants, interfaces.variables
+
+function interfaces.setmessages(category,str)
+ local m = messages[category] or { }
+ for k, v in gmatch(str,"(%S+) *: *(.-) *[\n\r]") do
+ m[k] = gsub(v,"%-%-","%%s")
+ end
+ messages[category] = m
+end
+
+function interfaces.setmessage(category,tag,message)
+ local m = messages[category]
+ if not m then
+ m = { }
+ messages[category] = m
+ end
+ m[tag] = gsub(message,"%-%-","%%s")
+end
+
+function interfaces.getmessage(category,tag,default)
+ local m = messages[category]
+ 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 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,lpegmatch(messagesplitter,arguments))
+ end
+end
+
+function interfaces.showmessage(category,tag,arguments)
+ local m = messages[category]
+ commands.writestatus((m and m.title) or "unknown title",interfaces.makemessage(category,tag,arguments))
+end
+
+function interfaces.setvariable(variable,given)
+--~ variables[given] = variable
+ variables[variable] = given
+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