From 1b2a17ebfd56124803e8d0168c2755cb073ff425 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sun, 10 Oct 2010 14:25:00 +0200 Subject: beta 2010.10.10 14:25 --- scripts/context/lua/mtx-interface.lua | 183 ++++++++++++++++++++++++--------- scripts/context/lua/mtxrun.lua | 22 ++-- scripts/context/stubs/mswin/mtxrun.lua | 22 ++-- scripts/context/stubs/unix/mtxrun | 22 ++-- 4 files changed, 181 insertions(+), 68 deletions(-) (limited to 'scripts') diff --git a/scripts/context/lua/mtx-interface.lua b/scripts/context/lua/mtx-interface.lua index 986183ffe..ed0792d32 100644 --- a/scripts/context/lua/mtx-interface.lua +++ b/scripts/context/lua/mtx-interface.lua @@ -6,7 +6,8 @@ if not modules then modules = { } end modules ['mtx-cache'] = { license = "see context related readme files" } -local format = string.format +local concat, sort, insert = table.concat, table.sort, table.insert +local gsub, format, gmatch = string.gsub, string.format, string.gmatch scripts = scripts or { } scripts.interface = scripts.interface or { } @@ -15,11 +16,11 @@ local flushers = { } local userinterfaces = { 'en','cs','de','it','nl','ro','fr','pe' } local messageinterfaces = { 'en','cs','de','it','nl','ro','fr','pe','no' } -function flushers.scite(interface,collection) +function flushers.scite(interface,commands) local result, i = {}, 0 result[#result+1] = format("keywordclass.macros.context.%s=",interface) - for i=1,#collection do - local command = collection[i] + for i=1,#commands do + local command = commands[i] if i==0 then result[#result+1] = "\\\n" i = 5 @@ -28,49 +29,123 @@ function flushers.scite(interface,collection) end result[#result+1] = format("%s ",command) end - io.savedata(format("cont-%s-scite.properties",interface), table.concat(result),"\n") - io.savedata(format("cont-%s-scite.lua",interface), table.serialize(collection,true)) + io.savedata(format("cont-%s-scite.properties",interface), concat(result),"\n") + io.savedata(format("cont-%s-scite.lua",interface), table.serialize(commands,true)) end -function flushers.jedit(interface,collection) +function flushers.jedit(interface,commands) local result = {} result[#result+1] = "" result[#result+1] = "\n" result[#result+1] = "" result[#result+1] = "\t" result[#result+1] = "\t\t" - for i=1,#collection do - local command = collection[i] - result[#result+1] = format("\t\t\t%s",command) + for i=1,#commands do + result[#result+1] = format("\t\t\t%s",commands[i]) end result[#result+1] = "\t\t" result[#result+1] = "\t" result[#result+1] = "" - io.savedata(format("context-jedit-%s.xml",interface), table.concat(result),"\n") + io.savedata(format("context-jedit-%s.xml",interface), concat(result),"\n") end -function flushers.bbedit(interface,collection) +function flushers.bbedit(interface,commands) local result = {} result[#result+1] = "" result[#result+1] = "BBLMKeywordList" result[#result+1] = "" - for i=1,#collection do - local command = collection[i] - result[#result+1] = format("\t\\%s",command) + for i=1,#commands do + result[#result+1] = format("\t\\%s",commands[i]) end result[#result+1] = "" - io.savedata(format("context-bbedit-%s.xml",interface), table.concat(result),"\n") + io.savedata(format("context-bbedit-%s.xml",interface), concat(result),"\n") end -function flushers.raw(interface,collection) - for i=1,#collection do - local command = collection[i] - logs.simple(command) +function flushers.raw(interface,commands) + for i=1,#commands do + logs.simple(commands[i]) end end -function scripts.interface.editor(editor) - local interfaces= environment.files +local textpadcreator = "mtx-interface-textpad.lua" + +function flushers.text(interface,commands,environments) + local c, cname = { }, format("context-commands-%s.txt",interface) + local e, ename = { }, format("context-environments-%s.txt",interface) + logs.simple("saving '%s'",cname) + for i=1,#commands do + c[#c+1] = format("\\%s",commands[i]) + end + io.savedata(cname,concat(c,"\n")) + logs.simple("saving '%s'",ename) + for i=1,#environments do + e[#e+1] = format("\\start%s",environments[i]) + e[#e+1] = format("\\stop%s", environments[i]) + end + io.savedata(format("context-environments-%s.txt",interface),concat(e,"\n")) +end + +function flushers.textpad(interface,commands,environments) + flushers.text(interface,commands,environments) + -- + -- plugin, this is a rewrite of a file provided by Lukas Prochazka + -- + local function merge(templatedata,destinationdata,categories) + logs.simple("loading '%s'",templatedata) + local data = io.loaddata(templatedata) + local done = 0 + for i=1,#categories do + local category = categories[i] + local cpattern = ";%s*category:%s*(" .. category .. ")%s*[\n\r]+" + local fpattern = ";%s*filename:%s*(" .. "%S+" .. ")%s*[\n\r]+" + data = gsub(data,cpattern..fpattern,function(category,filename) + local found = resolvers.findfile(filename) or "" + local blob = found ~= "" and io.loaddata(found) or "" + if blob == "" then + logs.simple("category: %s, filename: %s, not found",category,filename) + else + done = done + 1 + logs.simple("category: %s, filename: %s, merged",category,filename) + end + return format("; category: %s\n; filename: %s\n%s\n\n",category,filename,blob) + end) + end + if done > 0 then + logs.simple("saving '%s' (%s files merged)",destinationdata,done) + io.savedata(destinationdata,data) + else + logs.simple("skipping '%s' (no files merged)",destinationdata) + end + end + local templatename = "textpad-context-template.txt" + local templatedata = resolvers.findfile(templatename) or "" + if templatedata == "" then + logs.simple("unable to locate template '%s'",templatename) + else + merge(templatedata, "context.syn", { "tex commands","context commands" }) + if environment.argument("textpad") == "latex" then + merge(templatedata, "context-latex.syn", { "tex commands","context commands", "latex commands" }) + end + end + local r = { } + local c = io.loaddata("context-commands-en.txt") or "" -- sits on the same path + local e = io.loaddata("context-environments-en.txt") or "" -- sits on the same path + for s in gmatch(c,"\\(.-)%s") do + r[#r+1] = format("\n!TEXT=%s\n\\%s\n!",s,s) + end + for s in gmatch(e,"\\start(.-)%s+\\stop(.-)") do + r[#r+1] = format("\n!TEXT=%s (start/stop)\n\\start%s \\^\\stop%s\n!",s,s,s) + end + sort(r) + insert(r,1,"!TCL=597,\n!TITLE=ConTeXt\n!SORT=N\n!CHARSET=DEFAULT") + io.savedata("context.tcl",concat(r,"\n")) + -- cleanup + os.remove("context-commands-en.txt") + os.remove("context-environments-en.txt") +end + +function scripts.interface.editor(editor,split,forcedinterfaces) + local interfaces= forcedinterfaces or environment.files if #interfaces == 0 then interfaces= userinterfaces end @@ -84,8 +159,9 @@ function scripts.interface.editor(editor) if keyfile == "" then logs.simple("unable to locate keys-*.xml") else - local collection = { } - local mappings = { } + local commands = { } + local mappings = { } + local environments = { } local x = xml.load(keyfile) for e, d, k in xml.elements(x,"cd:command") do local at = d[k].at @@ -101,16 +177,21 @@ function scripts.interface.editor(editor) if name and name ~= "" then local remapped = mappings[name] or name if type == "environment" then - collection[#collection+1] = "start" .. remapped - collection[#collection+1] = "stop" .. remapped + if split then + environments[#environments+1] = remapped + else + commands[#commands+1] = "start" .. remapped + commands[#commands+1] = "stop" .. remapped + end else - collection[#collection+1] = remapped + commands[#commands+1] = remapped end end end - if #collection > 0 then - table.sort(collection) - flushers[editor](interface,collection) + if #commands > 0 then + sort(commands) + sort(environments) + flushers[editor](interface,commands,environments) end end end @@ -198,9 +279,9 @@ function scripts.interface.context() xmlresult[#xmlresult+1] = format("") local texfilename = format("mult-%s.tex",language) local xmlfilename = format("keys-%s.xml",language) - io.savedata(texfilename,table.concat(texresult,"\n")) + io.savedata(texfilename,concat(texresult,"\n")) logs.simple("saving interface definitions '%s'",texfilename) - io.savedata(xmlfilename,table.concat(xmlresult,"\n")) + io.savedata(xmlfilename,concat(xmlresult,"\n")) logs.simple("saving interface translations '%s'",xmlfilename) if language ~= "en" and xmldata ~= "" then local newdata = xmldata:gsub("(