summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/context
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-05-08 22:36:52 +0000
committerKarl Berry <karl@freefriends.org>2015-05-08 22:36:52 +0000
commit5dc3418fd91c83782dce77f0b65549e14f118f51 (patch)
tree9b4ec94c1bb0be9831fd3b887de69df098d46211 /Master/texmf-dist/scripts/context
parentb810c0301dd20283addb956384210b7926eef35d (diff)
context
git-svn-id: svn://tug.org/texlive/trunk@37284 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/scripts/context')
-rw-r--r--Master/texmf-dist/scripts/context/lua/mtx-context.lua20
-rwxr-xr-xMaster/texmf-dist/scripts/context/lua/mtxrun.lua146
-rw-r--r--Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua146
-rwxr-xr-xMaster/texmf-dist/scripts/context/stubs/unix/mtxrun146
-rw-r--r--Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua146
5 files changed, 475 insertions, 129 deletions
diff --git a/Master/texmf-dist/scripts/context/lua/mtx-context.lua b/Master/texmf-dist/scripts/context/lua/mtx-context.lua
index 919dbbb8cd4..d624f68315f 100644
--- a/Master/texmf-dist/scripts/context/lua/mtx-context.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtx-context.lua
@@ -260,7 +260,7 @@ end
-- multipass control
local multipass_suffixes = { ".tuc" }
-local multipass_nofruns = 8 -- or 7 to test oscillation
+local multipass_nofruns = 9 -- better for tracing oscillation
local multipass_forcedruns = false
local function multipass_hashfiles(jobname)
@@ -863,6 +863,24 @@ function scripts.context.run(ctxdata,filename)
pdf_open(resultname or jobname,pdfview)
end
--
+ local epub = analysis.epub
+ if epub then
+ if type(epub) == "string" then
+ local t = settings_to_array(epub)
+ for i=1,#t do
+ t[i] = "--" .. gsub(t[i],"^%-*","")
+ end
+ epub = concat(t," ")
+ else
+ epub = "--make"
+ end
+ local command = "mtxrun --script epub " .. epub .. " " .. jobname
+ report()
+ report("making epub file: ",command)
+ report()
+ os.execute(command)
+ end
+ --
if a_timing then
report()
report("you can process (timing) statistics with:",jobname)
diff --git a/Master/texmf-dist/scripts/context/lua/mtxrun.lua b/Master/texmf-dist/scripts/context/lua/mtxrun.lua
index 48a9a27a250..6afe0fab5b0 100755
--- a/Master/texmf-dist/scripts/context/lua/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/lua/mtxrun.lua
@@ -444,7 +444,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36225, stripped down to: 19891
+-- original size: 36977, stripped down to: 20349
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -1048,6 +1048,31 @@ local function make(t)
end
return p
end
+local function collapse(t,x)
+ if type(t)~="table" then
+ return t,x
+ else
+ local n=next(t)
+ if n==nil then
+ return t,x
+ elseif next(t,n)==nil then
+ local k=n
+ local v=t[k]
+ if type(v)=="table" then
+ return collapse(v,x..k)
+ else
+ return v,x..k
+ end
+ else
+ local tt={}
+ for k,v in next,t do
+ local vv,kk=collapse(v,k)
+ tt[kk]=vv
+ end
+ return tt,x
+ end
+ end
+end
function lpeg.utfchartabletopattern(list)
local tree={}
local n=#list
@@ -2853,7 +2878,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15761, stripped down to: 9403
+-- original size: 15832, stripped down to: 9456
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3083,6 +3108,7 @@ else
return platform
end
end
+os.newline=name=="windows" and "\013\010" or "\010"
function resolvers.bits(t,k)
local bits=find(os.platform,"64",1,true) and 64 or 32
os.bits=bits
@@ -4510,7 +4536,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37233, stripped down to: 15684
+-- original size: 37388, stripped down to: 15817
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4676,6 +4702,7 @@ if not utf.sub then
local pattern_zero=Cmt(p_utf8char,slide_zero)^0
local pattern_one=Cmt(p_utf8char,slide_one )^0
local pattern_two=Cmt(p_utf8char,slide_two )^0
+ local pattern_first=C(patterns.utf8character)
function utf.sub(str,start,stop)
if not start then
return str
@@ -4717,7 +4744,9 @@ if not utf.sub then
end
end
end
- if start>stop then
+ if start==1 and stop==1 then
+ return lpegmatch(pattern_first,str) or ""
+ elseif start>stop then
return ""
elseif start>1 then
b,e,n,first,last=0,0,0,start-1,stop
@@ -5165,7 +5194,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34407, stripped down to: 18852
+-- original size: 34503, stripped down to: 18933
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5200,6 +5229,11 @@ else
end
if not number then number={} end
local stripper=patterns.stripzeros
+local newline=patterns.newline
+local endofstring=patterns.endofstring
+local whitespace=patterns.whitespace
+local spacer=patterns.spacer
+local spaceortab=patterns.spaceortab
local function points(n)
n=tonumber(n)
return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536))
@@ -5210,12 +5244,12 @@ local function basepoints(n)
end
number.points=points
number.basepoints=basepoints
-local rubish=patterns.spaceortab^0*patterns.newline
-local anyrubish=patterns.spaceortab+patterns.newline
+local rubish=spaceortab^0*newline
+local anyrubish=spaceortab+newline
local anything=patterns.anything
-local stripped=(patterns.spaceortab^1/"")*patterns.newline
+local stripped=(spaceortab^1/"")*newline
local leading=rubish^0/""
-local trailing=(anyrubish^1*patterns.endofstring)/""
+local trailing=(anyrubish^1*endofstring)/""
local redundant=rubish^3/"\n"
local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0)
function strings.collapsecrlf(str)
@@ -5261,17 +5295,13 @@ local pattern=Carg(1)/function(t)
else
return ""
end
- end+patterns.newline*Cp()/function(position)
+ end+newline*Cp()/function(position)
extra,start=0,position
end+patterns.anything
)^1)
function strings.tabtospace(str,tab)
return lpegmatch(pattern,str,1,tab or 7)
end
-local newline=patterns.newline
-local endofstring=patterns.endofstring
-local whitespace=patterns.whitespace
-local spacer=patterns.spacer
local space=spacer^0
local nospace=space/""
local endofline=nospace*newline
@@ -5840,6 +5870,10 @@ local pattern=Cs(dquote*(equote-P(-2))^0*dquote)
function string.optionalquoted(str)
return lpegmatch(pattern,str) or str
end
+local pattern=Cs((newline/os.newline+1)^0)
+function string.replacenewlines(str)
+ return lpegmatch(pattern,str)
+end
end -- of closure
@@ -9541,7 +9575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 43882, stripped down to: 26870
+-- original size: 45683, stripped down to: 27866
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9654,8 +9688,10 @@ local function add_end(spacing,namespace,tag)
top=stack[#stack]
if #stack<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
elseif toclose.tg~=tag then
errorstr=formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
end
dt=top.dt
dt[#dt+1]=toclose
@@ -9664,10 +9700,29 @@ local function add_end(spacing,namespace,tag)
end
end
local function add_text(text)
+ local n=#dt
if cleanup and #text>0 then
- dt[#dt+1]=cleanup(text)
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..cleanup(text)
+ else
+ dt[n+1]=cleanup(text)
+ end
+ else
+ dt[1]=cleanup(text)
+ end
else
- dt[#dt+1]=text
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..text
+ else
+ dt[n+1]=text
+ end
+ else
+ dt[1]=text
+ end
end
end
local function add_special(what,spacing,text)
@@ -9699,8 +9754,10 @@ local function attribute_specification_error(str)
end
return str
end
+local badentity="&error;"
+local badentity="&"
xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and "&error;" or formatters["&%s;"](str) end,
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
}
@@ -9860,7 +9917,7 @@ local function handle_any_entity(str)
report_xml("keeping entity &%s;",str)
end
if str=="" then
- a="&error;"
+ a=badentity
else
a="&"..str..";"
end
@@ -9888,7 +9945,7 @@ local function handle_any_entity(str)
if trace_entities then
report_xml("invalid entity &%s;",str)
end
- a="&error;"
+ a=badentity
acache[str]=a
else
if trace_entities then
@@ -9901,8 +9958,14 @@ local function handle_any_entity(str)
return a
end
end
-local function handle_end_entity(chr)
- report_xml("error in entity, %a found instead of %a",chr,";")
+local function handle_end_entity(str)
+ report_xml("error in entity, %a found without ending %a",str,";")
+ return str
+end
+local function handle_crap_error(chr)
+ report_xml("error in parsing, unexpected %a found ",chr)
+ add_text(chr)
+ return chr
end
local space=S(' \r\n\t')
local open=P('<')
@@ -9920,13 +9983,13 @@ 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)^0
+local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
local hexentitycontent=R("AF","af","09")^0
local decentitycontent=R("09")^0
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
)+(anyentitycontent/handle_any_entity)
-local entity=ampersand/""*parsedentity*((semicolon/"")+#(P(1)/handle_end_entity))
+local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
local somespace=space^1
@@ -9977,16 +10040,20 @@ local instruction=(spacing*begininstruction*someinstruction*endinstruction)/func
local comment=(spacing*begincomment*somecomment*endcomment )/function(...) add_special("@cm@",...) end
local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special("@cd@",...) end
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
+local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
+local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
+local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
local grammar_parsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
local grammar_unparsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
settings=settings or {}
@@ -10020,7 +10087,6 @@ local function _xmlconvert_(data,settings)
errorstr="empty xml file"
elseif utfize or resolve then
if lpegmatch(grammar_parsed_text,data) then
- errorstr=""
else
errorstr="invalid xml file - parsed text"
end
@@ -10036,6 +10102,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
+setmetatable(result,mt)
+setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -11674,7 +11742,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28225, stripped down to: 20125
+-- original size: 28786, stripped down to: 20578
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12051,6 +12119,14 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
else
xmldata.settings.inclusions={ name }
end
+ if child.er then
+ local badinclusions=xmldata.settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ xmldata.settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12068,11 +12144,11 @@ function xml.inclusion(e,default)
end
return default
end
-function xml.inclusions(e,sorted)
+local function getinclusions(key,e,sorted)
while e do
local settings=e.settings
if settings then
- local inclusions=settings.inclusions
+ local inclusions=settings[key]
if inclusions then
inclusions=table.unique(inclusions)
if sorted then
@@ -12087,6 +12163,12 @@ function xml.inclusions(e,sorted)
end
end
end
+function xml.inclusions(e,sorted)
+ return getinclusions("inclusions",e,sorted)
+end
+function xml.badinclusions(e,sorted)
+ return getinclusions("badinclusions",e,sorted)
+end
local b_collapser=lpeg.patterns.b_collapser
local m_collapser=lpeg.patterns.m_collapser
local e_collapser=lpeg.patterns.e_collapser
@@ -17856,8 +17938,8 @@ end -- of closure
-- used libraries : l-lua.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-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-mrg.lua util-tpl.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 : 739251
--- stripped bytes : 264497
+-- original bytes : 742687
+-- stripped bytes : 265759
-- end library merge
diff --git a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
index 48a9a27a250..6afe0fab5b0 100644
--- a/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/stubs/mswin/mtxrun.lua
@@ -444,7 +444,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36225, stripped down to: 19891
+-- original size: 36977, stripped down to: 20349
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -1048,6 +1048,31 @@ local function make(t)
end
return p
end
+local function collapse(t,x)
+ if type(t)~="table" then
+ return t,x
+ else
+ local n=next(t)
+ if n==nil then
+ return t,x
+ elseif next(t,n)==nil then
+ local k=n
+ local v=t[k]
+ if type(v)=="table" then
+ return collapse(v,x..k)
+ else
+ return v,x..k
+ end
+ else
+ local tt={}
+ for k,v in next,t do
+ local vv,kk=collapse(v,k)
+ tt[kk]=vv
+ end
+ return tt,x
+ end
+ end
+end
function lpeg.utfchartabletopattern(list)
local tree={}
local n=#list
@@ -2853,7 +2878,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15761, stripped down to: 9403
+-- original size: 15832, stripped down to: 9456
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3083,6 +3108,7 @@ else
return platform
end
end
+os.newline=name=="windows" and "\013\010" or "\010"
function resolvers.bits(t,k)
local bits=find(os.platform,"64",1,true) and 64 or 32
os.bits=bits
@@ -4510,7 +4536,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37233, stripped down to: 15684
+-- original size: 37388, stripped down to: 15817
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4676,6 +4702,7 @@ if not utf.sub then
local pattern_zero=Cmt(p_utf8char,slide_zero)^0
local pattern_one=Cmt(p_utf8char,slide_one )^0
local pattern_two=Cmt(p_utf8char,slide_two )^0
+ local pattern_first=C(patterns.utf8character)
function utf.sub(str,start,stop)
if not start then
return str
@@ -4717,7 +4744,9 @@ if not utf.sub then
end
end
end
- if start>stop then
+ if start==1 and stop==1 then
+ return lpegmatch(pattern_first,str) or ""
+ elseif start>stop then
return ""
elseif start>1 then
b,e,n,first,last=0,0,0,start-1,stop
@@ -5165,7 +5194,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34407, stripped down to: 18852
+-- original size: 34503, stripped down to: 18933
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5200,6 +5229,11 @@ else
end
if not number then number={} end
local stripper=patterns.stripzeros
+local newline=patterns.newline
+local endofstring=patterns.endofstring
+local whitespace=patterns.whitespace
+local spacer=patterns.spacer
+local spaceortab=patterns.spaceortab
local function points(n)
n=tonumber(n)
return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536))
@@ -5210,12 +5244,12 @@ local function basepoints(n)
end
number.points=points
number.basepoints=basepoints
-local rubish=patterns.spaceortab^0*patterns.newline
-local anyrubish=patterns.spaceortab+patterns.newline
+local rubish=spaceortab^0*newline
+local anyrubish=spaceortab+newline
local anything=patterns.anything
-local stripped=(patterns.spaceortab^1/"")*patterns.newline
+local stripped=(spaceortab^1/"")*newline
local leading=rubish^0/""
-local trailing=(anyrubish^1*patterns.endofstring)/""
+local trailing=(anyrubish^1*endofstring)/""
local redundant=rubish^3/"\n"
local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0)
function strings.collapsecrlf(str)
@@ -5261,17 +5295,13 @@ local pattern=Carg(1)/function(t)
else
return ""
end
- end+patterns.newline*Cp()/function(position)
+ end+newline*Cp()/function(position)
extra,start=0,position
end+patterns.anything
)^1)
function strings.tabtospace(str,tab)
return lpegmatch(pattern,str,1,tab or 7)
end
-local newline=patterns.newline
-local endofstring=patterns.endofstring
-local whitespace=patterns.whitespace
-local spacer=patterns.spacer
local space=spacer^0
local nospace=space/""
local endofline=nospace*newline
@@ -5840,6 +5870,10 @@ local pattern=Cs(dquote*(equote-P(-2))^0*dquote)
function string.optionalquoted(str)
return lpegmatch(pattern,str) or str
end
+local pattern=Cs((newline/os.newline+1)^0)
+function string.replacenewlines(str)
+ return lpegmatch(pattern,str)
+end
end -- of closure
@@ -9541,7 +9575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 43882, stripped down to: 26870
+-- original size: 45683, stripped down to: 27866
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9654,8 +9688,10 @@ local function add_end(spacing,namespace,tag)
top=stack[#stack]
if #stack<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
elseif toclose.tg~=tag then
errorstr=formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
end
dt=top.dt
dt[#dt+1]=toclose
@@ -9664,10 +9700,29 @@ local function add_end(spacing,namespace,tag)
end
end
local function add_text(text)
+ local n=#dt
if cleanup and #text>0 then
- dt[#dt+1]=cleanup(text)
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..cleanup(text)
+ else
+ dt[n+1]=cleanup(text)
+ end
+ else
+ dt[1]=cleanup(text)
+ end
else
- dt[#dt+1]=text
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..text
+ else
+ dt[n+1]=text
+ end
+ else
+ dt[1]=text
+ end
end
end
local function add_special(what,spacing,text)
@@ -9699,8 +9754,10 @@ local function attribute_specification_error(str)
end
return str
end
+local badentity="&error;"
+local badentity="&"
xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and "&error;" or formatters["&%s;"](str) end,
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
}
@@ -9860,7 +9917,7 @@ local function handle_any_entity(str)
report_xml("keeping entity &%s;",str)
end
if str=="" then
- a="&error;"
+ a=badentity
else
a="&"..str..";"
end
@@ -9888,7 +9945,7 @@ local function handle_any_entity(str)
if trace_entities then
report_xml("invalid entity &%s;",str)
end
- a="&error;"
+ a=badentity
acache[str]=a
else
if trace_entities then
@@ -9901,8 +9958,14 @@ local function handle_any_entity(str)
return a
end
end
-local function handle_end_entity(chr)
- report_xml("error in entity, %a found instead of %a",chr,";")
+local function handle_end_entity(str)
+ report_xml("error in entity, %a found without ending %a",str,";")
+ return str
+end
+local function handle_crap_error(chr)
+ report_xml("error in parsing, unexpected %a found ",chr)
+ add_text(chr)
+ return chr
end
local space=S(' \r\n\t')
local open=P('<')
@@ -9920,13 +9983,13 @@ 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)^0
+local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
local hexentitycontent=R("AF","af","09")^0
local decentitycontent=R("09")^0
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
)+(anyentitycontent/handle_any_entity)
-local entity=ampersand/""*parsedentity*((semicolon/"")+#(P(1)/handle_end_entity))
+local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
local somespace=space^1
@@ -9977,16 +10040,20 @@ local instruction=(spacing*begininstruction*someinstruction*endinstruction)/func
local comment=(spacing*begincomment*somecomment*endcomment )/function(...) add_special("@cm@",...) end
local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special("@cd@",...) end
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
+local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
+local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
+local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
local grammar_parsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
local grammar_unparsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
settings=settings or {}
@@ -10020,7 +10087,6 @@ local function _xmlconvert_(data,settings)
errorstr="empty xml file"
elseif utfize or resolve then
if lpegmatch(grammar_parsed_text,data) then
- errorstr=""
else
errorstr="invalid xml file - parsed text"
end
@@ -10036,6 +10102,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
+setmetatable(result,mt)
+setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -11674,7 +11742,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28225, stripped down to: 20125
+-- original size: 28786, stripped down to: 20578
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12051,6 +12119,14 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
else
xmldata.settings.inclusions={ name }
end
+ if child.er then
+ local badinclusions=xmldata.settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ xmldata.settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12068,11 +12144,11 @@ function xml.inclusion(e,default)
end
return default
end
-function xml.inclusions(e,sorted)
+local function getinclusions(key,e,sorted)
while e do
local settings=e.settings
if settings then
- local inclusions=settings.inclusions
+ local inclusions=settings[key]
if inclusions then
inclusions=table.unique(inclusions)
if sorted then
@@ -12087,6 +12163,12 @@ function xml.inclusions(e,sorted)
end
end
end
+function xml.inclusions(e,sorted)
+ return getinclusions("inclusions",e,sorted)
+end
+function xml.badinclusions(e,sorted)
+ return getinclusions("badinclusions",e,sorted)
+end
local b_collapser=lpeg.patterns.b_collapser
local m_collapser=lpeg.patterns.m_collapser
local e_collapser=lpeg.patterns.e_collapser
@@ -17856,8 +17938,8 @@ end -- of closure
-- used libraries : l-lua.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-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-mrg.lua util-tpl.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 : 739251
--- stripped bytes : 264497
+-- original bytes : 742687
+-- stripped bytes : 265759
-- end library merge
diff --git a/Master/texmf-dist/scripts/context/stubs/unix/mtxrun b/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
index 48a9a27a250..6afe0fab5b0 100755
--- a/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
+++ b/Master/texmf-dist/scripts/context/stubs/unix/mtxrun
@@ -444,7 +444,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36225, stripped down to: 19891
+-- original size: 36977, stripped down to: 20349
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -1048,6 +1048,31 @@ local function make(t)
end
return p
end
+local function collapse(t,x)
+ if type(t)~="table" then
+ return t,x
+ else
+ local n=next(t)
+ if n==nil then
+ return t,x
+ elseif next(t,n)==nil then
+ local k=n
+ local v=t[k]
+ if type(v)=="table" then
+ return collapse(v,x..k)
+ else
+ return v,x..k
+ end
+ else
+ local tt={}
+ for k,v in next,t do
+ local vv,kk=collapse(v,k)
+ tt[kk]=vv
+ end
+ return tt,x
+ end
+ end
+end
function lpeg.utfchartabletopattern(list)
local tree={}
local n=#list
@@ -2853,7 +2878,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15761, stripped down to: 9403
+-- original size: 15832, stripped down to: 9456
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3083,6 +3108,7 @@ else
return platform
end
end
+os.newline=name=="windows" and "\013\010" or "\010"
function resolvers.bits(t,k)
local bits=find(os.platform,"64",1,true) and 64 or 32
os.bits=bits
@@ -4510,7 +4536,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37233, stripped down to: 15684
+-- original size: 37388, stripped down to: 15817
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4676,6 +4702,7 @@ if not utf.sub then
local pattern_zero=Cmt(p_utf8char,slide_zero)^0
local pattern_one=Cmt(p_utf8char,slide_one )^0
local pattern_two=Cmt(p_utf8char,slide_two )^0
+ local pattern_first=C(patterns.utf8character)
function utf.sub(str,start,stop)
if not start then
return str
@@ -4717,7 +4744,9 @@ if not utf.sub then
end
end
end
- if start>stop then
+ if start==1 and stop==1 then
+ return lpegmatch(pattern_first,str) or ""
+ elseif start>stop then
return ""
elseif start>1 then
b,e,n,first,last=0,0,0,start-1,stop
@@ -5165,7 +5194,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34407, stripped down to: 18852
+-- original size: 34503, stripped down to: 18933
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5200,6 +5229,11 @@ else
end
if not number then number={} end
local stripper=patterns.stripzeros
+local newline=patterns.newline
+local endofstring=patterns.endofstring
+local whitespace=patterns.whitespace
+local spacer=patterns.spacer
+local spaceortab=patterns.spaceortab
local function points(n)
n=tonumber(n)
return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536))
@@ -5210,12 +5244,12 @@ local function basepoints(n)
end
number.points=points
number.basepoints=basepoints
-local rubish=patterns.spaceortab^0*patterns.newline
-local anyrubish=patterns.spaceortab+patterns.newline
+local rubish=spaceortab^0*newline
+local anyrubish=spaceortab+newline
local anything=patterns.anything
-local stripped=(patterns.spaceortab^1/"")*patterns.newline
+local stripped=(spaceortab^1/"")*newline
local leading=rubish^0/""
-local trailing=(anyrubish^1*patterns.endofstring)/""
+local trailing=(anyrubish^1*endofstring)/""
local redundant=rubish^3/"\n"
local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0)
function strings.collapsecrlf(str)
@@ -5261,17 +5295,13 @@ local pattern=Carg(1)/function(t)
else
return ""
end
- end+patterns.newline*Cp()/function(position)
+ end+newline*Cp()/function(position)
extra,start=0,position
end+patterns.anything
)^1)
function strings.tabtospace(str,tab)
return lpegmatch(pattern,str,1,tab or 7)
end
-local newline=patterns.newline
-local endofstring=patterns.endofstring
-local whitespace=patterns.whitespace
-local spacer=patterns.spacer
local space=spacer^0
local nospace=space/""
local endofline=nospace*newline
@@ -5840,6 +5870,10 @@ local pattern=Cs(dquote*(equote-P(-2))^0*dquote)
function string.optionalquoted(str)
return lpegmatch(pattern,str) or str
end
+local pattern=Cs((newline/os.newline+1)^0)
+function string.replacenewlines(str)
+ return lpegmatch(pattern,str)
+end
end -- of closure
@@ -9541,7 +9575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 43882, stripped down to: 26870
+-- original size: 45683, stripped down to: 27866
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9654,8 +9688,10 @@ local function add_end(spacing,namespace,tag)
top=stack[#stack]
if #stack<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
elseif toclose.tg~=tag then
errorstr=formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
end
dt=top.dt
dt[#dt+1]=toclose
@@ -9664,10 +9700,29 @@ local function add_end(spacing,namespace,tag)
end
end
local function add_text(text)
+ local n=#dt
if cleanup and #text>0 then
- dt[#dt+1]=cleanup(text)
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..cleanup(text)
+ else
+ dt[n+1]=cleanup(text)
+ end
+ else
+ dt[1]=cleanup(text)
+ end
else
- dt[#dt+1]=text
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..text
+ else
+ dt[n+1]=text
+ end
+ else
+ dt[1]=text
+ end
end
end
local function add_special(what,spacing,text)
@@ -9699,8 +9754,10 @@ local function attribute_specification_error(str)
end
return str
end
+local badentity="&error;"
+local badentity="&"
xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and "&error;" or formatters["&%s;"](str) end,
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
}
@@ -9860,7 +9917,7 @@ local function handle_any_entity(str)
report_xml("keeping entity &%s;",str)
end
if str=="" then
- a="&error;"
+ a=badentity
else
a="&"..str..";"
end
@@ -9888,7 +9945,7 @@ local function handle_any_entity(str)
if trace_entities then
report_xml("invalid entity &%s;",str)
end
- a="&error;"
+ a=badentity
acache[str]=a
else
if trace_entities then
@@ -9901,8 +9958,14 @@ local function handle_any_entity(str)
return a
end
end
-local function handle_end_entity(chr)
- report_xml("error in entity, %a found instead of %a",chr,";")
+local function handle_end_entity(str)
+ report_xml("error in entity, %a found without ending %a",str,";")
+ return str
+end
+local function handle_crap_error(chr)
+ report_xml("error in parsing, unexpected %a found ",chr)
+ add_text(chr)
+ return chr
end
local space=S(' \r\n\t')
local open=P('<')
@@ -9920,13 +9983,13 @@ 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)^0
+local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
local hexentitycontent=R("AF","af","09")^0
local decentitycontent=R("09")^0
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
)+(anyentitycontent/handle_any_entity)
-local entity=ampersand/""*parsedentity*((semicolon/"")+#(P(1)/handle_end_entity))
+local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
local somespace=space^1
@@ -9977,16 +10040,20 @@ local instruction=(spacing*begininstruction*someinstruction*endinstruction)/func
local comment=(spacing*begincomment*somecomment*endcomment )/function(...) add_special("@cm@",...) end
local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special("@cd@",...) end
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
+local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
+local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
+local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
local grammar_parsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
local grammar_unparsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
settings=settings or {}
@@ -10020,7 +10087,6 @@ local function _xmlconvert_(data,settings)
errorstr="empty xml file"
elseif utfize or resolve then
if lpegmatch(grammar_parsed_text,data) then
- errorstr=""
else
errorstr="invalid xml file - parsed text"
end
@@ -10036,6 +10102,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
+setmetatable(result,mt)
+setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -11674,7 +11742,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28225, stripped down to: 20125
+-- original size: 28786, stripped down to: 20578
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12051,6 +12119,14 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
else
xmldata.settings.inclusions={ name }
end
+ if child.er then
+ local badinclusions=xmldata.settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ xmldata.settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12068,11 +12144,11 @@ function xml.inclusion(e,default)
end
return default
end
-function xml.inclusions(e,sorted)
+local function getinclusions(key,e,sorted)
while e do
local settings=e.settings
if settings then
- local inclusions=settings.inclusions
+ local inclusions=settings[key]
if inclusions then
inclusions=table.unique(inclusions)
if sorted then
@@ -12087,6 +12163,12 @@ function xml.inclusions(e,sorted)
end
end
end
+function xml.inclusions(e,sorted)
+ return getinclusions("inclusions",e,sorted)
+end
+function xml.badinclusions(e,sorted)
+ return getinclusions("badinclusions",e,sorted)
+end
local b_collapser=lpeg.patterns.b_collapser
local m_collapser=lpeg.patterns.m_collapser
local e_collapser=lpeg.patterns.e_collapser
@@ -17856,8 +17938,8 @@ end -- of closure
-- used libraries : l-lua.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-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-mrg.lua util-tpl.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 : 739251
--- stripped bytes : 264497
+-- original bytes : 742687
+-- stripped bytes : 265759
-- end library merge
diff --git a/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua b/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua
index 48a9a27a250..6afe0fab5b0 100644
--- a/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua
+++ b/Master/texmf-dist/scripts/context/stubs/win64/mtxrun.lua
@@ -444,7 +444,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lpeg"] = package.loaded["l-lpeg"] or true
--- original size: 36225, stripped down to: 19891
+-- original size: 36977, stripped down to: 20349
if not modules then modules={} end modules ['l-lpeg']={
version=1.001,
@@ -1048,6 +1048,31 @@ local function make(t)
end
return p
end
+local function collapse(t,x)
+ if type(t)~="table" then
+ return t,x
+ else
+ local n=next(t)
+ if n==nil then
+ return t,x
+ elseif next(t,n)==nil then
+ local k=n
+ local v=t[k]
+ if type(v)=="table" then
+ return collapse(v,x..k)
+ else
+ return v,x..k
+ end
+ else
+ local tt={}
+ for k,v in next,t do
+ local vv,kk=collapse(v,k)
+ tt[kk]=vv
+ end
+ return tt,x
+ end
+ end
+end
function lpeg.utfchartabletopattern(list)
local tree={}
local n=#list
@@ -2853,7 +2878,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-os"] = package.loaded["l-os"] or true
--- original size: 15761, stripped down to: 9403
+-- original size: 15832, stripped down to: 9456
if not modules then modules={} end modules ['l-os']={
version=1.001,
@@ -3083,6 +3108,7 @@ else
return platform
end
end
+os.newline=name=="windows" and "\013\010" or "\010"
function resolvers.bits(t,k)
local bits=find(os.platform,"64",1,true) and 64 or 32
os.bits=bits
@@ -4510,7 +4536,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
--- original size: 37233, stripped down to: 15684
+-- original size: 37388, stripped down to: 15817
if not modules then modules={} end modules ['l-unicode']={
version=1.001,
@@ -4676,6 +4702,7 @@ if not utf.sub then
local pattern_zero=Cmt(p_utf8char,slide_zero)^0
local pattern_one=Cmt(p_utf8char,slide_one )^0
local pattern_two=Cmt(p_utf8char,slide_two )^0
+ local pattern_first=C(patterns.utf8character)
function utf.sub(str,start,stop)
if not start then
return str
@@ -4717,7 +4744,9 @@ if not utf.sub then
end
end
end
- if start>stop then
+ if start==1 and stop==1 then
+ return lpegmatch(pattern_first,str) or ""
+ elseif start>stop then
return ""
elseif start>1 then
b,e,n,first,last=0,0,0,start-1,stop
@@ -5165,7 +5194,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-str"] = package.loaded["util-str"] or true
--- original size: 34407, stripped down to: 18852
+-- original size: 34503, stripped down to: 18933
if not modules then modules={} end modules ['util-str']={
version=1.001,
@@ -5200,6 +5229,11 @@ else
end
if not number then number={} end
local stripper=patterns.stripzeros
+local newline=patterns.newline
+local endofstring=patterns.endofstring
+local whitespace=patterns.whitespace
+local spacer=patterns.spacer
+local spaceortab=patterns.spaceortab
local function points(n)
n=tonumber(n)
return (not n or n==0) and "0pt" or lpegmatch(stripper,format("%.5fpt",n/65536))
@@ -5210,12 +5244,12 @@ local function basepoints(n)
end
number.points=points
number.basepoints=basepoints
-local rubish=patterns.spaceortab^0*patterns.newline
-local anyrubish=patterns.spaceortab+patterns.newline
+local rubish=spaceortab^0*newline
+local anyrubish=spaceortab+newline
local anything=patterns.anything
-local stripped=(patterns.spaceortab^1/"")*patterns.newline
+local stripped=(spaceortab^1/"")*newline
local leading=rubish^0/""
-local trailing=(anyrubish^1*patterns.endofstring)/""
+local trailing=(anyrubish^1*endofstring)/""
local redundant=rubish^3/"\n"
local pattern=Cs(leading*(trailing+redundant+stripped+anything)^0)
function strings.collapsecrlf(str)
@@ -5261,17 +5295,13 @@ local pattern=Carg(1)/function(t)
else
return ""
end
- end+patterns.newline*Cp()/function(position)
+ end+newline*Cp()/function(position)
extra,start=0,position
end+patterns.anything
)^1)
function strings.tabtospace(str,tab)
return lpegmatch(pattern,str,1,tab or 7)
end
-local newline=patterns.newline
-local endofstring=patterns.endofstring
-local whitespace=patterns.whitespace
-local spacer=patterns.spacer
local space=spacer^0
local nospace=space/""
local endofline=nospace*newline
@@ -5840,6 +5870,10 @@ local pattern=Cs(dquote*(equote-P(-2))^0*dquote)
function string.optionalquoted(str)
return lpegmatch(pattern,str) or str
end
+local pattern=Cs((newline/os.newline+1)^0)
+function string.replacenewlines(str)
+ return lpegmatch(pattern,str)
+end
end -- of closure
@@ -9541,7 +9575,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true
--- original size: 43882, stripped down to: 26870
+-- original size: 45683, stripped down to: 27866
if not modules then modules={} end modules ['lxml-tab']={
version=1.001,
@@ -9654,8 +9688,10 @@ local function add_end(spacing,namespace,tag)
top=stack[#stack]
if #stack<1 then
errorstr=formatters["unable to close %s %s"](tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
elseif toclose.tg~=tag then
errorstr=formatters["unable to close %s with %s %s"](toclose.tg,tag,xml.checkerror(top,toclose) or "")
+ report_xml(errorstr)
end
dt=top.dt
dt[#dt+1]=toclose
@@ -9664,10 +9700,29 @@ local function add_end(spacing,namespace,tag)
end
end
local function add_text(text)
+ local n=#dt
if cleanup and #text>0 then
- dt[#dt+1]=cleanup(text)
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..cleanup(text)
+ else
+ dt[n+1]=cleanup(text)
+ end
+ else
+ dt[1]=cleanup(text)
+ end
else
- dt[#dt+1]=text
+ if n>0 then
+ local s=dt[n]
+ if type(s)=="string" then
+ dt[n]=s..text
+ else
+ dt[n+1]=text
+ end
+ else
+ dt[1]=text
+ end
end
end
local function add_special(what,spacing,text)
@@ -9699,8 +9754,10 @@ local function attribute_specification_error(str)
end
return str
end
+local badentity="&error;"
+local badentity="&"
xml.placeholders={
- unknown_dec_entity=function(str) return str=="" and "&error;" or formatters["&%s;"](str) end,
+ unknown_dec_entity=function(str) return str=="" and badentity or formatters["&%s;"](str) end,
unknown_hex_entity=function(str) return formatters["&#x%s;"](str) end,
unknown_any_entity=function(str) return formatters["&#x%s;"](str) end,
}
@@ -9860,7 +9917,7 @@ local function handle_any_entity(str)
report_xml("keeping entity &%s;",str)
end
if str=="" then
- a="&error;"
+ a=badentity
else
a="&"..str..";"
end
@@ -9888,7 +9945,7 @@ local function handle_any_entity(str)
if trace_entities then
report_xml("invalid entity &%s;",str)
end
- a="&error;"
+ a=badentity
acache[str]=a
else
if trace_entities then
@@ -9901,8 +9958,14 @@ local function handle_any_entity(str)
return a
end
end
-local function handle_end_entity(chr)
- report_xml("error in entity, %a found instead of %a",chr,";")
+local function handle_end_entity(str)
+ report_xml("error in entity, %a found without ending %a",str,";")
+ return str
+end
+local function handle_crap_error(chr)
+ report_xml("error in parsing, unexpected %a found ",chr)
+ add_text(chr)
+ return chr
end
local space=S(' \r\n\t')
local open=P('<')
@@ -9920,13 +9983,13 @@ 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)^0
+local anyentitycontent=(1-open-semicolon-space-close-ampersand)^0
local hexentitycontent=R("AF","af","09")^0
local decentitycontent=R("09")^0
local parsedentity=P("#")/""*(
P("x")/""*(hexentitycontent/handle_hex_entity)+(decentitycontent/handle_dec_entity)
)+(anyentitycontent/handle_any_entity)
-local entity=ampersand/""*parsedentity*((semicolon/"")+#(P(1)/handle_end_entity))
+local entity=(ampersand/"")*parsedentity*(semicolon/"")+ampersand*(anyentitycontent/handle_end_entity)
local text_unparsed=C((1-open)^1)
local text_parsed=Cs(((1-open-ampersand)^1+entity)^1)
local somespace=space^1
@@ -9977,16 +10040,20 @@ local instruction=(spacing*begininstruction*someinstruction*endinstruction)/func
local comment=(spacing*begincomment*somecomment*endcomment )/function(...) add_special("@cm@",...) end
local cdata=(spacing*begincdata*somecdata*endcdata )/function(...) add_special("@cd@",...) end
local doctype=(spacing*begindoctype*somedoctype*enddoctype )/function(...) add_special("@dt@",...) end
+local crap_parsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata-ampersand
+local crap_unparsed=1-beginelement-endelement-emptyelement-begininstruction-begincomment-begincdata
+local parsedcrap=Cs((crap_parsed^1+entity)^1)/handle_crap_error
+local unparsedcrap=Cs((crap_unparsed )^1)/handle_crap_error
local trailer=space^0*(text_unparsed/set_message)^0
local grammar_parsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=parsedtext+V("parent")+emptyelement+comment+cdata+instruction+parsedcrap,
}
local grammar_unparsed_text=P { "preamble",
preamble=utfbom^0*instruction^0*(doctype+comment+instruction)^0*V("parent")*trailer,
parent=beginelement*V("children")^0*endelement,
- children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction,
+ children=unparsedtext+V("parent")+emptyelement+comment+cdata+instruction+unparsedcrap,
}
local function _xmlconvert_(data,settings)
settings=settings or {}
@@ -10020,7 +10087,6 @@ local function _xmlconvert_(data,settings)
errorstr="empty xml file"
elseif utfize or resolve then
if lpegmatch(grammar_parsed_text,data) then
- errorstr=""
else
errorstr="invalid xml file - parsed text"
end
@@ -10036,6 +10102,8 @@ local function _xmlconvert_(data,settings)
local result
if errorstr and errorstr~="" then
result={ dt={ { ns="",tg="error",dt={ errorstr },at={},er=true } } }
+setmetatable(result,mt)
+setmetatable(result.dt[1],mt)
setmetatable(stack,mt)
local errorhandler=settings.error_handler
if errorhandler==false then
@@ -11674,7 +11742,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true
--- original size: 28225, stripped down to: 20125
+-- original size: 28786, stripped down to: 20578
if not modules then modules={} end modules ['lxml-aux']={
version=1.001,
@@ -12051,6 +12119,14 @@ local function include(xmldata,pattern,attribute,recursive,loaddata,level)
else
xmldata.settings.inclusions={ name }
end
+ if child.er then
+ local badinclusions=xmldata.settings.badinclusions
+ if badinclusions then
+ badinclusions[#badinclusions+1]=name
+ else
+ xmldata.settings.badinclusions={ name }
+ end
+ end
end
end
end
@@ -12068,11 +12144,11 @@ function xml.inclusion(e,default)
end
return default
end
-function xml.inclusions(e,sorted)
+local function getinclusions(key,e,sorted)
while e do
local settings=e.settings
if settings then
- local inclusions=settings.inclusions
+ local inclusions=settings[key]
if inclusions then
inclusions=table.unique(inclusions)
if sorted then
@@ -12087,6 +12163,12 @@ function xml.inclusions(e,sorted)
end
end
end
+function xml.inclusions(e,sorted)
+ return getinclusions("inclusions",e,sorted)
+end
+function xml.badinclusions(e,sorted)
+ return getinclusions("badinclusions",e,sorted)
+end
local b_collapser=lpeg.patterns.b_collapser
local m_collapser=lpeg.patterns.m_collapser
local e_collapser=lpeg.patterns.e_collapser
@@ -17856,8 +17938,8 @@ end -- of closure
-- used libraries : l-lua.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-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-mrg.lua util-tpl.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 : 739251
--- stripped bytes : 264497
+-- original bytes : 742687
+-- stripped bytes : 265759
-- end library merge