diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/page-flt.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/page-flt.mkiv | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/page-flt.mkiv b/Master/texmf-dist/tex/context/base/page-flt.mkiv new file mode 100644 index 00000000000..944626b8e9c --- /dev/null +++ b/Master/texmf-dist/tex/context/base/page-flt.mkiv @@ -0,0 +1,233 @@ +%D \module +%D [ file=page-flt, +%D version=2010.04,08, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Float Management, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Page Macros / Float Management} + +%D This module has code that previously was in other modules. There is +%D also float related code in \type {strc-flt.mkiv}. + +\registerctxluafile{page-flt}{1.001} + +\unprotect + +%D To be checked and removed + +%def\dosavefloatinfo {\showmessage\m!floatblocks2{\the\totalnoffloats}} +\def\doinsertfloatinfo {\showmessage\m!floatblocks4{\the\totalnoffloats}} +\def\dofloatflushedinfo{\showmessage\m!floatblocks3{\the\numexpr\totalnoffloats-\savednoffloats\relax}} + +%D Extra float registers. + +\newif\ifsomefloatwaiting \somefloatwaitingfalse +\newif\ifroomforfloat \roomforfloattrue +\newif\ifnofloatpermitted \nofloatpermittedfalse +\newif\ifcenterfloatbox \centerfloatboxtrue +\newif\iflocalcenterfloatbox \localcenterfloatboxfalse +\newif\ifglobalcenterfloatbox \globalcenterfloatboxfalse +\newif\ifflushingfloats \flushingfloatsfalse +\newif\ifpackflushedfloats \packflushedfloatstrue % for the moment +\newif\ifpackcolumnfloats \packcolumnfloatstrue + +\newcount\totalnoffloats +\newcount\savednoffloats +\newcount\noffloatinserts +\newcount\nofcollectedfloats % communication channel + +\newbox \floatlist +\newbox \savedfloatlist +\newbox \floattext + +\newdimen\floatwidth +\newdimen\floatheight +\newdimen\floatdepth +\newdimen\floattextwidth +\newdimen\floattextheight + +\newbox \floatbox +\newbox \savedfloatbox + +%D From now on we manage the float stack at the \LUA\ end instead of packing +%D them in a box and splitting off stacked floats. It's not so much less code +%D but it's cleaner this way. It also opens op some posibilities as we can now +%D more conveniently cary additional information around. + +\newtoks \everyfloatscheck + +\appendtoks + \ifcase\savednoffloats + \global\somefloatwaitingfalse + \else + \global\somefloatwaitingtrue + \fi +\to \everyfloatscheck + +\def\dofloatsflush#1#2% + {\ctxlua{floats.flush("#1",\number#2)}% + \the\everyfloatscheck} + +\def\dofloatssave#1% + {\ctxlua{floats.save("#1")}% + \the\everyfloatscheck} + +\def\dofloatsresave#1% + {\ctxlua{floats.resave("#1")}% + \the\everyfloatscheck} + +\def\dopushsavedfloats + {\ctxlua{floats.push()}% + \the\everyfloatscheck} + +\def\dopopsavedfloats + {\ctxlua{floats.pop()}% + \the\everyfloatscheck} + +\def\dofloatsgetinfo#1% + {\ctxlua{floats.consult("#1")}} + +\def\doifsavedfloatelse#1% + {\ctxlua{commands.doifsavedfloatelse("#1")}} + +\def\dofloatscollect#1#2#3% + {\ctxlua{floats.collect("#1",\number\dimexpr#2,\number\dimexpr#3)}} + +\def\dofloatsnofstacked#1% + {\ctxlua{floats.thestacked("#1")}} + +\def\dofloatsgetvariable#1% + {\ctxlua{floats.thevar("specification")}} + +\let\dopushcolumnfloats\dopushsavedfloats +\let\dopopcolumnfloats \dopopsavedfloats + +\def\dofloatssavepagefloat#1#2% + {\ctxlua{floats.save("#1", { specification = "#2" })}} + +%D The following code is in transition as we don't want to break the +%D current single column, multi column, and columnset mechanism. +%D +%D First we reimplement some helpers. + +\def\dogetfloat + {\ifsomefloatwaiting + \dofloatsflush{text}{1}% + \ifcenterfloatbox + \ifdim\wd\globalscratchbox<\hsize + \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}% + \else + % retain special alignments + \ifinsidecolumns + \ifdim\wd\floatbox>\makeupwidth + \global\wd\floatbox\makeupwidth + \fi + \fi + \fi + \fi + \else + \global\savednoffloats\zerocount + \global\setbox\floatbox\emptybox + \fi} + +\def\dosavefloat + {\dofloatssave{text}% + \nonoindentation} % brrr nonoindentation here + +\def\doresavefloat + {\dofloatsresave{text}} + +\def\doreversesavefloat + {\dofloatsresave{text}} + +\def\doflushsavedfloats % simplified \OTRONEdodoflushfloats + {\doloop + {\ifsomefloatwaiting + \docheckiffloatfits + \ifroomforfloat + \dogetfloat + \doplacefloatbox + \else + \exitloop + \fi + \else + \exitloop + \fi}} + +%D Page floats use different stacks. + +\newtoks \everybeforeflushedpagefloat + +\def\doflushsomepagefloat#1% future releases can do more clever things + {\dofloatsflush{#1}{1}% + \edef\floatspecification{\dofloatsgetvariable{specification}}% + \the\everybeforeflushedpagefloat + \vbox to \textheight + {\doifnotinset\v!high\floatspecification\vfill + \box\floatbox + \doifnotinset\v!low\floatspecification\vfill}% + \vfill\eject} + +% \def\doflushpagefloats +% {\doifoddpageelse +% {\ifnum\dofloatsnofstacked{rightpage}>\zerocount +% \doflushsomepagefloat{rightpage}% +% \else\ifnum\dofloatsnofstacked{page}>\zerocount +% \doflushsomepagefloat{page} +% \else\ifnum\dofloatsnofstacked{leftpage}>\zerocount +% \null\vfill\eject +% %\doflushsomepagefloat{leftpage}% +% \fi\fi\fi} +% {\ifnum\dofloatsnofstacked{leftpage}>\zerocount +% \doflushsomepagefloat{leftpage}% +% \else\ifnum\dofloatsnofstacked{page}>\zerocount +% \doflushsomepagefloat{page} +% \else\ifnum\dofloatsnofstacked{rightpage}>\zerocount +% \null\vfill\eject +% %\doflushsomepagefloat{rightpage}% +% \fi\fi\fi}} + +\def\doflushpagefloats + {\edef\checkedpagefloat{\ctxlua{floats.thecheckedpagefloat()}}% (true) for packed + \ifx\checkedpagefloat\empty + % nothing + \else\ifx\checkedpagefloat\v!empty + \null\vfill\eject + \else + \doflushsomepagefloat\checkedpagefloat + \fi\fi} + +\def\uncenteredfloatbox + {\ifcenterfloatbox + \ifhbox\floatbox\relax % remove centering + \ifdim\wd\floatbox=\hsize + \ifhbox\floatbox + \setbox\scratchbox\hbox + {\unhbox\floatbox + \unskip\unskip + \global\setbox\globalscratchbox\lastbox}% + \box\globalscratchbox + \else + \box\floatbox + \fi + \else + \box\floatbox + \fi + \else + \box\floatbox + \fi + \else + \box\floatbox + \fi} + +\ifdefined\doflushfloats\else \let\doflushfloats\relax \fi +\ifdefined\flushfloatbox\else \let\flushfloatbox\relax \fi + +\protect \endinput |