summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/pack-rul.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/pack-rul.mkxl')
-rw-r--r--tex/context/base/mkxl/pack-rul.mkxl239
1 files changed, 144 insertions, 95 deletions
diff --git a/tex/context/base/mkxl/pack-rul.mkxl b/tex/context/base/mkxl/pack-rul.mkxl
index b6a22d894..52c2255fe 100644
--- a/tex/context/base/mkxl/pack-rul.mkxl
+++ b/tex/context/base/mkxl/pack-rul.mkxl
@@ -157,6 +157,7 @@
%\c!anchoring=,
\c!autowidth=\v!yes,
%\c!setups=,
+ \c!synchronize=,
\c!loffset=\zeropoint,
\c!roffset=\zeropoint,
\c!toffset=\zeropoint,
@@ -209,6 +210,7 @@
\let\p_framed_location \empty
\let\p_framed_orientation \empty
\let\p_framed_anchoring \empty
+\let\p_framed_synchronize \empty
\let\p_framed_autowidth \empty
\let\p_framed_franalyze \empty
\let\p_framed_backgroundcorner\empty
@@ -224,6 +226,7 @@
\let\p_framed_rulethickness \empty
\let\p_framed_foregroundcolor \empty
\let\p_framed_setups \empty
+\let\p_framed_synchronize \empty
%D We don't have to stick to a \TEX\ drawn rule, but also can use rounded
%D or even fancier shapes, as we will see later on.
@@ -555,7 +558,10 @@
{\anch_mark_tagged_box\b_framed_normal\m_overlay_region}
\def\pack_framed_add_background
- {\setbox\b_framed_normal\hpack % was vbox % see also *1*
+ {\ifconditional\c_pack_reanchor
+ \analyzelocalanchors\b_framed_normal
+ \fi
+ \setbox\b_framed_normal\hpack % was vbox % see also *1*
{%\pack_framed_forgetall % can be relaxed
\boxmaxdepth\maxdimen
\framedbackgroundoffset\d_framed_backgroundoffset
@@ -596,9 +602,9 @@
%D
%D We predefine two already familiar backgrounds:
-%letvalue{\??overlaybuiltin\v!screen }\pack_framed_background_box_gray
-\letvalue{\??overlaybuiltin\v!color }\pack_framed_background_box_color
-\letvalue{\??overlaybuiltin\v!foreground}\pack_framed_background_box_content % replaces: \defineoverlay[\v!foreground][\foregroundbox]
+%letcsname\??overlaybuiltin\v!screen \endcsname\pack_framed_background_box_gray
+\letcsname\??overlaybuiltin\v!color \endcsname\pack_framed_background_box_color
+\letcsname\??overlaybuiltin\v!foreground\endcsname\pack_framed_background_box_content % replaces: \defineoverlay[\v!foreground][\foregroundbox]
%D We can specify overlays as a comma separated list of overlays, a sometimes
%D handy feature.
@@ -676,21 +682,21 @@
\def\pack_framed_r_rule{\kern-\d_framed_linewidth\vrule\s!width\d_framed_linewidth}
\def\pack_framed_l_rule{\vrule\s!width\d_framed_linewidth\kern-\d_framed_linewidth}
-\letvalue{\??framedtop \v!on \v!on}\pack_framed_t_rule
-\letvalue{\??framedtop \v!off\v!on}\pack_framed_t_rule
-\letvalue{\??framedtop \v!on }\pack_framed_t_rule
+\letcsname\??framedtop \v!on \v!on\endcsname\pack_framed_t_rule
+\letcsname\??framedtop \v!off\v!on\endcsname\pack_framed_t_rule
+\letcsname\??framedtop \v!on \endcsname\pack_framed_t_rule
-\letvalue{\??framedbottom\v!on \v!on}\pack_framed_b_rule
-\letvalue{\??framedbottom\v!off\v!on}\pack_framed_b_rule
-\letvalue{\??framedbottom\v!on }\pack_framed_b_rule
+\letcsname\??framedbottom\v!on \v!on\endcsname\pack_framed_b_rule
+\letcsname\??framedbottom\v!off\v!on\endcsname\pack_framed_b_rule
+\letcsname\??framedbottom\v!on \endcsname\pack_framed_b_rule
-\letvalue{\??framedleft \v!on \v!on}\pack_framed_l_rule
-\letvalue{\??framedleft \v!off\v!on}\pack_framed_l_rule
-\letvalue{\??framedleft \v!on }\pack_framed_l_rule
+\letcsname\??framedleft \v!on \v!on\endcsname\pack_framed_l_rule
+\letcsname\??framedleft \v!off\v!on\endcsname\pack_framed_l_rule
+\letcsname\??framedleft \v!on \endcsname\pack_framed_l_rule
-\letvalue{\??framedright \v!on \v!on}\pack_framed_r_rule
-\letvalue{\??framedright \v!off\v!on}\pack_framed_r_rule
-\letvalue{\??framedright \v!on }\pack_framed_r_rule
+\letcsname\??framedright \v!on \v!on\endcsname\pack_framed_r_rule
+\letcsname\??framedright \v!off\v!on\endcsname\pack_framed_r_rule
+\letcsname\??framedright \v!on \endcsname\pack_framed_r_rule
% no overlapping rules
@@ -699,21 +705,21 @@
\def\pack_framed_r_rules{\kern-\d_framed_linewidth\vrule\s!height\dimexpr\d_framed_target_ht-\d_framed_linewidth\relax\s!depth-\d_framed_linewidth\s!width\d_framed_linewidth}
\def\pack_framed_l_rules{\vrule\s!height\dimexpr\d_framed_target_ht-\d_framed_linewidth\relax\s!depth-\d_framed_linewidth\s!width\d_framed_linewidth\kern-\d_framed_linewidth}
-\letvalue{\??framedtop \v!small\v!small}\pack_framed_t_rules
-\letvalue{\??framedtop \v!off \v!small}\pack_framed_t_rules
-\letvalue{\??framedtop \v!small }\pack_framed_t_rules
+\letcsname\??framedtop \v!small\v!small\endcsname\pack_framed_t_rules
+\letcsname\??framedtop \v!off \v!small\endcsname\pack_framed_t_rules
+\letcsname\??framedtop \v!small \endcsname\pack_framed_t_rules
-\letvalue{\??framedbottom\v!small\v!small}\pack_framed_b_rules
-\letvalue{\??framedbottom\v!off \v!small}\pack_framed_b_rules
-\letvalue{\??framedbottom\v!small }\pack_framed_b_rules
+\letcsname\??framedbottom\v!small\v!small\endcsname\pack_framed_b_rules
+\letcsname\??framedbottom\v!off \v!small\endcsname\pack_framed_b_rules
+\letcsname\??framedbottom\v!small \endcsname\pack_framed_b_rules
-\letvalue{\??framedleft \v!small\v!small}\pack_framed_l_rules
-\letvalue{\??framedleft \v!off \v!small}\pack_framed_l_rules
-\letvalue{\??framedleft \v!small }\pack_framed_l_rules
+\letcsname\??framedleft \v!small\v!small\endcsname\pack_framed_l_rules
+\letcsname\??framedleft \v!off \v!small\endcsname\pack_framed_l_rules
+\letcsname\??framedleft \v!small \endcsname\pack_framed_l_rules
-\letvalue{\??framedright \v!small\v!small}\pack_framed_r_rules
-\letvalue{\??framedright \v!off \v!small}\pack_framed_r_rules
-\letvalue{\??framedright \v!small }\pack_framed_r_rules
+\letcsname\??framedright \v!small\v!small\endcsname\pack_framed_r_rules
+\letcsname\??framedright \v!off \v!small\endcsname\pack_framed_r_rules
+\letcsname\??framedright \v!small \endcsname\pack_framed_r_rules
% \framed
% [width=4cm,height=3cm,rulethickness=3mm,
@@ -1007,6 +1013,33 @@
\aliased\let\localendstrut\relax
\aliased\let\localstrut \relax
+% better a constant:
+
+\newconditional\c_pack_resync
+\newconditional\c_pack_reanchor
+
+% \let\spac_framed_pop_local_anchors\relax
+
+\def\spac_framed_push_local_anchors
+ {\ifx\p_framed_synchronize\v!yes
+ \settrue\c_pack_resync
+ \settrue\c_pack_reanchor
+ \pushlocalanchors
+ % \aftergrouped{\aftergrouped{\poplocalanchors}}%
+ \aftergroup\poplocalanchors
+ \orelse\ifx\p_framed_synchronize\v!text
+ \settrue\c_pack_resync
+ \pushlocalanchors
+ \aftergroup\poplocalanchors
+ \orelse\ifx\p_framed_synchronize\v!background
+ \settrue\c_pack_reanchor
+ \pushlocalanchors
+ \aftergroup\poplocalanchors
+ \else
+ \setfalse\c_pack_resync
+ \setfalse\c_pack_reanchor
+ \fi}
+
\protected\def\pack_framed_process_indeed
{\d_framed_frameoffset\framedparameter\c!frameoffset
\edef\p_framed_backgroundoffset{\framedparameter\c!backgroundoffset}%
@@ -1037,10 +1070,19 @@
\edef\p_framed_location {\framedparameter\c!location}%
\edef\p_framed_orientation{\framedparameter\c!orientation}%
\edef\p_framed_anchoring {\framedparameter\c!anchoring}%
+ \edef\p_framed_synchronize{\framedparameter\c!synchronize}%
%
\edef\p_framed_autowidth {\framedparameter\c!autowidth}%
\edef\p_framed_franalyze {\framedparameter\c!fr!analyze}% experimental option
%
+ \ifempty\p_framed_synchronize
+ \setfalse\c_pack_resync
+ \setfalse\c_pack_reanchor
+% \let\spac_framed_pop_local_anchors\relax
+ \else
+ \spac_framed_push_local_anchors
+ \fi
+ %
\ifx\p_framed_frame\v!overlay % no frame, no offset, no framewidth
\setfalse\c_framed_has_frame
\let\localoffset\v!overlay
@@ -1203,7 +1245,7 @@
% widths
-\setvalue{\??framedwidthalternative\empty}%
+\defcsname\??framedwidthalternative\empty\endcsname
{\ifconditional\c_framed_has_format
\settrue\c_framed_has_width
\d_framed_width\hsize
@@ -1212,7 +1254,7 @@
\d_framed_width\zeropoint
\fi}
-\setvalue{\??framedwidthalternative\v!fit}%
+\defcsname\??framedwidthalternative\v!fit\endcsname
{\ifconditional\c_framed_has_format
\settrue\c_framed_has_width
\d_framed_width\hsize
@@ -1221,7 +1263,7 @@
\d_framed_width\zeropoint
\fi}
-\setvalue{\??framedwidthalternative\v!fixed}% equals \v!fit but no shapebox
+\defcsname\??framedwidthalternative\v!fixed\endcsname % equals \v!fit but no shapebox
{\ifconditional\c_framed_has_format
\settrue\c_framed_has_width
\d_framed_width\hsize
@@ -1230,20 +1272,20 @@
\d_framed_width\zeropoint
\fi}
-\setvalue{\??framedwidthalternative\v!broad}%
+\defcsname\??framedwidthalternative\v!broad\endcsname
{\settrue\c_framed_has_width
\d_framed_width\hsize}
-\setvalue{\??framedwidthalternative\v!max}% idem broad
+\defcsname\??framedwidthalternative\v!max\endcsname % idem broad
{\settrue\c_framed_has_width
\d_framed_width\hsize}
-\setvalue{\??framedwidthalternative\v!local}%
+\defcsname\??framedwidthalternative\v!local\endcsname
{\settrue\c_framed_has_width
%\setlocalhsize
\d_framed_width\localhsize}
-\setvalue{\??framedwidthalternative\s!unknown}%
+\defcsname\??framedwidthalternative\s!unknown\endcsname
{\settrue\c_framed_has_width
\d_framed_width\localwidth}
@@ -1253,23 +1295,23 @@
% heights
-\setvalue{\??framedheightalternative\empty}%
+\defcsname\??framedheightalternative\empty\endcsname
{\setfalse\c_framed_has_height
\d_framed_height\zeropoint}
-\setvalue{\??framedheightalternative\v!fit}%
+\defcsname\??framedheightalternative\v!fit\endcsname
{\setfalse\c_framed_has_height
\d_framed_height\zeropoint}
-\setvalue{\??framedheightalternative\v!broad}%
+\defcsname\??framedheightalternative\v!broad\endcsname
{\setfalse\c_framed_has_height
\d_framed_height\zeropoint}
-\setvalue{\??framedheightalternative\v!max}%
+\defcsname\??framedheightalternative\v!max\endcsname
{\settrue\c_framed_has_height
\d_framed_height\vsize}
-\setvalue{\??framedheightalternative\s!unknown}%
+\defcsname\??framedheightalternative\s!unknown\endcsname
{\settrue\c_framed_has_height
\d_framed_height\localheight}
@@ -1279,49 +1321,49 @@
% struts (use let instead?)
-\setvalue{\??framedstrutalternative\v!no}%
+\defcsname\??framedstrutalternative\v!no\endcsname
{\c_framed_has_strut\plusone}
-\setvalue{\??framedstrutalternative\v!global}%
+\defcsname\??framedstrutalternative\v!global\endcsname
{\setstrut}
-\setvalue{\??framedstrutalternative\v!local}%
+\defcsname\??framedstrutalternative\v!local\endcsname
{\setfontstrut}
-\setvalue{\??framedstrutalternative\v!yes}%
+\defcsname\??framedstrutalternative\v!yes\endcsname
{\setstrut}
-\setvalue{\??framedstrutalternative\s!unknown}%
+\defcsname\??framedstrutalternative\s!unknown\endcsname
{\setstrut}
\def\framed_strut_alternative_unknown
{\setstrut}
-\setvalue{\??framedstrutalternative\v!none}% not even pseudo struts
+\defcsname\??framedstrutalternative\v!none\endcsname % not even pseudo struts
{\c_framed_has_strut\zerocount}
% offsets
-\setvalue{\??framedoffsetalternative\v!none}%
+\defcsname\??framedoffsetalternative\v!none\endcsname
{\setfalse\c_framed_has_offset
\c_framed_has_strut\plusone
\setfalse\c_framed_is_overlaid
\d_framed_local_offset\d_framed_linewidth}
-\setvalue{\??framedoffsetalternative\v!overlay}%
+\defcsname\??framedoffsetalternative\v!overlay\endcsname
{% \ifx\p_framed_frame\v!no \setfalse\c_framed_has_frame \fi % test first
\setfalse\c_framed_has_offset
\c_framed_has_strut\plusone
\settrue\c_framed_is_overlaid
\d_framed_local_offset\zeropoint}
-% \setvalue{\??framedoffsetalternative\v!strut}%
+% \defcsname\??framedoffsetalternative\v!strut\endcsname
% {\setfalse\c_framed_has_offset
% \c_framed_has_strut\plustwo
% \settrue\c_framed_is_overlaid
% \d_framed_local_offset\zeropoint}
-\setvalue{\??framedoffsetalternative\v!default}% new per 2-6-2000
+\defcsname\??framedoffsetalternative\v!default\endcsname % new per 2-6-2000
{\settrue \c_framed_has_offset
\c_framed_has_strut\plustwo
\setfalse\c_framed_is_overlaid
@@ -1336,7 +1378,7 @@
\let\defaultframeoffset\localoffset
\d_framed_local_offset\dimexpr\localoffset+\d_framed_linewidth\relax}
-\letvalue{\??framedoffsetalternative\s!unknown}\framed_offset_alternative_unknown
+\letcsname\??framedoffsetalternative\s!unknown\endcsname\framed_offset_alternative_unknown
% so far for alternatives
@@ -1412,6 +1454,19 @@
% options (btw, beware of location settings of derived functionality that bleed
% into this
+\def\pack_framed_profile_box
+ {\profilegivenbox\p_profile\b_framed_normal
+ \setbox\b_framed_normal\vpack{\unvbox\b_framed_normal}}
+
+\def\pack_framed_reverse_box
+ {\ifvbox\b_framed_normal
+ \edef\p_linedirection{\framedparameter\c!linedirection}%
+ \ifx\p_linedirection\v!reverse
+ \reversevboxcontent\b_framed_normal
+ \setbox\b_framed_normal\vpack{\unvbox\b_framed_normal}%
+ \fi
+ \fi}
+
\def\pack_framed_finish_a
{\ifreshapeframebox
\pack_framed_reshape_process
@@ -1437,29 +1492,9 @@
\pack_framed_reshape_reset
\fi}
-\def\pack_framed_profile_box
- {\profilegivenbox\p_profile\b_framed_normal
- \setbox\b_framed_normal\vpack{\unvbox\b_framed_normal}}
-
-\def\pack_framed_reverse_box
- {\ifvbox\b_framed_normal
- \edef\p_linedirection{\framedparameter\c!linedirection}%
- \ifx\p_linedirection\v!reverse
- \reversevboxcontent\b_framed_normal
- \setbox\b_framed_normal\vpack{\unvbox\b_framed_normal}%
- \fi
- \fi}
-
\protected\def\pack_framed_finish
- {%\pack_framed_stop_orientation % hm, wrong place ! should rotate the result (after reshape) .. moved down
- \pack_framed_locator_before\p_framed_location
+ {\pack_framed_locator_before\p_framed_location
\ifconditional\c_framed_has_format
- %\ifconditional\c_framed_has_height \else
- % \edef\p_profile{\framedparameter\c!profile}%
- % \ifempty\p_profile\else
- % \pack_framed_profile_box
- % \fi
- %\fi
\ifempty\p_framed_anchoring\else
\pack_framed_reverse_box
\fi
@@ -1496,10 +1531,8 @@
\ht\b_framed_normal\d_framed_height
\else
\edef\p_framed_minheight{\framedparameter\c!minheight}%
- \ifempty\p_framed_minheight \else
- \ifdim\ht\b_framed_normal<\p_framed_minheight
- \ht\b_framed_normal\p_framed_minheight
- \fi
+ \ifempty\p_framed_minheight \orelse \ifdim\ht\b_framed_normal<\p_framed_minheight
+ \ht\b_framed_normal\p_framed_minheight
\fi
\fi
\edef\p_framed_empty{\framedparameter\c!empty}%
@@ -1527,11 +1560,9 @@
\fi
\ifconditional\c_framed_has_extra_offset
\pack_framed_apply_extra_offsets % includes \d_framed_applied_offset
+ \orelse\ifzeropt\d_framed_applied_offset
\else
- \ifzeropt\d_framed_applied_offset
- \else
- \pack_framed_widen_box
- \fi
+ \pack_framed_widen_box
\fi
%
\ifrelax\postprocessframebox \else
@@ -1551,11 +1582,10 @@
\pack_framed_add_background
\fi
\fi
+% \pack_framed_pop_local_anchors
\pack_framed_locator_after\p_framed_location
- \iftrialtypesetting \else
- \ifempty\m_overlay_region\else
- \pack_framed_add_region
- \fi
+ \iftrialtypesetting \orelse \ifempty\m_overlay_region \else
+ \pack_framed_add_region
\fi
\box\b_framed_normal
\global\frameddimensionstate % global so to be used directly afterwards !
@@ -2318,8 +2348,23 @@
\framedmaxwidth \zeropoint
\framedaveragewidth\zeropoint}
-\def\pack_framed_reshape_process{\ifvbox\b_framed_normal\clf_doreshapeframedbox\b_framed_normal\relax\fi}
-\def\pack_framed_reshape_analyze{\ifvbox\b_framed_normal\clf_doanalyzeframedbox\b_framed_normal\relax\fi}
+\def\pack_framed_reshape_process
+ {\ifvbox\b_framed_normal
+ \ifconditional\c_pack_resync
+ \clf_doresyncframedbox
+ \else
+ \clf_doreshapeframedbox
+ \fi\b_framed_normal\relax
+ \fi}
+
+\def\pack_framed_reshape_analyze
+ {\ifvbox\b_framed_normal
+ \ifconditional\c_pack_resync
+ \clf_doresyncframedbox
+ \else
+ \clf_doanalyzeframedbox
+ \fi\b_framed_normal\relax
+ \fi}
% torture test / strange case (much depth) / method 2 needed
%
@@ -2629,18 +2674,22 @@
\frozen\instance\protected\edefcsname \currentframedtext\endcsname{\pack_framed_text_direct[\currentframedtext]}%
\to \everydefineframedtext
-\setvalue{\??framedtextlocation\v!left }{\letframedtextparameter\c!left \relax
- \letframedtextparameter\c!right\hfill}
+\defcsname\??framedtextlocation\v!left\endcsname
+ {\letframedtextparameter\c!left \relax
+ \letframedtextparameter\c!right\hfill}
-\setvalue{\??framedtextlocation\v!right }{\letframedtextparameter\c!left \hfill
- \letframedtextparameter\c!right\relax}
+\defcsname\??framedtextlocation\v!right\endcsname
+ {\letframedtextparameter\c!left \hfill
+ \letframedtextparameter\c!right\relax}
-\setvalue{\??framedtextlocation\v!middle}{\letframedtextparameter\c!left \hfill
- \letframedtextparameter\c!right\hfill}
+\defcsname\??framedtextlocation\v!middle\endcsname
+ {\letframedtextparameter\c!left \hfill
+ \letframedtextparameter\c!right\hfill}
-\setvalue{\??framedtextlocation\v!none }{\letframedtextparameter\c!left \relax
- \letframedtextparameter\c!right\relax
- \settrue\c_framed_text_location_none}
+\defcsname\??framedtextlocation\v!none\endcsname
+ {\letframedtextparameter\c!left \relax
+ \letframedtextparameter\c!right\relax
+ \settrue\c_framed_text_location_none}
\tolerant\protected\def\pack_framed_text_start[#1]#*[#2]#*[#3]% or #1#*[#2]#*[#3]% and pass {#1}
{\bgroup