diff options
Diffstat (limited to 'tex/context/base/page-one.mkiv')
-rw-r--r-- | tex/context/base/page-one.mkiv | 386 |
1 files changed, 235 insertions, 151 deletions
diff --git a/tex/context/base/page-one.mkiv b/tex/context/base/page-one.mkiv index 98d82f3a7..1a695e157 100644 --- a/tex/context/base/page-one.mkiv +++ b/tex/context/base/page-one.mkiv @@ -20,22 +20,21 @@ % OTRONE: basic single column -\page_otr_activate{ONE}\empty % the default otr +\newdimen\d_page_one_saved_vsize -\newtoks\OTRONEoutput - -\def\OTRONEgotonextpage +\unexpanded\def\page_one_command_next_page {\page_otr_eject_page} -\def\OTRONEgotonextpageX % will become obsolete +\unexpanded\def\page_one_command_next_page_and_inserts {\page_otr_eject_page_and_flush_inserts} -\def\OTRONEsethsize +\unexpanded\def\page_one_command_set_hsize {\global\hsize\textwidth} -\newdimen\oldvsize +\unexpanded\def\page_one_command_set_float_hsize + {\global\hsize\textwidth} -\def\OTRONEsetvsize +\unexpanded\def\page_one_command_set_vsize {\ifgridsnapping \ifcase\layoutlines \getrawnoflines\textheight @@ -47,13 +46,13 @@ \global\vsize\textheight \fi \ifdim\pagegoal<\maxdimen - \ifdim\oldvsize=\vsize + \ifdim\d_page_one_saved_vsize=\vsize % let's assume that the layout didn't change \else - \global\oldvsize\vsize + \global\d_page_one_saved_vsize\vsize \global\pagegoal\dimexpr\vsize-\topinserted-\botinserted\relax % \bgroup -% \global\oldvsize\vsize +% \global\d_page_one_saved_vsize\vsize % \advance\vsize-\topinserted % \advance\vsize-\botinserted % \global\pagegoal\vsize @@ -61,36 +60,25 @@ \fi \fi} -% can we avoid the extra vboxing here? - -\def\OTRONEregisteredtextarea#1% obsolete - {\ifconditional\c_page_areas_enabled - \setbox0\vbox{#1}% - \wd0\makeupwidth % somehow a space creeps in - \vbox{\registeredtextarea000}% - \else - #1% - \fi} - % 1 = partial page, 2 = whole page, 3 = partial page \setnewconstant\kindofpagetextareas\plustwo -\def\OTRONEregisteredtextareaA +\def\page_one_registered_text_area_a {\ifconditional\c_page_areas_enabled - \expandafter\OTRONEregisteredtextareaAindeed + \expandafter\page_one_registered_text_area_a_indeed \else \expandafter\firstofoneargument \fi} -\def\OTRONEregisteredtextareaB +\def\page_one_registered_text_area_b {\ifconditional\c_page_areas_enabled - \expandafter\OTRONEregisteredtextareaBindeed + \expandafter\page_one_registered_text_area_b_indeed \else \expandafter\firstofoneargument \fi} -\def\OTRONEregisteredtextareaAindeed +\def\page_one_registered_text_area_a_indeed {\ifcase\kindofpagetextareas \expandafter\firstofoneargument \or % partial page (experimental) @@ -101,7 +89,7 @@ \expandafter\page_areas_register_boxed \fi} -\def\OTRONEregisteredtextareaBindeed +\def\page_one_registered_text_area_b_indeed {\ifcase\kindofpagetextareas \expandafter\firstofoneargument \or % partial page (experimental) @@ -113,34 +101,51 @@ \fi} \newdimen\d_page_one_natural_depth +\newbox \b_page_one_bottom_notes +\newbox \b_page_one_contents + +\let\page_one_command_package_show_state\relax + +% \fakepagenotes ... needs checking +% +% we can also have bottom notes on top of bottom insertions -\def\OTRONEdopagecontents#1#2% \box<n> \unvbox<n> % this one will be redone (checked) +\unexpanded\def\page_one_command_package_contents#1#2% \box<n> \unvbox<n> % this one will be redone (checked) {\bgroup \strc_notes_check_if_bottom_present - \setbox0\vbox \ifconditional\c_notes_bottom_present to \textheight \fi - {\d_page_one_natural_depth\dp#2\relax - \dotopinsertions - \OTRONEregisteredtextareaA{#1#2}% + \d_page_one_natural_depth\dp#2\relax + % we need to set the height as otherwise the shrink will not kick in so the following + % no longer applies: + % + % \setbox\b_page_one_contents\vbox \ifconditional\c_notes_bottom_present to \textheight \fi + % + \setbox\b_page_one_contents\vbox to \textheight + {\page_otr_command_flush_top_insertions + % this is messy ... we will provide a more tight area (no big deal as we can + % do that at the lua end) + \page_one_registered_text_area_a{#1#2}% \unvbox <box> + % \ifgridsnapping \vskip\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax \prevdepth\openstrutdepth - \dobotinsertions + \page_otr_command_flush_bottom_insertions \vfil \else\ifcase\bottomraggednessmode - % ragged + % ragged (default) \vskip\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax \prevdepth\openstrutdepth - \dobotinsertions + \page_otr_command_flush_bottom_insertions \vfil \or % align (normal) - \dobotinsertions + \page_otr_command_flush_bottom_insertions \or % baseline \kern\dimexpr\maxdepth-\d_page_one_natural_depth\relax - \dobotinsertions + \page_otr_command_flush_bottom_insertions \fi\fi \fakepagenotes}% + \page_one_command_package_show_state \ifconditional\c_notes_bottom_present \ifgridsnapping \ifcase\layoutlines @@ -148,47 +153,42 @@ \else \noflines\layoutlines \fi - \advance\noflines\minusone - \scratchoffset\dimexpr\noflines\lineheight+\topskip\relax + \scratchoffset\dimexpr\numexpr\noflines-\plusone\relax\lineheight+\topskip\relax \else - \scratchoffset\ht0 + \scratchoffset\ht\b_page_one_contents \fi + \setbox\b_page_one_bottom_notes\hbox + {\checksinglecolumnfootnotes % why this check? *** + \lower\scratchoffset\vbox{\placebottomnotes}}% + \smashbox\b_page_one_bottom_notes + \ht\b_page_one_contents\zeropoint + \page_one_registered_text_area_b + {\vbox to \textheight + {\box\b_page_one_contents + \box\b_page_one_bottom_notes}}% \else - \scratchoffset\zeropoint + \ht\b_page_one_contents\textheight + \page_one_registered_text_area_b + {\box\b_page_one_contents}% \fi - \setbox2\hbox - {\checksinglecolumnfootnotes % why this check? - \lower\scratchoffset - \vbox{\placebottomnotes}}% - \smashbox2% % needed here - \OTRONEregisteredtextareaB - {\vbox to \textheight - {\ifconditional\c_notes_bottom_present - \ht0\zeropoint - \box0 - \box2 - \else - \box0 - \box2 - \vfill - \fi}}% \egroup} -\def\OTRONEfinalsidefloatoutput - {\finaloutput\unvbox\normalpagebox} +\unexpanded\def\page_one_command_side_float_output + {\page_otr_construct_and_shipout\unvbox\normalpagebox} -\OTRONEoutput{\page_sides_output_routine} % this will become a command +\unexpanded\def\page_one_command_routine + {\page_sides_output_routine} %D Insertions -\newif\iftopofinsert +\newconditional\c_page_one_top_of_insert -\def\OTRONEdosettopinserts +\unexpanded\def\page_one_command_set_top_insertions {\bgroup \ifsomefloatwaiting \noffloatinserts\zerocount \let\totaltopinserted\!!zeropoint - \OTRONEdodosettopinserts + \page_one_command_set_top_insertions_indeed \ifnum\rootfloatparameter\c!nbottom=\zerocount \ifnum\rootfloatparameter\c!nlines>\zerocount \ifdim\totaltopinserted>\zeropoint\relax @@ -202,20 +202,20 @@ \fi \egroup} -\def\OTRONEdodosettopinserts +\def\page_one_command_set_top_insertions_indeed {\ifnum\noffloatinserts<\noftopfloats \dogetfloat \ifdim\topinserted=\zeropoint - \topofinserttrue + \settrue\c_page_one_top_of_insert \else - \topofinsertfalse + \setfalse\c_page_one_top_of_insert \fi \global\advance\topinserted\dimexpr\ht\floatbox+\dp\floatbox+\floatbottomskip\relax \ifdim\topinserted<\textheight\relax \xdef\totaltopinserted{\the\topinserted}% \insert\topins {\forgetall - \iftopofinsert + \ifconditional\c_page_one_top_of_insert \topskipcorrection % [xx] new: see icare topbleed \kern-\lineskip\par \prevdepth\maxdimen @@ -223,7 +223,7 @@ %\blank[-\rootfloatparameter\c!spaceafter,\rootfloatparameter\c!spacebefore]% inserts can't look back \betweenfloatblanko \fi - \flushfloatbox + \page_otr_command_flush_float_box \blank[\rootfloatparameter\c!spaceafter]}% \ifsomefloatwaiting \advance\noffloatinserts \plusone @@ -239,19 +239,19 @@ \ifsomefloatwaiting \showmessage\m!floatblocks6{\the\noftopfloats}% \fi - \let\OTRONEdodosettopinserts\relax + \let\page_one_command_set_top_insertions_indeed\relax \fi - \OTRONEdodosettopinserts} + \page_one_command_set_top_insertions_indeed} -\def\OTRONEdosetbotinserts +\unexpanded\def\page_one_command_set_bottom_insertions {\bgroup \ifsomefloatwaiting \noffloatinserts\zerocount - \OTRONEdodosetbotinserts + \page_one_command_set_bottom_insertions_indeed \fi \egroup} -\def\OTRONEdodosetbotinserts +\def\page_one_command_set_bottom_insertions_indeed {\ifnum\noffloatinserts<\nofbotfloats\relax \dogetfloat \global\advance\botinserted \ht\floatbox\relax @@ -261,7 +261,7 @@ \insert\botins {\forgetall \blank[\rootfloatparameter\c!spacebefore]% - \flushfloatbox}% + \page_otr_command_flush_float_box}% \ifsomefloatwaiting \advance\noffloatinserts \plusone \else @@ -277,24 +277,13 @@ \ifsomefloatwaiting \showmessage\m!floatblocks7{\the\nofbotfloats}% \fi - \let\OTRONEdodosetbotinserts\relax + \let\page_one_command_set_bottom_insertions_indeed\relax \fi - \OTRONEdodosetbotinserts} - -\def\OTRONEdosetbothinserts - {\global\topinserted\zeropoint - \global\botinserted\zeropoint - \ifflushingfloats \else - \OTRONEdosettopinserts - \OTRONEdosetbotinserts - \ifsomefloatwaiting - \doif{\rootfloatparameter\c!cache}\v!no\doflushfloats - \fi - \fi} + \page_one_command_set_bottom_insertions_indeed} \newconstant\topinserttopskipmode % 1 = no topskip -\def\OTRONEdotopinsertions +\unexpanded\def\page_one_command_flush_top_insertions {\ifvoid\topins\else \ifgridsnapping \box\topins @@ -313,7 +302,7 @@ \fi \global\topinserted\zeropoint} -\def\OTRONEdobotinsertions +\unexpanded\def\page_one_command_flush_bottom_insertions {\ifvoid\botins\else \ifgridsnapping % \floatparameter\c!bottombefore @@ -328,32 +317,32 @@ \global\botinserted\zeropoint \global\nofloatpermittedfalse} -\def\OTRONEdoflushfloats +\unexpanded\def\page_one_command_flush_floats {\global\flushingfloatstrue \ifsomefloatwaiting \par % if kept, then option and definitely off in gridmode ! ! ! ! % \ifvmode \prevdepth\maxdimen \fi % prevents whitespace; problematic in icare tests - \OTRONEdodoflushfloats + \page_one_command_flush_floats_indeed \fi \global\savednoffloats\zerocount \global\somefloatwaitingfalse \global\flushingfloatsfalse} -\def\OTRONEflushfloatbox % nog verder doorvoeren en meer info in marge +\unexpanded\def\page_one_command_flush_float_box {\ifcenterfloatbox \ifdim\wd\floatbox<\hsize \global\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}% \fi \fi \snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}} % was copy -\def\OTRONEdodoflushfloats % much in common with OTRSET +\def\page_one_command_flush_floats_indeed % much in common with OTRSET {\ifsomefloatwaiting \ifpackflushedfloats \centerfloatboxfalse % not needed as we do call directly \dofloatscollect\s!text{\hsize}{1em}% %% no longer (interferes with footnotes): %% - %% \OTRONEsetvsize % test 2011.06.24.001 + %% \page_one_command_set_vsize % test 2011.06.24.001 %% \global\setbox\floatbox\hbox to \hsize {\hfil @@ -379,10 +368,10 @@ % fits on a page where it was first rejected, in which case % the prevdepth is -maxdimen and we cannot obey the grid \doplacefloatbox - \expandafter\OTRONEdodoflushfloats + \expandafter\page_one_command_flush_floats_indeed \fi} -\def\OTRONEdocheckiffloatfits % vervangen ivm downward comp +\unexpanded\def\page_one_command_check_if_float_fits {\ifnofloatpermitted \global\roomforfloatfalse \else @@ -414,89 +403,184 @@ \fi \fi} -\def\OTRONEflushsavedfloats - {\dosetbothinserts} - -% TODO: TEST FIRST, NO CORRECTION NEEDED IN GRID MODE, EVT OPTION +\unexpanded\def\page_one_command_flush_saved_floats + {\global\topinserted\zeropoint + \global\botinserted\zeropoint + \ifflushingfloats \else + \page_one_command_set_top_insertions + \page_one_command_set_bottom_insertions + \ifsomefloatwaiting + \doif{\rootfloatparameter\c!cache}\v!no\page_one_command_flush_floats % could be _otr_ + \fi + \fi} -\def\OTRONEsomeherefloat[#1]% spacing between two successive must be better - {\baselinecorrection % not really needed in grid mode: - %\ifgridsnapping \else \baselinecorrection \fi % ! ! ! test test test ! ! ! ! +\def\page_one_place_float_here_indeed + {%\ifgridsnapping \else + \baselinecorrection + %\fi \doplacefloatbox \doinsertfloatinfo \dohandlenextfloatindent} -\setnewconstant\fixedfloatmethod\plusthree - -\def\OTRONEsomefixdfloat % [#1] - {% there is (in mkii) no good way to prevent a break - % so better fail than mess, we can get loose from - % heads, so be it - \showmessage\m!floatblocks9\empty - \OTRONEsomeherefloat} % [#1] - -\def\OTRONEsomesidefloat[#1]% links, rechts NOG TESTEN EN AANPASSEN - {\ifinsidecolumns - \someelsefloat[\v!here]% +\def\page_one_place_float_force + {\showmessage\m!floatblocks9\empty + \page_one_place_float_here_indeed} + +\def\page_one_place_float_side_indeed#1% + {\setbox\floatbox\vbox{\box\floatbox}% ? can go + \wd\floatbox\floatwidth + #1{\box\floatbox}% + \doifinset\v!tall\floatlocationmethod\page_sides_flush_floats_after_par} + +\def\page_one_place_float_left {\page_one_place_float_side_indeed\page_sides_process_float_left\presetindentation} +\def\page_one_place_float_right {\page_one_place_float_side_indeed\page_sides_process_float_right} +\def\page_one_place_float_margin {\page_one_place_float_side_indeed\page_sides_process_float_margin\nonoindentation} +\def\page_one_place_float_leftmargin {\page_one_place_float_side_indeed\page_sides_process_float_leftmargin} +\def\page_one_place_float_rightmargin{\page_one_place_float_side_indeed\page_sides_process_float_rightmargin} +\def\page_one_place_float_leftedge {\page_one_place_float_side_indeed\page_sides_process_float_leftedge} +\def\page_one_place_float_rightedge {\page_one_place_float_side_indeed\page_sides_process_float_rightedge} +\def\page_one_place_float_inmargin {\page_one_place_float_side_indeed\page_sides_process_float_cutspace} +\def\page_one_place_float_backspace {\page_one_place_float_side_indeed\page_sides_process_float_backspace} +\def\page_one_place_float_cutspace {\page_one_place_float_side_indeed\page_sides_process_float_cutspace} + +\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} +\def\page_one_place_float_top {\page_one_place_float_otherwise\nonoindentation} +\def\page_one_place_float_bottom {\page_one_place_float_otherwise} + +\def\page_one_place_float_otherwise + {\doifinsetelse\v!here\floatlocationmethod + \page_one_place_float_otherwise_here + \page_one_place_float_otherwise_else} + +\def\page_one_place_float_otherwise_here + {\doifinsetelse\v!always\floatlocationmethod + {\page[\v!preference]% + \page_otr_command_check_if_float_fits + \ifroomforfloat + \page_one_place_float_here_indeed + \else + \showmessage\m!floatblocks9\empty + \doreversesavefloat + \fi} + {\ifsomefloatwaiting + \dosavefloat + \else + \page[\v!preference]% + \page_otr_command_check_if_float_fits + \ifroomforfloat + \page_one_place_float_here_indeed + \else + \dosavefloat + \fi + \fi}} + +\def\page_one_place_float_otherwise_else + {\doifinsetelse\v!always\floatlocationmethod + {\page_otr_command_check_if_float_fits + \ifroomforfloat + \page_one_place_float_auto_top_bottom + \else + \showmessage\m!floatblocks9\empty + \doreversesavefloat + \fi} + {\page_otr_command_check_if_float_fits + \ifroomforfloat + \page_one_place_float_auto_top_bottom + \else + \dosavefloat + \fi}} + +\def\floatautofactor{.5} + +\def\page_one_place_float_auto_top_bottom + {\ifx\floatmethod\v!auto + \ifdim\pagetotal<\floatautofactor\pagegoal % when empty page, maxdimen + \page_one_place_float_top_indeed + \else + \page_one_place_float_bottom_indeed + \fi \else - %\checkwaitingfloats{#1}% - \setbox\floatbox\vbox{\box\floatbox}% ? can go - \wd\floatbox\floatwidth - \processfirstactioninset - [#1] - [ \v!left=>\leftfloat {\box\floatbox}, - \v!right=>\rightfloat {\box\floatbox}, - \v!inleft=>\leftmarginfloat {\box\floatbox}, - \v!inright=>\rightmarginfloat{\box\floatbox}, - \v!leftmargin=>\leftmarginfloat {\box\floatbox}, - \v!rightmargin=>\rightmarginfloat{\box\floatbox}, - \v!leftedge=>\leftedgefloat {\box\floatbox}, - \v!rightedge=>\rightedgefloat {\box\floatbox}, - \v!backspace=>\backspacefloat {\box\floatbox}, - \v!cutspace=>\cutspacefloat {\box\floatbox}, - \v!inmargin=>\cutspacefloat {\box\floatbox}]% - \doifinset\v!tall{#1}\flushsidefloatsafterpar + \ifx\floatmethod\v!top + \page_one_place_float_top_indeed + \else\ifx\floatmethod\v!bottom + \page_one_place_float_top_indeed + \else + \page_one_place_float_here_indeed + \fi\fi \fi} -\def\OTRONEsomepagefloat [#1]{\dofloatssavepagefloat {\s!page} {#1}} -\def\OTRONEsomeleftpagefloat [#1]{\dofloatssavepagefloat {\s!leftpage} {#1}} -\def\OTRONEsomerightpagefloat[#1]{\dofloatssavepagefloat {\s!rightpage}{#1}} - -%def\OTRONEsomesoemwherefloat[#1]{\dofloatssavesomewherefloat{\s!somewhere}{#1}} - -\def\OTRONEsometopsfloat[#1]% +\def\page_one_place_float_top_indeed {\ifdim\topinserted=\zeropoint - \topofinserttrue + \settrue\c_page_one_top_of_insert \else - \topofinsertfalse + \setfalse\c_page_one_top_of_insert \fi \global\advance\topinserted\dimexpr\ht\floatbox+\dp\floatbox+\floatbottomskip\relax \insert\topins {\forgetall - \iftopofinsert + \ifconditional\c_page_one_top_of_insert \topskipcorrection % [xx] new: see icare topbleed \kern-\lineskip\par\prevdepth\maxdimen \else %\blank[-\rootfloatparameter\c!spaceafter,\rootfloatparameter\c!spacebefore]% inserts can't look back \betweenfloatblanko \fi - \flushfloatbox + \page_otr_command_flush_float_box \blank[\rootfloatparameter\c!spaceafter]}% \doinsertfloatinfo} -\def\OTRONEsomebotsfloat[#1]% +\def\page_one_place_float_bottom_indeed {\global\advance\botinserted\dimexpr\ht\floatbox+\dp\floatbox+\floattopskip\relax \insert\botins {\forgetall \blank[\rootfloatparameter\c!spacebefore]% - \flushfloatbox}% + \page_otr_command_flush_float_box}% %\global\nofloatpermittedtrue \doinsertfloatinfo} -\def\OTRONEsomefacefloat[#1]% untested - {\startopposite\flushfloatbox\stopopposite} - -\def\OTRONEnextcolumn[#1]% - {} +\def\page_one_place_float_face % links, rechts, midden, hoog, midden, laag + {%\checkwaitingfloats{#1}% + \startopposite + \page_otr_command_flush_float_box + \stopopposite + }%\doinsertfloatinfo} + +\unexpanded\def\page_one_command_flush_side_floats + {\page_sides_flush_floats} + +\unexpanded\def\page_one_command_synchronize_side_floats + {\page_sides_synchronize_floats} + +\defineoutputroutine + [\s!singlecolumn] + [\s!page_otr_command_routine =\page_one_command_routine, + \s!page_otr_command_package_contents =\page_one_command_package_contents, + \s!page_otr_command_set_vsize =\page_one_command_set_vsize, + \s!page_otr_command_set_hsize =\page_one_command_set_hsize, + \s!page_otr_command_next_page =\page_one_command_next_page, + \s!page_otr_command_next_page_and_inserts =\page_one_command_next_page_and_inserts, + % \s!page_otr_command_synchronize_hsize =\page_one_command_synchronize_hsize, + \s!page_otr_command_set_top_insertions =\page_one_command_set_top_insertions, + \s!page_otr_command_set_bottom_insertions =\page_one_command_set_bottom_insertions, + \s!page_otr_command_flush_top_insertions =\page_one_command_flush_top_insertions, + \s!page_otr_command_flush_bottom_insertions =\page_one_command_flush_bottom_insertions, + % \s!page_otr_command_set_float_hsize =\page_one_command_set_float_hsize, + \s!page_otr_command_check_if_float_fits =\page_one_command_check_if_float_fits, + \s!page_otr_command_flush_float_box =\page_one_command_flush_float_box, + \s!page_otr_command_synchronize_side_floats =\page_one_command_synchronize_side_floats, + \s!page_otr_command_side_float_output =\page_one_command_side_float_output, + \s!page_otr_command_flush_floats =\page_one_command_flush_floats, + \s!page_otr_command_flush_side_floats =\page_one_command_flush_side_floats, + \s!page_otr_command_flush_saved_floats =\page_one_command_flush_saved_floats + ] + +% \setupoutputroutine +% [\s!singlecolumn] \protect \endinput |