%D \module
%D   [       file=main-002,
%D        version=1997.03.31,
%D          title=\CONTEXT\ Core Macros,
%D       subtitle=1B (to be split),
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%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 This module is still to be split and documented. 

\writestatus{loading}{Context Core Macros (2)}

\unprotect

%I n=Items
%I c=\items,\stelitemsin
%I
%I Met het commando \items kunnen invullijsten worden
%I gegenereerd:
%I
%I   \items{alternatief1,alternatief2,...,alternatiefN}
%I
%I Als in plaats van een alternatief een - wordt gegeven,
%I dan wordt ruimte opengelaten.
%I
%I De wijze waarop items worden weergegeven wordt ingesteld
%I met het commando:
%I
%I   \stelitemsin[plaats=,symbool=,breedte=,n=,voor=,
%I     tussen=,na=,uitlijnen=]
%I
%I Mogelijke plaatsen zijn links, rechts, onder, boven en
%I inmarge. Als breedte wordt de breedte van de totale tekst
%I opgegeven. Het aantal is facultatief, eventueel kan er
%I 'onbekend' worden meegegeven. Uitlijnen is 'ja' of 'nee'.
%P
%I Indien gewenst, kan de instelling direkt achter \item worden
%I geplaatst:
%I
%I   \items[plaats=,symbool=,...]{alternatief1,...}
%I
%I In plaats van een symbool kan ook een van de volgende
%I aanduidingen worden meegegeven:
%I
%I   a   a, b, c, d, ...
%I   A   A, B, C, D, ...
%I   n   1, 2, 3, 4, ...
%I   r   i, ii, iii, ...
%I   R   I, II, III, ...
%I
%I Eventueel kan een nummer worden meegegeven. In dat
%I geval wordt het overeenkomstige symbool van de
%I opsomming gebruikt (1--n).

%\def\checkinterlineskip%
%  {\ifvmode
%     \ifdim\lastskip>\!!zeropoint\relax
%       \nointerlineskip
%     \else\ifdim\lastkern>\!!zeropoint\relax
%       \nointerlineskip
%     \fi\fi
%   \fi}

\def\horitems#1#2% #1=breedte #2=commandos
  {\dimen0=#1\relax
   \divide\dimen0 by \nofitems
   \!!counta=0\relax
   \def\docommando##1%
     {\advance\!!counta by 1\relax
      \processaction
        [\@@isuitlijnen]
        [  \v!links=>\hbox to \dimen0{\strut##1\hss},
          \v!rechts=>\hbox to \dimen0{\hss\strut##1},
          \v!midden=>\hbox to \dimen0{\hss\strut##1\hss},
           \v!marge=>\ifnum\!!counta=1\hss\else\hfill\fi
                     \strut##1%
                     \ifnum\!!counta=\nofitems\hss\else\hfill\fi,
         \s!default=>\hbox to \dimen0{\hss\strut##1\hss}, % midden
         \s!unknown=>\hbox to \dimen0{\strut##1\hss}]}%   % links
   \hbox to #1{\hss#2\hss}}

\def\veritems#1#2% #1=breedte #2=commandos
  {\dimen0=#1\relax
   \def\docommando##1%
     {\ifdim\dimen0<\!!zeropoint\relax   % the - was a signal
        \hbox to -\dimen0{\hss\strut##1}%
      \else\ifdim\dimen0>\!!zeropoint\relax
        \hbox to \dimen0{\strut##1\hss}%
      \else
        \hbox{\strut##1}%
      \fi\fi}%
   \vbox{#2}}

\def\dostelitemsin[#1]%  maakt direkt gebruik van \??ss en \??cv
  {\getparameters[\??is][#1]%
   \doif{\@@isbreedte}{\v!onbekend}
     {\def\@@isbreedte{\hsize}}%
   \doifdefinedelse{\??cv\@@issymbool}
     {\def\doitembullet##1{\convertnumber{\@@issymbool}{##1}}}
     {\doifdefined{\??ss\@@issymbool}
        {\def\doitembullet##1{\symbol[\@@issymbool]}}}}

\def\makeitemsandbullets#1%
  {\doifelse{\@@isn}{\v!onbekend}
     {\getcommalistsize[#1]%
      \edef\nofitems{\commalistsize}}
     {\edef\nofitems{\@@isn}}%
   \setbox0=\hbox
     {\doitems
        {\@@isbreedte}
        {\processcommalist[#1]\docommando}}%
   \setbox2=\hbox
     {\doitems
        {\@@isbulletbreedte}
        {\herhaal[\nofitems*\docommando{\strut\doitembullet{\herhaler}}]}}}

\def\dostartitems#1#2#3%
  {\let\doitems=#2
   \def\@@isbulletbreedte{#3}%
   \makeitemsandbullets{#1}%
   \@@isvoor}

\def\dostopitems%
  {\@@isna
   \egroup}

\setvalue{doitems\v!boven}#1%
  {\dostartitems{#1}\horitems\@@isbreedte
   \noindent\vbox
     {\forgetall
      \doifsomething{\@@issymbool}
        {\doifnot{\@@issymbool}{\v!geen}
           {\box2
            \@@istussen
            \nointerlineskip}}%
      \box0}%
   \dostopitems}

\setvalue{doitems\v!onder}#1%
  {\dostartitems{#1}\horitems\@@isbreedte
   \noindent\vbox
     {\forgetall
      \box0
      \doifsomething{\@@issymbool}
        {\@@istussen
         \nointerlineskip
         \box2}}%
   \dostopitems}

\setvalue{doitems\v!inmarge}#1%
  {\dostartitems{#1}{\veritems}{-1.5em}%  - is a signal
   \noindent\hbox{\llap{\box2\hskip\linkermargeafstand}\box0}%
   \dostopitems}

\setvalue{doitems\v!links}#1%
  {\advance\hsize by -1.5em\relax
   \dostartitems{#1}{\veritems}{1.5em}%
   \noindent\hbox{\box2\box0}%
   \dostopitems}

\setvalue{doitems\v!rechts}#1%
  {\dostartitems{#1}{\veritems}{0em}%
   \noindent\hbox{\box0\hskip-\wd2\box2}%
   \dostopitems}

\def\stelitemsin%
  {\dosingleargument\dostelitemsin}

\def\complexitems[#1]%
  {\bgroup
   \stelitemsin[#1]%
   \parindent=\!!zeropoint
   \setlocalhsize
   \hsize=\localhsize
   \mindermeldingen
   \doifundefined{doitems\@@isplaats}%
     {\let\@@isplaats\v!links}%
   \getvalue{doitems\@@isplaats}}

\definecomplexorsimpleempty\items

%I n=Tabulatie (1)
%I c=\definieeralineas,\stelalineasin
%I
%I Er kunnen paragrafen in meerdere kolommen worden gezet na
%I het commando:
%I
%I   \definieeralineas[naam][n=,voor=,na=,afstand=,
%I     hoogte=,lijn=,binnen=]
%I
%I Kolommen worden vervolgens gezet met:
%I
%I   \startnaam .... \naam .... \naam .... \stopnaam
%I
%I of (soms verwarrend):
%I
%I   \naam .... \naam .... \naam .... \naam
%I
%I of (lekker kort):
%I
%I   \naam .... \\ .... \\ .... \\
%I
%I waarbij het aantal malen .... \naam  of \\ gelijk is
%I aan n. Naast \naam en \\ is ook \volgendenaam toegestaan.
%P
%I Het is mogelijk per kolom een en ander in te stellen met
%I het commando:
%I
%I   \stelalineasin[naam][kolomnummer][afstand=,breedte=,
%I     hoogte=,boven=,onder=,letter=,binnen=,lijn=,
%I     uitlijnen=,tolerantie=]

% Te zijner tijd [plaats=boven,onder,midden] implementeren,
% in dat geval moet eerst de maximale hoogte worden bepaald.
%
% Overigens kan een en ander mooier met \halign.

\def\dodefinieeralineas[#1][#2]%
  {\setvalue{\s!do\s!next#1}%
     {\def\\{\getvalue{#1}}}%
   \setvalue{#1}%
     {\getvalue{\s!do\s!next#1}%
      \dostartalineas{#1}}%
   \setvalue{\e!volgende#1}%
     {\getvalue{#1}}%
   \setvalue{\e!start#1}%
     {\bgroup
      \setvalue{\s!do\s!next#1}{}%
      \setvalue{\e!stop#1}%
        {\getvalue{#1}%
         \egroup}%
      \getvalue{#1}}%
   \getparameters[\??al#1]%
     [\c!n=3,
      \c!voor=\blanko,
      \c!na=\blanko,
      \c!afstand=1em,
      \c!hoogte=\v!passend,
      \c!lijn=\v!uit,
      \c!commando=,
      \c!uitlijnen=,
      \c!tolerantie=\v!soepel,
      \c!letter=,
      \c!kleur=,
      \c!boven=,
      \c!boven=\vss,
      \c!onder=\vfill,
      #2]%
   \setvalue{\e!stel#1\e!in}%
     {\stelalineasin[#1]}%
   \dorecurse
      {\getvalue{\??al#1\c!n}}
      {\stelalineasin[#1][\recurselevel]
         [\c!breedte=,
          \c!onder=\getvalue{\??al#1\c!onder},
          \c!boven=\getvalue{\??al#1\c!boven},
          \c!hoogte=\getvalue{\??al#1\c!hoogte},
          \c!letter=\getvalue{\??al#1\c!letter},
          \c!kleur=\getvalue{\??al#1\c!kleur},
          \c!lijn=\getvalue{\??al#1\c!lijn},
          \c!uitlijnen=\getvalue{\??al#1\c!uitlijnen},
          \c!tolerantie=\getvalue{\??al#1\c!tolerantie},
          \c!afstand=\getvalue{\??al#1\c!afstand}]}%
   \stelalineasin[#1][1][\c!afstand=0em]}

% nog monster
%
%\assignwidth
%  {\!!widtha}
%  {\getvalue{\??dd#1\c!breedte}}
%  {\doifelsevaluenothing{\??dd#1\c!monster}
%     {\hskip
%     {\doattributes
%        {\??al#1}\c!letter\c!kleur
%        {\getvalue{\??dd#1\c!monster}}}}
%  {0pt}

\def\definieeralineas%
  {\dodoubleargument\dodefinieeralineas}

\def\dostelalineasin[#1][#2][#3]%
  {\doifelse{#2}{\v!elk}
     {\dorecurse
        {\getvalue{\??al#1\c!n}}
        {\getparameters[\??al#1\herhaler][#3]}}
     {\ConvertToConstant\doifelse{#3}{}
        {\getparameters[\??al#1][#2]}
        {\def\docommando##1%
           {\getparameters[\??al#1##1][#3]}%
         \processcommalist[#2]\docommando}}}

\def\stelalineasin%
  {\dotripleempty\dostelalineasin}

\newcount\alteller
\newcount\alnsize
\newdimen\alhsize

\def\doalinealijn#1#2%
  {\doifelsevalue{\??al#2\the\alteller\c!lijn}{\v!aan}
     {\expandafter\dimen2=#1\relax
      \hskip.5\dimen2
      \hskip-\linewidth
      \vrule\!!width\linewidth
      \hskip.5\dimen2}
     {\hskip#1}}

\def\dostartalinea#1%
  {\doifelsevaluenothing{\??al#1\the\alteller\c!breedte}
     {\!!widtha=\alhsize\relax
      \divide\!!widtha by \alnsize}
     {\!!widtha=\getvalue{\??al#1\the\alteller\c!breedte}\relax}%
   \dostartattributes
     {\??al#1\the\alteller}\c!letter\c!kleur
     {}%
   \doifelsevalue{\??al#1\the\alteller\c!hoogte}{\v!passend}
     {\setbox0=\vtop}
     {\setbox0=\vtop to \getvalue{\??al#1\the\alteller\c!hoogte}}%
   \bgroup
   \blanko[\v!blokkeer]%
   \forgetall
   \getvalue{\??al#1\the\alteller\c!boven}%
   \getvalue{\??al#1\c!binnen}%
   \hsize=\!!widtha  % setting \wd afterwards removed
   \getvalue{\??al#1\the\alteller\c!binnen}%
   \edef\!!stringa{\getvalue{\??al#1\the\alteller\c!uitlijnen}}%  nodig?
   \expandafter\steluitlijnenin\expandafter[\!!stringa]%
   \edef\!!stringa{\getvalue{\??al#1\the\alteller\c!tolerantie}}% nodig?
   \expandafter\steltolerantiein\expandafter[\!!stringa]%
   \ignorespaces
   \endgraf
   \ignorespaces
   %
   % Nadeel van de onderstaande constructie is dat \everypar
   % binnen een groep kan staan en zo steeds \begstruts
   % worden geplaatst. Mooi is anders dus moet het anders!
   %
   % Hier is \Everypar niet nodig.
   %
   \everypar{\begstrut\everypar{}}%
   %
   \ignorespaces\geenspatie % dubbel: \ignorespaces
   \getvalue{\??al#1\the\alteller\c!commando}}

\def\dostopalinea#1%
  {\ifvmode
     \removelastskip
   \else
     \unskip\endstrut\endgraf
   \fi
   \getvalue{\??al#1\the\alteller\c!onder}%
   \egroup
   \ifdim\wd0=\!!zeropoint % no data
     \wd0=\!!widtha
   \fi
   \box0
   \dostopattributes
   \ifnum\alteller<\getvalue{\??al#1\c!n}\relax
     \def\next{\doalinea{#1}}%
   \else
     \def\next{\dostopalineas{#1}}%
   \fi
   \next}

\def\doalinea#1%
  {\global\advance\alteller by 1\relax
   \doifelsevaluenothing{\??al#1\the\alteller\c!afstand}
     {\doifnot{\the\alteller}{1}
        {\hskip\getvalue{\??al#1\c!afstand}}}
     {\doifelse{\the\alteller}{1}%
        {\hskip\getvalue{\??al#1\the\alteller\c!afstand}}
        {\doalinealijn{\getvalue{\??al#1\the\alteller\c!afstand}}{#1}}}%
   \setvalue{#1}{\dostopalinea{#1}}%
   \dostartalinea{#1}}

\def\dostartalineas#1%
  {\global\alteller=0\relax
   \parindent=\!!zeropoint
   \setlocalhsize
   \alhsize=\localhsize
   \alnsize=\getvalue{\??al#1\c!n}\relax
   \dorecurse
     {\getvalue{\??al#1\c!n}}
     {\doifelsevaluenothing{\??al#1\recurselevel\c!afstand}
        {\doifnot{\recurselevel}{1}
           {\global\advance\alhsize by -\getvalue{\??al#1\c!afstand}\relax}}
        {\global\advance\alhsize by -\getvalue{\??al#1\recurselevel\c!afstand}\relax}%
      \doifvaluesomething{\??al#1\recurselevel\c!breedte}
        {\global\advance\alnsize by -1\relax
         \global\advance\alhsize by -\getvalue{\??al#1\recurselevel\c!breedte}\relax}}%
   %\witruimte                 % gaat fout bij \framed
   \getvalue{\??al#1\c!voor}%
   \leavevmode                 % gaat wel goed bij \framed
   \vbox\bgroup\hbox\bgroup
     \doalinea{#1}}

\def\dostopalineas#1%
  {\egroup
   \egroup
   \par
   \getvalue{\??al#1\c!na}}%

%I n=Tabulatie (2)
%I c=\steltabin,\tab
%I
%I Eenvoudige tabulatie is mogelijk met het commando:
%I
%I   \tab{tekst} tekst tekst tekst .....
%I
%I Instelling vindt plaats met het commando:
%I
%I   \steltabin[monster=,breedte=,kopletter=,voor,na=]
%I
%I Dit commando is een vereenvoudigde variant van het
%I commando \doordefinieren. In de regel kan volstaan
%I worden met het opgeven van een monster. Dit is het
%I woord dat de breedte bepaalt.

\def\dosteltabin[#1]%
  {\getparameters[\??ta]
     [\c!kopletter=\v!normaal,
      \c!kopkleur=,
      \c!letter=\v!normaal,
      \c!kleur=,
      \c!breedte=\v!ruim,
      \c!monster={\hskip4em},
      \c!voor=,
      \c!na=,
      #1]%
   \doordefinieren
     [tab]
     [\c!kopletter=\@@takopletter,
      \c!kopkleur=\@@takleur,
      \c!monster=\@@tamonster,
      \c!breedte=\@@tabreedte,
      \c!voor=\@@tavoor,
      \c!na=\@@tana]}

\def\steltabin%
  {\dosingleargument\dosteltabin}

%I n=Diversen
%I c=\celsius,\bedrag,\breuk
%I c=\procent,\promille
%I
%I De volgende commando's vatten (vooral mathematische)
%I zetcommando's samen:
%I
%I   \chem{symbool}{onder}{boven}    chemische symbolen
%I   \celsius{graden}                graden Celsius (..~øC)
%I   \breuk{boven}{onder}            breuken («)
%I   \bedrag{getal}                  geldbedragen (Ÿ~..)
%I   \punten[n]                      puntjes (. . .)
%I   \ongeveer                       plus-minus (ñ)
%I   \inch                           inch ('')
%I   \doorsnede                      \circ doorsneden met /
%I   \graden                         ø (^\circ)
%I   \procent                        percentage (vgl promille)
%I   \promille                       promilage
%I   \dollar                         dollar teken
%I   \sterling                       pound sterling teken
%I   \florijn                        gulden teken

% The following macro's are derived from PPCHTEX and
% therefore take some LaTeX font-switching into account.

\newif\ifloweredsubscripts

% Due to some upward incompatibality of LaTeX to LaTeX2.09
% and/or LaTeX2e we had to force \@@chemieletter. Otherwise
% some weird \nullfont error comes up.

\doifundefined{@@chemieletter}{\def\@@chemieletter{\rm}}

\def\beginlatexmathmodehack%
  {\ifmmode
     \let\endlatexmathmodehack=\relax
   \else
     \def\endlatexmathmodehack{$}$\@@chemieletter
   \fi}

\def\setsubscripts%
  {\beginlatexmathmodehack
   \def\dosetsubscript##1##2##3%
     {\dimen0=##3\fontdimen5##2%
      \setxvalue{@@\string##1\string##2}{\the##1##2\relax}%
      ##1##2=\dimen0\relax}%
   \def\dodosetsubscript##1##2%
     {\dosetsubscript{##1}{\textfont2}{##2}%
      \dosetsubscript{##1}{\scriptfont2}{##2}%
      \dosetsubscript{##1}{\scriptscriptfont2}{##2}}%
   %\dodosetsubscript{\fontdimen14}{?}%
   \dodosetsubscript{\fontdimen16}{.7}%
   \dodosetsubscript{\fontdimen17}{.7}%
   \global\loweredsubscriptstrue
   \endlatexmathmodehack}

\def\resetsubscripts%
  {\ifloweredsubscripts
     \beginlatexmathmodehack
     \def\doresetsubscript##1##2%
       {\dimen0=\getvalue{@@\string##1\string##2}\relax
        ##1##2=\dimen0}%
     \def\dodoresetsubscript##1%
       {\doresetsubscript{##1}{\textfont2}%
        \doresetsubscript{##1}{\scriptfont2}%
        \doresetsubscript{##1}{\scriptscriptfont2}}%
     %\dodoresetsubscript{\fontdimen14}%
     \dodoresetsubscript{\fontdimen16}%
     \dodoresetsubscript{\fontdimen17}%
     \global\loweredsubscriptsfalse
     \endlatexmathmodehack
   \fi}

\let\beginlatexmathmodehack = \relax
\let\endlatexmathmodehack   = \relax

\def\chem#1#2#3%
  {\bgroup
   \setsubscripts
   \mathematics{\hbox{#1}_{#2}^{#3}}%
   \resetsubscripts
   \egroup}

\def\celsius#1%
  {#1\mathematics{^\circ}C}

\def\graden%
  {\mathematics{^\circ}}

\def\inch%
  {\hbox{\rm\char125\relax}}

\def\breuk#1#2%
  {\mathematics{#1\over#2}}

%\def\bedrag#1%
%  {\mathematics{f~}\hbox{#1}}

\def\bedragprefix{\mathematics{f\normalfixedspace}}
\def\bedragsuffix{}

\def\bedrag#1%
  {\strut\hbox\bgroup
   \let\normalfixedspace~%
   \def~{\futurelet\next\dofixedspace}%
   \def\dofixedspace%
     {\hskip.5em\relax
      \ifx\next,%
        \hphantom,\let\next\gobbleoneargument
      \else\ifx\next.%
        \hphantom.\let\next\gobbleoneargument
      \else
        \let\next\relax
      \fi\fi
      \next}%
   \bedragprefix#1\bedragsuffix
   \egroup}

% \definieeralineas[test][n=3]
%
% \stelalineasin[test][3][breedte=4cm,uitlijnen=links]
%
% \startopelkaar
% \test hans \\ ton \\ \bedrag{1.000,--} \\
% \test hans \\ ton \\ \bedrag{~.~~1,--} \\
% \test hans \\ ton \\ \bedrag{~.~~1,~~} \\
% \test hans \\ ton \\ \bedrag{~.100,--} \\
% \test hans \\ ton \\ \subtot{1.000,--} \\
% \test hans \\ ton \\ \bedrag{1.000,--} \\
% \test hans \\ ton \\ \bedrag{1.000,--} \\
% \test hans \\ ton \\ \totaal{1.000,--} \\
% \test hans \\ ton \\ \bedrag{nihil,--} \\
% \test hans \\ ton \\ \totaal{nihil,--} \\
% \test hans \\ ton \\ \subtot{nihil,--} \\
% \stopopelkaar

\def\doorsnede%
  {\hbox{\rlap/$\circ$} }

\def\complexpunten[#1]%
  {\dimen0=.5em\relax
   \multiply\dimen0 by #1\relax
   \hbox to \dimen0
     {\leaders\hbox to .5em{\hss.\hss}\hss}}

\def\simplepunten%
  {\complexpunten[5]}

\definecomplexorsimple\punten

\def\ongeveer%
  {\mathematics{\pm}}

\def\permille%
  {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle00}}}

\def\percent%
  {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle0}}}

\let\promille=\permille
\let\procent =\percent

\def\permine%
  {\dontleavehmode
   \bgroup
   \setbox0=\hbox
     {\mathematics{+}}%
   \hbox to \wd0
     {\hss
      \mathematics{^{\scriptscriptstyle-}\kern-.4em/\kern-.3em_{\scriptscriptstyle-}}%
      \hss}%
   \egroup}

% for compatibility

\def\unknown%
  {\dontleavehmode\punten[3]}

% currency

\def\dollar%
  {\bgroup
   \ifnum\fam=\itfam
     \sl
   \else\ifnum\fam=\bifam
     \bs
   \fi\fi
   \$%
   \egroup}

\def\sterling%
  {\bgroup
   \ifnum\fam=\bffam
     \bi
   \else\ifnum\fam=\bifam
     \bi
   \else\ifnum\fam=\bsfam
     \bi
   \else
     \it
   \fi\fi\fi
   \$%
   \egroup}

\def\florijn%
  {\bgroup
   \ifnum\fam=\bffam
     \bi
   \else\ifnum\fam=\bifam
     \bi
   \else\ifnum\fam=\bsfam
     \bi
   \else
     \it
   \fi\fi\fi
   f%
   \egroup}

%I n=Citaten
%I c=\startcitaat,\citaat,\stelcitatenin
%I c=\citeer,\stelciterenin
%I
%I Als variant op \startsmaller is het volgende commando
%I beschikbaar:
%I
%I   \startcitaat
%I   tekst
%I   \stopcitaat
%I
%I Rond de tekst worden in de marge dubbele quotes
%I geplaatst. Ook bij dit commando kunnen tussen [] maten
%I worden opgegeven:
%I
%I   \startcitaat[2*links,rechts]
%I
%I In de lopende tekst kan gebruik worden gemaakt van:
%I
%I   \citaat{tekst}
%I   \citeer{tekst}
%I
%I Het eerste commando levert dubbele quotes en het tweede
%I enkele quotes.
%P
%I Er zijn twee varianten (1 en 2) beschikbaar die kunnen
%I worden ingesteld met:
%I
%I   \stelciterenin
%I     [letter=]

\newsignal\quotationsignal
\def\quotationskip{.125em}

\def\stelciterenin%
  {\dodoubleargument\getparameters[\??ci]}

\def\stelcitatenin%
  {\stelciterenin}

\def\dostartcitaat[#1]%
  {\bgroup
   \@@civoor
   \doifelsenothing{#1}
     {\let\dostopcitaat=\relax}
     {\startsmaller[#1]
      \let\dostopcitaat=\stopsmaller}%
   \dostartattributes\??ci\c!letter\c!kleur{}%
   \setbox0=\hbox{\getvalue{\??la\currentlanguage\c!leftquotation}}%
   \hskip-\wd0
   \box0\relax
   \ignorespaces}

\def\stopcitaat%
  {\unskip\hsmash{\getvalue{\??la\currentlanguage\c!rightquotation}}%
   \dostopattributes
   \dostopcitaat
   \@@cina
   \egroup}

\def\startcitaat%
  {\dosingleempty\dostartcitaat}

% \def\dohandlequotation#1%
%   {\ifdim\lastkern=\quotationsignal
%      \unskip
%      \hskip\quotationskip
%    \fi
%    \strut % new, needed below 
%    \getvalue{\??la\currentlanguage#1}%
%    \kern\quotationsignal}

%D Better hyphenation (\prewordbreak look alike added):

\def\dohandlequotation#1%
  {\ifdim\lastskip=\quotationsignal
     \unskip\hskip\quotationskip
   \fi
   \penalty\!!tenthousand\hskip\!!zeropoint      % == \prewordbreak
   \strut % new, needed below 
   \getvalue{\??la\currentlanguage#1}%
   \penalty\!!tenthousand\hskip\quotationsignal} % +- \prewordbreak

\unexpanded\def\citaat%
  {\groupedcommand
     {\dohandlequotation\c!leftquotation}
     {\dohandlequotation\c!rightquotation}}

\unexpanded\def\citeer%
  {\doifelse{\@@ciletter}{\v!normaal}
     {\let\next=\doquotedcite}
     {\let\next=\doattributedcite}%
   \next}

\def\doquotedcite%
  {\groupedcommand
     {\dohandlequotation\c!leftquote}
     {\dohandlequotation\c!rightquote}}

\def\doattributedcite%
  {\groupedcommand
     {\dostartattributes\??ci\c!letter\c!kleur}
     {\dostopattributes}}

% The previous one fails in \placefloat[left]{}{}, so instead
% we use the next alternative, where the first one is handled 
% outside group. Watch the strut. 

\unexpanded\def\citaat%
  {\dohandlequotation\c!leftquotation
   \groupedcommand{}{\dohandlequotation\c!rightquotation}}

\def\doquotedcite%
  {\dohandlequotation\c!leftquote
   \groupedcommand{}{\dohandlequotation\c!rightquote}}

% Tijden horen hier niet thuis en zullen in een aparte
% module worden ondergebracht. voorlopig handhaven we ze nog
% even. Een implementatie met \doordefinieren zou beter voldoen
% omdat een en ander dan instelbaar wordt. Het is trouwens
% zowieso beter het commando \tijd te reserveren voor de
% systeemtijd.

\def\tijd#1%
  {\setbox0=\hbox{00.00}%
   \hbox to \wd0{\hfill#1}}

\def\tijdspan#1#2%
  {\hbox{\tijd{#1}~---~\tijd{#2}}}

\def\activiteit#1#2%
  {\activity{\tijdspan{#1}{#2}}}

\def\activiteit#1#2%
  {\sym{\tijdspan{#1}{#2}}}

%I n=Toevoegen
%I c=\toevoegen
%I
%I Er kan witruimte worden gemarkeerd met het commando:
%I
%I   \toevoegen[instelling]{korte tekst}
%I
%I waarbij als instellingen mogelijk zijn: klein, middel of
%I groot.

\def\dotoevoegen#1%
  {\def\next{#1}%
   \herhaal[#1*{\inlinker{\next~+}\def\next{}\crlf}]}

\def\complextoevoegen[#1]%
  {\blanko
   \processaction
     [#1]
     [   \v!klein=>\dotoevoegen{3},
        \v!middel=>\dotoevoegen{6},
         \v!groot=>\dotoevoegen{9},
     \s!default=>\dotoevoegen{6},
     \s!unknown=>\dotoevoegen{#1}]
   \blanko}

\definecomplexorsimpleempty\toevoegen

%I n=Roosters
%I c=\rooster
%I
%I Er kunnen roosters (te vergelijken met ruitjespapier)
%I worden gemaakt met:
%I
%I   \rooster[nx=,ny=,dx=,dy=,eenheid=,xstap=,ystap=,
%I     offset=,schaal=,factor=]
%I
%I De instelling [nx=20,ny=20,dx=.5,dy=.5,eenheid=cm] levert
%I een patroon van 10cm bij 10cm van hokjes van 0.5cm op.
%I
%I Met '.stap' kunnen getallen langs de assen worden gezet.
%I als 0 wordt ingevuld (default), dan worden geen getallen
%I gezet. Met offset (ja of nee) kan men aangeven of de
%I getallen langs de assen binnen of buiten de box rond
%I het rooster vallen (vergelijk \stelpositionerenin).
%I
%I !! Dit commando wordt nog aangepast/uitgebreid. !!

\def\dorooster[#1]%
  {\begingroup
   \getparameters[\??rt]
     [\c!x=0,\c!y=0,
      \c!nx=10,\c!ny=10,
      \c!dx=.5,\c!dy=.5,
      \c!xstap=0,\c!ystap=0,
      \c!eenheid=\s!cm,
      \c!schaal=1,
      \c!factor=1,
      \c!offset=\v!ja,
      \c!plaats=\v!links,
      #1]%
   \startpositioneren
     \dimen0=\@@rtdx\@@rteenheid\relax
     \dimen0=\@@rtschaal\dimen0\relax
     \dimen0=\@@rtfactor\dimen0\relax
     \multiply\dimen0 by \@@rtnx\relax
     \dimen2=\@@rtdy\@@rteenheid\relax
     \dimen2=\@@rtschaal\dimen2\relax
     \dimen2=\@@rtfactor\dimen2\relax
     \multiply\dimen2 by \@@rtny\relax
     \def\horline
       {\vbox
          {\hrule
             \!!width \dimen0
             \!!height \linewidth
             \!!depth \!!zeropoint}}%
     \def\verline%
       {\vrule
          \!!width \linewidth
          \!!height \dimen2
          \!!depth \!!zeropoint}%
     \doglobal\newcounter\@@roosterc
     \doglobal\newcounter\@@roosterd
     \doglobal\newcounter\@@roostere
     \def\setlegend##1##2##3%
       {\gdef\@@roosterc{0}%
        \dimen0=2em\relax
        \dimen2=##2\@@rteenheid\relax
        \dimen2=\@@rtschaal\dimen2\relax
        \dimen2=\@@rtfactor\dimen2\relax
        \divide\dimen0 by \dimen2\relax
        \xdef\@@roostere{\number\dimen0}%
        \ifnum\@@roostere>50
          \gdef\@@roostere{100}%
        \else\ifnum\@@roostere>10
          \gdef\@@roostere{50}%
        \else\ifnum\@@roostere>5
          \gdef\@@roostere{10}%
        \else\ifnum\@@roostere>1
          \gdef\@@roostere{5}%
        \else
          \gdef\@@roostere{1}%
        \fi\fi\fi\fi
        \gdef\@@roosterd{0}%
        \def\legend%
          {\ifnum\@@roosterd=0\relax
             \vbox
               {\increment(\@@roosterc,##1)%
                \hbox to 2em{\hss\@@roosterc\hss}}%
             \global\let\@@roosterd=\@@roostere
           \fi
             \doglobal\decrement\@@roosterd
             \doglobal\increment(\@@roosterc,##1)}}%
     \def\draw##1##2##3##4##5##6##7##8##9%
       {\stelpositionerenin
          [\c!status=##8,
           \c!xstap=\v!absoluut,
           \c!ystap=\v!absoluut,
           \c!eenheid=\@@rteenheid,
           \c!schaal=\@@rtschaal,
           \c!factor=\@@rtfactor,
           \c!offset=\@@rtoffset,
           \c!xoffset=##6,
           \c!yoffset=##7]%
        \doifelse{##9}{\v!midden}
          {\scratchdimen=##3pt\scratchdimen=.5\scratchdimen
           \edef\@@psxx{\withoutpt\the\scratchdimen}%
           \scratchdimen=##4pt\scratchdimen=.5\scratchdimen
           \edef\@@psyy{\withoutpt\the\scratchdimen}%
           \scratchcounter=##2\advance\scratchcounter by -1
           \edef\@@pszz{\the\scratchcounter}}
          {\edef\@@psxx{0}\edef\@@psyy{0}\edef\@@pszz{##2}}%
        \positioneer(\@@psxx,\@@psyy){##1}%
        \stelpositionerenin
          [\c!status=##8,
           \c!xstap=\v!relatief,
           \c!ystap=\v!relatief,
           \c!schaal=\@@rtschaal,
           \c!factor=\@@rtfactor,
           \c!offset=\@@rtoffset,
           \c!eenheid=\@@rteenheid]%
        \dorecurse{\@@pszz}{\positioneer(##3,##4){##5}}}%
     \draw
       \verline\@@rtnx\@@rtdx0\verline\!!zeropoint\!!zeropoint\v!start\empty
     \draw
       \horline\@@rtny0\@@rtdy\horline\!!zeropoint\!!zeropoint\v!start\empty
     \tfx
     \doifnot{\@@rtxstap}{0}
       {\setlegend\@@rtxstap\@@rtdx\@@rtx
        \draw\legend\@@rtnx\@@rtdx0\legend{-1em}{-1.5em}\v!overlay\@@rtplaats}%
     \doifnot{\@@rtystap}{0}
       {\setlegend\@@rtystap\@@rtdy\@@rty
        \draw\legend\@@rtny0\@@rtdy\legend{-2em}{-.75ex}\v!overlay\@@rtplaats}%
  \stoppositioneren
  \endgroup}

\def\rooster%
  {\dosingleempty\dorooster}

%I n=Literatuurlijsten
%I c=\stelpublicatiesin,\startpublicatie,\publicatie
%I
%I Literatuurlijsten kunnen worden opgemaakt met het commando:
%I
%I \startpublicatie[referentie]
%I   \naam ....
%I   \titel ....
%I   \jaar ....
%I   \plaats ....
%I   \uitgever ....
%I \stoppublicatie
%I
%I Een publicatie wordt opgeroepen met:
%I
%I   \publicatie[referentie]
%P
%I Het formaat kan worden ingesteld met het commando:
%I
%I   \stelpublicatiesin[variant=,voor=,na=,nummeren=,
%I     breedte=,kopletter=,links=,rechts=]
%I
%I waarbij mogelijke varianten zijn: normaal apa en normaal.
%I Nummeren kan 'ja' of 'nee' zijn; links en rechts
%I hebben betrekking op de weergave in de tekst en zijn
%I standaard [ en ].

% Dit wordt:
%
%   \doorverwijzen[naam][instellingen] enz.
%
% waarbij <naam> bijvoorbeeld publicatie is. Dit levert:
%
%   \start<naam>
%   \stop<naam>
%
%   \beginvan<naam>
%   \eindvan<naam>
%
%   \publicatie
%
%   \volledigelijstmetpublicaties
%
% eigenlijk kan ook door... zo worden uitgebreid!

\doornummeren
  [@publicatie]
  [\c!plaats=\v!links,
   \c!breedte=\@@pbbreedte,\c!hang=,\c!monster=,
   \c!voor=\@@pbvoor,\c!na=\@@pbna,\c!tussen=,
   \c!kopletter=\@@pbkopletter,\c!letter=,
   \c!kopkleur=\@@pbkopkleur,\c!kleur=,
   \c!wijze=\@@pbwijze,\c!blokwijze=\@@pbblokwijze,
   \c!tekst=,\c!links=\@@pblinks,\c!rechts=\@@pbrechts]

\def\dostelpublicatiesin[#1]%
  {\getparameters[\??pb][#1]}

\def\stelpublicatiesin%
  {\dosingleargument\dostelpublicatiesin}

\def\apa@publicatie%
  {\doifsomething{\@@pb@naam}{\@@pb@naam,\spatie}%
   \doifsomething{\@@pb@titel}{{\sl\@@pb@titel}.\spatie}%
   \doifsomething{\@@pb@jaar}{(\@@pb@jaar).\spatie}%
   \doifsomething{\@@pb@plaats}{\@@pb@plaats\doifelsenothing{\@@pb@uitgever}{.}{:\spatie}}%
   \doifsomething{\@@pb@uitgever}{\@@pb@uitgever.}}

\def\normaal@publicatie%
  {\@@pb@naam, \@@pb@titel, \@@pb@jaar, \@@pb@pagina, \@@pb@plaats, \@@pb@uitgever.}

\def\complexstartpublicatie[#1]#2\stoppublicatie%
  {\bgroup%
   \def\dosetpublicatie%
     {\processcommalist
        [naam,titel,jaar,plaats,pagina,uitgever]
        \setpublicatie
      \ignorespaces}%
   \def\setpublicatie##1%
      {\setvalue{\??pb @##1}{}%
       \setvalue{##1}####1{\setvalue{\??pb @##1}{####1}\ignorespaces}}%
   \def\getpublicatie%
     {\doifsomething{\@@pbvariant}{\getvalue{\@@pbvariant @publicatie}}}%
   \doifelse{\@@pbnummeren}{\v!ja}%
      {\@publicatie[#1]\dosetpublicatie#2\getpublicatie\par}%
      {\@@pbvoor
       \dosetpublicatie\ignorespaces#2\getpublicatie
       \@@pbna}%
   \egroup}

\definecomplexorsimpleempty\startpublicatie

\def\publicatie#1[#2]%
  {\@@pblinks\in{#1}[#2]\@@pbrechts}

%I n=Kenmerken
%I c=\kenmerk,\kenmerkdatum
%I
%I Er kan een kenmerk worden gezet met het commando:
%I
%I   \kenmerk[bet=,ken=,dat=,van=,aan=,ref=]
%I
%I waarbij de verplichte parameters staan voor 'betreft',
%I 'kenmerk' en 'datum' en de optionele voor 'van', 'aan' en
%I 'referentie'.
%I
%I Een kenmerk-datum kan worden gezet met het commando:
%I
%I   \kenmerkdatum
%I
%I zodat een kenmerk er bijvoorbeeld uitziet als:
%I
%I   \kenmerk
%I     [bet=rekening eerste termijn,
%I      ken=\kenmerkdatum.sork.gvk / afo,
%I      dat=\currentdate]

\def\kenmerkdatum%
  {\currentdate[\v!kenmerk]}

% \def\dokenmerk[#1]%
%    {\geenhoofdenvoetregels
%     \getparameters
%       [\??km]
%       [\c!bet=\unknown,
%        \c!dat=\unknown,
%        \c!ken=\unknown,
%        \c!van=,
%        \c!aan=,
%        \c!ref=,
%        #1]%
%     \bgroup  % moet anders, hoort niet in 01b
%     \assigntranslation[nl=referentie,en=reference,du=Referenz,sp=referencia]\to\@@@kmref
%     \assigntranslation[nl=van,en=from,du=Von,sp=de]\to\@@@kmvan
%     \assigntranslation[nl=aan,en=to,du=An,sp=a]\to\@@@kmaan
%     \assigntranslation[nl=betreft,en=concerns,du=Betreff,sp=]\to\@@@kmbet
%     \assigntranslation[nl=datum,en=date,du=Datum,sp=fecha]\to\@@@kmdat
%     \assigntranslation[nl=kenmerk,en=mark,du=Kennzeichen,sp=]\to\@@@kmken
%     \doifelsenothing{\@@kmvan\@@kmaan}
%       {\def\@@dokmvanaan{}}
%       {\def\@@dokmvanaan{&\omit\cr}}%
%     \doifelsenothing{\@@kmvan}
%       {\def\@@dokmvan{}}
%       {\def\@@dokmvan{\@@@kmvan&\@@kmvan\cr}}%
%     \doifelsenothing{\@@kmaan}
%       {\def\@@dokmaan{}}
%       {\def\@@dokmaan{\@@@kmaan&\@@kmaan\cr}}%
%     \doifelsenothing{\@@kmref}
%       {\def\@@dokmref{}}
%       {\def\@@dokmref{&\omit\cr\@@@kmref&\@@kmref\cr}}%
%     \witruimte
%     \tabskip=\!!zeropoint
%     \noindent\halign
%       \bgroup
%       ##~&:~##\hfil\cr
%       \@@@kmbet&\@@kmbet\cr
%       \@@@kmdat&\@@kmdat\cr
%       \@@@kmken&\kap{\@@kmken}\cr
%       \@@dokmvanaan
%       \@@dokmvan
%       \@@dokmaan
%       \@@dokmref
%       \egroup
%     \egroup}

\def\dokenmerk[#1]%
   {\geenhoofdenvoetregels
    \bgroup  
    \getparameters
      [\??km]
      [\c!bet=\unknown,\c!dat=\unknown,\c!ken=\unknown,
       \c!van=,        \c!aan=,        \c!ref=,        #1]%
    % moet anders, hoort niet in 01b
    \assigntranslation[nl=referentie,en=reference,du=Referenz,   sp=referencia]\to\@@@kmref
    \assigntranslation[nl=van,       en=from,     du=Von,        sp=de]\to\@@@kmvan
    \assigntranslation[nl=aan,       en=to,       du=An,         sp=a]\to\@@@kmaan
    \assigntranslation[nl=betreft,   en=concerns, du=Betreff,    sp=]\to\@@@kmbet
    \assigntranslation[nl=datum,     en=date,     du=Datum,      sp=fecha]\to\@@@kmdat
    \assigntranslation[nl=kenmerk,   en=mark,     du=Kennzeichen,sp=]\to\@@@kmken
    %
    \definetabulate[\s!dummy][|le|p|]    
    \startdummy
      \NC\@@@kmbet\NC\@@kmbet\NC\NR
      \NC\@@@kmdat\NC\@@kmdat\NC\NR
      \NC\@@@kmken\NC\kap{\@@kmken}\NC\NR
      \doifsomething{\@@kmvan\@@kmaan}{\NC\NC\NC\NR}%
      \doifsomething{\@@kmvan}{\NC\@@@kmvan\NC\@@kmvan\NC\NR}%
      \doifsomething{\@@kmaan}{\NC\@@@kmaan\NC\@@kmaan\NC\NR}%
      \doifsomething{\@@kmref}{\NC\NC\NC\NR\NC\@@@kmref\NC\@@kmref\NC\NR}%
    \stopdummy
    \egroup}

\def\kenmerk%
  {\dosingleargument\dokenmerk}

% NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW
% NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW

\def\??ri{@@ri}

\def\stelrijenin%
  {\dodoubleargument\getparameters[\??ri]}

\def\complexstartrijen[#1]%
  {\bgroup
   \stelrijenin[#1]%
   \let\do@@rionder=\relax
   \def\rij%
     {\do@@rionder
      \egroup
      \dimen0=\vsize
      \divide\dimen0 by \@@rin
      \advance\dimen0 by -\lineskip
      \vbox to \dimen0
        \bgroup
        \@@riboven
        \let\do@@rionder=\@@rionder
        \ignorespaces}%
   \bgroup
   \rij}

\definecomplexorsimpleempty\startrijen

\def\stoprijen%
  {\do@@rionder
   \egroup
   \egroup}

\stelrijenin
  [n=2,
   boven=,
   onder=\vfill]

% NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW
% NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW

% Standaardinstellingen

\stelitemsin
  [\c!plaats=\v!links,
   \c!symbool=5,
   \c!breedte=\hsize,
   \c!uitlijnen=\v!midden,
   \c!n=\v!onbekend,
   \c!voor=\blanko,
   \c!tussen={\blanko[\v!middel]},
   \c!na=\blanko]

\steltabin
  [\c!plaats=\v!links]

\stelpublicatiesin
  [\c!nummeren=\v!ja,
   \c!variant=\c!apa,
   \c!breedte=2em,
   \c!hang=,
   \c!monster=,
   \c!voor=,
   \c!na=,
   \c!tussen=,
   \c!kopletter=,
   \c!kopkleur=,
   \c!letter=,
   \c!kleur=,
   \c!blokwijze=\v!per\v!tekst,
   \c!wijze=\v!per\v!tekst,
   \c!tekst=,
   \c!links={[},
   \c!rechts={]}]

\stelciterenin
  [\c!letter=\v!normaal,
   \c!kleur=,
   \c!voor=\startsmaller,
   \c!na=\stopsmaller]

\protect

\endinput
