summaryrefslogtreecommitdiff
path: root/tex/context/base/spac-ver.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/spac-ver.mkiv')
-rw-r--r--tex/context/base/spac-ver.mkiv464
1 files changed, 251 insertions, 213 deletions
diff --git a/tex/context/base/spac-ver.mkiv b/tex/context/base/spac-ver.mkiv
index ee770656f..d1dd1b979 100644
--- a/tex/context/base/spac-ver.mkiv
+++ b/tex/context/base/spac-ver.mkiv
@@ -19,6 +19,8 @@
% Isn't it about time to get rid of topskip i.e. make it equivalent to
% \openstrutheight so that we can remove delta code.
+%
+% There might be more namespace protection.
%D There are two ways to influence the interline spacing. The
%D most general and often most consistent way is using
@@ -156,28 +158,28 @@
\spac_linespacing_setup_specified_interline_space
%\dosetupspecifiedinterlinespaceindeed
\else
- \space_linespacing_setup_specified_or_relative[#1]%
+ \spac_linespacing_setup_specified_or_relative[#1]%
\fi
\else
\let\currentinterlinespace\empty
- \space_linespacing_synchronize_local
+ \spac_linespacing_synchronize_local
\fi\fi}
-\def\space_linespacing_setup_specified_or_relative[#1]%
+\def\spac_linespacing_setup_specified_or_relative[#1]%
{\doifassignmentelse{#1}\setupspecifiedinterlinespace\setuprelativeinterlinespace[#1]%
\the\iflocalinterlinespace\everysetuplocalinterlinespace\else\everysetupglobalinterlinespace\fi}
-\def\space_linespacing_synchronize_local % adapts to the font
+\def\spac_linespacing_synchronize_local % adapts to the font
{\localinterlinespacetrue
\setfontparameters
\updateraggedskips % funny one here
\the\everysetuplocalinterlinespace
\localinterlinespacefalse}
-\def\dosetupcheckedinterlinespace#1% often a chain
+\unexpanded\def\dosetupcheckedinterlinespace#1% often a chain
{\edef\askedinterlinespace{#1}%
\ifx\askedinterlinespace\empty
- \space_linespacing_synchronize_local
+ \spac_linespacing_synchronize_local
\else\ifcsname\namedinterlinespacehash\askedinterlinespace\s!parent\endcsname % we could have a \s!check
\pushmacro\currentinterlinespace
\let\currentinterlinespace\askedinterlinespace
@@ -313,91 +315,102 @@
\unexpanded\def\removelastskip % also in supp-box
{\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi}
-% The whitespace handler.
+% The whitespace handler. We could cache settings but normally there are not
+% that many in a set.
\installcorenamespace{whitespacemethod}
-\newskip \ctxparskip \ctxparskip\zeropoint
-\newconditional \flexiblewhitespace \settrue\flexiblewhitespace
+\newskip \s_spac_whitespace_parskip \s_spac_whitespace_parskip\zeropoint
+\newconditional\c_spac_whitespace_flexible \settrue\c_spac_whitespace_flexible
+\newconstant \c_spac_whitespace_grid_mode % option in layout / 1=permit_half_lines
-\def\currentwhitespace{\zeropoint}
+%def\v_spac_whitespace_current{\zeropoint}
+\let\v_spac_whitespace_current\v!none
-\definecomplexorsimple\setupwhitespace
+\unexpanded\def\setupwhitespace
+ {\doifnextoptionalelse\spac_whitespace_setup_yes\spac_whitespace_setup_nop}
-\def\simplesetupwhitespace
- {\doifnot\currentwhitespace\v!none\spac_whitespace_setup}
+\def\spac_whitespace_setup_nop
+ {\ifx\v_spac_whitespace_current\v!none\else
+ \spac_whitespace_setup
+ \fi}
-\def\complexsetupwhitespace[#1]%
- {\edef\nextcurrentwhitespace{#1}%
- \ifx\nextcurrentwhitespace\empty
- \simplesetupwhitespace
+\let\synchronizewhitespace\spac_whitespace_setup_nop
+
+\def\spac_whitespace_setup_yes[#1]%
+ {\edef\m_spac_whitespace_asked{#1}%
+ \ifx\m_spac_whitespace_asked\empty
+ \spac_whitespace_setup_nop
\else
- \let\currentwhitespace\nextcurrentwhitespace
+ \let\v_spac_whitespace_current\m_spac_whitespace_asked
\spac_whitespace_setup
\fi}
-\newconstant\baselinegridmode % option in layout / 1=permit_half_lines
-
\def\spac_whitespace_setup % quick test for no list
- {\ifcsname\??whitespacemethod\currentwhitespace\endcsname
- \csname\??whitespacemethod\currentwhitespace\endcsname
+ {\ifcsname\??whitespacemethod\v_spac_whitespace_current\endcsname
+ \csname\??whitespacemethod\v_spac_whitespace_current\endcsname
\else
- \expandafter\processcommalist\expandafter[\currentwhitespace]\spac_whitespace_setup_method % can be raw
+ \expandafter\processcommalist\expandafter[\v_spac_whitespace_current]\spac_whitespace_setup_method % can be raw
\fi\relax
\ifgridsnapping
\spac_whitespace_setup_grid
\else
\spac_whitespace_setup_normal
\fi
- \parskip\ctxparskip}
+ \parskip\s_spac_whitespace_parskip}
\def\spac_whitespace_setup_normal
- {\ifconditional\flexiblewhitespace \else
- \ctxparskip1\ctxparskip
+ {\ifconditional\c_spac_whitespace_flexible \else
+ \s_spac_whitespace_parskip\plusone\s_spac_whitespace_parskip
\fi}
\def\spac_whitespace_setup_grid
- {\setfalse\flexiblewhitespace
- \ifdim\ctxparskip>\zeropoint
- \ctxparskip
- \ifcase\baselinegridmode
- \baselineskip % normal ! ! ! ! !!
+ {\setfalse\c_spac_whitespace_flexible
+ \ifdim\s_spac_whitespace_parskip>\zeropoint
+ \s_spac_whitespace_parskip
+ \ifcase\c_spac_whitespace_grid_mode
+ \baselineskip
\or
\ifdim\scratchdimen=\baselineskip % maybe range
- \baselineskip % normal ! ! ! ! !!
+ \baselineskip
\else
- \numexpr\ctxparskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax
+ \numexpr\s_spac_whitespace_parskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax
\fi
\else
- \baselineskip % normal ! ! ! ! !!
+ \baselineskip
\fi
\fi}
-% this will become \installwhitespacemethod{}{}
+\unexpanded\def\installwhitespacemethod#1#2%
+ {\setvalue{\??whitespacemethod#1}{#2}}
-\unexpanded\def\definewhitespacemethod[#1]#2{\setvalue{\??whitespacemethod#1}{#2}}
+\installwhitespacemethod \v!fix {}
+\installwhitespacemethod \v!fixed {\setfalse\c_spac_whitespace_flexible}
+\installwhitespacemethod \v!flexible {\settrue \c_spac_whitespace_flexible}
-\definewhitespacemethod [\v!fix] {}
-\definewhitespacemethod [\v!fixed] {\setfalse\flexiblewhitespace}
-\definewhitespacemethod [\v!flexible] {\settrue \flexiblewhitespace}
+\installwhitespacemethod \v!line {\s_spac_whitespace_parskip \baselineskip}
+\installwhitespacemethod \v!halfline {\s_spac_whitespace_parskip.5\baselineskip}
+\installwhitespacemethod \v!none {\s_spac_whitespace_parskip \zeropoint}
+\installwhitespacemethod \v!big {\s_spac_whitespace_parskip \bigskipamount}
+\installwhitespacemethod \v!medium {\s_spac_whitespace_parskip \medskipamount}
+\installwhitespacemethod \v!small {\s_spac_whitespace_parskip \smallskipamount}
-\definewhitespacemethod [\v!line] {\ctxparskip \baselineskip}
-\definewhitespacemethod [\v!halfline] {\ctxparskip.5\baselineskip}
-\definewhitespacemethod [\v!none] {\ctxparskip \zeropoint}
-\definewhitespacemethod [\v!big] {\ctxparskip \bigskipamount}
-\definewhitespacemethod [\v!medium] {\ctxparskip \medskipamount}
-\definewhitespacemethod [\v!small] {\ctxparskip \smallskipamount}
-
-\definewhitespacemethod [\s!default] {\simplesetupwhitespace}
+\installwhitespacemethod \s!default {\spac_whitespace_setup_nop}
\def\spac_whitespace_setup_method#1%
{\ifcsname\??whitespacemethod#1\endcsname
\csname\??whitespacemethod#1\endcsname
\else
- \ctxparskip#1\fi
+ \s_spac_whitespace_parskip#1\fi
\relax}
-% \definewhitespacemethod [\s!unknown] {\ctxparskip\commalistelement\relax}
+
+\unexpanded\def\forgetparskip
+ {\s_spac_whitespace_parskip\zeropoint
+ \parskip\zeropoint
+ \let\v_spac_whitespace_current\v!none}
+
+% \installwhitespacemethod \s!unknown {\s_spac_whitespace_parskip\commalistelement\relax}
%
% \def\spac_whitespace_setup_method#1%
% {\csname\??whitespacemethod\ifcsname\??whitespacemethod#1\endcsname#1\else\s!unknown\endcsname\relax}
@@ -405,12 +418,11 @@
\unexpanded\def\nowhitespace{\vspacing[\v!nowhite]}
\unexpanded\def\whitespace {\vspacing[\v!white]}
-% De onderstaande macro handelt ook de situatie dat er geen
-% tekst tussen \start ... \stop is geplaatst. Daartoe wordt de
-% laatste skip over de lege tekst heen gehaald. Dit komt goed
-% van pas bij het plaatsen van (mogelijk lege) lijsten.
+% Packed:
-\newconditional\noblankinpacked
+% todo: when packed blocks blank, we need to enable forced
+
+\newconditional\c_spac_packed_blank \settrue\c_spac_packed_blank
\newcount \c_spac_packed_level
\unexpanded\def\startpacked
@@ -423,7 +435,7 @@
\begingroup
\whitespace % not combined
\blank[\v!disable]%
- \doifelse{#1}\v!blank\setfalse\settrue\noblankinpacked
+ \doifelse{#1}\v!blank\settrue\setfalse\c_spac_packed_blank
\setupwhitespace[\v!none]%
\fi \fi}
@@ -446,32 +458,38 @@
%
% todo: a version that works ok inside a box
-\let\doaroundlinecorrection\relax
+\installcorenamespace{linesaround}
+
+\let\v_spac_lines_around_action_set\relax
+\let\m_spac_lines_around \empty
+
+\setvalue{\??linesaround\v!blank }{\blank}
+\letvalue{\??linesaround\empty }\relax
+\setvalue{\??linesaround\s!unknown}{\blank[\m_spac_lines_around]}
\unexpanded\def\startlinecorrection
- {\dodoubleempty\dostartlinecorrection}
+ {\dodoubleempty\spac_lines_start_correction}
-\def\dostartlinecorrection[#1][#2]% #2 gobbles spaces
+\def\spac_lines_start_correction[#1][#2]% #2 gobbles spaces
{\bgroup
- \processaction
- [#1]
- [ \v!blank=>\let\doaroundlinecorrection\blank,
- \s!default=>\let\doaroundlinecorrection\relax,
- \s!unknown=>{\def\doaroundlinecorrection{\blank[#1]}}]%
- \doaroundlinecorrection
+ \edef\m_spac_lines_around{#1}%
+ \expandafter\let\expandafter\spac_lines_action_around\csname\??linesaround
+ \ifcsname\??linesaround\m_spac_lines_around\endcsname\m_spac_lines_around\else\s!unknown\fi
+ \endcsname
+ \spac_lines_action_around
\startbaselinecorrection
\offbaselinecorrection
\ignorespaces}
\unexpanded\def\stoplinecorrection
{\stopbaselinecorrection
- \doaroundlinecorrection
+ \spac_lines_action_around
\egroup}
\unexpanded\def\correctwhitespace
{\dowithnextboxcs\correctwhitespacefinish\vbox}
-\def\correctwhitespacefinish
+\unexpanded\def\correctwhitespacefinish
{\startbaselinecorrection
\flushnextbox
\stopbaselinecorrection}
@@ -558,12 +576,12 @@
\def\normalizedbodyfontsize{12pt}
\fi
-\def\topskipcorrection
+\unexpanded\def\topskipcorrection
{\simpletopskipcorrection
\vskip-\struttotal
\verticalstrut}
-\def\simpletopskipcorrection
+\unexpanded\def\simpletopskipcorrection
{\ifdim\topskip>\openstrutheight
% == \vskip\topskipgap
\vskip\topskip
@@ -647,8 +665,8 @@
\let\restoreinterlinespace\relax
-\def\saveinterlinespace
- {\edef\restoreinterlinespace
+\unexpanded\def\saveinterlinespace
+ {\unexpanded\edef\restoreinterlinespace
{\lineheight \the\lineheight
\openstrutheight \the\openstrutheight
\openstrutdepth \the\openstrutdepth
@@ -995,7 +1013,7 @@
%D My own one:
-\unexpanded\def\dopushinterlineskip
+\unexpanded\def\spac_helpers_push_interlineskip_yes
{\edef\oninterlineskip
{\baselineskip\the\baselineskip
\lineskip\the\lineskip
@@ -1003,14 +1021,14 @@
\noexpand\edef\noexpand\minimumlinedistance{\the\dimexpr\minimumlinedistance}%
\let\noexpand\offinterlineskip\noexpand\normaloffinterlineskip}} % \noexpand not needed
-\unexpanded\def\nopushinterlineskip
+\unexpanded\def\spac_helpers_push_interlineskip_nop
{\let\oninterlineskip\setnormalbaselines}
\unexpanded\def\offinterlineskip
{\ifdim\baselineskip>\zeropoint
- \dopushinterlineskip
+ \spac_helpers_push_interlineskip_yes
\else
- \nopushinterlineskip
+ \spac_helpers_push_interlineskip_nop
\fi
\normaloffinterlineskip}
@@ -1031,9 +1049,6 @@
#1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax
\fi}
-\def\doexpandedrecurse#1#2%
- {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr#1-1\relax}{#2}\fi}
-
%D \macros
%D {keeplinestogether}
%D
@@ -1042,19 +1057,19 @@
% just before margintexts ... will eventually be done differently in mkiv using
% attributes
-\newcount\nofkeeplinestogether
+\newcount\c_spac_keep_lines_together
\let\restoreinterlinepenalty\relax
-\unexpanded\def\dorestoreinterlinepenalty
+\unexpanded\def\spac_penalties_restore
{\global\let\restoreinterlinepenalty\relax
\global\resetpenalties\interlinepenalties
- \global\nofkeeplinestogether\zerocount}
+ \global\c_spac_keep_lines_together\zerocount}
\unexpanded\def\keeplinestogether#1%
- {\ifnum#1>\nofkeeplinestogether
- \global\nofkeeplinestogether#1%
- \global\setpenalties\interlinepenalties\nofkeeplinestogether\plustenthousand
- \global\let\restoreinterlinepenalty\dorestoreinterlinepenalty
+ {\ifnum#1>\c_spac_keep_lines_together
+ \global\c_spac_keep_lines_together#1%
+ \global\setpenalties\interlinepenalties\c_spac_keep_lines_together\plustenthousand
+ \global\let\restoreinterlinepenalty\spac_penalties_restore
\fi}
\newif\ifgridsnapping % to be sure
@@ -1116,9 +1131,9 @@
\directsetup{\systemsetupsprefix\s!reset}
- \setpenalties\widowpenalties2\maxdimen
- \setpenalties\clubpenalties 2\maxdimen
- \brokenpenalty \maxdimen
+ \setpenalties\widowpenalties\plustwo\maxdimen
+ \setpenalties\clubpenalties \plustwo\maxdimen
+ \brokenpenalty \maxdimen
\stopsetups
@@ -1157,14 +1172,14 @@
\def\snappedvboxattribute{\ifgridsnapping attr \snapvboxattribute \attribute\snapmethodattribute\fi}
\def\setlocalgridsnapping{\ifgridsnapping \attribute \snapvboxattribute \attribute\snapmethodattribute\fi}
-\def\dosetlocalgridsnapping#1%
+\def\spac_grids_set_local_snapping#1%
{\ifgridsnapping
\doifsomething{#1}%
- {\autosetsnapvalue{#1}%
+ {\spac_grids_snap_value_set{#1}%
\attribute \snapvboxattribute \attribute\snapmethodattribute}%
\fi}
-\def\installsnapvalues#1#2% todo: a proper define
+\unexpanded\def\installsnapvalues#1#2% todo: a proper define
{\edef\currentsnapper{#1:#2}%
\ifcsname\currentsnapper\endcsname \else
\setevalue\currentsnapper{\ctxlua{builders.vspacing.definesnapmethod("#1","#2")}}%
@@ -1172,20 +1187,20 @@
\setevalue{\??gridsnappers#1}{\attribute\snapmethodattribute\csname\currentsnapper\endcsname\space}}
\unexpanded\def\definegridsnapping
- {\dodoubleargument\dodefinegridsnapping}
+ {\dodoubleargument\spac_grids_define}
-\def\dodefinegridsnapping[#1][#2]%
+\def\spac_grids_define[#1][#2]%
{\installsnapvalues{#1}{#2}}
-\edef\resetsnapvalue
+\edef\spac_grids_snap_value_reset
{%\gridsnappingfalse
\attribute\snapmethodattribute\attributeunsetvalue}
-\def\setsnapvalue#1%
+\def\spac_grids_snap_value_set#1%
{%\gridsnappingtrue
\ifcsname\??gridsnappers#1\endcsname\csname\??gridsnappers#1\endcsname\fi}
-\def\autosetsnapvalue#1%
+\def\spac_grids_snap_value_auto#1%
{\ifcsname\??gridsnappers#1\endcsname
\csname\??gridsnappers#1\endcsname
\else
@@ -1241,16 +1256,12 @@
\definegridsnapping[\v!middle] [\v!maxheight,\v!maxdepth] % used in placement
-\newtoks\everysetupgridsnapping % this only happens at the setuplayout level
-
-\def\dosetupgridsnapping{\the\everysetupgridsnapping} % not used !
-
-\def\synchronizelocallinespecs
+\unexpanded\def\synchronizelocallinespecs
{\bodyfontlineheight \normallineheight
\bodyfontstrutheight\strutheight
\bodyfontstrutdepth \strutdepth}
-\def\synchronizegloballinespecs
+\unexpanded\def\synchronizegloballinespecs
{\global\globalbodyfontlineheight \normallineheight
\global\globalbodyfontstrutheight\strutheight
\global\globalbodyfontstrutdepth \strutdepth}
@@ -1270,59 +1281,59 @@
\let\showgridsnapping\relax
-\def\snaptogrid {\dosingleempty\dosnaptogrid}
-\def\moveongrid {\dosingleempty\domoveongrid}
-\unexpanded\def\placeongrid{\dosingleempty\doplaceongrid}
+%unexpanded\def\moveongrid {\dosingleempty\spac_grids_move_on}
+\unexpanded\def\snaptogrid {\dosingleempty\spac_grids_snap_to}
+\unexpanded\def\placeongrid{\dosingleempty\spac_grids_place_on}
-\def\domoveongrid[#1]%
- {[obsolete]} % gone, unless we set an attribute
+% \def\spac_grids_move_on[#1]%
+% {[obsolete]} % gone, unless we set an attribute
-\def\doplaceongrid[#1]%
+\def\spac_grids_place_on[#1]%
{\snaptogrid[#1]\vbox} % mark as done
-\def\dosnaptogrid[#1]% list or predefined
+\def\spac_grids_snap_to[#1]% list or predefined
{\ifgridsnapping
- \expandafter\dodosnaptogrid
+ \expandafter\spac_grids_snap_to_indeed
\else
\expandafter\gobbleoneargument
\fi{#1}}
-\def\dodosnaptogrid#1%
+\def\spac_grids_snap_to_indeed#1%
{\bgroup
- \resetsnapvalue
- \dowithnextbox{\dododosnaptogrid{#1}}}
+ \spac_grids_snap_value_reset
+ \dowithnextbox{\spac_grids_snap_to_finish{#1}}}
% eventually there will always be a line snap
-\def\dododosnaptogrid#1%
+\def\spac_grids_snap_to_finish#1%
{\ifvbox\nextbox % this will go away
- \ctxlua{builders.vspacing.collapsevbox(\number\nextbox)}% isn't that already done?
+ \ctxcommand{vspacingcollapse(\number\nextbox)}% isn't that already done?
\fi
- \doifelsenothing{#1}{\setsnapvalue\v!normal}{\autosetsnapvalue{#1}}%
- \ctxlua{builders.vspacing.snapbox(\number\nextbox,\number\attribute\snapmethodattribute)}%
+ \doifelsenothing{#1}{\spac_grids_snap_value_set\v!normal}{\spac_grids_snap_value_set{#1}}%
+ \ctxcommand{vspacingsnap(\number\nextbox,\number\attribute\snapmethodattribute)}%
\ifvbox\nextbox\vbox\else\hbox\fi attr \snapmethodattribute \zerocount {\box\nextbox}%
\egroup}
-\def\docheckgridsnappingnop
+\def\spac_grids_check_nop
{\gridsnappingfalse
\resetsystemmode\v!grid
- \resetsnapvalue}
+ \spac_grids_snap_value_reset}
-\def\docheckgridsnappingyes
+\def\spac_grids_check_yes
{\gridsnappingtrue
\setsystemmode\v!grid
- \autosetsnapvalue\askedgridmode}
+ \spac_grids_snap_value_set\askedgridmode}
-\def\docheckgridsnapping
+\unexpanded\def\synchronizegridsnapping
{\edef\askedgridmode{\layoutparameter\c!grid}%
\ifx\askedgridmode\v!no % official
- \docheckgridsnappingnop
+ \spac_grids_check_nop
\else\ifx\askedgridmode\v!off % for taco and luigi
- \docheckgridsnappingnop
+ \spac_grids_check_nop
\else\ifx\askedgridmode\empty % to be sure
- \docheckgridsnappingnop
+ \spac_grids_check_nop
\else
- \docheckgridsnappingyes
+ \spac_grids_check_yes
\fi\fi\fi}
%D Visualization:
@@ -1334,7 +1345,7 @@
three=blue,
four=gray]
-\def\setgridtracebox#1[#2]% % maybe reverse the order
+\unexpanded\def\setgridtracebox#1[#2]% % maybe reverse the order
{\setbox\nextbox#1%
{\hbox
{\hbox to \zeropoint
@@ -1346,10 +1357,22 @@
\setnewconstant\gridboxlinenomode\plusone % 0:nothing 1:all 2:lines 3:frame 4:l/r
\setnewconstant\gridboxlinemode \plusone
-\def\gridboxvbox {\ifcase\gridboxlinemode\vbox\or\ruledvbox\or\vbox\or\ruledvbox\else\ruledvbox\fi}
+\unexpanded\def\gridboxvbox
+ {\ifcase\gridboxlinemode
+ \vbox
+ \or
+ \ruledvbox
+ \or
+ \vbox
+ \or
+ \ruledvbox
+ \else
+ \ruledvbox
+ \fi}
+
\def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\testrulewidth}
-\def\setgridbox#1#2#3% maybe ifgridsnapping at outer level
+\unexpanded\def\setgridbox#1#2#3% maybe ifgridsnapping at outer level
{\setbox#1\gridboxvbox to #3 % given size
{\forgetall
\resetteststrut
@@ -1386,22 +1409,22 @@
\def\fuzzysnappedbox#1#2% \box<n> \unvbox<n>
{#1#2}
-\def\moveboxontogrid#1#2#3% will become obsolete
+\def\moveboxontogrid#1#2#3% will become obsolete, but it needs checking
{}
%D Helper:
-\def\doassignsomeskip#1\to#2% ook nog \v!halfline+fuzzysnap
- {\doifelse{#1}\v!line
- {#2\ifgridsnapping
+\unexpanded\def\spac_helpers_assign_skip#1#2% ook nog \v!halfline+fuzzysnap
+ {\doifelse{#2}\v!line
+ {#1\ifgridsnapping
\bodyfontlineheight
\else
\openlineheight
\fi}
{\ifgridsnapping
- \assigndimension{#1}{#2}{.25\bodyfontlineheight}{.5\bodyfontlineheight}\bodyfontlineheight
+ \assigndimension{#2}{#1}{.25\bodyfontlineheight}{.5\bodyfontlineheight}\bodyfontlineheight
\else
- \assigndimension{#1}{#2}\smallskipamount\medskipamount\bigskipamount
+ \assigndimension{#2}{#1}\smallskipamount\medskipamount\bigskipamount
\fi}%
\relax}
@@ -1427,9 +1450,25 @@
% \defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi}
% todo, in grid mode: builders.vspacing.fixed = false
+%
+% \ifgridsnapping will go
+
+\installcorenamespace{vspacingamount}
+
+\unexpanded\def\definevspacingamount
+ {\dotripleempty\spac_vspacing_define_amount}
+
+\def\spac_vspacing_define_amount[#1][#2][#3]% can be combined
+ {\setvalue{\??vspacingamount#1}{\ifgridsnapping#3\else#2\fi}%
+ \ctxcommand{vspacingsetamount("#1")}}
+
+\unexpanded\def\definevspacing
+ {\dodoubleempty\spac_vspacing_define}
+
+\def\spac_vspacing_define[#1][#2]%
+ {\ctxcommand{vspacingdefine("#1","#2")}}
-\let\saveouterspacing \relax % for old times sake
-\let\restoreouterspacing\relax % for old times sake
+%D The injector code (generated at the \LUA\ end):
\newtoks\everybeforeblankhandling
\newtoks\everyafterblankhandling
@@ -1441,10 +1480,15 @@
\attribute\skipcategoryattribute\plusone
\attribute\skippenaltyattribute \attributeunsetvalue
\attribute\skiporderattribute \attributeunsetvalue
- \ifgridsnapping % \ifblankflexible
- \setfalse\blankisfixed
- \else
+% \ifgridsnapping % \ifblankflexible
+% \setfalse\blankisfixed
+% \else
+% \settrue\blankisfixed
+% \fi
+ \ifgridsnapping
\settrue\blankisfixed
+ \else
+ \setfalse\blankisfixed
\fi
\to \everybeforeblankhandling
@@ -1456,16 +1500,6 @@
\fi
\to \everyafterblankhandling
-% \ifgridsnapping will go
-
-\appendtoks
- \ifgridsnapping
- \settrue\blankisfixed
- \else
- \setfalse\blankisfixed
- \fi
-\to \everybeforeblankhandling
-
\def\setblankcategory#1%
{\settrue\someblankdone
\attribute\skipcategoryattribute#1\relax}
@@ -1521,17 +1555,6 @@
\setfalse\someblankdone
\the\everybeforeblankhandling}
-% % % % we can move much to lua once we can expand there % % % %
-
-\installcorenamespace{vspacingamount}
-
-\unexpanded\def\definevspacingamount
- {\dotripleempty\dodefinevspacingamount}
-
-\def\dodefinevspacingamount[#1][#2][#3]% can be combined
- {\setvalue{\??vspacingamount#1}{\ifgridsnapping#3\else#2\fi}%
- \ctxlua{builders.vspacing.setskip("#1")}}
-
\def\addpredefinedblankskip#1#2%
{\settrue\someblankdone
\advance\s_spac_vspacing_temp#1\dimexpr\csname\??vspacingamount#2\endcsname\relax}
@@ -1540,59 +1563,70 @@
{\settrue\someblankdone
\advance\s_spac_vspacing_temp#1\dimexpr#2\relax}
-\unexpanded\def\definevspacing
- {\dodoubleempty\dodefinevspacing}
-
-\def\dodefinevspacing[#1][#2]%
- {\ctxlua{builders.vspacing.setmap("#1","#2")}}
+% The main spacer:
\unexpanded\def\vspacing
- {\dosingleempty\dovspacing}
+ {\doifnextoptionalelse\spac_vspacing_yes\spac_vspacing_nop}
-% todo: when packed blocks blank, we need to enable forced
+\def\spac_vspacing_yes
+ {\ifinpagebody % somewhat weird
+ \singleexpandafter\spac_vspacing_yes_indeed
+ \else\ifconditional\c_spac_packed_blank
+ \doubleexpandafter\spac_vspacing_yes_indeed
+ \else
+ \doubleexpandafter\spac_vspacing_yes_ignore
+ \fi\fi}
-\def\dovspacing % blank also has a \flushnotes
- {\ifinpagebody
- \expandafter\dovspacingyes
- \else\ifconditional\noblankinpacked % todo: better reset this conditional in pagebody
- \expandafter\expandafter\expandafter\dovspacingnop
+\def\spac_vspacing_nop
+ {\ifinpagebody % somewhat weird
+ \singleexpandafter\spac_vspacing_nop_indeed
+ \else\ifconditional\c_spac_packed_blank
+ \doubleexpandafter\spac_vspacing_nop_indeed
\else
- \expandafter\expandafter\expandafter\dovspacingyes
+ \doubleexpandafter\spac_vspacing_nop_ignore
\fi\fi}
-\def\dovspacingyes[#1]%
- %{\ifmmode\else\ctxlua{builders.vspacing.analyze("\iffirstargument#1\else\s!default\fi")}\fi}
- {\ifmmode\else\ctxlua{builders.vspacing.analyze("\iffirstargument#1\else\currentvspacing\fi")}\fi}
+\def\spac_vspacing_yes_indeed[#1]%
+ {\ifmmode\else\ctxcommand{vspacing("#1")}\fi}
-\def\dovspacingnop[#1]%
+\def\spac_vspacing_yes_ignore[#1]%
{\ifmmode\else\par\fi}
-% todo: check them and make them faster:
+\def\spac_vspacing_nop_indeed
+ {\ifmmode\else\ctxcommand{vspacing("\currentvspacing")}\fi}
+
+\def\spac_vspacing_nop_ignore
+ {\ifmmode\else\par\fi}
-\definecomplexorsimple\setupvspacing
+\unexpanded\def\setupvspacing
+ {\doifnextoptionalelse\setupvspacing_yes\setupvspacing_nop}
-\let\currentvspacing\s!default
+\let\currentvspacing\s!default % hm, default, standard ...
-\def\complexsetupvspacing[#1]%
+\def\setupvspacing_yes[#1]%
{\edef\currentvspacing{#1}}
-\def\simplesetupvspacing
+\def\setupvspacing_nop
{\ifx\empty\currentvspacing\else
\let\currentvspacing\s!default
\fi
- \simplesetupwhitespace}
+ \spac_whitespace_setup_nop}
-\def\restorestandardblank
+\unexpanded\def\restorestandardblank
{\let\currentvspacing\v!standard}
+\let\synchronizevspacing\setupvspacing_nop
+
% used both
-\def\doinhibitblank{\vspacing[\v!disable]} % can be made faster (keep this command, used in styles)
-\def\inhibitblank {\vspacing[\v!disable]} % can be made faster
+\unexpanded\def\inhibitblank
+ {\vspacing[\v!disable]} % can be made faster
+
+\let\doinhibitblank\inhibitblank % keep this command, used in styles
\let\setupblank \setupvspacing
-\let\simplesetupblank\simplesetupvspacing
\let\blank \vspacing
+\let\synchronizeblank\synchronizevspacing
% category:4 is default
@@ -1635,7 +1669,11 @@
\definevspacing[\s!default] [\v!white] % was big for a while
\dorecurse{10} % todo: other values < 4000
- {\expanded{\definevspacing[\v!samepage-\recurselevel][penalty:\the\numexpr4000+250*\recurselevel\relax]}}
+ {\normalexpanded{\definevspacing[\v!samepage-\recurselevel][penalty:\the\numexpr4000+250*\recurselevel\relax]}}
+
+%D Maybe at some point we will differ between \type {\vspacing} and
+%D \type {\blank} (we needed the first one while playing with the
+%D new code).
\let\blank \vspacing
\let\defineblank \definevspacing
@@ -1648,48 +1686,48 @@
\installcorenamespace{vspace}
\unexpanded\def\definevspace
- {\dotripleempty\dodefinevspace}
+ {\dotripleempty\spac_vspace_define}
-\def\dodefinevspace[#1][#2][#3]%
+\def\spac_vspace_define[#1][#2][#3]%
{\ifthirdargument
\setvalue{\??vspace#1:#2}{#3}%
\else
\setvalue{\??vspace:#1}{#2}%
\fi}
-\letvalue{\??vspace#1:\s!unknown}\zeropoint
+\letvalue{\??vspace:\s!unknown}\zeropoint
\unexpanded\def\vspace
- {\dodoubleempty\dovspace}
+ {\dodoubleempty\spac_vspace_inject}
-\def\dovspace[#1][#2]%
+\def\spac_vspace_inject[#1][#2]%
{\par
\ifvmode
\removelastskip
\vskip
\csname\??vspace
- \ifsecondargument
- \ifcsname\??vspace#1:#2\endcsname
- #1:#2%
- \else\ifcsname\??vspace:#2\endcsname
- :#2%
+ \ifsecondargument
+ \ifcsname\??vspace#1:#2\endcsname
+ #1:#2%
+ \else\ifcsname\??vspace:#2\endcsname
+ :#2%
+ \else
+ :\s!unknown
+ \fi\fi
+ \else\iffirstargument
+ \ifcsname\??vspace:#1\endcsname
+ :#1%
+ \else
+ :\s!unknown
+ \fi
\else
- :\s!unknown
+ \ifcsname\??vspace:\s!default\endcsname
+ :\s!default
+ \else
+ :\s!unknown
+ \fi
\fi\fi
- \else\iffirstargument
- \ifcsname\??vspace:#1\endcsname
- :#1%
- \else
- :\s!unknown
- \fi
- \else
- \ifcsname\??vspace:\s!default\endcsname
- :\s!default
- \else
- :\s!unknown
- \fi
- \fi\fi
- \endcsname
+ \endcsname
\relax
\fi}