summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--context/data/scite/lexers/scite-context-lexer-cld.lua171
-rw-r--r--context/data/scite/lexers/scite-context-lexer-mps.lua89
-rw-r--r--context/data/scite/lexers/scite-context-lexer-tex.lua226
-rw-r--r--context/data/scite/lexers/scite-context-lexer.lua360
-rw-r--r--context/data/scite/lexers/themes/scite-context-theme.lua124
-rw-r--r--context/data/scite/scite-context-readme.tex9
-rw-r--r--context/data/scite/scite-context.properties28
-rw-r--r--context/data/scite/scite-ctx.lua16
-rw-r--r--context/data/scite/scite-ctx.properties154
-rw-r--r--context/data/scite/scite-pragma.properties9
-rw-r--r--scripts/context/lua/mtxrun.lua23
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua23
-rw-r--r--scripts/context/stubs/unix/mtxrun23
-rw-r--r--tex/context/base/buff-imp-lua.lua2
-rw-r--r--tex/context/base/buff-imp-mp.lua101
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4096 -> 4089 bytes
-rw-r--r--tex/context/base/context-version.pngbin106350 -> 106228 bytes
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/l-lpeg.lua23
-rw-r--r--tex/context/base/mult-def.lua56
-rw-r--r--tex/context/base/mult-mps.lua2
-rw-r--r--tex/context/base/mult-prm.lua126
-rw-r--r--tex/context/base/mult-prm.mkiv23
-rw-r--r--tex/context/base/status-files.pdfbin23925 -> 23942 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin162351 -> 162348 bytes
-rw-r--r--tex/context/base/syst-aux.mkiv48
-rw-r--r--tex/context/base/syst-ini.mkiv8
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua25
31 files changed, 1318 insertions, 359 deletions
diff --git a/context/data/scite/lexers/scite-context-lexer-cld.lua b/context/data/scite/lexers/scite-context-lexer-cld.lua
new file mode 100644
index 000000000..1e5d8b59c
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-cld.lua
@@ -0,0 +1,171 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for cld/lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- Adapted from lua.lua by Mitchell who based it on a lexer by Peter Odding.
+
+local lexer = lexer
+local token, style, colors, word_match, no_style = lexer.token, lexer.style, lexer.colors, lexer.word_match, lexer.style_nothing
+local P, R, S, C, Cg, Cb, Cs, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cg, lpeg.Cb, lpeg.Cs, lpeg.Cmt
+local match, find = string.match, string.find
+local global = _G
+
+module(...)
+
+local keywords = {
+ 'and', 'break', 'do', 'else', 'elseif', 'end', 'false', 'for', 'function',
+ 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat', 'return', 'then', 'true',
+ 'until', 'while',
+}
+
+local functions = {
+ 'assert', 'collectgarbage', 'dofile', 'error', 'getfenv', 'getmetatable',
+ 'ipairs', 'load', 'loadfile', 'loadstring', 'module', 'next', 'pairs',
+ 'pcall', 'print', 'rawequal', 'rawget', 'rawset', 'require', 'setfenv',
+ 'setmetatable', 'tonumber', 'tostring', 'type', 'unpack', 'xpcall',
+}
+
+local constants = {
+ '_G', '_VERSION',
+}
+
+local csnames = {
+ "context",
+ "metafun",
+}
+
+local level = nil
+local setlevel = function(_,i,s) level = s return i end
+
+local equals = P("=")^0
+
+local longonestart = P("[[")
+local longonestop = P("]]")
+local longonestring = (1-longonestop)^0
+
+local longtwostart = P('[') * Cmt(equals,setlevel) * P('[')
+local longtwostop = P(']') * equals * P(']')
+
+local longtwostring = P(function(input,index)
+ if level then
+ local sentinel = ']' .. level .. ']'
+ local _, stop = find(input,sentinel,index,true)
+ return stop and stop + 1 - #sentinel or #input + 1
+ end
+end)
+
+-- local longtwostart = P("[") * Cg(equals, "init") * P("[")
+-- local longtwostop = P("]") * C(equals) * P("]")
+-- local longtwocheck = Cmt(longtwostop * Cb("init"), function(s,i,a,b) return a == b end)
+-- local longtwostring = (P(1) - longtwocheck)^0
+
+local longcomment = Cmt(#('[[' + ('[' * P('=')^0 * '[')), function(input,index)
+ local level = match(input,'^%[(=*)%[',index)
+ level = "=="
+ if level then
+ local _, stop = find(input,']' .. level .. ']',index,true)
+ return stop and stop + 1 or #input + 1
+ end
+end)
+
+local longcomment = Cmt(#('[[' + ('[' * C(P('=')^0) * '[')), function(input,index,level)
+ local _, stop = find(input,']' .. level .. ']',index,true)
+ return stop and stop + 1 or #input + 1
+end)
+
+local whitespace = token(lexer.WHITESPACE, lexer.space^1)
+local any_char = lexer.any_char
+
+local squote = P("'")
+local dquote = P('"')
+local escaped = P("\\") * P(1)
+local dashes = P('--')
+
+local shortcomment = dashes * lexer.nonnewline^0
+local longcomment = dashes * longcomment
+local comment = token(lexer.COMMENT, longcomment + shortcomment)
+
+local shortstring = token("quote", squote)
+ * token(lexer.STRING, (escaped + (1-squote))^0 )
+ * token("quote", squote)
+ + token("quote", dquote)
+ * token(lexer.STRING, (escaped + (1-dquote))^0 )
+ * token("quote", dquote)
+
+local longstring = token("quote", longonestart)
+ * token(lexer.STRING, longonestring)
+ * token("quote", longonestop)
+ + token("quote", longtwostart)
+ * token(lexer.STRING, longtwostring)
+ * token("quote", longtwostop)
+
+local string = shortstring
+ + longstring
+
+local integer = P('-')^-1 * (lexer.hex_num + lexer.dec_num)
+local number = token(lexer.NUMBER, lexer.float + integer)
+
+local word = R('AZ','az','__','\127\255') * (lexer.alnum + '_')^0
+local identifier = token(lexer.IDENTIFIER, word)
+
+local operator = token(lexer.OPERATOR, P('~=') + S('+-*/%^#=<>;:,.{}[]()')) -- maybe split of {}[]()
+
+local keyword = token(lexer.KEYWORD, word_match(keywords))
+local builtin = token(lexer.FUNCTION, word_match(functions))
+local constant = token(lexer.CONSTANT, word_match(constants))
+local csname = token("user", word_match(csnames)) * (
+ whitespace^0 * #S("{(")
+ + ( whitespace^0 * token(lexer.OPERATOR, P(".")) * whitespace^0 * token("csname",word) )^1
+ )
+
+_rules = {
+ { 'whitespace', whitespace },
+ { 'keyword', keyword },
+ { 'function', builtin },
+ { 'csname', csname },
+ { 'constant', constant },
+ { 'identifier', identifier },
+ { 'string', string },
+ { 'comment', comment },
+ { 'number', number },
+ { 'operator', operator },
+ { 'any_char', any_char },
+}
+
+_tokenstyles = {
+ { "comment", lexer.style_context_comment },
+ { "quote", lexer.style_context_quote },
+ { "keyword", lexer.style_context_keyword },
+ { "user", lexer.style_context_user },
+ { "specials", lexer.style_context_specials },
+ { "extras", lexer.style_context_extras },
+}
+
+_foldsymbols = {
+ _patterns = {
+ '%l+',
+ '[%({%)}%[%]]',
+ },
+ [lexer.KEYWORD] = {
+ ['if'] = 1,
+ ['end'] = -1,
+ ['do'] = 1,
+ ['function'] = 1,
+ ['repeat'] = 1,
+ ['until'] = -1,
+ },
+ [lexer.COMMENT] = {
+ ['['] = 1, [']'] = -1,
+ },
+ ["quote"] = { -- to be tested
+ ['['] = 1, [']'] = -1,
+ },
+ [lexer.OPERATOR] = {
+ ['('] = 1, [')'] = -1,
+ ['{'] = 1, ['}'] = -1,
+ },
+}
diff --git a/context/data/scite/lexers/scite-context-lexer-mps.lua b/context/data/scite/lexers/scite-context-lexer-mps.lua
new file mode 100644
index 000000000..fa7d88c5d
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-mps.lua
@@ -0,0 +1,89 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local lexer = lexer
+local global, string, table, lpeg = _G, string, table, lpeg
+local token, style, colors, word_match, no_style = lexer.token, lexer.style, lexer.colors, lexer.word_match, lexer.style_nothing
+local exact_match = lexer.context.exact_match
+local P, R, S, V, C, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cmt
+local type, next, pcall, loadfile = type, next, pcall, loadfile
+
+module(...)
+
+local metafunlexer = _M
+local basepath = lexer.context and lexer.context.path or _LEXERHOME
+
+local metafuncommands = { }
+local plaincommands = { }
+local primitivecommands = { }
+
+do
+
+ local definitions = lexer.context.loaddefinitions("mult-mps.lua")
+
+ if definitions then
+ metafuncommands = definitions.metafun or { }
+ plaincommands = definitions.plain or { }
+ primitivecommands = definitions.primitives or { }
+ end
+
+end
+
+local whitespace = lexer.WHITESPACE -- triggers states
+local any_char = lexer.any_char
+
+local space = lexer.space -- S(" \n\r\t\f\v")
+local digit = R("09")
+local sign = S("+-")
+local period = P(".")
+local cstoken = R("az","AZ") + P("_")
+local number = sign^-1 * ( -- at most one
+ digit^1 * period * digit^0 -- 10.0 10.
+ + digit^0 * period * digit^1 -- 0.10 .10
+ + digit^1 -- 10
+ )
+
+local spacing = token(whitespace, space^1)
+local comment = token('comment', P('%') * (1-S("\n\r"))^0)
+local metafun = token('command', exact_match(metafuncommands))
+local plain = token('plain', exact_match(plaincommands))
+local quoted = token('specials', P('"'))
+ * token('default', P(1-P('"'))^1)
+ * token('specials', P('"'))
+local primitive = token('primitive', exact_match(primitivecommands))
+local csname = token('user', cstoken^1)
+local specials = token('specials', S("#()[]<>=:\""))
+local number = token('number', number)
+local extras = token('extras', S("`~%^&_-+/\'|\\"))
+local default = token('default', P(1))
+
+_rules = {
+ { 'whitespace', spacing },
+ { 'comment', comment },
+ { 'metafun', metafun },
+ { 'plain', plain },
+ { 'primitive', primitive },
+ { 'csname', csname },
+ { 'number', number },
+ { 'quoted', quoted },
+ { 'specials', specials },
+ { 'extras', extras },
+ { 'any_char', any_char },
+}
+
+_tokenstyles = {
+ { "comment", lexer.style_context_comment },
+ { "default", lexer.style_context_default },
+ { "number" , lexer.style_context_number },
+ { "primitive", lexer.style_context_primitive },
+ { "plain", lexer.style_context_plain },
+ { "command", lexer.style_context_command },
+ { "user", lexer.style_context_user },
+ { "specials", lexer.style_context_specials },
+ { "extras", lexer.style_context_extras },
+}
diff --git a/context/data/scite/lexers/scite-context-lexer-tex.lua b/context/data/scite/lexers/scite-context-lexer-tex.lua
new file mode 100644
index 000000000..4a1a0a766
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-tex.lua
@@ -0,0 +1,226 @@
+local info = {
+ version = 1.002,
+ comment = "scintilla lpeg lexer for context",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+
+-- maybe: protected_macros
+
+--[[
+
+ experiment dd 2009/10/28 .. todo:
+
+ -- figure out if tabs instead of splits are possible
+ -- locate an option to enter name in file dialogue (like windows permits)
+ -- figure out why loading a file fails
+ -- we cannot print to the log pane
+ -- we cannot access props["keywordclass.macros.context.en"]
+ -- lexer.get_property only handles integers
+ -- we cannot run a command to get the location of mult-def.lua
+
+ -- local interface = props["keywordclass.macros.context.en"]
+ -- local interface = lexer.get_property("keywordclass.macros.context.en","")
+
+ -- the embedded lexers don't backtrack (so they're not that usefull on large
+ -- texts) which is probably a scintilla issue (trade off between speed and lexable
+ -- area); also there is some weird bleeding back to the parent lexer with respect
+ -- to colors (i.e. the \ in \relax can become black) so I might as well use private
+ -- color specifications
+
+ -- this lexer does not care about other macro packages (one can of course add a fake
+ -- interface but it's not on the agenda)
+
+]]--
+
+local lexer = lexer
+local global, string, table, lpeg = _G, string, table, lpeg
+local token, style, colors, word_match, no_style = lexer.token, lexer.style, lexer.colors, lexer.word_match, lexer.style_nothing
+local exact_match = lexer.context.exact_match
+local P, R, S, V, C, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cmt
+local type, next, pcall, loadfile, setmetatable = type, next, pcall, loadfile, setmetatable
+
+module(...)
+
+local contextlexer = _M
+local basepath = lexer.context and lexer.context.path or _LEXERHOME
+
+local commands = { en = { } }
+local primitives = { }
+local helpers = { }
+
+do
+
+ local definitions = lexer.context.loaddefinitions("mult-def.lua")
+
+ if definitions then
+ for command, languages in next, definitions.commands do
+ commands.en[languages.en or command] = true
+ for language, command in next, languages do
+ local c = commands[language]
+ if c then
+ c[command] = true
+ else
+ commands[language] = { [command] = true }
+ end
+ end
+ end
+ helpers = definitions.helpers or { }
+ end
+
+ local definitions = lexer.context.loaddefinitions("mult-prm.lua")
+
+ if definitions then
+ primitives = definitions.primitives or { }
+ for i=1,#primitives do
+ primitives[#primitives+1] = "normal" .. primitives[i]
+ end
+ table.sort(primitives)
+ end
+
+end
+
+local currentcommands = commands.en or { }
+
+local knowncommand = Cmt(R("az","AZ")^1, function(_,i,s)
+ return currentcommands[s] and i
+end)
+
+local find, match = string.find, string.match
+
+local knownpreamble = Cmt(P('% '), function(input,i,_)
+ if i < 10 then
+ local s, e, word = find(input,'^(.+)[\n\r]',i)
+ if word then
+ local interface = match(word,"interface=(..)")
+ if interface then
+ currentcommands = commands[interface] or commands.en or { }
+ end
+ end
+ end
+ return false
+end)
+
+local whitespace = lexer.WHITESPACE -- triggers states
+local any_char = lexer.any_char
+
+local space = lexer.space -- S(" \n\r\t\f\v")
+local cstoken = R("az","AZ") + S("@!?_") -- todo: utf8
+
+local spacing = token(whitespace, space^1)
+local preamble = token('preamble', knownpreamble)
+local comment = token('comment', P('%') * (1-S("\n\r"))^0)
+local command = token('command', P('\\') * knowncommand)
+local helper = token('plain', P('\\') * exact_match(helpers))
+local primitive = token('primitive', P('\\') * exact_match(primitives))
+local ifprimitive = token('primitive', P('\\if') * cstoken^1)
+local csname = token('user', P('\\') * (cstoken^1 + P(1)))
+local grouping = token('grouping', S("{$}"))
+local specials = token('specials', S("#()[]<>=\""))
+local extras = token('extras', S("`~%^&_-+/\'|"))
+local default = token('default', P(1))
+
+----- startluacode = token("grouping", P("\\startluacode"))
+----- stopluacode = token("grouping", P("\\stopluacode"))
+
+local luastatus = nil
+local luaenvironment = P("luacode")
+
+local inlinelua = P("\\ctxlua")
+ + P("\\ctxcommand")
+ + P("\\cldcontext")
+
+local startlua = P("\\start") * Cmt(luaenvironment,function(_,i,s) luastatus = s return true end)
+ + inlinelua
+ * space^0
+ * Cmt(P("{"),function(_,i,s) luastatus = "}" return true end)
+local stoplua = P("\\stop") * Cmt(luaenvironment,function(_,i,s) return luastatus == s end)
+ + Cmt(P("}"),function(_,i,s) return luastatus == "}" end)
+
+local startluacode = token("embedded", startlua)
+local stopluacode = token("embedded", stoplua)
+
+local metafunenvironment = P("MPcode")
+ + P("useMPgraphic")
+ + P("reusableMPgraphic")
+ + P("uniqueMPgraphic")
+ + P("MPinclusions")
+ + P("MPextensions")
+ + P("MPgraphic")
+
+-- local metafunstatus = nil -- this does not work, as the status gets lost in an embedded lexer
+-- local startmetafun = P("\\start") * Cmt(metafunenvironment,function(_,i,s) metafunstatus = s return true end)
+-- local stopmetafun = P("\\stop") * Cmt(metafunenvironment,function(_,i,s) return metafunstatus == s end)
+
+local startmetafun = P("\\start") * metafunenvironment
+local stopmetafun = P("\\stop") * metafunenvironment
+
+local openargument = token("specials",P("{"))
+local closeargument = token("specials",P("}"))
+local argumentcontent = token("any_char",(1-P("}"))^0)
+
+local metafunarguments = (token("default",spacing^0) * openargument * argumentcontent * closeargument)^-2
+
+local startmetafuncode = token("embedded", startmetafun) * metafunarguments
+local stopmetafuncode = token("embedded", stopmetafun)
+
+-- Function load(lexer_name) starts with _M.WHITESPACE = lexer_name..'_whitespace' which means that we need to
+-- have frozen at the moment we load another lexer. Because spacing is used to revert to a parent lexer we need
+-- to make sure that we load children as late as possible in order not to get the wrong whitespace trigger. This
+-- took me quite a while to figure out (not being that familiar with the internals). BTW, if performance becomes
+-- an issue we can rewrite the main lex function (memorize the grammars and speed up the byline variant).
+
+local cldlexer = lexer.load('scite-context-lexer-cld')
+local mpslexer = lexer.load('scite-context-lexer-mps')
+
+lexer.embed_lexer(contextlexer, cldlexer, startluacode, stopluacode)
+lexer.embed_lexer(contextlexer, mpslexer, startmetafuncode, stopmetafuncode)
+
+_rules = {
+ { "whitespace", spacing },
+ { "preamble", preamble },
+ { "comment", comment },
+ { "helper", helper },
+ { "command", command },
+ { "ifprimitive", ifprimitive },
+ { "primitive", primitive },
+ { "csname", csname },
+ { "grouping", grouping },
+ { "specials", specials },
+ { "extras", extras },
+ { 'any_char', any_char },
+}
+
+_tokenstyles = {
+ { "preamble", lexer.style_context_preamble },
+ { "comment", lexer.style_context_comment },
+ { "default", lexer.style_context_default },
+ { 'number', lexer.style_context_number },
+ { "embedded", lexer.style_context_embedded },
+ { "grouping", lexer.style_context_grouping },
+ { "primitive", lexer.style_context_primitive },
+ { "plain", lexer.style_context_plain },
+ { "command", lexer.style_context_command },
+ { "user", lexer.style_context_user },
+ { "specials", lexer.style_context_specials },
+ { "extras", lexer.style_context_extras },
+ { "quote", lexer.style_context_quote },
+ { "keyword", lexer.style_context_keyword },
+}
+
+local folds = {
+ ["\\start"] = 1, ["\\stop" ] = -1,
+ ["\\begin"] = 1, ["\\end" ] = -1,
+}
+
+_foldsymbols = {
+ _patterns = {
+ "\\start", "\\stop", -- regular environments
+ "\\begin", "\\end", -- (moveable) blocks
+ },
+ ["helper"] = folds,
+ ["command"] = folds,
+ ["grouping"] = folds,
+}
diff --git a/context/data/scite/lexers/scite-context-lexer.lua b/context/data/scite/lexers/scite-context-lexer.lua
new file mode 100644
index 000000000..688eb5776
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer.lua
@@ -0,0 +1,360 @@
+local info = {
+ version = 1.002,
+ comment = "basics for scintilla lpeg lexer for context/metafun",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- The fold and lex functions are copied and patched from original code by Mitchell (see
+-- lexer.lua). All errors are mine.
+--
+-- For huge files folding can be pretty slow and I do have some large ones that I keep
+-- open all the time. Loading is normally no ussue, unless one has remembered the status
+-- and the cursor is at the last line of a 200K line file. Optimizing the fold function
+-- brought down loading of char-def.lua from 14 sec => 8 sec. Replacing the word_match
+-- function and optimizing the lex function gained another 2+ seconds. A 6 second load
+-- is quite ok for me.
+
+local R, P, S, Cp, Cs, Ct, Cmt, Cc = lpeg.R, lpeg.P, lpeg.S, lpeg.Cp, lpeg.Cs, lpeg.Ct, lpeg.Cmt, lpeg.Cc
+local lpegmatch = lpeg.match
+local find, gmatch, match, lower, upper, gsub = string.find, string.gmatch, string.match, string.lower, string.upper, string.gsub
+local concat = table.concat
+local global = _G
+local type, next, setmetatable = type, next, setmetatable
+
+dofile(_LEXERHOME .. '/lexer.lua')
+
+lexer.context = lexer.context or { }
+
+-- function lexer.context.loaddefinitions(name)
+-- local basepath = lexer.context and lexer.context.path or _LEXERHOME
+-- local definitions = loadfile(basepath and (basepath .. "/" .. name) or name)
+-- if not definitions then
+-- definitions = loadfile(_LEXERHOME .. "/context/" .. name)
+-- end
+-- if type(definitions) == "function" then
+-- definitions = definitions()
+-- end
+-- if type(definitions) == "table" then
+-- return definitions
+-- else
+-- return nil
+-- end
+-- end
+
+function lexer.context.loaddefinitions(name)
+ local definitions = loadfile(_LEXERHOME .. "/context/" .. name)
+ if not definitions and lexer.context and lexer.context.path then
+ definitions = loadfile(lexer.context.path .. "/" .. name)
+ end
+ if not definitions and lexer.context and lexer.context.path then
+ definitions = loadfile(name)
+ end
+ if type(definitions) == "function" then
+ definitions = definitions()
+ end
+ if type(definitions) == "table" then
+ return definitions
+ else
+ return nil
+ end
+end
+
+-- maybe more efficient:
+
+function lexer.context.word_match(words,word_chars,case_insensitive)
+ local chars = '%w_' -- maybe just "" when word_chars
+ if word_chars then
+ chars = '^([' .. chars .. gsub(word_chars,'([%^%]%-])', '%%%1') ..']+)'
+ else
+ chars = '^([' .. chars ..']+)'
+ end
+ if case_insensitive then
+ local word_list = { }
+ for i=1,#words do
+ word_list[lower(words[i])] = true
+ end
+ return P(function(input, index)
+ local s, e, word = find(input,chars,index)
+ return word and word_list[lower(word)] and e + 1 or nil
+ end)
+ else
+ local word_list = { }
+ for i=1,#words do
+ word_list[words[i]] = true
+ end
+ return P(function(input, index)
+ local s, e, word = find(input,chars,index)
+ return word and word_list[word] and e + 1 or nil
+ end)
+ end
+end
+
+-- nicer anyway:
+
+-- todo: utf
+
+function lexer.context.exact_match(words,case_insensitive)
+ local pattern = S(concat(words)) + R("az","AZ","\127\255") -- the concat catches _ etc
+ if case_insensitive then
+ local list = { }
+ for i=1,#words do
+ list[lower(words[i])] = true
+ end
+ return Cmt(pattern^1, function(_,i,s)
+ return list[lower(s)] and i
+ end)
+ else
+ local list = { }
+ for i=1,#words do
+ list[words[i]] = true
+ end
+ return Cmt(pattern^1, function(_,i,s)
+ return list[s] and i
+ end)
+ end
+end
+
+function lexer.context.word_match(words,word_chars,case_insensitive) -- word_chars not used (can be omitted)
+ if word_chars == true then
+ return lexer.context.exact_match(words,true)
+ else
+ return lexer.context.exact_match(words,case_insensitive)
+ end
+end
+
+-- Overloaded functions.
+
+local FOLD_BASE = SC_FOLDLEVELBASE
+local FOLD_HEADER = SC_FOLDLEVELHEADERFLAG
+local FOLD_BLANK = SC_FOLDLEVELWHITEFLAG
+
+local newline = P("\r\n") + S("\r\n")
+
+local splitlines = Ct( ( Ct ( (Cp() * Cs((1-newline)^1) * newline^-1) + (Cp() * Cc("") * newline) ) )^0)
+
+local h_table, b_table, n_table = { }, { }, { }
+
+setmetatable(h_table, { __index = function(t,level) local v = { level, FOLD_HEADER } t[level] = v return v end })
+setmetatable(b_table, { __index = function(t,level) local v = { level, FOLD_BLANK } t[level] = v return v end })
+setmetatable(n_table, { __index = function(t,level) local v = { level } t[level] = v return v end })
+
+local get_style_at = GetStyleAt
+local get_property = GetProperty
+local get_indent_amount = GetIndentAmount
+
+-- local lines = lpegmatch(splitlines,text) -- iterating over lines is faster
+-- for i=1, #lines do
+-- local li = lines[i]
+-- local line = li[2]
+-- if line ~= "" then
+-- local pos = li[1]
+-- for i=1,nofpatterns do
+-- for s, m in gmatch(line,patterns[i]) do
+-- if hash[m] then
+-- local symbols = fold_symbols[get_style_at(start_pos + pos + s - 1)]
+-- if symbols then
+-- local l = symbols[m]
+-- if l then
+-- local t = type(l)
+-- if t == 'number' then
+-- current_level = current_level + l
+-- elseif t == 'function' then
+-- current_level = current_level + l(text, pos, line, s, match)
+-- end
+-- if current_level < FOLD_BASE then -- integrate in previous
+-- current_level = FOLD_BASE
+-- end
+-- end
+-- end
+-- end
+-- end
+-- end
+-- if current_level > prev_level then
+-- folds[line_num] = h_table[prev_level] -- { prev_level, FOLD_HEADER }
+-- else
+-- folds[line_num] = n_table[prev_level] -- { prev_level }
+-- end
+-- prev_level = current_level
+-- else
+-- folds[line_num] = b_table[prev_level] -- { prev_level, FOLD_BLANK }
+-- end
+-- line_num = line_num + 1
+-- end
+
+-- not that much faster but less memory:
+
+local action_y, action_n
+
+local splitlines = ( (
+ (Cp() * Cs((1-newline)^1) * newline^-1) / function(p,l) action_y(p,l) end
+ + ( newline ) / function() action_n() end
+) )^0
+
+function lexer.context.fold(text, start_pos, start_line, start_level)
+ if text == '' then
+ return folds
+ end
+ local lexer = global._LEXER
+ if lexer._fold then
+ return lexer._fold(text, start_pos, start_line, start_level)
+ end
+ local folds = { }
+ if lexer._foldsymbols then
+ local fold_symbols = lexer._foldsymbols
+ local line_num = start_line
+ local prev_level = start_level
+ local current_level = prev_level
+ local patterns = fold_symbols._patterns
+ local nofpatterns = #patterns
+ local hash = fold_symbols._hash
+ if not hash then
+ hash = { }
+ for symbol, matches in next, fold_symbols do
+ if not find(symbol,"^_") then
+ for s, _ in next, matches do
+ hash[s] = true
+ end
+ end
+ end
+ fold_symbols._hash = hash
+ end
+ action_y = function(pos,line)
+ for i=1,nofpatterns do
+ for s, m in gmatch(line,patterns[i]) do
+ if hash[m] then
+ local symbols = fold_symbols[get_style_at(start_pos + pos + s - 1)]
+ if symbols then
+ local l = symbols[m]
+ if l then
+ local t = type(l)
+ if t == 'number' then
+ current_level = current_level + l
+ if current_level < FOLD_BASE then -- can this happen?
+ current_level = FOLD_BASE
+ end
+ elseif t == 'function' then
+ current_level = current_level + l(text, pos, line, s, match)
+ if current_level < FOLD_BASE then
+ current_level = FOLD_BASE
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ if current_level > prev_level then
+ folds[line_num] = h_table[prev_level] -- { prev_level, FOLD_HEADER }
+ else
+ folds[line_num] = n_table[prev_level] -- { prev_level }
+ end
+ prev_level = current_level
+ line_num = line_num + 1
+ end
+ action_n = function()
+ folds[line_num] = b_table[prev_level] -- { prev_level, FOLD_BLANK }
+ line_num = line_num + 1
+ end
+ local lines = lpegmatch(splitlines,text)
+ elseif get_property('fold.by.indentation', 1) == 1 then
+ local current_line = start_line
+ local prev_level = start_level
+ for _, line in gmatch(text,'([\t ]*)(.-)\r?\n') do
+ if line ~= "" then
+ local current_level = FOLD_BASE + get_indent_amount(current_line)
+ if current_level > prev_level then -- next level
+ local i = current_line - 1
+ while true do
+ local f = folds[i]
+ if f and f[2] == FOLD_BLANK then
+ i = i - 1
+ else
+ break
+ end
+ end
+ local f = folds[i]
+ if f then
+ f[2] = FOLD_HEADER
+ end -- low indent
+ folds[current_line] = n_table[current_level] -- { current_level } -- high indent
+ elseif current_level < prev_level then -- prev level
+ local f = folds[current_line - 1]
+ if f then
+ f[1] = prev_level -- high indent
+ end
+ folds[current_line] = n_table[current_level] -- { current_level } -- low indent
+ else -- same level
+ folds[current_line] = n_table[prev_level] -- { prev_level }
+ end
+ prev_level = current_level
+ else
+ folds[current_line] = b_table[prev_level] -- { prev_level, FOLD_BLANK }
+ end
+ current_line = current_line + 1
+ end
+ else
+ for _ in gmatch(text,".-\r?\n") do
+ folds[start_line] = n_table[start_level] -- { start_level }
+ start_line = start_line + 1
+ end
+ end
+ return folds
+end
+
+function lexer.context.lex(text, init_style)
+ local lexer = global._LEXER
+ local grammar = lexer._GRAMMAR
+ if not grammar then
+ return { }
+ elseif lexer._LEXBYLINE then
+ local tokens = { }
+ local offset = 0
+ local noftokens = 0
+ for line in gmatch(text,'[^\r\n]*\r?\n?') do -- could be an lpeg
+ local line_tokens = lpeg_match(grammar, line)
+ if line_tokens then
+ for i=1,#line_tokens do
+ local token = line_tokens[i]
+ token[2] = token[2] + offset
+ noftokens = noftokens + 1
+ tokens[noftokens] = token
+ end
+ end
+ offset = offset + #line
+ if noftokens > 0 and tokens[noftokens][2] ~= offset then
+ noftokens = noftokens + 1
+ tokens[noftokens] = { 'default', offset + 1 }
+ end
+ end
+ return tokens
+ elseif lexer._CHILDREN then
+ local _hash = lexer._HASH
+ if not hash then
+ hash = { }
+ lexer._HASH = hash
+ end
+ grammar = hash[init_style]
+ if not grammar then
+ for style, style_num in next, lexer._TOKENS do
+ if style_num == init_style then
+ local lexer_name = match(style,'^(.+)_whitespace') or lexer._NAME
+ if lexer._INITIALRULE ~= lexer_name then
+ build_grammar(lexer, lexer_name)
+ end
+ break
+ end
+ end
+ grammar = lexer._GRAMMAR
+ hash[init_style] = grammar
+ end
+ return lpegmatch(grammar, text)
+ else
+ return lpegmatch(grammar, text)
+ end
+end
+
+lexer.fold = lexer.context.fold
+lexer.lex = lexer.context.lex
+lexer.word_match = lexer.context.word_match
diff --git a/context/data/scite/lexers/themes/scite-context-theme.lua b/context/data/scite/lexers/themes/scite-context-theme.lua
index 9dc859c34..556779ce6 100644
--- a/context/data/scite/lexers/themes/scite-context-theme.lua
+++ b/context/data/scite/lexers/themes/scite-context-theme.lua
@@ -9,60 +9,13 @@ local info = {
-- we need a proper pipe:
--
-- -- context_path = string.split(os.resultof("mtxrun --find-file context.mkiv"))[1] or ""
+-- -- global.trace("OEPS") -- how do we get access to the regular lua extensions
local context_path = "t:/sources" -- c:/data/tex-context/tex/texmf-context/tex/base
local font_name = 'Dejavu Sans Mono'
local font_size = 14
--- The following files are needed: mult-def.lua, mult-prm.lua and mult-def.lua. They can be
--- put in the _LEXERHOME/context path of needed. Currently we have:
---
--- _LEXERHOME/themes/scite-context-theme.lua
--- _LEXERHOME/scite-context-lexer.lua
--- _LEXERHOME/context/mult-def.lua
--- _LEXERHOME/context/mult-prm.lua
--- _LEXERHOME/context/mult-mps.lua
--- _LEXERHOME/context.lua
--- _LEXERHOME/metafun.lua
---
--- However, when you set the context_path variable and omit the files in the
--- _LEXERHOME/context path then the files will be picked up from the context
--- distribution which keeps them up to date automatically.
---
--- This (plus a bit more) is what goes in context.properties:
---
--- lexer.lpeg.home=$(SciteDefaultHome)/lexers
--- lexer.lpeg.script=$(lexer.lpeg.home)/scite-context-lexer.lua
--- lexer.lpeg.color.theme=$(lexer.lpeg.home)/themes/scite-context-theme.lua
---
--- fold.by.indentation=0
---
--- if PLAT_WIN
--- lexerpath.*.lpeg=$(lexer.lpeg.home)/LexLPeg.dll
---
--- if PLAT_GTK
--- lexerpath.*.lpeg=$(lexer.lpeg.home)/liblexlpeg.so
---
--- lexer.*.lpeg=lpeg
---
--- lexer.$(file.patterns.metapost)=lpeg_metafun
--- lexer.$(file.patterns.metafun)=lpeg_metafun
--- lexer.$(file.patterns.context)=lpeg_context
--- lexer.$(file.patterns.tex)=lpeg_context
--- lexer.$(file.patterns.lua)=lpeg_lua
--- lexer.$(file.patterns.xml)=lpeg_xml
---
--- comment.block.lpeg_context=%
--- comment.block.at.line.start.lpeg_context=1
---
--- comment.block.lpeg_metafun=%
--- comment.block.at.line.start.lpeg_metafun=1
---
--- comment.block.lpeg_lua=--
--- comment.block.at.line.start.lpeg_lua=1
---
--- comment.block.lpeg_props=#
--- comment.block.at.line.start.lpeg_props=1
+local global = _G
dofile(_LEXERHOME .. '/themes/scite.lua') -- starting point so we miss nothing
@@ -71,20 +24,19 @@ module('lexer', package.seeall)
lexer.context = lexer.context or { }
lexer.context.path = context_path
-lexer.colors = {
+colors = {
red = color('7F', '00', '00'),
green = color('00', '7F', '00'),
blue = color('00', '00', '7F'),
cyan = color('00', '7F', '7F'),
magenta = color('7F', '00', '7F'),
yellow = color('7F', '7F', '00'),
- --
- teal = color('00', '7F', '7F'), -- cyan
- purple = color('7F', '00', '7F'), -- magenta
orange = color('B0', '7F', '00'),
--
white = color('FF', 'FF', 'FF'),
+ light = color('CF', 'CF', 'CF'),
grey = color('80', '80', '80'),
+ dark = color('4F', '4F', '4F'),
black = color('00', '00', '00'),
--
selection = color('F7', 'F7', 'F7'),
@@ -95,9 +47,11 @@ lexer.colors = {
--
right = color('00', '00', 'FF'),
wrong = color('FF', '00', '00'),
-
}
+colors.teal = colors.cyan
+colors.purple = colors.magenta
+
style_default = style {
font = font_name,
size = font_size,
@@ -109,26 +63,44 @@ style_nothing = style {
-- empty
}
-style_char = style { fore = colors.purple }
-style_class = style { fore = colors.black, bold = true }
-style_comment = style { fore = colors.green }
-style_constant = style { fore = colors.cyan, bold = true }
-style_definition = style { fore = colors.black, bold = true }
-style_error = style { fore = colors.red }
-style_function = style { fore = colors.black, bold = true }
-style_keyword = style { fore = colors.blue, bold = true }
-style_number = style { fore = colors.cyan }
-style_operator = style { fore = colors.black, bold = true }
-style_string = style { fore = colors.magenta }
-style_preproc = style { fore = colors.yellow }
-style_tag = style { fore = colors.cyan }
-style_type = style { fore = colors.blue }
-style_variable = style { fore = colors.black }
-style_identifier = style_nothing
+style_comment = style { fore = colors.yellow }
+style_string = style { fore = colors.magenta }
+
+style_char = style { fore = colors.magenta }
+style_class = style { fore = colors.black, bold = true }
+style_constant = style { fore = colors.cyan, bold = true }
+style_definition = style { fore = colors.black, bold = true }
+style_error = style { fore = colors.red }
+style_function = style { fore = colors.black, bold = true }
+style_keyword = style { fore = colors.blue, bold = true }
+style_number = style { fore = colors.cyan }
+style_operator = style { fore = colors.blue }
+style_preproc = style { fore = colors.yellow, bold = true }
+style_tag = style { fore = colors.cyan }
+style_type = style { fore = colors.blue }
+style_variable = style { fore = colors.black }
+style_identifier = style_nothing
+
+style_line_number = style { back = colors.linepanel, }
+style_bracelight = style { bold = true, fore = colors.orange }
+style_bracebad = style { bold = true, fore = colors.orange }
+style_indentguide = style { fore = colors.linepanel, back = colors.white }
+style_calltip = style { fore = colors.white, back = colors.tippanel }
+style_controlchar = style_nothing
+
+style_context_preamble = style_comment
+style_context_comment = style_comment
+style_context_string = style_string
+style_context_default = style_nothing
+style_context_number = style_number
+style_context_keyword = style_keyword
+style_context_quote = style { fore = colors.blue, bold = true }
+style_context_primitive = style_keyword
+style_context_plain = style { fore = colors.dark, bold = true }
+style_context_command = style { fore = colors.green, bold = true }
+style_context_embedded = style { fore = colors.black, bold = true }
+style_context_user = style { fore = colors.green }
+style_context_grouping = style { fore = colors.red }
+style_context_specials = style { fore = colors.blue }
+style_context_extras = style { fore = colors.yellow }
-style_line_number = style { back = colors.linepanel }
-style_bracelight = style { fore = colors.right, bold = true }
-style_bracebad = style { fore = colors.wrong, bold = true }
-style_controlchar = style_nothing
-style_indentguide = style { fore = colors.linepanel, back = colors.white }
-style_calltip = style { fore = colors.white, back = colors.tippanel }
diff --git a/context/data/scite/scite-context-readme.tex b/context/data/scite/scite-context-readme.tex
index 58c15da20..7af38ecd9 100644
--- a/context/data/scite/scite-context-readme.tex
+++ b/context/data/scite/scite-context-readme.tex
@@ -6,11 +6,13 @@ The following files are needed for the lpeg based lexer:
scite-ctx.lua
scite-context.properties
scite-pragma.properties
+scite-ctx.properties
scite-ctx-context.properties
scite-ctx-example.properties
-lezers/context.lua
-lezers/metafun.lua
-lezers/scite-context-lexer.lua
+lexers/scite-context-lexer-tex.lua
+lexers/scite-context-lexer-mps.lua
+lexers/scite-context-lexer-cld.lua
+lexers/scite-context-lexer.lua
lexers/context/mult-def.lua
lexers/context/mult-prm.lua
lexers/context/mult-mps.lua
@@ -33,6 +35,7 @@ the following files:
\starttyping
scite-context.properties
scite-pragma.properties
+scite-ctx.properties
scite-ctx-context.properties
scite-ctx-example.properties
\stoptyping
diff --git a/context/data/scite/scite-context.properties b/context/data/scite/scite-context.properties
index 4c7565a51..ea48ecc10 100644
--- a/context/data/scite/scite-context.properties
+++ b/context/data/scite/scite-context.properties
@@ -580,7 +580,7 @@ style.metapost.4=fore:#007F00
style.metapost.5=fore:#000000
# Extra
style.metapost.6=fore:#007F00,italics
-
+# Bracematch
style.metapost.34=fore:#00007F
style.metapost.35=fore:#7F007F
@@ -607,21 +607,25 @@ if PLAT_GTK
lexer.*.lpeg=lpeg
-lexer.$(file.patterns.metapost)=lpeg_metafun
-lexer.$(file.patterns.metafun)=lpeg_metafun
-lexer.$(file.patterns.context)=lpeg_context
-lexer.$(file.patterns.tex)=lpeg_context
-lexer.$(file.patterns.lua)=lpeg_lua
+lexer.$(file.patterns.metapost)=lpeg_scite-context-lexer-mps
+lexer.$(file.patterns.metafun)=lpeg_scite-context-lexer-mps
+lexer.$(file.patterns.context)=lpeg_scite-context-lexer-tex
+lexer.$(file.patterns.tex)=lpeg_scite-context-lexer-tex
+lexer.$(file.patterns.lua)=lpeg_scite-context-lexer-cld
lexer.$(file.patterns.xml)=lpeg_xml
-comment.block.lpeg_context=%
-comment.block.at.line.start.lpeg_context=1
+comment.block.lpeg_scite-context-lexer-tex=%
+comment.block.at.line.start.lpeg_scite-context-lexer-tex=1
-comment.block.lpeg_metafun=%
-comment.block.at.line.start.lpeg_metafun=1
+comment.block.lpeg_scite-context-lexer-mps=%
+comment.block.at.line.start.lpeg_scite-context-lexer-mps=1
-comment.block.lpeg_lua=--
-comment.block.at.line.start.lpeg_lua=1
+comment.block.lpeg_scite-context-lexer-cld=--
+comment.block.at.line.start.lpeg_scite-context-lexer-cld=1
comment.block.lpeg_props=#
comment.block.at.line.start.lpeg_props=1
+
+style.*.34=bold,fore=#7F0000,back:#CFCFCF
+style.*.35=bold,fore=#7F0000,back:#CFCFCF
+
diff --git a/context/data/scite/scite-ctx.lua b/context/data/scite/scite-ctx.lua
index fb10ce87d..72fcb967c 100644
--- a/context/data/scite/scite-ctx.lua
+++ b/context/data/scite/scite-ctx.lua
@@ -68,7 +68,7 @@
-- generic functions
-props = props or { } setmetatable(props,{ __index = function(k,v) props[k] = "unknown" return "unknown" end } )
+props = props or { } -- setmetatable(props,{ __index = function(k,v) props[k] = "unknown" return "unknown" end } )
local byte, lower, upper, gsub, sub, find, rep, match, gmatch = string.byte, string.lower, string.upper, string.gsub, string.sub, string.find, string.rep, string.match, string.gmatch
local sort, concat = table.sort, table.concat
@@ -80,20 +80,20 @@ function traceln(str)
io.flush()
end
-function string:grab(delimiter)
- local list = {}
- for snippet in self:gmatch(delimiter) do
+function string.grab(str,delimiter)
+ local list = { }
+ for snippet in gmatch(str,delimiter) do
list[#list+1] = snippet
end
return list
end
-function string:expand()
- return (self:gsub("ENV%((%w+)%)", os.envvar))
+function string.expand(str)
+ return (gsub(str,"ENV%((%w+)%)", os.envvar))
end
-function string:strip()
- return (self:gsub("^%s*(.-)%s*$", "%1"))
+function string.strip(str)
+ return (gsub(str,"^%s*(.-)%s*$", "%1"))
end
function table.alphasort(list,i)
diff --git a/context/data/scite/scite-ctx.properties b/context/data/scite/scite-ctx.properties
new file mode 100644
index 000000000..94a51aeb7
--- /dev/null
+++ b/context/data/scite/scite-ctx.properties
@@ -0,0 +1,154 @@
+# author
+#
+# Hans Hagen - PRAGMA ADE - www.pragma-ade.com
+#
+# environment variable
+#
+# CTXSPELLPATH=t:/spell
+#
+# auto language detection
+#
+# % version =1.0 language=uk
+# <?xml version='1.0' language='uk' ?>
+
+ext.lua.auto.reload=1
+ext.lua.startup.script=$(SciteDefaultHome)/scite-ctx.lua
+
+#~ extension.$(file.patterns.context)=scite-ctx.lua
+#~ extension.$(file.patterns.example)=scite-ctx.lua
+
+#~ ext.lua.reset=1
+#~ ext.lua.auto.reload=1
+#~ ext.lua.startup.script=t:/lua/scite-ctx.lua
+
+ctx.menulist.default=\
+ wrap=wrap_text|\
+ unwrap=unwrap_text|\
+ sort=sort_text|\
+ check=check_text|\
+ reset=reset_text
+
+ctx.menulist.context=\
+ wrap=wrap_text|\
+ unwrap=unwrap_text|\
+ sort=sort_text|\
+ document=document_text|\
+ quote=quote_text|\
+ compound=compound_text|\
+ check=check_text|\
+ reset=reset_text
+
+ctx.menulist.example=\
+ wrap=wrap_text|\
+ unwrap=unwrap_text|\
+ sort=sort_text|\
+ uncomment=uncomment_xml|\
+ document=document_text|\
+ quote=quote_text|\
+ compound=compound_text|\
+ check=check_text|\
+ reset=reset_text
+
+ctx.wraptext.length=65
+
+ctx.spellcheck.language=auto
+ctx.spellcheck.wordsize=4
+ctx.spellcheck.wordpath=ENV(CTXSPELLPATH)
+
+ctx.spellcheck.wordfile.all=spell-uk.txt,spell-nl.txt
+
+ctx.spellcheck.wordfile.uk=spell-uk.txt
+ctx.spellcheck.wordfile.nl=spell-nl.txt
+ctx.spellcheck.wordsize.uk=4
+ctx.spellcheck.wordsize.nl=4
+
+ctx.helpinfo=\
+ Shift + F11 pop up menu with ctx options|\
+ |\
+ Ctrl + B check spelling|\
+ Ctrl + M wrap text (auto indent)|\
+ Ctrl + R reset spelling results|\
+ Ctrl + I insert template|\
+ Ctrl + E open log file
+
+command.name.21.$(file.patterns.context)=CTX Action List
+command.subsystem.21.$(file.patterns.context)=3
+command.21.$(file.patterns.context)=show_menu $(ctx.menulist.context)
+command.groupundo.21.$(file.patterns.context)=yes
+command.save.before.21.$(file.patterns.context)=2
+command.shortcut.21.$(file.patterns.context)=Shift+F11
+
+command.name.21.$(file.patterns.example)=CTX Action List
+command.subsystem.21.$(file.patterns.example)=3
+command.21.$(file.patterns.example)=show_menu $(ctx.menulist.example)
+command.groupundo.21.$(file.patterns.example)=yes
+command.save.before.21.$(file.patterns.example)=2
+command.shortcut.21.$(file.patterns.example)=Shift+F11
+
+#~ command.name.21.*=CTX Action List
+#~ command.subsystem.21.*=3
+#~ command.21.*=show_menu $(ctx.menulist.default)
+#~ command.groupundo.21.*=yes
+#~ command.save.before.21.*=2
+#~ command.shortcut.21.*=Shift+F11
+
+command.name.22.*=CTX Check Text
+command.subsystem.22.*=3
+command.22.*=check_text
+command.groupundo.22.*=yes
+command.save.before.22.*=2
+command.shortcut.22.*=Ctrl+B
+
+command.name.23.*=CTX Wrap Text
+command.subsystem.23.*=3
+command.23.*=wrap_text
+command.groupundo.23.*=yes
+command.save.before.23.*=2
+command.shortcut.23.*=Ctrl+M
+
+command.name.24.*=CTX Reset Text
+command.subsystem.24.*=3
+command.24.*=reset_text
+command.groupundo.24.*=yes
+command.save.before.24.*=2
+command.shortcut.24.*=Ctrl+R
+
+command.name.25.*=CTX Template
+command.subsystem.25.*=3
+command.save.before.25.*=2
+command.groupundo.25.*=yes
+command.shortcut.25.*=Ctrl+I
+
+# command.25.$(file.patterns.context)=insert_template $(ctx.template.list.context)
+# command.25.$(file.patterns.example)=insert_template $(ctx.template.list.example)
+#
+# ctx.template.list.example=\
+# foo=mathadore.foo|\
+# bar=mathadore.bar
+#
+# ctx.template.mathadore.foo.file=./ctx-templates/foo.xml
+# ctx.template.mathadore.bar.data=bar bar bar
+#
+# paths: ./ctx-templates, ../ctx-templates, ../../ctx-templates
+
+command.name.26.*=Open Logfile
+command.subsystem.26.*=3
+command.26.*=open_log
+command.save.before.26.*=2
+command.groupundo.26.*=yes
+command.shortcut.26.*=Ctrl+E
+
+import scite-ctx-context
+import scite-ctx-example
+
+ctx.template.scan=yes
+ctx.template.rescan=no
+
+ctx.template.suffix.tex=tex
+ctx.template.suffix.xml=xml
+
+command.name.27.*=XML Uncomment
+command.subsystem.27.*=3
+command.27.*=uncomment_xml
+command.save.before.27.*=2
+command.groupundo.27.*=yes
diff --git a/context/data/scite/scite-pragma.properties b/context/data/scite/scite-pragma.properties
index abc149f12..9e06a586a 100644
--- a/context/data/scite/scite-pragma.properties
+++ b/context/data/scite/scite-pragma.properties
@@ -8,10 +8,11 @@
# Editor: screen
-position.left=25
-position.top=25
-position.width=1550
-position.height=1100
+position.left=0
+position.top=0
+position.width=1920
+position.height=1160
+
output.horizontal.size=250
output.vertical.size=100
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 91491c3d6..7061c54d5 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -1670,6 +1670,29 @@ function lpeg.append(list,pp,delayed)
return p
end
+-- function lpeg.exact_match(words,case_insensitive)
+-- local pattern = concat(words)
+-- if case_insensitive then
+-- local pattern = S(upper(characters)) + S(lower(characters))
+-- local list = { }
+-- for i=1,#words do
+-- list[lower(words[i])] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[lower(s)] and i
+-- end)
+-- else
+-- local pattern = S(concat(words))
+-- local list = { }
+-- for i=1,#words do
+-- list[words[i]] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[s] and i
+-- end)
+-- end
+-- end
+
end -- of closure
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 91491c3d6..7061c54d5 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -1670,6 +1670,29 @@ function lpeg.append(list,pp,delayed)
return p
end
+-- function lpeg.exact_match(words,case_insensitive)
+-- local pattern = concat(words)
+-- if case_insensitive then
+-- local pattern = S(upper(characters)) + S(lower(characters))
+-- local list = { }
+-- for i=1,#words do
+-- list[lower(words[i])] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[lower(s)] and i
+-- end)
+-- else
+-- local pattern = S(concat(words))
+-- local list = { }
+-- for i=1,#words do
+-- list[words[i]] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[s] and i
+-- end)
+-- end
+-- end
+
end -- of closure
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 91491c3d6..7061c54d5 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -1670,6 +1670,29 @@ function lpeg.append(list,pp,delayed)
return p
end
+-- function lpeg.exact_match(words,case_insensitive)
+-- local pattern = concat(words)
+-- if case_insensitive then
+-- local pattern = S(upper(characters)) + S(lower(characters))
+-- local list = { }
+-- for i=1,#words do
+-- list[lower(words[i])] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[lower(s)] and i
+-- end)
+-- else
+-- local pattern = S(concat(words))
+-- local list = { }
+-- for i=1,#words do
+-- list[words[i]] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[s] and i
+-- end)
+-- end
+-- end
+
end -- of closure
diff --git a/tex/context/base/buff-imp-lua.lua b/tex/context/base/buff-imp-lua.lua
index 3a3bb3d2c..1147666cc 100644
--- a/tex/context/base/buff-imp-lua.lua
+++ b/tex/context/base/buff-imp-lua.lua
@@ -146,7 +146,7 @@ local special = S("-+/*^%=#") + P("..")
local equals = P("=")^0
local open = P("[") * Cg(equals, "init") * P("[") * P("\n")^-1 -- maybe better: patterns.newline^-1
local close = P("]") * C(equals) * P("]")
-local closeeq = Cmt(close * Cb("init"), function(s,i,a,b) return a == b end)
+local closeeq = Cmt(close * Cb("init"), function(s,i,a,b) return a == b end) -- wrong return value
local longstring = open * Cs((P(1) - closeeq)^0) * close * Carg(1)
local function long(content,equals,settings)
diff --git a/tex/context/base/buff-imp-mp.lua b/tex/context/base/buff-imp-mp.lua
index 6b8a26536..24ca597e7 100644
--- a/tex/context/base/buff-imp-mp.lua
+++ b/tex/context/base/buff-imp-mp.lua
@@ -6,98 +6,21 @@ if not modules then modules = { } end modules ['buff-imp-mp'] = {
license = "see context related readme files"
}
+-- Now that we also use lpeg lexers in scite, we can share the keywords
+-- so we have moved the keyword lists to mult-mps.lua. Don't confuse the
+-- scite lexers with the ones we use here. Of course all those lexers
+-- boil down to doing similar things, but here we need more control over
+-- the rendering and have a different way of nesting. It is no coincidence
+-- that the coloring looks similar: both are derived from earlier lexing (in
+-- texedit, mkii and the c++ scite lexer).
+
local P, S, V, patterns = lpeg.P, lpeg.S, lpeg.V, lpeg.patterns
-local primitives = table.tohash {
- 'charcode', 'day', 'linecap', 'linejoin', 'miterlimit', 'month', 'pausing',
- 'prologues', 'showstopping', 'time', 'tracingcapsules', 'tracingchoices',
- 'tracingcommands', 'tracingequations', 'tracinglostchars',
- 'tracingmacros', 'tracingonline', 'tracingoutput', 'tracingrestores',
- 'tracingspecs', 'tracingstats', 'tracingtitles', 'truecorners',
- 'warningcheck', 'year', 'mpprocset',
- 'false', 'nullpicture', 'pencircle', 'true',
- 'and', 'angle', 'arclength', 'arctime', 'ASCII', 'bluepart', 'boolean', 'bot',
- 'char', 'color', 'cosd', 'cycle', 'decimal', 'directiontime', 'floor', 'fontsize',
- 'greenpart', 'hex', 'infont', 'intersectiontimes', 'known', 'length', 'llcorner',
- 'lrcorner', 'makepath', 'makepen', 'mexp', 'mlog', 'normaldeviate', 'not',
- 'numeric', 'oct', 'odd', 'or', 'path', 'pair', 'pen', 'penoffset', 'picture', 'point',
- 'postcontrol', 'precontrol', 'redpart', 'reverse', 'rotated', 'scaled',
- 'shifted', 'sind', 'slanted', 'sqrt', 'str', 'string', 'subpath', 'substring',
- 'transform', 'transformed', 'ulcorner', 'uniformdeviate', 'unknown',
- 'urcorner', 'xpart', 'xscaled', 'xxpart', 'xypart', 'ypart', 'yscaled', 'yxpart',
- 'yypart', 'zscaled',
- 'addto', 'clip', 'input', 'interim', 'let', 'newinternal', 'save', 'setbounds',
- 'shipout', 'show', 'showdependencies', 'showtoken', 'showvariable',
- 'special',
- 'begingroup', 'endgroup', 'of', 'curl', 'tension', 'and', 'controls',
- 'reflectedabout', 'rotatedaround', 'interpath', 'on', 'off', 'beginfig',
- 'endfig', 'def', 'vardef', 'enddef', 'epxr', 'suffix', 'text', 'primary', 'secondary',
- 'tertiary', 'primarydef', 'secondarydef', 'tertiarydef', 'top', 'bottom',
- 'ulft', 'urt', 'llft', 'lrt', 'randomseed', 'also', 'contour', 'doublepath',
- 'withcolor', 'withpen', 'dashed', 'if', 'else', 'elseif', 'fi', 'for', 'endfor', 'forever', 'exitif',
- 'forsuffixes', 'downto', 'upto', 'step', 'until',
- 'charlist', 'extensible', 'fontdimen', 'headerbyte', 'kern', 'ligtable',
- 'boundarychar', 'chardp', 'charext', 'charht', 'charic', 'charwd', 'designsize',
- 'fontmaking', 'charexists',
- 'cullit', 'currenttransform', 'gfcorners', 'grayfont', 'hround',
- 'imagerules', 'lowres_fix', 'nodisplays', 'notransforms', 'openit',
- 'displaying', 'currentwindow', 'screen_rows', 'screen_cols',
- 'pixels_per_inch', 'cull', 'display', 'openwindow', 'numspecial',
- 'totalweight', 'autorounding', 'fillin', 'proofing', 'tracingpens',
- 'xoffset', 'chardx', 'granularity', 'smoothing', 'turningcheck', 'yoffset',
- 'chardy', 'hppp', 'tracingedges', 'vppp',
- 'extra_beginfig', 'extra_endfig', 'mpxbreak',
- 'end', 'btex', 'etex', 'verbatimtex'
-}
+local mps = dofile(resolvers.findfile("mult-mps.lua","tex"))
-local plain = table.tohash {
- 'ahangle', 'ahlength', 'bboxmargin', 'defaultpen', 'defaultscale',
- 'labeloffset', 'background', 'currentpen', 'currentpicture', 'cuttings',
- 'defaultfont', 'extra_beginfig', 'extra_endfig',
- 'beveled', 'black', 'blue', 'bp', 'butt', 'cc', 'cm', 'dd', 'ditto', 'down', 'epsilon',
- 'evenly', 'fullcircle', 'green', 'halfcircle', 'identity', 'in', 'infinity', 'left',
- 'mitered', 'mm', 'origin', 'pensquare', 'pt', 'quartercircle', 'red', 'right',
- 'rounded', 'squared', 'unitsquare', 'up', 'white', 'withdots',
- 'abs', 'bbox', 'ceiling', 'center', 'cutafter', 'cutbefore', 'dir',
- 'directionpoint', 'div', 'dotprod', 'intersectionpoint', 'inverse', 'mod', 'lft',
- 'round', 'rt', 'unitvector', 'whatever',
- 'cutdraw', 'draw', 'drawarrow', 'drawdblarrow', 'fill', 'filldraw', 'drawdot',
- 'loggingall', 'pickup', 'tracingall', 'tracingnone', 'undraw', 'unfill',
- 'unfilldraw',
- 'buildcycle', 'dashpattern', 'decr', 'dotlabel', 'dotlabels', 'drawoptions',
- 'incr', 'label', 'labels', 'max', 'min', 'thelabel', 'z',
- 'beginchar', 'blacker', 'capsule_end', 'change_width',
- 'define_blacker_pixels', 'define_corrected_pixels',
- 'define_good_x_pixels', 'define_good_y_pixels',
- 'define_horizontal_corrected_pixels', 'define_pixels',
- 'define_whole_blacker_pixels', 'define_whole_pixels',
- 'define_whole_vertical_blacker_pixels',
- 'define_whole_vertical_pixels', 'endchar', 'extra_beginchar',
- 'extra_endchar', 'extra_setup', 'font_coding_scheme',
- 'font_extra_space'
-}
-
-local metafun = table.tohash {
- 'unitcircle', 'fulldiamond', 'unitdiamond',
- 'halfcircle', 'quartercircle',
- 'llcircle', 'lrcircle', 'urcircle', 'ulcircle',
- 'tcircle', 'bcircle', 'lcircle', 'rcircle',
- 'lltriangle', 'lrtriangle', 'urtriangle', 'ultriangle',
- 'smoothed', 'cornered', 'superellipsed', 'randomized', 'squeezed',
- 'punked', 'curved', 'unspiked', 'simplified', 'blownup', 'stretched',
- 'paralled', 'enlonged', 'shortened',
- 'enlarged', 'leftenlarged', 'topenlarged', 'rightenlarged', 'bottomenlarged',
- 'llenlarged', 'lrenlarged', 'urenlarged', 'ulenlarged',
- 'llmoved', 'lrmoved', 'urmoved', 'ulmoved',
- 'boundingbox', 'innerboundingbox', 'outerboundingbox',
- 'bottomboundary', 'leftboundary', 'topboundary', 'rightboundary',
- 'xsized', 'ysized', 'xysized',
- 'cmyk', 'transparent', 'withshade', 'spotcolor',
- 'drawfill', 'undrawfill',
- 'inverted', 'uncolored', 'softened', 'grayed',
- 'textext', 'graphictext',
- 'loadfigure', 'externalfigure'
-}
+local primitives = table.tohash(mps.primitives)
+local plain = table.tohash(mps.plain)
+local metafun = table.tohash(mps.metafun)
local context = context
local verbatim = context.verbatim
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index ba26b7226..abd0357f8 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.09.12 22:49}
+\newcontextversion{2011.09.14 12:21}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 1c31ebf94..d80c38ea8 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.09.12 22:49}
+\newcontextversion{2011.09.14 12:21}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index ef175af2a..f28a6957c 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index 1c047a3b6..b421b99a0 100644
--- a/tex/context/base/context-version.png
+++ b/tex/context/base/context-version.png
Binary files differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index a0ada15e9..ce28c02a6 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.09.12 22:49}
+\edef\contextversion{2011.09.14 12:21}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 88217fc54..f52f46334 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.09.12 22:49}
+\edef\contextversion{2011.09.14 12:21}
%D For those who want to use this:
diff --git a/tex/context/base/l-lpeg.lua b/tex/context/base/l-lpeg.lua
index 4b40b641e..9860937c4 100644
--- a/tex/context/base/l-lpeg.lua
+++ b/tex/context/base/l-lpeg.lua
@@ -633,3 +633,26 @@ function lpeg.append(list,pp,delayed)
end
return p
end
+
+-- function lpeg.exact_match(words,case_insensitive)
+-- local pattern = concat(words)
+-- if case_insensitive then
+-- local pattern = S(upper(characters)) + S(lower(characters))
+-- local list = { }
+-- for i=1,#words do
+-- list[lower(words[i])] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[lower(s)] and i
+-- end)
+-- else
+-- local pattern = S(concat(words))
+-- local list = { }
+-- for i=1,#words do
+-- list[words[i]] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[s] and i
+-- end)
+-- end
+-- end
diff --git a/tex/context/base/mult-def.lua b/tex/context/base/mult-def.lua
index 1144dba22..7e0ed0bf1 100644
--- a/tex/context/base/mult-def.lua
+++ b/tex/context/base/mult-def.lua
@@ -7,6 +7,62 @@ if not modules then modules = { } end modules ['mult-def'] = {
}
return {
+ ["helpers"]={ -- for syntax highlighters, only the ones that are for users (boring to collect them)
+ --
+ "doif", "doifnot", "doifelse",
+ "doifinset", "doifnotinset", "doifinsetelse",
+ "doifnextcharelse", "doifnextoptionalelse", "doifnextparenthesiselse", "doiffastoptionalcheckelse",
+ "doifundefinedelse", "doifdefinedelse", "doifundefined", "doifdefined",
+ "doifelsevalue", "doifvalue", "doifnotvalue",
+ "doifnothing", "doifsomething", "doifelsenothing", "doifsomethingelse",
+ "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing",
+ "doifdimensionelse",
+ --
+ "tracingall", "tracingnone", "loggingall",
+ --
+ "appendtoks", "prependtoks", "appendtotoks", "prependtotoks",
+ --
+ "endgraf", "empty", "null", "space", "obeyspaces", "obeylines",
+ --
+ "executeifdefined",
+ --
+ "dontleavehmode",
+ --
+ "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "measure",
+ --
+ "getvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue",
+ "resetvalue", "undefinevalue", "ignorevalue",
+ "setuvalue", "setuevalue", "setugvalue", "setuxvalue",
+ "globallet", "glet",
+ "getparameters", "geteparameters",
+ --
+ "processcommalist", "processcommacommand", "quitcommalist",
+ "processaction", "processallactions",
+ --
+ "startsetups", "stopsetups",
+ "startxmlsetups", "stopxmlsetups",
+ "starttexdefinition", "stoptexdefinition",
+ --
+ "unexpanded", "expanded", "startexpanded", "stopexpanded", "protected", "protect", "unprotect",
+ --
+ "firstofoneargument",
+ "firstoftwoarguments", "secondoftwoarguments",
+ "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments",
+ "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments",
+ "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments",
+ "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments",
+ --
+ "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments",
+ "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals",
+ --
+ "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth",
+ --
+ "newconstant", "setnewconstant", "newconditional", "settrue", "setfalse",
+ --
+ "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty",
+ "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty",
+ --
+ },
["commands"]={
["CAPPED"]={
["cs"]="KAP",
diff --git a/tex/context/base/mult-mps.lua b/tex/context/base/mult-mps.lua
index c56fe2eac..f382433de 100644
--- a/tex/context/base/mult-mps.lua
+++ b/tex/context/base/mult-mps.lua
@@ -22,7 +22,7 @@ return {
"special",
"begingroup", "endgroup", "of", "curl", "tension", "and", "controls",
"reflectedabout", "rotatedaround", "interpath", "on", "off", "beginfig",
- "endfig", "def", "vardef", "enddef", "epxr", "suffix", "text", "primary", "secondary",
+ "endfig", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary",
"tertiary", "primarydef", "secondarydef", "tertiarydef", "top", "bottom",
"ulft", "urt", "llft", "lrt", "randomseed", "also", "contour", "doublepath",
"withcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif",
diff --git a/tex/context/base/mult-prm.lua b/tex/context/base/mult-prm.lua
index 0c84563fc..61ba38199 100644
--- a/tex/context/base/mult-prm.lua
+++ b/tex/context/base/mult-prm.lua
@@ -6,212 +6,135 @@ return {
"Omegaminorversion",
"Omegarevision",
"Udelcode",
- "Udelcode",
"Udelcodenum",
"Udelimiter",
"Udelimiterover",
"Udelimiterunder",
"Umathaccent",
- "Umathaccent",
- "Umathaccents",
"Umathaccents",
"Umathaxis",
"Umathbinbinspacing",
- "Umathbinbinspacing",
"Umathbinclosespacing",
"Umathbininnerspacing",
"Umathbinopenspacing",
"Umathbinopspacing",
- "Umathbinopspacing",
- "Umathbinordspacing",
"Umathbinordspacing",
"Umathbinpunctspacing",
- "Umathbinpunctspacing",
"Umathbinrelspacing",
"Umathbotaccent",
- "Umathbotaccent",
"Umathchar",
"Umathchardef",
- "Umathchardef",
"Umathcharnum",
"Umathclosebinspacing",
- "Umathclosebinspacing",
- "Umathcloseclosespacing",
"Umathcloseclosespacing",
"Umathcloseinnerspacing",
"Umathcloseopenspacing",
- "Umathcloseopenspacing",
"Umathcloseopspacing",
"Umathcloseordspacing",
"Umathclosepunctspacing",
"Umathcloserelspacing",
"Umathcode",
- "Umathcode",
- "Umathcodenum",
"Umathcodenum",
"Umathconnectoroverlapmin",
- "Umathconnectoroverlapmin",
"Umathfractiondelsize",
"Umathfractiondenomdown",
- "Umathfractiondenomdown",
- "Umathfractiondenomvgap",
"Umathfractiondenomvgap",
"Umathfractionnumup",
"Umathfractionnumvgap",
- "Umathfractionnumvgap",
"Umathfractionrule",
"Umathinnerbinspacing",
- "Umathinnerbinspacing",
"Umathinnerclosespacing",
- "Umathinnerclosespacing",
- "Umathinnerinnerspacing",
"Umathinnerinnerspacing",
"Umathinneropenspacing",
- "Umathinneropenspacing",
- "Umathinneropspacing",
"Umathinneropspacing",
"Umathinnerordspacing",
"Umathinnerpunctspacing",
"Umathinnerrelspacing",
- "Umathinnerrelspacing",
"Umathlimitabovebgap",
"Umathlimitabovekern",
- "Umathlimitabovekern",
- "Umathlimitabovevgap",
"Umathlimitabovevgap",
"Umathlimitbelowbgap",
"Umathlimitbelowkern",
"Umathlimitbelowvgap",
- "Umathlimitbelowvgap",
"Umathopbinspacing",
- "Umathopbinspacing",
- "Umathopclosespacing",
"Umathopclosespacing",
"Umathopenbinspacing",
- "Umathopenbinspacing",
- "Umathopenclosespacing",
"Umathopenclosespacing",
"Umathopeninnerspacing",
"Umathopenopenspacing",
"Umathopenopspacing",
"Umathopenordspacing",
- "Umathopenordspacing",
"Umathopenrelspacing",
"Umathoperatorsize",
- "Umathoperatorsize",
- "Umathopinnerspacing",
"Umathopinnerspacing",
"Umathopopenspacing",
- "Umathopopenspacing",
"Umathopopspacing",
"Umathopordspacing",
"Umathoppunctspacing",
- "Umathoppunctspacing",
- "Umathoprelspacing",
"Umathoprelspacing",
"Umathordbinspacing",
"Umathordclosespacing",
"Umathordinnerspacing",
"Umathordopenspacing",
"Umathordopspacing",
- "Umathordopspacing",
"Umathordordspacing",
"Umathordpunctspacing",
"Umathordrelspacing",
- "Umathordrelspacing",
"Umathoverbarkern",
"Umathoverbarrule",
- "Umathoverbarrule",
"Umathoverbarvgap",
"Umathoverdelimiterbgap",
- "Umathoverdelimiterbgap",
"Umathoverdelimitervgap",
"Umathpunctbinspacing",
- "Umathpunctbinspacing",
"Umathpunctclosespacing",
"Umathpunctinnerspacing",
"Umathpunctopenspacing",
- "Umathpunctopenspacing",
- "Umathpunctopspacing",
"Umathpunctopspacing",
"Umathpunctordspacing",
- "Umathpunctordspacing",
"Umathpunctpunctspacing",
"Umathpunctrelspacing",
- "Umathpunctrelspacing",
- "Umathquad",
"Umathquad",
"Umathradicaldegreeafter",
- "Umathradicaldegreeafter",
"Umathradicaldegreebefore",
"Umathradicaldegreeraise",
- "Umathradicaldegreeraise",
"Umathradicalkern",
- "Umathradicalkern",
- "Umathradicalrule",
"Umathradicalrule",
"Umathradicalvgap",
- "Umathradicalvgap",
- "Umathrelbinspacing",
"Umathrelbinspacing",
"Umathrelclosespacing",
- "Umathrelclosespacing",
- "Umathrelinnerspacing",
"Umathrelinnerspacing",
"Umathrelopenspacing",
- "Umathrelopenspacing",
- "Umathrelopspacing",
"Umathrelopspacing",
"Umathrelpunctspacing",
"Umathrelrelspacing",
"Umathspaceafterscript",
- "Umathspaceafterscript",
"Umathstackdenomdown",
"Umathstacknumup",
- "Umathstacknumup",
- "Umathstackvgap",
"Umathstackvgap",
"Umathsubshiftdown",
- "Umathsubshiftdown",
- "Umathsubshiftdrop",
"Umathsubshiftdrop",
"Umathsubsupshiftdown",
"Umathsubsupvgap",
- "Umathsubsupvgap",
- "Umathsubtopmax",
"Umathsubtopmax",
"Umathsupbottommin",
"Umathsupshiftdrop",
"Umathsupshiftup",
- "Umathsupshiftup",
"Umathsupsubbottommax",
"Umathunderbarkern",
- "Umathunderbarkern",
"Umathunderbarrule",
- "Umathunderbarrule",
- "Umathunderbarvgap",
"Umathunderbarvgap",
"Umathunderdelimiterbgap",
- "Umathunderdelimiterbgap",
- "Umathunderdelimitervgap",
"Umathunderdelimitervgap",
"Uoverdelimiter",
"Uradical",
- "Uradical",
- "Uroot",
"Uroot",
"Ustack",
- "Ustack",
"Ustartdisplaymath",
"Ustartmath",
- "Ustartmath",
"Ustopdisplaymath",
"Ustopmath",
"Usubscript",
- "Usubscript",
"Usuperscript",
- "Usuperscript",
- "Uunderdelimiter",
"Uunderdelimiter",
"abovedisplayshortskip",
"abovedisplayskip",
@@ -223,12 +146,9 @@ return {
"aftergroup",
"alignmark",
"aligntab",
- "aligntab",
"atop",
"atopwithdelims",
"attribute",
- "attribute",
- "attributedef",
"attributedef",
"badness",
"baselineskip",
@@ -240,15 +160,13 @@ return {
"boxdir",
"boxmaxdepth",
"brokenpenalty",
- "catcodetable",
+ "catcode",
"catcodetable",
"char",
- "chardp",
+ "chardef",
"chardp",
"charht",
"charit",
- "charit",
- "charwd",
"charwd",
"cleaders",
"clearmarks",
@@ -260,11 +178,9 @@ return {
"countdef",
"cr",
"crampeddisplaystyle",
- "crampeddisplaystyle",
"crampedscriptscriptstyle",
"crampedscriptstyle",
"crampedtextstyle",
- "crampedtextstyle",
"crcr",
"csname",
"currentgrouplevel",
@@ -273,6 +189,7 @@ return {
"currentiflevel",
"day",
"deadcycles",
+ "def",
"defaultskewchar",
"delcode",
"delimiterfactor",
@@ -319,9 +236,9 @@ return {
"fontcharic",
"fontcharwd",
"fontid",
- "fontid",
"fontname",
"formatname",
+ "futurelet",
"gdef",
"gleaders",
"global",
@@ -349,8 +266,6 @@ return {
"hyphenpenalty",
"if",
"ifabsdim",
- "ifabsdim",
- "ifabsnum",
"ifabsnum",
"ifcase",
"ifcat",
@@ -366,7 +281,6 @@ return {
"ifpdfabsdim",
"ifpdfprimitive",
"ifprimitive",
- "ifprimitive",
"iftrue",
"ifvbox",
"ifvmode",
@@ -376,7 +290,6 @@ return {
"immediate",
"indent",
"initcatcodetable",
- "initcatcodetable",
"input",
"insert",
"insertpenalties",
@@ -389,11 +302,9 @@ return {
"lastnodetype",
"lastpenalty",
"latelua",
- "latelua",
"lccode",
"leaders",
"leftghost",
- "leftghost",
"lefthyphenmin",
"leftmarginkern",
"leftskip",
@@ -404,19 +315,15 @@ return {
"lineskip",
"lineskiplimit",
"localbrokenpenalty",
- "localbrokenpenalty",
- "localinterlinepenalty",
"localinterlinepenalty",
"localleftbox",
"localrightbox",
- "localrightbox",
"long",
"lowercase",
"lpcode",
"luaescapestring",
"luatexdatestamp",
"luatexrevision",
- "luatexrevision",
"luatexversion",
"mark",
"marks",
@@ -450,8 +357,6 @@ return {
"noexpand",
"noindent",
"nokerns",
- "nokerns",
- "noligs",
"noligs",
"nolimits",
"nolocaldirs",
@@ -460,27 +365,19 @@ return {
"nullfont",
"number",
"odelcode",
- "odelcode",
"odelimiter",
- "odelimiter",
- "omathaccent",
"omathaccent",
"omathchar",
- "omathchar",
- "omathchardef",
"omathchardef",
"omathcode",
- "omathcode",
"omit",
"openin",
"openout",
"or",
"oradical",
- "oradical",
"outer",
"output",
"outputbox",
- "outputbox",
"outputpenalty",
"over",
"overfullrule",
@@ -495,19 +392,14 @@ return {
"pagefilstretch",
"pagegoal",
"pageheight",
- "pageheight",
- "pageleftoffset",
"pageleftoffset",
"pageshrink",
"pagestretch",
"pagetopoffset",
- "pagetopoffset",
"pagetotal",
"pagewidth",
- "pagewidth",
"par",
"pardir",
- "pardir",
"parfillskip",
"parshapedimen",
"parshapeindent",
@@ -593,18 +485,14 @@ return {
"postdisplaypenalty",
"postexhyphenchar",
"posthyphenchar",
- "posthyphenchar",
"predisplaydirection",
"predisplaysize",
"preexhyphenchar",
- "preexhyphenchar",
- "prehyphenchar",
"prehyphenchar",
"pretolerance",
"prevdepth",
"prevgraf",
"primitive",
- "primitive",
"protected",
"quitvmode",
"raise",
@@ -613,12 +501,10 @@ return {
"relax",
"relpenalty",
"right",
- "rightghost",
"rightmarginkern",
"rightskip",
"rpcode",
"savecatcodetable",
- "savecatcodetable",
"savinghyphcodes",
"scantextokens",
"scriptfont",
@@ -651,16 +537,12 @@ return {
"splittopskip",
"string",
"suppressfontnotfounderror",
- "suppressfontnotfounderror",
- "suppressifcsnameerror",
"suppressifcsnameerror",
"suppresslongerror",
"suppressoutererror",
- "suppressoutererror",
"synctex",
"tabskip",
"tagcode",
- "textdir",
"textfont",
"the",
"thickmuskip",
diff --git a/tex/context/base/mult-prm.mkiv b/tex/context/base/mult-prm.mkiv
index 4fda18463..ab0c91b8e 100644
--- a/tex/context/base/mult-prm.mkiv
+++ b/tex/context/base/mult-prm.mkiv
@@ -1,17 +1,20 @@
\starttext
\startluacode
- local primitives = { }
- table.merge(primitives,table.fromhash(tex.primitives()))
- table.merge(primitives,tex.extraprimitives('etex'))
- table.merge(primitives,tex.extraprimitives('pdftex'))
- table.merge(primitives,tex.extraprimitives('luatex'))
- table.merge(primitives,tex.extraprimitives('aleph'))
- table.merge(primitives,tex.extraprimitives('omega'))
+ local primitives = table.unique(
+ table.merge(
+ { },
+ table.fromhash(tex.primitives()),
+ tex.extraprimitives('etex'),
+ tex.extraprimitives('pdftex'),
+ tex.extraprimitives('luatex'),
+ tex.extraprimitives('aleph'),
+ tex.extraprimitives('omega'),
+ { "def", "catcode", "futurelet", "chardef", }
+ )
+ )
table.sort(primitives)
- while string.find(primitives[1],"[^A-Za-z]") do
- table.remove(primitives,1)
- end
+ table.remove(primitives,1) -- \-
io.savedata("mult-prm.lua",table.serialize({ primitives = primitives },true,{ reduce = true, inline = false }))
\stopluacode
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 1e72db3fc..2abcef338 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 48e8df334..e89a371d1 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/syst-aux.mkiv b/tex/context/base/syst-aux.mkiv
index c7a3d2325..796f3321e 100644
--- a/tex/context/base/syst-aux.mkiv
+++ b/tex/context/base/syst-aux.mkiv
@@ -156,7 +156,7 @@
%D alternatives to this command. Beware, only the simple one
%D has \type {\noexpand} before its argument.
- \long\def\@@expanded{} % always long; global (less restores)
+\long\def\@@expanded{} % always long; global (less restores)
\long\def\expanded#1%
{\long\xdef\@@expanded{\noexpand#1}\@@expanded}
@@ -3763,28 +3763,28 @@
% faster
-\long\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
- {\global\advance\outerrecurse \plusone
- \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
- \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
- \ifnum#3>\zerocount
- \ifnum#2<#1\relax
- \let\nextrecurse\exitstepwiserecurse
- \else
- \let\nextrecurse\dodostepwiserecurse
- \fi
- \else
- \ifnum#3<\zerocount
- \ifnum#1<#2\relax
- \let\nextrecurse\exitstepwiserecurse
- \else
- \let\nextrecurse\dodostepwisereverse
- \fi
- \else
- \let\nextrecurse\exitstepwiserecurse
- \fi
- \fi
- \normalexpanded{\nextrecurse{\number#1}{\number#2}{\number#3}}}
+% \long\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
+% {\global\advance\outerrecurse \plusone
+% \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
+% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
+% \ifnum#3>\zerocount
+% \ifnum#2<#1\relax
+% \let\nextrecurse\exitstepwiserecurse
+% \else
+% \let\nextrecurse\dodostepwiserecurse
+% \fi
+% \else
+% \ifnum#3<\zerocount
+% \ifnum#1<#2\relax
+% \let\nextrecurse\exitstepwiserecurse
+% \else
+% \let\nextrecurse\dodostepwisereverse
+% \fi
+% \else
+% \let\nextrecurse\exitstepwiserecurse
+% \fi
+% \fi
+% \normalexpanded{\nextrecurse{\number#1}{\number#2}{\number#3}}}
% slightly faster
@@ -5982,7 +5982,7 @@
\newbox\@@dlhbox
-\unexpanded \def\dontleavehmode
+\unexpanded\def\dontleavehmode
{\ifhmode\else \ifmmode\else
\setbox\@@dlhbox\hbox{\mathsurround\zeropoint\everymath\emptytoks$ $}\unhbox\@@dlhbox
\fi \fi}
diff --git a/tex/context/base/syst-ini.mkiv b/tex/context/base/syst-ini.mkiv
index 3e8c8a749..7ff0c5575 100644
--- a/tex/context/base/syst-ini.mkiv
+++ b/tex/context/base/syst-ini.mkiv
@@ -581,7 +581,7 @@
%D
%D In \LUATEX\ we have ways around this.
-\def\tracingall
+\normalprotected\def\tracingall
{\tracingonline \plusone
\tracingcommands \plusthree
\tracingstats \plustwo
@@ -600,11 +600,11 @@
\tracingassigns \plustwo
\errorstopmode}
-\def\loggingall
+\normalprotected\def\loggingall
{\tracingall
\tracingonline \zerocount}
-\def\tracingnone
+\normalprotected\def\tracingnone
{\tracingassigns \zerocount
\tracingnesting \zerocount
\tracingscantokens\zerocount
@@ -700,7 +700,7 @@
%D does not support nested loops. We use a namespace prefix
%D \type {@@pln}.
-\long\def\loop#1\repeat{\long\def\@@plnbody{#1}\@@plniterate}
+\long\def\loop#1\repeat{\long\def\@@plnbody{#1}\@@plniterate} % might go
%D The following makes \type {\loop} \unknown\ \type {\if}
%D \unknown\ \type {\repeat} skippable (clever trick):
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 48733addb..18d88e815 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 09/12/11 22:49:51
+-- merge date : 09/14/11 12:21:17
do -- begin closure to overcome local limits and interference
@@ -1726,6 +1726,29 @@ function lpeg.append(list,pp,delayed)
return p
end
+-- function lpeg.exact_match(words,case_insensitive)
+-- local pattern = concat(words)
+-- if case_insensitive then
+-- local pattern = S(upper(characters)) + S(lower(characters))
+-- local list = { }
+-- for i=1,#words do
+-- list[lower(words[i])] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[lower(s)] and i
+-- end)
+-- else
+-- local pattern = S(concat(words))
+-- local list = { }
+-- for i=1,#words do
+-- list[words[i]] = true
+-- end
+-- return Cmt(pattern^1, function(_,i,s)
+-- return list[s] and i
+-- end)
+-- end
+-- end
+
end -- closure
do -- begin closure to overcome local limits and interference