diff options
21 files changed, 238 insertions, 104 deletions
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 3045b6866..f65c8c0ac 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -2962,6 +2962,11 @@ end file.isreadable = file.is_readable -- depricated file.iswritable = file.is_writable -- depricated +function file.size(name) + local a = attributes(name) + return a and a.size or 0 +end + -- todo: lpeg \\ / .. does not save much local checkedsplit = string.checkedsplit @@ -4877,6 +4882,7 @@ utilities.report = logs and logs.reporter("system") or print local tracestripping = false local forcestupidcompile = true luautilities.stripcode = true +luautilities.alwaysstripcode = false -- saves 1 meg on 7 meg compressed format file (2012.08.12) luautilities.nofstrippedchunks = 0 luautilities.nofstrippedbytes = 0 @@ -4962,7 +4968,7 @@ end -- ... end of borrowed code. local function strippedbytecode(code,forcestrip,name) - if forcestrip and luautilities.stripcode then + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then return strip_code_pc(code,name) else return code, 0 @@ -4972,8 +4978,16 @@ end luautilities.stripbytecode = strip_code_pc luautilities.strippedbytecode = strippedbytecode +local function fatalerror(name) + utilities.report(format("fatal error in %q",name or "unknown")) +end + +-- quite subtle ... doing this wrong incidentally can give more bytes + + function luautilities.loadedluacode(fullname,forcestrip,name) -- quite subtle ... doing this wrong incidentally can give more bytes + name = name or fullname local code = loadfile(fullname) if code then code() @@ -4983,34 +4997,45 @@ function luautilities.loadedluacode(fullname,forcestrip,name) forcestrip = forcestrip(fullname) end if forcestrip then - local code, n = strip_code_pc(dump(code,name or fullname)) + local code, n = strip_code_pc(dump(code,name)) return loadstring(code), n + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end end -function luautilities.strippedloadstring(str,forcestrip,name) -- better inline - if forcestrip and luautilities.stripcode then - local code, n = strip_code_pc(dump(loadstring(str)),name) - return loadstring(code), n - else - return loadstring(str) +function luautilities.strippedloadstring(code,forcestrip,name) -- not executed + local n = 0 + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then + code = loadstring(code) + if not code then + fatalerror(name) + end + code, n = strip_code_pc(dump(code),name) end + return loadstring(code), n end local function stupidcompile(luafile,lucfile,strip) - local data = io.loaddata(luafile) - if data and data ~= "" then - data = dump(loadstring(data)) + local code = io.loaddata(luafile) + if code and code ~= "" then + code = loadstring(code) + if not code then + fatalerror() + end + code = dump(code) if strip then - data = strippedbytecode(data,true,luafile) -- last one is reported + code = strippedbytecode(code,true,luafile) -- last one is reported end - if data and data ~= "" then - io.savedata(lucfile,data) + if code and code ~= "" then + io.savedata(lucfile,code) end end end diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 3045b6866..f65c8c0ac 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -2962,6 +2962,11 @@ end file.isreadable = file.is_readable -- depricated file.iswritable = file.is_writable -- depricated +function file.size(name) + local a = attributes(name) + return a and a.size or 0 +end + -- todo: lpeg \\ / .. does not save much local checkedsplit = string.checkedsplit @@ -4877,6 +4882,7 @@ utilities.report = logs and logs.reporter("system") or print local tracestripping = false local forcestupidcompile = true luautilities.stripcode = true +luautilities.alwaysstripcode = false -- saves 1 meg on 7 meg compressed format file (2012.08.12) luautilities.nofstrippedchunks = 0 luautilities.nofstrippedbytes = 0 @@ -4962,7 +4968,7 @@ end -- ... end of borrowed code. local function strippedbytecode(code,forcestrip,name) - if forcestrip and luautilities.stripcode then + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then return strip_code_pc(code,name) else return code, 0 @@ -4972,8 +4978,16 @@ end luautilities.stripbytecode = strip_code_pc luautilities.strippedbytecode = strippedbytecode +local function fatalerror(name) + utilities.report(format("fatal error in %q",name or "unknown")) +end + +-- quite subtle ... doing this wrong incidentally can give more bytes + + function luautilities.loadedluacode(fullname,forcestrip,name) -- quite subtle ... doing this wrong incidentally can give more bytes + name = name or fullname local code = loadfile(fullname) if code then code() @@ -4983,34 +4997,45 @@ function luautilities.loadedluacode(fullname,forcestrip,name) forcestrip = forcestrip(fullname) end if forcestrip then - local code, n = strip_code_pc(dump(code,name or fullname)) + local code, n = strip_code_pc(dump(code,name)) return loadstring(code), n + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end end -function luautilities.strippedloadstring(str,forcestrip,name) -- better inline - if forcestrip and luautilities.stripcode then - local code, n = strip_code_pc(dump(loadstring(str)),name) - return loadstring(code), n - else - return loadstring(str) +function luautilities.strippedloadstring(code,forcestrip,name) -- not executed + local n = 0 + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then + code = loadstring(code) + if not code then + fatalerror(name) + end + code, n = strip_code_pc(dump(code),name) end + return loadstring(code), n end local function stupidcompile(luafile,lucfile,strip) - local data = io.loaddata(luafile) - if data and data ~= "" then - data = dump(loadstring(data)) + local code = io.loaddata(luafile) + if code and code ~= "" then + code = loadstring(code) + if not code then + fatalerror() + end + code = dump(code) if strip then - data = strippedbytecode(data,true,luafile) -- last one is reported + code = strippedbytecode(code,true,luafile) -- last one is reported end - if data and data ~= "" then - io.savedata(lucfile,data) + if code and code ~= "" then + io.savedata(lucfile,code) end end end diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 3045b6866..f65c8c0ac 100755 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -2962,6 +2962,11 @@ end file.isreadable = file.is_readable -- depricated file.iswritable = file.is_writable -- depricated +function file.size(name) + local a = attributes(name) + return a and a.size or 0 +end + -- todo: lpeg \\ / .. does not save much local checkedsplit = string.checkedsplit @@ -4877,6 +4882,7 @@ utilities.report = logs and logs.reporter("system") or print local tracestripping = false local forcestupidcompile = true luautilities.stripcode = true +luautilities.alwaysstripcode = false -- saves 1 meg on 7 meg compressed format file (2012.08.12) luautilities.nofstrippedchunks = 0 luautilities.nofstrippedbytes = 0 @@ -4962,7 +4968,7 @@ end -- ... end of borrowed code. local function strippedbytecode(code,forcestrip,name) - if forcestrip and luautilities.stripcode then + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then return strip_code_pc(code,name) else return code, 0 @@ -4972,8 +4978,16 @@ end luautilities.stripbytecode = strip_code_pc luautilities.strippedbytecode = strippedbytecode +local function fatalerror(name) + utilities.report(format("fatal error in %q",name or "unknown")) +end + +-- quite subtle ... doing this wrong incidentally can give more bytes + + function luautilities.loadedluacode(fullname,forcestrip,name) -- quite subtle ... doing this wrong incidentally can give more bytes + name = name or fullname local code = loadfile(fullname) if code then code() @@ -4983,34 +4997,45 @@ function luautilities.loadedluacode(fullname,forcestrip,name) forcestrip = forcestrip(fullname) end if forcestrip then - local code, n = strip_code_pc(dump(code,name or fullname)) + local code, n = strip_code_pc(dump(code,name)) return loadstring(code), n + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end end -function luautilities.strippedloadstring(str,forcestrip,name) -- better inline - if forcestrip and luautilities.stripcode then - local code, n = strip_code_pc(dump(loadstring(str)),name) - return loadstring(code), n - else - return loadstring(str) +function luautilities.strippedloadstring(code,forcestrip,name) -- not executed + local n = 0 + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then + code = loadstring(code) + if not code then + fatalerror(name) + end + code, n = strip_code_pc(dump(code),name) end + return loadstring(code), n end local function stupidcompile(luafile,lucfile,strip) - local data = io.loaddata(luafile) - if data and data ~= "" then - data = dump(loadstring(data)) + local code = io.loaddata(luafile) + if code and code ~= "" then + code = loadstring(code) + if not code then + fatalerror() + end + code = dump(code) if strip then - data = strippedbytecode(data,true,luafile) -- last one is reported + code = strippedbytecode(code,true,luafile) -- last one is reported end - if data and data ~= "" then - io.savedata(lucfile,data) + if code and code ~= "" then + io.savedata(lucfile,code) end end end diff --git a/tex/context/base/back-pdf.mkiv b/tex/context/base/back-pdf.mkiv index 5b5781531..f537b3936 100644 --- a/tex/context/base/back-pdf.mkiv +++ b/tex/context/base/back-pdf.mkiv @@ -68,16 +68,17 @@ {\ctxcommand{setxmpfile("\backendparameter{xmpfile}")}}% \to \everysetupbackend +% \doifsomething{\backendparameter\c!format} .. at the lua end + \appendtoks - \doifsomething{\backendparameter\c!format} - {\ctxcommand{setformat { + \ctxcommand{setformat { format = "\backendparameter\c!format", level = "\backendparameter\c!level", option = "\backendparameter\c!option", profile = "\backendparameter\c!profile", intent = "\backendparameter\c!intent", file = "\backendparameter\c!file", - }}}% + }}% \to \everysetupbackend %D For the moment we keep these. diff --git a/tex/context/base/char-map.lua b/tex/context/base/char-map.lua index 93a307a97..749da5289 100644 --- a/tex/context/base/char-map.lua +++ b/tex/context/base/char-map.lua @@ -3,7 +3,7 @@ if not modules then modules = { } end modules ['char-map'] = { comment = "companion to char-ini.mkiv", author = "Hans Hagen & Arthur Reutenauer", copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" + license = "see context related readme files", dataonly = true, } diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii index cf0b9bc4f..90476aa22 100644 --- a/tex/context/base/cont-new.mkii +++ b/tex/context/base/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2012.08.10 19:40} +\newcontextversion{2012.08.11 11:43} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv index c1eb31960..91f64ab11 100644 --- a/tex/context/base/cont-new.mkiv +++ b/tex/context/base/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2012.08.10 19:40} +\newcontextversion{2012.08.11 11:43} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf Binary files differindex c2b73175e..0622580ce 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 738fa1b3f..c28523396 100644 --- a/tex/context/base/context-version.png +++ b/tex/context/base/context-version.png diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii index b173fe811..12f009b90 100644 --- a/tex/context/base/context.mkii +++ b/tex/context/base/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2012.08.10 19:40} +\edef\contextversion{2012.08.11 11:43} %D For those who want to use this: diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 6ee088294..6f5adf2f7 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -25,7 +25,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2012.08.10 19:40} +\edef\contextversion{2012.08.11 11:43} %D For those who want to use this: diff --git a/tex/context/base/core-sys.lua b/tex/context/base/core-sys.lua index 703bcac0f..ddcb6e938 100644 --- a/tex/context/base/core-sys.lua +++ b/tex/context/base/core-sys.lua @@ -22,5 +22,9 @@ end statistics.register("result saved in file", function() -- suffix will be fetched from backend - return format( "%s.%s", environment.outputfilename, (tex.pdfoutput>0 and "pdf") or "dvi") + if tex.pdfoutput > 0 then + return format( "%s.%s, compresslevel %s, objectcompreslevel %s", environment.outputfilename, "pdf", tex.pdfcompresslevel, tex.pdfobjcompresslevel) + else + return format( "%s.%s", environment.outputfilename, "dvi") -- hard to imagine + end end) diff --git a/tex/context/base/l-file.lua b/tex/context/base/l-file.lua index d7b5b7623..bea4ef0aa 100644 --- a/tex/context/base/l-file.lua +++ b/tex/context/base/l-file.lua @@ -198,6 +198,11 @@ end file.isreadable = file.is_readable -- depricated file.iswritable = file.is_writable -- depricated +function file.size(name) + local a = attributes(name) + return a and a.size or 0 +end + -- todo: lpeg \\ / .. does not save much local checkedsplit = string.checkedsplit diff --git a/tex/context/base/lpdf-fmt.lua b/tex/context/base/lpdf-fmt.lua index 3ae41b4f6..626e66d3c 100644 --- a/tex/context/base/lpdf-fmt.lua +++ b/tex/context/base/lpdf-fmt.lua @@ -36,6 +36,8 @@ local pdfstring = lpdf.string local pdfverbose = lpdf.verbose local pdfflushstreamfileobject = lpdf.flushstreamfileobject +local texset = tex.set -- we could make tex.setglobal + local addtoinfo = lpdf.addtoinfo local injectxmpinfo = lpdf.injectxmpinfo local insertxmpinfo = lpdf.insertxmpinfo @@ -625,15 +627,16 @@ end lpdf.registerdocumentfinalizer(flushoutputintents,2,"output intents") function codeinjections.setformat(s) - local format, level, profile, intent, option, filename = - s.format or "", s.level or "", s.profile or "", s.intent or "", s.option or "", s.file or "" - if format == "" then - -- we ignore this as we hook it in \everysetupbackend - else + local format = s.format or "" + local level = tonumber(s.level) + local profile = s.profile or "" + local option = s.option or "" + local filename = s.file or "" + if format ~= "" then local spec = formats[lower(format)] if spec then - formatspecification, formatname = spec, spec.format_name - level = level and tonumber(level) + formatspecification = spec + formatname = spec.format_name report_backend("setting format to '%s'",formatname) local xmp_file = formatspecification.xmp_file or "" if xmp_file == "" then @@ -641,13 +644,20 @@ function codeinjections.setformat(s) else codeinjections.setxmpfile(xmp_file) end - local pdf_version, inject_metadata = spec.pdf_version * 10, spec.inject_metadata - local majorversion, minorversion = math.div(pdf_version,10), math.mod(pdf_version,10) + if not level then + level = 3 -- good compromise, default anyway + end + local pdf_version = spec.pdf_version * 10 + local inject_metadata = spec.inject_metadata + local majorversion = math.div(pdf_version,10) + local minorversion = math.mod(pdf_version,10) local objectcompression = spec.object_compression and pdf_version >= 15 local compresslevel = level or tex.pdfcompresslevel -- keep default local objectcompresslevel = (objectcompression and (level or tex.pdfobjcompresslevel)) or 0 - tex.pdfcompresslevel, tex.pdfobjcompresslevel = compresslevel, objectcompresslevel - tex.pdfmajorversion, tex.pdfminorversion = majorversion, minorversion + texset("global","pdfcompresslevel",compresslevel) + texset("global","pdfobjcompresslevel",objectcompresslevel) + texset("global","pdfmajorversion",majorversion) + texset("global","pdfminorversion",minorversion) if objectcompression then report_backend("forcing pdf version %s.%s, compression level %s, object compression level %s", majorversion,minorversion,compresslevel,objectcompresslevel) @@ -704,6 +714,11 @@ function codeinjections.setformat(s) else report_backend("error, format '%s' is not supported",format) end + elseif level then + texset("global","pdfcompresslevel",level) + texset("global","pdfobjcompresslevel",level) + else + -- we ignore this as we hook it in \everysetupbackend end end diff --git a/tex/context/base/m-spreadsheet.lua b/tex/context/base/m-spreadsheet.lua index 049154f27..4986079d5 100644 --- a/tex/context/base/m-spreadsheet.lua +++ b/tex/context/base/m-spreadsheet.lua @@ -151,11 +151,21 @@ local template = [[ -- to be considered: a weak cache +local function propername(name) + if name ~= "" then + return name + elseif current ~= "" then + return current + else + return defaultname + end +end + local function execute(name,r,c,str) -- if name == "" then name = current if name == "" then name = defaultname end end str = lpegmatch(pattern,str,1,name) str = format(template,name,str) - local result = loadstring(str) + local result = loadstring(str) -- utilities.lua.strippedloadstring(str,true) -- when tracing result = result and result() or 0 data[name].data[c][r] = result if type(result) == "function" then @@ -166,12 +176,12 @@ local function execute(name,r,c,str) end function spreadsheets.set(name,r,c,str) - if name == "" then name = current if name == "" then name = defaultname end end + name = propername(name) execute(name,r,c,str) end function spreadsheets.get(name,r,c,str) - if name == "" then name = current if name == "" then name = defaultname end end + name = propername(name) local dname = data[name] if not str or str == "" then context(dname.data[c][r] or 0) @@ -198,12 +208,12 @@ function spreadsheets.get(name,r,c,str) end function spreadsheets.doifelsecell(name,r,c) - if name == "" then name = current if name == "" then name = defaultname end end + name = propername(name) local d = data[name] commands.doifelse(d and d.data[c][r]) end function spreadsheets.show(name) - if name == "" then name = current if name == "" then name = defaultname end end - table.print(data[name].data,name) + name = propername(name) + inspect(data[name].data,name) end diff --git a/tex/context/base/m-spreadsheet.mkiv b/tex/context/base/m-spreadsheet.mkiv index e065ac7e8..9da9ba9b1 100644 --- a/tex/context/base/m-spreadsheet.mkiv +++ b/tex/context/base/m-spreadsheet.mkiv @@ -37,15 +37,15 @@ \c!split=\v!no] \unexpanded\def\resetspreadsheet - {\dosingleempty\doresetspreadsheet} + {\dosingleempty\module_spreadsheet_reset} -\unexpanded\def\doresetspreadsheet[#1]% +\unexpanded\def\module_spreadsheet_reset[#1]% {\ctxlua{moduledata.spreadsheets.reset("#1")}} \unexpanded\def\startspreadsheet - {\dosingleempty\dostartspreadsheet} + {\dosingleempty\module_spreadsheet_start} -\unexpanded\def\dostartspreadsheet[#1]% +\unexpanded\def\module_spreadsheet_start[#1]% {\pushmacro\currentspreadsheet \edef\currentspreadsheet{#1}% \checkspreadsheetparent @@ -62,27 +62,27 @@ \popmacro\currentspreadsheet} \unexpanded\def\showspreadsheet - {\dosingleempty\doshowspreadsheet} + {\dosingleempty\module_spreadsheet_show} -\unexpanded\def\doshowspreadsheet[#1]% +\unexpanded\def\module_spreadsheet_show[#1]% {\ctxlua{moduledata.spreadsheets.show("#1")}} -\unexpanded\def\getspreadsheet - {\dosingleempty\dogetspreadsheet} +\unexpanded\def\setspreadsheet + {\dosingleempty\module_spreadsheet_set} -\unexpanded\def\dosetspreadsheet[#1]#2#3#4% +\unexpanded\def\module_spreadsheet_set[#1]#2#3#4% {\ctxlua{moduledata.spreadsheets.set("#1",\number#2,\number#3,"#4")}} -\unexpanded\def\setspreadsheet - {\dosingleempty\dosetspreadsheet} +\unexpanded\def\getspreadsheet + {\dosingleempty\module_spreadsheet_get} -\unexpanded\def\dogetspreadsheet[#1]#2#3#4% +\unexpanded\def\module_spreadsheet_get[#1]#2#3#4% {\ctxlua{moduledata.spreadsheets.get("#1",\number#2,\number#3,"#4")}} \unexpanded\def\doifelsespreadsheetcell - {\dosingleempty\dodoifelsespreadsheetcell} + {\dosingleempty\module_spreadsheet_doifelse_cell} -\unexpanded\def\dodoifelsespreadsheetcell[#1]#2#3% +\unexpanded\def\module_spreadsheet_doifelse_cell[#1]#2#3% {\ctxlua{moduledata.spreadsheets.doifelsecell("#1","#2","#3")}} \ifdefined\tblrow @@ -97,7 +97,6 @@ \fi - \appendtoks \resetspreadsheet \let\setspr\TABLEsetspreadsheet @@ -105,11 +104,11 @@ \to \everyTABLEpass \unexpanded\def\startspreadsheettable % quick and dirty - {\dosingleempty\dostartspreadsheettable} + {\dosingleempty\module_spreadsheet_start_table} -\unexpanded\def\dostartspreadsheettable[#1]% +\unexpanded\def\module_spreadsheet_start_table[#1]% {\bgroup - \dostartspreadsheet[#1]%% + \module_spreadsheet_start[#1]%% \unexpanded\def\startrow{\bTR}% \unexpanded\def\stoprow {\eTR}% \unexpanded\def\startcell##1\stopcell{\bTD\getspr{##1}\eTD}% diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf Binary files differindex 16ade95a6..3ef6fd827 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 17bbb0a67..7ff12a5ba 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf diff --git a/tex/context/base/typo-scr.mkiv b/tex/context/base/typo-scr.mkiv index 1a6a80d06..7ec6e6f59 100644 --- a/tex/context/base/typo-scr.mkiv +++ b/tex/context/base/typo-scr.mkiv @@ -140,7 +140,7 @@ \edef\currentlowhigh{#1}% \dosingleempty} % #2 -\unexpanded\def\typo_scripts_lowhigh_indeed[#1]#2#3% +\unexpanded\def\typo_scripts_lowhigh_indeed[#1]#2#3% todo: align .. [#1] is compatible hack {\dostarttagged\t!subsup\currentlowhigh \setbox\plusfour\hbox{\typo_scripts_lowhigh_low_high\lower\c!down\t!sub{#2}}% \setbox\plussix \hbox{\typo_scripts_lowhigh_low_high\raise\c!up \t!sup{#3}}% @@ -233,8 +233,8 @@ \dostarttagged\t!subsup\currentlowmidhigh \uselowmidhighstyleandcolor\c!style\c!color \setstrut - \setbox\plustwo \hbox{\strut\dostarttagged\t!sub\empty#2\dostoptagged}% - \setbox\plusfour\hbox{\strut\dostarttagged\t!mid\empty#3\dostoptagged}% inefficient + \setbox\plustwo \hbox{\strut\dostarttagged\t!sub\empty#3\dostoptagged}% + \setbox\plusfour\hbox{\strut\dostarttagged\t!mid\empty#2\dostoptagged}% inefficient \setbox\plussix \hbox{\strut\dostarttagged\t!sup\empty#4\dostoptagged}% \scratchdimen \wd \ifdim\wd\plustwo>\wd\plusfour diff --git a/tex/context/base/util-lua.lua b/tex/context/base/util-lua.lua index 879ce7f79..9e5328044 100644 --- a/tex/context/base/util-lua.lua +++ b/tex/context/base/util-lua.lua @@ -19,6 +19,7 @@ utilities.report = logs and logs.reporter("system") or print local tracestripping = false local forcestupidcompile = true luautilities.stripcode = true +luautilities.alwaysstripcode = false -- saves 1 meg on 7 meg compressed format file (2012.08.12) luautilities.nofstrippedchunks = 0 luautilities.nofstrippedbytes = 0 @@ -104,7 +105,7 @@ end -- ... end of borrowed code. local function strippedbytecode(code,forcestrip,name) - if forcestrip and luautilities.stripcode then + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then return strip_code_pc(code,name) else return code, 0 @@ -114,8 +115,16 @@ end luautilities.stripbytecode = strip_code_pc luautilities.strippedbytecode = strippedbytecode +local function fatalerror(name) + utilities.report(format("fatal error in %q",name or "unknown")) +end + +-- quite subtle ... doing this wrong incidentally can give more bytes + + function luautilities.loadedluacode(fullname,forcestrip,name) -- quite subtle ... doing this wrong incidentally can give more bytes + name = name or fullname local code = loadfile(fullname) if code then code() @@ -125,34 +134,45 @@ function luautilities.loadedluacode(fullname,forcestrip,name) forcestrip = forcestrip(fullname) end if forcestrip then - local code, n = strip_code_pc(dump(code,name or fullname)) + local code, n = strip_code_pc(dump(code,name)) return loadstring(code), n + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end + elseif luautilities.alwaysstripcode then + return loadstring(strip_code_pc(dump(code),name)) else return code, 0 end end -function luautilities.strippedloadstring(str,forcestrip,name) -- better inline - if forcestrip and luautilities.stripcode then - local code, n = strip_code_pc(dump(loadstring(str)),name) - return loadstring(code), n - else - return loadstring(str) +function luautilities.strippedloadstring(code,forcestrip,name) -- not executed + local n = 0 + if (forcestrip and luautilities.stripcode) or luautilities.alwaysstripcode then + code = loadstring(code) + if not code then + fatalerror(name) + end + code, n = strip_code_pc(dump(code),name) end + return loadstring(code), n end local function stupidcompile(luafile,lucfile,strip) - local data = io.loaddata(luafile) - if data and data ~= "" then - data = dump(loadstring(data)) + local code = io.loaddata(luafile) + if code and code ~= "" then + code = loadstring(code) + if not code then + fatalerror() + end + code = dump(code) if strip then - data = strippedbytecode(data,true,luafile) -- last one is reported + code = strippedbytecode(code,true,luafile) -- last one is reported end - if data and data ~= "" then - io.savedata(lucfile,data) + if code and code ~= "" then + io.savedata(lucfile,code) end end end diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index fb1bba060..81280b892 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 : 08/10/12 19:40:14 +-- merge date : 08/11/12 11:43:49 do -- begin closure to overcome local limits and interference @@ -2198,6 +2198,11 @@ end file.isreadable = file.is_readable -- depricated file.iswritable = file.is_writable -- depricated +function file.size(name) + local a = attributes(name) + return a and a.size or 0 +end + -- todo: lpeg \\ / .. does not save much local checkedsplit = string.checkedsplit |