Hi Hans,

here is a new attempt to get a more generalized version of the startnarrower macros, now mkiv only.

Wolfgang

\unprotect

\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}

\getparameters
  [\??sl]
  [\c!before=\endgraf,
   \c!after=\endgraf,
   \c!left=1.5em,
   \c!right=1.5em,
   \c!middle=1.5em]

\def\definenarrower
  {\dodoubleempty\dodefinenarrower}

\def\dodefinenarrower[#1][#2]%
  {\getparameters[\??sl#1][\s!parent=\??sl,#2]%
   \setvalue{\e!start#1}{\dodoubleempty\dostartnarrower[#1]}%
   \setvalue{\e!stop #1}{\dostopnarrower}}

\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]%
   \else
     \dodostartnarrower[#1][\v!middle]%
   \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
   \seteffectivehsize}

\def\dostopnarrower
  {\narrowerparameter\c!after
   \egroup}

\def\v!narrower{narrower}

\definenarrower[\v!narrower]

\protect

\definenarrower[wide] [before={\blank[2*line]},after={\blank [2*line]},middle=0.5em] \definenarrower[narrow][before={\blank[4*line]},after={\blank [4*line]},middle=4.0em]

\starttext

\input ward

\startnarrower
\input ward\endgraf
\stopnarrower

\input ward

\startnarrow
\input ward\endgraf
\stopnarrow

\input ward

\startwide
\input ward\endgraf
\stopwide

\input ward

\stoptext

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to