diff options
Diffstat (limited to 'tex/context/base/mkiv/syst-aux.lmt')
-rw-r--r-- | tex/context/base/mkiv/syst-aux.lmt | 747 |
1 files changed, 0 insertions, 747 deletions
diff --git a/tex/context/base/mkiv/syst-aux.lmt b/tex/context/base/mkiv/syst-aux.lmt deleted file mode 100644 index c0de8a953..000000000 --- a/tex/context/base/mkiv/syst-aux.lmt +++ /dev/null @@ -1,747 +0,0 @@ - if not modules then modules = { } end modules ['syst-aux'] = { - version = 1.001, - comment = "companion to syst-aux.mkiv", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - --- slower than lpeg: --- --- utfmatch(str,"(.?)(.*)$") --- utf.sub(str,1,1) - -local tonumber, next, type = tonumber, next, type -local utfsub = utf.sub -local P, S, R, C, Cc, Cs, Carg, lpegmatch = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Carg, lpeg.match -local find, formatters = string.find, string.formatters - -local context = context -local implement = interfaces.implement -local setmacro = interfaces.setmacro -local setcatcode = tex.setcatcode -local texget = tex.get -local utf8character = lpeg.patterns.utf8character -local settings_to_array = utilities.parsers.settings_to_array -local settings_to_set = utilities.parsers.settings_to_set - -local pattern = C(utf8character^-1) * C(P(1)^0) - -implement { - name = "getfirstcharacter", - arguments = "string", - actions = function(str) - local first, rest = lpegmatch(pattern,str) - setmacro("firstcharacter",first) - setmacro("remainingcharacters",rest) - end -} - -implement { - name = "thefirstcharacter", - arguments = "string", - actions = function(str) - local first, rest = lpegmatch(pattern,str) - context(first) - end -} - -implement { - name = "theremainingcharacters", - arguments = "string", - actions = function(str) - local first, rest = lpegmatch(pattern,str) - context(rest) - end -} - -local pattern = C(utf8character^-1) -local ctx_doifelse = commands.doifelse - -implement { - name = "doifelsefirstchar", - arguments = "2 strings", - actions = function(str,chr) - ctx_doifelse(lpegmatch(pattern,str) == chr) - end -} - -implement { - name = "getsubstring", - arguments = "3 strings", - actions = function(str,first,last) - context(utfsub(str,tonumber(first),tonumber(last))) - end -} - --- function commands.addtocommalist(list,item) --- if list == "" then --- context(item) --- else --- context("%s,%s",list,item) -- using tex.print is some 10% faster --- end --- end --- --- function commands.removefromcommalist(list,item) --- if list == "" then --- context(item) --- else --- -- okay, using a proper lpeg is probably faster --- -- we could also check for #l = 1 --- local l = settings_to_array(list) --- local t, n = { } --- for i=1,#l do --- if l[i] ~= item then --- n = n + 1 --- t[n] = item --- end --- end --- if n == 0 then --- context(item) --- else --- context(concat(list,",")) --- end --- end --- end - -local pattern = (C((1-P("%"))^1) * Carg(1)) / function(n,d) - return formatters["%.0fsp"](d * tonumber(n)/100) end * P("%") * P(-1) -- .0 ? - --- percentageof("10%",65536*10) - -implement { - name = "percentageof", - arguments = { "string", "dimen" }, - actions = function(str,dim) - context(lpegmatch(pattern,str,1,dim) or str) - end -} - --- \gdef\setpercentdimen#1#2% --- {#1=\ctxcommand{percentageof("#2",\number#1)}\relax} - -local space = P(" ") / "" -local spaces = P(" ")^0 / "" -local nohash = 1 - P("#") -local digit = R("09") -local double = P("##") / "#" -local single = P("#") -local sentinel = spaces * (nohash^1 / "\\%0") -local whatever = S("+-/*_^=:") + digit -local sargument = (single * digit)^1 -local dargument = (double * digit)^1 -local swhatever = (single * whatever)^1 -local dwhatever = (double * whatever)^1 - --- different ones: - -local space = P(" ") -local spaces = space^0 - --- see syst-aux.lua for historic variants - -local global = nil -local protected = nil -local expanded = nil -local optional = nil -local tolerant = nil -local instance = nil -local frozen = nil -local csname = nil -local rest = nil - -local function catcodes_s() - setcatcode(32,10) -- space - setcatcode(13, 5) -- endofline -end - -local function catcodes_n() - setcatcode(32, 9) -- ignore - setcatcode(13, 9) -- ignore -end - -local function oldoption(s) - if optional > 1 then - optional = optional - 1 - return s .. "#*" - else - return s - end -end - -local option = ( - P("single") * Cc(1) - + P("double") * Cc(2) - + P("triple") * Cc(3) - + P("quadruple") * Cc(4) - + P("quintuple") * Cc(5) - + P("sixtuple") - ) * (P("empty") + P("argument")) - -local pattern = ( - ( - spaces * ( - ( P("spaces") * space / catcodes_s ) - + ( P("nospaces") * space / catcodes_n ) - + ( P("global") * space / function() global = true end) - + ( P("protected") * space / function() protected = true end) - + ( P("expanded") * space / function() expanded = true end) - + ( P("tolerant") * space / function() tolerant = true end) - + ( P("instance") * space / function() instance = true end) - + ( P("frozen") * space / function() frozen = true end) - + ( P("unexpanded") * space / function() protected = true end) - + ( option * space / function(s) tolerant = true - optional = s end) - ) - )^0 - * spaces * ( C((1-S(" #["))^1) ) - * spaces * Cs( - (Cs(P("[") * dargument * P("]")) / oldoption + dwhatever)^1 * sentinel^-1 * double^-1 - + (Cs(P("[") * sargument * P("]")) / oldoption + swhatever)^1 * sentinel^-1 * single^-1 - + sentinel^-1 * (double+single)^-1 - ) -) - -local ctx_dostarttexdefinition = context.dostarttexdefinition - -local function texdefinition_one(str) - global = false - protected = false - expanded = false - optional = 0 - tolerant = false - instance = false - frozen = false - csname, rest = lpegmatch(pattern,str) - ctx_dostarttexdefinition() -end - -local function texdefinition_two() - context ( - (tolerant and [[\tolerant]] or "") .. (frozen and [[\frozen]] or "") .. (protected and [[\protected]] or "") .. (instance and [[\instance]] or "") .. - [[\expandafter]] .. (global and (expanded and [[\xdef]] or [[\gdef]]) or (expanded and [[\edef]] or [[\def]])) .. - [[\csname ]] .. csname .. [[\endcsname ]] .. - rest - ) -end - -implement { name = "texdefinition_one", actions = texdefinition_one, scope = "private", arguments = "string" } -implement { name = "texdefinition_two", actions = texdefinition_two, scope = "private" } - -do - - -- Quite probably we don't yet have characters loaded so we delay some - -- aliases. - - local _lower_, _upper_, _strip_ - - _lower_ = function(s) - if characters and characters.lower then - _lower_ = characters.lower - return _lower_(s) - end - return string.lower(s) - end - - _upper_ = function(s) - if characters and characters.upper then - _upper_ = characters.upper - return _upper_(s) - end - return string.upper(s) - end - - _strip_ = function(s) - -- or utf.strip - if string.strip then - _strip_ = string.strip - return _strip_(s) - end - return s - end - - local function lower(s) context(_lower_(s)) end - local function upper(s) context(_upper_(s)) end - local function strip(s) context(_strip_(s)) end - - implement { name = "upper", arguments = "string", actions = upper } - implement { name = "lower", arguments = "string", actions = lower } - implement { name = "strip", arguments = "string", actions = strip } - -end - -implement { - name = "converteddimen", - arguments = { "dimen", "string" }, - actions = function(dimen,unit) - context(number.todimen(dimen,unit or "pt","%0.5f")) -- no unit appended (%F) - end -} - --- where, not really the best spot for this: - -implement { - name = "immediatemessage", - arguments = { "'message'", "string" }, - actions = logs.status -} - -implement { - name = "resettimer", - actions = function() - statistics.resettiming("whatever") - statistics.starttiming("whatever") - end -} - -implement { - name = "benchmarktimer", - actions = function() - statistics.benchmarktimer("whatever") - end -} - -implement { - name = "elapsedtime", - actions = function() - statistics.stoptiming("whatever") - context(statistics.elapsedtime("whatever")) - end -} - -implement { - name = "elapsedsteptime", - arguments = "integer", - actions = function(n) - statistics.stoptiming("whatever") - local t = statistics.elapsed("whatever")/(n > 0 and n or 1) - if t > 0 then - context("%0.9f",t) - else - context(0) - end - end -} - -local accuracy = table.setmetatableindex(function(t,k) - local v = formatters["%0." ..k .. "f"] - t[k] = v - return v -end) - -implement { - name = "rounded", - arguments = "integer", - actions = function(n,m) context(accuracy[n](m)) end -} - --- not faster but just less tracing: - -local ctx_protected_cs = context.protected.cs -- more efficient - -local ctx_firstoftwoarguments = ctx_protected_cs.firstoftwoarguments -local ctx_secondoftwoarguments = ctx_protected_cs.secondoftwoarguments -local ctx_firstofoneargument = ctx_protected_cs.firstofoneargument -local ctx_gobbleoneargument = ctx_protected_cs.gobbleoneargument - -context.firstoftwoarguments = ctx_firstoftwoarguments -context.secondoftwoarguments = ctx_secondoftwoarguments -context.firstofoneargument = ctx_firstofoneargument -context.gobbleoneargument = ctx_gobbleoneargument - -local ctx_iftrue = context.iftrue -local ctx_iffalse = context.iffalse - -local hash = utilities.parsers.hashes.settings_to_set - -local function doifelsecommon(a,b) - if a == b then - setmacro("commalistelement",a) - if a == "" then - ctx_secondoftwoarguments() - else - ctx_firstoftwoarguments() - end - return - end - local ba = find(a,",",1,true) - local bb = find(b,",",1,true) - if ba and bb then - local ha = hash[a] - local hb = hash[b] - -- local ha = settings_to_set(a) - -- local hb = settings_to_set(b) - for k in next, ha do - if hb[k] then - setmacro("commalistelement",k) - ctx_firstoftwoarguments() - return - end - end - elseif ba then - if hash[a][b] then - -- if settings_to_set(a)[b] then - setmacro("commalistelement",b) - ctx_firstoftwoarguments() - return - end - elseif bb then - if hash[b][a] then - -- if settings_to_set(b)[a] then - setmacro("commalistelement",a) - ctx_firstoftwoarguments() - return - end - end - setmacro("commalistelement","") - ctx_secondoftwoarguments() -end - -local function doifcommon(a,b) - if a == b then - setmacro("commalistelement",a) - if a == "" then - ctx_gobbleoneargument() - else - ctx_firstofoneargument() - end - return - end - local ba = find(a,",",1,true) - local bb = find(b,",",1,true) - if ba and bb then - local ha = hash[a] - local hb = hash[b] - -- local ha = settings_to_set(a) - -- local hb = settings_to_set(b) - for k in next, ha do - if hb[k] then - setmacro("commalistelement",k) - ctx_firstofoneargument() - return - end - end - elseif ba then - if hash[a][b] then - -- if settings_to_set(a)[b] then - setmacro("commalistelement",b) - ctx_firstofoneargument() - return - end - elseif bb then - if hash[b][a] then - -- if settings_to_set(b)[a] then - setmacro("commalistelement",a) - ctx_firstofoneargument() - return - end - end - setmacro("commalistelement","") - ctx_gobbleoneargument() -end - -local function doifnotcommon(a,b) - if a == b then - setmacro("commalistelement",a) - if a == "" then - ctx_firstofoneargument() - else - ctx_gobbleoneargument() - end - return - end - local ba = find(a,",",1,true) - local bb = find(b,",",1,true) - if ba and bb then - local ha = hash[a] - local hb = hash[b] - -- local ha = settings_to_set(a) - -- local hb = settings_to_set(b) - for k in next, ha do - if hb[k] then - setmacro("commalistelement",k) - ctx_gobbleoneargument() - return - end - end - elseif ba then - if hash[a][b] then - -- if settings_to_set(a)[b] then - setmacro("commalistelement",b) - ctx_gobbleoneargument() - return - end - elseif bb then - if hash[b][a] then - -- if settings_to_set(b)[a] then - setmacro("commalistelement",a) - ctx_gobbleoneargument() - return - end - end - setmacro("commalistelement","") - ctx_firstofoneargument() -end - --- local function hascommonargumentcondition(a,b) --- if a == b then --- setmacro("commalistelement",a) --- if a == "" then --- ctx_iffalse() --- else --- ctx_iftrue() --- end --- return --- end --- local ba = find(a,",",1,true) --- local bb = find(b,",",1,true) --- if ba and bb then --- local ha = hash[a] --- local hb = hash[b] --- for k in next, ha do --- if hb[k] then --- setmacro("commalistelement",k) --- ctx_iftrue() --- return --- end --- end --- elseif ba then --- if hash[a][b] then --- setmacro("commalistelement",b) --- ctx_iftrue() --- return --- end --- elseif bb then --- if hash[b][a] then --- setmacro("commalistelement",a) --- ctx_iftrue() --- return --- end --- end --- setmacro("commalistelement","") --- ctx_iffalse() --- end - -local function doifelseinset(a,b) - if a == b then - setmacro("commalistelement",a) - if a == "" then - ctx_secondoftwoarguments() - else - ctx_firstoftwoarguments() - end - return - end - local bb = find(b,",",1,true) - if bb then - if hash[b][a] then - -- if settings_to_set(b)[a] then - setmacro("commalistelement",a) - ctx_firstoftwoarguments() - return - end - end - setmacro("commalistelement","") - ctx_secondoftwoarguments() -end - -local function doifinset(a,b) - if a == b then - setmacro("commalistelement",a) - if a == "" then - ctx_gobbleoneargument() - else - ctx_firstofoneargument() - end - return - end - local bb = find(b,",",1,true) - if bb then - if hash[b][a] then - -- if settings_to_set(b)[a] then - setmacro("commalistelement",a) - ctx_firstofoneargument() - return - end - end - setmacro("commalistelement","") - ctx_gobbleoneargument() -end - -local function doifnotinset(a,b) - if a == b then - setmacro("commalistelement",a) - if a == "" then - ctx_firstofoneargument() - else - ctx_gobbleoneargument() - end - return - end - local bb = find(b,",",1,true) - if bb then - if hash[b][a] then - -- if settings_to_set(b)[a] then - setmacro("commalistelement",a) - ctx_gobbleoneargument() - return - end - end - setmacro("commalistelement","") - ctx_firstofoneargument() -end - -implement { - name = "doifelsecommon", - actions = doifelsecommon, - arguments = "2 strings", -} - -implement { - name = "doifcommon", - actions = doifcommon, - arguments = "2 strings", -} - -implement { - name = "doifnotcommon", - actions = doifnotcommon, - arguments = "2 strings", -} - --- implement { --- name = "hascommonargumentcondition", --- actions = hascommonargumentcondition, --- arguments = "2 strings", --- arguments = { "argument", "argument" }, --- } - -implement { - name = "doifelseinset", - actions = doifelseinset, - arguments = "2 strings", --- arguments = { "argument", "argument" }, -} - -implement { - name = "doifinset", - actions = doifinset, - arguments = "2 strings", -} - -implement { - name = "doifnotinset", - actions = doifnotinset, - arguments = "2 strings", -} - --- done elsewhere: --- --- local function firstinset(a) --- local aa = hash[a] --- context(aa and aa[1] or a) --- end --- --- implement { --- name = "firstinset", --- actions = firstinset, --- arguments = "string", --- private = false, --- } - --- implement { --- name = "stringcompare", --- arguments = "2 strings", --- actions = function(a,b) --- context((a == b and 0) or (a > b and 1) or -1) --- end --- } --- --- implement { --- name = "doifelsestringafter", --- arguments = "2 strings", --- actions = function(a,b) --- ctx_doifelse((a == b and 0) or (a > b and 1) or -1) --- end --- } --- --- implement { --- name = "doifelsestringbefore", --- arguments = "2 strings", --- actions = function(a,b) --- ctx_doifelse((a == b and 0) or (a < b and -1) or 1) --- end --- } - --- implement { -- not faster than addtocommalist --- name = "additemtolist", -- unique --- arguments = "2 strings", --- actions = function(l,s) --- if l == "" or s == l then --- -- s = s --- elseif find("," .. l .. ",","," .. s .. ",") then --- s = l --- else --- s = l .. "," .. s --- end --- context(s) --- end --- } - -local bp = number.dimenfactors.bp - -implement { - name = "tobigpoints", - actions = function(d) context("%.5F",bp * d) end, - arguments = "dimension", -} - -implement { - name = "towholebigpoints", - actions = function(d) context("%r",bp * d) end, - arguments = "dimension", -} - --- for now here: - -local function getshape(s) - local t = texget(s) - local n = t and #t or 0 - context(n) - if n > 0 then - for i=1,n do - local ti = t[i] - if type(ti) == "table" then - context(" %isp %isp",ti[1],ti[2]) - else - context(" %i",ti) - end - end - end -end - -implement { - name = "getparshape", - public = true, - actions = function() getshape("parshape") end, -} -implement { - name = "getclubpenalties", - public = true, - actions = function() getshape("clubpenalties") end, -} -implement { - name = "getinterlinepenalties", - public = true, - actions = function() getshape("interlinepenalties") end, - } -implement { - name = "getdisplaywidowpenalties", - public = true, - actions = function() getshape("displaywidowpenalties") end, -} -implement { - name = "getwidowpenalties", - public = true, - actions = function() getshape("widowpenalties") end, -} |