From 5bb2094edebc6fd4fdc9efb49627fa521d1354ff Mon Sep 17 00:00:00 2001 From: Marius Date: Thu, 18 Nov 2010 20:40:15 +0200 Subject: beta 2010.11.18 19:20 --- tex/context/base/catc-ctx.tex | 2 +- tex/context/base/cont-new.tex | 2 +- tex/context/base/context.tex | 2 +- tex/context/base/core-def.mkiv | 7 +- tex/context/base/core-job.mkiv | 2 - tex/context/base/font-ctx.lua | 15 ++- tex/context/base/font-ini.mkiv | 57 ++++++--- tex/context/base/mlib-pdf.lua | 15 +-- tex/context/base/mult-cld.lua | 185 +++++++++++++++++----------- tex/generic/context/luatex-fonts-merged.lua | 2 +- 10 files changed, 180 insertions(+), 109 deletions(-) diff --git a/tex/context/base/catc-ctx.tex b/tex/context/base/catc-ctx.tex index 79e89a69b..beaa62479 100644 --- a/tex/context/base/catc-ctx.tex +++ b/tex/context/base/catc-ctx.tex @@ -27,9 +27,9 @@ \startcatcodetable \ctxcatcodes \catcode`\^^I = 10 \catcode`\^^M = 5 - % \catcode`\^^J = 10 % new \catcode`\^^L = 5 \catcode`\ = 10 + % \catcode`\^^J = 10 % new \catcode`\^^Z = 9 \catcode`\\ = 0 \catcode`\{ = 1 diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index c0f9c7a9f..85610a1f8 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2010.11.17 18:14} +\newcontextversion{2010.11.18 19:20} %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.tex b/tex/context/base/context.tex index 6bf2f54d5..7a6b122bb 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2010.11.17 18:14} +\edef\contextversion{2010.11.18 19:20} %D For those who want to use this: diff --git a/tex/context/base/core-def.mkiv b/tex/context/base/core-def.mkiv index b0274c79e..ca672d8a5 100644 --- a/tex/context/base/core-def.mkiv +++ b/tex/context/base/core-def.mkiv @@ -26,12 +26,15 @@ % initialization order: +\ifdefined\firststagepreloadfonts \else \let\firststagepreloadfonts \relax \fi +\ifdefined\secondstagepreloadfonts \else \let\secondstagepreloadfonts\relax \fi + \appendtoks \showcontextbanner \to \everyjob \appendtoks \initializenewlinechar \to \everyjob \appendtoks \calculatecurrenttime \to \everyjob \appendtoks \loadsystemfiles \to \everyjob \appendtoks \loadoptionfile \to \everyjob % can load files ! -\appendtoks \preloadfonts \to \everyjob +\appendtoks \firststagepreloadfonts \to \everyjob \appendtoks \settopskip \to \everyjob \appendtoks \initializeMPgraphics \to \everyjob % after loading system files \appendtoks \initializemainlanguage \to \everyjob @@ -56,6 +59,8 @@ \prependtoks \lefttoright \to \everybeforeoutput +\appendtoks \secondstagepreloadfonts \to \everystarttext + % temporary here: \ifdefined\in \let\normalmathin \in \unexpanded\def\in {\mathortext\normalmathin \dospecialin } \else \let\in \dospecialin \fi diff --git a/tex/context/base/core-job.mkiv b/tex/context/base/core-job.mkiv index d0f4cd417..e7771e22c 100644 --- a/tex/context/base/core-job.mkiv +++ b/tex/context/base/core-job.mkiv @@ -65,8 +65,6 @@ \def\registerfileinfo[#1#2]#3% geen \showmessage ? {\writestatus\m!systems{#1#2 file #3 at line \the\inputlineno}} -\ifdefined\preloadfonts\else \let\preloadfonts\relax \fi - \def\loadallsystemfiles#1#2% {\ifx\@@svdirectory\empty \readsysfile{#1}{\showmessage\m!systems2{#1}}{#2}% diff --git a/tex/context/base/font-ctx.lua b/tex/context/base/font-ctx.lua index 91fc72e6b..a633fe259 100644 --- a/tex/context/base/font-ctx.lua +++ b/tex/context/base/font-ctx.lua @@ -62,7 +62,6 @@ local xheightdata = fonts.xheights fonts.ids = fontdata -- we keep this one for a while (as it is used in mk etc) - -- todo: give parameters at the lua end a metatable --~ function parameters(t,k) @@ -95,10 +94,22 @@ local nulldata = { xheight = 338952, -- 5 quad = 786432, -- 6 extraspace = 85459, -- 7 - }, } +function definers.resetnullfont() + -- resetting is needed because tikz misuses nullfont + local p = nulldata.parameters + p.slant = 0 -- 1 + p.space = 0 -- 2 + p.spacestretch = 0 -- 3 + p.spaceshrink = 0 -- 4 + p.xheight = 0 -- 5 + p.quad = 0 -- 6 + p.extraspace = 0 -- 7 + definers.resetnullfont = function() end +end + setmetatablekey(fontdata, "__index", function(t,k) return nulldata end) diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv index 7f8c374ca..16769ce63 100644 --- a/tex/context/base/font-ini.mkiv +++ b/tex/context/base/font-ini.mkiv @@ -2020,19 +2020,52 @@ % \appendtoks % \to \everysetupdocument +\fontdimen1\nullfont 0\scaledpoint +\fontdimen2\nullfont 256377\scaledpoint +\fontdimen3\nullfont 128188\scaledpoint +\fontdimen4\nullfont 85459\scaledpoint +\fontdimen5\nullfont 338952\scaledpoint +\fontdimen6\nullfont 786432\scaledpoint +\fontdimen7\nullfont 85459\scaledpoint + +\def\resetnullfont % this is needed because some macro packages (tikz) misuse \nullfont + {\dorecurse7{\fontdimen\recurselevel\nullfont\zeropoint}% + \ctxlua{fonts.definers.resetnullfont()}% in luatex 0.70 this will also do the previous + \globallet\resetnullfont\relax} + \newconditional\fontsareloaded -\def\preloadfonts % never called, needs a clean up +\def\preloaddefaultfonts + {\usetypescript[modern]% + \setuptypeface[modern]% + \showmessage\m!fonts6{\normalizedbodyfontsize\normalspace\fontstyle}} + +\def\resetpreloadfonts + {\global\let\firststagepreloadfonts \relax + \global\let\secondstagepreloadfonts\relax + \resetnullfont} + +\def\firststagepreloadfonts % see core-def.mkiv {\global\loadingfontsfalse - \ifconditional\fontsareloaded \else + \ifconditional\fontsareloaded + \resetpreloadfonts + \else \doifmodeelse {*nofonts} {\writestatus\m!fonts{latin modern fonts are not preloaded}} - {\writestatus\m!fonts{preloading latin modern fonts}% - \usetypescript[modern]% - \setuptypeface[modern]% - \showmessage\m!fonts6{\normalizedbodyfontsize\normalspace\fontstyle}}% + {\writestatus\m!fonts{preloading latin modern fonts (first stage)}% + \preloaddefaultfonts + \resetpreloadfonts}% + \fi} + +\def\secondstagepreloadfonts % see core-def.mkiv + {\global\loadingfontsfalse + \ifconditional\fontsareloaded + % nothing + \else + \writestatus\m!fonts{preloading latin modern fonts (second stage)}% + \preloaddefaultfonts \fi - \global\let\preloadfonts\relax} + \resetpreloadfonts} % maybe add this to \everystarttext % @@ -4048,16 +4081,6 @@ \def\dolookupgetkey #1{\ctxlua{tex.write(fonts.names.getlookupkey("#1"))}} \def\cleanfontname #1{\ctxlua{fonts.cleanname("#1")}} -% Experiment: - -\fontdimen1\nullfont 0\scaledpoint -\fontdimen2\nullfont 256377\scaledpoint -\fontdimen3\nullfont 128188\scaledpoint -\fontdimen4\nullfont 85459\scaledpoint -\fontdimen5\nullfont 338952\scaledpoint -\fontdimen6\nullfont 786432\scaledpoint -\fontdimen7\nullfont 85459\scaledpoint - \protect \endinput % \startluacode diff --git a/tex/context/base/mlib-pdf.lua b/tex/context/base/mlib-pdf.lua index 30db3f52c..5ca554292 100644 --- a/tex/context/base/mlib-pdf.lua +++ b/tex/context/base/mlib-pdf.lua @@ -134,16 +134,13 @@ local bend_tolerance = 131/65536 local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1 +local pen_info = mplib.pen_info + local function pen_characteristics(object) - if mplib.pen_info then - local t = mplib.pen_info(object) - rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty - divider = sx*sy - rx*ry - return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width - else - rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1 - return false, 1 - end + local t = pen_info(object) + rx, ry, sx, sy, tx, ty = t.rx, t.ry, t.sx, t.sy, t.tx, t.ty + divider = sx*sy - rx*ry + return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), t.width end local function mpconcat(px, py) -- no tx, ty here / we can move this one inline if needed diff --git a/tex/context/base/mult-cld.lua b/tex/context/base/mult-cld.lua index 70c190865..2a2af77ae 100644 --- a/tex/context/base/mult-cld.lua +++ b/tex/context/base/mult-cld.lua @@ -80,6 +80,7 @@ context._flush_ = _flush_ local catcodestack = { } local currentcatcodes = ctxcatcodes +local contentcatcodes = ctxcatcodes local catcodes = { ctx = ctxcatcodes, ctxcatcodes = ctxcatcodes, context = ctxcatcodes, @@ -93,19 +94,23 @@ local catcodes = { function context.pushcatcodes(c) insert(catcodestack,currentcatcodes) currentcatcodes = (c and catcodes[c] or tonumber(c)) or currentcatcodes + contentcatcodes = currentcatcodes end function context.popcatcodes() currentcatcodes = remove(catcodestack) or currentcatcodes + contentcatcodes = currentcatcodes end function context.unprotect() insert(catcodestack,currentcatcodes) currentcatcodes = prtcatcodes + contentcatcodes = currentcatcodes end function context.protect() currentcatcodes = remove(catcodestack) or currentcatcodes + contentcatcodes = currentcatcodes end function tex.fprint(...) -- goodie @@ -113,89 +118,87 @@ function tex.fprint(...) -- goodie end local function writer(command,first,...) ---~ if first == nil then -- we can move the first test to the caller (twice: direct and boolean) ---~ flush(currentcatcodes,command) ---~ else - local t = { first, ... } - flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes - local direct = false - for i=1,#t do - local ti = t[i] - local typ = type(ti) - if direct then - if typ == "string" or typ == "number" then - flush(currentcatcodes,ti) - else - trace_context("error: invalid use of direct in '%s', only strings and numbers can be flushed directly, not '%s'",command,typ) - end - direct = false - elseif ti == nil then - -- nothing - elseif typ == "string" then - if ti == "" then - flush(currentcatcodes,"{}") - else - flush(currentcatcodes,"{",ti,"}") - end - elseif typ == "number" then + local t = { first, ... } + flush(currentcatcodes,command) -- todo: ctx|prt|texcatcodes + local direct = false + for i=1,#t do + local ti = t[i] + local typ = type(ti) + if direct then + if typ == "string" or typ == "number" then + flush(currentcatcodes,ti) + else + trace_context("error: invalid use of direct in '%s', only strings and numbers can be flushed directly, not '%s'",command,typ) + end + direct = false + elseif ti == nil then + -- nothing + elseif ti == "" then + flush(currentcatcodes,"{}") + elseif typ == "string" or typ == "number" then + if currentcatcodes == contentcatcodes then flush(currentcatcodes,"{",ti,"}") - elseif typ == "table" then - local tn = #ti - if tn == 0 then - local done = false - for k, v in next, ti do - if done then - if v == "" then - flush(currentcatcodes,",",k,'=') - else - flush(currentcatcodes,",",k,'=',v) - end + else + flush(currentcatcodes,"{") + flush(contentcatcodes,ti) + flush(currentcatcodes,"}") + end + elseif typ == "table" then + local tn = #ti + if tn == 0 then + local done = false + for k, v in next, ti do + if done then + if v == "" then + flush(currentcatcodes,",",k,'=') else - if v == "" then - flush(currentcatcodes,"[",k,'=') - else - flush(currentcatcodes,"[",k,'=',v) - end - done = true + flush(currentcatcodes,",",k,'=',v) end - end - flush(currentcatcodes,"]") - elseif tn == 1 then -- some 20% faster than the next loop - local tj = ti[1] - if type(tj) == "function" then - flush(currentcatcodes,"[\\mkivflush{",_store_(tj),"}]") else - flush(currentcatcodes,"[",tj,"]") - end - else -- is concat really faster than flushes here? probably needed anyway (print artifacts) - for j=1,tn do - local tj = ti[j] - if type(tj) == "function" then - ti[j] = "\\mkivflush{" .. _store_(tj) .. "}" + if v == "" then + flush(currentcatcodes,"[",k,'=') + else + flush(currentcatcodes,"[",k,'=',v) end + done = true end - flush(currentcatcodes,"[",concat(ti,","),"]") end - elseif typ == "function" then - flush(currentcatcodes,"{\\mkivflush{",_store_(ti),"}}") -- todo: ctx|prt|texcatcodes - elseif typ == "boolean" then - if ti then - flush(currentcatcodes,"^^M") + flush(currentcatcodes,"]") + elseif tn == 1 then -- some 20% faster than the next loop + local tj = ti[1] + if type(tj) == "function" then + flush(currentcatcodes,"[\\mkivflush{",_store_(tj),"}]") else - direct = true + flush(currentcatcodes,"[",tj,"]") + end + else -- is concat really faster than flushes here? probably needed anyway (print artifacts) + for j=1,tn do + local tj = ti[j] + if type(tj) == "function" then + ti[j] = "\\mkivflush{" .. _store_(tj) .. "}" + end end - elseif typ == "thread" then - trace_context("coroutines not supported as we cannot yield across boundaries") - elseif isnode(ti) then - writenode(ti) + flush(currentcatcodes,"[",concat(ti,","),"]") + end + elseif typ == "function" then + flush(currentcatcodes,"{\\mkivflush{",_store_(ti),"}}") -- todo: ctx|prt|texcatcodes + elseif typ == "boolean" then + if ti then + flush(ctxcatcodes,"^^M") else - trace_context("error: '%s' gets a weird argument '%s'",command,tostring(ti)) + direct = true end + elseif typ == "thread" then + trace_context("coroutines not supported as we cannot yield across boundaries") + elseif isnode(ti) then + writenode(ti) + else + trace_context("error: '%s' gets a weird argument '%s'",command,tostring(ti)) end - if direct then - trace_context("error: direct flushing used in '%s' without following argument",command) - end ---~ end + end + if direct then + trace_context("error: direct flushing used in '%s' without following argument",command) + end end local generics = { } context.generics = generics @@ -286,6 +289,18 @@ local tracedflush = function(...) normalflush(...) local t = { ... } t[1] = "f : " -- replaces the catcode + for i=2,#t do + local ti = t[i] + local tt = type(ti) + if tt == "string" then + -- ok + elseif tt == "number" then + -- ok + else + t[i] = format("<%s>",tostring(ti)) + end + -- currenttrace(format("%02i: %s",i-1,tostring(t[i]))) + end currenttrace(concat(t)) end @@ -380,9 +395,9 @@ function context.egroup() context("}") end -function context.verbatim(...) - flush(vrbcatcodes,...) -end +--~ function context.verbatim(...) +--~ flush(vrbcatcodes,...) +--~ end -- context.delayed @@ -440,6 +455,28 @@ end setmetatable(nested, { __index = indexer, __call = caller } ) +-- verbatim + +local verbatim = { } context.verbatim = verbatim + +local function indexer(t,k) + local command = context[k] + local f = function(...) + local savedcatcodes = contentcatcodes + contentcatcodes = vrbcatcodes + command(...) + contentcatcodes = savedcatcodes + end + t[k] = f + return f +end + +local function caller(t,...) + flush(vrbcatcodes,...) +end + +setmetatable(verbatim, { __index = indexer, __call = caller } ) + -- metafun local metafun = { } context.metafun = metafun diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua index c3eb9b2ee..dc682dc78 100644 --- a/tex/generic/context/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 11/17/10 18:14:05 +-- merge date : 11/18/10 19:20:30 do -- begin closure to overcome local limits and interference -- cgit v1.2.3