diff options
Diffstat (limited to 'tex/context/base/page-brk.mkiv')
-rw-r--r-- | tex/context/base/page-brk.mkiv | 245 |
1 files changed, 58 insertions, 187 deletions
diff --git a/tex/context/base/page-brk.mkiv b/tex/context/base/page-brk.mkiv index 11dc04bfd..cc9a9b4d2 100644 --- a/tex/context/base/page-brk.mkiv +++ b/tex/context/base/page-brk.mkiv @@ -316,204 +316,75 @@ %D Test page breaks. -% \newdimen \d_page_tests_test -% \newconstant\c_page_tests_mode +\newdimen \d_page_tests_test +\newconstant\c_page_tests_mode -\newconstant\testpagemethod % old -\newconstant\testpagetrigger % old +\newconstant\testpagemethod % todo: \testnewpage[method=,lines=,voffset=] +\newconstant\testpagetrigger -% \unexpanded\def\testpage {\c_page_tests_mode\plusone \dodoubleempty\page_tests_test} % -% \unexpanded\def\testpageonly{\c_page_tests_mode\plustwo \dodoubleempty\page_tests_test} % no penalties added to the mvl -% \unexpanded\def\testpagesync{\c_page_tests_mode\plusthree\dodoubleempty\page_tests_test} % force sync -% -% \def\page_tests_test[#1][#2]% don't change, only add more methods -% {\relax % needed before \if -% \ifconditional\c_page_breaks_enabled -% % new from here -% \ifcase\testpagetrigger -% \endgraf -% \or\ifvmode -% \dosomebreak\allowbreak -% \else % indeed? -% \vadjust{\allowbreak}% -% \endgraf -% \fi\fi -% % till here -% \ifdim\pagegoal<\maxdimen \relax -% \ifdim\pagetotal<\pagegoal \relax -% \d_page_tests_test\dimexpr -% #1\lineheight -% +\pagetotal -% \ifdim\lastskip<\parskip+\parskip\fi -% \ifsecondargument+#2\fi -% \relax -% \ifcase\testpagemethod -% \ifdim\d_page_tests_test>.99\pagegoal -% \penalty-\plustenthousand -% \fi -% \or -% \ifdim\dimexpr\d_page_tests_test-\pagegoal\relax>-\lineheight -% \penalty-\plustenthousand -% \fi -% \or -% \getnoflines\pagegoal -% \ifdim\dimexpr\d_page_tests_test-\noflines\lineheight\relax>-\lineheight -% \penalty-\plustenthousand -% \fi -% \or % same as 0 but more accurate -% \ifdim\dimexpr\d_page_tests_test-10\scaledpoint\relax>\pagegoal -% \penalty-\plustenthousand -% \fi -% \fi -% \else\ifnum\c_page_tests_mode=\plusthree -% \page_tests_flush_so_far -% \fi\fi -% \else\ifnum\c_page_tests_mode=\plusone -% \goodbreak -% \fi\fi -% \else -% \endgraf -% \fi} -% -% \def\page_tests_flush_so_far -% {\endgraf -% \ifdim\pagetotal>\pagegoal -% \ifdim\dimexpr\pagetotal-\pageshrink\relax>\pagegoal -% \goodbreak -% \else -% \page -% \fi -% \fi} - -\installcorenamespace {pagechecker} -\installcorenamespace {pagecheckermethod} - -\installcommandhandler \??pagechecker {pagechecker} \??pagechecker - -\setuppagechecker - [\c!method=1, - \c!before=, - \c!after=, - \c!inbetween=, - \c!lines=\plusthree, - \c!offset=\zeropoint] - -\def\page_check_amount - {\dimexpr - \pagecheckerparameter\c!lines\lineheight - +\pagetotal - \ifdim\lastskip<\parskip+\parskip\fi - +\pagecheckerparameter\c!offset - \relax} - -\unexpanded\def\checkpage - {\dodoubleempty\page_check} - -\def\page_check[#1][#2]% +\unexpanded\def\testpage {\c_page_tests_mode\plusone \dodoubleempty\page_tests_test} % +\unexpanded\def\testpageonly{\c_page_tests_mode\plustwo \dodoubleempty\page_tests_test} % no penalties added to the mvl +\unexpanded\def\testpagesync{\c_page_tests_mode\plusthree\dodoubleempty\page_tests_test} % force sync + +\def\page_tests_test[#1][#2]% don't change, only add more methods {\relax % needed before \if - \endgraf \ifconditional\c_page_breaks_enabled - \begingroup - \edef\currentpagechecker{#1}% - \ifsecondargument\setupcurrentpagechecker[#2]\fi - \csname\??pagecheckermethod\pagecheckerparameter\c!method\endcsname - \endgroup - \fi} - -\setvalue{\??pagecheckermethod 0}% - {\ifdim\pagegoal<\maxdimen \relax - \ifdim\pagetotal<\pagegoal \relax - \ifdim\page_check_amount>.99\pagegoal - \pagecheckerparameter\c!before - \penalty-\plustenthousand - \pagecheckerparameter\c!after - \else - \pagecheckerparameter\c!inbetween - \fi - \else - \pagecheckerparameter\c!inbetween - \fi - \else - \pagecheckerparameter\c!inbetween - \fi} - -\setvalue{\??pagecheckermethod 1}% - {\ifdim\pagegoal<\maxdimen \relax - \ifdim\pagetotal<\pagegoal \relax - \ifdim\dimexpr\page_check_amount-\pagegoal\relax>-\lineheight - \pagecheckerparameter\c!before - \penalty-\plustenthousand - \pagecheckerparameter\c!after - \else - \pagecheckerparameter\c!inbetween - \fi - \else - \pagecheckerparameter\c!inbetween - \fi - \else - \goodbreak - \pagecheckerparameter\c!inbetween - \fi} - -\setvalue{\??pagecheckermethod 2}% - {\ifdim\pagegoal<\maxdimen \relax - \ifdim\pagetotal<\pagegoal \relax - \getnoflines\pagegoal - \ifdim\dimexpr\page_check_amount-\noflines\lineheight\relax>-\lineheight - \pagecheckparameter\c!before - \penalty-\plustenthousand - \pagecheckerparameter\c!after - \else - \pagecheckerparameter\c!inbetween - \fi - \else - \pagecheckerparameter\c!inbetween - \fi + % new from here + \ifcase\testpagetrigger + \endgraf + \or\ifvmode + \dosomebreak\allowbreak + \else % indeed? + \vadjust{\allowbreak}% + \endgraf + \fi\fi + % till here + \ifdim\pagegoal<\maxdimen \relax + \ifdim\pagetotal<\pagegoal \relax + \d_page_tests_test\dimexpr + #1\lineheight + +\pagetotal + \ifdim\lastskip<\parskip+\parskip\fi + \ifsecondargument+#2\fi + \relax + \ifcase\testpagemethod + \ifdim\d_page_tests_test>.99\pagegoal + \penalty-\plustenthousand + \fi + \or + \ifdim\dimexpr\d_page_tests_test-\pagegoal\relax>-\lineheight + \penalty-\plustenthousand + \fi + \or + \getnoflines\pagegoal + \ifdim\dimexpr\d_page_tests_test-\noflines\lineheight\relax>-\lineheight + \penalty-\plustenthousand + \fi + \or % same as 0 but more accurate + \ifdim\dimexpr\d_page_tests_test-10\scaledpoint\relax>\pagegoal + \penalty-\plustenthousand + \fi + \fi + \else\ifnum\c_page_tests_mode=\plusthree + \page_tests_flush_so_far + \fi\fi + \else\ifnum\c_page_tests_mode=\plusone + \goodbreak + \fi\fi \else - \pagecheckerparameter\c!inbetween + \endgraf \fi} -\setvalue{\??pagecheckermethod 3}% - {\ifdim\pagegoal<\maxdimen \relax - \ifdim\pagetotal<\pagegoal \relax - \ifdim\dimexpr\page_check_amount-10\scaledpoint\relax>\pagegoal - \pagecheckerparameter\c!before - \penalty-\plustenthousand - \pagecheckerparameter\c!after - \else - \pagecheckerparameter\c!inbetween - \fi +\def\page_tests_flush_so_far + {\endgraf + \ifdim\pagetotal>\pagegoal + \ifdim\dimexpr\pagetotal-\pageshrink\relax>\pagegoal + \goodbreak \else - \ifdim\pagetotal>\pagegoal - \ifdim\dimexpr\pagetotal-\pageshrink\relax>\pagegoal - \goodbreak - \pagecheckerparameter\c!inbetween - \else - \pagecheckerparameter\c!before - \page - \pagecheckerparameter\c!after - \fi - \else - \pagecheckerparameter\c!inbetween - \fi + \page \fi - \else - \pagecheckerparameter\c!inbetween \fi} -\definepagechecker[\s!unknown:0] [\c!method=0,\c!before=,\c!after=,\c!inbetween=] -\definepagechecker[\s!unknown:1][\s!unknown:0][\c!method=1] -\definepagechecker[\s!unknown:2][\s!unknown:0][\c!method=2] -\definepagechecker[\s!unknown:3][\s!unknown:0][\c!method=3] - -\def\page_tests_test_a[#1][#2]{\normalexpanded{\checkpage[\s!unknown:1][\c!lines=#1,\c!offset=\ifsecondargument#2\else\zeropoint\fi]}} -\def\page_tests_test_b[#1][#2]{\normalexpanded{\checkpage[\s!unknown:2][\c!lines=#1,\c!offset=\ifsecondargument#2\else\zeropoint\fi]}} -\def\page_tests_test_c[#1][#2]{\normalexpanded{\checkpage[\s!unknown:3][\c!lines=#1,\c!offset=\ifsecondargument#2\else\zeropoint\fi]}} - -\unexpanded\def\testpage {\dodoubleempty\page_tests_test_a} % -\unexpanded\def\testpageonly{\dodoubleempty\page_tests_test_b} % no penalties added to the mvl -\unexpanded\def\testpagesync{\dodoubleempty\page_tests_test_c} % force sync - %D Test column breaks. \unexpanded\def\testcolumn |