summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/page-sid.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/page-sid.mkxl')
-rw-r--r--tex/context/base/mkxl/page-sid.mkxl170
1 files changed, 133 insertions, 37 deletions
diff --git a/tex/context/base/mkxl/page-sid.mkxl b/tex/context/base/mkxl/page-sid.mkxl
index 37bea4fb3..052b3ee11 100644
--- a/tex/context/base/mkxl/page-sid.mkxl
+++ b/tex/context/base/mkxl/page-sid.mkxl
@@ -40,6 +40,7 @@
\newdimen \d_page_sides_vsize_reset
\newdimen \d_page_sides_progress
\newdimen \d_page_sides_page_total
+\newdimen \d_page_sides_shape_down_shift
\newdimen \d_page_sides_leftoffset
\newdimen \d_page_sides_rightoffset
@@ -55,6 +56,7 @@
\newconditional \c_page_sides_short
\newconditional \c_page_sides_flag
+\newconditional \c_page_sides_shape_down
\newdimen \d_page_sides_shift
\newdimen \d_page_sides_extrashift
@@ -331,6 +333,7 @@
\page_sides_force_depth
\ht\floatbox\privatescratchdimen
\dp\floatbox\zeropoint
+ \else
\fi
\ifcase\c_page_sides_align \else
\global\d_page_sides_toptotal\zeropoint
@@ -360,7 +363,16 @@
\fi
% new
\global\c_page_sides_lines_done\zerocount
- \ifnum\c_page_sides_n_of_lines>\zerocount
+ \ifconditional\c_page_sides_shape_down
+ \global\d_page_sides_shape_down_shift\dimexpr
+ \privatescratchdimen
+ +\htdp\floatbox
+% -\lineheight
+ \relax
+ \advance\privatescratchdimen\c_page_sides_n_of_lines\lineheight
+\advance\privatescratchdimen2\lineheight
+ \else
+ \global\d_page_sides_shape_down_shift\zeropoint
\advance\privatescratchdimen\c_page_sides_n_of_lines\lineheight
\fi
\iftracesidefloats
@@ -375,6 +387,7 @@
\fi
\global\d_page_sides_downshift\zeropoint}
+
%D We have a few virtual dimensions. I'm not sure what to do with \type
%D {\pagedepth} and \type {\pageshrink} in the next two. If we ever need
%D that it will become options.
@@ -429,7 +442,9 @@
\page_otr_command_set_vsize} % new, no longer really needed
\def\page_sides_flush_floats
- {\par
+ {\ifconditional\c_page_sides_shape_down\else
+ \par
+ \fi
\ifdim\d_page_sides_flush_criterium>\zeropoint
\page_sides_flush_floats_progress
\page_sides_flush_floats_after_next
@@ -635,15 +650,19 @@
\def\page_sides_place_float
{\ifnum\c_page_sides_float_type=\plusfour \kern\d_page_sides_toptotal \fi
\ifnum\c_page_sides_float_type=\plusfive \kern\d_page_sides_toptotal \fi
- \ifgridsnapping
- \page_sides_place_float_grid
- \else
+ \ifconditional\c_page_sides_shape_down
\page_sides_place_float_normal
- \fi
- \par
- \kern-\d_page_sides_height
- \penalty10001 % oeps, this will change
- \normalbaselines}
+ \else
+ \ifgridsnapping
+ \page_sides_place_float_grid
+ \else
+ \page_sides_place_float_normal
+ \fi
+ \par
+ \kern-\d_page_sides_height
+ \penalty10001 % oeps, this will change
+ \normalbaselines
+ \fi}
\def\page_sides_place_float_normal
{\page_sides_push_float_inline\firstofoneargument}
@@ -665,17 +684,39 @@
\let\strc_floats_mark_par_as_free\relax
-\def\page_sides_push_float_inline#1%
- {\begingroup
- \reseteverypar % needed !
- \parskip\zeropoint % needed !
- \nointerlineskip
- \page_sides_set_skips
- \page_floats_report_total
- \relax
- %\lefttoright % not needed in lmtx
- \strc_floats_mark_par_as_free
- \ifcase\c_page_sides_float_type
+% \def\page_sides_push_float_inline#1%
+% {\begingroup
+% \reseteverypar % needed !
+% \parskip\zeropoint % needed !
+% \nointerlineskip
+% \page_sides_set_skips
+% \page_floats_report_total
+% \relax
+% %\lefttoright % not needed in lmtx
+% \strc_floats_mark_par_as_free
+% \ifcase\c_page_sides_float_type
+% % invalid
+% \or % backspace
+% \noindent#1{\llap{\rlap{\box\floatbox}\kern\d_page_sides_leftskip}}\hfill
+% \or % leftedge
+% \noindent#1{\llap{\box\floatbox\kern\d_page_sides_leftskip}}\hfill
+% \or % leftmargin
+% \noindent#1{\llap{\box\floatbox\kern\d_page_sides_leftskip}}\hfill
+% \or % leftside
+% \noindent#1{\box\floatbox}\hfill
+% \or % rightside
+% \hfill#1{\box\floatbox}%
+% \or % rightmargin
+% \hfill#1{\rlap{\kern\d_page_sides_rightskip\box\floatbox}}%
+% \or % rightedge
+% \hfill#1{\rlap{\kern\d_page_sides_rightskip\box\floatbox}}%
+% \or % cutspace
+% \hfill#1{\rlap{\kern\d_page_sides_rightskip\llap{\box\floatbox}}}%
+% \fi
+% \endgroup}
+
+\def\page_sides_push_float_inline_indeed#1%
+ {\ifcase\c_page_sides_float_type
% invalid
\or % backspace
\noindent#1{\llap{\rlap{\box\floatbox}\kern\d_page_sides_leftskip}}\hfill
@@ -693,8 +734,28 @@
\hfill#1{\rlap{\kern\d_page_sides_rightskip\box\floatbox}}%
\or % cutspace
\hfill#1{\rlap{\kern\d_page_sides_rightskip\llap{\box\floatbox}}}%
- \fi
- \endgroup}
+ \fi}
+
+\def\page_sides_push_float_inline#1%
+ {\ifconditional\c_page_sides_shape_down
+ \page_sides_set_skips
+ \page_floats_report_total
+ \global\setbox\floatbox\hbox to \hsize\bgroup
+ \page_sides_push_float_inline_indeed#1%
+ \egroup
+ \else
+ \begingroup
+ \reseteverypar % needed !
+ \parskip\zeropoint % needed !
+ \nointerlineskip
+ \page_sides_set_skips
+ \page_floats_report_total
+ \relax
+ %\lefttoright % not needed in lmtx
+ \strc_floats_mark_par_as_free
+ \page_sides_push_float_inline_indeed#1%
+ \endgroup
+ \fi}
% \def\page_sides_analyse_progress
% {\d_page_sides_progress\d_page_sides_vsize
@@ -793,19 +854,22 @@
\def\page_sides_analyse_space
{\page_sides_analyse_space_stage_one
- % \ifconditional\c_page_sides_check_same_page
- % \ifdim\d_spac_prevcontent>\zeropoint
- % \ifdim\dimexpr\scratchdimenone+\d_spac_prevcontent>\scratchdimentwo
- % \clf_pushatsame
- % \setbox\scratchbox\vpack{\clf_popatsame}%
- % \page
- % \box\scratchbox
- % \vskip-\lineskip
- % \page_sides_analyse_space_stage_one
- % \fi
- % \fi
- % \fi
- \page_sides_analyse_space_stage_two}
+% \ifconditional\c_page_sides_check_same_page
+% \ifdim\d_spac_prevcontent>\zeropoint
+% \ifdim\dimexpr\scratchdimenone+\d_spac_prevcontent>\scratchdimentwo
+% \clf_pushatsame
+% \setbox\scratchbox\vpack{\clf_popatsame}%
+% \page
+% \box\scratchbox
+% \vskip-\lineskip
+% \page_sides_analyse_space_stage_one
+% \fi
+% \fi
+% \fi
+ \page_sides_analyse_space_stage_two
+ \ifconditional\c_page_sides_shape_down
+ \global\settrue\c_page_floats_room
+ \fi}
%D As we have no clear end of one or more paragraphs we only have pre float
%D skips.
@@ -857,7 +921,39 @@
{% we need to do this aftergroup
\aftergroup\par
\aftergroup\ignoreparskip
- \aftergroup\ignorespaces}
+ \aftergroup\ignorespaces
+ \aftergroup\page_sizes_delay_float}%
+
+\def\page_sides_local_float_flush
+ {\ifconditional\c_page_sides_shape_down
+ \ifnum\localboxlinenumber=\c_page_sides_n_of_lines\relax
+ \hpack to \localboxlinewidth
+ xoffset -\the\localboxlinewidth
+ yoffset -\d_page_sides_shape_down_shift
+ {\box\floatbox}%
+ \fi
+ \fi}
+
+%D Experimental and tricky:
+%D
+%D \starttext
+%D \samplefile{lorem} \blank[20*line]
+%D \startplacefigure[location={right,15*hang,force}]
+%D %\startplacefigure[location={right,15*hang}]
+%D \framed[width=30mm,height=20mm]{!!}
+%D \stopplacefigure
+%D \dorecurse{10}{\samplefile{lorem}}
+%D \stoptext
+
+\definelocalboxes
+ [\v!left:\v!float]
+ [\c!command=\page_sides_local_float_flush,
+ \c!location=\v!middle]
+
+\def\page_sizes_delay_float
+ {\ifconditional\c_page_sides_shape_down
+ \localbox[\v!left:\v!float]{}%
+ \fi}%
\def\page_sides_check_floats_indeed
{\page_sides_analyse_progress