diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/page-ini.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/page-ini.mkiv | 164 |
1 files changed, 112 insertions, 52 deletions
diff --git a/Master/texmf-dist/tex/context/base/page-ini.mkiv b/Master/texmf-dist/tex/context/base/page-ini.mkiv index 6beba4492c5..07d3422829c 100644 --- a/Master/texmf-dist/tex/context/base/page-ini.mkiv +++ b/Master/texmf-dist/tex/context/base/page-ini.mkiv @@ -128,7 +128,7 @@ \ifx\dosetuplayout\undefined % overloaded in page-lay ! - \def\setuplayout{\dodoubleempty\getparameters[\??ly]} + \unexpanded\def\setuplayout{\dodoubleempty\getparameters[\??ly]} \fi @@ -187,13 +187,13 @@ {\appendtoks\dowithotrcommand#1\to\registeredotrcommands} \def\dopresetotrcommand#1% - {\expandafter\let\expandafter#1\csname\@@OTR - \ifcsname\@@OTR\OTRidentifier\expandafter\gobbleoneargument\string#1\endcsname - \OTRidentifier - \else\ifcsname\@@OTR\OTRdefault\expandafter\gobbleoneargument\string#1\endcsname % fallback - \OTRdefault - \fi\fi - \expandafter\gobbleoneargument\string#1\endcsname} + {\expandafter\let\expandafter#1\csname\@@OTR + \ifcsname\@@OTR\OTRidentifier\expandafter\gobbleoneargument\string#1\endcsname + \OTRidentifier + \else\ifcsname\@@OTR\OTRdefault\expandafter\gobbleoneargument\string#1\endcsname % fallback + \OTRdefault + \fi\fi + \expandafter\gobbleoneargument\string#1\endcsname} \def\activateotr#1#2% {\def\OTRidentifier{#1}% @@ -222,17 +222,20 @@ \registerotrcommand\doflushfloats % \def\doflushfloats {\OTRcommand\doflushfloats} \registerotrcommand\flushfloatbox % \def\flushfloatbox {\OTRcommand\flushfloatbox} \registerotrcommand\docheckiffloatfits % \def\docheckiffloatfits {\OTRcommand\docheckiffloatfits} -\registerotrcommand\someherefloat % \def\someherefloat {\OTRcommand\someherefloat} -\registerotrcommand\somefixdfloat % \def\somefixdfloat {\OTRcommand\somefixdfloat} -\registerotrcommand\somepagefloat % \def\somepagefloat {\OTRcommand\somepagefloat} -\registerotrcommand\sometopsfloat % \def\sometopsfloat {\OTRcommand\sometopsfloat} -\registerotrcommand\somebotsfloat % \def\somebotsfloat {\OTRcommand\somebotsfloat} -\registerotrcommand\somesidefloat % \def\somesidefloat {\OTRcommand\somesidefloat} \registerotrcommand\flushsavedfloats % \def\flushsavedfloats {\OTRcommand\flushsavedfloats} \registerotrcommand\synchronizehsize % \def\synchronizehsize {\OTRcommand\synchronizehsize} \registerotrcommand\gotonextpage % \def\gotonextpage {\OTRcommand\gotonextpage } \registerotrcommand\gotonextpageX % \def\gotonextpageX {\OTRcommand\gotonextpageX} % will become obsolete +% wrong, will be redone +% +% \registerotrcommand\someherefloat % \def\someherefloat {\OTRcommand\someherefloat} +% \registerotrcommand\somefixdfloat % \def\somefixdfloat {\OTRcommand\somefixdfloat} +% \registerotrcommand\somepagefloat % \def\somepagefloat {\OTRcommand\somepagefloat} +% \registerotrcommand\sometopsfloat % \def\sometopsfloat {\OTRcommand\sometopsfloat} +% \registerotrcommand\somebotsfloat % \def\somebotsfloat {\OTRcommand\somebotsfloat} +% \registerotrcommand\somesidefloat % \def\somesidefloat {\OTRcommand\somesidefloat} + % beter een \installotr#1 met #1 = macro en auto test \newif \iftraceotr @@ -243,7 +246,7 @@ % When issuing two \par\penalty-\plustenthousand's, only the first % triggers the otr; obscure feature or optimization? -\def\outputcounter{-100010} % -10010 +\newcount\outputcounter \outputcounter=-100010 % -10010 \def\doinvokeoutput {\iftraceotr @@ -252,35 +255,50 @@ \expandafter\dodoinvokeoutput \fi} -\def\outputmessage#1#2#3% - {\iftraceotr\writestatus\m!otr{#1 #2 \number#3}\fi} +\def\doshowoutputmessage#1#2#3% + {\writestatus\m!otr{#1 #2 \number#3}} \def\dodoinvokeoutput#1% - {\outputmessage+{special}{#1}% - \bgroup\par\penalty#1\relax\egroup - \outputmessage-{special}{#1}} + {\bgroup\par\penalty#1\egroup} \def\dodotracedoutput#1% - {\outputmessage+{traced}{#1/\the\outputpenalty}% + {\doshowoutputmessage+{traced}{#1/\the\outputpenalty}% \writestatus\m!otr{c:\number\mofcolumns,v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}% \dodoinvokeoutput{#1}% \writestatus\m!otr{c:\number\mofcolumns,v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}% - \outputmessage-{traced}{#1/\the\outputpenalty}} + \doshowoutputmessage-{traced}{#1/\the\outputpenalty}} \def\installoutput#1#2% \invoke \action - {\decrement\outputcounter - \edef#1{\noexpand\doinvokeoutput{\outputcounter}}% - \setvalue{\@@OTR\outputcounter}{#2}} + {\global\advance\outputcounter\minusone + \edef#1{\noexpand\doinvokeoutput{\number\outputcounter}}% + \setvalue{\@@OTR\number\outputcounter}{#2}} + +\def\invoketracedoutputroutine + {\doshowoutputmessage+{trying}\outputpenalty + \ifcsname\@@OTR\the\outputpenalty\endcsname + \doshowoutputmessage+{special}\outputpenalty + \csname\@@OTR\the\outputpenalty\endcsname + \doshowoutputmessage-{special}\outputpenalty + \else + \doshowoutputmessage+{normal}\outputpenalty + \the\OTRcommand\output + \doshowoutputmessage-{normal}\outputpenalty + \fi + \doshowoutputmessage-{trying}\outputpenalty} -\def\invokeoutputroutine - {\outputmessage+{trying}\outputpenalty - \executeifdefined{\@@OTR\the\outputpenalty}\dodonormaloutput - \outputmessage-{trying}\outputpenalty} +\def\invokenormaloutputroutine + {\ifcsname\@@OTR\the\outputpenalty\endcsname + \csname\@@OTR\the\outputpenalty\endcsname + \else + \the\OTRcommand\output + \fi} -\def\dodonormaloutput - {\outputmessage+{normal}\outputpenalty - \the\OTRcommand\output - \outputmessage-{normal}\outputpenalty} +\def\invokeoutputroutine + {\iftraceotr + \expandafter\invoketracedoutputroutine + \else + \expandafter\invokenormaloutputroutine + \fi} \mainoutput{\invokeoutputroutine} \output{\inotrtrue\the\mainoutput} @@ -425,8 +443,6 @@ \newif\ifbalancingcolumns \newif\ifcollectingcontent \newif\ifcolumnoverflow -\newif\iffinalflushingfloats -\newif\ifpackflushedfloats \packflushedfloatstrue % for the moment \newdimen\intercolumnwidth \newdimen\localcolumnwidth @@ -505,8 +521,7 @@ % but does not hurt either (we're still in the otr!) \inpagebodytrue % needed for enabling \blank ! \flushsavedfloats % was \dosetbothinserts; only otr one ! - \setvsize % this is needed for interacting components, like floats and multicolumns - \adaptfuzzypagegoal} % watch this hack! + \setvsize} % this is needed for interacting components, like floats and multicolumns \def\dofinaloutput#1#2% \vbox: prevents spurious spaces in every..pagebody {\forgetall @@ -521,7 +536,6 @@ {\forgetall \beforefinaloutput \the\everybeforeshipout - \setpagecounters \message{[-\the\realpageno]}% \setbox\scratchbox\hbox{\dopagebody#1#2}% \deadcycles\zerocount @@ -549,12 +563,13 @@ \fi#1#2% \resetselectiepagina \incrementpagenumber + \incrementsubpagenumber \checkpagedimensions \ifnum\outputpenalty>\superpenalty \else \dosupereject \fi \doflushspread - \dopostponeblock} + \doflushpostponedcontent} \def\dooutput {\finaloutput\unvbox\normalpagebox} @@ -571,7 +586,7 @@ \space#1:\space\ascii\space \!!doneatrue}} -\def\placeversioninfo % nog engels maken +\unexpanded\def\placeversioninfo % nog engels maken {\ifcase\conceptmode % 0 : nothing \or @@ -704,7 +719,48 @@ \v!frame=>\chardef\gridboxlinemode \plusthree, \v!nonumber=>\chardef\gridboxlinenomode\zerocount, \v!right=>\chardef\gridboxlinenomode\plusone, - \v!left=>\chardef\gridboxlinenomode\plustwo]} + \v!left=>\chardef\gridboxlinenomode\plustwo, + \v!outer=>\chardef\gridboxlinenomode\plusthree]% + \ifcase\showgridstate + \let\addtextgridlayer\gobbleoneargument + \else % 1=bottom 2=top + \let\addtextgridlayer\doaddtextgridlayer + \fi} + +\definepalet + [layout] + [grid=red, + page=green] + +% if really needed for speed we can cache the grid + +\let\addtextgridlayer\gobbleoneargument + +\def\doaddtextgridlayer#1% to be checked for color and layer + {\startcolor[layout:grid]% + \setgridbox\scratchbox\makeupwidth\textheight % todo: check color + \global\setbox#1\hbox + {\ifcase\showgridstate\or\or\box#1\hskip-\makeupwidth\fi + \bgroup % color + \ifcase\layoutcolumns\else + \gray + \setlayoutcomponentattribute\v!grid\v!columns + \hbox \layoutcomponentboxattribute to \makeupwidth + {\dorecurse\layoutcolumns + {\hskip\layoutcolumnwidth + \ifnum\recurselevel<\layoutcolumns + \vrule + \!!height\ht\scratchbox + \!!depth\dp\scratchbox + \!!width\layoutcolumndistance + \fi}}% + \hskip-\makeupwidth + \fi + \setlayoutcomponentattribute\v!grid\v!lines + \hbox \layoutcomponentboxattribute{\box\scratchbox}% + \egroup + \ifcase\showgridstate\or\hskip-\makeupwidth\box#1\fi}% + \stopcolor} \def\buildpagebox#1% {\setbox#1\vbox to \paperheight @@ -840,10 +896,10 @@ {%\getallmarks % now in following token register \the\everybeforepagebody \starttextproperties - \setnextsubpageno % nog eens: als in pagina (tbv standaard opmaak) +% \setnextsubpageno % nog eens: als in pagina (tbv standaard opmaak) \dontshowboxes % dan hier blokkeren en verderop resetten -% \shipoutfacingpage - \checkmargeblokken +% \shipoutfacingpage + \checkmarginblocks \the\beforeeverypage \normalexpanded{\global\beforepage\emptytoks\the\beforepage}% \scratchtoks\beforepage\global\beforepage\emptytoks\the\scratchtoks % was \flushtoks\beforepage \inpagebodytrue\buildpagebody#1#2% @@ -1009,7 +1065,13 @@ \executepagebreakhandler\v!yes \fi \ifnum\prevrealpageno<\realpageno - \global\chardef\pageornamentstate\zerocount + % there must have been a reason why i added the ifcase + % but it fails on tests/mkiv/pages/ornaments-001.tex + % as WS found out so we have to wait till the next side + % effect shows up + % \ifcase\pageornamentstate\or + \global\chardef\pageornamentstate\zerocount + % \fi \fi \egroup} @@ -1182,14 +1244,12 @@ % \definepagebreak[instance][forsure] % \definepagebreak[forsure][yes,+4] -\def\definepagebreak +\unexpanded\def\definepagebreak {\dodoubleargument\dodefinepagebreak} \def\dodefinepagebreak[#1][#2]% non recursive, meant for simple mappings {\setvalue{\??pe::#1}{#2}} -% hier nog uti blokkeren - % don't change this / test case: % % \setupbackgrounds[state=repeat] @@ -1201,7 +1261,7 @@ \long\def\installcolumnbreakhandler#1#2#3% #1=otr-id #2=tag {\long\setvalue{\??cn:#1:#2}{#3}} -\def\definecolumnbreak +\unexpanded\def\definecolumnbreak {\dodoubleargument\dodefinecolumnbreak} \def\dodefinecolumnbreak[#1][#2]% non recursive, meant for simple mappings @@ -1402,10 +1462,10 @@ \newbox\facingpage -\def\setupoppositeplacing +\unexpanded\def\setupoppositeplacing {\dodoubleargument\getparameters[\??np]} -\def\startopposite +\unexpanded\def\startopposite {\dowithnextboxcontent {\hsize\makeupwidth}% {\global\setbox\facingpage\vbox @@ -1418,7 +1478,7 @@ \box\nextbox}}% \vbox\bgroup} -\def\stopopposite +\unexpanded\def\stopopposite {\egroup} \def\finishfacingpage |