From 82aed3e7e8af29f359ebef4f93684d20e98107e6 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 25 May 2017 13:21:58 +0200 Subject: 2017-05-25 12:56:00 --- scripts/context/lua/mtx-base.lua | 4 +- scripts/context/lua/mtx-context.lua | 8 +- scripts/context/lua/mtx-plain.lua | 6 +- scripts/context/lua/mtxrun.lua | 518 ++++++++++++++++++++------------- scripts/context/stubs/mswin/mtxrun.lua | 518 ++++++++++++++++++++------------- scripts/context/stubs/unix/mtxrun | 518 ++++++++++++++++++++------------- scripts/context/stubs/win64/mtxrun.lua | 518 ++++++++++++++++++++------------- 7 files changed, 1279 insertions(+), 811 deletions(-) (limited to 'scripts') diff --git a/scripts/context/lua/mtx-base.lua b/scripts/context/lua/mtx-base.lua index bd6749717..bcc9aeb60 100644 --- a/scripts/context/lua/mtx-base.lua +++ b/scripts/context/lua/mtx-base.lua @@ -51,8 +51,6 @@ local report = application.report -- private option --noluc for testing errors in the stub -local instance = resolvers.instance - local pattern = environment.arguments["pattern"] or nil local fileformat = environment.arguments["format"] or "" -- nil ? local allresults = environment.arguments["all"] or false @@ -108,7 +106,7 @@ elseif pattern then -- brrr resolvers.load() resolvers.dowithfilesandreport(resolvers.findfiles, { pattern }, fileformat, allresults) elseif environment.arguments["generate"] then - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() elseif environment.arguments["make"] or environment.arguments["ini"] or environment.arguments["compile"] then diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua index 6863cffb2..37101665a 100644 --- a/scripts/context/lua/mtx-context.lua +++ b/scripts/context/lua/mtx-context.lua @@ -905,9 +905,11 @@ function scripts.context.run(ctxdata,filename) -- end -- - if a_synctex == "context" then - renamefile(fileaddsuffix(jobname,"syncctx"),fileaddsuffix(jobname,"synctex")) + local syncctx = fileaddsuffix(jobname,"syncctx") + if a_synctex == "context" or validfile(syncctx) then + renamefile(syncctx,fileaddsuffix(jobname,"synctex")) end + -- if a_arrange then -- c_flags.final = true @@ -1173,7 +1175,7 @@ do -- more or less copied from mtx-plain.lua: end function scripts.context.generate() - resolvers.instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() end diff --git a/scripts/context/lua/mtx-plain.lua b/scripts/context/lua/mtx-plain.lua index 347f63f1d..43ced20ef 100644 --- a/scripts/context/lua/mtx-plain.lua +++ b/scripts/context/lua/mtx-plain.lua @@ -55,7 +55,11 @@ local passed_options = table.tohash { local function execute(...) local command = format(...) report("running command %a\n",command) - return os.execute(command) + statistics.starttiming() + local status = os.execute(command) + statistics.stoptiming() + report("runtime %s seconds",statistics.elapsedtime()) + return status end local function resultof(...) diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 873770cac..5e0aff589 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -8408,7 +8408,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 12454, stripped down to: 8840 +-- original size: 12898, stripped down to: 9156 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -8600,13 +8600,30 @@ function setters.show(t) local name=list[k] local functions=t.data[name] if functions then - local value,default,modules=functions.value,functions.default,#functions - value=value==nil and "unset" or tostring(value) - default=default==nil and "unset" or tostring(default) - t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) + local value=functions.value + local default=functions.default + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + t.report() end end - t.report() end local enable,disable,register,list,show=setters.enable,setters.disable,setters.register,setters.list,setters.show function setters.report(setter,...) @@ -11423,7 +11440,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 57003, stripped down to: 35696 +-- original size: 59348, stripped down to: 37757 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -11469,8 +11486,17 @@ local entities,parameters local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined local dcache,hcache,acache local mt,dt,nt +local currentfilename,currentline,linenumbers +local grammar_parsed_text_one +local grammar_parsed_text_two +local grammar_unparsed_text +local handle_hex_entity +local handle_dec_entity +local handle_any_entity_dtd +local handle_any_entity_text local function preparexmlstate(settings) if settings then + linenumbers=settings.linenumbers stack={} level=0 top={} @@ -11487,6 +11513,8 @@ local function preparexmlstate(settings) unify_predefined=settings.unify_predefined_entities cleanup=settings.text_cleanup entities=settings.entities or {} + currentfilename=settings.currentresource + currentline=1 parameters={} reported_at_errors={} dcache={} @@ -11501,6 +11529,7 @@ local function preparexmlstate(settings) resolve_predefined=true end else + linenumbers=false stack=nil level=nil top=nil @@ -11522,6 +11551,8 @@ local function preparexmlstate(settings) dcache=nil hcache=nil acache=nil + currentfilename=nil + currentline=1 end end local function initialize_mt(root) @@ -11559,14 +11590,24 @@ local function add_empty(spacing,namespace,tag) top=stack[level] dt=top.dt nt=#dt+1 - local t={ + local t=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, ni=nt, - __p__=top + cf=currentfilename, + cl=currentline, + __p__=top, + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt={}, + ni=nt, + __p__=top, } dt[nt]=t setmetatable(t,mt) @@ -11581,18 +11622,28 @@ local function add_begin(spacing,namespace,tag) dt[nt]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace - top={ + dt={} + top=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, - dt={}, + dt=dt, ni=nil, - __p__=stack[level] + cf=currentfilename, + cl=currentline, + __p__=stack[level], + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt=dt, + ni=nil, + __p__=stack[level], } setmetatable(top,mt) - dt=top.dt - nt=#dt + nt=0 level=level+1 stack[level]=top at={} @@ -11660,7 +11711,15 @@ local function add_special(what,spacing,text) if strip and (what=="@cm@" or what=="@dt@") then else nt=nt+1 - dt[nt]={ + dt[nt]=linenumbers and { + special=true, + ns="", + tg=what, + ni=nil, + dt={ text }, + cf=currentfilename, + cl=currentline, + } or { special=true, ns="", tg=what, @@ -11688,12 +11747,6 @@ local function attribute_specification_error(str) end return str end -local grammar_parsed_text_one -local grammar_parsed_text_two -local handle_hex_entity -local handle_dec_entity -local handle_any_entity_dtd -local handle_any_entity_text do local badentity="&" xml.placeholders={ @@ -12095,7 +12148,13 @@ local function handle_crap_error(chr) add_text(chr) return chr end +local function handlenewline() + currentline=currentline+1 +end +local spacetab=S(' \t') local space=S(' \r\n\t') +local newline=lpegpatterns.newline/handlenewline +local anything=P(1) local open=P('<') local close=P('>') local squote=S("'") @@ -12111,43 +12170,9 @@ local name_nop=C(P(true))*C(valid^1) local name=name_yes+name_nop local utfbom=lpegpatterns.utfbom local spacing=C(space^0) -local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0 -local hexentitycontent=R("AF","af","09")^1 -local decentitycontent=R("09")^1 -local parsedentity=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_dtd) -local parsedentity_text=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_text) -local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local text_unparsed=C((1-open)^1) -local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1 -local somespace=space^1 -local optionalspace=space^0 -local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote) -local endofattributes=slash*close+close -local whatever=space*name*optionalspace*equal -local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error -local attributevalue=value+wrongvalue -local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute -local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0 -local parsedtext=text_parsed -local unparsedtext=text_unparsed/add_text -local balanced=P { "["*((1-S"[]")+V(1))^0*"]" } -local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty -local beginelement=(spacing*open*name*attributes*optionalspace*close)/add_begin -local endelement=(spacing*open*slash*name*optionalspace*close)/add_end -local begincomment=open*P("!--") -local endcomment=P("--")*close -local begininstruction=open*P("?") -local endinstruction=P("?")*close -local begincdata=open*P("![CDATA[") -local endcdata=P("]]")*close -local someinstruction=C((1-endinstruction)^0) -local somecomment=C((1-endcomment )^0) -local somecdata=C((1-endcdata )^0) +local space_nl=spacetab+newline +local spacing_nl=Cs((space_nl)^0) +local anything_nl=newline+P(1) local function weirdentity(k,v) if trace_entities then report_xml("registering %s entity %a as %a","weird",k,v) @@ -12172,59 +12197,114 @@ local function publicentity(k,v,n) end entities[k]=v end -local begindoctype=open*P("!DOCTYPE") -local enddoctype=close -local beginset=P("[") -local endset=P("]") -local wrdtypename=C((1-somespace-P(";"))^1) -local doctypename=C((1-somespace-close)^0) -local elementdoctype=optionalspace*P("0 then - statistics.starttiming(resolvers.instance) + resolvers.starttiming() for k=1,#mountpaths do local root=mountpaths[k] local f=io.open(root.."/url.tmi") @@ -18842,7 +18983,7 @@ function resolvers.automount(usecache) f:close() end end - statistics.stoptiming(resolvers.instance) + resolvers.stoptiming() end end statistics.register("used config file",function() return caches.configfiles() end) @@ -18897,7 +19038,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-zip"] = package.loaded["data-zip"] or true --- original size: 8772, stripped down to: 6841 +-- original size: 8716, stripped down to: 6795 if not modules then modules={} end modules ['data-zip']={ version=1.001, @@ -19070,17 +19211,16 @@ function resolvers.usezipfile(archive) if archive and not registeredfiles[archive] then local z=zip.openarchive(archive) if z then - local instance=resolvers.instance local tree=url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end - statistics.starttiming(instance) + resolvers.starttiming() resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) registeredfiles[archive]=z - instance.files[archive]=resolvers.registerzipfile(z,tree) - statistics.stoptiming(instance) + resolvers.registerfilehash(archive,resolvers.registerzipfile(z,tree)) + resolvers.stoptiming() elseif trace_locating then report_zip("registering: unknown archive %a",archive) end @@ -19747,7 +19887,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-lst"] = package.loaded["data-lst"] or true --- original size: 2734, stripped down to: 2354 +-- original size: 1823, stripped down to: 1591 if not modules then modules={} end modules ['data-lst']={ version=1.001, @@ -19756,14 +19896,14 @@ if not modules then modules={} end modules ['data-lst']={ copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } -local rawget,type,next=rawget,type,next -local find,concat,upper=string.find,table.concat,string.upper -local fastcopy,sortedpairs=table.fastcopy,table.sortedpairs +local type=type +local concat,sortedhash=table.concat,table.sortedhash local resolvers=resolvers local listers=resolvers.listers or {} resolvers.listers=listers local resolveprefix=resolvers.resolve local report_lists=logs.reporter("resolvers","lists") +local report_resolved=logs.reporter("system","resolved") local function tabstr(str) if type(str)=='table' then return concat(str," | ") @@ -19772,39 +19912,17 @@ local function tabstr(str) end end function listers.variables(pattern) - local instance=resolvers.instance - local environment=instance.environment - local variables=instance.variables - local expansions=instance.expansions - local pattern=upper(pattern or "") - local configured={} - local order=instance.order - for i=1,#order do - for k,v in next,order[i] do - if v~=nil and configured[k]==nil then - configured[k]=v - end - end - end - local env=fastcopy(environment) - local var=fastcopy(variables) - local exp=fastcopy(expansions) - for key,value in sortedpairs(configured) do - if key~="" and (pattern=="" or find(upper(key),pattern)) then - report_lists(key) - report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") - report_lists(" var: %s",tabstr(configured[key]) or "unset") - report_lists(" exp: %s",tabstr(expansions[key]) or "unset") - report_lists(" res: %s",tabstr(resolveprefix(expansions[key])) or "unset") - end - end - instance.environment=fastcopy(env) - instance.variables=fastcopy(var) - instance.expansions=fastcopy(exp) + local result=resolvers.knownvariables(pattern) + for key,value in sortedhash(result) do + report_lists(key) + report_lists(" env: %s",tabstr(value.environment or "unset")) + report_lists(" var: %s",tabstr(value.variable or "unset")) + report_lists(" exp: %s",tabstr(value.expansion or "unset")) + report_lists(" res: %s",tabstr(value.resolved or "unset")) + end end -local report_resolved=logs.reporter("system","resolved") function listers.configurations() - local configurations=resolvers.instance.specification + local configurations=resolvers.configurationfiles() for i=1,#configurations do report_resolved("file : %s",resolveprefix(configurations[i])) end @@ -20418,8 +20536,8 @@ end -- of closure -- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 842443 --- stripped bytes : 306317 +-- original bytes : 845187 +-- stripped bytes : 306192 -- end library merge @@ -20643,7 +20761,7 @@ if not environment.experiments then environment.experiments = e_experiments end -- -local instance = resolvers.reset() +resolvers.reset() local helpinfo = [[ @@ -21199,7 +21317,7 @@ function runners.execute_ctx_script(filename,...) end -- retry after generate but only if --autogenerate if fullname == "" and environment.argument("autogenerate") then -- might become the default - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() -- @@ -21378,8 +21496,6 @@ local before, after = environment.splitarguments(filename) environment.arguments_before, environment.arguments_after = before, after environment.initializearguments(before) -instance.lsrmode = environment.argument("lsr") or false - e_verbose = environment.arguments["verbose"] -- delayed till here (we need the ones before script) if e_verbose then @@ -21466,7 +21582,7 @@ else function runners.loadbase(...) if not resolvers.load(...) then report("forcing cache reload") - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") if not resolvers.load(...) then report("the resolver databases are not present or outdated") @@ -21673,7 +21789,7 @@ elseif e_argument("find-path") then -- luatools: runners.execute_ctx_script("mtx-base","--find-path",filename) resolvers.load() - local path = resolvers.findpath(filename, instance.my_format) + local path = resolvers.findpath(filename) if e_verbose then report(path) else @@ -21754,7 +21870,7 @@ elseif e_argument("generate") then trackers.enable("resolvers.locating") resolvers.renew(filename) else - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() end diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 873770cac..5e0aff589 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -8408,7 +8408,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 12454, stripped down to: 8840 +-- original size: 12898, stripped down to: 9156 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -8600,13 +8600,30 @@ function setters.show(t) local name=list[k] local functions=t.data[name] if functions then - local value,default,modules=functions.value,functions.default,#functions - value=value==nil and "unset" or tostring(value) - default=default==nil and "unset" or tostring(default) - t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) + local value=functions.value + local default=functions.default + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + t.report() end end - t.report() end local enable,disable,register,list,show=setters.enable,setters.disable,setters.register,setters.list,setters.show function setters.report(setter,...) @@ -11423,7 +11440,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 57003, stripped down to: 35696 +-- original size: 59348, stripped down to: 37757 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -11469,8 +11486,17 @@ local entities,parameters local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined local dcache,hcache,acache local mt,dt,nt +local currentfilename,currentline,linenumbers +local grammar_parsed_text_one +local grammar_parsed_text_two +local grammar_unparsed_text +local handle_hex_entity +local handle_dec_entity +local handle_any_entity_dtd +local handle_any_entity_text local function preparexmlstate(settings) if settings then + linenumbers=settings.linenumbers stack={} level=0 top={} @@ -11487,6 +11513,8 @@ local function preparexmlstate(settings) unify_predefined=settings.unify_predefined_entities cleanup=settings.text_cleanup entities=settings.entities or {} + currentfilename=settings.currentresource + currentline=1 parameters={} reported_at_errors={} dcache={} @@ -11501,6 +11529,7 @@ local function preparexmlstate(settings) resolve_predefined=true end else + linenumbers=false stack=nil level=nil top=nil @@ -11522,6 +11551,8 @@ local function preparexmlstate(settings) dcache=nil hcache=nil acache=nil + currentfilename=nil + currentline=1 end end local function initialize_mt(root) @@ -11559,14 +11590,24 @@ local function add_empty(spacing,namespace,tag) top=stack[level] dt=top.dt nt=#dt+1 - local t={ + local t=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, ni=nt, - __p__=top + cf=currentfilename, + cl=currentline, + __p__=top, + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt={}, + ni=nt, + __p__=top, } dt[nt]=t setmetatable(t,mt) @@ -11581,18 +11622,28 @@ local function add_begin(spacing,namespace,tag) dt[nt]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace - top={ + dt={} + top=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, - dt={}, + dt=dt, ni=nil, - __p__=stack[level] + cf=currentfilename, + cl=currentline, + __p__=stack[level], + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt=dt, + ni=nil, + __p__=stack[level], } setmetatable(top,mt) - dt=top.dt - nt=#dt + nt=0 level=level+1 stack[level]=top at={} @@ -11660,7 +11711,15 @@ local function add_special(what,spacing,text) if strip and (what=="@cm@" or what=="@dt@") then else nt=nt+1 - dt[nt]={ + dt[nt]=linenumbers and { + special=true, + ns="", + tg=what, + ni=nil, + dt={ text }, + cf=currentfilename, + cl=currentline, + } or { special=true, ns="", tg=what, @@ -11688,12 +11747,6 @@ local function attribute_specification_error(str) end return str end -local grammar_parsed_text_one -local grammar_parsed_text_two -local handle_hex_entity -local handle_dec_entity -local handle_any_entity_dtd -local handle_any_entity_text do local badentity="&" xml.placeholders={ @@ -12095,7 +12148,13 @@ local function handle_crap_error(chr) add_text(chr) return chr end +local function handlenewline() + currentline=currentline+1 +end +local spacetab=S(' \t') local space=S(' \r\n\t') +local newline=lpegpatterns.newline/handlenewline +local anything=P(1) local open=P('<') local close=P('>') local squote=S("'") @@ -12111,43 +12170,9 @@ local name_nop=C(P(true))*C(valid^1) local name=name_yes+name_nop local utfbom=lpegpatterns.utfbom local spacing=C(space^0) -local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0 -local hexentitycontent=R("AF","af","09")^1 -local decentitycontent=R("09")^1 -local parsedentity=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_dtd) -local parsedentity_text=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_text) -local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local text_unparsed=C((1-open)^1) -local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1 -local somespace=space^1 -local optionalspace=space^0 -local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote) -local endofattributes=slash*close+close -local whatever=space*name*optionalspace*equal -local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error -local attributevalue=value+wrongvalue -local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute -local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0 -local parsedtext=text_parsed -local unparsedtext=text_unparsed/add_text -local balanced=P { "["*((1-S"[]")+V(1))^0*"]" } -local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty -local beginelement=(spacing*open*name*attributes*optionalspace*close)/add_begin -local endelement=(spacing*open*slash*name*optionalspace*close)/add_end -local begincomment=open*P("!--") -local endcomment=P("--")*close -local begininstruction=open*P("?") -local endinstruction=P("?")*close -local begincdata=open*P("![CDATA[") -local endcdata=P("]]")*close -local someinstruction=C((1-endinstruction)^0) -local somecomment=C((1-endcomment )^0) -local somecdata=C((1-endcdata )^0) +local space_nl=spacetab+newline +local spacing_nl=Cs((space_nl)^0) +local anything_nl=newline+P(1) local function weirdentity(k,v) if trace_entities then report_xml("registering %s entity %a as %a","weird",k,v) @@ -12172,59 +12197,114 @@ local function publicentity(k,v,n) end entities[k]=v end -local begindoctype=open*P("!DOCTYPE") -local enddoctype=close -local beginset=P("[") -local endset=P("]") -local wrdtypename=C((1-somespace-P(";"))^1) -local doctypename=C((1-somespace-close)^0) -local elementdoctype=optionalspace*P("0 then - statistics.starttiming(resolvers.instance) + resolvers.starttiming() for k=1,#mountpaths do local root=mountpaths[k] local f=io.open(root.."/url.tmi") @@ -18842,7 +18983,7 @@ function resolvers.automount(usecache) f:close() end end - statistics.stoptiming(resolvers.instance) + resolvers.stoptiming() end end statistics.register("used config file",function() return caches.configfiles() end) @@ -18897,7 +19038,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-zip"] = package.loaded["data-zip"] or true --- original size: 8772, stripped down to: 6841 +-- original size: 8716, stripped down to: 6795 if not modules then modules={} end modules ['data-zip']={ version=1.001, @@ -19070,17 +19211,16 @@ function resolvers.usezipfile(archive) if archive and not registeredfiles[archive] then local z=zip.openarchive(archive) if z then - local instance=resolvers.instance local tree=url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end - statistics.starttiming(instance) + resolvers.starttiming() resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) registeredfiles[archive]=z - instance.files[archive]=resolvers.registerzipfile(z,tree) - statistics.stoptiming(instance) + resolvers.registerfilehash(archive,resolvers.registerzipfile(z,tree)) + resolvers.stoptiming() elseif trace_locating then report_zip("registering: unknown archive %a",archive) end @@ -19747,7 +19887,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-lst"] = package.loaded["data-lst"] or true --- original size: 2734, stripped down to: 2354 +-- original size: 1823, stripped down to: 1591 if not modules then modules={} end modules ['data-lst']={ version=1.001, @@ -19756,14 +19896,14 @@ if not modules then modules={} end modules ['data-lst']={ copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } -local rawget,type,next=rawget,type,next -local find,concat,upper=string.find,table.concat,string.upper -local fastcopy,sortedpairs=table.fastcopy,table.sortedpairs +local type=type +local concat,sortedhash=table.concat,table.sortedhash local resolvers=resolvers local listers=resolvers.listers or {} resolvers.listers=listers local resolveprefix=resolvers.resolve local report_lists=logs.reporter("resolvers","lists") +local report_resolved=logs.reporter("system","resolved") local function tabstr(str) if type(str)=='table' then return concat(str," | ") @@ -19772,39 +19912,17 @@ local function tabstr(str) end end function listers.variables(pattern) - local instance=resolvers.instance - local environment=instance.environment - local variables=instance.variables - local expansions=instance.expansions - local pattern=upper(pattern or "") - local configured={} - local order=instance.order - for i=1,#order do - for k,v in next,order[i] do - if v~=nil and configured[k]==nil then - configured[k]=v - end - end - end - local env=fastcopy(environment) - local var=fastcopy(variables) - local exp=fastcopy(expansions) - for key,value in sortedpairs(configured) do - if key~="" and (pattern=="" or find(upper(key),pattern)) then - report_lists(key) - report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") - report_lists(" var: %s",tabstr(configured[key]) or "unset") - report_lists(" exp: %s",tabstr(expansions[key]) or "unset") - report_lists(" res: %s",tabstr(resolveprefix(expansions[key])) or "unset") - end - end - instance.environment=fastcopy(env) - instance.variables=fastcopy(var) - instance.expansions=fastcopy(exp) + local result=resolvers.knownvariables(pattern) + for key,value in sortedhash(result) do + report_lists(key) + report_lists(" env: %s",tabstr(value.environment or "unset")) + report_lists(" var: %s",tabstr(value.variable or "unset")) + report_lists(" exp: %s",tabstr(value.expansion or "unset")) + report_lists(" res: %s",tabstr(value.resolved or "unset")) + end end -local report_resolved=logs.reporter("system","resolved") function listers.configurations() - local configurations=resolvers.instance.specification + local configurations=resolvers.configurationfiles() for i=1,#configurations do report_resolved("file : %s",resolveprefix(configurations[i])) end @@ -20418,8 +20536,8 @@ end -- of closure -- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 842443 --- stripped bytes : 306317 +-- original bytes : 845187 +-- stripped bytes : 306192 -- end library merge @@ -20643,7 +20761,7 @@ if not environment.experiments then environment.experiments = e_experiments end -- -local instance = resolvers.reset() +resolvers.reset() local helpinfo = [[ @@ -21199,7 +21317,7 @@ function runners.execute_ctx_script(filename,...) end -- retry after generate but only if --autogenerate if fullname == "" and environment.argument("autogenerate") then -- might become the default - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() -- @@ -21378,8 +21496,6 @@ local before, after = environment.splitarguments(filename) environment.arguments_before, environment.arguments_after = before, after environment.initializearguments(before) -instance.lsrmode = environment.argument("lsr") or false - e_verbose = environment.arguments["verbose"] -- delayed till here (we need the ones before script) if e_verbose then @@ -21466,7 +21582,7 @@ else function runners.loadbase(...) if not resolvers.load(...) then report("forcing cache reload") - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") if not resolvers.load(...) then report("the resolver databases are not present or outdated") @@ -21673,7 +21789,7 @@ elseif e_argument("find-path") then -- luatools: runners.execute_ctx_script("mtx-base","--find-path",filename) resolvers.load() - local path = resolvers.findpath(filename, instance.my_format) + local path = resolvers.findpath(filename) if e_verbose then report(path) else @@ -21754,7 +21870,7 @@ elseif e_argument("generate") then trackers.enable("resolvers.locating") resolvers.renew(filename) else - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() end diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 873770cac..5e0aff589 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -8408,7 +8408,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 12454, stripped down to: 8840 +-- original size: 12898, stripped down to: 9156 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -8600,13 +8600,30 @@ function setters.show(t) local name=list[k] local functions=t.data[name] if functions then - local value,default,modules=functions.value,functions.default,#functions - value=value==nil and "unset" or tostring(value) - default=default==nil and "unset" or tostring(default) - t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) + local value=functions.value + local default=functions.default + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + t.report() end end - t.report() end local enable,disable,register,list,show=setters.enable,setters.disable,setters.register,setters.list,setters.show function setters.report(setter,...) @@ -11423,7 +11440,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 57003, stripped down to: 35696 +-- original size: 59348, stripped down to: 37757 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -11469,8 +11486,17 @@ local entities,parameters local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined local dcache,hcache,acache local mt,dt,nt +local currentfilename,currentline,linenumbers +local grammar_parsed_text_one +local grammar_parsed_text_two +local grammar_unparsed_text +local handle_hex_entity +local handle_dec_entity +local handle_any_entity_dtd +local handle_any_entity_text local function preparexmlstate(settings) if settings then + linenumbers=settings.linenumbers stack={} level=0 top={} @@ -11487,6 +11513,8 @@ local function preparexmlstate(settings) unify_predefined=settings.unify_predefined_entities cleanup=settings.text_cleanup entities=settings.entities or {} + currentfilename=settings.currentresource + currentline=1 parameters={} reported_at_errors={} dcache={} @@ -11501,6 +11529,7 @@ local function preparexmlstate(settings) resolve_predefined=true end else + linenumbers=false stack=nil level=nil top=nil @@ -11522,6 +11551,8 @@ local function preparexmlstate(settings) dcache=nil hcache=nil acache=nil + currentfilename=nil + currentline=1 end end local function initialize_mt(root) @@ -11559,14 +11590,24 @@ local function add_empty(spacing,namespace,tag) top=stack[level] dt=top.dt nt=#dt+1 - local t={ + local t=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, ni=nt, - __p__=top + cf=currentfilename, + cl=currentline, + __p__=top, + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt={}, + ni=nt, + __p__=top, } dt[nt]=t setmetatable(t,mt) @@ -11581,18 +11622,28 @@ local function add_begin(spacing,namespace,tag) dt[nt]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace - top={ + dt={} + top=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, - dt={}, + dt=dt, ni=nil, - __p__=stack[level] + cf=currentfilename, + cl=currentline, + __p__=stack[level], + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt=dt, + ni=nil, + __p__=stack[level], } setmetatable(top,mt) - dt=top.dt - nt=#dt + nt=0 level=level+1 stack[level]=top at={} @@ -11660,7 +11711,15 @@ local function add_special(what,spacing,text) if strip and (what=="@cm@" or what=="@dt@") then else nt=nt+1 - dt[nt]={ + dt[nt]=linenumbers and { + special=true, + ns="", + tg=what, + ni=nil, + dt={ text }, + cf=currentfilename, + cl=currentline, + } or { special=true, ns="", tg=what, @@ -11688,12 +11747,6 @@ local function attribute_specification_error(str) end return str end -local grammar_parsed_text_one -local grammar_parsed_text_two -local handle_hex_entity -local handle_dec_entity -local handle_any_entity_dtd -local handle_any_entity_text do local badentity="&" xml.placeholders={ @@ -12095,7 +12148,13 @@ local function handle_crap_error(chr) add_text(chr) return chr end +local function handlenewline() + currentline=currentline+1 +end +local spacetab=S(' \t') local space=S(' \r\n\t') +local newline=lpegpatterns.newline/handlenewline +local anything=P(1) local open=P('<') local close=P('>') local squote=S("'") @@ -12111,43 +12170,9 @@ local name_nop=C(P(true))*C(valid^1) local name=name_yes+name_nop local utfbom=lpegpatterns.utfbom local spacing=C(space^0) -local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0 -local hexentitycontent=R("AF","af","09")^1 -local decentitycontent=R("09")^1 -local parsedentity=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_dtd) -local parsedentity_text=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_text) -local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local text_unparsed=C((1-open)^1) -local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1 -local somespace=space^1 -local optionalspace=space^0 -local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote) -local endofattributes=slash*close+close -local whatever=space*name*optionalspace*equal -local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error -local attributevalue=value+wrongvalue -local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute -local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0 -local parsedtext=text_parsed -local unparsedtext=text_unparsed/add_text -local balanced=P { "["*((1-S"[]")+V(1))^0*"]" } -local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty -local beginelement=(spacing*open*name*attributes*optionalspace*close)/add_begin -local endelement=(spacing*open*slash*name*optionalspace*close)/add_end -local begincomment=open*P("!--") -local endcomment=P("--")*close -local begininstruction=open*P("?") -local endinstruction=P("?")*close -local begincdata=open*P("![CDATA[") -local endcdata=P("]]")*close -local someinstruction=C((1-endinstruction)^0) -local somecomment=C((1-endcomment )^0) -local somecdata=C((1-endcdata )^0) +local space_nl=spacetab+newline +local spacing_nl=Cs((space_nl)^0) +local anything_nl=newline+P(1) local function weirdentity(k,v) if trace_entities then report_xml("registering %s entity %a as %a","weird",k,v) @@ -12172,59 +12197,114 @@ local function publicentity(k,v,n) end entities[k]=v end -local begindoctype=open*P("!DOCTYPE") -local enddoctype=close -local beginset=P("[") -local endset=P("]") -local wrdtypename=C((1-somespace-P(";"))^1) -local doctypename=C((1-somespace-close)^0) -local elementdoctype=optionalspace*P("0 then - statistics.starttiming(resolvers.instance) + resolvers.starttiming() for k=1,#mountpaths do local root=mountpaths[k] local f=io.open(root.."/url.tmi") @@ -18842,7 +18983,7 @@ function resolvers.automount(usecache) f:close() end end - statistics.stoptiming(resolvers.instance) + resolvers.stoptiming() end end statistics.register("used config file",function() return caches.configfiles() end) @@ -18897,7 +19038,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-zip"] = package.loaded["data-zip"] or true --- original size: 8772, stripped down to: 6841 +-- original size: 8716, stripped down to: 6795 if not modules then modules={} end modules ['data-zip']={ version=1.001, @@ -19070,17 +19211,16 @@ function resolvers.usezipfile(archive) if archive and not registeredfiles[archive] then local z=zip.openarchive(archive) if z then - local instance=resolvers.instance local tree=url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end - statistics.starttiming(instance) + resolvers.starttiming() resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) registeredfiles[archive]=z - instance.files[archive]=resolvers.registerzipfile(z,tree) - statistics.stoptiming(instance) + resolvers.registerfilehash(archive,resolvers.registerzipfile(z,tree)) + resolvers.stoptiming() elseif trace_locating then report_zip("registering: unknown archive %a",archive) end @@ -19747,7 +19887,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-lst"] = package.loaded["data-lst"] or true --- original size: 2734, stripped down to: 2354 +-- original size: 1823, stripped down to: 1591 if not modules then modules={} end modules ['data-lst']={ version=1.001, @@ -19756,14 +19896,14 @@ if not modules then modules={} end modules ['data-lst']={ copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } -local rawget,type,next=rawget,type,next -local find,concat,upper=string.find,table.concat,string.upper -local fastcopy,sortedpairs=table.fastcopy,table.sortedpairs +local type=type +local concat,sortedhash=table.concat,table.sortedhash local resolvers=resolvers local listers=resolvers.listers or {} resolvers.listers=listers local resolveprefix=resolvers.resolve local report_lists=logs.reporter("resolvers","lists") +local report_resolved=logs.reporter("system","resolved") local function tabstr(str) if type(str)=='table' then return concat(str," | ") @@ -19772,39 +19912,17 @@ local function tabstr(str) end end function listers.variables(pattern) - local instance=resolvers.instance - local environment=instance.environment - local variables=instance.variables - local expansions=instance.expansions - local pattern=upper(pattern or "") - local configured={} - local order=instance.order - for i=1,#order do - for k,v in next,order[i] do - if v~=nil and configured[k]==nil then - configured[k]=v - end - end - end - local env=fastcopy(environment) - local var=fastcopy(variables) - local exp=fastcopy(expansions) - for key,value in sortedpairs(configured) do - if key~="" and (pattern=="" or find(upper(key),pattern)) then - report_lists(key) - report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") - report_lists(" var: %s",tabstr(configured[key]) or "unset") - report_lists(" exp: %s",tabstr(expansions[key]) or "unset") - report_lists(" res: %s",tabstr(resolveprefix(expansions[key])) or "unset") - end - end - instance.environment=fastcopy(env) - instance.variables=fastcopy(var) - instance.expansions=fastcopy(exp) + local result=resolvers.knownvariables(pattern) + for key,value in sortedhash(result) do + report_lists(key) + report_lists(" env: %s",tabstr(value.environment or "unset")) + report_lists(" var: %s",tabstr(value.variable or "unset")) + report_lists(" exp: %s",tabstr(value.expansion or "unset")) + report_lists(" res: %s",tabstr(value.resolved or "unset")) + end end -local report_resolved=logs.reporter("system","resolved") function listers.configurations() - local configurations=resolvers.instance.specification + local configurations=resolvers.configurationfiles() for i=1,#configurations do report_resolved("file : %s",resolveprefix(configurations[i])) end @@ -20418,8 +20536,8 @@ end -- of closure -- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 842443 --- stripped bytes : 306317 +-- original bytes : 845187 +-- stripped bytes : 306192 -- end library merge @@ -20643,7 +20761,7 @@ if not environment.experiments then environment.experiments = e_experiments end -- -local instance = resolvers.reset() +resolvers.reset() local helpinfo = [[ @@ -21199,7 +21317,7 @@ function runners.execute_ctx_script(filename,...) end -- retry after generate but only if --autogenerate if fullname == "" and environment.argument("autogenerate") then -- might become the default - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() -- @@ -21378,8 +21496,6 @@ local before, after = environment.splitarguments(filename) environment.arguments_before, environment.arguments_after = before, after environment.initializearguments(before) -instance.lsrmode = environment.argument("lsr") or false - e_verbose = environment.arguments["verbose"] -- delayed till here (we need the ones before script) if e_verbose then @@ -21466,7 +21582,7 @@ else function runners.loadbase(...) if not resolvers.load(...) then report("forcing cache reload") - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") if not resolvers.load(...) then report("the resolver databases are not present or outdated") @@ -21673,7 +21789,7 @@ elseif e_argument("find-path") then -- luatools: runners.execute_ctx_script("mtx-base","--find-path",filename) resolvers.load() - local path = resolvers.findpath(filename, instance.my_format) + local path = resolvers.findpath(filename) if e_verbose then report(path) else @@ -21754,7 +21870,7 @@ elseif e_argument("generate") then trackers.enable("resolvers.locating") resolvers.renew(filename) else - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() end diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 873770cac..5e0aff589 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -8408,7 +8408,7 @@ do -- create closure to overcome 200 locals limit package.loaded["trac-set"] = package.loaded["trac-set"] or true --- original size: 12454, stripped down to: 8840 +-- original size: 12898, stripped down to: 9156 if not modules then modules={} end modules ['trac-set']={ version=1.001, @@ -8600,13 +8600,30 @@ function setters.show(t) local name=list[k] local functions=t.data[name] if functions then - local value,default,modules=functions.value,functions.default,#functions - value=value==nil and "unset" or tostring(value) - default=default==nil and "unset" or tostring(default) - t.report("%-50s modules: %2i default: %-12s value: %-12s",name,modules,default,value) + local value=functions.value + local default=functions.default + local modules=#functions + if default==nil then + default="unset" + elseif type(default)=="table" then + default=concat(default,"|") + else + default=tostring(default) + end + if value==nil then + value="unset" + elseif type(value)=="table" then + value=concat(value,"|") + else + value=tostring(value) + end + t.report(name) + t.report(" modules : %i",modules) + t.report(" default : %s",default) + t.report(" value : %s",value) + t.report() end end - t.report() end local enable,disable,register,list,show=setters.enable,setters.disable,setters.register,setters.list,setters.show function setters.report(setter,...) @@ -11423,7 +11440,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 57003, stripped down to: 35696 +-- original size: 59348, stripped down to: 37757 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -11469,8 +11486,17 @@ local entities,parameters local strip,utfize,resolve,cleanup,resolve_predefined,unify_predefined local dcache,hcache,acache local mt,dt,nt +local currentfilename,currentline,linenumbers +local grammar_parsed_text_one +local grammar_parsed_text_two +local grammar_unparsed_text +local handle_hex_entity +local handle_dec_entity +local handle_any_entity_dtd +local handle_any_entity_text local function preparexmlstate(settings) if settings then + linenumbers=settings.linenumbers stack={} level=0 top={} @@ -11487,6 +11513,8 @@ local function preparexmlstate(settings) unify_predefined=settings.unify_predefined_entities cleanup=settings.text_cleanup entities=settings.entities or {} + currentfilename=settings.currentresource + currentline=1 parameters={} reported_at_errors={} dcache={} @@ -11501,6 +11529,7 @@ local function preparexmlstate(settings) resolve_predefined=true end else + linenumbers=false stack=nil level=nil top=nil @@ -11522,6 +11551,8 @@ local function preparexmlstate(settings) dcache=nil hcache=nil acache=nil + currentfilename=nil + currentline=1 end end local function initialize_mt(root) @@ -11559,14 +11590,24 @@ local function add_empty(spacing,namespace,tag) top=stack[level] dt=top.dt nt=#dt+1 - local t={ + local t=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, ni=nt, - __p__=top + cf=currentfilename, + cl=currentline, + __p__=top, + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt={}, + ni=nt, + __p__=top, } dt[nt]=t setmetatable(t,mt) @@ -11581,18 +11622,28 @@ local function add_begin(spacing,namespace,tag) dt[nt]=spacing end local resolved=namespace=="" and xmlns[#xmlns] or nsremap[namespace] or namespace - top={ + dt={} + top=linenumbers and { ns=namespace or "", rn=resolved, tg=tag, at=at, - dt={}, + dt=dt, ni=nil, - __p__=stack[level] + cf=currentfilename, + cl=currentline, + __p__=stack[level], + } or { + ns=namespace or "", + rn=resolved, + tg=tag, + at=at, + dt=dt, + ni=nil, + __p__=stack[level], } setmetatable(top,mt) - dt=top.dt - nt=#dt + nt=0 level=level+1 stack[level]=top at={} @@ -11660,7 +11711,15 @@ local function add_special(what,spacing,text) if strip and (what=="@cm@" or what=="@dt@") then else nt=nt+1 - dt[nt]={ + dt[nt]=linenumbers and { + special=true, + ns="", + tg=what, + ni=nil, + dt={ text }, + cf=currentfilename, + cl=currentline, + } or { special=true, ns="", tg=what, @@ -11688,12 +11747,6 @@ local function attribute_specification_error(str) end return str end -local grammar_parsed_text_one -local grammar_parsed_text_two -local handle_hex_entity -local handle_dec_entity -local handle_any_entity_dtd -local handle_any_entity_text do local badentity="&" xml.placeholders={ @@ -12095,7 +12148,13 @@ local function handle_crap_error(chr) add_text(chr) return chr end +local function handlenewline() + currentline=currentline+1 +end +local spacetab=S(' \t') local space=S(' \r\n\t') +local newline=lpegpatterns.newline/handlenewline +local anything=P(1) local open=P('<') local close=P('>') local squote=S("'") @@ -12111,43 +12170,9 @@ local name_nop=C(P(true))*C(valid^1) local name=name_yes+name_nop local utfbom=lpegpatterns.utfbom local spacing=C(space^0) -local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0 -local hexentitycontent=R("AF","af","09")^1 -local decentitycontent=R("09")^1 -local parsedentity=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_dtd) -local parsedentity_text=P("#")/""*( - P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity) - )+(anyentitycontent/handle_any_entity_text) -local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local entity_text=(ampersand/"")*parsedentity_text*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity) -local text_unparsed=C((1-open)^1) -local text_parsed=(Cs((1-open-ampersand)^1)/add_text+Cs(entity_text)/add_text)^1 -local somespace=space^1 -local optionalspace=space^0 -local value=(squote*Cs((entity+(1-squote))^0)*squote)+(dquote*Cs((entity+(1-dquote))^0)*dquote) -local endofattributes=slash*close+close -local whatever=space*name*optionalspace*equal -local wrongvalue=Cs(P(entity+(1-space-endofattributes))^1)/attribute_value_error -local attributevalue=value+wrongvalue -local attribute=(somespace*name*optionalspace*equal*optionalspace*attributevalue)/add_attribute -local attributes=(attribute+somespace^-1*(((1-endofattributes)^1)/attribute_specification_error))^0 -local parsedtext=text_parsed -local unparsedtext=text_unparsed/add_text -local balanced=P { "["*((1-S"[]")+V(1))^0*"]" } -local emptyelement=(spacing*open*name*attributes*optionalspace*slash*close)/add_empty -local beginelement=(spacing*open*name*attributes*optionalspace*close)/add_begin -local endelement=(spacing*open*slash*name*optionalspace*close)/add_end -local begincomment=open*P("!--") -local endcomment=P("--")*close -local begininstruction=open*P("?") -local endinstruction=P("?")*close -local begincdata=open*P("![CDATA[") -local endcdata=P("]]")*close -local someinstruction=C((1-endinstruction)^0) -local somecomment=C((1-endcomment )^0) -local somecdata=C((1-endcdata )^0) +local space_nl=spacetab+newline +local spacing_nl=Cs((space_nl)^0) +local anything_nl=newline+P(1) local function weirdentity(k,v) if trace_entities then report_xml("registering %s entity %a as %a","weird",k,v) @@ -12172,59 +12197,114 @@ local function publicentity(k,v,n) end entities[k]=v end -local begindoctype=open*P("!DOCTYPE") -local enddoctype=close -local beginset=P("[") -local endset=P("]") -local wrdtypename=C((1-somespace-P(";"))^1) -local doctypename=C((1-somespace-close)^0) -local elementdoctype=optionalspace*P("0 then - statistics.starttiming(resolvers.instance) + resolvers.starttiming() for k=1,#mountpaths do local root=mountpaths[k] local f=io.open(root.."/url.tmi") @@ -18842,7 +18983,7 @@ function resolvers.automount(usecache) f:close() end end - statistics.stoptiming(resolvers.instance) + resolvers.stoptiming() end end statistics.register("used config file",function() return caches.configfiles() end) @@ -18897,7 +19038,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-zip"] = package.loaded["data-zip"] or true --- original size: 8772, stripped down to: 6841 +-- original size: 8716, stripped down to: 6795 if not modules then modules={} end modules ['data-zip']={ version=1.001, @@ -19070,17 +19211,16 @@ function resolvers.usezipfile(archive) if archive and not registeredfiles[archive] then local z=zip.openarchive(archive) if z then - local instance=resolvers.instance local tree=url.query(specification.query).tree or "" if trace_locating then report_zip("registering: archive %a",archive) end - statistics.starttiming(instance) + resolvers.starttiming() resolvers.prependhash('zip',archive) resolvers.extendtexmfvariable(archive) registeredfiles[archive]=z - instance.files[archive]=resolvers.registerzipfile(z,tree) - statistics.stoptiming(instance) + resolvers.registerfilehash(archive,resolvers.registerzipfile(z,tree)) + resolvers.stoptiming() elseif trace_locating then report_zip("registering: unknown archive %a",archive) end @@ -19747,7 +19887,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-lst"] = package.loaded["data-lst"] or true --- original size: 2734, stripped down to: 2354 +-- original size: 1823, stripped down to: 1591 if not modules then modules={} end modules ['data-lst']={ version=1.001, @@ -19756,14 +19896,14 @@ if not modules then modules={} end modules ['data-lst']={ copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } -local rawget,type,next=rawget,type,next -local find,concat,upper=string.find,table.concat,string.upper -local fastcopy,sortedpairs=table.fastcopy,table.sortedpairs +local type=type +local concat,sortedhash=table.concat,table.sortedhash local resolvers=resolvers local listers=resolvers.listers or {} resolvers.listers=listers local resolveprefix=resolvers.resolve local report_lists=logs.reporter("resolvers","lists") +local report_resolved=logs.reporter("system","resolved") local function tabstr(str) if type(str)=='table' then return concat(str," | ") @@ -19772,39 +19912,17 @@ local function tabstr(str) end end function listers.variables(pattern) - local instance=resolvers.instance - local environment=instance.environment - local variables=instance.variables - local expansions=instance.expansions - local pattern=upper(pattern or "") - local configured={} - local order=instance.order - for i=1,#order do - for k,v in next,order[i] do - if v~=nil and configured[k]==nil then - configured[k]=v - end - end - end - local env=fastcopy(environment) - local var=fastcopy(variables) - local exp=fastcopy(expansions) - for key,value in sortedpairs(configured) do - if key~="" and (pattern=="" or find(upper(key),pattern)) then - report_lists(key) - report_lists(" env: %s",tabstr(rawget(environment,key)) or "unset") - report_lists(" var: %s",tabstr(configured[key]) or "unset") - report_lists(" exp: %s",tabstr(expansions[key]) or "unset") - report_lists(" res: %s",tabstr(resolveprefix(expansions[key])) or "unset") - end - end - instance.environment=fastcopy(env) - instance.variables=fastcopy(var) - instance.expansions=fastcopy(exp) + local result=resolvers.knownvariables(pattern) + for key,value in sortedhash(result) do + report_lists(key) + report_lists(" env: %s",tabstr(value.environment or "unset")) + report_lists(" var: %s",tabstr(value.variable or "unset")) + report_lists(" exp: %s",tabstr(value.expansion or "unset")) + report_lists(" res: %s",tabstr(value.resolved or "unset")) + end end -local report_resolved=logs.reporter("system","resolved") function listers.configurations() - local configurations=resolvers.instance.specification + local configurations=resolvers.configurationfiles() for i=1,#configurations do report_resolved("file : %s",resolveprefix(configurations[i])) end @@ -20418,8 +20536,8 @@ end -- of closure -- used libraries : l-lua.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 842443 --- stripped bytes : 306317 +-- original bytes : 845187 +-- stripped bytes : 306192 -- end library merge @@ -20643,7 +20761,7 @@ if not environment.experiments then environment.experiments = e_experiments end -- -local instance = resolvers.reset() +resolvers.reset() local helpinfo = [[ @@ -21199,7 +21317,7 @@ function runners.execute_ctx_script(filename,...) end -- retry after generate but only if --autogenerate if fullname == "" and environment.argument("autogenerate") then -- might become the default - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() -- @@ -21378,8 +21496,6 @@ local before, after = environment.splitarguments(filename) environment.arguments_before, environment.arguments_after = before, after environment.initializearguments(before) -instance.lsrmode = environment.argument("lsr") or false - e_verbose = environment.arguments["verbose"] -- delayed till here (we need the ones before script) if e_verbose then @@ -21466,7 +21582,7 @@ else function runners.loadbase(...) if not resolvers.load(...) then report("forcing cache reload") - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") if not resolvers.load(...) then report("the resolver databases are not present or outdated") @@ -21673,7 +21789,7 @@ elseif e_argument("find-path") then -- luatools: runners.execute_ctx_script("mtx-base","--find-path",filename) resolvers.load() - local path = resolvers.findpath(filename, instance.my_format) + local path = resolvers.findpath(filename) if e_verbose then report(path) else @@ -21754,7 +21870,7 @@ elseif e_argument("generate") then trackers.enable("resolvers.locating") resolvers.renew(filename) else - instance.renewcache = true + resolvers.renewcache() trackers.enable("resolvers.locating") resolvers.load() end -- cgit v1.2.3