diff options
Diffstat (limited to 'tex')
32 files changed, 356 insertions, 260 deletions
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf Binary files differindex ad7781917..39c395435 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png Binary files differindex 232ef41d6..9f10e90ad 100644 --- a/tex/context/base/context-version.png +++ b/tex/context/base/context-version.png diff --git a/tex/context/base/core-ctx.mkiv b/tex/context/base/core-ctx.mkiv index 50b3ae4a2..59115621a 100644 --- a/tex/context/base/core-ctx.mkiv +++ b/tex/context/base/core-ctx.mkiv @@ -19,7 +19,6 @@ \unexpanded\def\job_options_get_commandline {\ctxcommand{getcommandline()}} \unexpanded\def\job_options_get_ctxfile {\ctxcommand{getctxfile()}} -\unexpanded\def\job_options_log {\ctxcommand{logoptions()}} \unexpanded\def\job_options_set_modes {\ctxcommand{setdocumentmodes()}} \unexpanded\def\job_options_set_modules {\ctxcommand{setdocumentmodules()}} \unexpanded\def\job_options_set_environments{\ctxcommand{setdocumentenvironments()}} diff --git a/tex/context/base/core-def.mkiv b/tex/context/base/core-def.mkiv index d1c774f40..cf1049e58 100644 --- a/tex/context/base/core-def.mkiv +++ b/tex/context/base/core-def.mkiv @@ -112,10 +112,6 @@ \to \everyjob \appendtoks - \job_options_log -\to \everystarttext - -\appendtoks \ifarrangingpages\poparrangedpages\fi \to \everybye diff --git a/tex/context/base/data-lst.lua b/tex/context/base/data-lst.lua index c86e58fd8..64d891514 100644 --- a/tex/context/base/data-lst.lua +++ b/tex/context/base/data-lst.lua @@ -57,20 +57,21 @@ function resolvers.listers.variables(pattern) instance.expansions = fastcopy(exp) end -function resolvers.listers.configurations(report) +local report_resolved = logs.report("system","resolved") + +function resolvers.listers.configurations() local configurations = resolvers.instance.specification - local report = report or texio.write_nl for i=1,#configurations do - report(format("file : %s",resolvers.resolve(configurations[i]))) + report_resolved("file : %s",resolvers.resolve(configurations[i])) end - report("") + report_resolved("") local list = resolvers.expandedpathfromlist(resolvers.splitpath(resolvers.luacnfspec)) for i=1,#list do local li = resolvers.resolve(list[i]) if lfs.isdir(li) then - report(format("path - %s",li)) + report_resolved("path - %s",li) else - report(format("path + %s",li)) + report_resolved("path + %s",li) end end end diff --git a/tex/context/base/file-job.lua b/tex/context/base/file-job.lua index 780438dc8..9e5912bc7 100644 --- a/tex/context/base/file-job.lua +++ b/tex/context/base/file-job.lua @@ -12,6 +12,7 @@ if not modules then modules = { } end modules ['file-job'] = { local format, gsub, match, find = string.format, string.gsub, string.match, string.find local insert, remove, concat = table.insert, table.remove, table.concat local validstring = string.valid +local sortedhash = table.sortedhash local commands, resolvers, context = commands, resolvers, context @@ -27,7 +28,6 @@ local logsnewline = logs.newline local logspushtarget = logs.pushtarget local logspoptarget = logs.poptarget local settings_to_array = utilities.parsers.settings_to_array -local write_nl = texio.write_nl local allocate = utilities.storage.allocate local nameonly = file.nameonly @@ -103,26 +103,7 @@ function commands.usezipfile(name,tree) end end -local report_system = logs.reporter("system","options") -local report_options = logs.reporter("used options") - -function commands.copyfiletolog(name) - local f = io.open(name) - if f then - logspushtarget("logfile") - logsnewline() - report_system("start used options") - logsnewline() - for line in f:lines() do - report_options(line) - end - logsnewline() - report_system("stop used options") - logsnewline() - logspoptarget() - f:close() - end -end +local report_system = logs.reporter("system") -- moved from tex to lua: @@ -271,8 +252,6 @@ end -- document structure -local report_system = logs.reporter("system") - local textlevel = 0 -- inaccessible for user, we need to define counter textlevel at the tex end local function dummyfunction() end @@ -382,8 +361,8 @@ local stacks = { -- -local report_system = logs.reporter("system","structure") -local report_structure = logs.reporter("used structure") +local report_structures = logs.reporter("system","structure") +local report_structure = logs.reporter("used structure") local function pushtree(what,name) local t = { } @@ -408,20 +387,18 @@ local function log_tree(top,depth) end end -local function logtree() +luatex.registerstopactions(function() logspushtarget("logfile") logsnewline() - report_system("start used structure") + report_structures("start used structure") logsnewline() root.name = environment.jobname log_tree(root,"") logsnewline() - report_system("stop used structure") + report_structures("stop used structure") logsnewline() logspoptarget() -end - -luatex.registerstopactions(logtree) +end) job.structure = job.structure or { } job.structure.collected = job.structure.collected or { } @@ -906,19 +883,107 @@ function commands.setdocumentenvironments() -- was setup: *runtime:environments apply(document.options.commandline.environments,context.environment) end -function commands.logoptions() - local arguments = document.arguments - local files = document.files - write_nl("log","\n% begin of command line arguments\n%\n") - for k, v in next, arguments do - write_nl("log",format("%% %-20s = %s",k,tostring(v))) +local report_files = logs.reporter("system","files") +local report_options = logs.reporter("system","options") +local report_file = logs.reporter("used file") +local report_option = logs.reporter("used option") + +luatex.registerstopactions(function() + local foundintrees = resolvers.instance.foundintrees + if #foundintrees > 0 then + logspushtarget("logfile") + logsnewline() + report_files("start used files") + logsnewline() + for i=1,#foundintrees do + report_file("%4i: % T",i,foundintrees[i]) + end + logsnewline() + report_files("stop used files") + logsnewline() + logspoptarget() end - write_nl("log","%\n% end of command line arguments\n") - write_nl("log","\n% begin of command line files\n%\n") +end) + +luatex.registerstopactions(function() + local files = document.files -- or environment.files + local arguments = document.arguments -- or environment.arguments + -- + logspushtarget("logfile") + logsnewline() + report_options("start commandline options") + logsnewline() + for argument, value in sortedhash(arguments) do + report_option("%s=%A",argument,value) + end + logsnewline() + report_options("stop commandline options") + logsnewline() + report_options("start commandline files") + logsnewline() for i=1,#files do - write_nl("log",format("%% %i %s",i,files[i])) + report_file("% 4i: %s",i,files[i]) end - write_nl("log","%\n% end of command line files\n\n") + logsnewline() + report_options("stop commandline files") + logsnewline() + logspoptarget() +end) + +if environment.initex then + + local report_storage = logs.reporter("system","storage") + local report_table = logs.reporter("stored table") + local report_module = logs.reporter("stored module") + local report_attribute = logs.reporter("stored attribute") + local report_catcodetable = logs.reporter("stored catcodetable") + local report_corenamespace = logs.reporter("stored corenamespace") + + luatex.registerstopactions(function() + logspushtarget("logfile") + logsnewline() + report_storage("start stored tables") + logsnewline() + for k,v in sortedhash(storage.data) do + report_table("%03i %s",k,v[1]) + end + logsnewline() + report_storage("stop stored tables") + logsnewline() + report_storage("start stored modules") + logsnewline() + for k,v in sortedhash(lua.bytedata) do + report_module("%03i %s %s",k,v[2],v[1]) + end + logsnewline() + report_storage("stop stored modules") + logsnewline() + report_storage("start stored attributes") + logsnewline() + for k,v in sortedhash(attributes.names) do + report_attribute("%03i %s",k,v) + end + logsnewline() + report_storage("stop stored attributes") + logsnewline() + report_storage("start stored catcodetables") + logsnewline() + for k,v in sortedhash(catcodes.names) do + report_catcodetable("%03i % t",k,v) + end + logsnewline() + report_storage("stop stored catcodetables") + logsnewline() + report_storage("start stored corenamespaces") + for k,v in sortedhash(interfaces.corenamespaces) do + report_corenamespace("%03i %s",k,v) + end + logsnewline() + report_storage("stop stored corenamespaces") + logsnewline() + logspoptarget() + end) + end function commands.doifelsecontinuewithfile(inpname) diff --git a/tex/context/base/font-age.lua b/tex/context/base/font-age.lua index 36647c3a6..ba8f0bb0b 100644 --- a/tex/context/base/font-age.lua +++ b/tex/context/base/font-age.lua @@ -8,7 +8,7 @@ if not modules then modules = { } end modules ['font-age'] = { } if context then - texio.write_nl("fatal error: this module is not for context") + logs.report("fatal error","this module is not for context") os.exit() end diff --git a/tex/context/base/font-syn.lua b/tex/context/base/font-syn.lua index 3436465f5..6b3af4dee 100644 --- a/tex/context/base/font-syn.lua +++ b/tex/context/base/font-syn.lua @@ -1518,10 +1518,6 @@ function names.exists(name) return ((resolvers.findfile(name,"tfm") or "") ~= "") or ((names.resolve(name) or "") ~= "") end --- for i=1,fonts.names.lookup(pattern) do --- texio.write_nl(fonts.names.getkey("filename",i)) --- end - local lastlookups, lastpattern = { }, "" function names.lookup(pattern,name,reload) -- todo: find diff --git a/tex/context/base/l-lpeg.lua b/tex/context/base/l-lpeg.lua index cfc26a5a5..9f51c644f 100644 --- a/tex/context/base/l-lpeg.lua +++ b/tex/context/base/l-lpeg.lua @@ -17,8 +17,6 @@ lpeg = require("lpeg") -- some code will move to unicode and string -local report = texio and texio.write_nl or print - -- local lpmatch = lpeg.match -- local lpprint = lpeg.print -- local lpp = lpeg.P @@ -36,22 +34,22 @@ local report = texio and texio.write_nl or print -- local lpcmt = lpeg.Cmt -- local lpcarg = lpeg.Carg --- function lpeg.match(l,...) report("LPEG MATCH") lpprint(l) return lpmatch(l,...) end - --- function lpeg.P (l) local p = lpp (l) report("LPEG P =") lpprint(l) return p end --- function lpeg.R (l) local p = lpr (l) report("LPEG R =") lpprint(l) return p end --- function lpeg.S (l) local p = lps (l) report("LPEG S =") lpprint(l) return p end --- function lpeg.C (l) local p = lpc (l) report("LPEG C =") lpprint(l) return p end --- function lpeg.B (l) local p = lpb (l) report("LPEG B =") lpprint(l) return p end --- function lpeg.V (l) local p = lpv (l) report("LPEG V =") lpprint(l) return p end --- function lpeg.Cf (l) local p = lpcf (l) report("LPEG Cf =") lpprint(l) return p end --- function lpeg.Cb (l) local p = lpcb (l) report("LPEG Cb =") lpprint(l) return p end --- function lpeg.Cg (l) local p = lpcg (l) report("LPEG Cg =") lpprint(l) return p end --- function lpeg.Ct (l) local p = lpct (l) report("LPEG Ct =") lpprint(l) return p end --- function lpeg.Cs (l) local p = lpcs (l) report("LPEG Cs =") lpprint(l) return p end --- function lpeg.Cc (l) local p = lpcc (l) report("LPEG Cc =") lpprint(l) return p end --- function lpeg.Cmt (l) local p = lpcmt (l) report("LPEG Cmt =") lpprint(l) return p end --- function lpeg.Carg (l) local p = lpcarg(l) report("LPEG Carg =") lpprint(l) return p end +-- function lpeg.match(l,...) print("LPEG MATCH") lpprint(l) return lpmatch(l,...) end + +-- function lpeg.P (l) local p = lpp (l) print("LPEG P =") lpprint(l) return p end +-- function lpeg.R (l) local p = lpr (l) print("LPEG R =") lpprint(l) return p end +-- function lpeg.S (l) local p = lps (l) print("LPEG S =") lpprint(l) return p end +-- function lpeg.C (l) local p = lpc (l) print("LPEG C =") lpprint(l) return p end +-- function lpeg.B (l) local p = lpb (l) print("LPEG B =") lpprint(l) return p end +-- function lpeg.V (l) local p = lpv (l) print("LPEG V =") lpprint(l) return p end +-- function lpeg.Cf (l) local p = lpcf (l) print("LPEG Cf =") lpprint(l) return p end +-- function lpeg.Cb (l) local p = lpcb (l) print("LPEG Cb =") lpprint(l) return p end +-- function lpeg.Cg (l) local p = lpcg (l) print("LPEG Cg =") lpprint(l) return p end +-- function lpeg.Ct (l) local p = lpct (l) print("LPEG Ct =") lpprint(l) return p end +-- function lpeg.Cs (l) local p = lpcs (l) print("LPEG Cs =") lpprint(l) return p end +-- function lpeg.Cc (l) local p = lpcc (l) print("LPEG Cc =") lpprint(l) return p end +-- function lpeg.Cmt (l) local p = lpcmt (l) print("LPEG Cmt =") lpprint(l) return p end +-- function lpeg.Carg (l) local p = lpcarg(l) print("LPEG Carg =") lpprint(l) return p end local type, next, tostring = type, next, tostring local byte, char, gmatch, format = string.byte, string.char, string.gmatch, string.format diff --git a/tex/context/base/l-os.lua b/tex/context/base/l-os.lua index 08d0473bc..42f3e4862 100644 --- a/tex/context/base/l-os.lua +++ b/tex/context/base/l-os.lua @@ -157,7 +157,7 @@ function os.launch(str) os.execute(format(launchers[os.name] or launchers.unix,str)) end -if not os.times then +if not os.times then -- ? -- utime = user time -- stime = system time -- cutime = children user time diff --git a/tex/context/base/lpdf-xmp.lua b/tex/context/base/lpdf-xmp.lua index fbdea8815..061ed0757 100644 --- a/tex/context/base/lpdf-xmp.lua +++ b/tex/context/base/lpdf-xmp.lua @@ -180,9 +180,14 @@ local function flushxmpinfo() Type = pdfconstant("Metadata"), } if trace_xmp then - report_xmp("data flushed (see log file)") - texio.write_nl("log","") - texio.write("log","\n% ",(gsub(blob,"[\r\n]","\n%% ")),"\n") + report_xmp("data flushed, see log file") + logs.pushtarget("logfile") + report_xmp("start xmp blob") + logs.newline() + logs.writer(blob) + logs.newline() + report_xmp("stop xmp blob") + logs.poptarget() end blob = format(xpacket,packetid,blob) if not verbose and tex.pdfcompresslevel > 0 then diff --git a/tex/context/base/luat-cod.lua b/tex/context/base/luat-cod.lua index 87b2c0059..8b015477f 100644 --- a/tex/context/base/luat-cod.lua +++ b/tex/context/base/luat-cod.lua @@ -62,7 +62,7 @@ function lua.registerfinalizer(f,comment) if type(f) == "function" then finalizers[#finalizers+1] = { action = f, comment = comment } else - texio.write_nl(format("fatal error: invalid finalizer, action: %s",comment)) + print(format("\nfatal error: invalid finalizer, action: %s\n",comment)) os.exit() end end @@ -72,7 +72,7 @@ function lua.finalize(logger) local finalizer = finalizers[i] finalizer.action() if logger then - logger("finalizing lua", "action: %s",finalizer.comment) + logger("finalize action: %s",finalizer.comment) end end end @@ -112,7 +112,9 @@ if not environment.luafilechunk then end if not environment.engineflags then -- raw flags + local engineflags = { } + for i=-10,#arg do local a = arg[i] if a then @@ -122,7 +124,9 @@ if not environment.engineflags then -- raw flags end end end + environment.engineflags = engineflags + end -- We need a few premature callbacks in the format generator. We diff --git a/tex/context/base/luat-fio.lua b/tex/context/base/luat-fio.lua index 2f00914d3..d61c6f142 100644 --- a/tex/context/base/luat-fio.lua +++ b/tex/context/base/luat-fio.lua @@ -6,9 +6,6 @@ if not modules then modules = { } end modules ['luat-fio'] = { license = "see context related readme files" } -local texiowrite_nl = (texio and texio.write_nl) or print -local texiowrite = (texio and texio.write) or print - local format = string.format local concat = table.concat local sequenced = table.sequenced @@ -98,7 +95,7 @@ luatex.registerstopactions(function() report_system("start used files") logs.newline() for i=1,#foundintrees do - report_files("%4i: % t",i,foundintrees[i]) + report_files("%4i: % T",i,foundintrees[i]) end logs.newline() report_system("stop used files") @@ -115,6 +112,6 @@ statistics.register("resource resolver", function() scandata.time, scandata.shared, #resolvers.instance.foundintrees, - concat(scandata.paths," ") + #scandata.paths > 0 and concat(scandata.paths," ") or "<none>" ) end) diff --git a/tex/context/base/luat-lib.mkiv b/tex/context/base/luat-lib.mkiv index 948a9bc8d..26596c157 100644 --- a/tex/context/base/luat-lib.mkiv +++ b/tex/context/base/luat-lib.mkiv @@ -22,14 +22,15 @@ %registerctxluafile{util-lua}{1.001} % moved \registerctxluafile{util-prs}{1.001} \registerctxluafile{util-fmt}{1.001} -\registerctxluafile{util-deb}{1.001} % could also be done in trac-deb.mkiv \registerctxluafile{util-dim}{1.001} -\registerctxluafile{trac-inf}{1.001} +%registerctxluafile{trac-inf}{1.001} \registerctxluafile{trac-set}{1.001} \registerctxluafile{trac-log}{1.001} +\registerctxluafile{trac-inf}{1.001} %registerctxluafile{trac-pro}{1.001} \registerctxluafile{util-lua}{1.001} +\registerctxluafile{util-deb}{1.001} % could also be done in trac-deb.mkiv \registerctxluafile{util-tpl}{1.001} % needs tracker diff --git a/tex/context/base/luat-run.lua b/tex/context/base/luat-run.lua index 4f65370bb..34d45d096 100644 --- a/tex/context/base/luat-run.lua +++ b/tex/context/base/luat-run.lua @@ -9,10 +9,15 @@ if not modules then modules = { } end modules ['luat-run'] = { local format = string.format local insert = table.insert +-- trace_job_status is also controlled by statistics.enable that is set via the directive system.nostatistics + local trace_lua_dump = false trackers.register("system.dump", function(v) trace_lua_dump = v end) local trace_temp_files = false trackers.register("system.tempfiles", function(v) trace_temp_files = v end) +local trace_job_status = true trackers.register("system.jobstatus", function(v) trace_job_status = v end) +local trace_tex_status = false trackers.register("system.texstatus", function(v) trace_tex_status = v end) local report_lua = logs.reporter("system","lua") +local report_tex = logs.reporter("system","status") local report_tempfiles = logs.reporter("resolvers","tempfiles") luatex = luatex or { } @@ -24,9 +29,6 @@ local stopactions = { } function luatex.registerstartactions(...) insert(startactions, ...) end function luatex.registerstopactions (...) insert(stopactions, ...) end -luatex.showtexstat = luatex.showtexstat or function() end -luatex.showjobstat = luatex.showjobstat or statistics.showjobstat - local function start_run() if logs.start_run then logs.start_run() @@ -40,12 +42,12 @@ local function stop_run() for i=1,#stopactions do stopactions[i]() end - if luatex.showjobstat then - statistics.show(logs.report_job_stat) + if trace_job_status then + statistics.show() end - if luatex.showtexstat then - for k,v in next, status.list() do - logs.report_tex_stat(k,v) + if trace_tex_status then + for k, v in table.sortedhash(status.list()) do + report_tex("%S=%S",k,v) end end if logs.stop_run then @@ -75,7 +77,6 @@ end local function pre_dump_actions() lua.finalize(trace_lua_dump and report_lua or nil) - statistics.reportstorage("log") -- statistics.savefmtstatus("\jobname","\contextversion","context.tex") end diff --git a/tex/context/base/luat-sto.lua b/tex/context/base/luat-sto.lua index 67653da6a..c2c89004f 100644 --- a/tex/context/base/luat-sto.lua +++ b/tex/context/base/luat-sto.lua @@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['luat-sto'] = { -- we could nil some function in the productionrun local type, next, setmetatable, getmetatable, collectgarbage = type, next, setmetatable, getmetatable, collectgarbage -local gmatch, format, write_nl = string.gmatch, string.format, texio.write_nl +local gmatch, format = string.gmatch, string.format local serialize, concat, sortedhash = table.serialize, table.concat, table.sortedhash local bytecode = lua.bytecode local strippedloadstring = utilities.lua.strippedloadstring @@ -155,36 +155,11 @@ if lua.bytedata then storage.register("lua/bytedata",lua.bytedata,"lua.bytedata") end -function statistics.reportstorage(whereto) - whereto = whereto or "term and log" - write_nl(whereto," ","stored tables:"," ") - for k,v in sortedhash(storage.data) do - write_nl(whereto,format("%03i %s",k,v[1])) - end - write_nl(whereto," ","stored modules:"," ") - for k,v in sortedhash(lua.bytedata) do - write_nl(whereto,format("%03i %s %s",k,v[2],v[1])) - end - write_nl(whereto," ","stored attributes:"," ") - for k,v in sortedhash(attributes.names) do - write_nl(whereto,format("%03i %s",k,v)) - end - write_nl(whereto," ","stored catcodetables:"," ") - for k,v in sortedhash(catcodes.names) do - write_nl(whereto,format("%03i %s",k,concat(v," "))) - end - write_nl(whereto," ","used corenamespaces:"," ") - for k,v in sortedhash(interfaces.corenamespaces) do - write_nl(whereto,format("%03i %s",k,v)) - end - write_nl(whereto," ") -end - -storage.shared = storage.shared or { } - -- Because the storage mechanism assumes tables, we define a table for storing -- (non table) values. +storage.shared = storage.shared or { } + storage.register("storage/shared", storage.shared, "storage.shared") local mark = storage.mark diff --git a/tex/context/base/lxml-tex.lua b/tex/context/base/lxml-tex.lua index 30d264c4e..f7de100b2 100644 --- a/tex/context/base/lxml-tex.lua +++ b/tex/context/base/lxml-tex.lua @@ -1588,16 +1588,18 @@ statistics.register("lxml lpath profile", function() if p and next(p) then local s = table.sortedkeys(p) local tested, matched, finalized = 0, 0, 0 - texio.write_nl("log","\nbegin of lxml profile\n") - texio.write_nl("log","\n tested matched finalized pattern\n\n") + logs.pushtarget("logfile") + logs.writer("\nbegin of lxml profile\n") + logs.writer("\n tested matched finalized pattern\n\n") for i=1,#s do local pattern = s[i] local pp = p[pattern] local t, m, f = pp.tested, pp.matched, pp.finalized tested, matched, finalized = tested + t, matched + m, finalized + f - texio.write_nl("log",format("%9i %9i %9i %s",t,m,f,pattern)) + logs.writer(format("%9i %9i %9i %s",t,m,f,pattern)) end - texio.write_nl("log","\nend of lxml profile\n") + logs.writer("\nend of lxml profile\n") + logs.poptarget() return format("%s patterns, %s tested, %s matched, %s finalized (see log for details)",#s,tested,matched,finalized) else return nil diff --git a/tex/context/base/node-ext.lua b/tex/context/base/node-ext.lua index 5c4eec8de..82ec04ee5 100644 --- a/tex/context/base/node-ext.lua +++ b/tex/context/base/node-ext.lua @@ -13,14 +13,14 @@ use external applications to process node lists.</p> --ldx]]-- function nodes.show(stack) --- texio.write_nl(table.serialize(stack)) +-- logs.writer(table.serialize(stack)) end function nodes.save(stack,name) -- *.ltn : luatex node file -- if name then -- file.savedata(name,table.serialize(stack)) -- else --- texio.write_nl('log',table.serialize(stack)) +-- logs.writer(table.serialize(stack)) -- end end diff --git a/tex/context/base/node-fin.lua b/tex/context/base/node-fin.lua index cad45c6a2..9367badd3 100644 --- a/tex/context/base/node-fin.lua +++ b/tex/context/base/node-fin.lua @@ -72,7 +72,7 @@ end -- end -- -- function states.check() --- texio.write_nl(concat(collected,"\n")) +-- logs.report("states",concat(collected,"\n")) -- end -- we used to do the main processor loop here and call processor for each node diff --git a/tex/context/base/node-ini.lua b/tex/context/base/node-ini.lua index 3caeb69dd..be1eb77bf 100644 --- a/tex/context/base/node-ini.lua +++ b/tex/context/base/node-ini.lua @@ -213,18 +213,24 @@ listcodes.column = listcodes.alignment kerncodes.italiccorrection = kerncodes.userkern kerncodes.kerning = kerncodes.fontkern -nodes.codes = allocate { +nodes.codes = allocate { -- mostly for listing + glue = skipcodes, + noad = noadcodes, + node = nodecodes, hlist = listcodes, vlist = listcodes, glyph = glyphcodes, - glue = skipcodes, kern = kerncodes, - whatsit = whatcodes, + penalty = penaltycodes, math = mathnodes, - noad = noadcodes, + fill = fillcodes, margin = margincodes, + disc = disccodes, + whatsit = whatcodes, } +local report_codes = logs.reporter("nodes","codes") + function nodes.showcodes() local t = { } for name, codes in sortedhash(nodes.codes) do @@ -238,7 +244,7 @@ function nodes.showcodes() end formatcolumns(t) for k=1,#t do - texio.write_nl(t[k]) + report_codes (t[k]) end end diff --git a/tex/context/base/node-ser.lua b/tex/context/base/node-ser.lua index 2c3e7fefb..b0a6e9952 100644 --- a/tex/context/base/node-ser.lua +++ b/tex/context/base/node-ser.lua @@ -277,7 +277,7 @@ end function nodes.print(head,n) while head do local id = head.id - texio.write_nl(rep(" ",n or 0) .. tostring(head)) + logs.writer(string.formatters["%w%S"],n or 0,head) if id == hlist_code or id == vlist_code then nodes.print(head.list,(n or 0)+1) end diff --git a/tex/context/base/node-tra.lua b/tex/context/base/node-tra.lua index c7f50b1aa..48d6310b0 100644 --- a/tex/context/base/node-tra.lua +++ b/tex/context/base/node-tra.lua @@ -15,7 +15,6 @@ local utfchar = utf.char local concat = table.concat local format, match, gmatch, concat, rep = string.format, string.match, string.gmatch, table.concat, string.rep local lpegmatch = lpeg.match -local write_nl = texio.write_nl local clock = os.gettimeofday or os.clock -- should go in environment local report_nodes = logs.reporter("nodes","tracing") @@ -353,10 +352,10 @@ end function nodes.showlist(head, message) if message then - write_nl(message) + report_nodes(message) end for n in traverse_nodes(head) do - write_nl(tostring(n)) + report_nodes(tostring(n)) end end diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf Binary files differindex db91fd850..1c266bb28 100644 --- a/tex/context/base/status-files.pdf +++ b/tex/context/base/status-files.pdf diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf Binary files differindex fb42b1ac2..8860757b1 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf diff --git a/tex/context/base/toks-ini.lua b/tex/context/base/toks-ini.lua index f88e0fcb5..ef4b5406b 100644 --- a/tex/context/base/toks-ini.lua +++ b/tex/context/base/toks-ini.lua @@ -197,7 +197,7 @@ collectors.showtoken = showtoken function collectors.trace() local t = get_next() - texio.write_nl(showtoken(t)) + logs.report("tokenlist",showtoken(t)) return t end diff --git a/tex/context/base/trac-inf.lua b/tex/context/base/trac-inf.lua index 1d39f24a6..fdc07d97d 100644 --- a/tex/context/base/trac-inf.lua +++ b/tex/context/base/trac-inf.lua @@ -15,7 +15,6 @@ local type, tonumber = type, tonumber local format, lower = string.format, string.lower local concat = table.concat local clock = os.gettimeofday or os.clock -- should go in environment -local write_nl = texio and texio.write_nl or print statistics = statistics or { } local statistics = statistics @@ -116,9 +115,10 @@ function statistics.register(tag,fnc) end end -function statistics.show(reporter) +local report = logs.reporter("mkiv lua stats") + +function statistics.show() if statistics.enable then - if not reporter then reporter = function(tag,data,n) write_nl(tag .. " " .. data) end end -- this code will move local register = statistics.register register("luatex banner", function() @@ -139,39 +139,23 @@ function statistics.show(reporter) end) end end - collectgarbage("collect") - register("current memory usage", statistics.memused) + -- so far + -- collectgarbage("collect") + register("current memory usage",statistics.memused) register("runtime",statistics.runtime) + logs.newline() -- initial newline for i=1,#statusinfo do local s = statusinfo[i] local r = s[2]() if r then - reporter(s[1],r,n) + report("%s: %s",s[1],r) end end - write_nl("") -- final newline + -- logs.newline() -- final newline statistics.enable = false end end -local template, report_statistics, nn = nil, nil, 0 -- we only calcute it once - -function statistics.showjobstat(tag,data,n) - if not logs then - -- sorry - elseif type(data) == "table" then - for i=1,#data do - statistics.showjobstat(tag,data[i],n) - end - else - if not template or n > nn then - template, n = format("%%-%ss - %%s",n), nn - report_statistics = logs.reporter("mkiv lua stats") - end - report_statistics(format(template,tag,data)) - end -end - function statistics.memused() -- no math.round yet -) local round = math.round or math.floor return format("%s MB (ctx: %s MB)",round(collectgarbage("count")/1000), round(status.luastate_bytes/1000000)) @@ -188,8 +172,9 @@ function statistics.runtime() return statistics.formatruntime(elapsedtime(statistics)) end -function statistics.timed(action,report) - report = report or logs.reporter("system") +local report = logs.reporter("system") + +function statistics.timed(action) starttiming("run") action() stoptiming("run") diff --git a/tex/context/base/trac-log.lua b/tex/context/base/trac-log.lua index 2b84ba487..6a6bd39cb 100644 --- a/tex/context/base/trac-log.lua +++ b/tex/context/base/trac-log.lua @@ -6,6 +6,60 @@ if not modules then modules = { } end modules ['trac-log'] = { license = "see context related readme files" } +if tex and (tex.jobname or tex.formatname) then + + -- quick hack, awaiting speedup in engine (8 -> 6.4 sec for --make with console2) + + local texio_write_nl = texio.write_nl + local texio_write = texio.write + local io_write = io.write + + local write_nl = function(target,...) + if not io_write then + io_write = io.write + end + if target == "term and log" then + texio_write_nl("log",...) + texio_write_nl("term","") + io_write(...) + elseif target == "log" then + texio_write_nl("log",...) + elseif target == "term" then + texio_write_nl("term","") + io_write(...) + else + texio_write_nl("log",...) + texio_write_nl("term","") + io_write(target,...) + end + end + + local write = function(target,...) + if not io_write then + io_write = io.write + end + if target == "term and log" then + texio_write("log",...) + io_write(...) + elseif target == "log" then + texio_write("log",...) + elseif target == "term" then + io_write(...) + else + texio_write("log",...) + io_write(target,...) + end + end + + texio.write = write + texio.write_nl = write_nl + +else + + -- texlua + +end + -- todo: less categories, more subcategories (e.g. nodes) -- todo: split into basics and ctx specific @@ -217,8 +271,6 @@ if tex and (tex.jobname or tex.formatname) then else --- local format = string.formatter - logs.flush = ignore writer = write_nl @@ -449,6 +501,16 @@ function logs.show() report("logging","categories: %s, max category: %s, max subcategory: %s, max combined: %s",n,c,s,max) end +local delayed_reporters = { } setmetatableindex(delayed_reporters,function(t,k) + local v = logs.reporter(k) + t[k] = v + return v +end) + +function utilities.setters.report(setter,...) + delayed_reporters[setter](...) +end + directives.register("logs.blocked", function(v) setblocked(v,true) end) @@ -513,15 +575,12 @@ function logs.stop_page_number() -- the first page can includes the initializati logs.flush() end -logs.report_job_stat = statistics and statistics.showjobstat +-- we don't have show_open and show_close callbacks yet local report_files = logs.reporter("files") - -local nesting = 0 -local verbose = false -local hasscheme = url.hasscheme - --- we don't have show_open and show_close callbacks yet +local nesting = 0 +local verbose = false +local hasscheme = url.hasscheme function logs.show_open(name) -- if hasscheme(name) ~= "virtual" then @@ -699,3 +758,6 @@ end io.stdout:setvbuf('no') io.stderr:setvbuf('no') + +-- windows: > nul 2>&1 +-- unix : > null 2>&1 diff --git a/tex/context/base/trac-set.lua b/tex/context/base/trac-set.lua index 9dc5dd9da..6f91e25f7 100644 --- a/tex/context/base/trac-set.lua +++ b/tex/context/base/trac-set.lua @@ -17,10 +17,11 @@ local allocate = utilities.storage.allocate utilities = utilities or { } local utilities = utilities -utilities.setters = utilities.setters or { } -local setters = utilities.setters -local data = { } -- maybe just local +local setters = utilities.setters or { } +utilities.setters = setters + +local data = { } -- We can initialize from the cnf file. This is sort of tricky as -- later defined setters also need to be initialized then. If set @@ -235,15 +236,8 @@ end local enable, disable, register, list, show = setters.enable, setters.disable, setters.register, setters.list, setters.show -local write_nl = texio and texio.write_nl or print - -local function report(setter,...) - local report = logs and logs.report - if report then - report(setter.name,...) - else -- fallback, as this module is loaded before the logger - write_nl(format("%-15s : %s\n",setter.name,format(...))) - end +function setters.report(setter,...) + print(format("%-15s : %s\n",setter.name,format(...))) end local function default(setter,name) @@ -261,14 +255,14 @@ function setters.new(name) -- we could use foo:bar syntax (but not used that oft setter = { data = allocate(), -- indexed, but also default and value fields name = name, - report = function(...) report (setter,...) end, - enable = function(...) enable (setter,...) end, - disable = function(...) disable (setter,...) end, - register = function(...) register(setter,...) end, - list = function(...) list (setter,...) end, - show = function(...) show (setter,...) end, - default = function(...) return default (setter,...) end, - value = function(...) return value (setter,...) end, + report = function(...) setters.report (setter,...) end, + enable = function(...) enable (setter,...) end, + disable = function(...) disable (setter,...) end, + register = function(...) register(setter,...) end, + list = function(...) list (setter,...) end, + show = function(...) show (setter,...) end, + default = function(...) return default (setter,...) end, + value = function(...) return value (setter,...) end, } data[name] = setter return setter @@ -278,9 +272,9 @@ trackers = setters.new("trackers") directives = setters.new("directives") experiments = setters.new("experiments") -local t_enable, t_disable, t_report = trackers .enable, trackers .disable, trackers .report -local d_enable, d_disable, d_report = directives .enable, directives .disable, directives .report -local e_enable, e_disable, e_report = experiments.enable, experiments.disable, experiments.report +local t_enable, t_disable = trackers .enable, trackers .disable +local d_enable, d_disable = directives .enable, directives .disable +local e_enable, e_disable = experiments.enable, experiments.disable -- nice trick: we overload two of the directives related functions with variants that -- do tracing (itself using a tracker) .. proof of concept @@ -290,28 +284,28 @@ local trace_experiments = false local trace_experiments = false trackers.regist function directives.enable(...) if trace_directives then - d_report("enabling: % t",{...}) + directives.report("enabling: % t",{...}) end d_enable(...) end function directives.disable(...) if trace_directives then - d_report("disabling: % t",{...}) + directives.report("disabling: % t",{...}) end d_disable(...) end function experiments.enable(...) if trace_experiments then - e_report("enabling: % t",{...}) + experiments.report("enabling: % t",{...}) end e_enable(...) end function experiments.disable(...) if trace_experiments then - e_report("disabling: % t",{...}) + experiments.report("disabling: % t",{...}) end e_disable(...) end @@ -319,11 +313,19 @@ end -- a useful example directives.register("system.nostatistics", function(v) - statistics.enable = not v + if statistics then + statistics.enable = not v + else + -- forget about it + end end) directives.register("system.nolibraries", function(v) - libraries = nil -- we discard this tracing for security + if libraries then + libraries = nil -- we discard this tracing for security + else + -- no libraries defined + end end) -- experiment diff --git a/tex/context/base/util-deb.lua b/tex/context/base/util-deb.lua index d4b0831f2..785373f86 100644 --- a/tex/context/base/util-deb.lua +++ b/tex/context/base/util-deb.lua @@ -18,11 +18,13 @@ local format, find = string.format, string.find local is_boolean = string.is_boolean utilities = utilities or { } -utilities.debugger = utilities.debugger or { } -local debugger = utilities.debugger +local debugger = utilities.debugger or { } +utilities.debugger = debugger -local counters = { } -local names = { } +local counters = { } +local names = { } + +local report = logs.reporter("debugger") -- one @@ -50,7 +52,7 @@ local function hook() end function debugger.showstats(printer,threshold) -- hm, something has changed, rubish now - printer = printer or texio.write or print + printer = printer or report threshold = threshold or 0 local total, grandtotal, functions = 0, 0, 0 local dataset = { } diff --git a/tex/context/base/util-sto.lua b/tex/context/base/util-sto.lua index 147f17ea9..ddf699bca 100644 --- a/tex/context/base/util-sto.lua +++ b/tex/context/base/util-sto.lua @@ -12,12 +12,11 @@ utilities = utilities or { } utilities.storage = utilities.storage or { } local storage = utilities.storage -local report = texio and texio.write_nl or print - function storage.mark(t) if not t then - report("fatal error: storage cannot be marked") - return -- os.exit() + print("\nfatal error: storage cannot be marked\n") + os.exit() + return end local m = getmetatable(t) if not m then @@ -46,8 +45,9 @@ end function storage.checked(t) if not t then - report("fatal error: storage has not been allocated") - return -- os.exit() + report("\nfatal error: storage has not been allocated\n") + os.exit() + return end return t end diff --git a/tex/context/base/x-calcmath.lua b/tex/context/base/x-calcmath.lua index e8656c78e..1394f3450 100644 --- a/tex/context/base/x-calcmath.lua +++ b/tex/context/base/x-calcmath.lua @@ -6,6 +6,8 @@ if not modules then modules = { } end modules ['x-calcmath'] = { license = "see context related readme files" } +-- this really needs to be redone + local format, lower, upper, gsub, sub = string.format, string.lower, string.upper, string.gsub, string.sub local concat = table.concat local lpegmatch = lpeg.match @@ -223,11 +225,8 @@ if false then ), } - local parser = space * grammar * -1 - local texprint = function(...) texio.write(concat{ ... }) end - local function has_factor(t) for i=1,#t do if t[i] == "factor" then @@ -236,112 +235,114 @@ if false then end end + -- can be sped up if needed ... + function totex(t) if t then local one = t[1] if type(one) == "string" then local two, three = t[2], t[3] if one == "number" then - texprint(two) + context(two) elseif one == "real" then - texprint(two) + context(two) elseif one == "float" then - texprint("\\scinot{",two,"}{",three,"}") + context("\\scinot{",two,"}{",three,"}") elseif one == "identifier" then - texprint(two) + context(two) elseif one == "constant" then - texprint("\\"..two) + context("\\"..two) elseif one == "function" then if two == "sqrt" then - texprint("\\sqrt{") + context("\\sqrt{") totex(three) - texprint("}") + context("}") elseif two == "exp" then - texprint(" e^{") + context(" e^{") totex(three) - texprint("}") + context("}") elseif two == "abs" then - texprint("\\left|") + context("\\left|") totex(three) - texprint("\\right|") + context("\\right|") elseif two == "mean" then - texprint("\\overline{") + context("\\overline{") totex(three) - texprint("}") + context("}") elseif two == "int" or two == "prod" or two == "sum" then local four, five = t[4], t[5] if five then - texprint("\\"..two.."^{") + context("\\"..two.."^{") -- context[two]("{") totex(three) - texprint("}_{") + context("}_{") totex(four) - texprint("}") + context("}") totex(five) elseif four then - texprint("\\"..two.."^{") + context("\\"..two.."^{") totex(three) - texprint("}") + context("}") totex(four) elseif three then - texprint("\\"..two.." ") -- " " not needed + context("\\"..two.." ") -- " " not needed totex(three) else - texprint("\\"..two) + context("\\"..two) end else - texprint("\\"..two.."(") + context("\\"..two.."(") totex(three) - texprint(")") + context(")") end end else local nt = #t local hasfactor = has_factor(t) if hasfactor then - texprint("\\left(") + context("\\left(") end totex(one) for i=2,nt,3 do local what, how, rest = t[i], t[i+1], t[i+2] if what == "factor" then if how == '^' or how == "_" then - texprint(how) - texprint("{") + context(how) + context("{") totex(rest) - texprint("}") + context("}") else - texprint(how) + context(how) totex(rest) end elseif what == "term" then if how == '/' then - texprint("\\frac{") + context("\\frac{") totex(rest) - texprint("}{") + context("}{") totex(t[i+3] or "") - texprint("}") + context("}") elseif how == '*' then - texprint("\\times") + context("\\times") totex(rest) else - texprint(how) + context(how) totex(three) end elseif what == "compare" then if two == ">=" then - texprint("\\ge") + context("\\ge") elseif two == "<=" then - texprint("\\le") + context("\\le") elseif two == ">" then - texprint(">") + context(">") elseif two == "<" then - texprint("<") + context("<") end totex(three) end end if hasfactor then - texprint("\\right)") + context("\\right)") end end end diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index e1e12bb43..0cbe0f2d5 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 03/13/13 12:53:56 +-- merge date : 03/13/13 19:31:38 do -- begin closure to overcome local limits and interference @@ -226,7 +226,6 @@ if not modules then modules={} end modules ['l-lpeg']={ license="see context related readme files" } lpeg=require("lpeg") -local report=texio and texio.write_nl or print local type,next,tostring=type,next,tostring local byte,char,gmatch,format=string.byte,string.char,string.gmatch,string.format local floor=math.floor |