diff options
Diffstat (limited to 'tex/context/base/page-one.mkiv')
-rw-r--r-- | tex/context/base/page-one.mkiv | 259 |
1 files changed, 120 insertions, 139 deletions
diff --git a/tex/context/base/page-one.mkiv b/tex/context/base/page-one.mkiv index 6261938b6..89fd7d4a8 100644 --- a/tex/context/base/page-one.mkiv +++ b/tex/context/base/page-one.mkiv @@ -20,7 +20,7 @@ % OTRONE: basic single column -\newconstant \c_page_one_float_method +\newdimen\d_page_one_saved_vsize \unexpanded\def\page_one_command_next_page {\page_otr_eject_page} @@ -34,34 +34,6 @@ \unexpanded\def\page_one_command_set_float_hsize {\global\hsize\textwidth} -% \newdimen\d_page_one_saved_vsize -% -% \unexpanded\def\page_one_command_set_vsize -% {\ifgridsnapping -% \ifcase\layoutlines -% \getrawnoflines\textheight -% \else -% \noflines\layoutlines -% \fi -% \global\vsize\noflines\openlineheight -% \else -% \global\vsize\textheight -% \fi -% \ifdim\pagegoal<\maxdimen -% \ifdim\d_page_one_saved_vsize=\vsize -% % let's assume that the layout didn't change -% \else -% \global\d_page_one_saved_vsize\vsize -% \pagegoal\dimexpr\vsize-\d_page_floats_inserted_top-\d_page_floats_inserted_bottom\relax -% % \bgroup -% % \global\d_page_one_saved_vsize\vsize -% % \advance\vsize-\d_page_floats_inserted_top -% % \advance\vsize-\d_page_floats_inserted_bottom -% % \pagegoal\vsize -% % \egroup -% \fi -% \fi} - \unexpanded\def\page_one_command_set_vsize {\ifgridsnapping \ifcase\layoutlines @@ -73,10 +45,20 @@ \else \global\vsize\textheight \fi - % alternatively we could set it in builders.buildpage_filter - % \ifdim\pagegoal<\maxdimen .. \fi - \global\pagegoal\dimexpr\vsize-\d_page_floats_inserted_top-\d_page_floats_inserted_bottom\relax} - + \ifdim\pagegoal<\maxdimen + \ifdim\d_page_one_saved_vsize=\vsize + % let's assume that the layout didn't change + \else + \global\d_page_one_saved_vsize\vsize + \global\pagegoal\dimexpr\vsize-\topinserted-\botinserted\relax +% \bgroup +% \global\d_page_one_saved_vsize\vsize +% \advance\vsize-\topinserted +% \advance\vsize-\botinserted +% \global\pagegoal\vsize +% \egroup + \fi + \fi} % 1 = partial page, 2 = whole page, 3 = partial page @@ -204,32 +186,31 @@ \newskip \s_page_one_between_top_insert \def\page_one_prepare_top_float - {\ifdim\d_page_floats_inserted_top=\zeropoint + {\ifdim\topinserted=\zeropoint \settrue\c_page_one_top_of_insert \else \setfalse\c_page_one_top_of_insert \fi - \s_page_one_between_top_insert\ifdim\d_strc_floats_top>\d_strc_floats_bottom\d_strc_floats_top\else\d_strc_floats_bottom\fi\relax - \global\advance\d_page_floats_inserted_top\dimexpr\ht\floatbox+\dp\floatbox+\s_page_one_between_top_insert\relax} + \s_page_one_between_top_insert\ifdim\floattopskip>\floatbottomskip\floattopskip\else\floatbottomskip\fi\relax + \global\advance\topinserted\dimexpr\ht\floatbox+\dp\floatbox+\s_page_one_between_top_insert\relax} \def\page_one_insert_top_float % maybe remember last beforeskip - {\insert\namedinsertionnumber\s!topfloat\bgroup - \forgetall - \ifconditional\c_page_one_top_of_insert - \ifconditional\c_page_one_correct_top_insert - \topskipcorrection % [xx] new: see icare topbleed - \kern-\lineskip - \par - \prevdepth\maxdimen - \fi - \fi - \page_otr_command_flush_float_box - \vskip\s_page_one_between_top_insert - \egroup} + {\insert\topins + {\forgetall + \ifconditional\c_page_one_top_of_insert + \ifconditional\c_page_one_correct_top_insert + \topskipcorrection % [xx] new: see icare topbleed + \kern-\lineskip + \par + \prevdepth\maxdimen + \fi + \fi + \page_otr_command_flush_float_box + \vskip\s_page_one_between_top_insert}} \unexpanded\def\page_one_command_set_top_insertions {\bgroup - \ifconditional\c_page_floats_some_waiting + \ifsomefloatwaiting \noffloatinserts\zerocount \let\totaltopinserted\!!zeropoint \page_one_command_set_top_insertions_indeed @@ -247,25 +228,25 @@ \egroup} \def\page_one_command_set_top_insertions_indeed - {\ifnum\noffloatinserts<\c_page_floats_n_of_top - \page_floats_get + {\ifnum\noffloatinserts<\noftopfloats + \dogetfloat \page_one_prepare_top_float - \ifdim\d_page_floats_inserted_top<\textheight\relax - \xdef\totaltopinserted{\the\d_page_floats_inserted_top}% + \ifdim\topinserted<\textheight\relax + \xdef\totaltopinserted{\the\topinserted}% \page_one_insert_top_float - \ifconditional\c_page_floats_some_waiting + \ifsomefloatwaiting \advance\noffloatinserts \plusone \else - \noffloatinserts\c_page_floats_n_of_top\relax + \noffloatinserts\noftopfloats\relax \fi - \page_floats_report_flushed + \dofloatflushedinfo \else - \page_floats_resave\s!text - \noffloatinserts\c_page_floats_n_of_top\relax + \doresavefloat + \noffloatinserts\noftopfloats\relax \fi \else - \ifconditional\c_page_floats_some_waiting - \showmessage\m!floatblocks6{\the\c_page_floats_n_of_top}% + \ifsomefloatwaiting + \showmessage\m!floatblocks6{\the\noftopfloats}% \fi \let\page_one_command_set_top_insertions_indeed\relax \fi @@ -273,98 +254,101 @@ \unexpanded\def\page_one_command_set_bottom_insertions {\bgroup - \ifconditional\c_page_floats_some_waiting + \ifsomefloatwaiting \noffloatinserts\zerocount \page_one_command_set_bottom_insertions_indeed \fi \egroup} \def\page_one_command_set_bottom_insertions_indeed - {\ifnum\noffloatinserts<\c_page_floats_n_of_bottom\relax - \page_floats_get - \global\advance\d_page_floats_inserted_bottom\dimexpr\ht\floatbox+\dp\floatbox+\d_strc_floats_top\relax - \ifdim\d_page_floats_inserted_bottom<\pagegoal\relax - \insert\namedinsertionnumber\s!bottomfloat\bgroup - \forgetall - \blank[\rootfloatparameter\c!spacebefore]% - \page_otr_command_flush_float_box - \egroup - \ifconditional\c_page_floats_some_waiting + {\ifnum\noffloatinserts<\nofbotfloats\relax + \dogetfloat + \global\advance\botinserted \ht\floatbox\relax + \global\advance\botinserted \dp\floatbox\relax + \global\advance\botinserted \floattopskip\relax + \ifdim\botinserted<\pagegoal\relax + \insert\botins + {\forgetall + \blank[\rootfloatparameter\c!spacebefore]% + \page_otr_command_flush_float_box}% + \ifsomefloatwaiting \advance\noffloatinserts \plusone \else - \noffloatinserts\c_page_floats_n_of_bottom + \noffloatinserts\nofbotfloats \fi - \page_floats_report_flushed + \dofloatflushedinfo \else - \page_floats_resave\s!text - \noffloatinserts\c_page_floats_n_of_bottom\relax + \doresavefloat + \noffloatinserts\nofbotfloats\relax \fi - \global\settrue\c_page_floats_not_permitted % vgl topfloats s! + \global\nofloatpermittedtrue % vgl topfloats s! \else - \ifconditional\c_page_floats_some_waiting - \showmessage\m!floatblocks7{\the\c_page_floats_n_of_bottom}% + \ifsomefloatwaiting + \showmessage\m!floatblocks7{\the\nofbotfloats}% \fi \let\page_one_command_set_bottom_insertions_indeed\relax \fi \page_one_command_set_bottom_insertions_indeed} +\newconstant\topinserttopskipmode % 1 = no topskip + \unexpanded\def\page_one_command_flush_top_insertions - {\ifvoid\namedinsertionnumber\s!topfloat\else + {\ifvoid\topins\else \ifgridsnapping - \box\namedinsertionnumber\s!topfloat + \box\topins \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed \else - \ifcase\c_page_floats_insertions_topskip_mode + \ifcase\topinserttopskipmode % 0: default, do nothing \or % 1: no topskip (crossed fingers) \vskip-\topskip \vskip\strutheight \fi - \unvbox\namedinsertionnumber\s!topfloat + \unvbox\topins \fi \fi - \global\d_page_floats_inserted_top\zeropoint} + \global\topinserted\zeropoint} \unexpanded\def\page_one_command_flush_bottom_insertions - {\ifvoid\namedinsertionnumber\s!bottomfloat\else + {\ifvoid\botins\else \ifgridsnapping % \floatparameter\c!bottombefore - \snaptogrid\hbox{\box\namedinsertionnumber\s!bottomfloat}% + \snaptogrid\hbox{\box\botins}% % \floatparameter\c!bottomafter \else \floatparameter\c!bottombefore - \unvbox\namedinsertionnumber\s!bottomfloat + \unvbox\botins \floatparameter\c!bottomafter \fi \fi - \global\d_page_floats_inserted_bottom\zeropoint - \global\setfalse\c_page_floats_not_permitted} + \global\botinserted\zeropoint + \global\nofloatpermittedfalse} \unexpanded\def\page_one_command_flush_floats - {\global\settrue\c_page_floats_flushing - \ifconditional\c_page_floats_some_waiting + {\global\flushingfloatstrue + \ifsomefloatwaiting \par % if kept, then option and definitely off in gridmode ! ! ! ! % \ifvmode \prevdepth\maxdimen \fi % prevents whitespace; problematic in icare tests \page_one_command_flush_floats_indeed \fi \global\savednoffloats\zerocount - \global\setfalse\c_page_floats_some_waiting - \global\setfalse\c_page_floats_flushing} + \global\somefloatwaitingfalse + \global\flushingfloatsfalse} \unexpanded\def\page_one_command_flush_float_box - {\ifconditional\c_page_floats_center_box \ifdim\wd\floatbox<\hsize + {\ifcenterfloatbox \ifdim\wd\floatbox<\hsize \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}% \fi \fi - \snaptogrid\hbox{\box\floatbox}} % was copy + \snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}} % was copy \def\page_one_command_flush_floats_indeed % much in common with OTRSET - {\ifconditional\c_page_floats_some_waiting - \ifconditional\c_page_floats_pack_flushed - \setfalse\c_page_floats_center_box % not needed as we do call directly - \page_floats_collect\s!text\hsize\emwidth + {\ifsomefloatwaiting + \ifpackflushedfloats + \centerfloatboxfalse % not needed as we do call directly + \dofloatscollect\s!text{\hsize}{1em}% %% no longer (interferes with footnotes): %% %% \page_one_command_set_vsize % test 2011.06.24.001 @@ -373,9 +357,9 @@ {\hfil \dorecurse\nofcollectedfloats {\ifcase\columndirection % nog document wide - \page_floats_flush\s!text\plusone + \dofloatsflush\s!text{1}% \else - \page_floats_flush\s!text{\the\numexpr\nofcollectedfloats-\recurselevel+1\relax}% + \dofloatsflush\s!text{\the\numexpr\nofcollectedfloats-\recurselevel+1\relax}% \fi \ifdim\wd\floatbox>\makeupwidth % \hsize \hbox to \makeupwidth{\hss\box\floatbox\hss}% @@ -387,7 +371,7 @@ \fi}% \hfil}% \else - \page_floats_get + \dogetfloat \fi % there is a chance that due to rounding errors, the float % fits on a page where it was first rejected, in which case @@ -410,8 +394,8 @@ \fi} \unexpanded\def\page_one_command_check_if_float_fits - {\ifconditional\c_page_floats_not_permitted - \global\setfalse\c_page_floats_room + {\ifnofloatpermitted + \global\roomforfloatfalse \else % new per 31/5/2004, should be an option, only one column mode \begingroup @@ -421,10 +405,10 @@ \fi % should be an option \endgroup - \dimen0\dimexpr\pagetotal+\floatheight+\d_strc_floats_top-\pageshrink\relax + \dimen0\dimexpr\pagetotal+\floatheight+\floattopskip-\pageshrink\relax \dimen2\pagegoal \relax % needed - \ifcase\c_page_one_float_method + \ifcase\textfloatmethod % method 0 : raw \or % method 1 : safe @@ -435,19 +419,19 @@ \fi \relax % really needed ! ! ! ! \ifdim\dimen0>\dimen2 - \global\setfalse\c_page_floats_room + \global\roomforfloatfalse \else - \global\settrue\c_page_floats_room + \global\roomforfloattrue \fi \fi} \unexpanded\def\page_one_command_flush_saved_floats - {\global\d_page_floats_inserted_top\zeropoint - \global\d_page_floats_inserted_bottom\zeropoint - \ifconditional\c_page_floats_flushing \else + {\global\topinserted\zeropoint + \global\botinserted\zeropoint + \ifflushingfloats \else \page_one_command_set_top_insertions \page_one_command_set_bottom_insertions - \ifconditional\c_page_floats_some_waiting + \ifsomefloatwaiting \doif{\rootfloatparameter\c!cache}\v!no\page_one_command_flush_floats % could be _otr_ \else\ifconditional\c_page_margin_blocks_present \page_one_command_flush_floats @@ -459,7 +443,7 @@ \baselinecorrection %\fi \doplacefloatbox - \page_floats_report_total + \doinsertfloatinfo \dohandlenextfloatindent} \def\page_one_place_float_force @@ -485,10 +469,10 @@ %def\page_one_place_float_margin {\page_one_place_float_side_indeed\page_sides_process_float_margin\nonoindentation} % wil be overloaded \def\page_one_place_float_margin {\page_margin_blocks_process_float} -\def\page_one_place_float_page {\page_floats_save_page_float \s!page \floatlocationmethod} -\def\page_one_place_float_leftpage {\page_floats_save_page_float \s!leftpage \floatlocationmethod} -\def\page_one_place_float_rightpage {\page_floats_save_page_float \s!rightpage\floatlocationmethod} -\def\page_one_place_float_somewhere {\page_floats_save_somewhere_float\s!somewhere\floatlocationmethod} +\def\page_one_place_float_page {\dofloatssavepagefloat \s!page \floatlocationmethod} +\def\page_one_place_float_leftpage {\dofloatssavepagefloat \s!leftpage \floatlocationmethod} +\def\page_one_place_float_rightpage {\dofloatssavepagefloat \s!rightpage\floatlocationmethod} +\def\page_one_place_float_somewhere {\dofloatssavesomewherefloat\s!somewhere\floatlocationmethod} \def\page_one_place_float_here {\page_one_place_float_otherwise_here} \def\page_one_place_float_auto {\page_one_place_float_otherwise} @@ -504,41 +488,38 @@ {\doifinsetelse\v!always\floatlocationmethod {\page[\v!preference]% \page_otr_command_check_if_float_fits - \ifconditional\c_page_floats_room + \ifroomforfloat \page_one_place_float_here_indeed \else \showmessage\m!floatblocks9\empty - \page_floats_resave\s!text + \doreversesavefloat \fi} - {\ifconditional\c_page_floats_some_waiting - \page_floats_save\s!text - \nonoindentation + {\ifsomefloatwaiting + \dosavefloat \else \page[\v!preference]% \page_otr_command_check_if_float_fits - \ifconditional\c_page_floats_room + \ifroomforfloat \page_one_place_float_here_indeed \else - \page_floats_save\s!text - \nonoindentation + \dosavefloat \fi \fi}} \def\page_one_place_float_otherwise_else {\doifinsetelse\v!always\floatlocationmethod {\page_otr_command_check_if_float_fits - \ifconditional\c_page_floats_room + \ifroomforfloat \page_one_place_float_auto_top_bottom \else \showmessage\m!floatblocks9\empty - \page_floats_resave\s!text + \doreversesavefloat \fi} {\page_otr_command_check_if_float_fits - \ifconditional\c_page_floats_room + \ifroomforfloat \page_one_place_float_auto_top_bottom \else - \page_floats_save\s!text - \nonoindentation + \dosavefloat \fi}} \def\floatautofactor{.5} @@ -563,23 +544,23 @@ \def\page_one_place_float_top_indeed % maybe remember last beforeskip {\page_one_prepare_top_float \page_one_insert_top_float - \page_floats_report_total} + \doinsertfloatinfo} \def\page_one_place_float_bottom_indeed - {\global\advance\d_page_floats_inserted_bottom\dimexpr\ht\floatbox+\dp\floatbox+\d_strc_floats_top\relax - \insert\namedinsertionnumber\s!bottomfloat\bgroup - \forgetall - \blank[\rootfloatparameter\c!spacebefore]% - \page_otr_command_flush_float_box - \egroup - \page_floats_report_total} + {\global\advance\botinserted\dimexpr\ht\floatbox+\dp\floatbox+\floattopskip\relax + \insert\botins + {\forgetall + \blank[\rootfloatparameter\c!spacebefore]% + \page_otr_command_flush_float_box}% + %\global\nofloatpermittedtrue + \doinsertfloatinfo} \def\page_one_place_float_face % links, rechts, midden, hoog, midden, laag {%\checkwaitingfloats{#1}% \startopposite \page_otr_command_flush_float_box \stopopposite - }%\page_floats_report_total} + }%\doinsertfloatinfo} \unexpanded\def\page_one_command_flush_side_floats {\page_sides_flush_floats} |