diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/l-macro.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/l-macro.lua | 95 |
1 files changed, 14 insertions, 81 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/l-macro.lua b/Master/texmf-dist/tex/context/base/mkiv/l-macro.lua index 24a3d07bc23..30c7cbec618 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/l-macro.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/l-macro.lua @@ -14,16 +14,14 @@ if not modules then modules = { } end modules ['l-macros'] = { local S, P, R, V, C, Cs, Cc, Ct, Carg = lpeg.S, lpeg.P, lpeg.R, lpeg.V, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Carg local lpegmatch = lpeg.match local concat = table.concat -local format, sub, match = string.format, string.sub, string.match +local format, sub = string.format, string.sub local next, load, type = next, load, type local newline = S("\n\r")^1 local continue = P("\\") * newline -local whitespace = S(" \t\n\r") local spaces = S(" \t") + continue -local nametoken = R("az","AZ","__","09") -local name = nametoken^1 -local body = ((continue/"" + 1) - newline)^1 +local name = R("az","AZ","__","09")^1 +local body = ((1+continue/"")-newline)^1 local lparent = P("(") local rparent = P(")") local noparent = 1 - (lparent + rparent) @@ -55,9 +53,7 @@ end -- todo: zero case -local safeguard = P("local") * whitespace^1 * name * (whitespace + P("=")) - -resolve = safeguard + C(C(name) * (arguments^-1)) / function(raw,s,a) +resolve = C(C(name) * arguments^-1) / function(raw,s,a) local d = definitions[s] if d then if a then @@ -89,7 +85,7 @@ subparser = Cs((resolve + P(1))^1) local enddefine = P("#enddefine") / "" -local beginregister = (C(name) * (arguments + Cc(false)) * C((1-enddefine)^1) * enddefine) / function(k,a,v) +local beginregister = (C(name) * spaces^0 * (arguments + Cc(false)) * C((1-enddefine)^1) * enddefine) / function(k,a,v) local n = 0 if a then n = #a @@ -107,14 +103,14 @@ local beginregister = (C(name) * (arguments + Cc(false)) * C((1-enddefine)^1) * end local d = definitions[k] if not d then - d = { a = a, [0] = false, false, false, false, false, false, false, false, false } + d = { [0] = false, false, false, false, false, false, false, false, false } definitions[k] = d end d[n] = lpegmatch(subparser,v) or v return "" end -local register = (Cs(name) * (arguments + Cc(false)) * spaces^0 * Cs(body)) / function(k,a,v) +local register = (C(name) * spaces^0 * (arguments + Cc(false)) * spaces^0 * C(body)) / function(k,a,v) local n = 0 if a then n = #a @@ -132,7 +128,7 @@ local register = (Cs(name) * (arguments + Cc(false)) * spaces^0 * Cs(body)) / fu end local d = definitions[k] if not d then - d = { a = a, [0] = false, false, false, false, false, false, false, false, false } + d = { [0] = false, false, false, false, false, false, false, false, false } definitions[k] = d end d[n] = lpegmatch(subparser,v) or v @@ -166,25 +162,6 @@ function macros.reset() patterns = { } end -function macros.showdefinitions() - -- no helpers loaded but not called early - for name, list in table.sortedhash(definitions) do - local arguments = list.a - if arguments then - arguments = "(" .. concat(arguments,",") .. ")" - else - arguments = "" - end - print("macro: " .. name .. arguments) - for i=0,#list do - local l = list[i] - if l then - print(" " .. l) - end - end - end -end - function macros.resolvestring(str) return lpegmatch(parser,str) or str end @@ -193,51 +170,6 @@ function macros.resolving() return next(patterns) end -local function reload(path,name,data) - local only = match(name,".-([^/]+)%.lua") - if only and only ~= "" then - local name = path .. "/" .. only - local f = io.open(name,"wb") - f:write(data) - f:close() - local f = loadfile(name) - os.remove(name) - return f - end -end - --- local function reload(path,name,data) --- if path and path ~= "" then --- local only = file.nameonly(name) .. "-macro.lua" --- local name = file.join(path,only) --- io.savedata(name,data) --- local l = loadfile(name) --- os.remove(name) --- return l --- end --- return load(data,name) --- end --- --- assumes no helpers - -local function reload(path,name,data) - if path and path ~= "" then - local only = string.match(name,".-([^/]+)%.lua") - if only and only ~= "" then - local name = path .. "/" .. only .. "-macro.lua" - local f = io.open(name,"wb") - if f then - f:write(data) - f:close() - local l = loadfile(name) - os.remove(name) - return l - end - end - end - return load(data,name) -end - local function loaded(name,trace,detail) -- local c = io.loaddata(fullname) -- not yet available local f = io.open(name,"rb") @@ -262,11 +194,12 @@ local function loaded(name,trace,detail) report_lua("no macros expanded in '%s'",name) end end - -- if #name > 30 then - -- name = sub(name,-30) - -- end - -- n = "--[[" .. name .. "]]\n" .. n - return reload(lfs and lfs.currentdir(),name,n) + if #name > 30 then + n = "--[[" .. sub(name,-30) .. "]] " .. n + else + n = "--[[" .. name .. "]] " .. n + end + return load(n) end macros.loaded = loaded |