diff options
Diffstat (limited to 'tex/context/base/strc-flt.mkvi')
-rw-r--r-- | tex/context/base/strc-flt.mkvi | 74 |
1 files changed, 57 insertions, 17 deletions
diff --git a/tex/context/base/strc-flt.mkvi b/tex/context/base/strc-flt.mkvi index ba1f4e29c..05cfa40e3 100644 --- a/tex/context/base/strc-flt.mkvi +++ b/tex/context/base/strc-flt.mkvi @@ -355,26 +355,66 @@ \fi \fi} -% the tricky part of getting float related two pass data is +% The tricky part of getting float related two pass data is % that we should fetch is early but can only save it with % the composed float box; this determines the order: get it -% before saving it +% before saving it. -\definetwopasslist{\s!float\s!data} \newcounter\noffloatdata +% We had this: +% +% \definetwopasslist{\s!float\s!data} \newcounter\noffloatdata +% +% \let\strc_float_realpage\realpageno % used for odd/even determination, can be combined with nodelocation +% +% \def\strc_float_save_data % \expanded ... will change in mkiv +% {\doglobal\increment\noffloatdata +% \lazysavetaggedtwopassdata{\s!float\s!data}{\noffloatdata}{\noffloatpages}{\noexpand\realfolio}}% later {}{}{}{} and \getfirst... +% +% \def\strc_float_load_data % precedes save ! +% {\doglobal\increment\noffloatpages +% \findtwopassdata{\s!float\s!data}{\noffloatpages}% +% \ifconditional\twopassdatafound +% \globallet\strc_float_realpage\twopassdata +% \else +% \globallet\strc_float_realpage\realpageno % \realfolio +% \fi} + +%D We can do this ... +%D +%D \starttyping +%D \newcount\c_strc_floats_n +%D +%D \definedataset[\s!float][\c!delay=\v!yes] +%D +%D \let\strc_float_realpage\realpageno +%D +%D \def\strc_float_save_data +%D {\setdataset[\s!float][\number\c_strc_floats_n][]} +%D +%D \def\strc_float_load_data % precedes save ! +%D {\global\advance\c_strc_floats_n\plusone +%D \xdef\strc_float_realpage{\datasetvariable\s!float{\number\c_strc_floats_n}\s!page}% +%D \ifx\strc_float_realpage\empty +%D \globallet\strc_float_realpage\realpageno % \realfolio +%D \fi} +%D \stoptyping +%D +%D ... but this is more efficient: -\let\twopassfloatdata\realpageno % used for odd/even determination, can be combined with nodelocation +\definepagestate[\s!float][\c!delay=\v!yes] -\def\dosavefloatdata % \expanded ... will change in mkiv - {\doglobal\increment\noffloatdata - \lazysavetaggedtwopassdata{\s!float\s!data}{\noffloatdata}{\noffloatpages}{\noexpand\realfolio}}% later {}{}{}{} and \getfirst... +\newcount\c_strc_floats_n -\def\dogetfloatdata % precedes save ! - {\doglobal\increment\noffloatpages - \findtwopassdata{\s!float\s!data}{\noffloatpages}% - \ifconditional\twopassdatafound - \globallet\twopassfloatdata\twopassdata - \else - \globallet\twopassfloatdata\realpageno % \realfolio +\let\strc_float_realpage\realpageno + +\def\strc_float_save_data + {\setpagestate[\s!float][\number\c_strc_floats_n]} + +\def\strc_float_load_data % precedes save ! + {\global\advance\c_strc_floats_n\plusone + \xdef\strc_float_realpage{\pagestaterealpage\s!float{\number\c_strc_floats_n}}% + \ifx\strc_float_realpage\empty + \globallet\strc_float_realpage\realpageno % \realfolio \fi} %D test case: @@ -807,7 +847,7 @@ \appendtoks \everyinsidefloat\emptytoks % in case it's called earlier - \dogetfloatdata + \strc_float_load_data \to \everyinsidefloat \def\doifrightpagefloatelse @@ -822,7 +862,7 @@ \fi} \def\doifoddfloatpageelse - {\ifodd\purenumber\twopassfloatdata\space + {\ifodd\purenumber\strc_float_realpage\space \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments @@ -1816,7 +1856,7 @@ \fi \strc_floats_set_local_dimensions \global\advance\totalnoffloats\plusone - \setbox\floatbox\hbox{\dosavefloatdata\box\floatbox}% still needed? we will do renumbering differently + \setbox\floatbox\hbox{\strc_float_save_data\box\floatbox}% still needed? we will do renumbering differently \global\floatheight\htdp\floatbox \global\floatwidth\wd\floatbox \doifnotinset\v!margin\floatlocation % gaat namelijk nog fout |