diff options
author | Marius <mariausol@gmail.com> | 2010-07-04 15:32:09 +0300 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2010-07-04 15:32:09 +0300 |
commit | 85b7bc695629926641c7cb752fd478adfdf374f3 (patch) | |
tree | 80293f5aaa7b95a500a78392c39688d8ee7a32fc /tex/context/base/mult-ini.lua | |
download | context-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.lua | 105 |
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 |