diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/context/lua/mtx-context.lua | 2 | ||||
-rw-r--r-- | scripts/context/lua/mtxrun.lua | 125 | ||||
-rw-r--r-- | scripts/context/stubs/mswin/mtxrun.lua | 125 | ||||
-rw-r--r-- | scripts/context/stubs/unix/mtxrun | 125 |
4 files changed, 238 insertions, 139 deletions
diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua index cee926a6e..38cffe63e 100644 --- a/scripts/context/lua/mtx-context.lua +++ b/scripts/context/lua/mtx-context.lua @@ -589,7 +589,7 @@ scripts.context.defaultformats = { -- "plain" } -local function analyze(filename) +local function analyze(filename) -- only files on current path local f = io.open(file.addsuffix(filename,"tex")) if f then local t = { } diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index f83f0d41d..a42713378 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -1589,7 +1589,8 @@ if not modules then modules = { } end modules ['l-number'] = { } local tostring = tostring -local format, floor, insert, match = string.format, math.floor, table.insert, string.match +local format, floor, insert, match = string.format, math.floor, string.match +local concat, insert = table.concat, table.insert local lpegmatch = lpeg.match number = number or { } @@ -1657,6 +1658,19 @@ function number.clearbit(x, p) return hasbit(x, p) and x - p or x end +function number.tobitstring(n) + if n == 0 then + return "0" + else + local t = { } + while n > 0 do + insert(t,1,n % 2 > 0 and 1 or 0) + n = floor(n/2) + end + return concat(t) + end +end + end -- of closure @@ -3443,7 +3457,6 @@ function utilities.lua.compile(luafile,lucfile,cleanup,strip) -- defaults: clean end - end -- of closure do -- create closure to overcome 200 locals limit @@ -4233,13 +4246,13 @@ local setters = utilities.setters local data = { } -- maybe just local -- We can initialize from the cnf file. This is sort of tricky as --- laster defined setters also need to be initialized then. If set +-- later defined setters also need to be initialized then. If set -- this way, we need to ensure that they are not reset later on. -local trace_initialize = false +local trace_initialize = false -- only for testing during development -local function report(what,filename,name,key,value) - texio.write_nl(format("%s setter, filename: %s, name: %s, key: %s, value: %s",what,filename,name,key,value)) +local function report(a,b,...) + texio.write_nl(format("%-16s> %s",a,format(b,...))) end function setters.initialize(filename,name,values) -- filename only for diagnostics @@ -4254,7 +4267,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti if functions then if #functions > 0 and not functions.value then if trace_initialize then - report("doing",filename,name,key,value) + report(name,"executing %s (%s -> %s)",key,filename,tostring(value)) end for i=1,#functions do functions[i](value) @@ -4262,7 +4275,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti functions.value = value else if trace_initialize then - report("skipping",filename,name,key,value) + report(name,"skipping %s (%s -> %s)",key,filename,tostring(value)) end end else @@ -4271,7 +4284,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti functions = { default = value } data[key] = functions if trace_initialize then - report("storing",filename,name,key,value) + report(name,"storing %s (%s -> %s)",key,filename,tostring(value)) end end end @@ -4341,11 +4354,17 @@ function setters.register(t,what,...) if not functions then functions = { } data[what] = functions + if trace_initialize then + report(t.name,"defining %s",what) + end end local default = functions.default -- can be set from cnf file for _, fnc in next, { ... } do local typ = type(fnc) if typ == "string" then + if trace_initialize then + report(t.name,"coupling %s to %s",what,fnc) + end local s = fnc -- else wrong reference fnc = function(value) set(t,s,value) end elseif typ ~= "function" then @@ -4353,9 +4372,12 @@ function setters.register(t,what,...) end if fnc then functions[#functions+1] = fnc - if default then - fnc(default) - functions.value = default + -- default: set at command line or in cnf file + -- value : set in tex run (needed when loading runtime) + local value = functions.value or default + if value ~= nil then + fnc(value) + functions.value = value end end end @@ -4405,7 +4427,7 @@ function setters.show(t) 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) - commands.writestatus(category,format("%-25s modules: %2i default: %5s value: %5s",name,modules,default,value)) + commands.writestatus(category,format("%-30s modules: %2i default: %5s value: %5s",name,modules,default,value)) end end commands.writestatus("","") @@ -9415,7 +9437,7 @@ function resolvers.formatofvariable(str) end function resolvers.formatofsuffix(str) -- of file - return suffixmap[file.extname(str)] or 'tex' + return suffixmap[file.extname(str)] or 'tex' -- so many map onto tex (like mkiv, cld etc) end function resolvers.variableofformat(str) @@ -9479,6 +9501,21 @@ local report_resolvers = logs.new("resolvers") local resolvers = resolvers +-- intermezzo + +local directive_cleanup = false directives.register("system.compile.cleanup", function(v) directive_cleanup = v end) +local directive_strip = true directives.register("system.compile.strip", function(v) directive_strip = v end) + +local compile = utilities.lua.compile + +function utilities.lua.compile(luafile,lucfile,cleanup,strip) + if cleanup == nil then cleanup = directive_cleanup end + if strip == nil then strip = directive_strip end + return compile(luafile,lucfile,cleanup,strip) +end + +-- end of intermezzo + caches = caches or { } local caches = caches @@ -9723,9 +9760,7 @@ function caches.savedata(filepath,filename,data,raw) else table.tofile(tmaname, data,'return',false,true,false) -- maybe not the last true end - local cleanup = resolvers.booleanvariable("PURGECACHE", false) - local strip = resolvers.booleanvariable("LUACSTRIP", true) - utilities.lua.compile(tmaname, tmcname, cleanup, strip) + utilities.lua.compile(tmaname,tmcname) end -- moved from data-res: @@ -9787,7 +9822,7 @@ function caches.savecontent(cachename,dataname,content) if trace_locating then report_resolvers("category '%s', cachename '%s' saved in '%s'",dataname,cachename,luaname) end - if utilities.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip + if utilities.lua.compile(luaname,lucname) then if trace_locating then report_resolvers("'%s' compiled to '%s'",dataname,lucname) end @@ -9924,6 +9959,8 @@ local dangerous = resolvers.dangerous local suffixmap = resolvers.suffixmap local alternatives = resolvers.alternatives +resolvers.defaultsuffixes = { "tex" } -- "mkiv", "cld" -- too tricky + resolvers.instance = resolvers.instance or nil -- the current one (slow access) local instance = resolvers.instance or nil -- the current one (fast access) @@ -10748,27 +10785,17 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan else local forcedname, ok, suffix = "", false, fileextname(filename) if suffix == "" then -- why - if instance.format == "" then - forcedname = filename .. ".tex" - if resolvers.isreadable.file(forcedname) then - if trace_locating then - report_resolvers("no suffix, forcing standard filetype 'tex'") - end - result, ok = { forcedname }, true - end - else - local format_suffixes = suffixes[instance.format] - if format_suffixes then - for i=1,#format_suffixes do - local s = format_suffixes[i] - forcedname = filename .. "." .. s - if resolvers.isreadable.file(forcedname) then - if trace_locating then - report_resolvers("no suffix, forcing format filetype '%s'", s) - end - result, ok = { forcedname }, true - break + local format_suffixes = instance.format == "" and resolvers.defaultsuffixes or suffixes[instance.format] + if format_suffixes then + for i=1,#format_suffixes do + local s = format_suffixes[i] + forcedname = filename .. "." .. s + if resolvers.isreadable.file(forcedname) then + if trace_locating then + report_resolvers("no suffix, forcing format filetype '%s'", s) end + result, ok = { forcedname }, true + break end end end @@ -10833,11 +10860,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan end if instance.format == "" then if ext == "" or not suffixmap[ext] then - local forcedname = filename .. '.tex' - wantedfiles[#wantedfiles+1] = forcedname - filetype = resolvers.formatofsuffix(forcedname) - if trace_locating then - report_resolvers("forcing filetype '%s'",filetype) + local defaultsuffixes = resolvers.defaultsuffixes + for i=1,#defaultsuffixes do + local forcedname = filename .. '.' .. defaultsuffixes[i] + wantedfiles[#wantedfiles+1] = forcedname + filetype = resolvers.formatofsuffix(forcedname) + if trace_locating then + report_resolvers("forcing filetype '%s'",filetype) + end end else filetype = resolvers.formatofsuffix(filename) @@ -12591,6 +12621,9 @@ if not modules then modules = { } end modules ['luat-fmt'] = { license = "see context related readme files" } + +local format = string.format + -- helper for mtxrun local quote = string.quote @@ -12655,7 +12688,7 @@ function environment.make_format(name) utilities.merger.selfcreate(usedlualibs,specificationpath,luastubname) -- compile stub file (does not save that much as we don't use this stub at startup any more) local strip = resolvers.booleanvariable("LUACSTRIP", true) - if utilities.lua.compile(luastubname,lucstubname,false,strip) and lfs.isfile(lucstubname) then + if utilities.lua.compile(luastubname,lucstubname) and lfs.isfile(lucstubname) then logs.simple("using compiled initialization file: %s",lucstubname) usedluastub = lucstubname else @@ -12668,7 +12701,7 @@ function environment.make_format(name) return end -- generate format - local command = string.format("luatex --ini %s --lua=%s %s %sdump",primaryflags(),quote(usedluastub),quote(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\") + local command = format("luatex --ini %s --lua=%s %s %sdump",primaryflags(),quote(usedluastub),quote(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\") logs.simple("running command: %s\n",command) os.spawn(command) -- remove related mem files @@ -12707,7 +12740,7 @@ function environment.run_format(name,data,more) logs.simple("no luc/lua with name: %s",barename) else local q = string.quote - local command = string.format("luatex %s --fmt=%s --lua=%s %s %s",primaryflags(),quote(barename),quote(luaname),quote(data),more ~= "" and quote(more) or "") + local command = format("luatex %s --fmt=%s --lua=%s %s %s",primaryflags(),quote(barename),quote(luaname),quote(data),more ~= "" and quote(more) or "") logs.simple("running command: %s",command) os.spawn(command) end diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index f83f0d41d..a42713378 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -1589,7 +1589,8 @@ if not modules then modules = { } end modules ['l-number'] = { } local tostring = tostring -local format, floor, insert, match = string.format, math.floor, table.insert, string.match +local format, floor, insert, match = string.format, math.floor, string.match +local concat, insert = table.concat, table.insert local lpegmatch = lpeg.match number = number or { } @@ -1657,6 +1658,19 @@ function number.clearbit(x, p) return hasbit(x, p) and x - p or x end +function number.tobitstring(n) + if n == 0 then + return "0" + else + local t = { } + while n > 0 do + insert(t,1,n % 2 > 0 and 1 or 0) + n = floor(n/2) + end + return concat(t) + end +end + end -- of closure @@ -3443,7 +3457,6 @@ function utilities.lua.compile(luafile,lucfile,cleanup,strip) -- defaults: clean end - end -- of closure do -- create closure to overcome 200 locals limit @@ -4233,13 +4246,13 @@ local setters = utilities.setters local data = { } -- maybe just local -- We can initialize from the cnf file. This is sort of tricky as --- laster defined setters also need to be initialized then. If set +-- later defined setters also need to be initialized then. If set -- this way, we need to ensure that they are not reset later on. -local trace_initialize = false +local trace_initialize = false -- only for testing during development -local function report(what,filename,name,key,value) - texio.write_nl(format("%s setter, filename: %s, name: %s, key: %s, value: %s",what,filename,name,key,value)) +local function report(a,b,...) + texio.write_nl(format("%-16s> %s",a,format(b,...))) end function setters.initialize(filename,name,values) -- filename only for diagnostics @@ -4254,7 +4267,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti if functions then if #functions > 0 and not functions.value then if trace_initialize then - report("doing",filename,name,key,value) + report(name,"executing %s (%s -> %s)",key,filename,tostring(value)) end for i=1,#functions do functions[i](value) @@ -4262,7 +4275,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti functions.value = value else if trace_initialize then - report("skipping",filename,name,key,value) + report(name,"skipping %s (%s -> %s)",key,filename,tostring(value)) end end else @@ -4271,7 +4284,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti functions = { default = value } data[key] = functions if trace_initialize then - report("storing",filename,name,key,value) + report(name,"storing %s (%s -> %s)",key,filename,tostring(value)) end end end @@ -4341,11 +4354,17 @@ function setters.register(t,what,...) if not functions then functions = { } data[what] = functions + if trace_initialize then + report(t.name,"defining %s",what) + end end local default = functions.default -- can be set from cnf file for _, fnc in next, { ... } do local typ = type(fnc) if typ == "string" then + if trace_initialize then + report(t.name,"coupling %s to %s",what,fnc) + end local s = fnc -- else wrong reference fnc = function(value) set(t,s,value) end elseif typ ~= "function" then @@ -4353,9 +4372,12 @@ function setters.register(t,what,...) end if fnc then functions[#functions+1] = fnc - if default then - fnc(default) - functions.value = default + -- default: set at command line or in cnf file + -- value : set in tex run (needed when loading runtime) + local value = functions.value or default + if value ~= nil then + fnc(value) + functions.value = value end end end @@ -4405,7 +4427,7 @@ function setters.show(t) 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) - commands.writestatus(category,format("%-25s modules: %2i default: %5s value: %5s",name,modules,default,value)) + commands.writestatus(category,format("%-30s modules: %2i default: %5s value: %5s",name,modules,default,value)) end end commands.writestatus("","") @@ -9415,7 +9437,7 @@ function resolvers.formatofvariable(str) end function resolvers.formatofsuffix(str) -- of file - return suffixmap[file.extname(str)] or 'tex' + return suffixmap[file.extname(str)] or 'tex' -- so many map onto tex (like mkiv, cld etc) end function resolvers.variableofformat(str) @@ -9479,6 +9501,21 @@ local report_resolvers = logs.new("resolvers") local resolvers = resolvers +-- intermezzo + +local directive_cleanup = false directives.register("system.compile.cleanup", function(v) directive_cleanup = v end) +local directive_strip = true directives.register("system.compile.strip", function(v) directive_strip = v end) + +local compile = utilities.lua.compile + +function utilities.lua.compile(luafile,lucfile,cleanup,strip) + if cleanup == nil then cleanup = directive_cleanup end + if strip == nil then strip = directive_strip end + return compile(luafile,lucfile,cleanup,strip) +end + +-- end of intermezzo + caches = caches or { } local caches = caches @@ -9723,9 +9760,7 @@ function caches.savedata(filepath,filename,data,raw) else table.tofile(tmaname, data,'return',false,true,false) -- maybe not the last true end - local cleanup = resolvers.booleanvariable("PURGECACHE", false) - local strip = resolvers.booleanvariable("LUACSTRIP", true) - utilities.lua.compile(tmaname, tmcname, cleanup, strip) + utilities.lua.compile(tmaname,tmcname) end -- moved from data-res: @@ -9787,7 +9822,7 @@ function caches.savecontent(cachename,dataname,content) if trace_locating then report_resolvers("category '%s', cachename '%s' saved in '%s'",dataname,cachename,luaname) end - if utilities.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip + if utilities.lua.compile(luaname,lucname) then if trace_locating then report_resolvers("'%s' compiled to '%s'",dataname,lucname) end @@ -9924,6 +9959,8 @@ local dangerous = resolvers.dangerous local suffixmap = resolvers.suffixmap local alternatives = resolvers.alternatives +resolvers.defaultsuffixes = { "tex" } -- "mkiv", "cld" -- too tricky + resolvers.instance = resolvers.instance or nil -- the current one (slow access) local instance = resolvers.instance or nil -- the current one (fast access) @@ -10748,27 +10785,17 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan else local forcedname, ok, suffix = "", false, fileextname(filename) if suffix == "" then -- why - if instance.format == "" then - forcedname = filename .. ".tex" - if resolvers.isreadable.file(forcedname) then - if trace_locating then - report_resolvers("no suffix, forcing standard filetype 'tex'") - end - result, ok = { forcedname }, true - end - else - local format_suffixes = suffixes[instance.format] - if format_suffixes then - for i=1,#format_suffixes do - local s = format_suffixes[i] - forcedname = filename .. "." .. s - if resolvers.isreadable.file(forcedname) then - if trace_locating then - report_resolvers("no suffix, forcing format filetype '%s'", s) - end - result, ok = { forcedname }, true - break + local format_suffixes = instance.format == "" and resolvers.defaultsuffixes or suffixes[instance.format] + if format_suffixes then + for i=1,#format_suffixes do + local s = format_suffixes[i] + forcedname = filename .. "." .. s + if resolvers.isreadable.file(forcedname) then + if trace_locating then + report_resolvers("no suffix, forcing format filetype '%s'", s) end + result, ok = { forcedname }, true + break end end end @@ -10833,11 +10860,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan end if instance.format == "" then if ext == "" or not suffixmap[ext] then - local forcedname = filename .. '.tex' - wantedfiles[#wantedfiles+1] = forcedname - filetype = resolvers.formatofsuffix(forcedname) - if trace_locating then - report_resolvers("forcing filetype '%s'",filetype) + local defaultsuffixes = resolvers.defaultsuffixes + for i=1,#defaultsuffixes do + local forcedname = filename .. '.' .. defaultsuffixes[i] + wantedfiles[#wantedfiles+1] = forcedname + filetype = resolvers.formatofsuffix(forcedname) + if trace_locating then + report_resolvers("forcing filetype '%s'",filetype) + end end else filetype = resolvers.formatofsuffix(filename) @@ -12591,6 +12621,9 @@ if not modules then modules = { } end modules ['luat-fmt'] = { license = "see context related readme files" } + +local format = string.format + -- helper for mtxrun local quote = string.quote @@ -12655,7 +12688,7 @@ function environment.make_format(name) utilities.merger.selfcreate(usedlualibs,specificationpath,luastubname) -- compile stub file (does not save that much as we don't use this stub at startup any more) local strip = resolvers.booleanvariable("LUACSTRIP", true) - if utilities.lua.compile(luastubname,lucstubname,false,strip) and lfs.isfile(lucstubname) then + if utilities.lua.compile(luastubname,lucstubname) and lfs.isfile(lucstubname) then logs.simple("using compiled initialization file: %s",lucstubname) usedluastub = lucstubname else @@ -12668,7 +12701,7 @@ function environment.make_format(name) return end -- generate format - local command = string.format("luatex --ini %s --lua=%s %s %sdump",primaryflags(),quote(usedluastub),quote(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\") + local command = format("luatex --ini %s --lua=%s %s %sdump",primaryflags(),quote(usedluastub),quote(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\") logs.simple("running command: %s\n",command) os.spawn(command) -- remove related mem files @@ -12707,7 +12740,7 @@ function environment.run_format(name,data,more) logs.simple("no luc/lua with name: %s",barename) else local q = string.quote - local command = string.format("luatex %s --fmt=%s --lua=%s %s %s",primaryflags(),quote(barename),quote(luaname),quote(data),more ~= "" and quote(more) or "") + local command = format("luatex %s --fmt=%s --lua=%s %s %s",primaryflags(),quote(barename),quote(luaname),quote(data),more ~= "" and quote(more) or "") logs.simple("running command: %s",command) os.spawn(command) end diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index f83f0d41d..a42713378 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -1589,7 +1589,8 @@ if not modules then modules = { } end modules ['l-number'] = { } local tostring = tostring -local format, floor, insert, match = string.format, math.floor, table.insert, string.match +local format, floor, insert, match = string.format, math.floor, string.match +local concat, insert = table.concat, table.insert local lpegmatch = lpeg.match number = number or { } @@ -1657,6 +1658,19 @@ function number.clearbit(x, p) return hasbit(x, p) and x - p or x end +function number.tobitstring(n) + if n == 0 then + return "0" + else + local t = { } + while n > 0 do + insert(t,1,n % 2 > 0 and 1 or 0) + n = floor(n/2) + end + return concat(t) + end +end + end -- of closure @@ -3443,7 +3457,6 @@ function utilities.lua.compile(luafile,lucfile,cleanup,strip) -- defaults: clean end - end -- of closure do -- create closure to overcome 200 locals limit @@ -4233,13 +4246,13 @@ local setters = utilities.setters local data = { } -- maybe just local -- We can initialize from the cnf file. This is sort of tricky as --- laster defined setters also need to be initialized then. If set +-- later defined setters also need to be initialized then. If set -- this way, we need to ensure that they are not reset later on. -local trace_initialize = false +local trace_initialize = false -- only for testing during development -local function report(what,filename,name,key,value) - texio.write_nl(format("%s setter, filename: %s, name: %s, key: %s, value: %s",what,filename,name,key,value)) +local function report(a,b,...) + texio.write_nl(format("%-16s> %s",a,format(b,...))) end function setters.initialize(filename,name,values) -- filename only for diagnostics @@ -4254,7 +4267,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti if functions then if #functions > 0 and not functions.value then if trace_initialize then - report("doing",filename,name,key,value) + report(name,"executing %s (%s -> %s)",key,filename,tostring(value)) end for i=1,#functions do functions[i](value) @@ -4262,7 +4275,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti functions.value = value else if trace_initialize then - report("skipping",filename,name,key,value) + report(name,"skipping %s (%s -> %s)",key,filename,tostring(value)) end end else @@ -4271,7 +4284,7 @@ function setters.initialize(filename,name,values) -- filename only for diagnosti functions = { default = value } data[key] = functions if trace_initialize then - report("storing",filename,name,key,value) + report(name,"storing %s (%s -> %s)",key,filename,tostring(value)) end end end @@ -4341,11 +4354,17 @@ function setters.register(t,what,...) if not functions then functions = { } data[what] = functions + if trace_initialize then + report(t.name,"defining %s",what) + end end local default = functions.default -- can be set from cnf file for _, fnc in next, { ... } do local typ = type(fnc) if typ == "string" then + if trace_initialize then + report(t.name,"coupling %s to %s",what,fnc) + end local s = fnc -- else wrong reference fnc = function(value) set(t,s,value) end elseif typ ~= "function" then @@ -4353,9 +4372,12 @@ function setters.register(t,what,...) end if fnc then functions[#functions+1] = fnc - if default then - fnc(default) - functions.value = default + -- default: set at command line or in cnf file + -- value : set in tex run (needed when loading runtime) + local value = functions.value or default + if value ~= nil then + fnc(value) + functions.value = value end end end @@ -4405,7 +4427,7 @@ function setters.show(t) 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) - commands.writestatus(category,format("%-25s modules: %2i default: %5s value: %5s",name,modules,default,value)) + commands.writestatus(category,format("%-30s modules: %2i default: %5s value: %5s",name,modules,default,value)) end end commands.writestatus("","") @@ -9415,7 +9437,7 @@ function resolvers.formatofvariable(str) end function resolvers.formatofsuffix(str) -- of file - return suffixmap[file.extname(str)] or 'tex' + return suffixmap[file.extname(str)] or 'tex' -- so many map onto tex (like mkiv, cld etc) end function resolvers.variableofformat(str) @@ -9479,6 +9501,21 @@ local report_resolvers = logs.new("resolvers") local resolvers = resolvers +-- intermezzo + +local directive_cleanup = false directives.register("system.compile.cleanup", function(v) directive_cleanup = v end) +local directive_strip = true directives.register("system.compile.strip", function(v) directive_strip = v end) + +local compile = utilities.lua.compile + +function utilities.lua.compile(luafile,lucfile,cleanup,strip) + if cleanup == nil then cleanup = directive_cleanup end + if strip == nil then strip = directive_strip end + return compile(luafile,lucfile,cleanup,strip) +end + +-- end of intermezzo + caches = caches or { } local caches = caches @@ -9723,9 +9760,7 @@ function caches.savedata(filepath,filename,data,raw) else table.tofile(tmaname, data,'return',false,true,false) -- maybe not the last true end - local cleanup = resolvers.booleanvariable("PURGECACHE", false) - local strip = resolvers.booleanvariable("LUACSTRIP", true) - utilities.lua.compile(tmaname, tmcname, cleanup, strip) + utilities.lua.compile(tmaname,tmcname) end -- moved from data-res: @@ -9787,7 +9822,7 @@ function caches.savecontent(cachename,dataname,content) if trace_locating then report_resolvers("category '%s', cachename '%s' saved in '%s'",dataname,cachename,luaname) end - if utilities.lua.compile(luaname,lucname,false,true) then -- no cleanup but strip + if utilities.lua.compile(luaname,lucname) then if trace_locating then report_resolvers("'%s' compiled to '%s'",dataname,lucname) end @@ -9924,6 +9959,8 @@ local dangerous = resolvers.dangerous local suffixmap = resolvers.suffixmap local alternatives = resolvers.alternatives +resolvers.defaultsuffixes = { "tex" } -- "mkiv", "cld" -- too tricky + resolvers.instance = resolvers.instance or nil -- the current one (slow access) local instance = resolvers.instance or nil -- the current one (fast access) @@ -10748,27 +10785,17 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan else local forcedname, ok, suffix = "", false, fileextname(filename) if suffix == "" then -- why - if instance.format == "" then - forcedname = filename .. ".tex" - if resolvers.isreadable.file(forcedname) then - if trace_locating then - report_resolvers("no suffix, forcing standard filetype 'tex'") - end - result, ok = { forcedname }, true - end - else - local format_suffixes = suffixes[instance.format] - if format_suffixes then - for i=1,#format_suffixes do - local s = format_suffixes[i] - forcedname = filename .. "." .. s - if resolvers.isreadable.file(forcedname) then - if trace_locating then - report_resolvers("no suffix, forcing format filetype '%s'", s) - end - result, ok = { forcedname }, true - break + local format_suffixes = instance.format == "" and resolvers.defaultsuffixes or suffixes[instance.format] + if format_suffixes then + for i=1,#format_suffixes do + local s = format_suffixes[i] + forcedname = filename .. "." .. s + if resolvers.isreadable.file(forcedname) then + if trace_locating then + report_resolvers("no suffix, forcing format filetype '%s'", s) end + result, ok = { forcedname }, true + break end end end @@ -10833,11 +10860,14 @@ local function collect_instance_files(filename,collected) -- todo : plugin (scan end if instance.format == "" then if ext == "" or not suffixmap[ext] then - local forcedname = filename .. '.tex' - wantedfiles[#wantedfiles+1] = forcedname - filetype = resolvers.formatofsuffix(forcedname) - if trace_locating then - report_resolvers("forcing filetype '%s'",filetype) + local defaultsuffixes = resolvers.defaultsuffixes + for i=1,#defaultsuffixes do + local forcedname = filename .. '.' .. defaultsuffixes[i] + wantedfiles[#wantedfiles+1] = forcedname + filetype = resolvers.formatofsuffix(forcedname) + if trace_locating then + report_resolvers("forcing filetype '%s'",filetype) + end end else filetype = resolvers.formatofsuffix(filename) @@ -12591,6 +12621,9 @@ if not modules then modules = { } end modules ['luat-fmt'] = { license = "see context related readme files" } + +local format = string.format + -- helper for mtxrun local quote = string.quote @@ -12655,7 +12688,7 @@ function environment.make_format(name) utilities.merger.selfcreate(usedlualibs,specificationpath,luastubname) -- compile stub file (does not save that much as we don't use this stub at startup any more) local strip = resolvers.booleanvariable("LUACSTRIP", true) - if utilities.lua.compile(luastubname,lucstubname,false,strip) and lfs.isfile(lucstubname) then + if utilities.lua.compile(luastubname,lucstubname) and lfs.isfile(lucstubname) then logs.simple("using compiled initialization file: %s",lucstubname) usedluastub = lucstubname else @@ -12668,7 +12701,7 @@ function environment.make_format(name) return end -- generate format - local command = string.format("luatex --ini %s --lua=%s %s %sdump",primaryflags(),quote(usedluastub),quote(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\") + local command = format("luatex --ini %s --lua=%s %s %sdump",primaryflags(),quote(usedluastub),quote(fulltexsourcename),os.platform == "unix" and "\\\\" or "\\") logs.simple("running command: %s\n",command) os.spawn(command) -- remove related mem files @@ -12707,7 +12740,7 @@ function environment.run_format(name,data,more) logs.simple("no luc/lua with name: %s",barename) else local q = string.quote - local command = string.format("luatex %s --fmt=%s --lua=%s %s %s",primaryflags(),quote(barename),quote(luaname),quote(data),more ~= "" and quote(more) or "") + local command = format("luatex %s --fmt=%s --lua=%s %s %s",primaryflags(),quote(barename),quote(luaname),quote(data),more ~= "" and quote(more) or "") logs.simple("running command: %s",command) os.spawn(command) end |