diff options
Diffstat (limited to 'scripts/context/lua/mtxrun.lua')
-rw-r--r-- | scripts/context/lua/mtxrun.lua | 295 |
1 files changed, 143 insertions, 152 deletions
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index e9c88b1f3..ac105dea6 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -144,7 +144,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-package"] = package.loaded["l-package"] or true --- original size: 9609, stripped down to: 7069 +-- original size: 9869, stripped down to: 7030 if not modules then modules={} end modules ['l-package']={ version=1.001, @@ -198,18 +198,57 @@ local extraluapaths={} local extralibpaths={} local luapaths=nil local libpaths=nil +local oldluapath=nil +local oldlibpath=nil +local nofextralua=-1 +local nofextralib=-1 +local nofpathlua=-1 +local nofpathlib=-1 +local function listpaths(what,paths) + local nofpaths=#paths + if nofpaths>0 then + for i=1,nofpaths do + helpers.report("using %s path %i: %s",what,i,paths[i]) + end + else + helpers.report("no %s paths defined",what) + end + return nofpaths +end local function getextraluapaths() + if helpers.trace and #extraluapaths~=nofextralua then + nofextralua=listpaths("extra lua",extraluapaths) + end return extraluapaths end local function getextralibpaths() + if helpers.trace and #extralibpaths~=nofextralib then + nofextralib=listpaths("extra lib",extralibpaths) + end return extralibpaths end local function getluapaths() - luapaths=luapaths or file.splitpath(package.path,";") + local luapath=package.path or "" + if oldluapath~=luapath then + luapaths=file.splitpath(luapath,";") + oldluapath=luapath + nofpathlua=-1 + end + if helpers.trace and #luapaths~=nofpathlua then + nofpathlua=listpaths("builtin lua",luapaths) + end return luapaths end local function getlibpaths() - libpaths=libpaths or file.splitpath(package.cpath,";") + local libpath=package.cpath or "" + if oldlibpath~=libpath then + libpaths=file.splitpath(libpath,";") + oldlibpath=libpath + nofpathlib=-1 + end + if helpers.trace and #libpaths~=nofpathlib then + nofpathlib=listpaths("builtin lib",libpaths) + end return libpaths end package.luapaths=getluapaths @@ -259,8 +298,9 @@ end function package.extralibpath(...) registerpath("extra lib","lib",extralibpaths,...) end -local function loadedaslib(resolved,rawname) - local init="luaopen_"..gsub(rawname,"%.","_") +local function loadedaslib(resolved,rawname) + local base=gsub(rawname,"%.","_") + local init="luaopen_"..gsub(base,"%.","_") if helpers.trace then helpers.report("calling loadlib with '%s' with init '%s'",resolved,init) end @@ -269,143 +309,91 @@ end helpers.loadedaslib=loadedaslib local function loadedbypath(name,rawname,paths,islib,what) local trace=helpers.trace - local report=helpers.report - if trace then - report("locating '%s' as '%s' on '%s' paths",rawname,name,what) - end for p=1,#paths do local path=paths[p] local resolved=filejoin(path,name) - if trace then - report("checking '%s' using '%s' path '%s'",name,what,path) + if trace then + helpers.report("%s path, identifying '%s' on '%s'",what,name,path) end if isreadable(resolved) then if trace then - report("'%s' located on '%s'",name,resolved) + helpers.report("%s path, '%s' found on '%s'",what,name,resolved) end - local result=nil if islib then - result=loadedaslib(resolved,rawname) + return loadedaslib(resolved,rawname) else - result=loadfile(resolved) - end - if result then - result() + return loadfile(resolved) end - return true,result end end end helpers.loadedbypath=loadedbypath methods["already loaded"]=function(name) - local result=package.loaded[name] - if result then - return true,result - end + return package.loaded[name] end methods["preload table"]=function(name) - local result=builtin["preload table"](name) - if type(result)=="function" then - return true,result - end + return builtin["preload table"](name) end methods["lua extra list"]=function(name) - local thename=lualibfile(name) - local luaname=addsuffix(thename,"lua") - local luapaths=getextraluapaths() - local done,result=loadedbypath(luaname,name,luapaths,false,"lua") - if done then - return true,result - end + return loadedbypath(addsuffix(lualibfile(name),"lua" ),name,getextraluapaths(),false,"lua") end methods["lib extra list"]=function(name) - local thename=lualibfile(name) - local libname=addsuffix(thename,os.libsuffix) - local libpaths=getextralibpaths() - local done,result=loadedbypath(libname,name,libpaths,true,"lib") - if done then - return true,result - end + return loadedbypath(addsuffix(lualibfile(name),os.libsuffix),name,getextralibpaths(),true,"lib") end -local shown=false methods["path specification"]=function(name) - if not shown and helpers.trace then - local luapaths=getluapaths() - if #luapaths>0 then - helpers.report("using %s built in lua paths",#luapaths) - else - helpers.report("no built in lua paths defined") - end - shown=true - end - local result=builtin["path specification"](name) - if type(result)=="function" then - return true,result() - end + getluapaths() + return builtin["path specification"](name) end -local shown=false methods["cpath specification"]=function(name) - if not shown and helpers.trace then - local libpaths=getlibpaths() - if #libpaths>0 then - helpers.report("using %s built in lib paths",#libpaths) - else - helpers.report("no built in lib paths defined") - end - shown=true - end - local result=builtin["cpath specification"](name) - if type(result)=="function" then - return true,result() - end + getlibpaths() + return builtin["cpath specification"](name) end methods["all in one fallback"]=function(name) - local result=builtin["all in one fallback"](name) - if type(result)=="function" then - return true,result() - end + return builtin["all in one fallback"](name) end +local nomore=function() return nil,"no more loaders" end methods["not loaded"]=function(name) if helpers.trace then helpers.report("unable to locate '%s'",name) end + return nomore end +local level=0 +local dummy=function() return nil end function helpers.loaded(name) local sequence=helpers.sequence + level=level+1 for i=1,#sequence do - local step=sequence[i] + local method=sequence[i] if helpers.trace then - helpers.report("locating '%s' using method '%s'",name,step) + helpers.report("%s, level '%s', method '%s', name '%s'","locating",level,method,name) end - local done,result=methods[step](name) - if done then + local result,rest=methods[method](name) + if type(result)=="function" then if helpers.trace then - helpers.report("'%s' located via method '%s' returns '%s'",name,step,type(result)) + helpers.report("%s, level '%s', method '%s', name '%s'","found",level,method,name) end - if result then - package.loaded[name]=result - end - return result + level=level-1 + return result,rest end end - return nil + if helpers.trace then + helpers.report("%s, level '%s', method '%s', name '%s'","not found",level,method,name) + end + level=level-1 + return nomore end function helpers.unload(name) if helpers.trace then if package.loaded[name] then - helpers.report("unloading '%s', %s",name,"done") + helpers.report("unloading, name '%s', %s",name,"done") else - helpers.report("unloading '%s', %s",name,"not loaded") + helpers.report("unloading, name '%s', %s",name,"not loaded") end end - package.loaded[name]=nil + package.loaded[name]=nil end -searchers[1]=nil -searchers[2]=nil -searchers[3]=nil -searchers[4]=nil -helpers.savedrequire=helpers.savedrequire or require -require=helpers.loaded +table.insert(searchers,1,helpers.loaded) end -- of closure @@ -1113,7 +1101,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-table"] = package.loaded["l-table"] or true --- original size: 44643, stripped down to: 19717 +-- original size: 44626, stripped down to: 19688 if not modules then modules={} end modules ['l-table']={ version=1.001, @@ -1745,7 +1733,7 @@ function table.tofile(filename,root,name,specification) io.flush() end end -local function flattened(t,f,depth) +local function flattened(t,f,depth) if f==nil then f={} depth=0xFFFF @@ -1760,19 +1748,16 @@ local function flattened(t,f,depth) if depth>0 and type(v)=="table" then flattened(v,f,depth-1) else - f[k]=v + f[#f+1]=v end end end - local n=#f for k=1,#t do local v=t[k] if depth>0 and type(v)=="table" then flattened(v,f,depth-1) - n=#f else - n=n+1 - f[n]=v + f[#f+1]=v end end return f @@ -2517,7 +2502,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-os"] = package.loaded["l-os"] or true --- original size: 13692, stripped down to: 8406 +-- original size: 14017, stripped down to: 8504 if not modules then modules={} end modules ['l-os']={ version=1.001, @@ -2828,8 +2813,14 @@ end function os.now() return date("!%Y-%m-%d %H:%M:%S") end -if not os.sleep and socket then - os.sleep=socket.sleep +if not os.sleep then + local socket=socket + function os.sleep(n) + if not socket then + socket=require("socket") + end + socket.sleep(n) + end end @@ -3488,7 +3479,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-dir"] = package.loaded["l-dir"] or true --- original size: 13139, stripped down to: 8196 +-- original size: 13738, stripped down to: 8560 if not modules then modules={} end modules ['l-dir']={ version=1.001, @@ -3499,7 +3490,7 @@ if not modules then modules={} end modules ['l-dir']={ } local type,select=type,select local find,gmatch,match,gsub=string.find,string.gmatch,string.match,string.gsub -local concat,insert,remove=table.concat,table.insert,table.remove +local concat,insert,remove,unpack=table.concat,table.insert,table.remove,table.unpack local lpegmatch=lpeg.match local P,S,R,C,Cc,Cs,Ct,Cv,V=lpeg.P,lpeg.S,lpeg.R,lpeg.C,lpeg.Cc,lpeg.Cs,lpeg.Ct,lpeg.Cv,lpeg.V dir=dir or {} @@ -3821,6 +3812,23 @@ function dir.pop() end return d end +local function found(...) + for i=1,select("#",...) do + local path=select(i,...) + local kind=type(path) + if kind=="string" then + if isdir(path) then + return path + end + elseif kind=="table" then + local path=found(unpack(path)) + if path then + return path + end + end + end +end +dir.found=found end -- of closure @@ -7819,7 +7827,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-env"] = package.loaded["util-env"] or true --- original size: 7702, stripped down to: 4701 +-- original size: 8722, stripped down to: 5050 if not modules then modules={} end modules ['util-env']={ version=1.001, @@ -7966,6 +7974,21 @@ function environment.reconstructcommandline(arg,noquote) return "" end end +function environment.relativepath(path,root) + if not path then + path="" + end + if not file.is_rootbased_path(path) then + if not root then + root=file.pathpart(environment.ownscript or environment.ownname or ".") + end + if root=="" then + root="." + end + path=root.."/"..path + end + return file.collapsepath(path,true) +end if arg then local newarg,instring={},false for index=1,#arg do @@ -15231,7 +15254,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-lua"] = package.loaded["data-lua"] or true --- original size: 5080, stripped down to: 3874 +-- original size: 4237, stripped down to: 3177 if not modules then modules={} end modules ['data-lua']={ version=1.001, @@ -15271,7 +15294,6 @@ function helpers.cleanpath(path) return resolvers.resolve(lpegmatch(pattern,path)) end local loadedaslib=helpers.loadedaslib -local loadedbypath=helpers.loadedbypath local getextraluapaths=package.extraluapaths local getextralibpaths=package.extralibpaths local registerpath=helpers.registerpath @@ -15296,72 +15318,41 @@ local function getlibformatpaths() end return libformatpaths end -local function loadedbyformat(name,rawname,suffixes,islib) +local function loadedbyformat(name,rawname,suffixes,islib,what) local trace=helpers.trace local report=helpers.report - if trace then - report("locating %a as %a using formats %a",rawname,name,suffixes) - end for i=1,#suffixes do local format=suffixes[i] local resolved=resolvers.findfile(name,format) or "" if trace then - report("checking %a using format %a",name,format) + report("%s format, identifying %a using format %a",what,name,format) end if resolved~="" then if trace then - report("lib %a located on %a",name,resolved) + report("%s format, %a found on %a",what,name,resolved) end - local result=nil if islib then - result=loadedaslib(resolved,rawname) + return loadedaslib(resolved,rawname) else - result=loadfile(resolved) - end - if result then - return true,result() + return loadfile(resolved) end end end end helpers.loadedbyformat=loadedbyformat -local shown=false methods["lua variable format"]=function(name) - if not shown and helpers.trace then - local luapaths=getluaformatpaths() - if #luapaths>0 then - helpers.report("using %s lua format paths",#luapaths) - else - helpers.report("no lua format paths defined") - end - shown=true - end - local thename=lualibfile(name) - local luaname=addsuffix(thename,"lua") - local done,result=loadedbyformat(luaname,name,luasuffixes,false) - if done then - return true,result + if helpers.trace then + helpers.report("%s format, checking %s paths","lua",#getluaformatpaths()) end + return loadedbyformat(addsuffix(lualibfile(name),"lua"),name,luasuffixes,false,"lua") end -local shown=false methods["lib variable format"]=function(name) - if not shown and helpers.trace then - local libpaths=getlibformatpaths() - if #libpaths>0 then - helpers.report("using %s lib format paths",#libpaths) - else - helpers.report("no lib format paths defined") - end - shown=true - end - local thename=lualibfile(name) - local libname=addsuffix(thename,os.libsuffix) - local done,result=loadedbyformat(libname,name,libsuffixes,true) - if done then - return true,result + if helpers.trace then + helpers.report("%s format, checking %s paths","lib",#getlibformatpaths()) end + return loadedbyformat(addsuffix(lualibfile(name),os.libsuffix),name,libsuffixes,true,"lib") end -resolvers.loadlualib=require +resolvers.loadlualib=require end -- of closure @@ -15982,8 +15973,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-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 : 665667 --- stripped bytes : 243168 +-- original bytes : 667011 +-- stripped bytes : 244466 -- end library merge |