%D \module
%D   [       file=hand-ini,
%D        version=2008.02.12,
%D          title=\CONTEXT\ Handling Macros,
%D       subtitle=Initialization,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

%D Handling is implemented differently in \MKIV. Maybe I'll cook up
%D some compatibility hack.

% \definefontfeature[demo][default][mode=node,expansion=quality]
% \definefontfeature[demo][default][mode=node,protrusion=pure]

% experimental setup:
%
%  \showframe \setupalign[hanging] \enabletrackers[fonts.protrusion]
%
%  \definefontfeature[default] [default][mode=node,script=latn]
%  %definefontfeature[whatever][default][mode=node,lfbd=yes,rtbd=yes,script=latn]
%  \definefontfeature[whatever][default][mode=node,protrusion=quality]
%  \definefontfeature[whocares][default][mode=node,protrusion=yes,opbd=yes,script=latn] % left|right|yes
%
%  \definedfont[fxlbi.otf*default]  \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par
%  \definedfont[fxlbi.otf*whatever] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par
%  \definedfont[fxlbi.otf*whocares] \input tufte 0123456789 \par \dorecurse{15}{1 2 3 4 5 6 7 8 9 0 } \par
%
%  %definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn,featurefile=texgyrepagella-regularxx.fea]
%  \definefontfeature[whocares][default][mode=node,protrusion=2,opbd=yes,script=latn]
%
%  \definedfont[texgyrepagella-regularxx.otf*whocares] \input tufte

\unprotect

%D Probbaly not yet used by many.

\permanent\tolerant\protected\def\setupfontexpansion [#1]#*[#2]{\clf_setupfontexpansion {#1}{#2}}
\permanent\tolerant\protected\def\setupfontprotrusion[#1]#*[#2]{\clf_setupfontprotrusion{#1}{#2}}

% \setupfontprotrusion[quality-upright][vector=quality]
% \setupfontprotrusion[quality-slanted][vector=quality,right=1.5]

\pushoverloadmode

    \let\adjustspacing\relax \newcount\adjustspacing % a little bit protection
    \let\protrudechars\relax \newcount\protrudechars % a little bit protection

\popoverloadmode

%D At some point we can introduce extreme expansion, i.e. \type {\normaladjustspacing\plustwo}.

% 0 = disabled
% 1 = notused      (thesis)
% 2 = glyph + kern
% 3 = glyph only   (default)

\def\font_expansion_enable  {\normaladjustspacing\plusthree}
\def\font_expansion_enable_k{\normaladjustspacing\plustwo}
%def\font_expansion_enable_n{\normaladjustspacing\plusone}
\def\font_expansion_disable {\normaladjustspacing\zerocount}

\def\font_protruding_enable_b{\normalprotrudechars\plusthree} % also deal with r2l (experimental lmtx)
\def\font_protruding_enable  {\normalprotrudechars\plustwo  }
\def\font_protruding_disable {\normalprotrudechars\zerocount}

\appendtoks \font_expansion_disable  \to \everyforgetall % Here or not here?
\appendtoks \font_protruding_disable \to \everyforgetall % Here or not here?

% \def\fonthandlingerror{\writestatus\m!fonts{font handling is replaced by features in mkiv}}
%
% \lettonothing\fonthandling
%
% \protected\def\startfonthandling  #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen
% \protected\def\definefonthandling   {\dotripleempty\dodefinefonthandling}
% \protected\def\setupfonthandling    {\dodoubleempty\dosetupfonthandling }
% \def\dodefinefonthandling[#1][#2][#3]{\fonthandlingerror}
% \def\dosetupfonthandling     [#1][#2]{\fonthandlingerror}
% \def\usehandling                 [#1]{\fonthandlingerror}

\installcorenamespace{expansion}

\installcommandhandler \??expansion {expansion} \??expansion

\appendtoks
    \protected\instance\edefcsname\??expansion:\currentexpansion\endcsname{\do_set_expansion{\currentexpansion}}%
\to \everydefineexpansion

\protected\def\do_set_expansion#1%
  {\edef\currentexpansion{#1}%
   \adjustspacingstep   \expansionparameter\c!step   \relax
   \adjustspacingstretch\expansionparameter\c!stretch\relax
   \adjustspacingshrink \expansionparameter\c!shrink \relax}

\permanent\tolerant\protected\def\setexpansion[#1]{\begincsname\??expansion:\ifparameter#1\or#1\else\currentexpansion\fi\endcsname}

\permanent\protected\def\resetexpansion
  {\adjustspacingstep   \zerocount
   \adjustspacingstretch\zerocount
   \adjustspacingshrink \zerocount}

\protected\instance\letcsname\??expansion:\v!reset\endcsname\resetexpansion
\protected\instance\defcsname\??expansion:\endcsname{\do_set_expansion\empty}%

\setupexpansion
  [\c!step=1,
   \c!stretch=40,
   \c!shrink=20]

% \defineexpansion % the default
% \defineexpansion[\v!default]

\setexpansion

%D New in \LMTX: can be used grouped.

\permanent\protected\def\noexpansion {\bitwiseflip\glyphoptions\noexpansionglyphoptioncode}
\permanent\protected\def\noprotrusion{\bitwiseflip\glyphoptions\noprotrusionglyphoptioncode}

\protect \endinput
