diff options
Diffstat (limited to 'tex')
23 files changed, 236 insertions, 81 deletions
diff --git a/tex/context/base/char-def.lua b/tex/context/base/char-def.lua index 1261bd45a..9642d1736 100644 --- a/tex/context/base/char-def.lua +++ b/tex/context/base/char-def.lua @@ -452,7 +452,6 @@ characters.data={ adobename="slash", category="po", cjkwd="na", - comment="mathsymbol=0x2044", contextname="textslash", description="SOLIDUS", direction="cs", @@ -460,11 +459,13 @@ characters.data={ mathspec={ { class="middle", - unicode=0x2044, + -- unicode=0x2044, + -- unicode=0x2215, }, { class="ordinary", - unicode=0x2044, + -- unicode=0x2044, + -- unicode=0x2215, }, }, unicodeslot=0x002F, @@ -58822,6 +58823,8 @@ characters.data={ category="mn", description="COMBINING ANNUITY SYMBOL", direction="nsm", + mathclass="topaccent", + mathname="actuarial", linebreak="cm", unicodeslot=0x20E7, }, diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv index b625a0ff3..fe2418d7e 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{2013.10.20 07:09} +\newcontextversion{2013.10.30 13:30} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf Binary files differindex 0909c6799..204b0d1d6 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 5f3866345..eaff168ec 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -25,7 +25,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2013.10.20 07:09} +\edef\contextversion{2013.10.30 13:30} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/font-fea.mkvi b/tex/context/base/font-fea.mkvi index 777c6e3ca..8d985b411 100644 --- a/tex/context/base/font-fea.mkvi +++ b/tex/context/base/font-fea.mkvi @@ -286,7 +286,7 @@ \unexpanded\def\featureattribute#feature% {\ctxcommand{featureattribute("#feature")}} -\unexpanded\def\setfontfeature #feature% +\unexpanded\def\setfontfeature#feature% {\edef\currentfeature{#feature}% \let\m_font_feature_list\currentfeature \ctxcommand{setfontfeature("\currentfeature")}} diff --git a/tex/context/base/font-gds.lua b/tex/context/base/font-gds.lua index 7f8bb91d1..7131ecad5 100644 --- a/tex/context/base/font-gds.lua +++ b/tex/context/base/font-gds.lua @@ -372,7 +372,7 @@ setmetatableindex(cache,function(t,a) setmetatableindex(v,function(t,c) local v = "colorscheme:" .. a .. ":" .. c t[c] = v - return c + return v end) t[a]= v return v diff --git a/tex/context/base/font-mis.lua b/tex/context/base/font-mis.lua index 0796356c4..6b6789481 100644 --- a/tex/context/base/font-mis.lua +++ b/tex/context/base/font-mis.lua @@ -22,7 +22,7 @@ local handlers = fonts.handlers handlers.otf = handlers.otf or { } local otf = handlers.otf -otf.version = otf.version or 2.745 +otf.version = otf.version or 2.747 otf.cache = otf.cache or containers.define("fonts", "otf", otf.version, true) function otf.loadcached(filename,format,sub) diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua index 7598a9c35..6ebcb9cf9 100644 --- a/tex/context/base/font-otf.lua +++ b/tex/context/base/font-otf.lua @@ -48,7 +48,7 @@ local otf = fonts.handlers.otf otf.glists = { "gsub", "gpos" } -otf.version = 2.745 -- beware: also sync font-mis.lua +otf.version = 2.747 -- beware: also sync font-mis.lua otf.cache = containers.define("fonts", "otf", otf.version, true) local fontdata = fonts.hashes.identifiers @@ -1056,20 +1056,21 @@ local g_directions = { gsub_reversecontextchain = -1, gpos_reversecontextchain = -1, } - --- Research by Khaled Hosny has demonstrated that the font loader merges --- regular and AAT features and that these can interfere (especially because --- we dropped checking for valid features elsewhere. So, we just check for --- the special flag and drop the feature if such a tag is found. - -local function supported(features) - for i=1,#features do - if features[i].ismac then - return false - end - end - return true -end +-- The following is no longer needed as AAT is ignored per end October 2013. +-- +-- -- Research by Khaled Hosny has demonstrated that the font loader merges +-- -- regular and AAT features and that these can interfere (especially because +-- -- we dropped checking for valid features elsewhere. So, we just check for +-- -- the special flag and drop the feature if such a tag is found. +-- +-- local function supported(features) +-- for i=1,#features do +-- if features[i].ismac then +-- return false +-- end +-- end +-- return true +-- end actions["reorganize subtables"] = function(data,filename,raw) local resources = data.resources @@ -1084,8 +1085,7 @@ actions["reorganize subtables"] = function(data,filename,raw) for k=1,#dw do local gk = dw[k] local features = gk.features --- if features and supported(features) then - if not features or supported(features) then -- not always features ! + -- if not features or supported(features) then -- not always features ! local typ = gk.type local chain = g_directions[typ] or 0 local subtables = gk.subtables @@ -1152,7 +1152,7 @@ actions["reorganize subtables"] = function(data,filename,raw) markclass = markclass, } end - end + -- end end end end diff --git a/tex/context/base/font-pre.mkiv b/tex/context/base/font-pre.mkiv index 75f42f8f5..7d892ad37 100644 --- a/tex/context/base/font-pre.mkiv +++ b/tex/context/base/font-pre.mkiv @@ -52,6 +52,16 @@ tlig=yes, trep=yes] % texligatures=yes,texquotes=yes +\definefontfeature + [inlinenumbers] + [lnum=yes, + tnum=no] + +\definefontfeature + [tabularnumbers] + [tnum=yes, + lnum=no] + % \definefontfeature % [newstyle] % [onum=no] diff --git a/tex/context/base/font-syn.lua b/tex/context/base/font-syn.lua index 18da4f2e1..8af31f222 100644 --- a/tex/context/base/font-syn.lua +++ b/tex/context/base/font-syn.lua @@ -41,37 +41,39 @@ local trace_names = false trackers.register("fonts.names", fu local trace_warnings = false trackers.register("fonts.warnings", function(v) trace_warnings = v end) local trace_specifications = false trackers.register("fonts.specifications", function(v) trace_specifications = v end) -local report_names = logs.reporter("fonts","names") +local report_names = logs.reporter("fonts","names") --[[ldx-- <p>This module implements a name to filename resolver. Names are resolved using a table that has keys filtered from the font related files.</p> --ldx]]-- -fonts = fonts or { } -- also used elsewhere +fonts = fonts or { } -- also used elsewhere -local names = font.names or allocate { } -fonts.names = names +local names = font.names or allocate { } +fonts.names = names -local filters = names.filters or { } -names.filters = filters +local filters = names.filters or { } +names.filters = filters -local treatments = names.treatments or { } -names.treatments = treatments +local treatments = fonts.treatments or { } +fonts.treatments = treatments -names.data = names.data or allocate { } +names.data = names.data or allocate { } -names.version = 1.123 -names.basename = "names" -names.saved = false -names.loaded = false -names.be_clever = true -names.enabled = true -names.cache = containers.define("fonts","data",names.version,true) +names.version = 1.123 +names.basename = "names" +names.saved = false +names.loaded = false +names.be_clever = true +names.enabled = true +names.cache = containers.define("fonts","data",names.version,true) -local autoreload = true +local usesystemfonts = true +local autoreload = true -directives.register("fonts.autoreload", function(v) autoreload = toboolean(v) end) +directives.register("fonts.autoreload", function(v) autoreload = toboolean(v) end) +directives.register("fonts.usesystemfonts", function(v) usesystemfonts = toboolean(v) end) --[[ldx-- <p>A few helpers.</p> @@ -979,7 +981,9 @@ local function analyzefiles(olddata) walk_tree(names.getpaths(trace),suffix,identify) end traverse("tree",withtree) -- TEXTREE only - if texconfig.kpse_init then + if not usesystemfonts then + report_names("ignoring system fonts") + elseif texconfig.kpse_init then traverse("lsr", withlsr) else traverse("system", withsystem) diff --git a/tex/context/base/m-graph.mkiv b/tex/context/base/m-graph.mkiv index e99921c43..f8114561c 100644 --- a/tex/context/base/m-graph.mkiv +++ b/tex/context/base/m-graph.mkiv @@ -22,6 +22,37 @@ local simplify = true + -- local function strip(n,e) + -- -- get rid of e(0) + -- -- get rid of e(+*) + -- e = gsub(e,"^+","") + -- -- remove leading zeros + -- e = gsub(e,"^([+-]*)0+(%d)","%1%2") + -- if not simplify then + -- -- take it as it is + -- elseif n == "1" then + -- return format("10^{%s}",e) + -- end + -- return format("%s\\times10^{%s}",n,e) + -- end + -- + -- function metapost.format_n(fmt,...) + -- fmt = gsub(fmt,"@","%%") + -- local initial, hasformat, final = match(fmt,"^(.-)(%%.-[%a])(.-)$") + -- if hasformat then + -- str = format(fmt,...) + -- str = gsub(str,"(.-)e(.-)$",strip) + -- str = format("%s\\mathematics{%s}%s",initial,str,final) + -- elseif not find(fmt,"%%") then + -- str = format("%"..fmt,...) + -- str = gsub(str,"(.-)e(.-)$",strip) + -- str = format("\\mathematics{%s}",str) + -- end + -- context(str) + -- end + + -- todo: proper lpeg + local function strip(n,e) -- get rid of e(0) -- get rid of e(+*) @@ -31,28 +62,28 @@ if not simplify then -- take it as it is elseif n == "1" then - return format("10^{%s}",e) + return format("\\mathematics{10^{%s}}",e) end - return format("%s\\times10^{%s}",n,e) + return format("\\mathematics{%s\\times10^{%s}}",n,e) end - function metapost.format_n(fmt,str) + function metapost.format_n(fmt,...) fmt = gsub(fmt,"@","%%") - local initial, hasformat, final = match(fmt,"^(.-)(%%.-[%a])(.-)$") - if hasformat then - str = format(fmt,str) - str = gsub(str,"(.-)e(.-)$",strip) - str = format("%s\\mathematics{%s}%s",initial,str,final) - elseif not find(fmt,"%%") then - str = format("%"..fmt,str) - str = gsub(str,"(.-)e(.-)$",strip) - str = format("\\mathematics{%s}",str) + if find(fmt,"%%") then + str = format(fmt,...) + else -- yes or no + str = format("%"..fmt,...) end + str = gsub(str,"([%-%+]-[%.%d]+)e([%-%+]-[%.%d]+)",strip) context(str) end + + function metapost.format_v(fmt,str) + metapost.format_n(fmt,metapost.untagvariable(str,false)) + end \stopluacode -\unexpanded\def\MPgraphformat#1#2{\ctxlua{metapost.format_n("#1","#2")}} +\unexpanded\def\MPgraphformat#1#2{\ctxlua{metapost.format_v("#1","#2")}} % We could also delegate parsing using lower level plugins. @@ -86,6 +117,8 @@ label(format("@g","1"), (2cm,-2.0cm)) ; label(format("@g","1e-102"),(0, -2.5cm)) ; label(format("@g","1e+102"),(2cm,-2.5cm)) ; + label(format("@f,@f",(1.23,4.56)),(0cm,-3.0cm)) ; + label(format("@i,@f",(1.23,4.56)),(0cm,-3.5cm)) ; \stopMPpage % \startMPpage[instance=graph] diff --git a/tex/context/base/math-fbk.lua b/tex/context/base/math-fbk.lua index b364d1208..fe4cd1929 100644 --- a/tex/context/base/math-fbk.lua +++ b/tex/context/base/math-fbk.lua @@ -503,3 +503,29 @@ virtualcharacters[0xFE935] = function(data) return smashed(data,0x02035,true) en virtualcharacters[0xFE936] = function(data) return smashed(data,0x02036,true) end virtualcharacters[0xFE937] = function(data) return smashed(data,0x02037,true) end +-- actuarian + +virtualcharacters[0x020E7] = function(data) + local characters = data.target.characters + -- if characters[0x020E7] then + -- -- we cannot assume that the character is useable + -- else + local parameters = data.target.parameters + local basechar = characters[0x0078] -- x (0x0058 X) + local linewidth = parameters.xheight / 10 + local basewidth = basechar.width + local baseheight = basechar.height + return { + -- compromise: lm has large hooks e.g. \actuarial{a} + commands = { + { "right", 2 * linewidth }, + { "down", - baseheight - 3 * linewidth }, + { "rule", linewidth, basewidth + 4 * linewidth }, + { "right", -linewidth }, + { "down", baseheight + 4 * linewidth }, + { "rule", baseheight + 5 * linewidth, linewidth }, + }, + width = basewidth + 4 * linewidth, + } + -- end +end diff --git a/tex/context/base/mlib-pdf.lua b/tex/context/base/mlib-pdf.lua index d5f22cd7e..1f37223a7 100644 --- a/tex/context/base/mlib-pdf.lua +++ b/tex/context/base/mlib-pdf.lua @@ -276,13 +276,31 @@ local key = C((1-equal)^1) * equal local newline = S("\n\r")^1 local number = (((1-space-newline)^1) / tonumber) * (space^0) local variable = - lpeg.P("1:") * key * number - + lpeg.P("2:") * key * C((1-newline)^0) - + lpeg.P("3:") * key * (P("false") * Cc(false) + P("true") * Cc(true)) - + lpeg.S("4568") * P(":") * key * Ct(number^1) - + lpeg.P("7:") * key * Ct(Ct(number * number^-5)^1) + P("1:") * key * number + + P("2:") * key * C((1-newline)^0) + + P("3:") * key * (P("false") * Cc(false) + P("true") * Cc(true)) + + S("4568") * P(":") * key * Ct(number^1) + + P("7:") * key * Ct(Ct(number * number^-5)^1) -local pattern = Cf ( Carg(1) * (Cg(variable * newline^0)^0), rawset) +local pattern_key = Cf ( Carg(1) * (Cg(variable * newline^0)^0), rawset) + +local variable = + P("1:") * number + + P("2:") * C((1-newline)^0) + + P("3:") * (P("false") * Cc(false) + P("true") * Cc(true)) + + S("4568") * P(":") * Ct(number^1) + + P("7:") * Ct(Ct(number * number^-5)^1) + +local pattern_tab = Cf ( Carg(1) * (Cg(variable * newline^0)^0), rawset) + +local variable = + P("1:") * number + + P("2:") * C((1-newline)^0) + + P("3:") * (P("false") * Cc(false) + P("true") * Cc(true)) + + S("4568") * P(":") * number^1 + + P("7:") * (number * number^-5)^1 + +local pattern_lst = (variable * newline^0)^0 metapost.variables = { } -- to be stacked metapost.llx = 0 -- to be stacked @@ -290,7 +308,7 @@ metapost.lly = 0 -- to be stacked metapost.urx = 0 -- to be stacked metapost.ury = 0 -- to be stacked -function commands.mprunvar(key,n) +function commands.mprunvar(key,n) -- should be defined in another lib local value = metapost.variables[key] if value ~= nil then local tvalue = type(value) @@ -311,6 +329,14 @@ function commands.mprunvar(key,n) end end +function metapost.untagvariable(str,variables) + if variables == false then + return lpegmatch(pattern_lst,str) + else + return lpegmatch(pattern_tab,str,1,variables or { }) + end +end + function metapost.flush(result,flusher,askedfig) if result then local figures = result.fig @@ -366,7 +392,7 @@ function metapost.flush(result,flusher,askedfig) if objecttype == "start_bounds" or objecttype == "stop_bounds" then -- skip elseif objecttype == "special" then - lpegmatch(pattern,object.prescript,1,variables) + lpegmatch(pattern_key,object.prescript,1,variables) elseif objecttype == "start_clip" then t[#t+1] = "q" flushnormalpath(object.path,t,false) diff --git a/tex/context/base/mult-fun.lua b/tex/context/base/mult-fun.lua index 3867489bf..3167fe7bf 100644 --- a/tex/context/base/mult-fun.lua +++ b/tex/context/base/mult-fun.lua @@ -100,6 +100,6 @@ return { -- "decorated", "redecorated", "undecorated", -- - "passvariable", + "passvariable", "tostring" }, } diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf Binary files differindex e2c3f3255..86c2ca88a 100644 --- a/tex/context/base/status-files.pdf +++ b/tex/context/base/status-files.pdf diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf Binary files differindex 82a45e683..931f19bde 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf diff --git a/tex/context/base/strc-bkm.lua b/tex/context/base/strc-bkm.lua index d9c268ce4..13508e820 100644 --- a/tex/context/base/strc-bkm.lua +++ b/tex/context/base/strc-bkm.lua @@ -85,7 +85,7 @@ end local function stripped(str) -- kind of generic str = gsub(str,"\\([A-Z]+)","%1") -- \LOGO str = gsub(str,"\\ "," ") -- \ - str = gsub(str,"\\([A-Za-z]+) *{(.-)}","%1") -- \bla{...} + str = gsub(str,"\\([A-Za-z]+) *{(.-)}","%2") -- \bla{...} str = gsub(str," +"," ") -- spaces return str end diff --git a/tex/context/base/tabl-ntb.mkiv b/tex/context/base/tabl-ntb.mkiv index 242c3d6fe..2db908f8e 100644 --- a/tex/context/base/tabl-ntb.mkiv +++ b/tex/context/base/tabl-ntb.mkiv @@ -1539,6 +1539,7 @@ {\ifcase\c_tabl_tbl_pass \or \setcharacteralign{#2}{\naturaltablelocalparameter\c!alignmentcharacter}% \fi + \typo_charalign_adapt_font \signalcharacteralign{#2}{#1}} \unexpanded\def\tabl_ntb_cell_process_a#1#2[#3]#4% grouping added ! ! ! diff --git a/tex/context/base/tabl-tbl.mkiv b/tex/context/base/tabl-tbl.mkiv index fa2417712..7a58182aa 100644 --- a/tex/context/base/tabl-tbl.mkiv +++ b/tex/context/base/tabl-tbl.mkiv @@ -625,6 +625,7 @@ \def\tabl_tabulate_hook_g % partly expanded {\ifconditional\c_tabl_auto_align_mode \signalcharacteralign\c_tabl_tabulate_column{\c_tabl_tabulate_noflines+\plusone}% + \typo_charalign_adapt_font \fi} \def\tabl_tabulate_set_align#1% diff --git a/tex/context/base/typo-tal.mkiv b/tex/context/base/typo-tal.mkiv index a34cb8bb6..fb3955aec 100644 --- a/tex/context/base/typo-tal.mkiv +++ b/tex/context/base/typo-tal.mkiv @@ -109,4 +109,27 @@ \def\setfirstpasscharacteralign {\let\checkcharacteralign\gobbleoneargument} \def\setsecondpasscharacteralign{\let\checkcharacteralign\firstofoneargument} +%D We need fonts to provide tabular digits that is, the digits need to have the same +%D width. + +\definefontfeature + [system:tabnum] + [tnum=yes, + lnum=no] + +\newconditional\c_tabl_ntb_char_align_auto_font \settrue\c_tabl_ntb_char_align_auto_font + +\installtexdirective % yes or no ? + {typesetters.characteralign.autofont} + {\settrue \c_tabl_ntb_char_align_auto_font} + {\setfalse\c_tabl_ntb_char_align_auto_font} + +\def\m_font_feature_auto_tabnum{system:tabnum} + +\def\typo_charalign_adapt_font % slow but seldom used + {\ifconditional\c_tabl_ntb_char_align_auto_font + \let\m_font_feature_asked\m_font_feature_auto_tabnum + \font_feature_reset_add_indeed + \fi} + \protect \endinput diff --git a/tex/context/fonts/hanbatanglvt.lfg b/tex/context/fonts/hanbatanglvt.lfg new file mode 100644 index 000000000..0e3eaf5ed --- /dev/null +++ b/tex/context/fonts/hanbatanglvt.lfg @@ -0,0 +1,30 @@ +-- Maybe some day I will do this more efficient but for the moment it's okay. (We need +-- access to the names table then.) + +local f_uni_base = string.formatters["uni%04X"] +local f_uni_plus = string.formatters["uni%04X.y%s"] + +local function range(first,last) + local t = { } + for i=first,last do + t[#t+1] = f_uni_base(i) + for j=0,19 do + t[#t+1] = f_uni_plus(i,j) + end + end + return t +end + +return { + name = "hanbatanglvt", + version = "1.00", + comment = "Goodies that complement the hanbatanglvt fonts.", + author = "Hans Hagen", + colorschemes = { + default = { + range(0x01100,0x0115F), -- jamo_initial + range(0x01160,0x011A7), -- jamo_medial + range(0x011A8,0x011FF), -- jamo_final + } + } +} diff --git a/tex/context/fonts/treatments.lfg b/tex/context/fonts/treatments.lfg index b973906c3..44d24da22 100644 --- a/tex/context/fonts/treatments.lfg +++ b/tex/context/fonts/treatments.lfg @@ -64,6 +64,10 @@ return { comment = "a text file with suffix ttf", -- used in test file ignored = true, }, + ["lingoes.ttf"] = { + comment = "bugged file", + ignored = true, + }, -- harmless example -- ["copperplatethirtythreebc.ttf"] = { -- comment = "hangs and has no hyphen", diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 17c5b6b22..05ddf222d 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 : 10/20/13 07:09:03 +-- merge date : 10/30/13 13:30:14 do -- begin closure to overcome local limits and interference @@ -6334,7 +6334,7 @@ local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf otf.glists={ "gsub","gpos" } -otf.version=2.745 +otf.version=2.747 otf.cache=containers.define("fonts","otf",otf.version,true) local fontdata=fonts.hashes.identifiers local chardata=characters and characters.data @@ -7204,14 +7204,6 @@ local g_directions={ gsub_reversecontextchain=-1, gpos_reversecontextchain=-1, } -local function supported(features) - for i=1,#features do - if features[i].ismac then - return false - end - end - return true -end actions["reorganize subtables"]=function(data,filename,raw) local resources=data.resources local sequences={} @@ -7225,7 +7217,6 @@ actions["reorganize subtables"]=function(data,filename,raw) for k=1,#dw do local gk=dw[k] local features=gk.features - if not features or supported(features) then local typ=gk.type local chain=g_directions[typ] or 0 local subtables=gk.subtables @@ -7288,7 +7279,6 @@ actions["reorganize subtables"]=function(data,filename,raw) markclass=markclass, } end - end end end end @@ -10901,6 +10891,10 @@ local function show_skip(kind,chainname,char,ck,class) logwarning("%s: skipping char %s, class %a, rule %a, lookuptype %a",cref(kind,chainname),gref(char),class,ck[1],ck[2]) end end +local quit_on_no_replacement=true +directives.register("otf.chain.quitonnoreplacement",function(value) + quit_on_no_replacement=value +end) local function normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash) local flags=sequence.flags local done=false @@ -11171,7 +11165,7 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq if replacements then head,start,done=chainprocs.reversesub(head,start,last,kind,chainname,ck,lookuphash,replacements) else - done=true + done=quit_on_no_replacement if trace_contexts then logprocess("%s: skipping match",cref(kind,chainname)) end |