summaryrefslogtreecommitdiff
path: root/scripts/context/lua/mtxrun.lua
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/context/lua/mtxrun.lua')
-rw-r--r--scripts/context/lua/mtxrun.lua181
1 files changed, 116 insertions, 65 deletions
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 22089df7a..4997d7458 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -56,7 +56,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-lua"] = package.loaded["l-lua"] or true
--- original size: 8020, stripped down to: 5488
+-- original size: 10064, stripped down to: 5696
if not modules then modules={} end modules ['l-lua']={
version=1.001,
@@ -136,6 +136,7 @@ function optionalrequire(...)
return result
end
end
+local type=type
local gsub,format=string.gsub,string.format
local package=package
local searchers=package.searchers or package.loaders
@@ -167,45 +168,38 @@ local function getclibpaths()
end
package.libpaths=getlibpaths
package.clibpaths=getclibpaths
-function package.extralibpath(...)
- libpaths=getlibpaths()
+local function addpath(what,paths,extras,hash,...)
local pathlist={... }
local cleanpath=helpers.cleanpath
local trace=helpers.trace
local report=helpers.report
- for p=1,#pathlist do
- local paths=pathlist[p]
- for i=1,#paths do
- local path=cleanpath(paths[i])
- if not libhash[path] then
- if trace then
- report("! extra lua path: %s",path)
- end
- libextras[#libextras+1]=path
- libpaths [#libpaths+1]=path
+ local function add(path)
+ local path=cleanpath(path)
+ if not hash[path] then
+ if trace then
+ report("! extra %s path: %s",what,path)
end
+ paths [#paths+1]=path
+ extras[#extras+1]=path
end
end
-end
-function package.extraclibpath(...)
- clibpaths=getclibpaths()
- local pathlist={... }
- local cleanpath=helpers.cleanpath
- local trace=helpers.trace
- local report=helpers.report
for p=1,#pathlist do
- local paths=pathlist[p]
- for i=1,#paths do
- local path=cleanpath(paths[i])
- if not clibhash[path] then
- if trace then
- report("! extra lib path: %s",path)
- end
- clibextras[#clibextras+1]=path
- clibpaths [#clibpaths+1]=path
+ local path=pathlist[p]
+ if type(path)=="table" then
+ for i=1,#path do
+ add(path[i])
end
+ else
+ add(path)
end
end
+ return paths,extras
+end
+function package.extralibpath(...)
+ libpaths,libextras=addpath("lua",getlibpaths(),libextras,libhash,...)
+end
+function package.extraclibpath(...)
+ clibpaths,clibextras=addpath("lib",getclibpaths(),clibextras,clibhash,...)
end
if not searchers[-2] then
searchers[-2]=searchers[2]
@@ -213,14 +207,19 @@ end
searchers[2]=function(name)
return helpers.loaded(name)
end
+searchers[3]=nil
local function loadedaslib(resolved,rawname)
- return package.loadlib(resolved,"luaopen_"..gsub(rawname,"%.","_"))
+ local init="luaopen_"..gsub(rawname,"%.","_")
+ if helpers.trace then
+ helpers.report("! calling loadlib with '%s' with init '%s'",resolved,init)
+ end
+ return package.loadlib(resolved,init)
end
local function loadedbylua(name)
if helpers.trace then
helpers.report("! locating '%s' using normal loader",name)
end
- return searchers[-2](name)
+ return true,searchers[-2](name)
end
local function loadedbypath(name,rawname,paths,islib,what)
local trace=helpers.trace
@@ -239,9 +238,9 @@ local function loadedbypath(name,rawname,paths,islib,what)
report("! lib '%s' located on '%s'",name,resolved)
end
if islib then
- return loadedaslib(resolved,rawname)
+ return true,loadedaslib(resolved,rawname)
else
- return loadfile(resolved)
+ return true,loadfile(resolved)
end
end
end
@@ -261,11 +260,23 @@ function helpers.loaded(name)
local libname=addsuffix(thename,os.libsuffix or "so")
local libpaths=getlibpaths()
local clibpaths=getclibpaths()
- return loadedbypath(luaname,name,libpaths,false,"lua")
- or loadedbypath(luaname,name,clibpaths,false,"lua")
- or loadedbypath(libname,name,clibpaths,true,"lib")
- or loadedbylua(name)
- or notloaded(name)
+ local done,result=loadedbypath(luaname,name,libpaths,false,"lua")
+ if done then
+ return result
+ end
+ local done,result=loadedbypath(luaname,name,clibpaths,false,"lua")
+ if done then
+ return result
+ end
+ local done,result=loadedbypath(libname,name,clibpaths,true,"lib")
+ if done then
+ return result
+ end
+ local done,result=loadedbylua(name)
+ if done then
+ return result
+ end
+ return notloaded(name)
end
@@ -3344,7 +3355,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-dir"] = package.loaded["l-dir"] or true
--- original size: 13035, stripped down to: 8133
+-- original size: 13139, stripped down to: 8196
if not modules then modules={} end modules ['l-dir']={
version=1.001,
@@ -3366,6 +3377,7 @@ local walkdir=lfs.dir
local isdir=lfs.isdir
local isfile=lfs.isfile
local currentdir=lfs.currentdir
+local chdir=lfs.chdir
if not isdir then
function isdir(name)
local a=attributes(name)
@@ -3622,7 +3634,7 @@ if onwindows then
function dir.expandname(str)
local first,nothing,last=match(str,"^(//)(//*)(.*)$")
if first then
- first=dir.current().."/"
+ first=dir.current().."/"
end
if not first then
first,last=match(str,"^(//)/*(.*)$")
@@ -3631,10 +3643,10 @@ if onwindows then
first,last=match(str,"^([a-zA-Z]:)(.*)$")
if first and not find(last,"^/") then
local d=currentdir()
- if lfs.chdir(first) then
+ if chdir(first) then
first=dir.current()
end
- lfs.chdir(d)
+ chdir(d)
end
end
if not first then
@@ -3664,12 +3676,15 @@ end
file.expandname=dir.expandname
local stack={}
function dir.push(newdir)
- insert(stack,lfs.currentdir())
+ insert(stack,currentdir())
+ if newdir and newdir~="" then
+ chdir(newdir)
+ end
end
function dir.pop()
local d=remove(stack)
if d then
- lfs.chdir(d)
+ chdir(d)
end
return d
end
@@ -5143,7 +5158,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-sto"] = package.loaded["util-sto"] or true
--- original size: 4237, stripped down to: 2975
+-- original size: 4432, stripped down to: 3123
if not modules then modules={} end modules ['util-sto']={
version=1.001,
@@ -5152,7 +5167,7 @@ if not modules then modules={} end modules ['util-sto']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local setmetatable,getmetatable=setmetatable,getmetatable
+local setmetatable,getmetatable,type=setmetatable,getmetatable,type
utilities=utilities or {}
utilities.storage=utilities.storage or {}
local storage=utilities.storage
@@ -5219,6 +5234,9 @@ local t_self={ __index=f_self }
local t_table={ __index=f_table }
local t_ignore={ __newindex=f_ignore }
function table.setmetatableindex(t,f)
+ if type(t)~="table" then
+ f,t=t,{}
+ end
local m=getmetatable(t)
if m then
if f=="empty" then
@@ -5244,6 +5262,9 @@ function table.setmetatableindex(t,f)
return t
end
function table.setmetatablenewindex(t,f)
+ if type(t)~="table" then
+ f,t=t,{}
+ end
local m=getmetatable(t)
if m then
if f=="ignore" then
@@ -5261,6 +5282,9 @@ function table.setmetatablenewindex(t,f)
return t
end
function table.setmetatablecall(t,f)
+ if type(t)~="table" then
+ f,t=t,{}
+ end
local m=getmetatable(t)
if m then
m.__call=f
@@ -7882,7 +7906,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["luat-env"] = package.loaded["luat-env"] or true
--- original size: 5597, stripped down to: 3965
+-- original size: 5874, stripped down to: 4184
if not modules then modules={} end modules ['luat-env']={
version=1.001,
@@ -7908,6 +7932,14 @@ local mt={
else
return "unknown"
end
+ elseif k=="kind" then
+ local kind=tex.toks and tex.toks.contextkindtoks
+ if kind and kind~="" then
+ rawset(environment,"kind",kind)
+ return kind
+ else
+ return "unknown"
+ end
elseif k=="jobname" or k=="formatname" then
local name=tex and tex[k]
if name or name=="" then
@@ -12642,7 +12674,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-res"] = package.loaded["data-res"] or true
--- original size: 60140, stripped down to: 42335
+-- original size: 60509, stripped down to: 42429
if not modules then modules={} end modules ['data-res']={
version=1.001,
@@ -13330,7 +13362,7 @@ local function collect_files(names)
local files=blobpath and instance.files[blobpath]
if files then
if trace_detail then
- report_resolving("deep checking %a (%s)",blobpath,bname)
+ report_resolving("deep checking %a, base %a, pattern %a",blobpath,bname,dname)
end
local blobfile=files[bname]
if not blobfile then
@@ -13461,7 +13493,7 @@ local function find_wildcard(filename,allresults)
end
end
end
-local function find_qualified(filename,allresults)
+local function find_qualified(filename,allresults,askedformat,alsostripped)
if not file.is_qualified_path(filename) then
return
end
@@ -13493,7 +13525,7 @@ local function find_qualified(filename,allresults)
end
end
end
- if suffix and suffix~="" then
+ if alsostripped and suffix and suffix~="" then
local basename=filebasename(filename)
local pattern=lpegmatch(preparetreepattern,filename)
local savedformat=askedformat
@@ -13693,7 +13725,7 @@ collect_instance_files=function(filename,askedformat,allresults)
local results={
{ find_direct (filename,true) },
{ find_wildcard (filename,true) },
- { find_qualified(filename,true) },
+ { find_qualified(filename,true,askedformat) },
{ find_intree (filename,filetype,wantedfiles,true) },
{ find_onpath (filename,filetype,wantedfiles,true) },
{ find_otherwise(filename,filetype,wantedfiles,true) },
@@ -13732,7 +13764,7 @@ collect_instance_files=function(filename,askedformat,allresults)
if not result then
method,result=find_wildcard(filename)
if not result then
- method,result=find_qualified(filename)
+ method,result=find_qualified(filename,false,askedformat)
if not result then
filetype,wantedfiles=find_analyze(filename,askedformat)
method,result=find_intree(filename,filetype,wantedfiles)
@@ -15077,7 +15109,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["data-lua"] = package.loaded["data-lua"] or true
--- original size: 3796, stripped down to: 3187
+-- original size: 4333, stripped down to: 3534
if not modules then modules={} end modules ['data-lua']={
version=1.001,
@@ -15155,9 +15187,9 @@ local function loadedbyformat(name,rawname,suffixes,islib)
report("! lib %a located on %a",name,resolved)
end
if islib then
- return loadedaslib(resolved,rawname)
+ return true,loadedaslib(resolved,rawname)
else
- return loadfile(resolved)
+ return true,loadfile(resolved)
end
end
end
@@ -15169,14 +15201,33 @@ function helpers.loaded(name)
local libname=addsuffix(thename,os.libsuffix)
local libpaths=getlibpaths()
local clibpaths=getclibpaths()
- return loadedbyformat(luaname,name,libsuffixes,false)
- or loadedbyformat(libname,name,clibsuffixes,true)
- or loadedbypath(luaname,name,libpaths,false,"lua")
- or loadedbypath(luaname,name,clibpaths,false,"lua")
- or loadedbypath(libname,name,clibpaths,true,"lib")
- or loadedbylua(name)
- or notloaded(name)
+ local done,result=loadedbyformat(luaname,name,libsuffixes,false)
+ if done then
+ return result
+ end
+ local done,result=loadedbyformat(libname,name,clibsuffixes,true)
+ if done then
+ return result
+ end
+ local done,result=loadedbypath(luaname,name,libpaths,false,"lua")
+ if done then
+ return result
+ end
+ local done,result=loadedbypath(luaname,name,clibpaths,false,"lua")
+ if done then
+ return result
+ end
+ local done,result=loadedbypath(libname,name,clibpaths,true,"lib")
+ if done then
+ return result
+ end
+ local done,result=loadedbylua(name)
+ if done then
+ return result
+ end
+ return notloaded(name)
end
+package.searchers[3]=nil
resolvers.loadlualib=require
@@ -15623,8 +15674,8 @@ end -- of closure
-- used libraries : l-lua.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-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 luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 644822
--- stripped bytes : 232608
+-- original bytes : 648348
+-- stripped bytes : 235055
-- end library merge