On 1/13/2013 7:06 PM, Wolfgang Schuster wrote:

what’s your opinion to redefine the leaders command to take a optional name 
which loads a predefined setup?

We should avoid redefining a primitive (esp one that is used in math).

<code>
% use \doifsymbolelse for the symbol key?

\unprotect

\installcorenamespace{leaders}
\installcorenamespace{leadersalternative}

\installdefinehandler    \??leaders {leaders} \??leaders
\installparameterhandler \??leaders {leaders}
\installsetuphandler     \??leaders {leaders}

\def\leaders
   {\doifnextoptionalelse\leaders_indeed\normalleaders}

\def\leaders_indeed[#1]%
   {\def\currentleaders{#1}%
    
\expandcheckedcsname\??leadersalternative{\leadersparameter\c!alternative}\s!default}

\setvalue{\??leadersalternative\s!default}%
   {\leadersparameter\c!left
    \normalleaders\hbox to 
\leadersparameter\c!width{\hss\leadersparameter\c!symbol\hss}\hfill
    \leadersparameter\c!right}

\setvalue{\??leadersalternative\s!default}%
   {\leadersparameter\c!left
    \normalleaders\hbox to 
\leadersparameter\c!width{\hss\leadersparameter\c!symbol\hss}\hfill
    \leadersparameter\c!right}

\setvalue{\??leadersalternative\v!global}%
   {\leadersparameter\c!left
    \normalgleaders\hbox to 
\leadersparameter\c!width{\hss\leadersparameter\c!symbol\hss}\hfill
    \leadersparameter\c!right}

\setupleaders
   [\c!width=1em,
    \c!symbol=.,
    \c!alternative=\s!default]

\protect

\defineleaders[test]%[symbol=x]

\starttext

text\leaders\hbox to 1em{\hss .\hss}\hfill text

text\leaders[test]text

\stoptext
</code>

This method would be cleaner for user defined list layouts where one want to 
change the filler between the text and the page number because a setup like 
this isn’t something for a normal user.

As we have a few more leader primitives, I generalized your code a bit and also made the box alignment configurable:

\installcorenamespace{fillers}
\installcorenamespace{fillersalternative}

\installcommandhandler \??fillers {fillers} \??fillers

\unexpanded\def\fillers
  {\dosingleempty\spac_fillers_indeed}

\def\spac_fillers_indeed[#1]%
  {\begingroup
   \edef\currentleaders{#1}%
   \fillersparameter\c!left

\expandcheckedcsname\??fillersalternative{\fillersparameter\c!alternative}\v!local
      \simplealignedbox
        {\fillersparameter\c!width}%
        {\fillersparameter\c!align}%
        {\fillersparameter\c!symbol}%
   \hfill
   \fillersparameter\c!right
   \endgroup}

\letvalue{\??fillersalternative\s!local }\normalleaders % overflow ends up inbetween (current box) \letvalue{\??fillersalternative\v!global }\normalgleaders % overflow ends up inbetween (outermost box) \letvalue{\??fillersalternative\v!middle }\normalcleaders % overflow ends up before, after (current box) \letvalue{\??fillersalternative\v!broad }\normalxleaders % overflow ends up before, inbetween, after (current box)

\setupfillers
  [\c!width=\emwidth,
   \c!symbol=.,
   \c!align=\v!middle,
   \c!alternative=\s!local]

\protect

\definefillers[test][symbol=!]

\starttext

text\leaders\hbox to 1em{\hss .\hss}\hfill text

text\fillers[test]text

\stoptext

<code source="strc-lst.mkvi">
\definelistalternative
   [c]
   [\c!distance=5em,
    \c!width=0pt,
    \c!stretch=10em,
    \c!filler=\hskip.5em\gleaders\hbox to .5em{\hss.\hss}\hfill\hskip.5em\relax,
    \c!renderingsetup=\??listrenderings:abc]
</code>

before we add this kind of code, how about a more extensive mechanism so that we can say filler=periods

for this we need to generalize the above even more i.e. we could have:

alternative=rule    (height width depth)
alternative=box     (the leaders)
alternative=stretch (hfill

and then methods, for leaders, so now we get:

\unprotect

\installcorenamespace{fillers}
\installcorenamespace{fillersalternative}
\installcorenamespace{fillersleadermethod}

\installcommandhandler \??fillers {fillers} \??fillers

\unexpanded\def\fillers
  {\dosingleempty\spac_fillers_indeed}

\def\spac_fillers_indeed[#1]%
  {\begingroup
   \edef\currentfillers{#1}%
   \scratchdimen\fillersparameter\c!leftmargin\relax
   \ifdim\scratchdimen=\zeropoint\else
     \hskip\scratchdimen
   \fi
   \fillersparameter\c!left\relax
   \getvalue{\??fillersalternative\fillersparameter\c!alternative}\relax
   \fillersparameter\c!right\relax
   \scratchdimen\fillersparameter\c!rightmargin\relax
   \ifdim\scratchdimen=\zeropoint\else
     \hskip\scratchdimen
   \fi
   \endgroup}

\setvalue{\??fillersalternative\s!box}%

{\expandcheckedcsname\??fillersleadermethod{\fillersparameter\c!method}\v!local
      \simplealignedbox
        {\fillersparameter\c!width}%
        {\fillersparameter\c!align}%
        {\fillersparameter\c!symbol}%
   \hfill}

\setvalue{\??fillersalternative\c!stretch}%
  {\hfill}

\setvalue{\??fillersalternative\c!rule}%

{\expandcheckedcsname\??fillersleadermethod{\fillersparameter\c!method}\v!local
     \hrule
       \!!height\fillersparameter\c!height
       \!!depth \fillersparameter\c!depth
   \hfill}

\letvalue{\??fillersleadermethod\s!local }\normalleaders % overflow ends up inbetween (current box) \letvalue{\??fillersleadermethod\v!global}\normalgleaders % overflow ends up inbetween (outermost box) \letvalue{\??fillersleadermethod\v!middle}\normalcleaders % overflow ends up before, after (current box) \letvalue{\??fillersleadermethod\v!broad }\normalxleaders % overflow ends up before, inbetween, after (current box)

\setupfillers
  [\c!width=\emwidth,
   \c!symbol=.,
   \c!align=\v!middle,
   \c!height=.1\exheight,
   \c!depth=\zeropoint,
   \c!leftmargin=\zeropoint,
   \c!rightmargin=\zeropoint,
   \c!alternative=\s!box,
   \c!method=\s!local]

% maybe box -> symbol

\protect

\definefillers[test-a][alternative=stretch]
\definefillers[test-b][alternative=box,symbol=!]
\definefillers[test-c][alternative=rule,height=.1ex,leftmargin=.5em,rightmargin=.25em]

\starttext

text\leaders\hbox to 1em{\hss .\hss}\hfill text

text\fillers[test-a]text

text\fillers[test-b]text

text\fillers[test-c]text

\stoptext

maybe box should be symbol (no \v!symbol yet)

maybe some more tricks can be added

Hans

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
    tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------
_______________________________________________
dev-context mailing list
dev-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/dev-context

Reply via email to