summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--metapost/context/base/mp-core.mpiv183
-rw-r--r--metapost/context/base/mp-idea.mpiv30
-rw-r--r--metapost/context/base/mp-tool.mpiv16
-rw-r--r--tex/context/base/anch-bck.mkvi22
-rw-r--r--tex/context/base/anch-pgr.mkiv44
-rw-r--r--tex/context/base/anch-pos.mkiv7
-rw-r--r--tex/context/base/buff-ini.mkiv4
-rw-r--r--tex/context/base/buff-ver.mkiv2
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4070 -> 4071 bytes
-rw-r--r--tex/context/base/context-version.pngbin104107 -> 104723 bytes
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/core-mis.mkiv62
-rw-r--r--tex/context/base/font-ini.mkvi34
-rw-r--r--tex/context/base/font-tra.mkiv6
-rw-r--r--tex/context/base/grph-fig.mkiv10
-rw-r--r--tex/context/base/lang-def.mkiv132
-rw-r--r--tex/context/base/math-ali.mkiv26
-rw-r--r--tex/context/base/meta-ini.mkiv90
-rw-r--r--tex/context/base/mult-dim.mkvi10
-rw-r--r--tex/context/base/mult-sys.mkiv12
-rw-r--r--tex/context/base/pack-rul.mkiv4
-rw-r--r--tex/context/base/page-brk.mkiv94
-rw-r--r--tex/context/base/page-imp.mkiv16
-rw-r--r--tex/context/base/page-ini.mkiv2
-rw-r--r--tex/context/base/page-lay.mkiv10
-rw-r--r--tex/context/base/page-mul.mkiv15
-rw-r--r--tex/context/base/page-run.mkiv12
-rw-r--r--tex/context/base/page-set.mkiv26
-rw-r--r--tex/context/base/page-sid.mkiv2
-rw-r--r--tex/context/base/page-txt.mkvi6
-rw-r--r--tex/context/base/s-map-10.mkiv2
-rw-r--r--tex/context/base/scrn-but.mkvi12
-rw-r--r--tex/context/base/spac-def.mkiv27
-rw-r--r--tex/context/base/spac-hor.mkiv499
-rw-r--r--tex/context/base/spac-ver.lua10
-rw-r--r--tex/context/base/spac-ver.mkiv464
-rw-r--r--tex/context/base/status-files.pdfbin24288 -> 24273 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin170191 -> 171571 bytes
-rw-r--r--tex/context/base/status-mkiv.lua14
-rw-r--r--tex/context/base/strc-doc.mkiv17
-rw-r--r--tex/context/base/strc-flt.mkvi90
-rw-r--r--tex/context/base/strc-itm.mkvi42
-rw-r--r--tex/context/base/strc-mat.mkiv2
-rw-r--r--tex/context/base/strc-reg.mkiv1
-rw-r--r--tex/context/base/strc-ren.mkiv30
-rw-r--r--tex/context/base/strc-sec.mkiv6
-rw-r--r--tex/context/base/syst-aux.mkiv5
-rw-r--r--tex/context/base/tabl-tbl.mkiv2
-rw-r--r--tex/context/base/typo-cln.lua4
-rw-r--r--tex/context/base/typo-cln.mkiv2
-rw-r--r--tex/context/base/typo-krn.lua15
-rw-r--r--tex/context/base/typo-krn.mkiv57
-rw-r--r--tex/context/base/typo-spa.lua102
-rw-r--r--tex/context/base/typo-spa.mkiv33
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
58 files changed, 1200 insertions, 1123 deletions
diff --git a/metapost/context/base/mp-core.mpiv b/metapost/context/base/mp-core.mpiv
index 6613c5703..2d1a80759 100644
--- a/metapost/context/base/mp-core.mpiv
+++ b/metapost/context/base/mp-core.mpiv
@@ -739,80 +739,106 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd,
TopSkipCorrection := 0 ;
fi ;
- fi ;
+ fi ;
- if ypart llxy[fpos] = ypart llxy[tpos] :
+ if ypart llxy[fpos] = ypart llxy[tpos] :
- multipar :=
- llxy[fpos] --
- lrxy[tpos] --
- _pmp_snapped_multi_pos_(urxy[tpos]) --
- _pmp_snapped_multi_pos_(ulxy[fpos]) --
- cycle ;
+ multipar :=
+ llxy[fpos] --
+ lrxy[tpos] --
+ _pmp_snapped_multi_pos_(urxy[tpos]) --
+ _pmp_snapped_multi_pos_(ulxy[fpos]) --
+ cycle ;
- save_multipar (i,1,multipar) ;
+ save_multipar (i,1,multipar) ;
- elseif (ypart llxy[fpos] = ypart ulxy[tpos]) and (xpart llxy[tpos] < xpart llxy[fpos]) :
+ elseif (ypart llxy[fpos] = ypart ulxy[tpos]) and (xpart llxy[tpos] < xpart llxy[fpos]) :
- % two loners
+ % two loners
- multipar := if obey_multi_par_hang :
+ multipar := if obey_multi_par_hang :
- _pmp_right_bottom_hang_(true) --
- _pmp_right_top_hang_(true) --
- _pmp_snapped_multi_pos_(urxy[fpos]) --
- lrxy[fpos] --
+ _pmp_right_bottom_hang_(true) --
+ _pmp_right_top_hang_(true) --
+ _pmp_snapped_multi_pos_(urxy[fpos]) --
+ lrxy[fpos] --
- else :
+ else :
- llxy[fpos] --
- (xpart urcorner multipar, ypart llxy[fpos]) --
- (xpart urcorner multipar, ypart ulxy[fpos]) --
- _pmp_snapped_multi_pos_(ulxy[fpos]) --
+ llxy[fpos] --
+ (xpart urcorner multipar, ypart llxy[fpos]) --
+ (xpart urcorner multipar, ypart ulxy[fpos]) --
+ _pmp_snapped_multi_pos_(ulxy[fpos]) --
- fi cycle ;
+ fi cycle ;
- save_multipar (i,1,multipar) ;
+ save_multipar (i,1,multipar) ;
- multipar := _pmp_set_multipar_(i) ;
+ multipar := _pmp_set_multipar_(i) ;
- multipar := if obey_multi_par_hang :
+ multipar := if obey_multi_par_hang :
- _pmp_left_bottom_hang_(true) --
- llxy[tpos] --
- _pmp_snapped_multi_pos_(ulxy[tpos]) --
- _pmp_left_top_hang_(true) --
+ _pmp_left_bottom_hang_(true) --
+ llxy[tpos] --
+ _pmp_snapped_multi_pos_(ulxy[tpos]) --
+ _pmp_left_top_hang_(true) --
+
+ else :
+
+ (xpart llcorner multipar, ypart llxy[tpos]) --
+ llxy[tpos] --
+ _pmp_snapped_multi_pos_(ulxy[tpos]) --
+ (xpart llcorner multipar, ypart ulxy[tpos]) --
+
+ fi cycle ;
+
+ save_multipar (i,1,multipar) ;
else :
- (xpart llcorner multipar, ypart llxy[tpos]) --
- llxy[tpos] --
- _pmp_snapped_multi_pos_(ulxy[tpos]) --
- (xpart llcorner multipar, ypart ulxy[tpos]) --
+ multipar := if obey_multi_par_hang :
- fi cycle ;
+ _pmp_left_bottom_hang_(true) --
+ llxy[tpos] --
+ _pmp_snapped_multi_pos_(ulxy[tpos]) --
+ _pmp_right_bottom_hang_(true) --
+ _pmp_right_top_hang_(true) --
+ _pmp_snapped_multi_pos_(urxy[fpos]) --
+ lrxy[fpos] --
+ _pmp_left_top_hang_(true) --
- save_multipar (i,1,multipar) ;
+ else :
+
+ (xpart llcorner multipar, ypart llxy[tpos]) --
+ llxy[tpos] --
+ _pmp_snapped_multi_pos_(ulxy[tpos]) --
+ (xpart lrcorner multipar, ypart ulxy[tpos]) --
+ (xpart urcorner multipar, ypart urxy[fpos]) --
+ _pmp_snapped_multi_pos_(urxy[fpos]) --
+ lrxy[fpos] --
+ (xpart ulcorner multipar, ypart lrxy[fpos]) --
+
+ fi cycle ;
+
+ save_multipar (i,1,multipar) ;
+
+ fi ;
else :
multipar := if obey_multi_par_hang :
- _pmp_left_bottom_hang_(true) --
- llxy[tpos] --
- _pmp_snapped_multi_pos_(ulxy[tpos]) --
- _pmp_right_bottom_hang_(true) --
- _pmp_right_top_hang_(true) --
+ _pmp_left_bottom_hang_(false) --
+ _pmp_right_bottom_hang_(false) --
+ _pmp_right_top_hang_(false) --
_pmp_snapped_multi_pos_(urxy[fpos]) --
lrxy[fpos] --
- _pmp_left_top_hang_(true) --
+ _pmp_left_top_hang_(false) --
else :
- (xpart llcorner multipar, ypart llxy[tpos]) --
- llxy[tpos] --
- _pmp_snapped_multi_pos_(ulxy[tpos]) --
- (xpart lrcorner multipar, ypart ulxy[tpos]) --
+ llcorner multipar --
+ lrcorner multipar --
(xpart urcorner multipar, ypart urxy[fpos]) --
_pmp_snapped_multi_pos_(urxy[fpos]) --
lrxy[fpos] --
@@ -824,32 +850,6 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd,
fi ;
- else :
-
- multipar := if obey_multi_par_hang :
-
- _pmp_left_bottom_hang_(false) --
- _pmp_right_bottom_hang_(false) --
- _pmp_right_top_hang_(false) --
- _pmp_snapped_multi_pos_(urxy[fpos]) --
- lrxy[fpos] --
- _pmp_left_top_hang_(false) --
-
- else :
-
- llcorner multipar --
- lrcorner multipar --
- (xpart urcorner multipar, ypart urxy[fpos]) --
- _pmp_snapped_multi_pos_(urxy[fpos]) --
- lrxy[fpos] --
- (xpart ulcorner multipar, ypart lrxy[fpos]) --
-
- fi cycle ;
-
- save_multipar (i,1,multipar) ;
-
- fi ;
-
elseif (nxy[tpos]=RealPageNumber) and (InsideTextArea(i,par_stop_pos)) :
% last one in chain
@@ -858,33 +858,33 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd,
if obey_multi_par_hang and obey_multi_par_more :
- multipar :=
- _pmp_x_left_top_hang_(i,true) --
- _pmp_x_right_top_hang_(i,true) --
- _pmp_x_right_bottom_hang_(i,true) --
- _pmp_snapped_multi_pos_(ulxy[tpos]) --
- llxy[tpos] --
- _pmp_x_left_bottom_hang_(i,true) --
- cycle ;
+ multipar :=
+ _pmp_x_left_top_hang_(i,true) --
+ _pmp_x_right_top_hang_(i,true) --
+ _pmp_x_right_bottom_hang_(i,true) --
+ _pmp_snapped_multi_pos_(ulxy[tpos]) --
+ llxy[tpos] --
+ _pmp_x_left_bottom_hang_(i,true) --
+ cycle ;
- else :
+ else :
- multipar :=
- ulcorner multipar --
- urcorner multipar --
- (xpart lrcorner multipar, ypart urxy[tpos]) --
- _pmp_snapped_multi_pos_(ulxy[tpos]) --
- llxy[tpos] --
- (xpart llcorner multipar, ypart llxy[tpos]) --
- cycle ;
+ multipar :=
+ ulcorner multipar --
+ urcorner multipar --
+ (xpart lrcorner multipar, ypart urxy[tpos]) --
+ _pmp_snapped_multi_pos_(ulxy[tpos]) --
+ llxy[tpos] --
+ (xpart llcorner multipar, ypart llxy[tpos]) --
+ cycle ;
- fi ;
+ fi ;
- save_multipar (i,3,multipar) ;
+ save_multipar (i,3,multipar) ;
elseif multi_column_first_page_hack and ((nxy[fpos]=RealPageNumber) and (nxy[tpos]>=RealPageNumber) and (NOfTextColumns>1)) :
- save_multipar (i,2,multipar) ;
+ save_multipar (i,2,multipar) ;
else :
% handled later
@@ -892,6 +892,7 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd,
endfor ;
+
% second loop
if force_multi_par_chain or (ii > 1) :
diff --git a/metapost/context/base/mp-idea.mpiv b/metapost/context/base/mp-idea.mpiv
new file mode 100644
index 000000000..462d97553
--- /dev/null
+++ b/metapost/context/base/mp-idea.mpiv
@@ -0,0 +1,30 @@
+% redpart (1,1,0,0) crashes
+
+% let normalredpart = redpart ;
+% let normalgreenpart = greenpart ;
+% let normalbluepart = bluepart ;
+% let normalcyanpart = cyanpart ;
+% let normalmagentapart = magentapart ;
+% let normalyellowpart = yellowpart ;
+% let normalblackpart = blackpart ;
+
+% vardef redpart expr p = if cmykcolor p : 1 - normalcyanpart p elseif rgbcolor p : normalredpart p else : p fi enddef ;
+% vardef greenpart expr p = if cmykcolor p : 1 - normalmagentapart p elseif rgbcolor p : normalgreenpart p else : p fi enddef ;
+% vardef bluepart expr p = if cmykcolor p : 1 - normalyellowpart p elseif rgbcolor p : normalbluepart p else : p fi enddef ;
+% vardef cyanpart expr p = if cmykcolor p : normalcyanpart p elseif rgbcolor p : 1 - normalredpart p else : p fi enddef ;
+% vardef magentapart expr p = if cmykcolor p : normalmagentapart p elseif rgbcolor p : 1 - normalgreenpart p else : p fi enddef ;
+% vardef yellowpart expr p = if cmykcolor p : normalyellowpart p elseif rgbcolor p : 1 - normalbluepart p else : p fi enddef ;
+% vardef blackpart expr p = if cmykcolor p : normalblackpart p elseif rgbcolor p : 0 else : p fi enddef ;
+
+vardef rcomponent expr p = if rgbcolor p : redpart p elseif cmykcolor p : 1 - cyanpart p else : p fi enddef ;
+vardef gcomponent expr p = if rgbcolor p : greenpart p elseif cmykcolor p : 1 - magentapart p else : p fi enddef ;
+vardef bcomponent expr p = if rgbcolor p : bluepart p elseif cmykcolor p : 1 - yellowpart p else : p fi enddef ;
+vardef ccomponent expr p = if cmykcolor p : cyanpart p elseif rgbcolor p : 1 - redpart p else : p fi enddef ;
+vardef mcomponent expr p = if cmykcolor p : magentapart p elseif rgbcolor p : 1 - greenpart p else : p fi enddef ;
+vardef ycomponent expr p = if cmykcolor p : yellowpart p elseif rgbcolor p : 1 - bluepart p else : p fi enddef ;
+vardef bcomponent expr p = if cmykcolor p : blackpart p elseif rgbcolor p : 0 else : p fi enddef ;
+
+vardef somecolor = (1,1,0,0) enddef ;
+
+fill OverlayBox withcolor (rcomponent somecolor,gcomponent somecolor,bcomponent somecolor) ;
+fill OverlayBox withcolor (ccomponent somecolor,mcomponent somecolor,ycomponent somecolor,bcomponent somecolor) ;
diff --git a/metapost/context/base/mp-tool.mpiv b/metapost/context/base/mp-tool.mpiv
index 33c5b7d9a..30c8f1cd6 100644
--- a/metapost/context/base/mp-tool.mpiv
+++ b/metapost/context/base/mp-tool.mpiv
@@ -2154,3 +2154,19 @@ primarydef p snapped s =
)
p
enddef ;
+
+% vardef somecolor = (1,1,0,0) enddef ;
+
+% fill OverlayBox withcolor (rcomponent somecolor,gcomponent somecolor,bcomponent somecolor) ;
+% fill OverlayBox withcolor (ccomponent somecolor,mcomponent somecolor,ycomponent somecolor,bcomponent somecolor) ;
+
+% This could be standard mplib 2 behaviour:
+
+vardef rcomponent expr p = if rgbcolor p : redpart p elseif cmykcolor p : 1 - cyanpart p else : p fi enddef ;
+vardef gcomponent expr p = if rgbcolor p : greenpart p elseif cmykcolor p : 1 - magentapart p else : p fi enddef ;
+vardef bcomponent expr p = if rgbcolor p : bluepart p elseif cmykcolor p : 1 - yellowpart p else : p fi enddef ;
+vardef ccomponent expr p = if cmykcolor p : cyanpart p elseif rgbcolor p : 1 - redpart p else : p fi enddef ;
+vardef mcomponent expr p = if cmykcolor p : magentapart p elseif rgbcolor p : 1 - greenpart p else : p fi enddef ;
+vardef ycomponent expr p = if cmykcolor p : yellowpart p elseif rgbcolor p : 1 - bluepart p else : p fi enddef ;
+vardef bcomponent expr p = if cmykcolor p : blackpart p elseif rgbcolor p : 0 else : p fi enddef ;
+
diff --git a/tex/context/base/anch-bck.mkvi b/tex/context/base/anch-bck.mkvi
index af29668f8..a20a25468 100644
--- a/tex/context/base/anch-bck.mkvi
+++ b/tex/context/base/anch-bck.mkvi
@@ -152,15 +152,15 @@
\setvalue{\??textbackgroundlevel\v!text}%
{\let\anch_backgrounds_text_start_indeed\anch_backgrounds_text_start_txt
- \let\anch_backgrounds_text_stop_indeed \dostoptextbackgroundtxt}
+ \let\anch_backgrounds_text_stop_indeed \anch_backgrounds_text_stop_txt}
\setvalue{\??textbackgroundlevel\v!paragraph}%
{\ifnum\c_anch_backgrounds_text_level>\plusone
\let\anch_backgrounds_text_start_indeed\anch_backgrounds_text_start_txt
- \let\anch_backgrounds_text_stop_indeed \dostoptextbackgroundtxt
+ \let\anch_backgrounds_text_stop_indeed \anch_backgrounds_text_stop_txt
\else
\let\anch_backgrounds_text_start_indeed\anch_backgrounds_text_start_par
- \let\anch_backgrounds_text_stop_indeed \dostoptextbackgroundpar
+ \let\anch_backgrounds_text_stop_indeed \anch_backgrounds_text_stop_par
\fi}
\setvalue{\??textbackgroundlevel\v!none}%
@@ -191,10 +191,10 @@
\let\m_anch_backgrounds_text_background\!!zerocount
\fi
\startpositionoverlay{\textbackgroundoverlay{\textbackgroundparameter\c!level}}%
- \anch_backgrounds_text_mp_graphic % gets expanded directly
+ \anch_backgrounds_text_meta_graphic % gets expanded directly
\stoppositionoverlay}
-\def\anch_backgrounds_text_mp_graphic
+\def\anch_backgrounds_text_meta_graphic
{\normalexpanded
{\setMPpositiongraphicrange % needs to be optimized
{\v_anch_backgrounds_anchor_current_b}%
@@ -235,7 +235,7 @@
\usetextbackgroundstyleandcolor\c!style\c!color
\fpos\v_anch_backgrounds_text_current\ignorespaces}
-\def\dostoptextbackgroundtxt
+\def\anch_backgrounds_text_stop_txt
{\tpos\v_anch_backgrounds_text_current
\endgroup}
@@ -249,7 +249,7 @@
\resetallattributes % \attribute\linenumberattribute \attributeunsetvalue
\noindent
\ifgridsnapping
- \doassignsomeskip\textbackgroundparameter\c!topoffset\to\textbackgroundskip
+ \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!topoffset}%
\ifdim\textbackgroundskip>\zeropoint
\struttedbox{\hbox{\raise\textbackgroundskip\hbox{\fpos\v_anch_backgrounds_text_current}}}%
\else
@@ -264,7 +264,7 @@
\vskip-\lineheight
\nobreak
\ifgridsnapping \else
- \doassignsomeskip\textbackgroundparameter\c!topoffset\to\textbackgroundskip
+ \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!topoffset}%
\ifdim\textbackgroundskip>\zeropoint
\kern\textbackgroundskip\nobreak
\fi
@@ -284,10 +284,10 @@
\doinhibitblank % \blank[\v!disable]% new
\par}
-\def\dostoptextbackgroundpar
+\def\anch_backgrounds_text_stop_par
{\par
\removelastskip % new
- \doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\textbackgroundskip
+ \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!bottomoffset}%
\ifdim\lastskip>\zeropoint
\advance\textbackgroundskip-\lastskip
\fi
@@ -302,7 +302,7 @@
\forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM
\resetallattributes % \attribute\linenumberattribute \attributeunsetvalue
\nobreak \noindent \strut \hfill \kern\zeropoint
- \doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\textbackgroundskip
+ \spac_helpers_assign_skip\textbackgroundskip{\textbackgroundparameter\c!bottomoffset}%
\ifgridsnapping % experimental, pascal (todo: topoffset in same way)
\ifdim\textbackgroundskip>\zeropoint
\struttedbox\plusone{\hbox{\lower\textbackgroundskip\hbox{\tpos\v_anch_backgrounds_text_current}}}%
diff --git a/tex/context/base/anch-pgr.mkiv b/tex/context/base/anch-pgr.mkiv
index ebfbb7d1f..8c47581f3 100644
--- a/tex/context/base/anch-pgr.mkiv
+++ b/tex/context/base/anch-pgr.mkiv
@@ -375,14 +375,14 @@
\newbox\positiongraphicbox
\def\startMPpositiongraphic % id setups
- {\dodoublegroupempty\anch_positions_mp_graphic_start}
+ {\dodoublegroupempty\anch_positions_meta_graphic_start}
-\def\anch_positions_mp_graphic_start#1#2#3\stopMPpositiongraphic % tag list mpcode
- {\setgvalue{\??positiongraphic#1}{\anch_positions_mp_graphic_use{#1}{#2}{#3}}}
+\def\anch_positions_meta_graphic_start#1#2#3\stopMPpositiongraphic % tag list mpcode
+ {\setgvalue{\??positiongraphic#1}{\anch_positions_meta_graphic_use{#1}{#2}{#3}}}
\let\stopMPpositiongraphic\relax
-\def\anch_positions_mp_graphic_prepare
+\def\anch_positions_meta_graphic_prepare
{\ifcsname\??gv\currentmpvariableclass:self\endcsname \else
\letvalue{\??gv\currentmpvariableclass:self}\currentposition
\fi
@@ -390,51 +390,51 @@
\letvalue{\??gv\currentmpvariableclass:from}\currentposition
\fi}
-\def\anch_positions_mp_graphic_use#1#2#3%
+\def\anch_positions_meta_graphic_use#1#2#3%
{\begingroup
\meta_prepare_variables{#2}%
- \anch_positions_mp_graphic_prepare
+ \anch_positions_meta_graphic_prepare
\startMPcode#3\stopMPcode
\endgroup}
\def\MPpositiongraphic
- {\dodoublegroupempty\anch_positions_mp_graphic_direct}
+ {\dodoublegroupempty\anch_positions_meta_graphic_direct}
-\def\anch_positions_mp_graphic_direct#1% tag setups
+\def\anch_positions_meta_graphic_direct#1% tag setups
{\ifcsname\??positionmethod#1\endcsname % method
- \expandafter\anch_positions_mp_graphic_direct_indeed_method
+ \expandafter\anch_positions_meta_graphic_direct_indeed_method
\else\ifcsname\??positiongraphic#1\endcsname
- \doubleexpandafter\anch_positions_mp_graphic_direct_indeed_normal
+ \doubleexpandafter\anch_positions_meta_graphic_direct_indeed_normal
\else
- \doubleexpandafter\anch_positions_mp_graphic_direct_indeed_unknown
+ \doubleexpandafter\anch_positions_meta_graphic_direct_indeed_unknown
\fi\fi{#1}}
-\let\anch_positions_mp_graphic_direct_indeed_unknown\gobbletwoarguments
+\let\anch_positions_meta_graphic_direct_indeed_unknown\gobbletwoarguments
-\def\anch_positions_mp_graphic_direct_indeed_method
- {\anch_positions_mp_graphic_direct_indeed\??positionmethod}
+\def\anch_positions_meta_graphic_direct_indeed_method
+ {\anch_positions_meta_graphic_direct_indeed\??positionmethod}
-\def\anch_positions_mp_graphic_direct_indeed_normal
- {\anch_positions_mp_graphic_direct_indeed\??positiongraphic}
+\def\anch_positions_meta_graphic_direct_indeed_normal
+ {\anch_positions_meta_graphic_direct_indeed\??positiongraphic}
-\def\anch_positions_mp_graphic_direct_indeed#1#2#3% what tag setups
+\def\anch_positions_meta_graphic_direct_indeed#1#2#3% what tag setups
{\begingroup
\setupMPvariables[#2][#3]%
\edef\currentmpvariableclass{#2}%
- \anch_positions_mp_graphic_prepare
- \ignoreMPboxdepth
- \def\anch_positions_mp_graphic_direct{\anch_positions_mp_graphic_nested{#3}}% takes two extra arguments
+ \anch_positions_meta_graphic_prepare
+ \obeyMPboxorigin % do we also set the size ?
+ \def\anch_positions_meta_graphic_direct{\anch_positions_meta_graphic_nested{#3}}% takes two extra arguments
\setbox\positiongraphicbox\hbox
{\ignorespaces\csname#1#2\endcsname\removelastspace}%
\smashbox\positiongraphicbox
\box\positiongraphicbox
\endgroup}
-\def\anch_positions_mp_graphic_nested#1#2#3% nesting used in prikkels / pascal (might go away)
+\def\anch_positions_meta_graphic_nested#1#2#3% nesting used in prikkels / pascal (might go away)
{\begingroup
\setupMPvariables[#2][#1,#3]%
\edef\currentmpvariableclass{#2}%
- \anch_positions_mp_graphic_prepare
+ \anch_positions_meta_graphic_prepare
\getvalue{\??positiongraphic#2}%
\endgroup}%
diff --git a/tex/context/base/anch-pos.mkiv b/tex/context/base/anch-pos.mkiv
index 2ebeb69f6..a801a5763 100644
--- a/tex/context/base/anch-pos.mkiv
+++ b/tex/context/base/anch-pos.mkiv
@@ -406,9 +406,10 @@
\unexpanded\def\rawwpos#1%
{\hpos{w:#1}
{\strut
- \hskip-\leftskip
- \hskip\hsize
- \hskip-\rightskip}}
+% \hskip-\leftskip
+% \hskip\hsize
+% \hskip-\rightskip}}
+ \hskip\dimexpr\hsize-\leftskip-\rightskip\relax}}
% the next macro disables par positions (in inner boxes) and
% only registers the width
diff --git a/tex/context/base/buff-ini.mkiv b/tex/context/base/buff-ini.mkiv
index aa8ac8d1f..0d240e1a9 100644
--- a/tex/context/base/buff-ini.mkiv
+++ b/tex/context/base/buff-ini.mkiv
@@ -59,7 +59,7 @@
\expandafter\buff_grab_direct_indeed_b
\fi}
-\def\buff_grab_direct_indeed_a[#1][#2][#3][#4]{\buff_start_indeed{#1}{#2}{#3}{#4}}
+\def\buff_grab_direct_indeed_a[#1][#2][#3][#4]{\buff_start_indeed {#1}{#2}{#3}{#4}}
\def\buff_grab_direct_indeed_b[#1][#2][#3][#4]{\buff_start_indeed\empty{#1}{#2}{#3}}
\unexpanded\def\buff_pickup#1#2#3#4#5% name, startsequence, stopsequence, before, after
@@ -79,7 +79,7 @@
\buff_gobble}
\unexpanded\def\buff_stop#1%
- {\egroup
+ {% already done \egroup
\getvalue{#1}}
\unexpanded\def\setbuffer
diff --git a/tex/context/base/buff-ver.mkiv b/tex/context/base/buff-ver.mkiv
index 67ee200d5..52626166c 100644
--- a/tex/context/base/buff-ver.mkiv
+++ b/tex/context/base/buff-ver.mkiv
@@ -49,7 +49,7 @@
\setvalue{\??typingspace\v!normal }{}
\setvalue{\??typingspace\v!fixed }{\let\obeyedspace\specialfixedspace}
-\setvalue{\??typingblank\v!standard }{\ctxparskip}
+\setvalue{\??typingblank\v!standard }{\s_spac_whitespace_parskip}
\setvalue{\??typingblank\v!small }{\smallskipamount}
\setvalue{\??typingblank\v!medium }{\medskipamount}
\setvalue{\??typingblank\v!big }{\bigskipamount}
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 48c6cd4ea..80af70a20 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2012.01.09 10:08}
+\newcontextversion{2012.01.11 10:58}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 7c4855dcf..2627ecaee 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2012.01.09 10:08}
+\newcontextversion{2012.01.11 10:58}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index 538e5983c..93246db30 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index 105c08445..3a5ddbd44 100644
--- a/tex/context/base/context-version.png
+++ b/tex/context/base/context-version.png
Binary files differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index d5978661a..f27cee9bc 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2012.01.09 10:08}
+\edef\contextversion{2012.01.11 10:58}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 08671380f..1f34408c8 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -23,7 +23,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2012.01.09 10:08}
+\edef\contextversion{2012.01.11 10:58}
%D For those who want to use this:
diff --git a/tex/context/base/core-mis.mkiv b/tex/context/base/core-mis.mkiv
index 515cca57f..1e21fc60c 100644
--- a/tex/context/base/core-mis.mkiv
+++ b/tex/context/base/core-mis.mkiv
@@ -1,3 +1,4 @@
+
%D \module
%D [ file=core-mis,
%D version=1998.01.29,
@@ -1252,63 +1253,7 @@
\def\referral
{\dosingleargument\doreferral}
-
-% FUZZY OLD STUFF: will be removed when not used in some manual;
-% rows instead of columns, i'd forgotten that this code exist
-%
-% \definesystemvariable{ri}
-%
-% \unexpanded\def\setuprows
-% {\dodoubleargument\getparameters[\??ri]}
-%
-% \definecomplexorsimpleempty\startrows
-%
-% \def\complexstartrows[#1]%
-% {\bgroup
-% \setuprows[#1]%
-% \let\do@@ribottom\relax
-% \def\row
-% {\do@@ribottom
-% \egroup
-% \dimen0\vsize
-% \divide\dimen0 \@@rin
-% \advance\dimen0 -\lineskip
-% \vbox to \dimen0
-% \bgroup
-% \@@ritop
-% \let\do@@ribottom\@@ribottom
-% \ignorespaces}%
-% \bgroup
-% \row}
-%
-% \unexpanded\def\stoprows
-% {\do@@ribottom
-% \egroup
-% \egroup}
-%
-% \setuprows
-% [\c!n=2,
-% \c!top=,
-% \c!bottom=\vfill]
-
-% THIS WAS MAIN-003.TEX
-
-% messages moved
-
-% messages moved
-
-% messages moved
-
-% messages moved
-% messages moved
-
-% messages moved
-
-% messages moved
-
-% messages moved
-
\definetabulate
[\v!legend]
[|emj1|i1|mR|]
@@ -1335,9 +1280,6 @@
\unexpanded\def\xxbox
{\bgroup\aftergroup\egroup\hbox\bgroup\txx\let\next=}
-% \def\mrm#1%
-% {$\rm#1$}
-
%D \macros
%D {definepairedbox, setuppairedbox, placepairedbox}
%D
@@ -2012,7 +1954,7 @@
\hsize#1\hsize}
\setuphorizontaldivision
- [\c!distance=\tfskipsize,
+ [\c!distance=\emwidth,
\c!n=\v!fit]
%D This one is for Daniel Pittman, who wanted tight
diff --git a/tex/context/base/font-ini.mkvi b/tex/context/base/font-ini.mkvi
index 3e9660cf3..2bf4c49dd 100644
--- a/tex/context/base/font-ini.mkvi
+++ b/tex/context/base/font-ini.mkvi
@@ -618,7 +618,7 @@
\def\font_helpers_set_math_family#mrfam#familytag%
{\ifconditional\optimizemathfontdefinitions
- \ifcsname*\fontclass\textface\s!mm#familytag1\fontsize1*\endcsname
+ \ifcsname\??fontsclass\fontclass\textface\s!mm#familytag1\fontsize1\endcsname
\font_helpers_preset_math_family_indeed#mrfam#familytag%
\else
\font_helpers_set_math_family_indeed#mrfam#familytag%
@@ -629,7 +629,7 @@
\def\font_helpers_set_math_family_bold#mbfam#familytag#mrfam%
{\ifconditional\optimizemathfontdefinitions
- \ifcsname*\fontclass\textface\s!mm#familytag1\fontsize1*\endcsname
+ \ifcsname\??fontsclass\fontclass\textface\s!mm#familytag1\fontsize1\endcsname
\font_helpers_preset_math_family_indeed#mbfam#familytag%
\else
\font_helpers_set_math_family_bold_indeed#mbfam#familytag#mrfam%
@@ -639,9 +639,9 @@
\fi}
\def\font_helpers_preset_math_family_indeed#fam#familytag%
- {\scriptscriptfont#fam\csname*\fontclass\scriptscriptface\s!mm#familytag3\fontsize3*\endcsname
- \scriptfont #fam\csname*\fontclass\scriptface \s!mm#familytag2\fontsize2*\endcsname
- \textfont #fam\csname*\fontclass\textface \s!mm#familytag1\fontsize1*\endcsname}
+ {\scriptscriptfont#fam\csname\??fontsclass\fontclass\scriptscriptface\s!mm#familytag3\fontsize3\endcsname
+ \scriptfont #fam\csname\??fontsclass\fontclass\scriptface \s!mm#familytag2\fontsize2\endcsname
+ \textfont #fam\csname\??fontsclass\fontclass\textface \s!mm#familytag1\fontsize1\endcsname}
\let\font_helpers_reset_fontclass_math_families\gobbleoneargument
@@ -1540,8 +1540,8 @@
% todo: now mathsize twice in name (so it can go here)
% todo: check when mathsize is needed
-\installcorenamespace {fontsbasic}
-\installcorenamespace {fontsclass}
+\installcorenamespace{fontsbasic}
+\installcorenamespace{fontsclass}
\newconditional\font_auto_font_size \settrue\font_auto_font_size
@@ -1556,7 +1556,7 @@
\let\v_font_identifier_basic_saved\v_font_identifier_basic
\let\v_font_identifier_class_saved\v_font_identifier_class
-% \def\v_font_identifier_class{*\fontclass\lastfontidentifier\fontstyle\fontsize*} % no \currentmathsize
+% \def\v_font_identifier_class{\??fontsclass\fontclass\lastfontidentifier\fontstyle\fontsize} % no \currentmathsize
\def\font_basics_define_font_without_parameters#identifier#2%
{\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly
@@ -2092,28 +2092,28 @@
\def\font_basics_define_body_font_nop_xx#style#body[#one#two#rest=#value]%
{\ifcsname#style#one#two#rest\endcsname\else\font_basics_check_bodyfont{#style}{#one#two}{#rest}\fi
- \expandafter\let\csname*#body#style#one#two#rest*\endcsname\undefined
+ \expandafter\let\csname\??fontsclass#body#style#one#two#rest\endcsname\undefined
\unexpanded\expandafter\normaledef\csname#body#style#one#two#rest\endcsname{\font_helpers_trigger{#body#style#one#two#rest}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}}
\def\font_basics_define_body_font_yes_xx#style#body[#one#two#rest=#value]%
{\ifcsname#style#one#two#rest\endcsname\else\font_basics_check_bodyfont{#style}{#one#two}{#rest}\fi
- \global\expandafter\let\csname*\fontclass#body#style#one#two#rest*\endcsname\undefined
+ \global\expandafter\let\csname\??fontsclass\fontclass#body#style#one#two#rest\endcsname\undefined
\unexpanded\expandafter\normalxdef\csname\fontclass#body#style#one#two#rest\endcsname{\font_helpers_trigger{#body#style#one#two#rest}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}}
\def\font_basics_define_body_font_nop_mm#style#body[#one#two#rest=#value]%
{\ifcsname#style#one#two#rest\endcsname\else\font_basics_check_bodyfont{#style}{#one#two}{#rest}\fi
- \expandafter\let\csname*#body#style#one#two#rest1*\endcsname\undefined
- \expandafter\let\csname*#body#style#one#two#rest2*\endcsname\undefined
- \expandafter\let\csname*#body#style#one#two#rest3*\endcsname\undefined
+ \expandafter\let\csname\??fontsclass#body#style#one#two#rest1\endcsname\undefined
+ \expandafter\let\csname\??fontsclass#body#style#one#two#rest2\endcsname\undefined
+ \expandafter\let\csname\??fontsclass#body#style#one#two#rest3\endcsname\undefined
\unexpanded\expandafter\normaledef\csname#body#style#one#two#rest1\endcsname{\font_helpers_trigger{#body#style#one#two#rest1}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}%
\unexpanded\expandafter\normaledef\csname#body#style#one#two#rest2\endcsname{\font_helpers_trigger{#body#style#one#two#rest2}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}%
\unexpanded\expandafter\normaledef\csname#body#style#one#two#rest3\endcsname{\font_helpers_trigger{#body#style#one#two#rest3}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}}
\def\font_basics_define_body_font_yes_mm#style#body[#one#two#rest=#value]%
{\ifcsname#style#one#two#rest\endcsname\else\font_basics_check_bodyfont{#style}{#one#two}{#rest}\fi
- \global\expandafter\let\csname*\fontclass#body#style#one#two#rest1*\endcsname\undefined
- \global\expandafter\let\csname*\fontclass#body#style#one#two#rest2*\endcsname\undefined
- \global\expandafter\let\csname*\fontclass#body#style#one#two#rest3*\endcsname\undefined
+ \global\expandafter\let\csname\??fontsclass\fontclass#body#style#one#two#rest1\endcsname\undefined
+ \global\expandafter\let\csname\??fontsclass\fontclass#body#style#one#two#rest2\endcsname\undefined
+ \global\expandafter\let\csname\??fontsclass\fontclass#body#style#one#two#rest3\endcsname\undefined
\unexpanded\expandafter\normalxdef\csname\fontclass#body#style#one#two#rest1\endcsname{\font_helpers_trigger{#body#style#one#two#rest1}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}%
\unexpanded\expandafter\normalxdef\csname\fontclass#body#style#one#two#rest2\endcsname{\font_helpers_trigger{#body#style#one#two#rest2}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}%
\unexpanded\expandafter\normalxdef\csname\fontclass#body#style#one#two#rest3\endcsname{\font_helpers_trigger{#body#style#one#two#rest3}{\number\p_font_rscale}{#body}{\normalunexpanded{#value}}}}
@@ -3684,7 +3684,7 @@
%D Since we know what scaling it to be applied, we can
%D implement a much faster alternative:
-\installcorenamespace {symbolfont}
+\installcorenamespace{symbolfont}
\let\thedefinedfont\relax
diff --git a/tex/context/base/font-tra.mkiv b/tex/context/base/font-tra.mkiv
index 0f16dbc43..41bd3dd80 100644
--- a/tex/context/base/font-tra.mkiv
+++ b/tex/context/base/font-tra.mkiv
@@ -51,6 +51,7 @@
\tttf\language\minusone
\veryraggedright
\forgetparindent
+ \forgeteverypar
\hangindent1em
\hangafter\plusone
\dontleavehmode\hbox{\detokenize{#1}}\removeunwantedspaces
@@ -71,6 +72,7 @@
{\begingroup
\veryraggedright
\forgetparindent
+ \forgeteverypar
\dontleavehmode\bgroup\tttf \language\minusone features: \showotfstepfeatures\egroup
\blank
\dontleavehmode\bgroup\tttf result:\egroup
@@ -98,7 +100,8 @@
\startotfcollecting
\begingroup
\veryraggedright
- \forgetparindent}
+ \forgetparindent
+ \forgeteverypar}
\unexpanded\def\stopotfsample
{\endgroup
@@ -113,6 +116,7 @@
{\begingroup
\veryraggedright
\forgetparindent
+ \forgeteverypar
\setupcolors[\c!state=\v!start]% can be option
\startotfsample
\global\setbox\otfcompositionbox\hbox{\definedfont[#1]\ifnum#2<0 \textdir TRT\else\ifnum#2>0 \textdir TLT\fi\fi\relax#3}%
diff --git a/tex/context/base/grph-fig.mkiv b/tex/context/base/grph-fig.mkiv
index c33949361..593e0f18a 100644
--- a/tex/context/base/grph-fig.mkiv
+++ b/tex/context/base/grph-fig.mkiv
@@ -447,7 +447,7 @@
\def\dodotypesetbufferindeed#1%
{}
-
+
% for me only (manuals and such)
%
% \definetypesetting [name] [options] [settings-a]
@@ -462,17 +462,17 @@
% \typesetfile[oepsoeps.tex][width=10cm,frame=on]
% \stoptext
-\definesystemvariable{tz}
+\installcorenamespace{typesettingfile}
\unexpanded\def\definetypesetting{\dotripleempty\dodefinetypesetting}
\unexpanded\def\typesetfile {\dotripleempty\dotypesetfile}
\def\dodefinetypesetting[#1][#2][#3]% <name> options settings-a
- {\doifsomething{#1}{\setvalue{\??tz#1}{\dodotypesetfile{#2}{#3}}}}
+ {\doifsomething{#1}{\setvalue{\??typesettingfile#1}{\dodotypesetfile{#2}{#3}}}}
\def\dotypesetfile[#1][#2][#3]% <name> filename settings-b | filename options settings
- {\ifcsname\??tz#1\endcsname
- \csname\??tz#1\endcsname{#2}{#3}%
+ {\ifcsname\??typesettingfile#1\endcsname
+ \csname\??typesettingfile#1\endcsname{#2}{#3}%
\else\ifthirdargument % filename options settings
\dodotypesetfile{#2}{#3}{#1}{}%
\else\ifsecondargument % filename settings
diff --git a/tex/context/base/lang-def.mkiv b/tex/context/base/lang-def.mkiv
index 8c2bec1cf..e838f60e1 100644
--- a/tex/context/base/lang-def.mkiv
+++ b/tex/context/base/lang-def.mkiv
@@ -106,33 +106,33 @@
\installlanguage
[\s!nb]
- [spacing=packed,
- lefthyphenmin=2,
- righthyphenmin=2,
- leftsentence=\emdash,
- rightsentence=\emdash,
- leftsubsentence=\emdash,
- rightsubsentence=\emdash,
- leftquote=\upperleftsinglesixquote,
- rightquote=\upperrightsingleninequote,
- leftquotation=\leftguillemot,
- rightquotation=\rightguillemot,
- date={day,{.},\space,month,\space,year}]
+ [\c!spacing=\v!packed,
+ \s!lefthyphenmin=2,
+ \s!righthyphenmin=2,
+ \c!leftsentence=\emdash,
+ \c!rightsentence=\emdash,
+ \c!leftsubsentence=\emdash,
+ \c!rightsubsentence=\emdash,
+ \c!leftquote=\upperleftsinglesixquote,
+ \c!rightquote=\upperrightsingleninequote,
+ \c!leftquotation=\leftguillemot,
+ \c!rightquotation=\rightguillemot,
+ \c!date={\v!day,{.},\space,\v!month,\space,\v!year}]
\installlanguage
[\s!nn]
- [spacing=packed,
- lefthyphenmin=2,
- righthyphenmin=2,
- leftsentence=\emdash,
- rightsentence=\emdash,
- leftsubsentence=\emdash,
- rightsubsentence=\emdash,
- leftquote=\upperleftsinglesixquote,
- rightquote=\upperrightsingleninequote,
- leftquotation=\leftguillemot,
- rightquotation=\rightguillemot,
- date={day,{.},\space,month,\space,year}]
+ [\c!spacing=\v!packed,
+ \s!lefthyphenmin=2,
+ \s!righthyphenmin=2,
+ \c!leftsentence=\emdash,
+ \c!rightsentence=\emdash,
+ \c!leftsubsentence=\emdash,
+ \c!rightsubsentence=\emdash,
+ \c!leftquote=\upperleftsinglesixquote,
+ \c!rightquote=\upperrightsingleninequote,
+ \c!leftquotation=\leftguillemot,
+ \c!rightquotation=\rightguillemot,
+ \c!date={\v!day,{.},\space,\v!month,\space,\v!year}]
\installlanguage [\s!no] [\s!nb]
@@ -260,15 +260,13 @@
\c!rightquotation=\leftguillemot,
\c!date={\v!day,{.},\space,\v!month,\space,\v!year}]
-\installlanguage [polish] [\s!pl]
-\installlanguage [czech] [\s!cs]
-\installlanguage [slovak] [\s!sk]
-\installlanguage [croatian] [\s!hr]
-\installlanguage [slovenian] [\s!sl]
+\installlanguage [\s!polish] [\s!pl]
+\installlanguage [\s!czech] [\s!cs]
+\installlanguage [\s!slovak] [\s!sk]
+\installlanguage [\s!croatian] [\s!hr]
+\installlanguage [\s!slovenian] [\s!sl]
\installlanguage [slovene] [\s!sl] % both possible (mojca: still needed?)
-\installlanguage [cz] [\s!cs]
-
\def\doconvertsloveniancharacters{\dodoconvertcharacters{25}}
\def\sloveniancharacters{\doconvertsloveniancharacters\sloveniancharacter}
@@ -286,16 +284,16 @@
%D language is Slovenian. If you feel uncomfortable with this,
%D mail Mojca, since she promised to to take the heat.
-\defineconversion [sl] [character] [\sloveniancharacter]
-\defineconversion [sl] [Character] [\slovenianCharacter]
+\defineconversion [\s!sl] [character] [\sloveniancharacter]
+\defineconversion [\s!sl] [Character] [\slovenianCharacter]
-\defineconversion [sl] [characters] [\sloveniancharacters]
-\defineconversion [sl] [Characters] [\slovenianCharacters]
+\defineconversion [\s!sl] [characters] [\sloveniancharacters]
+\defineconversion [\s!sl] [Characters] [\slovenianCharacters]
-\defineconversion [sl] [a] [\sloveniancharacters]
-\defineconversion [sl] [A] [\slovenianCharacters]
-\defineconversion [sl] [AK] [\smallcapped\sloveniancharacters]
-\defineconversion [sl] [KA] [\smallcapped\sloveniancharacters]
+\defineconversion [\s!sl] [a] [\sloveniancharacters]
+\defineconversion [\s!sl] [A] [\slovenianCharacters]
+\defineconversion [\s!sl] [AK] [\smallcapped\sloveniancharacters]
+\defineconversion [\s!sl] [KA] [\smallcapped\sloveniancharacters]
\def\sloveniancharacters#1{\ctxcommand{alphabetic(\number#1,"sl")}}
\def\slovenianCharacters#1{\ctxcommand{Alphabetic(\number#1,"sl")}}
@@ -333,8 +331,8 @@
\c!date={\v!day,\space,\v!month,\space,\v!year},
\s!patterns=\s!uk]
-\installlanguage [russian] [\s!ru]
-\installlanguage [ukrainian] [\s!ua]
+\installlanguage [\s!russian] [\s!ru]
+\installlanguage [\s!ukrainian] [\s!ua]
% Uralic Languages: Cheremiss, Estonian, Finnish, Karelian, Laap,
% Mordvinian, Permian tongues, Hungarian, Ostyak, Vogul, Samoyed
@@ -365,8 +363,8 @@
\c!rightquotation=\upperrightdoubleninequote,
\c!date={\v!year,.,\space,\v!month,\space,\v!day,.}]
-\installlanguage [finish] [\s!fi]
-\installlanguage [hungarian] [\s!hu]
+\installlanguage [\s!finish] [\s!fi]
+\installlanguage [\s!hungarian] [\s!hu]
% Altaic Languages: Uigur, Uzbek, Azeri/Azerbaijani, Chuvash,
% Turkish, Turkmen, Kazakh, Kazar, Kireghiz, Noghay, Talar,
@@ -401,16 +399,13 @@
\s!lefthyphenmin=1,
\s!righthyphenmin=2]
-\installlanguage [turkish] [\s!tr]
-\installlanguage [turkmen] [\s!tk]
+\installlanguage [\s!turkish] [\s!tr]
+\installlanguage [\s!turkmen] [\s!tk]
% Anatolian Languages
% Arabic Languages
-\definesystemconstant {arabic}
-\definesystemvariable {ar}
-
\installlanguage
[\s!ar]
[\c!spacing=\v!broad,
@@ -473,16 +468,10 @@
\s!lefthyphenmin=2,
\s!righthyphenmin=2]
-\installlanguage [lithuanian] [\s!lt]
+\installlanguage [\s!lithuanian] [\s!lt]
% Celtic: Breton, Welsh, Irish, Manx, Scottish Gaelic
-% CJK
-
-\definesystemconstant {chinese} \definesystemconstant {cn}
-\definesystemconstant {japanese} \definesystemconstant {ja}
-\definesystemconstant {korean} \definesystemconstant {kr}
-
\installlanguage
[\s!cn]
[\c!leftsentence=——,
@@ -535,7 +524,7 @@
\c!date={\v!day\space\v!month\space\v!year},
\s!patterns=\s!agr] % ok?
-\installlanguage [greek] [\s!gr]
+\installlanguage [\s!greek] [\s!gr]
\installlanguage
[\s!agr]
@@ -545,8 +534,7 @@
\c!leftquotation=\upperleftdoublesixquote,
\c!rightquotation=\upperrightdoubleninequote]
-\installlanguage [ancientgreek] [\s!agr]
-\installlanguage [grk] [\s!agr]
+\installlanguage [\s!ancientgreek] [\s!agr]
% Indo-Iranian Languages: 34.
@@ -554,8 +542,8 @@
% Sardian, Catalan, French, Ladino, Portuguese, Proven\c{c}al,
% Spanish
-\ifx\guillemotspace\undefined \let\guillemotspace\empty \fi
-\ifx\sentencespace \undefined \let\sentencespace \empty \fi
+\ifdefined\guillemotspace \else \let\guillemotspace\empty \fi
+\ifdefined\sentencespace \else \let\sentencespace \empty \fi
\installlanguage
[\s!fr]
@@ -657,15 +645,13 @@
%D For compatibility reasons we also define:
-\installlanguage [fa] [\s!fr] % for dutchies only
-
-\installlanguage [french] [\s!fr]
-\installlanguage [spanish] [\s!es]
-\installlanguage [catalan] [\s!ca]
-\installlanguage [italian] [\s!it]
-\installlanguage [latin] [\s!la]
-\installlanguage [portuguese] [\s!pt]
-\installlanguage [romanian] [\s!ro]
+\installlanguage [\s!french] [\s!fr]
+\installlanguage [\s!spanish] [\s!es]
+\installlanguage [\s!catalan] [\s!ca]
+\installlanguage [\s!italian] [\s!it]
+\installlanguage [\s!latin] [\s!la]
+\installlanguage [\s!portuguese] [\s!pt]
+\installlanguage [\s!romanian] [\s!ro]
\defineconversion [\s!fr] [\v!day:mnem] [\frordinaldaynumber]
@@ -684,7 +670,7 @@
\c!rightquotation=\quotedblright,
\c!date={{ },dd,{/},mm,{/},yy}]
-\installlanguage [vietnamese] [\s!vi]
+\installlanguage [\s!vietnamese] [\s!vi]
%D Todo: generate this one from languages.data
@@ -692,5 +678,11 @@
\installlanguage[deu][\s!de]
\installlanguage[eng][\s!en]
\installlanguage[fra][\s!fr]
+%installlanguage[grk][\s!agr]
+
+%D This might go:
+
+\installlanguage[cz][\s!cs]
+%installlanguage[fa][\s!fr] % for dutchies only
\protect \endinput
diff --git a/tex/context/base/math-ali.mkiv b/tex/context/base/math-ali.mkiv
index 0738666f0..bbc77ade6 100644
--- a/tex/context/base/math-ali.mkiv
+++ b/tex/context/base/math-ali.mkiv
@@ -531,7 +531,7 @@
\setupcurrentmathmatrix[#1]%
\fi
\emptyhbox
- \math_matrix_handler_apply
+ \math_matrix_align_method_analyze
\mathmatrixleft
\mathmatrixbox\bgroup
\pushmacro\domatrixNC
@@ -584,10 +584,7 @@
\unexpanded\def\dodomatrixNC
{\gdef\domatrixNC{\endmath&}}
-\installcorenamespace{mathmatrixhandler}
-
-\def\installmathmatrixhandler#1#2%
- {\setvalue{\??mathmatrixhandler#1}{#2}}
+\installcorenamespace{mathmatrixalignmethod}
\let\mathmatrixleft \empty % experimental hook
\let\mathmatrixright\empty % experimental hook
@@ -601,20 +598,23 @@
\mathmatrixparameter\c!right$}}%
\vbox}
-\installmathmatrixhandler\v!top {\def\mathmatrixbox{\math_matrix_process\plusthree\plusone }}
-\installmathmatrixhandler\v!high {\def\mathmatrixbox{\math_matrix_process\plusthree\zerocount}}
-\installmathmatrixhandler\v!lohi {\def\mathmatrixbox{\math_matrix_process\plustwo \zerocount}}
-\installmathmatrixhandler\v!low {\def\mathmatrixbox{\math_matrix_process\plusone \zerocount}}
-\installmathmatrixhandler\v!bottom{\def\mathmatrixbox{\math_matrix_process\plusone \plusone }}
-\installmathmatrixhandler\v!normal{\def\mathmatrixbox{\math_matrix_process\plustwo \zerocount}} % lohi
+\unexpanded\def\installmathmatrixalignmethod#1#2%
+ {\setvalue{\??mathmatrixalignmethod#1}{#2}}
-\def\math_matrix_handler_apply
- {\csname\??mathmatrixhandler\ifcsname\??mathmatrixhandler\mathmatrixparameter\c!location\endcsname
+\def\math_matrix_align_method_analyze
+ {\csname\??mathmatrixalignmethod\ifcsname\??mathmatrixalignmethod\mathmatrixparameter\c!location\endcsname
\mathmatrixparameter\c!location
\else
\v!normal
\fi\endcsname}
+\installmathmatrixalignmethod\v!top {\def\mathmatrixbox{\math_matrix_process\plusthree\plusone }}
+\installmathmatrixalignmethod\v!high {\def\mathmatrixbox{\math_matrix_process\plusthree\zerocount}}
+\installmathmatrixalignmethod\v!lohi {\def\mathmatrixbox{\math_matrix_process\plustwo \zerocount}}
+\installmathmatrixalignmethod\v!low {\def\mathmatrixbox{\math_matrix_process\plusone \zerocount}}
+\installmathmatrixalignmethod\v!bottom{\def\mathmatrixbox{\math_matrix_process\plusone \plusone }}
+\installmathmatrixalignmethod\v!normal{\def\mathmatrixbox{\math_matrix_process\plustwo \zerocount}} % lohi
+
%D \startbuffer
%D \placeformula \startformula[-] \startmatrix
%D \NC 1 \NC x \NC a \NR
diff --git a/tex/context/base/meta-ini.mkiv b/tex/context/base/meta-ini.mkiv
index 69b717cfe..d4e98c100 100644
--- a/tex/context/base/meta-ini.mkiv
+++ b/tex/context/base/meta-ini.mkiv
@@ -63,8 +63,8 @@
{\dosingleempty\meta_start_inclusions}
\def\meta_start_inclusions[#1]#2\stopMPinclusions
- {\edef\m_mp_option{#1}%
- \ifx\m_mp_option\!!plustoken \else
+ {\edef\m_meta_option{#1}%
+ \ifx\m_meta_option\!!plustoken \else
\global\t_meta_userinclusions\emptytoks
\fi
\global\t_meta_userinclusions\expandafter{\the\t_meta_userinclusions#2}}
@@ -75,8 +75,8 @@
{\dosingleempty\meta_inclusions}
\def\meta_inclusions[#1]#2%
- {\edef\m_mp_option{#1}%
- \ifx\m_mp_option\!!plustoken \else
+ {\edef\m_meta_option{#1}%
+ \ifx\m_meta_option\!!plustoken \else
\global\t_meta_userinclusions\emptytoks
\fi
\global\t_meta_userinclusions\expandafter{\the\t_meta_userinclusions#2}}
@@ -168,7 +168,7 @@
\unexpanded\def\meta_process_graphic#1% todo: extensions and inclusions outside beginfig
{\meta_start_current_graphic
\forgetall
- \setbox\b_mp_graphic\hbox\bgroup % ; added 20100901 (as in mkii)
+ \setbox\b_meta_graphic\hbox\bgroup % ; added 20100901 (as in mkii)
\normalexpanded{\noexpand\ctxlua{metapost.graphic(
"\currentMPgraphicinstance",
"\currentMPgraphicformat",
@@ -257,7 +257,7 @@
{\begingroup
\edef\width {#2\space}\let\overlaywidth \width
\edef\height{#3\space}\let\overlayheight\height
- \ifcsname\??mpmpclip#1\endcsname
+ \ifcsname\??mpclip#1\endcsname
\meta_start_current_graphic
\xdef\MPclippath{\normalexpanded{\noexpand\ctxlua{metapost.theclippath(
"\currentMPgraphicinstance",
@@ -329,11 +329,11 @@
% currently the inheritance of backgrounds does not work and
% we might drop it anyway (too messy)
-\newbox\b_mp_variable_box
+\newbox\b_meta_variable_box
\let \currentmpvariableclass \empty
-\let \m_mp_current_variable \empty
-\let \m_mp_current_variable_template\empty
+\let \m_meta_current_variable \empty
+\let \m_meta_current_variable_template\empty
\def \meta_prepare_variable_default {\MPcolor{black}} % just to be sure we use a color but ...
\edef\meta_unknown_variable_template {\??gv:\s!unknown}
@@ -375,37 +375,37 @@
{\processcommalist[#1]\meta_prepare_variable}
\unexpanded\def\meta_prepare_variable#1%
- {\edef\m_mp_current_variable_template
+ {\edef\m_meta_current_variable_template
{\??gv\currentmpvariableclass:#1}%
- \edef\m_mp_current_variable
- {\csname\ifcsname\m_mp_current_variable_template\endcsname
- \m_mp_current_variable_template\else\meta_unknown_variable_template
+ \edef\m_meta_current_variable
+ {\csname\ifcsname\m_meta_current_variable_template\endcsname
+ \m_meta_current_variable_template\else\meta_unknown_variable_template
\fi\endcsname}%
- \ifx\m_mp_current_variable\empty
+ \ifx\m_meta_current_variable\empty
\expandafter\meta_prepare_variable_nop
\else
\expandafter\meta_prepare_variable_yes
\fi}
\def\meta_prepare_variable_nop
- {\expandafter \let\csname\m_mp_current_variable_template\endcsname\meta_prepare_variable_default}
+ {\expandafter \let\csname\m_meta_current_variable_template\endcsname\meta_prepare_variable_default}
\def\meta_prepare_variable_color
- {\expandafter\edef\csname\m_mp_current_variable_template\endcsname{\MPcolor\m_mp_current_variable}}
+ {\expandafter\edef\csname\m_meta_current_variable_template\endcsname{\MPcolor\m_meta_current_variable}}
\def\meta_prepare_variable_number
- {\expandafter\edef\csname\m_mp_current_variable_template\endcsname{\number\m_mp_current_variable}}% also accepts 0.number
+ {\expandafter\edef\csname\m_meta_current_variable_template\endcsname{\number\m_meta_current_variable}}% also accepts 0.number
\def\meta_prepare_variable_dimension
- {\expandafter\edef\csname\m_mp_current_variable_template\endcsname{\the\dimexpr\m_mp_current_variable}}
+ {\expandafter\edef\csname\m_meta_current_variable_template\endcsname{\the\dimexpr\m_meta_current_variable}}
\def\meta_prepare_variable_yes
- {\defconvertedcommand\ascii\m_mp_current_variable % otherwise problems
+ {\defconvertedcommand\ascii\m_meta_current_variable % otherwise problems
\doifcolorelse \ascii % with 2\bodyfontsize
{\meta_prepare_variable_color}
{\begingroup
- \setbox\b_mp_variable_box\hbox{\scratchdimen\m_mp_current_variable sp}%
- \ifzeropt\wd\b_mp_variable_box
+ \setbox\b_meta_variable_box\hbox{\scratchdimen\m_meta_current_variable sp}%
+ \ifzeropt\wd\b_meta_variable_box
\endgroup\meta_prepare_variable_number
\else
\endgroup\meta_prepare_variable_dimension
@@ -450,26 +450,26 @@
%D \uniqueMPgraphic{meta:hash}{gap=10pt,angle=30}
%D \stoptyping
-\newcount\c_mp_object_counter
-\newbox \b_mp_graphic
+\newcount\c_meta_object_counter
+\newbox \b_meta_graphic
% hm, isn't this already done elsewhere?
\unexpanded\def\meta_obey_box_depth
- {\setbox\b_mp_graphic\hbox\bgroup
- \raise\MPlly\box\b_mp_graphic
+ {\setbox\b_meta_graphic\hbox\bgroup
+ \raise\MPlly\box\b_meta_graphic
\egroup}
\unexpanded\def\meta_ignore_box_depth
{\normalexpanded
{\meta_obey_box_depth % hence the \unexpanded
- \wd\b_mp_graphic\the\wd\b_mp_graphic
- \ht\b_mp_graphic\the\ht\b_mp_graphic
- \dp\b_mp_graphic\the\dp\b_mp_graphic}}
+ \wd\b_meta_graphic\the\wd\b_meta_graphic
+ \ht\b_meta_graphic\the\ht\b_meta_graphic
+ \dp\b_meta_graphic\the\dp\b_meta_graphic}}
\unexpanded\def\meta_obey_box_origin
- {\setbox\b_mp_graphic\hbox\bgroup
- \hskip\MPllx\raise\MPlly\box\b_mp_graphic
+ {\setbox\b_meta_graphic\hbox\bgroup
+ \hskip\MPllx\raise\MPlly\box\b_meta_graphic
\egroup}
\unexpanded\def\obeyMPboxdepth {\let\meta_relocate_box\meta_obey_box_depth }
@@ -481,7 +481,7 @@
\unexpanded\def\placeMPgraphic % the converter also displaces so in fact we revert
{\meta_relocate_box
- \box\b_mp_graphic}
+ \box\b_meta_graphic}
\unexpanded\def\meta_reuse_box#1#2#3#4#5% space delimiting would save some tokens
{\MPllx#2\MPlly#3\MPurx#4\MPury#5%
@@ -493,9 +493,9 @@
\extendMPoverlaystamp{#2}% incl prepare
\ifcsname\??mpgraphic\overlaystamp:#1\endcsname\else
\meta_enable_include % redundant
- \global\advance\c_mp_object_counter\plusone
- \setobject{MP}{\number\c_mp_object_counter}\hbox{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
- \setxvalue{\??mpgraphic\overlaystamp:#1}{\meta_reuse_box{\number\c_mp_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
+ \global\advance\c_meta_object_counter\plusone
+ \setobject{MP}{\number\c_meta_object_counter}\hbox{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
+ \setxvalue{\??mpgraphic\overlaystamp:#1}{\meta_reuse_box{\number\c_meta_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
\fi
\getvalue{\??mpgraphic\overlaystamp:#1}%
\endgroup}
@@ -546,9 +546,9 @@
\edef\currentmpvariableclass{#1}%
\meta_prepare_variables{#2}%
\meta_enable_include % redundant
- \global\advance\c_mp_object_counter\plusone
- \setobject{MP}{\number\c_mp_object_counter}\hbox{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
- \setxvalue{\??mpgraphic#1}{\meta_reuse_box{\number\c_mp_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
+ \global\advance\c_meta_object_counter\plusone
+ \setobject{MP}{\number\c_meta_object_counter}\hbox{\meta_process_graphic{#3}}% was vbox, graphic must end up as hbox
+ \setxvalue{\??mpgraphic#1}{\meta_reuse_box{\number\c_meta_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
\getvalue{\??mpgraphic#1}%
\endgroup}
@@ -581,10 +581,10 @@
%D
%D Experimental.
-\def\m_mp_page_prefix{\doifoddpageelse oe}
+\def\m_meta_page_prefix{\doifoddpageelse oe}
\def\overlaypagestamp
- {\m_mp_page_prefix:\overlaywidth:\overlayheight:\overlaydepth:\MPcolor\overlaycolor:\MPcolor\overlaylinecolor}
+ {\m_meta_page_prefix:\overlaywidth:\overlayheight:\overlaydepth:\MPcolor\overlaycolor:\MPcolor\overlaylinecolor}
\unexpanded\def\startuniqueMPpagegraphic
{\dodoublegroupempty\meta_start_unique_page_graphic}
@@ -601,8 +601,8 @@
\def\meta_unique_page_graphic#1#2%
{\meta_begin_graphic_group{#1}%
\let\overlaystamp\overlaypagestamp
- \setupMPvariables[\m_mp_page_prefix:\currentMPgraphicname][#2]% prefix is new here
- \getvalue{\??mpgraphic\m_mp_page_prefix:\currentMPgraphicname}{}%
+ \setupMPvariables[\m_meta_page_prefix:\currentMPgraphicname][#2]% prefix is new here
+ \getvalue{\??mpgraphic\m_meta_page_prefix:\currentMPgraphicname}{}%
\meta_end_graphic_group}
%D One way of defining a stamp is:
@@ -682,12 +682,12 @@
{\dodoubleempty\dostartMPenvironment}
\def\dostartMPenvironment[#1][#2]#3\stopMPenvironment
- {\edef\m_mp_option{#1}
- \ifx\m_mp_option\s!reset
+ {\edef\m_meta_option{#1}
+ \ifx\m_meta_option\s!reset
\resetMPenvironment % reset mp toks
- \else\ifx\m_mp_option\v!global
+ \else\ifx\m_meta_option\v!global
#3% % use in main doc too
- \else\ifx\m_mp_option\!!plustoken
+ \else\ifx\m_meta_option\!!plustoken
#3% % use in main doc too
\fi\fi\fi
\ctxlua{metapost.tex.set(\!!bs\detokenize{#3}\!!es)}}
diff --git a/tex/context/base/mult-dim.mkvi b/tex/context/base/mult-dim.mkvi
index 04d391fde..0889b411e 100644
--- a/tex/context/base/mult-dim.mkvi
+++ b/tex/context/base/mult-dim.mkvi
@@ -86,13 +86,13 @@
\installcorenamespace{dimensionvalue}
-\setvalue{\??dimensionvalue\v!small }#macro#small#medium#big{\edef#macro{#small}}
-\setvalue{\??dimensionvalue\v!medium }#macro#small#medium#big{\edef#macro{#medium}}
-\setvalue{\??dimensionvalue\v!big }#macro#small#medium#big{\edef#macro{#big}}
-\setvalue{\??dimensionvalue\s!unknown}#macro#small#medium#big{\let #macro\empty}
+\setvalue{\??dimensionvalue\v!small }#value#macro#small#medium#big{\edef#macro{#small}}
+\setvalue{\??dimensionvalue\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}}
+\setvalue{\??dimensionvalue\v!big }#value#macro#small#medium#big{\edef#macro{#big}}
+\setvalue{\??dimensionvalue\s!unknown}#value#macro#small#medium#big{\edef#macro{#value}}
\unexpanded\def\assignvalue#value%
- {\csname\??dimensionvalue\ifcsname\??dimensionvalue#value\endcsname#value\else\s!unknown\fi\endcsname}
+ {\csname\??dimensionvalue\ifcsname\??dimensionvalue#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
%D \macros
%D {assignwidth}
diff --git a/tex/context/base/mult-sys.mkiv b/tex/context/base/mult-sys.mkiv
index 9f322a960..816a32d4f 100644
--- a/tex/context/base/mult-sys.mkiv
+++ b/tex/context/base/mult-sys.mkiv
@@ -439,10 +439,7 @@
\definesystemvariable {br} % sideBaR
\definesystemvariable {bx} % BackendExport
\definesystemvariable {cb} % CollectBox
-\definesystemvariable {ch} % CHaracterspacing
\definesystemvariable {ci} % CItaat
-\definesystemvariable {ck} % Character Kerning
-\definesystemvariable {cn} % CollumN
\definesystemvariable {cm} % CheMical
\definesystemvariable {co} % COmbinaties
\definesystemvariable {cp} % CliP
@@ -504,6 +501,7 @@
\definesystemvariable {ml} % MultilingualLabel
\definesystemvariable {mm} % MultilingualMath
\definesystemvariable {mt} % inline MaTh
+\definesystemvariable {mt} % multi column (!!! double usage)
\definesystemvariable {mo} % Math Options
\definesystemvariable {mp} % MetaPost
\definesystemvariable {nn} % structurenumbering
@@ -517,7 +515,6 @@
\definesystemvariable {ox} % OffsetBox
\definesystemvariable {pb} % PuBlication
\definesystemvariable {pc} % PageComment
-\definesystemvariable {pe} % PagEhandler
\definesystemvariable {ph} % ParagrapH
\definesystemvariable {pn} % PaginaNummer
\definesystemvariable {pr} % PRogrammas
@@ -540,7 +537,6 @@
\definesystemvariable {se} % SEctie
\definesystemvariable {sh} % ShapeText
\definesystemvariable {si} % SplIt
-\definesystemvariable {sl} % SmalLer
\definesystemvariable {sp} % SelecteerPapier
\definesystemvariable {st} % STickers
\definesystemvariable {sx} % Selector
@@ -549,7 +545,6 @@
\definesystemvariable {te} % TEmplate
\definesystemvariable {ti} % TabelInstellingen
\definesystemvariable {tl} % TekstLijnen
-\definesystemvariable {to} % TOlerance
\definesystemvariable {tt} % TabulaTe
\definesystemvariable {tx} % TeXtflow
\definesystemvariable {ur} % URl
@@ -560,6 +555,11 @@
\definesystemvariable {zc} % columns
\definesystemvariable {zo} % otr
+% still used but defined locally
+
+\definesystemvariable{cs} % CharacterSpacing
+\definesystemvariable{ts} % TypeScript
+
%D Next we define some language independant one letter
%D variables and keywords. We can actually make these
%D system variables.
diff --git a/tex/context/base/pack-rul.mkiv b/tex/context/base/pack-rul.mkiv
index 8248ba67a..6980f0b9d 100644
--- a/tex/context/base/pack-rul.mkiv
+++ b/tex/context/base/pack-rul.mkiv
@@ -2383,11 +2383,7 @@
\setfalse\c_framed_text_location_none
\csname\??framedtextlocation\framedtextparameter\c!location\endcsname
\resetframedtextparameter\c!location
- % removed 06/2001
- % \forgetparindent
- % added 06/2001 [see demo-bbv]
\pack_framed_text_check
- % so far
\setbox\b_framed_normal\vbox
\startboxedcontent
\hsize\localhsize
diff --git a/tex/context/base/page-brk.mkiv b/tex/context/base/page-brk.mkiv
index 244036bc9..f3bdddaed 100644
--- a/tex/context/base/page-brk.mkiv
+++ b/tex/context/base/page-brk.mkiv
@@ -48,31 +48,36 @@
\let\page_breaks_current_option \empty
\let\page_breaks_current_options\empty
+\installcorenamespace{pagebreakmethod}
+\installcorenamespace{pagebreaks}
+
\def\page_breaks_handle#1%
{\edef\page_breaks_current_options{#1}% handy for tracing
\processcommacommand[\page_breaks_current_options]\page_breaks_handle_indeed}
\def\page_breaks_handle_indeed#1%
{\edef\page_breaks_current_option{#1}% can be used in handler
- \ifcsname\??pe:\page_breaks_current_option\endcsname
- \csname\??pe:\page_breaks_current_option\endcsname
- \else\ifcsname\??pe::\page_breaks_current_option\endcsname
- \expandafter\page_breaks_handle\csname\??pe::\page_breaks_current_option\endcsname
+ \ifcsname\??pagebreakmethod\page_breaks_current_option\endcsname
+ \csname\??pagebreakmethod\page_breaks_current_option\endcsname
+ \else\ifcsname\??pagebreaks\page_breaks_current_option\endcsname
+ \expandafter\page_breaks_handle\csname\??pagebreaks\page_breaks_current_option\endcsname
\else
- \csname\??pe:\s!unknown\endcsname
+ \csname\??pagebreakmethod\s!unknown\endcsname
\fi\fi}
\def\page_breaks_handle_direct#1%
- {\csname\??pe:#1\endcsname}
+ {\csname\??pagebreakmethod#1\endcsname}
+
+\unexpanded\def\installpagebreakmethod#1#2% low level definer
+ {\setvalue{\??pagebreakmethod#1}{#2}}
-\def\installpagebreakhandler#1#2% low level definer
- {\setvalue{\??pe:#1}{#2}}
+\let\installpagebreakhandler\installpagebreakmethod % will go
\unexpanded\def\definepagebreak
{\dodoubleargument\page_breaks_define}
\def\page_breaks_define[#1][#2]%
- {\setvalue{\??pe::#1}{#2}}
+ {\setvalue{\??pagebreaks#1}{#2}}
\unexpanded\def\pagebreak
{\dosingleempty\page_breaks_process}
@@ -115,19 +120,19 @@
\def\disablepagebreaks % to be used grouped !
{\def\page_breaks_process[##1]{}}
-\installpagebreakhandler \s!dummy
+\installpagebreakmethod \s!dummy
{\page_otr_flush_all_floats
\gotonextpage
\page_otr_insert_dummy_page}
-\installpagebreakhandler \v!frame
+\installpagebreakmethod \v!frame
{\page
\begingroup
\showframe
\page[\v!empty]
\endgroup}
-\installpagebreakhandler \s!unknown
+\installpagebreakmethod \s!unknown
{\doifinstringelse{+}\page_breaks_current_option
{\page_otr_flush_all_floats
\gotonextpage
@@ -143,17 +148,17 @@
\fi}}
{}}}
-\installpagebreakhandler \s!default
+\installpagebreakmethod \s!default
{} % do nothing if empty
-\installpagebreakhandler \v!reset
+\installpagebreakmethod \v!reset
{% better not: \global\pageornamentstate\zerocount
\resetpagebreak}
-\installpagebreakhandler \v!disable
+\installpagebreakmethod \v!disable
{\global\setfalse\c_page_breaks_enabled}
-\installpagebreakhandler \v!yes
+\installpagebreakmethod \v!yes
{\ifconditional\c_page_breaks_enabled
\page_otr_flush_all_floats
\gotonextpage
@@ -162,22 +167,22 @@
\fi
\fi}
-\installpagebreakhandler \v!makeup
+\installpagebreakmethod \v!makeup
{\ifconditional\c_page_breaks_enabled
\page_otr_fill_and_eject_page
\fi}
-\installpagebreakhandler \v!blank
+\installpagebreakmethod \v!blank
{\ifcase\pageornamentstate
\global\pageornamentstate\plusone
\fi}
-\installpagebreakhandler \v!no
+\installpagebreakmethod \v!no
{\ifconditional\c_page_breaks_enabled
\dosomebreak\nobreak
\fi}
-\installpagebreakhandler \v!preference
+\installpagebreakmethod \v!preference
{\ifconditional\c_page_breaks_enabled
\ifinsidecolumns % this will move to MUL
\dosomebreak\goodbreak
@@ -186,7 +191,7 @@
\fi
\fi}
-\installpagebreakhandler \v!bigpreference
+\installpagebreakmethod \v!bigpreference
{\ifconditional\c_page_breaks_enabled
\ifinsidecolumns % this will move to MUL
\dosomebreak\goodbreak
@@ -195,25 +200,25 @@
\fi
\fi}
-% \installpagebreakhandler \v!empty {} % defined in page-txt.mkiv
-% \installpagebreakhandler \v!header{} % defined in page-txt.mkiv
-% \installpagebreakhandler \v!footer{} % defined in page-txt.mkiv
-% \installpagebreakhandler \v!left {} % defined in page-txt.mkiv
+% \installpagebreakmethod \v!empty {} % defined in page-txt.mkiv
+% \installpagebreakmethod \v!header{} % defined in page-txt.mkiv
+% \installpagebreakmethod \v!footer{} % defined in page-txt.mkiv
+% \installpagebreakmethod \v!left {} % defined in page-txt.mkiv
-\installpagebreakhandler \v!right
+\installpagebreakmethod \v!right
{\page_otr_flush_all_floats
\gotonextpageX % will become \gotonextpage
\doifbothsidesoverruled{}{}{\resetcurrentstructuremarkswithpage\page_otr_insert_dummy_page}}
-\installpagebreakhandler \v!even
+\installpagebreakmethod \v!even
{\page
\doifoddpageelse{\resetcurrentstructuremarkswithpage\page_otr_insert_dummy_page}\donothing}
-\installpagebreakhandler \v!odd
+\installpagebreakmethod \v!odd
{\page
\doifoddpageelse\donothing{\resetcurrentstructuremarkswithpage\page_otr_insert_dummy_page}}
-\installpagebreakhandler \v!quadruple % not yet ok inside columnsets
+\installpagebreakmethod \v!quadruple % not yet ok inside columnsets
{\ifdoublesided
\ifnum\numexpr\realpageno/4\relax=\numexpr\realpageno/2\relax\else
\page_breaks_handle_direct\v!yes
@@ -222,7 +227,7 @@
\fi
\fi}
-\installpagebreakhandler \v!last
+\installpagebreakmethod \v!last
{\page_otr_flush_all_floats
\gotonextpageX % will become \gotonextpage
\relax
@@ -233,7 +238,7 @@
\page_otr_insert_dummy_page}%
\filluparrangedpages}
-\installpagebreakhandler \v!lastpage % handy for backpage preceded by empty pages
+\installpagebreakmethod \v!lastpage % handy for backpage preceded by empty pages
{\page_breaks_handle_direct\v!yes
\ifdoublesided
\page_breaks_handle_direct\v!left
@@ -241,11 +246,14 @@
\page_breaks_handle_direct\v!empty
\fi}
-\installpagebreakhandler \v!start {\global\settrue \c_otr_shipout_enabled}
-\installpagebreakhandler \v!stop {\global\setfalse\c_otr_shipout_enabled}
+\installpagebreakmethod \v!start {\global\settrue \c_otr_shipout_enabled}
+\installpagebreakmethod \v!stop {\global\setfalse\c_otr_shipout_enabled}
% Column breaks.
+\installcorenamespace{columnbreakmethod}
+\installcorenamespace{columnbreaks}
+
\newtoks\everybeforecolumnbreak
\newtoks\everyaftercolumnbreak
@@ -258,25 +266,27 @@
\def\page_breaks_columns_handle_indeed#1%
{\edef\page_breaks_columns_current_option{#1}%
- \ifcsname\??cn:\OTRidentifier:\page_breaks_columns_current_option\endcsname
- \csname\??cn:\OTRidentifier:\page_breaks_columns_current_option\endcsname
- \else\ifcsname\??cn::\page_breaks_columns_current_option\endcsname
- \expandafter\csname\page_breaks_columns_handle\??cn::\page_breaks_columns_current_option\endcsname
+ \ifcsname\??columnbreakmethod\OTRidentifier:\page_breaks_columns_current_option\endcsname
+ \csname\??columnbreakmethod\OTRidentifier:\page_breaks_columns_current_option\endcsname
+ \else\ifcsname\??columnbreaks\page_breaks_columns_current_option\endcsname
+ \expandafter\csname\page_breaks_columns_handle\??columnbreaks\page_breaks_columns_current_option\endcsname
\else
- \csname\??cn:\OTRidentifier:\s!unknown\endcsname
+ \csname\??columnbreakmethod\OTRidentifier:\s!unknown\endcsname
\fi\fi}
\def\page_breaks_columns_handle_direct#1%
- {\csname\??cn:\OTRidentifier:#1\endcsname}
+ {\csname\??columnbreakmethod\OTRidentifier:#1\endcsname}
+
+\unexpanded\def\installcolumnbreakmethod#1#2#3% #1=otr-id #2=tag #3=action
+ {\setvalue{\??columnbreakmethod#1:#2}{#3}}
-\def\installcolumnbreakhandler#1#2#3% #1=otr-id #2=tag #3=action
- {\setvalue{\??cn:#1:#2}{#3}}
+\let\installcolumnbreakhandler\installcolumnbreakmethod % will go
\unexpanded\def\definecolumnbreak
{\dodoubleargument\page_break_columns_define}
\def\page_break_columns_define[#1][#2]%
- {\setvalue{\??cn::#1}{#2}}
+ {\setvalue{\??columnbreaks#1}{#2}}
\unexpanded\def\columnbreak
{\dosingleempty\page_breaks_columns_process}
diff --git a/tex/context/base/page-imp.mkiv b/tex/context/base/page-imp.mkiv
index f38033b36..626d9042f 100644
--- a/tex/context/base/page-imp.mkiv
+++ b/tex/context/base/page-imp.mkiv
@@ -51,7 +51,7 @@
% \def\pagestoshipout{1,3,5}
% \stoptypen
-\installcorenamespace{layouthandler}
+\installcorenamespace{shipoutmethod}
\installcorenamespace{layoutarranger}
\installcorenamespace{layoutarrangeoption}
@@ -65,27 +65,29 @@
\setnewconstant\shipoutfinalizemethod\plusone % this will be default (we will have two finalizers)
-\def\installpagehandler#1#2% % a handler takes one argument: something to be boxed
- {\setgvalue{\??layouthandler#1}##1{#2{##1}}} % and shipped out (don't depend on the exact package)
+\unexpanded\def\installshipoutmethod#1#2% % a handler takes one argument: something to be boxed
+ {\setgvalue{\??shipoutmethod#1}##1{#2{##1}}} % and shipped out (don't depend on the exact package)
+
+\let\installpagehandler\installshipoutmethod % will go
\unexpanded\def\invokepagehandler#1%
- {\expandcheckedcsname{\??layouthandler}{#1}\v!normal}
+ {\expandcheckedcsname{\??shipoutmethod}{#1}\v!normal}
\def\page_shipouts_handle
- {\csname\??layouthandler\ifcsname\??layouthandler\v_page_target_method\endcsname
+ {\csname\??shipoutmethod\ifcsname\??shipoutmethod\v_page_target_method\endcsname
\v_page_target_method
\else
\v!none
\fi\endcsname}
-\installpagehandler\v!normal
+\installshipoutmethod \v!normal
{\ifarrangingpages
\expandafter\page_shipouts_arrange
\else
\expandafter\page_shipouts_normal
\fi}
-\installpagehandler\v!none
+\installshipoutmethod \v!none
{\page_shipouts_ignore}
\def\page_boxes_shipout#1% or: \page_shipouts_apply
diff --git a/tex/context/base/page-ini.mkiv b/tex/context/base/page-ini.mkiv
index 1550b1405..757302518 100644
--- a/tex/context/base/page-ini.mkiv
+++ b/tex/context/base/page-ini.mkiv
@@ -424,9 +424,7 @@
\box\pagebox
\egroup \ifconditional\c_page_boxes_save_page_body \copy\b_page_boxes_saved_page_body \fi}
-\appendtoks \restoreouterspacing \to \everybeforepagebody
\appendtoks \restoreglobalbodyfont \to \everybeforepagebody
-%appendtoks \restoreouterspacing \to \everybeforepagebody
\ifdefined\nestednewbox \else \newbox\nestednextbox \fi % hm, still needed?
diff --git a/tex/context/base/page-lay.mkiv b/tex/context/base/page-lay.mkiv
index e7a4f49d2..525017954 100644
--- a/tex/context/base/page-lay.mkiv
+++ b/tex/context/base/page-lay.mkiv
@@ -566,8 +566,8 @@
\fi
-\ifdefined\setups \else \unexpanded\def\setups[#1]{\setdefaultpenalties} \fi % still needed?
-\ifdefined\docheckgridsnapping \else \let\docheckgridsnapping\relax \fi
+\ifdefined\setups \else \unexpanded\def\setups[#1]{\setdefaultpenalties} \fi % still needed?
+\ifdefined\synchronizegridsnapping \else \let\synchronizegridsnapping\relax \fi
\let\p_page_layouts_width \empty
\let\p_page_layouts_height\empty
@@ -585,10 +585,10 @@
\global\backspace \layoutparameter\c!backspace
\global\topspace \layoutparameter\c!topspace
\page_layouts_set_dimensions
- \docheckgridsnapping
+ \synchronizegridsnapping
\doprocesslocalsetups{\layoutparameter\c!setups}% depends on gridsnapping !
- \simplesetupwhitespace
- \simplesetupblank
+ \synchronizewhitespace
+ \synchronizeblank
\setupinterlinespace[\v!reset]% \synchronizegloballinespecs
\global\cutspace\layoutparameter\c!cutspace\relax
\edef\p_page_layouts_width{\layoutparameter\c!width}%
diff --git a/tex/context/base/page-mul.mkiv b/tex/context/base/page-mul.mkiv
index df8d38ee6..0a0ba5be4 100644
--- a/tex/context/base/page-mul.mkiv
+++ b/tex/context/base/page-mul.mkiv
@@ -1614,17 +1614,12 @@
\stretchcolumnsfalse
\inheritcolumnstrue
\doifsomething\@@klalign{\expanded{\setupalign[\@@klalign]}}%
- \nofcolumns=\@@kln
- %
- % probably more is needed, and how about nesting save's
- %
- \saveouterspacing
- %
+ \nofcolumns\@@kln
\edef\fixedcolumnheight{\@@klheight}%
\edef\minbalancetoplines{\@@klntop}%
\setuptolerance[\@@kltolerance]% %% \startcolumns
\setupblank[\@@klblank]%
- \ifdim\ctxparskip>\zeropoint\relax
+ \ifdim\s_spac_whitespace_parskip>\zeropoint\relax
\setupwhitespace[\@@klblank]%
\fi
\unexpanded\def\stopcolumns
@@ -1636,11 +1631,11 @@
\beginmulticolumns
\fi
\fi}
-
-\installcolumnbreakhandler {MUL} \v!preference
+
+\installcolumnbreakmethod {MUL} \v!preference
{\goodbreak}
-\installcolumnbreakhandler {MUL} \v!yes
+\installcolumnbreakmethod {MUL} \v!yes
{\par % todo: since
{\testrulewidth\zeropoint\ruledvskip\textheight} % we misuse a
\penalty-200 % side effect
diff --git a/tex/context/base/page-run.mkiv b/tex/context/base/page-run.mkiv
index da3a05986..72c02e4f8 100644
--- a/tex/context/base/page-run.mkiv
+++ b/tex/context/base/page-run.mkiv
@@ -236,7 +236,7 @@ function commands.showlayout(options)
end
\stopluacode
-\gdef\doshowframe[#1][#2]%
+\gdef\page_layouts_show_frame[#1][#2]%
{\ifsecondargument
\setupbackgrounds
[\v!page]
@@ -269,15 +269,15 @@ end
\setupbackgrounds
[\c!state=\v!repeat]}
-\gdef\doshowsetups[#1]%
+\gdef\page_layouts_show_setups[#1]%
{\ctxcommand{showlayoutvariables("#1")}}
-\gdef\doshowlayout[#1]%
+\gdef\page_layouts_show_layout[#1]%
{\ctxcommand{showlayout("#1")}}
-\unexpanded\gdef\showframe {\dodoubleempty\doshowframe}
-\unexpanded\gdef\showsetups{\dodoubleempty\doshowsetups}
-\unexpanded\gdef\showlayout{\dodoubleempty\doshowlayout}
+\unexpanded\gdef\showframe {\dodoubleempty\page_layouts_show_frame }
+\unexpanded\gdef\showsetups{\dosingleempty\page_layouts_show_setups}
+\unexpanded\gdef\showlayout{\dosingleempty\page_layouts_show_layout}
\unexpanded\gdef\showmargins
{\starttabulate
diff --git a/tex/context/base/page-set.mkiv b/tex/context/base/page-set.mkiv
index e46c94006..45f6f7660 100644
--- a/tex/context/base/page-set.mkiv
+++ b/tex/context/base/page-set.mkiv
@@ -544,8 +544,6 @@
\egroup
\fi}
-\definesystemvariable {mc}
-\definesystemvariable {mt}
\definesystemconstant {colset}
\definetwopasslist\s!colset
@@ -615,7 +613,7 @@
\def\showbreaks
{\let\OTRSETcolumnseparator\doOTRSETcolumnseparator}
-% \installcolumnbreakhandler {SET} \v!ja
+% \installcolumnbreakmethod {SET} \v!ja
% {% hmmm:
% \ifhmode
% \bgroup
@@ -630,14 +628,14 @@
% \page_otr_eject_page
% \OTRSETsynchronizehsize} % no \OTRSETsethsize, can be mid smaller (like tabulate)
%
-% \installcolumnbreakhandler {SET} \v!forceer
+% \installcolumnbreakmethod {SET} \v!forceer
% {\OTRSETgotocolumn[\v!forceer]}
-% \installcolumnbreakhandler {SET} \v!eerste
+% \installcolumnbreakmethod {SET} \v!eerste
% {\OTRSETgotocolumn[\v!eerste]}
-% \installcolumnbreakhandler {SET} \v!laatste
+% \installcolumnbreakmethod {SET} \v!laatste
% {\OTRSETgotocolumn[\v!laatste]}
%
-% \installcolumnbreakhandler {SET} \v!pagina
+% \installcolumnbreakmethod {SET} \v!pagina
% {\simplepagebreak % \flushnotes \executepagebreakhandler\v!ja
% \ifnum\mofcolumns>\plusone
% \OTRSETgotocolumn[\v!laatste,\v!forceer]%
@@ -653,7 +651,7 @@
\egroup
\fi}
-\installcolumnbreakhandler {SET} \v!local
+\installcolumnbreakmethod {SET} \v!local
{\OTRSETcolumnhbreak
\page_otr_flush_all_floats
\page_otr_eject_page
@@ -667,7 +665,7 @@
% stay there (basically such a gap is a small empty page
% then).
-\installcolumnbreakhandler {SET} \v!yes
+\installcolumnbreakmethod {SET} \v!yes
{\OTRSETcolumnhbreak
\edef\savedmofcolumns{\the\mofcolumns}%
\edef\savedrealpageno{\the\realpageno}%
@@ -685,10 +683,10 @@
\fi}%
\OTRSETsynchronizehsize}
-\installcolumnbreakhandler {SET} \s!unknown
+\installcolumnbreakmethod {SET} \s!unknown
{\expanded{\OTRSETgotocolumn[\@@columnspecification]}}
-\installcolumnbreakhandler {SET} \v!page
+\installcolumnbreakmethod {SET} \v!page
{\page_otr_fill_and_eject_page
\OTRSETgotonextpage}
@@ -2051,9 +2049,9 @@
\setbox\scratchbox\vbox % kan beter !
{\forgetall
\iftopofinsert
- \ifdim\OTRSETtopoffset=\zeropoint
- \moveongrid[\v!top]
- \fi
+ %\ifdim\OTRSETtopoffset=\zeropoint
+ % \moveongrid[\v!top]
+ %\fi
\else
\betweenfloatblanko % inserts can't look back
\fi
diff --git a/tex/context/base/page-sid.mkiv b/tex/context/base/page-sid.mkiv
index 2ff15bb37..f95cc0bb3 100644
--- a/tex/context/base/page-sid.mkiv
+++ b/tex/context/base/page-sid.mkiv
@@ -649,7 +649,7 @@
\else
\page_sides_check_floats_reset
\fi
- \parskip\ctxparskip}
+ \parskip\s_spac_whitespace_parskip}
\let\page_sides_check_floats\page_sides_check_floats_indeed
diff --git a/tex/context/base/page-txt.mkvi b/tex/context/base/page-txt.mkvi
index d2d996dea..10192a028 100644
--- a/tex/context/base/page-txt.mkvi
+++ b/tex/context/base/page-txt.mkvi
@@ -659,17 +659,17 @@
%D A few more page breakers:
-\installpagebreakhandler \v!empty
+\installpagebreakmethod \v!empty
{\page_otr_flush_all_floats
\gotonextpage
\doifnot{\namedlayoutelementparameter\v!header\c!state}\v!stop{\setuplayoutelement[\v!header][\c!state=\v!empty]}%
\doifnot{\namedlayoutelementparameter\v!footer\c!state}\v!stop{\setuplayoutelement[\v!footer][\c!state=\v!empty]}%
\page_otr_insert_dummy_page}
-\installpagebreakhandler \v!header
+\installpagebreakmethod \v!header
{\doifnot{\namedlayoutelementparameter\v!header\c!state}\v!stop{\setuplayoutelement[\c!state=\v!empty]}}
-\installpagebreakhandler \v!footer
+\installpagebreakmethod \v!footer
{\doifnot{\namedlayoutelementparameter\v!footer\c!state}\v!stop{\setuplayoutelement[\c!state=\v!empty]}}
%D While the header and footer lines are moved away from the
diff --git a/tex/context/base/s-map-10.mkiv b/tex/context/base/s-map-10.mkiv
index 169a0d4b3..8f6bff5bd 100644
--- a/tex/context/base/s-map-10.mkiv
+++ b/tex/context/base/s-map-10.mkiv
@@ -443,7 +443,7 @@
\page
}
-\installpagebreakhandler{last}{}
+\installpagebreakmethod{last}{}
%%% `logos' %%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/tex/context/base/scrn-but.mkvi b/tex/context/base/scrn-but.mkvi
index 24a0f8bcf..557615738 100644
--- a/tex/context/base/scrn-but.mkvi
+++ b/tex/context/base/scrn-but.mkvi
@@ -600,19 +600,19 @@
\newcount \c_scrn_menu_position
\newconstant \c_scrn_menu_page_mode % 0=notfound 1=found 2=currentpage
\newconditional\c_scrn_menu_positioning
-\newtoks \t_scrn_menu_mp_data
+\newtoks \t_scrn_menu_meta_data
-\def\scrn_menu_button_mp_template
+\def\scrn_menu_button_meta_template
{\askedinteractionmenulocation _menu_button(%
\number\c_scrn_menu_position,%
\number\c_scrn_menu_page_mode,%
\MPpos{\askedinteractionmenulocation:\number\c_scrn_menu_position}%
);}
-\def\MPmenubuttons#1{\the\t_scrn_menu_mp_data}
+\def\MPmenubuttons#1{\the\t_scrn_menu_meta_data}
\appendtoks
- \global\t_scrn_menu_mp_data\emptytoks
+ \global\t_scrn_menu_meta_data\emptytoks
\to \everyshipout
\def\scrn_menu_whole_position % cannot happen in previous due to align
@@ -695,8 +695,8 @@
{\c_scrn_menu_page_mode\ifnum\currentreferencerealpage=\realpageno\plusone\else\plustwo\fi}%
{\c_scrn_menu_page_mode\plustwo}%
\doglobal\appendetoks
- \scrn_menu_button_mp_template
- \to \t_scrn_menu_mp_data
+ \scrn_menu_button_meta_template
+ \to \t_scrn_menu_meta_data
\hpos
{\askedinteractionmenulocation:\number\c_scrn_menu_position}%
{\scrn_button_make
diff --git a/tex/context/base/spac-def.mkiv b/tex/context/base/spac-def.mkiv
index ae08f4d6e..0444fa9ef 100644
--- a/tex/context/base/spac-def.mkiv
+++ b/tex/context/base/spac-def.mkiv
@@ -17,35 +17,28 @@
\unprotect
-\def\forgeteverypar
+\unexpanded\def\forgeteverypar
{\everypar{\the\neverypar}}
% worth trying:
%
-% \def\forgeteverypar
+% \unexpanded\def\forgeteverypar
% {\everypar\neverypar}
-\def\forgetparindent
- {\forgeteverypar
- \settrue\c_spac_indentation_indent_first % recently added
- \ctxparindent\zeropoint
- \parindent\zeropoint
- \let\currentindentation\v!none}
-
-\def\forgetparskip
- {\ctxparskip\zeropoint
+\unexpanded\def\forgetparskip
+ {\s_spac_whitespace_parskip\zeropoint
\parskip\zeropoint
- \let\currentwhitespace\v!none}
+ \let\v_spac_whitespace_current\v!none}
-\def\forgetbothskips
+\unexpanded\def\forgetbothskips
{\leftskip\zeropoint
\rightskip\zeropoint
\relax}
-\def\forgethorizontalstretch
+\unexpanded\def\forgethorizontalstretch
{\emergencystretch\zeropoint}
-\def\forgetverticalstretch
+\unexpanded\def\forgetverticalstretch
{\spacing\plusone}
\newif\ifforgotten % rather good signal for inner
@@ -69,8 +62,8 @@
\appendtoks \settopskip \to \everybodyfont % factors set in \forgetverticalstretch
\appendtoks \setmaxdepth \to \everybodyfont % factors set in \forgetverticalstretch
\appendtoks \synchronizeindenting \to \everybodyfont
-\appendtoks \simplesetupblank \to \everybodyfont
-\appendtoks \simplesetupwhitespace \to \everybodyfont
+\appendtoks \synchronizeblank \to \everybodyfont
+\appendtoks \synchronizewhitespace \to \everybodyfont
\appendtoks \synchronizespacecodes \to \everybodyfont % not needed, frozen factors
\appendtoks \setrelativeinterlinespace \to \everybodyfont
diff --git a/tex/context/base/spac-hor.mkiv b/tex/context/base/spac-hor.mkiv
index 4ef39b67a..1e2f07465 100644
--- a/tex/context/base/spac-hor.mkiv
+++ b/tex/context/base/spac-hor.mkiv
@@ -17,11 +17,10 @@
\registerctxluafile{spac-hor}{1.001}
-\let\currentindentation\empty % amount/keyword
-\let\currentindenting \empty % method
+\let\v_spac_indentation_current\empty % amount/keyword
-\newdimen \ctxparindent
-\parindent\ctxparindent % for the show
+\newdimen \d_spac_indentation_par
+\parindent\d_spac_indentation_par % for the show
\newconditional\c_spac_indentation_indent_first \settrue\c_spac_indentation_indent_first
\newconstant \c_spac_indentation_toggle_state
@@ -29,29 +28,31 @@
%D After a blank or comparable situation (left side floats) we
%D need to check if the next paragraph has to be indented.
-\def\presetindentation
+\unexpanded\def\presetindentation
{\doifoutervmode{\ifconditional\c_spac_indentation_indent_first\else\spac_indentation_variant_no\fi}}
\unexpanded\def\setupindenting
{\doifnextoptionalelse\spac_indentation_setup_options\spac_indentation_setup_size}
\def\spac_indentation_setup_size
- {\assigndimension\currentindentation\ctxparindent{1\emwidth}{1.5\emwidth}{2\emwidth}}
+ {\assigndimension\v_spac_indentation_current\d_spac_indentation_par{1\emwidth}{1.5\emwidth}{2\emwidth}}
\let\synchronizeindenting\spac_indentation_setup_size
+\let\m_spac_indentation_options\empty
+
\def\spac_indentation_setup_options[#1]%
- {\edef\currentindenting{#1}% comma separated list
- \ifx\currentindenting\empty \else
+ {\edef\m_spac_indentation_options{#1}% comma separated list
+ \ifx\m_spac_indentation_options\empty \else
\spac_indentation_setup_indeed
\fi}
\def\spac_indentation_setup_indeed
{% not here: \settrue\c_spac_indentation_indent_first
- % not here: \parindent\ctxparindent
+ % not here: \parindent\d_spac_indentation_par
% not here: \c_spac_indentation_toggle_state\zerocount
- \processcommacommand[\currentindenting]\spac_indentation_apply_step_one % catch small, medium, etc
- \processcommacommand[\currentindenting]\spac_indentation_apply_step_two % catch rest
+ \processcommacommand[\m_spac_indentation_options]\spac_indentation_apply_step_one % catch small, medium, etc
+ \processcommacommand[\m_spac_indentation_options]\spac_indentation_apply_step_two % catch rest
\ifzeropt\parindent\else
\doifemptytoks\everypar\spac_indentation_set_everypar
\fi
@@ -64,17 +65,17 @@
{\everypar{\checkindentation}}
\def\spac_indentation_apply_step_one#1%
- {\ifcsname\??indenting#1\endcsname
+ {\ifcsname\??indentingmethod#1\endcsname
% case two
\else
- \edef\currentindentation{#1}% single entry in list
- \let\normalindentation\currentindentation
+ \edef\v_spac_indentation_current{#1}% single entry in list
+ \let\normalindentation\v_spac_indentation_current
\spac_indentation_setup_size
\fi}
\def\spac_indentation_apply_step_two#1%
- {\ifcsname\??indenting#1\endcsname
- \csname\??indenting#1\endcsname
+ {\ifcsname\??indentingmethod#1\endcsname
+ \csname\??indentingmethod#1\endcsname
\else
% case one
\fi}
@@ -84,47 +85,47 @@
% use \noindentation to suppress next indentation
-\installcorenamespace{indenting}
+\installcorenamespace{indentingmethod}
-\unexpanded\def\defineindentingmethod[#1]#2%
- {\setvalue{\??indenting#1}{#2}}
+\unexpanded\def\installindentingmethod#1#2%
+ {\setvalue{\??indentingmethod#1}{#2}}
-\defineindentingmethod [\v!no] {\parindent\zeropoint}% was: \ctxparindent\noindent}
-\defineindentingmethod [\v!not] {\parindent\zeropoint}% was: \ctxparindent\noindent}
+\installindentingmethod \v!no {\parindent\zeropoint}
+\installindentingmethod \v!not {\parindent\zeropoint}
-\defineindentingmethod [\v!first] {\settrue\c_spac_indentation_indent_first}
-\defineindentingmethod [\v!next] {\setfalse\c_spac_indentation_indent_first}
+\installindentingmethod \v!first {\settrue\c_spac_indentation_indent_first}
+\installindentingmethod \v!next {\setfalse\c_spac_indentation_indent_first}
-\defineindentingmethod [\v!yes] {\parindent\ctxparindent\relax} % no \indent !
-\defineindentingmethod [\v!always] {\parindent\ctxparindent\relax} % no \indent !
+\installindentingmethod \v!yes {\parindent\d_spac_indentation_par\relax} % not \indent !
+\installindentingmethod \v!always{\parindent\d_spac_indentation_par\relax} % not \indent !
-\defineindentingmethod [\v!never] {\parindent\zeropoint\relax % no \indent !
- \c_spac_indentation_toggle_state\zerocount}
+\installindentingmethod \v!never {\parindent\zeropoint\relax % no \indent !
+ \c_spac_indentation_toggle_state\zerocount}
-\defineindentingmethod [\v!odd] {\c_spac_indentation_toggle_state\plusone}
-\defineindentingmethod [\v!even] {\c_spac_indentation_toggle_state\plustwo}
+\installindentingmethod \v!odd {\c_spac_indentation_toggle_state\plusone}
+\installindentingmethod \v!even {\c_spac_indentation_toggle_state\plustwo}
-\defineindentingmethod [\v!normal] {\ifx\normalindentation\empty\else
- \let\currentindentation\normalindentation
- \simplesetupindenting
- \fi}
+\installindentingmethod \v!normal{\ifx\normalindentation\empty\else
+ \let\v_spac_indentation_current\normalindentation
+ \simplesetupindenting
+ \fi}
-\defineindentingmethod [\v!reset] {\settrue\c_spac_indentation_indent_first
- \parindent\zeropoint
- \c_spac_indentation_toggle_state\zerocount}
+\installindentingmethod \v!reset {\settrue\c_spac_indentation_indent_first
+ \parindent\zeropoint
+ \c_spac_indentation_toggle_state\zerocount}
-\defineindentingmethod [\v!toggle] {\parindent\ifdim\parindent=\zeropoint
- \ctxparindent
- \else
- \zeropoint
- \fi\relax}
+\installindentingmethod \v!toggle{\parindent\ifdim\parindent=\zeropoint
+ \d_spac_indentation_par
+ \else
+ \zeropoint
+ \fi\relax}
\unexpanded\def\noindenting{\indenting[\v!no, \v!next ]}
\unexpanded\def\doindenting{\indenting[\v!yes,\v!first]}
%D Here come the handlers (still rather messy ... we need states).
-\newif\ifindentation \indentationtrue % documenteren, naar buiten
+\newif\ifindentation \indentationtrue % will become a mode
\let\checkindentation\relax
@@ -277,7 +278,17 @@
%D \input tufte \startformula a = b \stopformula
%D \stoptyping
-\def\softbreak
+% maybe an everyforgetparindent
+
+\unexpanded\def\forgetparindent
+ {\settrue\c_spac_indentation_indent_first % recently added
+ \d_spac_indentation_par\zeropoint
+ \parindent\zeropoint
+ \let\v_spac_indentation_current\v!none}
+
+%D Helper:
+
+\unexpanded\def\softbreak
{\relax\ifhmode\hskip\parfillskip\break\fi}
%D \macros
@@ -289,7 +300,7 @@
%D Hm ... todo:
-\installcorenamespace{spacecodemethods}
+\installcorenamespace{spacecodemethod}
\sfcode`\)=\zerocount
\sfcode`\'=\zerocount
@@ -309,18 +320,18 @@
\unexpanded\def\newfrenchspacing{\spac_spacecodes_set_fixed{1050}}
\unexpanded\def\nonfrenchspacing{\spac_spacecodes_set_stretch}
-\unexpanded\def\definespacingmethod[#1]#2{\setvalue{\??spacecodemethods#1}{#2}}
+\unexpanded\def\installspacingmethod#1#2{\setvalue{\??spacecodemethod#1}{#2}}
-\definespacingmethod[\empty] {} % keep values
-\definespacingmethod[\v!fixed] {\frenchspacing } % equal spaces everywhere
-\definespacingmethod[\v!packed]{\newfrenchspacing} % slighly more after punctuation
-\definespacingmethod[\v!broad ]{\nonfrenchspacing} % more depending on what punctuation
+\installspacingmethod \empty {} % keep values
+\installspacingmethod \v!fixed {\frenchspacing } % equal spaces everywhere
+\installspacingmethod \v!packed {\newfrenchspacing} % slighly more after punctuation
+\installspacingmethod \v!broad {\nonfrenchspacing} % more depending on what punctuation
\unexpanded\def\setupspacing
{\doifnextoptionalelse\spac_spacecodes_setup_yes\spac_spacecodes_setup_nop}
\def\spac_spacecodes_setup_yes[#1]%
- {\csname\??spacecodemethods#1\endcsname
+ {\csname\??spacecodemethod#1\endcsname
\updateraggedskips} % not needed, as sf codes are static
\def\spac_spacecodes_setup_nop
@@ -370,9 +381,9 @@
\letcatcodecommand \ctxcatcodes \tildeasciicode \nonbreakablespace % overloaded later
-\def\space { }
-\def\removelastspace{\ifhmode\unskip\fi}
-\def\nospace {\removelastspace\ignorespaces}
+ \def\space { }
+\unexpanded\def\removelastspace{\ifhmode\unskip\fi}
+\unexpanded\def\nospace {\removelastspace\ignorespaces}
\ifdefined\softhyphen \else \let\softhyphen\- \fi
@@ -389,7 +400,7 @@
{\setbox\scratchbox\hbox{\mathortext{0}{0}}%
\hskip\wd\scratchbox\relax}
-\def\fixedspaces
+\unexpanded\def\fixedspaces
{\letcatcodecommand \ctxcatcodes \tildeasciicode \fixedspace}
\appendtoks
@@ -406,7 +417,7 @@
{\ifnum\lastnodetype=\gluenodecode
\unskip \expandafter\spac_helpers_remove_unwantedspace
\fi}
-
+
% \startbuffer
% \startlines \tt \fixedspaces
% 0~1~~2~~~3~~~~4~~~~~5
@@ -431,7 +442,7 @@
%D A couple of plain macros:
-\ifx\thinspace\undefined
+\ifdefined\thinspace \else
\def\thinspace {\kern .16667\emwidth}
\def\negthinspace{\kern-.16667\emwidth}
@@ -439,7 +450,7 @@
\fi
-\ifx\quad\undefined
+\ifdefined\quad \else
\def\enskip{\hskip.5\emwidth}
\def\quad {\hskip \emwidth}
@@ -455,242 +466,210 @@
% Bovendien definieren we enkele extra \fill's:
-\def\hfilll{\hskip\zeropoint\!!plus1filll\relax}
-\def\vfilll{\vskip\zeropoint\!!plus1filll\relax}
-
-% De onderstaande hulpmacro's moeten nog eens instelbaar worden
-% gemaakt.
+\unexpanded\def\hfilll{\hskip\zeropoint\!!plus1filll\relax}
+\unexpanded\def\vfilll{\vskip\zeropoint\!!plus1filll\relax}
-\def\tfskipsize{1em\relax}
-\def\tfkernsize{1ex\relax}
+\unexpanded\def\tfskip {\begingroup\tf\hskip\emwidth\endgroup}
+\unexpanded\def\dotfskip#1{\begingroup\tf\hskip #1\endgroup} % used elsewhere
-\def\tfskip{\dotfskip\tfskipsize}
-\def\tfkern{\dotfkern\tfkernsize}
-
-\def\dotfskip#1{{\tf\hskip#1}}
-\def\dotfkern#1{{\tf\kern #1}}
-
% needs a proper \definenarrower or installnarrower
-
-\newskip\ctxleftskip
-\newskip\ctxrightskip
-\newskip\ctxmidskip
-
-% \def\dosinglenarrower#1%
-% {\processaction
-% [#1]
-% [ \v!left=>\global\advance\ctxleftskip \@@slleft,
-% \v!middle=>\global\advance\ctxmidskip \@@slmiddle,
-% \v!right=>\global\advance\ctxrightskip \@@slright,
-% \v!reset=>\global\ctxleftskip \zeropoint
-% \global\ctxmidskip \zeropoint
-% \global\ctxrightskip\zeropoint,
-% \v!none=>,
-% \s!unknown=>\global\advance\ctxmidskip \commalistelement]}
-
-\def\donarrower[#1]% hm, can be dorepeat directly
- {\dorepeatwithcommand[#1]\donarrowermethod}
-
-\unexpanded\def\definenarrowermethod[#1]#2%
- {\setvalue{\??sl:#1}{#2}}
-
-\def\donarrowermethod#1%
- {\ifcsname\??sl:#1\endcsname\csname\??sl:#1\endcsname\else\global\advance\ctxmidskip#1\relax\fi}
-
-\definenarrowermethod[\v!left ]{\global\advance\ctxleftskip \@@slleft \relax}
-\definenarrowermethod[\v!middle ]{\global\advance\ctxmidskip \@@slmiddle\relax}
-\definenarrowermethod[\v!right ]{\global\advance\ctxrightskip \@@slright \relax}
-\definenarrowermethod[-\v!left ]{\global\advance\ctxleftskip -\@@slleft \relax}
-\definenarrowermethod[-\v!middle]{\global\advance\ctxmidskip -\@@slmiddle\relax}
-\definenarrowermethod[-\v!right ]{\global\advance\ctxrightskip-\@@slright \relax}
-\definenarrowermethod[\v!reset ]{\global\ctxleftskip \zeropoint
- \global\ctxmidskip \zeropoint
- \global\ctxrightskip\zeropoint\relax}
-\definenarrowermethod[\v!none ]{}
-
-% todo: definenarrower
-%
-% \definecomplexorsimple\startnarrower
-%
-% \def\simplestartnarrower
-% {\startnarrower[\v!middle]}
-%
-% \def\complexstartnarrower[#1]%
-% {\@@slbefore % was hard coded \par
-% \bgroup
-% \global\ctxleftskip \zeropoint
-% \global\ctxrightskip\zeropoint
-% \global\ctxmidskip \zeropoint
-% \processcommalistwithparameters[#1]\donarrower
-% \advance\leftskip \dimexpr\ctxleftskip +\ctxmidskip\relax
-% \advance\rightskip \dimexpr\ctxrightskip+\ctxmidskip\relax
-% \seteffectivehsize}
-%
-% \unexpanded\def\stopnarrower
-% {\@@slafter % was hard coded \par / needed, else skips forgotten
-% \egroup}
%
-% \unexpanded\def\setupnarrower
-% {\dodoubleargument\getparameters[\??sl]}
+% maybe we should hash the analysis
-%D Contrary to \MKII\ we can now define classes of narrower (generalized
-%D by Wolfgang). This environment will be enhanced for bidi.
+\installcorenamespace{narrower}
+\installcorenamespace{narrowermethod}
-\def\narrowerparameter #1{\csname\donarrowerparameter{\??sl\@@narrower}#1\endcsname}
-\def\donarrowerparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\donarrowerparentparameter\csname#1\s!parent\endcsname#2\fi}
-\def\donarrowerparentparameter#1#2{\ifx#1\relax\s!empty\else\donarrowerparameter#1#2\fi}
+\newskip\s_spac_narrower_left
+\newskip\s_spac_narrower_right
+\newskip\s_spac_narrower_mid
-\getparameters
- [\??sl]
+\installcommandhandler \??narrower {narrower} \??narrower
+
+\setupnarrower
[\c!before=\endgraf,
\c!after=\endgraf,
- \c!left=1.5em,
- \c!right=1.5em,
- \c!middle=1.5em]
-
-\unexpanded\def\definenarrower
- {\dodoubleempty\dodefinenarrower}
-
-\def\dodefinenarrower[#1][#2]%
- {\getparameters[\??sl#1][\s!parent=\??sl,#2]%
- \unexpanded\setvalue{\e!start#1}{\dodoubleempty\dostartnarrower[#1]}%
- \unexpanded\setvalue{\e!stop #1}{\dostopnarrower}}
-
-\unexpanded\def\setupnarrower
- {\dodoubleempty\dosetupnarrower}
-
-\def\dosetupnarrower[#1][#2]%
- {\doifelsenothing{#2}
- {\getparameters[\??sl][#1]}
- {\def\docommand##1{\getparameters[\??sl##1][#2]}%
- \processcommacommand[#1]\docommand}}
-
-\definenarrowermethod[\v!left ]{\global\advance\ctxleftskip \narrowerparameter\c!left \relax}
-\definenarrowermethod[\v!middle ]{\global\advance\ctxmidskip \narrowerparameter\c!middle\relax}
-\definenarrowermethod[\v!right ]{\global\advance\ctxrightskip \narrowerparameter\c!right \relax}
-\definenarrowermethod[-\v!left ]{\global\advance\ctxleftskip -\narrowerparameter\c!left \relax}
-\definenarrowermethod[-\v!middle]{\global\advance\ctxmidskip -\narrowerparameter\c!middle\relax}
-\definenarrowermethod[-\v!right ]{\global\advance\ctxrightskip-\narrowerparameter\c!right \relax}
-\definenarrowermethod[\v!reset ]{\global\ctxleftskip \zeropoint
- \global\ctxmidskip \zeropoint
- \global\ctxrightskip\zeropoint\relax}
-\definenarrowermethod[\v!none ]{}
-
-\def\dostartnarrower[#1][#2]%
- {\bgroup
- \ifsecondargument % \doifsomethingelse{#2}?
- \dodostartnarrower[#1][#2]%
+ \c!left=1.5\emwidth,
+ \c!right=1.5\emwidth,
+ \c!middle=1.5\emwidth,
+ \c!default=\v!middle]
+
+\appendtoks
+ \setuevalue{\e!start\currentnarrower}{\spac_narrower_start{\currentnarrower}}%
+ \setuevalue{\e!stop \currentnarrower}{\spac_narrower_stop}%
+\to \everydefinenarrower
+
+\unexpanded\def\installnarrowermethod#1#2%
+ {\setvalue{\??narrowermethod#1}{#2}}
+
+\unexpanded\def\spac_narrower_method_analyze#1%
+ {\ifcsname\??narrowermethod#1\endcsname
+ \csname\??narrowermethod#1\endcsname
+ \else
+ \global\advance\s_spac_narrower_mid#1\relax
+ \fi}
+
+\def\spac_narrower_initialize[#1]% hm, can be dorepeat directly
+ {\dorepeatwithcommand[#1]\spac_narrower_method_analyze}
+
+\installnarrowermethod \v!left {\global\advance\s_spac_narrower_left \narrowerparameter\c!left \relax}
+\installnarrowermethod \v!middle{\global\advance\s_spac_narrower_mid \narrowerparameter\c!middle\relax}
+\installnarrowermethod \v!right {\global\advance\s_spac_narrower_right \narrowerparameter\c!right \relax}
+\installnarrowermethod-\v!left {\global\advance\s_spac_narrower_left -\narrowerparameter\c!left \relax}
+\installnarrowermethod-\v!middle{\global\advance\s_spac_narrower_mid -\narrowerparameter\c!middle\relax}
+\installnarrowermethod-\v!right {\global\advance\s_spac_narrower_right-\narrowerparameter\c!right \relax}
+\installnarrowermethod \v!reset {\global \s_spac_narrower_left \zeropoint
+ \global \s_spac_narrower_mid \zeropoint
+ \global \s_spac_narrower_right \zeropoint\relax}
+\installnarrowermethod\v!none {}
+
+\unexpanded\def\spac_narrower_start#1%
+ {\begingroup
+ \edef\currentnarrower{#1}%
+ \dosingleempty\spac_narrower_start_indeed}
+
+\unexpanded\def\spac_narrower_start_indeed[#1]%
+ {\iffirstargument
+ \spac_narrower_start_apply{#1}%
\else
- \dodostartnarrower[#1][\v!middle]%
+ \spac_narrower_start_apply{\narrowerparameter\v!default}%
\fi}
-\def\dodostartnarrower[#1][#2]%
- {\edef\@@narrower{#1}%
- \narrowerparameter\c!before
- \global\ctxleftskip \zeropoint
- \global\ctxrightskip\zeropoint
- \global\ctxmidskip \zeropoint
- \processcommalistwithparameters[#2]\donarrower
- \advance\leftskip \dimexpr\ctxleftskip +\ctxmidskip\relax
- \advance\rightskip\dimexpr\ctxrightskip+\ctxmidskip\relax
+\def\spac_narrower_start_apply#1%
+ {\narrowerparameter\c!before
+ \global\s_spac_narrower_left \zeropoint
+ \global\s_spac_narrower_right\zeropoint
+ \global\s_spac_narrower_mid \zeropoint
+ \processcommalistwithparameters[#1]\spac_narrower_initialize
+ \advance\leftskip \dimexpr\s_spac_narrower_left +\s_spac_narrower_mid\relax
+ \advance\rightskip\dimexpr\s_spac_narrower_right+\s_spac_narrower_mid\relax
\seteffectivehsize}
-\def\dostopnarrower
+\unexpanded\def\spac_narrower_stop
{\narrowerparameter\c!after
- \egroup}
+ \endgroup}
-\def\v!narrower{narrower}
+\unexpanded\def\startnarrower
+ {\dosingleempty\spac_narrower_start_basic}
-\definenarrower[\v!narrower]
-
-\newdimen\@@effectivehsize \def\effectivehsize {\hsize}
-\newdimen\@@effectiveleftskip \def\effectiveleftskip {\leftskip}
-\newdimen\@@effectiverightskip \def\effectiverightskip{\rightskip}
+\unexpanded\def\spac_narrower_start_basic[#1]%
+ {\begingroup
+ \let\currentnarrower\empty
+ \iffirstargument
+ \spac_narrower_start_apply{#1}%
+ \else
+ \spac_narrower_start_apply{\narrowerparameter\v!default}%
+ \fi}
+
+\let\stopnarrower\spac_narrower_stop
+
+\unexpanded\def\startnarrow % current how
+ {\begingroup
+ \dodoubleempty\spac_narrower_start_named}
+
+\def\spac_narrower_start_named[#1][#2]%
+ {\edef\currentnarrower{#1}%
+ \ifsecondargument
+ \spac_narrower_start_apply{#2}%
+ \else
+ \spac_narrower_start_apply{\narrowerparameter\v!default}%
+ \fi}
+
+\let\stopnarrow\spac_narrower_stop
-\def\seteffectivehsize
+% \def\v!narrower{narrower}
+% \definenarrower[\v!narrower]
+
+\newdimen\d_spac_effective_hsize \def\effectivehsize {\hsize}
+\newdimen\d_spac_effective_leftskip \def\effectiveleftskip {\leftskip}
+\newdimen\d_spac_effective_rightskip \def\effectiverightskip{\rightskip}
+
+\unexpanded\def\seteffectivehsize
{\setlocalhsize
- \@@effectivehsize \localhsize
- \@@effectiveleftskip \leftskip
- \@@effectiverightskip \rightskip
- \let\effectivehsize \@@effectivehsize
- \let\effectiveleftskip \@@effectiveleftskip
- \let\effectiverightskip\@@effectiverightskip}
+ \d_spac_effective_hsize \localhsize
+ \d_spac_effective_leftskip \leftskip
+ \d_spac_effective_rightskip\rightskip
+ \let\effectivehsize \d_spac_effective_hsize
+ \let\effectiveleftskip \d_spac_effective_leftskip
+ \let\effectiverightskip\d_spac_effective_rightskip}
+
+\installcorenamespace{skipadaptionleft}
+\installcorenamespace{skipadaptionright}
\newskip\leftskipadaption
\newskip\rightskipadaption
-\setvalue{@lsa@\v!standard}{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi}
-\setvalue{@lsa@\v!yes }{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi}
-\letvalue{@lsa@\v!no }\zeropoint
-\letvalue{@lsa@\empty }\zeropoint
-\setvalue{@rsa@\v!standard}{\@@slright}
-\setvalue{@rsa@\v!yes }{\@@slright}
-\letvalue{@rsa@\v!no }\zeropoint
-\letvalue{@rsa@\empty }\zeropoint
+\setvalue{\??skipadaptionleft \v!standard}{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi}
+\setvalue{\??skipadaptionleft \v!yes }{\ifdim\d_spac_indentation_par=\zeropoint\narrowerparameter\c!left\else\d_spac_indentation_par\fi}
+\letvalue{\??skipadaptionleft \v!no }\zeropoint
+\letvalue{\??skipadaptionleft \empty }\zeropoint
+\setvalue{\??skipadaptionright\v!standard}{\narrowerparameter\c!right}
+\setvalue{\??skipadaptionright\v!yes }{\narrowerparameter\c!right}
+\letvalue{\??skipadaptionright\v!no }\zeropoint
+\letvalue{\??skipadaptionright\empty }\zeropoint
-\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname @lsa@#1\endcsname\csname @lsa@#1\endcsname\else#1\fi\relax}
-\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname @rsa@#1\endcsname\csname @rsa@#1\endcsname\else#1\fi\relax}
+\unexpanded\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\csname\??skipadaptionleft #1\endcsname\else#1\fi\relax}
+\unexpanded\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\csname\??skipadaptionright#1\endcsname\else#1\fi\relax}
-\def\doadaptleftskip #1{\dosetleftskipadaption {#1}\advance\leftskip \leftskipadaption }
-\def\doadaptrightskip#1{\dosetrightskipadaption{#1}\advance\rightskip\rightskipadaption}
+\unexpanded\def\doadaptleftskip #1{\dosetleftskipadaption {#1}\advance\leftskip \leftskipadaption }
+\unexpanded\def\doadaptrightskip#1{\dosetrightskipadaption{#1}\advance\rightskip\rightskipadaption}
-%D Tolerance:
+%D Tolerance (can also be set with align):
-\unexpanded\def\definetolerancemethod
- {\dodoubleargument\dodefinetolerancemethod}
+\installcorenamespace{tolerancemethods}
-\def\dodefinetolerancemethod[#1][#2]#3%
- {\setvalue{\??to:#1:#2}{#3}}
+\unexpanded\def\installtolerancemethod#1#2#3%
+ {\setvalue{\??tolerancemethods#1:#2}{#3}}
-\definetolerancemethod [\v!vertical] [\v!verystrict ] {\let\bottomtolerance\empty}
-\definetolerancemethod [\v!vertical] [\v!strict ] {\def\bottomtolerance{.050}}
-\definetolerancemethod [\v!vertical] [\v!tolerant ] {\def\bottomtolerance{.075}}
-\definetolerancemethod [\v!vertical] [\v!verytolerant] {\def\bottomtolerance{.100}}
+\installtolerancemethod \v!vertical \v!verystrict {\let\bottomtolerance\empty}
+\installtolerancemethod \v!vertical \v!strict {\def\bottomtolerance{.050}}
+\installtolerancemethod \v!vertical \v!tolerant {\def\bottomtolerance{.075}}
+\installtolerancemethod \v!vertical \v!verytolerant {\def\bottomtolerance{.100}}
-\definetolerancemethod [\v!horizontal] [\v!stretch ] {\emergencystretch\bodyfontsize}
-\definetolerancemethod [\v!horizontal] [\v!space ] {\spaceskip.5em\!!plus.25em\!!minus.25em\relax}
-\definetolerancemethod [\v!horizontal] [\v!verystrict ] {\tolerance 200 }
-\definetolerancemethod [\v!horizontal] [\v!strict ] {\tolerance1500 }
-\definetolerancemethod [\v!horizontal] [\v!tolerant ] {\tolerance3000 }
-\definetolerancemethod [\v!horizontal] [\v!verytolerant] {\tolerance4500 }
+\installtolerancemethod \v!horizontal \v!stretch {\emergencystretch\bodyfontsize}
+\installtolerancemethod \v!horizontal \v!space {\spaceskip.5em\!!plus.25em\!!minus.25em\relax}
+\installtolerancemethod \v!horizontal \v!verystrict {\tolerance 200 }
+\installtolerancemethod \v!horizontal \v!strict {\tolerance1500 }
+\installtolerancemethod \v!horizontal \v!tolerant {\tolerance3000 }
+\installtolerancemethod \v!horizontal \v!verytolerant {\tolerance4500 }
-\def\dotolerancencemethodvertical #1{\csname\??to:\v!vertical :#1\endcsname}
-\def\dotolerancencemethodhorizontal#1{\csname\??to:\v!horizontal:#1\endcsname}
-
-\def\dosetuptolerance[#1]%
- {\doifinsetelse\v!vertical{#1}%
- {\processcommacommand[#1]\dotolerancencemethodvertical}
- {\processcommacommand[#1]\dotolerancencemethodhorizontal}}
+\def\spac_tolerances_step_vertical #1{\csname\??tolerancemethods\v!vertical :#1\endcsname}
+\def\spac_tolerances_step_horizontal#1{\csname\??tolerancemethods\v!horizontal:#1\endcsname}
\unexpanded\def\setuptolerance
- {\dosingleargument\dosetuptolerance}
+ {\dosingleargument\spac_tolerances_setup}
+
+\def\spac_tolerances_setup[#1]%
+ {\doifinsetelse\v!vertical{#1}%
+ {\processcommacommand[#1]\spac_tolerances_step_vertical }
+ {\processcommacommand[#1]\spac_tolerances_step_horizontal}}
%D \macros
%D {pushindentation,popindentation}
%D
%D The pushing and popping is done by:
-\newbox\indentationboxA
-\newbox\indentationboxB
+\newbox\b_spac_indentations_a
+\newbox\b_spac_indentations_b
-\def\pushindentation
- {\bgroup
+\unexpanded\def\pushindentation
+ {\begingroup
\ifhmode
\unskip
- \setbox\indentationboxA\lastbox % get \strut if present
+ \setbox\b_spac_indentations_a\lastbox % get \strut if present
\unskip
- \setbox\indentationboxB\lastbox % get \indent generated box
+ \setbox\b_spac_indentations_b\lastbox % get \indent generated box
\unskip
\else
- \hskip\zeropoint % switch to horizontal mode
+ \dontleavehmode % was \hskip\zeropoint % switch to horizontal mode
\unskip
- \setbox\indentationboxA\lastbox % get \indent generated box
- \setbox\indentationboxB\emptybox
+ \setbox\b_spac_indentations_a\lastbox % get \indent generated box
+ \setbox\b_spac_indentations_b\emptybox
\fi}
-\def\popindentation
- {\box\indentationboxB\box\indentationboxA % put back the boxes
- \egroup}
+\unexpanded\def\popindentation
+ {\box\b_spac_indentations_b
+ \box\b_spac_indentations_a
+ \endgroup}
%D The only complication lays in \type{\strut}. In \PLAIN\
%D \TEX\ a \type{\strut} is defined as:
@@ -736,7 +715,7 @@
% \unexpanded \def\crlf
% {\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break}
-\unexpanded \def\crlf
+\unexpanded\def\crlf
{\ifhmode
\unskip
\prewordbreak\crlfplaceholder
@@ -747,11 +726,11 @@
\endgraf
\fi}
-\def\crlfplaceholder
+\unexpanded\def\crlfplaceholder
{\strut}
-\def\settestcrlf
- {\def\crlfplaceholder
+\unexpanded\def\settestcrlf
+ {\unexpanded\def\crlfplaceholder
{\hbox to \zeropoint
{\strut{\infofont\kern.25em}\lohi{\infofont CR}{\infofont LF}\hss}}}
@@ -822,6 +801,8 @@
\ifcsname\??hspace#1:#2\endcsname#1:#2\else:\v!none\fi
\endcsname}
+% no installhspace here (this is already an old command)
+
\definehspace [\v!small] [.25\emspaceamount]
\definehspace [\v!medium] [.5\emspaceamount]
\definehspace [\v!big] [1\emspaceamount]
@@ -887,38 +868,38 @@
%
% do we need \normalspaceprimitive here?
-\installcorenamespace{spaces}
+\installcorenamespace{spacemethods}
+
+\unexpanded\def\installspacemethod#1#2% needs to set \obeyedspace
+ {\setvalue{\??spacemethods#1}{#2}}
-\def\installspacehandler#1#2% needs to set \obeyedspace
- {\setvalue{\??spaces#1}{#2}}
+\def\activatespacehandler#1%
+ {\csname\??spacemethods\ifcsname\??spacemethods#1\endcsname#1\else\v!off\fi\endcsname}
\unexpanded\def\spac_spaces_checked_control{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}%
\unexpanded\def\spac_spaces_checked_normal {\mathortext\normalspace{\dontleavehmode\normalspace}}%
\unexpanded\def\spac_spaces_checked_fixed {\mathortext\normalspace{\dontleavehmode\fixedspace}}%
-\installspacehandler \v!on
+\installspacemethod \v!on
{\obeyspaces
\let\obeyedspace\spac_spaces_checked_control
\let\ =\obeyedspace}
-\installspacehandler \v!yes
+\installspacemethod \v!yes
{\obeyspaces
\let\obeyedspace\spac_spaces_checked_normal
\let\ =\obeyedspace}
-\installspacehandler \v!off % == default
+\installspacemethod \v!off % == default
{\normalspaces
\let\obeyedspace\normalspace
\let\ =\normalspaceprimitive} % was \normalspace
-\installspacehandler \v!fixed
+\installspacemethod \v!fixed
{\obeyspaces
\let\obeyedspace\spac_spaces_checked_fixed
\let\ =\obeyedspace}
-\def\activatespacehandler#1%
- {\csname\??spaces\ifcsname\??spaces#1\endcsname#1\else\v!off\fi\endcsname}
-
\appendtoks
\normalspaces % to be sure
\to \everybeforeoutput
diff --git a/tex/context/base/spac-ver.lua b/tex/context/base/spac-ver.lua
index f9ef14da1..e22cb3e84 100644
--- a/tex/context/base/spac-ver.lua
+++ b/tex/context/base/spac-ver.lua
@@ -571,7 +571,7 @@ do -- todo: interface.variables
local function analyze(str,oldcategory) -- we could use shorter names
for s in gmatch(str,"([^ ,]+)") do
- local amount, keyword, detail = lpegmatch(splitter,s)
+ local amount, keyword, detail = lpegmatch(splitter,s) -- the comma splitter can be merged
if not keyword then
report_vspacing("unknown directive: %s",s)
else
@@ -1344,3 +1344,11 @@ callbacks.register('buildpage_filter', nodes.builders.buildpage_filter, "vertica
statistics.register("v-node processing time", function()
return statistics.elapsedseconds(builders)
end)
+
+-- interface
+
+commands.vspacing = vspacing.analyze
+commands.vspacingsetamount = vspacing.setskip
+commands.vspacingdefine = vspacing.setmap
+commands.vspacingcollapse = vspacing.collapsevbox
+commands.vspacingsnap = vspacing.snapbox
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}
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index f248eb5ac..7a563bdfe 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 1a5956dcc..ad9ae6bab 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/status-mkiv.lua b/tex/context/base/status-mkiv.lua
index d742d8736..8968cd993 100644
--- a/tex/context/base/status-mkiv.lua
+++ b/tex/context/base/status-mkiv.lua
@@ -571,13 +571,14 @@ return {
{
filename = "spac-hor",
marktype = "mkiv",
- status = "unknown",
+ status = "okay",
+ comment = "probably needs some more work",
},
{
filename = "spac-ver",
marktype = "mkiv",
- status = "unknown",
- comment = "update lua code (communicate via register)"
+ status = "okay",
+ comment = "maybe some changes will happen"
},
{
filename = "spac-lin",
@@ -1004,17 +1005,18 @@ return {
{
filename = "typo-cln",
marktype = "mkiv",
- status = "unknown",
+ status = "okay",
},
{
filename = "typo-spa",
marktype = "mkiv",
- status = "unknown",
+ status = "okay",
},
{
filename = "typo-krn",
marktype = "mkiv",
- status = "unknown",
+ status = "okay",
+ comment = "do we keep the style and color or not"
},
{
filename = "typo-itc",
diff --git a/tex/context/base/strc-doc.mkiv b/tex/context/base/strc-doc.mkiv
index 44a79b16c..a6024113f 100644
--- a/tex/context/base/strc-doc.mkiv
+++ b/tex/context/base/strc-doc.mkiv
@@ -26,16 +26,19 @@
\def\currentstructurecounter{0}
-\definesystemvariable {ns}
+\installcorenamespace{structure}
-\def\structureparameter#1{\csname\??ns#1\endcsname}
+\installdirectcommandhandler \??structure {structure} % unchecked, so we need to initialize used parameters
-\def\detokenizedstructureparameter#1{\detokenize\expandafter\expandafter\expandafter{\csname\??ns#1\endcsname}}
+% \definesystemvariable{ns}
+% \def\structureparameter#1{\csname\??ns#1\endcsname}
+% \def\detokenizedstructureparameter#1{\detokenize\expandafter\expandafter\expandafter{\csname\??ns#1\endcsname}}
\def\structurecomponent{\dodoubleempty\dostructurecomponent}
-\getparameters % initialization, used not grouped anyway
- [\??ns]
+% \getparameters % initialization, used not grouped anyway
+% [\??ns]
+\setupstructure % not a user command so we might need to change the name
[\c!number=,
\c!level=,
\c!name=,
@@ -53,6 +56,7 @@
\c!sectionsegments=,
\c!sectionresetset=,
\c!reference=,
+ \c!backreference=,
\c!expansion=\v!no,
\c!xmlsetup=,
\s!catcodes=,
@@ -80,7 +84,8 @@
\def\dostructurecomponent[#1][#2]% #1=interfaced-settings, #2=optional user data (not yet supported)
{\begingroup
- \getparameters[\??ns][#1]%
+% \getparameters[\??ns][#1]%
+ \setupstructure[#1]%
\xdef\currentstructurename {\structureparameter\c!name}%
\xdef\currentstructurecoupling {\structureparameter\c!coupling}%
\xdef\currentstructureownnumber {\structureparameter\c!ownnumber}% optional own number
diff --git a/tex/context/base/strc-flt.mkvi b/tex/context/base/strc-flt.mkvi
index b54287a20..8e043446e 100644
--- a/tex/context/base/strc-flt.mkvi
+++ b/tex/context/base/strc-flt.mkvi
@@ -1016,7 +1016,7 @@
\global\floatwidth\wd\floatbox
\global\floatheight\ht\floatbox % forget about the depth
\global\advance\floattextwidth -\floatwidth
- \global\advance\floattextwidth -\rootfloatparameter\c!margin\relax % was \tfskipsize
+ \global\advance\floattextwidth -\rootfloatparameter\c!margin\relax
\edef\floatlocation{#1}% to be sure
\doifinsetelse\v!tall{#1}
{\floattextheight\pagegoal
@@ -1243,7 +1243,7 @@
{\normalexpanded{\noexpand\setupalign[\v!reset,\floatcaptionparameter\c!align]}}
\def\dopreparesideautocaption
- {\scratchdimen\dimexpr\hsize-\wd\b_strc_floats_content-\floatparameter\c!margin\relax % was \tfskipsize\relax
+ {\scratchdimen\dimexpr\hsize-\wd\b_strc_floats_content-\floatparameter\c!margin\relax
\ifdim\wd\b_strc_floats_caption>\scratchdimen
\ifdim\wd\b_strc_floats_caption<1.3\scratchdimen
\scratchdimen0.8\scratchdimen
@@ -1811,6 +1811,8 @@
% float strategy, replaces some of the above macros
+\installcorenamespace{floatmethods}
+
\let\floatmethod \empty
\let\floatlabel \empty
\let\floatcolumn \empty
@@ -1830,57 +1832,59 @@
\ifdefined\OTRSETsetpreferedcolumnslot
\OTRSETsetpreferedcolumnslot\floatcolumn\floatrow
\fi
- \ifcsname\string\floatmethod\floatmethod\endcsname \else
+ \ifcsname\??floatmethods\floatmethod\endcsname \else
\let\floatmethod\v!here
\fi
\ifx\forcedfloatmethod\empty \else
\let\floatmethod\forcedfloatmethod
\fi
- \getvalue{\string\floatmethod\floatmethod}[\floatmethod,\floatlocation]%
+ \getvalue{\??floatmethods\floatmethod}[\floatmethod,\floatlocation]%
\fi}
-\def\installfloathandler#1#2% #1=keyword #2=handler
- {\setvalue{\string\floatmethod#1}{#2}}
+\unexpanded\def\installfloatmethod#1#2% #1=keyword #2=handler
+ {\setvalue{\??floatmethods#1}{#2}}
+
+\let\installfloathandler\installfloatmethod % will go
\def\somesomewherefloat[#1]%
{\dofloatssavesomewherefloat\s!somewhere{#1}}
-\installfloathandler \v!here \someherefloat
-\installfloathandler \v!force \somefixdfloat
-\installfloathandler \v!left \someleftsidefloat
-\installfloathandler \v!right \somerightsidefloat
-\installfloathandler \v!text \sometextfloat
-\installfloathandler \v!top \sometopfloat
-\installfloathandler \v!bottom \somebottomfloat
-\installfloathandler \v!auto \someautofloat
-\installfloathandler \v!margin \somemarginfloat
-\installfloathandler \v!opposite \somefacefloat
-\installfloathandler \v!page \somepagefloat
-\installfloathandler \v!leftpage \someleftpagefloat
-\installfloathandler \v!rightpage \somerightpagefloat
-\installfloathandler \v!inmargin \someinmarginfloat
-\installfloathandler \v!inleft \someinleftmarginfloat
-\installfloathandler \v!inright \someinrightmarginfloat
-\installfloathandler \v!leftmargin \someinleftmarginfloat
-\installfloathandler \v!rightmargin \someinrightmarginfloat
-\installfloathandler \v!leftedge \someinleftedgefloat
-\installfloathandler \v!rightedge \someinrightedgefloat
-
-\installfloathandler \v!somewhere \somesomewherefloat
-
-\installfloathandler \v!backspace \somebackspacefloat
-\installfloathandler \v!cutspace \somecutspacefloat
-
-\installfloathandler {tblr} \someslotfloat
-\installfloathandler {lrtb} \someslotfloat
-\installfloathandler {tbrl} \someslotfloat
-\installfloathandler {rltb} \someslotfloat
-\installfloathandler {btlr} \someslotfloat
-\installfloathandler {lrbt} \someslotfloat
-\installfloathandler {btrl} \someslotfloat
-\installfloathandler {rlbt} \someslotfloat
-\installfloathandler {fxtb} \someslotfloat
-\installfloathandler {fxbt} \someslotfloat
+\installfloatmethod \v!here \someherefloat
+\installfloatmethod \v!force \somefixdfloat
+\installfloatmethod \v!left \someleftsidefloat
+\installfloatmethod \v!right \somerightsidefloat
+\installfloatmethod \v!text \sometextfloat
+\installfloatmethod \v!top \sometopfloat
+\installfloatmethod \v!bottom \somebottomfloat
+\installfloatmethod \v!auto \someautofloat
+\installfloatmethod \v!margin \somemarginfloat
+\installfloatmethod \v!opposite \somefacefloat
+\installfloatmethod \v!page \somepagefloat
+\installfloatmethod \v!leftpage \someleftpagefloat
+\installfloatmethod \v!rightpage \somerightpagefloat
+\installfloatmethod \v!inmargin \someinmarginfloat
+\installfloatmethod \v!inleft \someinleftmarginfloat
+\installfloatmethod \v!inright \someinrightmarginfloat
+\installfloatmethod \v!leftmargin \someinleftmarginfloat
+\installfloatmethod \v!rightmargin \someinrightmarginfloat
+\installfloatmethod \v!leftedge \someinleftedgefloat
+\installfloatmethod \v!rightedge \someinrightedgefloat
+
+\installfloatmethod \v!somewhere \somesomewherefloat
+
+\installfloatmethod \v!backspace \somebackspacefloat
+\installfloatmethod \v!cutspace \somecutspacefloat
+
+\installfloatmethod {tblr} \someslotfloat
+\installfloatmethod {lrtb} \someslotfloat
+\installfloatmethod {tbrl} \someslotfloat
+\installfloatmethod {rltb} \someslotfloat
+\installfloatmethod {btlr} \someslotfloat
+\installfloatmethod {lrbt} \someslotfloat
+\installfloatmethod {btrl} \someslotfloat
+\installfloatmethod {rlbt} \someslotfloat
+\installfloatmethod {fxtb} \someslotfloat
+\installfloatmethod {fxbt} \someslotfloat
% no \registerotrcommand\placesome* here!, this has to be cleaned up:
@@ -1930,7 +1934,7 @@
%\c!after=\blank,
\c!inbetween=\blank]
-\installfloathandler \v!local \somelocalfloat
+\installfloatmethod \v!local \somelocalfloat
\initializeboxstack{localfloats}
diff --git a/tex/context/base/strc-itm.mkvi b/tex/context/base/strc-itm.mkvi
index 6d04f27ed..2cf31d83e 100644
--- a/tex/context/base/strc-itm.mkvi
+++ b/tex/context/base/strc-itm.mkvi
@@ -193,7 +193,7 @@
\newsignal \d_strc_itemgroups_signal
-\newbox \b_itemgroups
+\newbox \b_strc_itemgroups
\newdimen \d_strc_itemgroups_list_width
\newdimen \d_strc_itemgroups_asked_width
@@ -1073,7 +1073,7 @@
\startitemgroupitem}
\unexpanded\def\strc_itemgroups_start_dummy
- {\strc_itemgroups_start_symbol\strut\strut}
+ {\strc_itemgroups_start_symbol\strut\strut} % two ?
\unexpanded\def\strc_itemgroups_start_subitem
{\settrue\c_strc_itemgroups_sub
@@ -1151,14 +1151,14 @@
\fi\fi}
\def\strc_itemgroups_handle_text_item
- {\scratchdimen\wd\b_itemgroups
+ {\scratchdimen\wd\b_strc_itemgroups
\advance \scratchdimen \itemgroupparameter\c!distance\relax
\ifdim\scratchdimen>\d_strc_itemgroups_list_width
\advance\scratchdimen -\d_strc_itemgroups_list_width
\else
\scratchdimen\zeropoint
\fi
- \llap{\hbox to \d_strc_itemgroups_list_width{\ifconditional\c_strc_itemgroups_sub\llap{+\enspace}\fi\box\b_itemgroups\hss}}% was: \hfill
+ \llap{\hbox to \d_strc_itemgroups_list_width{\ifconditional\c_strc_itemgroups_sub\llap{+\enspace}\fi\box\b_strc_itemgroups\hss}}% was: \hfill
\hskip\scratchdimen}
\def\strc_itemgroups_handle_lapped_item_positive
@@ -1168,7 +1168,7 @@
\llap{+\enspace}%
\fi
\strc_itemgroups_left_sym_filler
- \box\b_itemgroups % can already have a forced widt, only factor handled here
+ \box\b_strc_itemgroups % can already have a forced widt, only factor handled here
\hfil
\hskip\itemgroupparameter\c!distance}}}
@@ -1177,7 +1177,7 @@
{\ifconditional\c_strc_itemgroups_sub
\llap{+\enspace}%
\fi
- \box\b_itemgroups
+ \box\b_strc_itemgroups
\hskip\leftmargindistance}}
\def\strc_itemgroups_handle_groups_text_item
@@ -1185,7 +1185,7 @@
{\ifconditional\c_strc_itemgroups_sub
+\enspace
\fi
- \box\b_itemgroups
+ \box\b_strc_itemgroups
\hskip\interwordspace}%
\nobreak}
@@ -1194,7 +1194,7 @@
{\ifconditional\c_strc_itemgroups_sub
\llap{+\enspace}%
\fi
- \box\b_itemgroups
+ \box\b_strc_itemgroups
\hss}} % was: \hfill
\unexpanded\def\strc_itemgroups_start_head_sym#text%
@@ -1203,7 +1203,7 @@
\strc_itemgroups_start_head}
\def\strc_itemgroups_make_symbol_box
- {\setbox\b_itemgroups\hbox
+ {\setbox\b_strc_itemgroups\hbox
{\ifconditional\c_strc_itemgroups_head
\ifx\strc_itemgroups_extra_symbol\empty
\useitemgroupstyleandcolor\c!headstyle\c!headcolor
@@ -1225,26 +1225,26 @@
\fi}}
\def\strc_itemgroups_make_fitting_box
- {\ifdim\wd\b_itemgroups>\itemgroupparameter\c!maxwidth\scaledpoint\relax % brr, sp
- \normalexpanded{\global\setitemgroupparameter{\c!maxwidth}{\number\wd\b_itemgroups}}%
+ {\ifdim\wd\b_strc_itemgroups>\itemgroupparameter\c!maxwidth\scaledpoint\relax % brr, sp
+ \normalexpanded{\global\setitemgroupparameter{\c!maxwidth}{\number\wd\b_strc_itemgroups}}%
\fi
\ifdim\d_strc_itemgroups_max_width>\zeropoint
- \setbox\b_itemgroups\simplealignedbox
+ \setbox\b_strc_itemgroups\simplealignedbox
{\dimexpr\d_strc_itemgroups_max_width+\itemgroupparameter\c!distance\relax}
{\itemgroupparameter\c!itemalign}
- {\box\b_itemgroups\hskip\itemgroupparameter\c!distance}%
+ {\box\b_strc_itemgroups\hskip\itemgroupparameter\c!distance}%
\fi}
\def\strc_itemgroups_make_aligned_box
{\doifsomething{\itemgroupparameter\c!itemalign}
- {\setbox\b_itemgroups\simplealignedbox
+ {\setbox\b_strc_itemgroups\simplealignedbox
{\dimexpr\d_strc_itemgroups_asked_width+\itemgroupparameter\c!distance\relax}
{\itemgroupparameter\c!itemalign}
- {\box\b_itemgroups\hskip\itemgroupparameter\c!distance}}}
+ {\box\b_strc_itemgroups\hskip\itemgroupparameter\c!distance}}}
\def\strc_itemgroups_make_destination_box
{\iftrialtypesetting \else \ifx\m_strc_itemgroups_destination\empty \else
- \setbox\b_itemgroups\hbox{\directgotobox{\box\b_itemgroups}[\m_strc_itemgroups_destination]}%
+ \setbox\b_strc_itemgroups\hbox{\directgotobox{\box\b_strc_itemgroups}[\m_strc_itemgroups_destination]}%
\fi\fi}
\def\strc_itemgroups_check_indenting
@@ -1262,9 +1262,9 @@
\ifx\m_strc_itemgroups_repeat_start\empty
\let\m_current_itemgroups_repeat_start\currentitemlevel
\fi
- \setbox\b_itemgroups\hbox to \wd\b_itemgroups
+ \setbox\b_strc_itemgroups\hbox to \wd\b_strc_itemgroups
{\hskip-\d_strc_itemgroups_asked_width
- \box\b_itemgroups}% what a hack !
+ \box\b_strc_itemgroups}% what a hack !
\fi}
\def\strc_itemgroups_insert_item
@@ -1288,8 +1288,8 @@
\strc_itemgroups_make_aligned_box
\fi\fi
\let\m_strc_itemgroups_destination\empty
- \ht\b_itemgroups\strutheight % just in case a symbols is not yet available in
- \dp\b_itemgroups\strutdepth % the current run (more a mkii mp side artifact)
+ \ht\b_strc_itemgroups\strutheight % just in case a symbols is not yet available in
+ \dp\b_strc_itemgroups\strutdepth % the current run (more a mkii mp side artifact)
\strc_itemgroups_check_for_repeated
\ifdim\d_strc_itemgroups_asked_width<\zeropoint\relax
\strc_itemgroups_handle_lapped_item_negative
@@ -1320,7 +1320,7 @@
{\let\currentitemreference\empty
\strc_itemgroups_increment_item_counter
\advance\c_strc_itemgroups_n_of_items\plusone
- \setbox\b_itemgroups\hbox
+ \setbox\b_strc_itemgroups\hbox
{\useitemgroupstyleandcolor\c!style\c!color
\strc_itemgroups_used_symbol}%
\strc_itemgroups_check_for_repeated
diff --git a/tex/context/base/strc-mat.mkiv b/tex/context/base/strc-mat.mkiv
index 2f834a790..d5f864c90 100644
--- a/tex/context/base/strc-mat.mkiv
+++ b/tex/context/base/strc-mat.mkiv
@@ -532,7 +532,7 @@
\appendtoks
\edef\currentformulagrid{\formulaparameter\c!grid}%
\ifx\currentformulagrid\empty \else
- \autosetsnapvalue\currentformulagrid
+ \spac_grids_snap_value_auto\currentformulagrid
\fi
\to \everybeforedisplayformula
diff --git a/tex/context/base/strc-reg.mkiv b/tex/context/base/strc-reg.mkiv
index 35f764a75..e36556949 100644
--- a/tex/context/base/strc-reg.mkiv
+++ b/tex/context/base/strc-reg.mkiv
@@ -641,6 +641,7 @@
{\endgraf
\begingroup
\dostarttagged\t!register\currentregister
+ \forgeteverypar
\forgetparindent
\forgetparskip}
diff --git a/tex/context/base/strc-ren.mkiv b/tex/context/base/strc-ren.mkiv
index ebf5d5bfe..de8a2da6b 100644
--- a/tex/context/base/strc-ren.mkiv
+++ b/tex/context/base/strc-ren.mkiv
@@ -133,7 +133,7 @@
\let\currentstructurereferenceattribute\currentreferenceattribute
\else\ifx\currentheadinteraction\v!reference
% setuphead[<section>][interaction=reference,...] start<section>[backreference=abc,...]
- \edef\currentheadbackreference{\structurevariable{references.backreference}}%
+ \edef\currentheadbackreference{\structurevariable\c!backreference}% weird, was references.backreference
\ifx\currentheadbackreference\empty \else
\dogetsimplepagereference\currentheadbackreference
\let\currentstructurereferenceattribute\currentreferenceattribute
@@ -152,7 +152,7 @@
\else
\docheckheadreference
\setbox\sectionheadbox\ifvertical\vbox\else\hbox\fi \headreferenceattributes
- {\dosetlocalgridsnapping{\headparameter\c!internalgrid}%
+ {\spac_grids_set_local_snapping{\headparameter\c!internalgrid}%
\doresettructureheadnumbercontent
\useheadstyleparameter\c!style
\setinlineheadreferenceattributes
@@ -170,7 +170,7 @@
\else % = needed
\docheckheadreference
\setbox\sectionheadbox\ifvertical\vbox\else\hbox\fi \headreferenceattributes
- {\dosetlocalgridsnapping{\headparameter\c!internalgrid}%
+ {\spac_grids_set_local_snapping{\headparameter\c!internalgrid}%
\useheadstyleparameter\c!style
\setinlineheadreferenceattributes
\headparameter\c!command{\doplaceheadnumbercomponent\getheadnumber}{\doplaceheadtextcomponent\getheadtitle}}%
@@ -359,14 +359,17 @@
% \input tufte \par
% \stopnarrower
+\installcorenamespace{headplacementalternative}
+\installcorenamespace{headplacementnature}
+
\let\numberheadalternative\v!normal
\unexpanded\def\defineheadplacement
{\dodoubleargument\dodefineheadplacement}
% \def\dodefineheadplacement[#1][#2]% #3#4
-% {\setvalue{\??ns:#1}{#2}%
-% \setvalue{\??ns::#1}}
+% {\setvalue{\??headplacementnature#1}{#2}%
+% \setvalue{\??headplacementalternative#1}}
% \dodefineheadplacement[sectiona][vertical]{#1->#2}
% \dodefineheadplacement[sectionb][vertical]#1#2{#1->#2}
@@ -375,12 +378,12 @@
% \setuphead[subsection][alternative=sectionb]
\def\dodefineheadplacementyes[#1][#2]%#3#4%
- {\setvalue{\??ns:#1}{#2}%
- \setvalue{\??ns::#1}##1##2}
+ {\setvalue{\??headplacementnature#1}{#2}%
+ \setvalue{\??headplacementalternative#1}##1##2}
\def\dodefineheadplacementnop[#1][#2]%
- {\setvalue{\??ns:#1}{#2}%
- \setvalue{\??ns::#1}}
+ {\setvalue{\??headplacementnature#1}{#2}%
+ \setvalue{\??headplacementalternative#1}}
\def\dodefineheadplacement[#1][#2]%
{\doifnextbgroupelse
@@ -388,10 +391,15 @@
{\dodefineheadplacementnop[#1][#2]}}
\def\presetnumberheadalternative
- {\doifelsevalue{\??ns:\numberheadalternative}\v!horizontal\setfalse\settrue\headisdisplay}
+ {\doifelsevalue{\??headplacementnature\numberheadalternative}\v!horizontal\setfalse\settrue\headisdisplay}
\def\normalplacehead
- {\csname\??ns::\ifcsname\??ns::\numberheadalternative\endcsname\numberheadalternative\else\v!normal\fi\endcsname}
+ {\csname\??headplacementalternative\ifcsname\??headplacementalternative\numberheadalternative\endcsname\numberheadalternative\else\v!normal\fi\endcsname}
+
+\def\setheaddisplay % used in strc-sec
+ {\doifelsevalue{\??headplacementnature\headparameter\c!alternative}\v!horizontal
+ {\setfalse\headisdisplay}
+ {\settrue \headisdisplay}}
\defineheadplacement[\v!paragraph][\v!vertical]#1#2%
{\vbox
diff --git a/tex/context/base/strc-sec.mkiv b/tex/context/base/strc-sec.mkiv
index 695a90bc2..2602759dc 100644
--- a/tex/context/base/strc-sec.mkiv
+++ b/tex/context/base/strc-sec.mkiv
@@ -350,10 +350,8 @@
{\??headplace\headparameter\c!placehead}
{\getvalue{\??headplace\v!yes}}}
-\def\setheaddisplay
- {\doifelsevalue{\??ns:\headparameter\c!alternative}\v!horizontal
- {\setfalse\headisdisplay}
- {\settrue \headisdisplay}}
+
+\ifdefined\setheaddisplay \else \let\setheaddisplay\relax \fi
\newmode\v!sectionnumber
diff --git a/tex/context/base/syst-aux.mkiv b/tex/context/base/syst-aux.mkiv
index 7f680bfae..f30fdceec 100644
--- a/tex/context/base/syst-aux.mkiv
+++ b/tex/context/base/syst-aux.mkiv
@@ -3392,6 +3392,11 @@
\unexpanded\def\dorecurse#1%
{\dostepwiserecurse1{#1}1}
+\def\doexpandedrecurse#1#2%
+ {\ifnum#1>\zerocount
+ #2\expandafter\doexpandedrecurse\expandafter{\the\numexpr#1-1\relax}{#2}%
+ \fi}
+
%D As we can see here, the simple command \type{\dorecurse} is
%D a special case of the more general:
%D
diff --git a/tex/context/base/tabl-tbl.mkiv b/tex/context/base/tabl-tbl.mkiv
index 05dfc4412..c07cf10af 100644
--- a/tex/context/base/tabl-tbl.mkiv
+++ b/tex/context/base/tabl-tbl.mkiv
@@ -955,7 +955,7 @@
\the\everytabulate
\tabulateparameter\c!inner
\doifelsevalue{\??tt\currenttabulate\c!indenting}\v!yes
- {\edef\tabulateindent{\the\dimexpr\leftskip+\hangindent+\parindent}}% \ctxparindent
+ {\edef\tabulateindent{\the\dimexpr\leftskip+\hangindent+\parindent}}%
{\edef\tabulateindent{\the\dimexpr\leftskip+\hangindent }}%
\global\tabulatecolumn\zerocount
\processcontent{\e!stop#1}\tabulatecontent{\processtabulate[#3]}} % \currenttabulate
diff --git a/tex/context/base/typo-cln.lua b/tex/context/base/typo-cln.lua
index 56e2681ed..c6a270791 100644
--- a/tex/context/base/typo-cln.lua
+++ b/tex/context/base/typo-cln.lua
@@ -95,3 +95,7 @@ cleaners.handler = nodes.installattributehandler {
namespace = cleaners,
processor = process,
}
+
+-- interface
+
+commands.setcharactercleaning = cleaners.set
diff --git a/tex/context/base/typo-cln.mkiv b/tex/context/base/typo-cln.mkiv
index 4cf79d078..5306f614f 100644
--- a/tex/context/base/typo-cln.mkiv
+++ b/tex/context/base/typo-cln.mkiv
@@ -24,7 +24,7 @@
%D 1: Autocap first character of a line
\unexpanded\def\setcharactercleaning[#1]% This name might change!
- {\ctxlua{typesetters.cleaners.set("#1")}} % also accepts "reset"
+ {\ctxcommand{setcharactercleaning("#1")}} % also accepts "reset"
% \appendtoks
% \attribute\cleanerattribute\attributeunsetvalue
diff --git a/tex/context/base/typo-krn.lua b/tex/context/base/typo-krn.lua
index 3b1a8b413..54b1fd2d3 100644
--- a/tex/context/base/typo-krn.lua
+++ b/tex/context/base/typo-krn.lua
@@ -24,6 +24,7 @@ local insert_node_before = node.insert_before
local insert_node_after = node.insert_after
local texattribute = tex.attribute
+local unsetvalue = attributes.unsetvalue
local nodepool = nodes.pool
local tasks = nodes.tasks
@@ -264,17 +265,19 @@ end
local enabled = false
function kerns.set(factor)
- if not enabled then
- tasks.enableaction("processors","typesetters.kerns.handler")
- enabled = true
- end
if factor ~= 0 then
+ if not enabled then
+ tasks.enableaction("processors","typesetters.kerns.handler")
+ enabled = true
+ end
local a = factors[factor]
if not a then
a = #mapping + 1
factors[factors], mapping[a] = a, factor
end
factor = a
+ else
+ factor = unsetvalue
end
texattribute[a_kerns] = factor
return factor
@@ -289,3 +292,7 @@ kerns.handler = nodes.installattributehandler {
namespace = kerns,
processor = process,
}
+
+-- interface
+
+commands.setcharacterkerning = kerns.set
diff --git a/tex/context/base/typo-krn.mkiv b/tex/context/base/typo-krn.mkiv
index 5d1ed1f79..e1e404a7b 100644
--- a/tex/context/base/typo-krn.mkiv
+++ b/tex/context/base/typo-krn.mkiv
@@ -23,34 +23,28 @@
%
% {\setcharacterkerning[extrakerning]\input davis\relax}
-\unexpanded\def\definecharacterkerning
- {\dodoubleargument\dodefinecharacterkerning}
+\installcorenamespace{characterkerning}
-\def\dodefinecharacterkerning[#1][#2]%
- {\getparameters[\??ck#1][\c!factor=0.125,#2]%
- \setuvalue{\??ck:#1}{\dosetcharacterkerning{#1}}}
+\installcommandhandler \??characterkerning {characterkerning} \??characterkerning
-\unexpanded\def\setupcharacterkerning
- {\dodoubleargument\dosetupcharacterkerning}
-
-\def\dosetupcharacterkerning[#1][#2]%
- {\ifcsname\??ck:#1\endcsname
- \getparameters[\??ck#1][#2]%
+\unexpanded\def\setcharacterkerning[#1]%
+ {\edef\currentcharacterkerning{#1}%
+ \ifx\currentcharacterkerning\s!reset
+ \resetcharacterkerning
\else
- \dodefinecharacterkerning[#1][#2]% bonus
+ \typo_kerning_set
\fi}
-\unexpanded\def\dosetcharacterkerning#1%
- {\ctxlua{typesetters.kerns.set(\csname\??ck#1\c!factor\endcsname)}}
+% \def\typo_kerning_set
+% {\ctxcommand{setcharacterkerning(\characterkerningparameter\c!factor)}}
-\unexpanded\def\setcharacterkerning[#1]%
- {\csname\??ck:#1\endcsname}
+\def\typo_kerning_set
+ {\usecharacterkerningstyleandcolor\c!style\c!color % goodie, maybe also strut
+ \ctxcommand{setcharacterkerning(\characterkerningparameter\c!factor)}}
\unexpanded\def\resetcharacterkerning % fast one
{\attribute\kernattribute\attributeunsetvalue}
-\letvalue{\??ck\s!reset\c!factor}\attributeunsetvalue % trick
-
\appendtoks
\resetcharacterkerning
\to \everyresettypesetting
@@ -65,23 +59,32 @@
%D \stoptyping
%D
%D We could combine this with the previous definition command but
-%D then we alwasy would get a command defined which is not beforehand
+%D then we always would get a command defined which is not beforehand
%D a good idea.
\def\v!kerncharacters{kerncharacters} % no time now for translations
\definecharacterkerning [\v!kerncharacters] [\c!factor=.125]
+% Here we need to keep the groupedcommand solution as it is
+% used as modifier.
+
\unexpanded\def\kerncharacters
- {\dosingleempty\dokerncharacters}
+ {\doifnextoptionalelse\typo_kerning_apply_yes\typo_kerning_apply_nop}
+
+\def\typo_kerning_apply_yes[#1]%
+ {\groupedcommand{\typo_kerning_apply_yes_indeed{#1}}\donothing}
+
+\def\typo_kerning_apply_nop
+ {\groupedcommand\typo_kerning_apply_nop_indeed\donothing}
-\def\dokerncharacters[#1]%
- {\groupedcommand{\dodokerncharacters{#1}}\donothing}
+\def\typo_kerning_apply_yes_indeed#1%
+ {\let\currentcharacterkerning\v!kerncharacters
+ \setupcurrentcharacterkerning[\c!factor=#1]%
+ \typo_kerning_set}
-\def\dodokerncharacters#1%
- {\iffirstargument
- \setupcharacterkerning[\v!kerncharacters][\c!factor=#1]%
- \fi
- \setcharacterkerning[\v!kerncharacters]}
+\def\typo_kerning_apply_nop_indeed
+ {\let\currentcharacterkerning\v!kerncharacters
+ \typo_kerning_set}
\protect \endinput
diff --git a/tex/context/base/typo-spa.lua b/tex/context/base/typo-spa.lua
index e81a59bda..5b80c7178 100644
--- a/tex/context/base/typo-spa.lua
+++ b/tex/context/base/typo-spa.lua
@@ -6,8 +6,6 @@ if not modules then modules = { } end modules ['typo-spa'] = {
license = "see context related readme files"
}
--- get rid of tex.scale here
-
local utf = unicode.utf8
local next, type = next, type
@@ -30,10 +28,14 @@ local fontdata = fonthashes.identifiers
local quaddata = fonthashes.quads
local texattribute = tex.attribute
+local unsetvalue = attributes.unsetvalue
local nodecodes = nodes.nodecodes
local glyph_code = nodecodes.glyph
+local somespace = nodes.somespace
+local somepenalty = nodes.somepenalty
+
local nodepool = nodes.pool
local tasks = nodes.tasks
@@ -47,13 +49,25 @@ typesetters.spacings = typesetters.spacings or { }
local spacings = typesetters.spacings
spacings.mapping = spacings.mapping or { }
+spacings.numbers = spacings.numbers or { }
+
local a_spacings = attributes.private("spacing")
spacings.attribute = a_spacings
storage.register("typesetters/spacings/mapping", spacings.mapping, "typesetters.spacings.mapping")
+local mapping = spacings.mapping
+local numbers = spacings.numbers
+
+for i=1,#mapping do
+ local m = mapping[i]
+ numbers[m.name] = m
+end
+
+-- todo cache lastattr
+
local function process(namespace,attribute,head)
- local done, mapping = false, spacings.mapping
+ local done = false
local start = head
-- head is always begin of par (whatsit), so we have at least two prev nodes
-- penalty followed by glue
@@ -61,9 +75,9 @@ local function process(namespace,attribute,head)
if start.id == glyph_code then
local attr = has_attribute(start,attribute)
if attr and attr > 0 then
- local map = mapping[attr]
- if map then
- map = map[start.char]
+ local data = mapping[attr]
+ if data then
+ local map = data.characters[start.char]
unset_attribute(start,attribute) -- needed?
if map then
local left = map.left
@@ -74,33 +88,33 @@ local function process(namespace,attribute,head)
if left and left ~= 0 and prev then
local ok = false
if alternative == 1 then
- local somespace = nodes.somespace(prev,true)
+ local somespace = somespace(prev,true)
if somespace then
local prevprev = prev.prev
- local somepenalty = nodes.somepenalty(prevprev,10000)
+ local somepenalty = somepenalty(prevprev,10000)
if somepenalty then
if trace_spacing then
report_spacing("removing penalty and space before %s (left)", utfchar(start.char))
end
- head, _ = remove_node(head,prev,true)
- head, _ = remove_node(head,prevprev,true)
+ head = remove_node(head,prev,true)
+ head = remove_node(head,prevprev,true)
else
if trace_spacing then
report_spacing("removing space before %s (left)", utfchar(start.char))
end
- head, _ = remove_node(head,prev,true)
+ head = remove_node(head,prev,true)
end
end
ok = true
else
- ok = not (nodes.somespace(prev,true) and nodes.somepenalty(prev.prev,true)) or nodes.somespace(prev,true)
+ ok = not (somespace(prev,true) and somepenalty(prev.prev,true)) or somespace(prev,true)
end
if ok then
if trace_spacing then
report_spacing("inserting penalty and space before %s (left)", utfchar(start.char))
end
insert_node_before(head,start,new_penalty(10000))
- insert_node_before(head,start,new_glue(tex.scale(quad,left)))
+ insert_node_before(head,start,new_glue(left*quad))
done = true
end
end
@@ -108,35 +122,35 @@ local function process(namespace,attribute,head)
if right and right ~= 0 and next then
local ok = false
if alternative == 1 then
- local somepenalty = nodes.somepenalty(next,10000)
+ local somepenalty = somepenalty(next,10000)
if somepenalty then
local nextnext = next.next
- local somespace = nodes.somespace(nextnext,true)
+ local somespace = somespace(nextnext,true)
if somespace then
if trace_spacing then
report_spacing("removing penalty and space after %s (right)", utfchar(start.char))
end
- head, _ = remove_node(head,next,true)
- head, _ = remove_node(head,nextnext,true)
+ head = remove_node(head,next,true)
+ head = remove_node(head,nextnext,true)
end
else
- local somespace = nodes.somespace(next,true)
+ local somespace = somespace(next,true)
if somespace then
if trace_spacing then
report_spacing("removing space after %s (right)", utfchar(start.char))
end
- head, _ = remove_node(head,next,true)
+ head = remove_node(head,next,true)
end
end
ok = true
else
- ok = not (nodes.somepenalty(next,10000) and nodes.somespace(next.next,true)) or nodes.somespace(next,true)
+ ok = not (somepenalty(next,10000) and somespace(next.next,true)) or somespace(next,true)
end
if ok then
if trace_spacing then
report_spacing("inserting penalty and space after %s (right)", utfchar(start.char))
end
- insert_node_after(head,start,new_glue(tex.scale(quad,right)))
+ insert_node_after(head,start,new_glue(right*quad))
insert_node_after(head,start,new_penalty(10000))
done = true
end
@@ -152,26 +166,42 @@ end
local enabled = false
-function spacings.setup(id,char,left,right,alternative)
- local mapping = spacings.mapping[id]
- if not mapping then
- mapping = { }
- spacings.mapping[id] = mapping
+function spacings.define(name)
+ local data = numbers[name]
+ if data then
+ -- error
+ else
+ local number = #mapping + 1
+ local data = {
+ name = name,
+ number = number,
+ characters = { },
+ }
+ mapping[number] = data
+ numbers[name] = data
end
- local map = mapping[char]
- if not map then
- map = { }
- mapping[char] = map
+end
+
+function spacings.setup(name,char,settings)
+ local data = numbers[name]
+ if not data then
+ -- error
+ else
+ data.characters[char] = settings
end
- map.left, map.right, map.alternative = left, right, alternative
end
-function spacings.set(id)
+function spacings.set(name)
if not enabled then
tasks.enableaction("processors","typesetters.spacings.handler")
enabled = true
end
- texattribute[a_spacings] = id
+ local data = numbers[name]
+ texattribute[a_spacings] = data and data.number or unsetvalue
+end
+
+function spacings.reset()
+ texattribute[a_spacings] = unsetvalue
end
spacings.handler = nodes.installattributehandler {
@@ -179,3 +209,9 @@ spacings.handler = nodes.installattributehandler {
namespace = spacings,
processor = process,
}
+
+-- interface
+
+commands.definecharacterspacing = spacings.define
+commands.setupcharacterspacing = spacings.setup
+commands.setcharacterspacing = spacings.set
diff --git a/tex/context/base/typo-spa.mkiv b/tex/context/base/typo-spa.mkiv
index b660d54a9..0cfe44610 100644
--- a/tex/context/base/typo-spa.mkiv
+++ b/tex/context/base/typo-spa.mkiv
@@ -23,33 +23,32 @@
%
% test: oeps {\setcharacterspacing[frenchpunctuation]x: xx \bfd x: xx} oeps: test
-\newcount \maxcharacterspacingid
+\installcorenamespace{characterspacing}
+
+\definesystemvariable{cs} % maybe a dummy namespace
\unexpanded\def\definecharacterspacing[#1]%
- {\ifcsname\??ch#1\endcsname \else
- \global\advance\maxcharacterspacingid\plusone
- \setxvalue{\??ch:#1}{\the\maxcharacterspacingid}%
- \fi}
+ {\ctxcommand{definecharacterspacing("#1")}}
\unexpanded\def\setupcharacterspacing
- {\dotripleargument\dosetupcharacterspacing}
+ {\dotripleargument\typo_characterspacing_setup}
-\def\dosetupcharacterspacing[#1][#2][#3]%
- {\ifcsname\??ch:#1\endcsname
- \begingroup % for the moment we use modes, in ordere to avoid interface translation
- \getparameters[\??ch][\c!left=0,\c!right=0,\c!alternative=0,#3]%
- \ctxlua{typesetters.spacings.setup(\getvalue{\??ch:#1},\number#2,\@@chleft,\@@chright,\@@chalternative)}%
- \endgroup
- \fi}
+\def\typo_characterspacing_setup[#1][#2][#3]% todo: #2 list
+ {\begingroup
+ \getparameters[\??cs][\c!left=0,\c!right=0,\c!alternative=0,#3]%
+ \ctxcommand{setupcharacterspacing("#1",\number#2, {
+ left = \@@csleft,
+ right = \@@csright,
+ alternative = \@@csalternative
+ })}%
+ \endgroup}
-\unexpanded\def\setcharacterspacing[#1]%
- {\ctxlua{typesetters.spacings.set(\number\csname\??ch:#1\endcsname)}}
+\unexpanded\def\setcharacterspacing[#1]% we can store the attribute if we want speed
+ {\ctxcommand{setcharacterspacing("#1")}}
\unexpanded\def\resetcharacterspacing % fast one
{\attribute\spacingattribute\attributeunsetvalue}
-\letvalue{\??ch:\s!reset}\attributeunsetvalue
-
\appendtoks
\resetcharacterspacing
\to \everyresettypesetting
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index e8e2e258a..491bb9873 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 01/09/12 10:08:43
+-- merge date : 01/11/12 10:58:01
do -- begin closure to overcome local limits and interference