summaryrefslogtreecommitdiff
path: root/tex/context/base/strc-des.mkii
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
committerMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
commit85b7bc695629926641c7cb752fd478adfdf374f3 (patch)
tree80293f5aaa7b95a500a78392c39688d8ee7a32fc /tex/context/base/strc-des.mkii
downloadcontext-85b7bc695629926641c7cb752fd478adfdf374f3.tar.gz
stable 2010-05-24 13:10
Diffstat (limited to 'tex/context/base/strc-des.mkii')
-rw-r--r--tex/context/base/strc-des.mkii921
1 files changed, 921 insertions, 0 deletions
diff --git a/tex/context/base/strc-des.mkii b/tex/context/base/strc-des.mkii
new file mode 100644
index 000000000..0c34e9ef9
--- /dev/null
+++ b/tex/context/base/strc-des.mkii
@@ -0,0 +1,921 @@
+%D \module
+%D [ file=strc-des,
+%D version=1997.03.31,
+%D title=\CONTEXT\ Structure Macros,
+%D subtitle=Descriptions,
+%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.
+
+\writestatus{loading}{ConTeXt Structure Macros / Descriptions}
+
+%D In order to be more flexible with theorems Aditya Mahajan added
+%D support for titles and endsymbols. At the same time we some more
+%D flexible support for inheriting numbers was added.
+
+%D \startbuffer
+%D \defineenumeration[one]
+%D \defineenumeration[two] [one]
+%D \defineenumeration[three] [number=one,style=slanted]
+%D \defineenumeration[four] [three]
+%D \defineenumeration[five] [three] [number=five]
+%D
+%D \startone test test 1 \stopone
+%D \starttwo test test 2 \stoptwo
+%D \startthree test test 3 \stopthree
+%D \startfour test test 4 \stopfour
+%D \startfive test test 1 \stopfive
+%D \stopbuffer
+%D
+%D \typebuffer \start \getbuffer \stop
+
+\unprotect
+
+% Dit kan en moet dus anders:
+%
+% \start... : \vbox\bgroup
+% \stop... : \egroup
+% llap enz.
+% geen indent!
+%
+% enz. enz.
+%
+% Op die manier is meer mogelijk en worden \par's geskipt.
+%
+% De macro \??dd#1\s!do\c!commando levert de koppeling tussen
+% \doornumberen en \doordefinieren. Deze constructie is nodig
+% omdat doornummeren geen argument heeft en omdat subnummers
+% niet worden genest binnen het hogere niveau.
+%
+% herimplementeren met \nextbox en \unhbox\unvbox
+
+% list and titles are experiental
+%
+% \definedescription[test] [location=left,hang=4,headalign={right},distance=1em,list=test]
+% \defineenumeration[lemma][title=yes,right=:,textdistance=1em, location=top, titlestyle=\bs,list=lemma]
+% \defineenumeration[ammel][title=yes,right=:,textdistance=.5em,location=left,titlestyle=\it,width=9em]
+%
+% \placelist[enumeration:lemma]
+% \placelist[description:test][width=0pt]
+%
+% \starttest {something something something} \input zapf \stoptest
+% \startlemma {with a title of a certain length} \input tufte \stoplemma
+% \startammel {with a title} \input zapf \stopammel
+%
+% \defineenumeration[lemma][...]
+% \defineenumeration[titledlemma][lemma][title=yes,right=:,text=lemma,list=lemma]
+
+\newbox\@@descriptionbox
+
+\def\descriptionparameter#1{\csname\??dd\currentdescription#1\endcsname}
+
+\def\@@descriptionhandler{\descriptionparameter{\s!do\c!command}}
+
+% \def\normal@@descriptionhandler[#1]#2#3%
+% {\doattributes
+% {\??dd\currentdescription}\c!headstyle\c!headcolor
+% {\descriptionparameter\c!command{#3}}% NAAR BUITENSTE NIVEAU !
+% \rawreference\s!def{#1}{#2}} % brrr moet in #4
+
+\def\normal@@descriptionhandler[#1]#2#3%
+ {\doattributes
+ {\??dd\currentdescription}\c!headstyle\c!headcolor
+ {\descriptionparameter\c!command{#3}}% NAAR BUITENSTE NIVEAU !
+ \doifsomething{\descriptionparameter\c!list}
+ {\dowritetolist
+ {\descriptionparameter\c!type:\descriptionparameter\c!list}
+ {}{#2}{\currentdescription}}%
+ % beware: with footnotes #2 can be something messy but then #1 is
+ % empty anyway, so we have an extra safeguard
+ \doifsomething{#1}{\rawreference\s!def{#1}{#2}}} % brrr moet in #4
+
+\setvalue{@@description\v!left}%
+ {\@@descriptionhang\@@descriptionleftpure\@@descriptionlefthang}
+
+\setvalue{@@description\v!right}%
+ {\@@descriptionhang\@@descriptionrightpure\@@descriptionrighthang}
+
+\def\@@descriptionhang#1#2%
+ {\processaction
+ [\descriptionparameter\c!hang]
+ [ \v!none=>\let\next#1,%
+ 0=>\let\next#1,%
+ \s!unknown=>\let\next#2,%
+ \s!default=>\let\next#1]%
+ \next}
+
+\def\@@descriptionleftpure[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}%
+ \noindent\ignorespaces
+ \leftskip\@@leftdescriptionskip
+ \rightskip\@@rightdescriptionskip
+ \advance\leftskip \!!widtha
+ \@@makedescriptionpurebox\raggedright
+ \advance\leftskip \!!widthb
+ \llap
+ {\hbox to \leftskip
+ {\hskip\@@leftdescriptionskip
+ \copy\@@descriptionbox\hss}}%
+ \@@dodescription}
+
+\def\@@descriptionrightpure[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}%
+ \noindent\ignorespaces
+ \leftskip\@@leftdescriptionskip
+ \rightskip\@@rightdescriptionskip
+ \advance\rightskip \!!widtha
+ \@@makedescriptionpurebox\raggedleft
+ \rlap
+ {\hskip\hsize
+ \hskip-\leftskip
+ \hskip-\rightskip
+ \copy\@@descriptionbox
+ \hskip\@@rightdescriptionskip}%
+ \advance\rightskip \!!widthb
+ \@@dodescription}
+
+\def\@@makedescriptionpurebox#1%
+ {\setbox\@@descriptionbox\vtop
+ {\dontcomplain
+ \hsize\!!widtha
+ \leftskip\zeropoint
+ \rightskip\zeropoint
+ #1\setupalign[\descriptionparameter\c!align]%
+ \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}%
+ \ht\@@descriptionbox\strutht
+ \dp\@@descriptionbox\strutdp}
+
+\def\@@descriptionlefthang[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}%
+ \dontcomplain
+ \advance\!!widtha \!!widthb
+ \hangindent\!!widtha
+ \@@makedescriptionhangbox\raggedright{\advance\rightskip \!!widthb}%
+ \noindent\ignorespaces
+ \llap
+ {\dontshowcomposition
+ \vtop to \zeropoint{\box\@@descriptionbox}}%
+ \@@dodescription}
+
+\def\@@descriptionrighthang[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}%
+ \dontcomplain
+ \advance\!!widtha \!!widthb
+ \hangindent-\!!widtha
+ \@@makedescriptionhangbox\raggedleft{\advance\leftskip \!!widthb}%
+ \noindent\ignorespaces
+ \rlap
+ {\dontcomplain
+ \dontshowcomposition
+ \scratchdimen\hsize
+ \advance\scratchdimen -\leftskip
+ \advance\scratchdimen -\rightskip
+ \hbox to \scratchdimen
+ {\hss\vtop to \zeropoint{\box\@@descriptionbox}}}%
+ \@@dodescription}
+
+\def\@@makedescriptionhangbox#1#2%
+ {\setbox\@@descriptionbox\vtop % \vbox gaat fout in hang
+ {\forgetall
+ \dontcomplain
+ \hsize\!!widtha
+ #1\setupalign[\descriptionparameter\c!align]#2%
+ \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}%
+ \ht\@@descriptionbox\strutht
+ \dp\@@descriptionbox\strutdp
+ \doifsomething{\descriptionparameter\c!hang}
+ {\doifinsetelse{\descriptionparameter\c!hang}{\v!fit,\v!broad}
+ {\scratchdimen\ht\@@descriptionbox
+ \advance\scratchdimen \dp\@@descriptionbox
+ \doif{\descriptionparameter\c!hang}\v!broad
+ {\advance\scratchdimen .5\strutht}%
+ \getnoflines\scratchdimen
+ \hangafter-\noflines}
+ {\hangafter-\descriptionparameter\c!hang}}}
+
+\setvalue{@@description\v!top}[#1]#2%
+ {%\page[\v!preference]% % Weg ermee!
+ %\dosomebreak{\goodbreak}% % Dit is beter en nodig!
+ \dohandlepagebreakX\plusone % En dit moet het maar worden.
+ \@@dostartdescription[#1]{\let\\=\space}{#2}%
+ \noindent\ignorespaces
+ \copy\@@descriptionbox\par
+ \nobreak
+ \descriptionparameter\c!inbetween
+ \nobreak
+ \@@dodescription}
+
+\def\do@@description#1[#2]#3%
+ {\@@dostartdescription[#2]{\def\\{\crlf}}{#3}%
+ \noindent\ignorespaces % not needed this ignore
+ #1{\ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}%
+ \@@dodescription}
+
+\setvalue{@@description\v!inmargin }{\do@@description\inmargin}
+\setvalue{@@description\v!inleft }{\do@@description\inleft }
+\setvalue{@@description\v!inright }{\do@@description\inright }
+\setvalue{@@description\v!margin }{\do@@description\inmargin}
+\setvalue{@@description\v!leftmargin }{\do@@description\inleft }
+\setvalue{@@description\v!rightmargin }{\do@@description\inright }
+\setvalue{@@description\v!innermargin }{\do@@description\ininner }
+\setvalue{@@description\v!outermargin }{\do@@description\inouter }
+
+\setvalue{@@description\v!serried\v!fit}[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}%
+ \noindent\ignorespaces
+ \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox
+ \hskip\!!widthb % toegevoegd
+ \@@dodescription}
+
+\setvalue{@@description\v!serried\v!broad}[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}%
+ \noindent\ignorespaces
+ \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox
+ \hskip\!!widthb \!!plus .5\!!widthb \!!minus .25\!!widthb
+ \@@dodescription}
+
+\setvalue{@@description\v!serried\v!wide}[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}%
+ \noindent\ignorespaces
+ \hbox to \!!widtha
+ {\ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox\hss}%
+ \hskip\!!widthb
+ \ignorespaces
+ \@@dodescription}
+
+\setvalue{@@description\v!serried}[#1]#2%
+ {\processaction
+ [\descriptionparameter\c!width]
+ [ \v!fit=>\let\next\v!fit,
+ \v!broad=>\let\next\v!broad,
+ \s!unknown=>\let\next\v!wide,
+ \s!default=>\let\next\v!broad]%
+ \getvalue{@@description\v!serried\next}[#1]{#2}}
+
+\setvalue{@@description\v!hanging}[#1]#2%
+ {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% % adds \c!margin to \leftskip
+ \noindent\ignorespaces
+ \advance\leftskip -\leftskipadaption \relax
+ \ifdim\leftskipadaption=\zeropoint
+ \leftskipadaption1.5em % just some default
+ \ifnum\nesteddescriptionstate=\plusone
+ \ifdim\leftskip>\zeropoint \relax
+ \leftskipadaption\leftskip
+ \fi
+ \fi
+ \fi
+ \ifnum\nesteddescriptionstate>\zerocount % was \ifnum\nesteddescriptionstate=\plusone
+ \advance\leftskip \leftskipadaption % but we're already further on
+ \fi
+ \hskip-\leftskipadaption
+ \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox
+ \kern\ifdim\!!widthb=\zeropoint .75em\else\!!widthb\fi
+ \ignorespaces
+ \@@dodescription}
+
+%D A bonus definition
+%D
+%D \starttyping
+%D \setupfootnotedefinition[location=command,headcommand=\llap]
+%D \stoptyping
+
+\setvalue{@@description\v!command}#1%
+ {\do@@description{\executeifdefined{\??dd#1\c!headcommand}\framed}{#1}}
+
+%D A new key 'headalign' in definitions.
+
+\def\resetdescriptions % to be used in e.g. footnotes
+ {\chardef\nesteddescriptionstate\zerocount}
+
+\resetdescriptions
+
+\let\@@leftdescriptionskip \!!zeropoint
+\let\@@rightdescriptionskip\!!zeropoint
+
+\def\@@dostartdescription[#1]#2#3%
+ {\descriptionparameter\c!before
+ \begingroup
+ \doadaptleftskip{\descriptionparameter\c!margin}%
+ \showcomposition
+ \!!widthb\descriptionparameter\c!distance\relax
+ \ifdim\!!widthb=\zeropoint\relax
+ \doif{\descriptionparameter\c!width}\v!broad{\!!widthb=1em}%
+ \fi
+ % temp hack, we need to avoid this kind of preprocessing
+ \setbox\@@descriptionbox\hbox % preroll
+ {\forgetall
+ \trialtypesettingtrue
+ \dontcomplain
+ #2% sets \\ to space or \crlf
+ \@@descriptionhandler[#1]{#3}{\begstrut\descriptionparameter\c!text\ignorespaces#3\endstrut}}%
+ % so far
+ \assignwidth
+ \!!widtha
+ {\descriptionparameter\c!width}%
+ {\doifelsenothing{\descriptionparameter\c!sample}%
+ {% preroll can move here (test first)
+ \ifhbox\@@descriptionbox\unhcopy\else\copy\fi \@@descriptionbox}%
+ {\@@descriptionhandler[#1]{#3}{\descriptionparameter\c!text\descriptionparameter\c!sample}}}
+ \!!widthb
+ \setbox\@@descriptionbox\hbox
+ {\forgetall
+ \dontcomplain
+ #2% sets \\ to space or \crlf
+ \doifelse{\descriptionparameter\c!location}\v!serried
+ {\@@descriptionhandler[#1]{#3}{\begstrut\descriptionparameter\c!text#3\endstrut}}
+ {\@@descriptionhandler[#1]{#3}{\vtop{\hsize\!!widtha\advance\hsize-\!!widthb
+ \begstrut\descriptionparameter\c!text\ignorespaces#3\endstrut}}}}%
+ \doifelse{\descriptionparameter\c!aligntitle}\v!no
+ {\edef\@@leftdescriptionskip {\the\leftskip }%
+ \edef\@@rightdescriptionskip{\the\rightskip}}
+ {\ifcase\nesteddescriptionstate
+ \edef\@@leftdescriptionskip {\the\leftskip }%
+ \edef\@@rightdescriptionskip{\the\rightskip}%
+ \fi}%
+ \expanded{\indenting[\descriptionparameter\c!indenting]}%
+ % better a system mode
+ \ifcase\nesteddescriptionstate
+ \chardef\nesteddescriptionstate\plusone
+ \or
+ \chardef\nesteddescriptionstate\plustwo
+ \fi% now happens elsewhere : \noindent\ignorespaces
+ \@@resetdescriptionclosesymbol}
+
+\def\@@stopdescription#1%
+ {\def\currentdescription{#1}%
+ \@@placedescriptionclosesymbol
+ % was \par \dostopattributes % here, else problems with interlinespace and font change
+ \dostopparbasedattributes % == \settrue\parbasedattributes \dostopattributes
+ \endgroup
+ \descriptionparameter\c!after %hm, which currentdescription?
+ \egroup % temporary hack
+ \def\currentdescription{#1}%
+ \dochecknextindentation{\??dd\currentdescription}%
+ \dorechecknextindentation}
+
+\def\@@dodescription
+ {\dostartattributes{\??dd\currentdescription}\c!style\c!color\empty
+ \ignorespaces}
+
+% starters:
+
+\def\@@startdescription[#1][#2]%
+ {\def\currentdescription{#1}%
+ \doifelse{\descriptionparameter\c!title}\v!yes
+ % {\dowithwargument{\@@startsomedescription{#1}[#2]}} % patched for theorems
+ {\permitspacesbetweengroups
+ \dodoublegroupempty{\@@startsomedescription{#1}[#2]}}
+ {\@@startsomedescription{#1}[#2]{}}}
+
+\def\@@description[#1][#2]%
+ {\def\currentdescription{#1}%
+ \doifelse{\descriptionparameter\c!title}\v!yes
+ % {\dowithwargument{\@@somedescription{#1}[#2]}} % patched for theorems
+ {\permitspacesbetweengroups
+ \dodoublegroupempty{\@@somedescription{#1}[#2]}}
+ {\@@somedescription{#1}[#2]{}}}
+
+% these call:
+
+\def\@@somedescription#1[#2]#3%
+ {\dowithpar
+ {\bgroup\@@makedescription{#1}[#2]{#3}}%
+ {\@@stopdescription{#1}}}
+
+\def\@@startsomedescription#1[#2]#3%
+ {\bgroup % temporary hack
+ \BeforePar{\@@makedescription{#1}[#2]{#3}}%
+ \GotoPar}
+
+% which calls:
+
+\def\@@makedescription#1%
+ {\postponenotes % new, assumes grouping
+ \def\currentdescription{#1}%
+ \executeifdefined
+ {@@description\descriptionparameter\c!location}
+ {\getvalue{@@description\v!left}}}
+
+% \def\@@makedescription#1%
+% {\def\currentdescription{#1}%
+% \ifundefined{@@description\descriptionparameter\c!location}%
+% \letvalue{\??dd#1\c!location}\v!left
+% \fi
+% \getvalue{@@description\descriptionparameter\c!location}}
+
+% definitions
+
+\def\setupdescriptions
+ {\dodoubleempty\dosetupdescriptions}
+
+\def\dosetupdescriptions[#1][#2]% % beter: \iffirstargument
+ {\ConvertToConstant\doifelse{#2}{}
+ {\dodosetupdescriptions[][#1]}
+ {\dodoubleargumentwithset\dodosetupdescriptions[#1][#2]}}
+
+\def\dodosetupdescriptions[#1]% [#2]%
+ {\getparameters[\??dd#1]} % [#2]}
+
+\def\dodefinedescription[#1][#2]%
+ {\copyparameters[\??dd#1][\??dd]
+ [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor,\c!title,
+ \c!width,\c!hang,\c!sample,\c!before,\c!inbetween,\c!after,\c!margin,
+ \c!indenting,\c!indentnext,\c!align,\c!text,\c!distance,\c!titledistance,\c!command,
+ \c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]%
+ \getparameters[\??dd#1]
+ [\c!title=\v!yes,\s!do\c!command=\normal@@descriptionhandler,
+ \c!type=\v!description,\c!list=,\c!listtext=,
+ \c!level=,#2]%AM?? Why do we have title=yes here?
+ %\doifvalue{\??dd#1\c!location}\v!top{\doassign[\??dd#1][\c!inbetween=\blank]}%
+ \doifvalue{\??dd#1\c!location}\v!top % we actually need more granularity
+ {\doifnotvalue{\??dd#1\c!inbetween}{\doassign[\??dd#1][\c!inbetween=\blank]}}%
+ \doifvaluesomething{\??dd#1\c!list}
+ {\definelist[\getvalue{\??dd#1\c!type}:\getvalue{\??dd#1\c!list}]}% new
+ \setvalue {#1}{\dodoubleempty\@@description[#1]}%
+ \setvalue{\e!start#1}{\dodoubleempty\@@startdescription[#1]}%
+ \setvalue{\e!stop #1}{\@@stopdescription{#1}}}
+
+\def\definedescription
+ {\dodoubleemptywithset\dodefinedescription}
+
+\def\currentdescriptionnumber {\csname\??dd\currentdescription\??dd\c!number\endcsname}
+\def\directcurrentdescriptionnumber#1{\csname\??dd #1\??dd\c!number\endcsname}
+
+\ifx\preparednumber\undefined \let\preparednumber\empty \fi
+
+\def\special@@descriptionhandler[#1]#2#3%
+ {\strut
+ \doifelse{\descriptionparameter\c!number}\v!no
+ \!!doneafalse{\doifelse{#1}{-}\!!doneafalse\!!doneatrue}%
+ \chardef\descriptioncoupling\zerocount
+ \iflocation
+ \doifsomething{\descriptionparameter\c!coupling}
+ {\processaction % genereert > of <
+ [\descriptionparameter\c!couplingway]
+ [ \v!local=>\chardef\descriptioncoupling\plusone, % old: default
+ \v!global=>\chardef\descriptioncoupling\plustwo]}% new: global crosslinking
+ \fi
+ \setupnumber % the number is called indirectly
+ [\currentdescriptionnumber]
+ [\c!sectionnumber=\descriptionparameter\c!sectionnumber]%
+ \if!!donea
+ \makeprecedingsectionnumber[\currentdescriptionnumber]%
+ \prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber
+ \iftrialtypesetting\startlocal\fi
+ \getvalue{\e!next\currentdescription}% tricky but we need the preroll
+ \iftrialtypesetting\stoplocal\fi
+ % \getvalue{\e!next#2#1}%
+ \iflocation
+ \bgroup
+ \letvalue{\??dd\currentdescription\c!sectionnumber}\v!yes
+ \protectconversion
+ \makeprecedingsectionnumber[\currentdescriptionnumber]%
+ \prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber
+ \ifcase\descriptioncoupling \or
+ \xdef\@@internalenumber{\doshowdnnumber}%
+ \rawreference\s!num{#1:\@@internalenumber}{}%
+ \or
+ \xdef\@@internalenumber{\countervalue{\??dd\c!coupling\currentdescription}}%
+ \rawreference\s!num{\currentdescription:\@@internalenumber}{}%
+ \fi
+ \egroup
+ \fi
+ %\makeprecedingsectionnumber[\currentdescriptionnumber]%
+ %\prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber
+ \disablepseudocaps % sorry, uppercase causes troubles
+ \doattributes % \nocase primitive needed
+ {\??dd\currentdescription}\c!headstyle\c!headcolor % todo: sub as well
+ {\descriptionparameter\c!command
+ {\showdntext
+ \descriptionparameter\c!left
+ \strut\doshowdnnumber
+ \showdntitle{#2}%
+ \descriptionparameter\c!stopper
+ \descriptionparameter\c!right}}%
+ \doifsomething{\descriptionparameter\c!list}
+ {\dowritetolist
+ {\descriptionparameter\c!type:\descriptionparameter\c!list}
+ {\showdnlisttext\doshowdnnumber}{#2}{\currentdescription}}%
+ \iflocation\ifcase\descriptioncoupling \else
+ \edef\localconnection{\descriptionparameter\c!coupling:\@@internalenumber}%
+ \doifreferencefoundelse\localconnection
+ {\in[\localconnection]}\donothing % genereert > of <
+ \fi\fi
+ \doifnot{#1}{-}{\rawreference\s!num{#1}{{\doshowdnnumber}{#2}}}%
+ \else
+ \doattributes{\??dd\currentdescription}\c!headstyle\c!headcolor
+ {\descriptionparameter\c!command
+ {\showdnpuretext
+ \descriptionparameter\c!left
+ \showdntitle{#2}%
+ \descriptionparameter\c!stopper
+ \descriptionparameter\c!right}}%
+ \doifnot{#1}{-}{\rawreference\s!num{#1}{{}{#2}}}%
+ \fi}
+
+\def\showdntitle#1%
+ {\doif{\descriptionparameter\c!title}\v!yes % new, for david antos
+ {\doifsomething{#1}
+ {\doattributes{\??dd\currentdescription}\c!titlestyle\c!titlecolor
+ {\hskip\descriptionparameter\c!titledistance
+ \descriptionparameter\c!titlecommand
+ {\descriptionparameter\c!titleleft
+ \begstrut#1\endstrut
+ \descriptionparameter\c!titleright}}}}}
+
+
+\def\showdnpuretext
+ {\strut\descriptionparameter\c!text} % geen spatie
+
+\def\showdnlisttext
+ {\descriptionparameter\c!listtext} % space in default
+
+\def\showdntext
+ {\doifelsenothing{\descriptionparameter\c!text}
+ {\ignorespaces}
+ {\strut
+ \descriptionparameter\c!text
+ \removeunwantedspaces\fixedspace}}
+
+\def\doshowdnnumber
+ {\getvalue{showdn\descriptionparameter\c!level\c!number}}
+
+% maybe recursive until end condition undefined
+
+\setvalue{showdn\c!number}%
+ {\preparednumber
+ \convertednumber[\currentdescriptionnumber]}
+
+\setvalue{showdn\v!sub\c!number}%
+ {\getvalue{showdn\c!number}%
+ \spr{\descriptionparameter\c!separator}%
+ \convertednumber[\v!sub\currentdescriptionnumber]}
+
+\setvalue{showdn\v!sub\v!sub\c!number}%
+ {\getvalue{showdn\v!sub\c!number}%
+ \spr{\descriptionparameter\c!separator}%
+ \convertednumber[\v!sub\v!sub\currentdescriptionnumber]}
+
+\setvalue{showdn\v!sub\v!sub\v!sub\c!number}%
+ {\getvalue{showdn\v!sub\v!sub\c!number}%
+ \spr{\descriptionparameter\c!separator}%
+ \convertednumber[\v!sub\v!sub\v!sub\currentdescriptionnumber]}
+
+\def\domakednnumber
+ {\descriptionparameter\c!left
+ \strut\doshowdnnumber
+ \descriptionparameter\c!stopper
+ \descriptionparameter\c!right}
+
+\setvalue{\??dd\s!set\v!sub\s!sub\s!sub\c!number}#1%
+ {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}%
+ \setnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]}
+
+\setvalue{\??dd\s!set\v!sub\s!sub\c!number}#1%
+ {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}%
+ \setnumber[\v!sub\v!sub\@@descriptionnumber]}
+
+\setvalue{\??dd\s!set\v!sub\c!number}#1%
+ {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}%
+ \setnumber[\v!sub\@@descriptionnumber]}
+
+\setvalue{\??dd\s!set\c!number}#1%
+ {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}%
+ \setnumber[\@@descriptionnumber]}
+
+\setvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}#1%
+ {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}%
+ \resetnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]}
+
+\setvalue{\??dd\s!reset\v!sub\v!sub\c!number}#1%
+ {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}%
+ \resetnumber[\v!sub\v!sub\@@descriptionnumber]}
+
+\setvalue{\??dd\s!reset\v!sub\c!number}#1%
+ {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}%
+ \resetnumber[\v!sub\@@descriptionnumber]}
+
+\setvalue{\??dd\s!reset\c!number}#1%
+ {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}%
+ \resetnumber[\@@descriptionnumber]}
+
+\setvalue{\??dd\e!next\v!sub\v!sub\v!sub\c!number}#1#2%
+ {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}%
+ \incrementnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]%
+ \rawreference\s!num{#2}{\getvalue{showdn\v!sub\v!sub\v!sub\c!number}}}%
+
+\setvalue{\??dd\e!next\v!sub\v!sub\c!number}#1#2%
+ {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}%
+ \incrementnumber[\v!sub\v!sub\@@descriptionnumber]%
+ \rawreference\s!num{#2}{\getvalue{showdn\v!sub\v!sub\c!number}}}%
+
+\setvalue{\??dd\e!next\v!sub\c!number}#1#2%
+ {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}%
+ \incrementnumber[\v!sub\@@descriptionnumber]%
+ \rawreference\s!num{#2}{\getvalue{showdn\v!sub\c!number}}}%
+
+\setvalue{\??dd\e!next\c!number}#1#2%
+ {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}%
+ \incrementnumber[\@@descriptionnumber]%
+ \rawreference\s!num{#2}{\getvalue{showdn\c!number}}}%
+
+\def\dodosetupenumerations[#1][#2]%
+ {\getparameters[\??dd#1][#2]%
+ \doifdefined{\??dd#1\c!start}
+ {\setupnumber[#1][\c!start=\getvalue{\??dd#1\c!start}]}%
+ \setupnumber[#1][\c!conversion=\getvalue{\??dd#1\c!conversion}]}
+
+\def\dosetupenumerations[#1][#2]%
+ {\ConvertToConstant\doifelse{#2}{}
+ {\getparameters[\??dn][#1]}
+ {\dodoubleargumentwithset\dodosetupenumerations[#1][#2]}}
+
+\def\setupenumerations
+ {\dodoubleempty\dosetupenumerations}
+
+\def\docheckenumerationnumber#1#2#3%
+ {\processaction
+ [\getvalue{\??dd#2\c!number}]
+ [ \v!yes=>\setvalue{\??dd#2\??dd\c!number}{#3},%
+ \v!no=>\setvalue{\??dd#2\??dd\c!number}{#3},%
+ \v!default=>\setvalue{\??dd#2\??dd\c!number}{#3},%
+ \v!unknown=>\letvalue{\??dd#2\??dd\c!number}\commalistelement]}
+
+\def\dododefineenumeration#1#2#3[#4][#5]%
+ {\makecounter{\??dd\c!coupling#1}% new: global cross linking
+ \dodefinedescription[#3#1]%
+ [\c!title=\v!no,\c!level=#3,\c!type=\v!enumeration,\c!list=,%
+ \s!do\c!command=\special@@descriptionhandler]%
+ \copyparameters[\??dd#3#1][\??dn]
+ [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor,
+ \c!width,\c!number,\c!distance,\c!titledistance,\c!command,
+ \c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after,
+ \c!levels,\c!way,\c!blockway,\c!separator,\c!margin,
+ \c!indenting,\c!indentnext,\c!stopper,\c!sectionnumber,
+ \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]%
+ \doifassignmentelse{#4}
+ {\getparameters[\??dd#3#1]%
+ [\c!text=#1,\??dd\c!number=#1,\c!conversion=,\c!listtext=#1\space,
+ \c!left=,\c!right=,\c!coupling=,\c!couplingway=\v!local,#4]%
+ \docheckenumerationnumber{#1}{#3#1}{#1}}%
+ {\doifelsenothing{#4}
+ {\getparameters[\??dd#3#1]%
+ [\c!text=#1,\??dd\c!number=#1,\c!conversion=,
+ \c!stopper=,
+ \c!left=,\c!right=,\c!coupling=,\c!couplingway=,#4]%
+ \docheckenumerationnumber{#1}{#3#1}{#1}}%
+ {\copyparameters[\??dd#3#1][\??dd#3#4]
+ [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor,
+ \c!width,\c!number,\c!distance,\c!titledistance,\c!command,\c!margin,
+ \c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after,
+ \c!stopper,\c!indenting,\c!indentnext,\c!left,\c!right,
+ \c!coupling,\c!couplingway,
+ \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]%
+ \getparameters[\??dd#3#1]
+ [\c!text=#1,\??dd\c!number=#4,\c!conversion=,#5]%
+ %docheckenumerationnumber{#1}{#3#1}{#4}}}%
+ \docheckenumerationnumber{#1}{#3#1}{\getvalue{\??dd#3#4\??dd\c!number}}}}%
+ \doifvalue{\??dd#3#1\??dd\c!number}{#1}
+ {\definenumber
+ [#3#1]
+ [\c!way=\descriptionparentparameter\c!way,
+ \c!blockway=\descriptionparentparameter\c!blockway,
+ \c!conversion=\descriptionparentparameter\c!conversion,
+ \c!sectionnumber=\descriptionparentparameter\c!sectionnumber]%
+ \doifvalue{\??dd#1\c!levels}{#2}% % for
+ {\doifsomething{\getvalue{\??dd#1\c!conversion}}% % old
+ {\setupnumber[#3#1] % times
+ [\c!conversion=\descriptionparameter\c!conversion]}}}% % sake
+ \doifvaluesomething{\??dd#3#1\c!list}
+ {\definelist[\getvalue{\??dd#3#1\c!type}:\getvalue{\??dd#3#1\c!list}]}% new
+ % should work ...
+ %setvalue{\s!set #3#1}{\dosetenumerationnumber[#1][#3]}%
+ %setvalue{\s!reset#3#1}{\doresetenumerationnumber[#1][#3]}%
+ %setvalue{\e!next #3#1}{\dotripleempty\donextenumerationnumber[#1][#3]}}
+ % but since we use \currentdescription, we need ...
+ \setevalue{\s!set #3#1}{\noexpand \dosetenumerationnumber [#1][#3]}%
+ \setevalue{\s!reset#3#1}{\noexpand \doresetenumerationnumber[#1][#3]}%
+ \setevalue{\e!next #3#1}{\noexpand\dotripleempty\noexpand\donextenumerationnumber [#1][#3]}}
+
+\def\descriptionparentparameter#1{\csname\??dd\currentdescriptionnumber#1\endcsname}
+
+\def\dodefineenumeration[#1][#2][#3]%
+ {\dododefineenumeration{#1}{1}{}[#2][#3]%
+ \dododefineenumeration{#1}{2}{\v!sub}[#2][#3]%
+ \dododefineenumeration{#1}{3}{\v!sub\v!sub}[#2][#3]%
+ \dododefineenumeration{#1}{4}{\v!sub\v!sub\v!sub}[#2][#3]}
+
+\def\defineenumeration
+ {\dotripleemptywithset\dodefineenumeration}
+
+\def\doresetenumerationnumber[#1][#2]% name level
+ {\getvalue{\??dd\s!reset#2\c!number}{#1}}%
+
+\def\dosetenumerationnumber[#1][#2]% name level
+ {\getvalue{\??dd\s!set#2\c!number}{#1}}%
+
+\def\donextenumerationnumber[#1][#2][#3]% name level reference
+ {\pluscounter{\??dd\c!coupling#1}% new: global crosslinking
+ \getvalue{\??dd\e!next#2\c!number}{#1}{#3}}%
+
+\def\@@resetdescriptionclosesymbol
+ {\global\@EA\settrue\csname\??dd\currentdescription:mrk\endcsname
+ \let\placeclosesymbol\@@placedescriptionclosesymbol
+ \let\qed \@@placedescriptionclosesymbol}
+
+\def\@@placedescriptionclosesymbol
+ {\ifconditional\csname\??dd\currentdescription:mrk\endcsname
+ \global\@EA\setfalse\csname\??dd\currentdescription:mrk\endcsname
+ \doifsomething{\descriptionparameter\c!closesymbol}{\descriptionparameter\c!closecommand{\descriptionparameter\c!closesymbol}}%
+ \fi}
+
+% Het default-mechanisme kan mooier: leegtest, enz.
+%
+% Werkprocedure buiten description
+
+\def\dodosetupindentations[#1][#2]%
+ {\getparameters[\??ds#1][#2]}
+
+\def\dosetupindentations[#1][#2]%
+ {\ConvertToConstant\doifelse{#2}{}
+ {\dodosetupindentations[][#1]}
+ {\dodoubleargumentwithset\dodosetupindentations[#1][#2]}}
+
+\def\setupindentations
+ {\dodoubleempty\dosetupindentations}
+
+% what to do with this
+
+\def\startdoorspringen
+ {\whitespace
+ \@@dsbefore
+ \dosomebreak\goodbreak % \page[\v!preference]
+ \begingroup
+ \parskip\zeropoint\relax}
+
+\def\stopdoorspringen
+ {\endgroup
+ \@@dsafter}
+
+%
+
+\def\dododefineindenting#1#2#3%
+ {\par
+ \getvalue{\??ds#1\c!before}%
+ \begingroup
+ \doifvaluenothing{\??ds#1\c!sample}
+ {\setvalue{\??ds#1\c!sample}%
+ {\getvalue{\??ds#1\c!text}}}%
+ \assignwidth
+ {\!!widtha}
+ {\getvalue{\??ds#1\c!width}}
+ {\doattributes
+ {\??ds#1}\c!headstyle\c!headcolor
+ {\getvalue{\??ds#1\c!sample}%
+ \spr{\getvalue{\??ds#1\c!separator}}}}
+ {\getvalue{\??ds#1\c!distance}}%
+ \advance\!!widtha \getvalue{\??ds#1\c!distance}%
+ \setbox2\hbox to \!!widtha
+ {\doattributes
+ {\??ds#1}\c!headstyle\c!headcolor
+ {\strut
+ \getvalue{\??ds#1\c!text}%
+ \hss
+ \spr{\getvalue{\??ds#1\c!separator}}%
+ \hskip\getvalue{\??ds#1\c!distance}}}%
+ \parindent\zeropoint
+ \hskip#2\!!widtha\indent\box2%
+ \hangindent#3\!!widtha
+ \doattributes{\??ds#1}\c!style\c!color\empty
+ \AfterPar{\endgroup\getvalue{\??ds#1\c!after}}% must be redone
+ \GetPar}
+
+\def\dodefineindenting[#1][#2]%
+ {\copyparameters[\??ds#1][\??ds]
+ [\c!text,\c!separator,\c!width,\c!style,\c!color,
+ \c!headstyle,\c!sample,\c!before,\c!after,\c!distance]%
+ \getparameters[\??ds#1][#2]%
+ \setvalue {#1}{\dododefineindenting{#1}{0}{1}}%
+ \setvalue {\v!sub#1}{\dododefineindenting{#1}{1}{2}}%
+ \setvalue{\v!sub\v!sub#1}{\dododefineindenting{#1}{2}{3}}}
+
+\def\defineindenting
+ {\dodoubleargumentwithset\dodefineindenting}
+
+\def\definelabel
+ {\dodoubleargumentwithset\dodefinelabel}
+
+\def\dodefinelabel[#1][#2]%
+ {\definenumber
+ [#1]
+ [\c!command=,\c!location=,#2]%
+ % downward compatible
+ \processaction
+ [\numberparameter{#1}\c!location]
+ [ \v!inmargin=>{\setupnumber[#1][\c!command=\inmargin]},
+ \v!inleft=>{\setupnumber[#1][\c!command=\inleft ]},
+ \v!inright=>{\setupnumber[#1][\c!command=\inright ]},
+ \v!margin=>{\setupnumber[#1][\c!command=\inmargin]}]%
+ % generated commands (in addition to the number ones)
+ \setvalue {#1}{\dodoubleempty\do@@label[#1]}%
+ \setvalue{\s!reset #1}{\resetnumber[#1]}%
+ \setvalue{\e!increment#1}{\incrementnumber[#1]}%
+ \setvalue{\e!next #1}{\dodoubleempty\do@@nextlabel[#1]}%
+ \setvalue{\c!current #1}{\currentnumber[#1]}}
+
+\def\do@@label[#1][#2]%
+ {\numberparameter{#1}\c!before
+ \numberparameter{#1}\c!command{\doattributes{\@@thenumber{#1}}\c!headstyle\c!headcolor{\getvalue{\e!next#1}[#2]}}%
+ \numberparameter{#1}\c!after}%
+
+\def\do@@nextlabel[#1][#2]%
+ {\nextnumber[#1][\s!lab][#2]}
+
+\def\currentnumber[#1]% kan tekst hier weg ?
+ {\dotextprefix{\numberparameter{#1}\c!text}\sectionnumberonly[#1]}
+
+\def\nextnumber[#1][#2][#3]%
+ {\incrementnumber[#1]%
+ \currentnumber[#1]%
+ \rawreference{#2}{#3}{\composedsectionnumber}}
+
+\setupdescriptions
+ [\c!location=\v!left,
+ \c!headstyle=\v!bold,
+ \c!titlestyle=\v!bold,
+ \c!style=\v!normal,
+ \c!color=,
+ \c!headcolor=,
+ \c!titlecolor=,
+ \c!width=8em,
+ \c!distance=0pt,
+ \c!titledistance=0.5em,
+ \c!hang=,
+ \c!sample=,
+ \c!align=,
+ \c!margin=\v!no,
+ \c!before=\blank,
+ \c!inbetween=\blank,
+ \c!after=\blank,
+ \c!indentnext=\v!yes,
+ \c!indenting=\v!never,
+ \c!titleleft=(,
+ \c!titleright=),
+ \c!closesymbol=,
+ \c!closecommand=\wordright,
+ \c!command=,
+ \c!titlecommand=]
+
+\setupenumerations
+ [\c!location=\v!top,
+ \c!headstyle=\v!bold,
+ \c!headcolor=,
+ \c!titlestyle=\v!bold,
+ \c!titlecolor=,
+ \c!style=\v!normal,
+ \c!color=,
+ \c!width=8em,
+ \c!distance=0pt,
+ \c!titledistance=0.5em,
+ \c!hang=,
+ \c!sample=,
+ \c!align=,
+ \c!margin=\v!no,
+ \c!before=\blank,
+ \c!inbetween=\blank,
+ \c!after=\blank,
+ \c!indentnext=\v!yes,
+ \c!indenting=\v!never,
+ \c!text=,
+ \c!levels=3, % to be upward compatible
+ \c!conversion=, % to be upward compatible
+ \c!way=\v!by\v!text,
+ \c!sectionnumber=\v!yes,
+ \c!separator=\@@koseparator, % per 2006.06.23, was .
+ \c!stopper=,
+ \c!titleleft=(,
+ \c!titleright=),
+ \c!closesymbol=,
+ \c!closecommand=\wordright,
+ \c!number=,
+ \c!command=,
+ \c!titlecommand=]
+
+\setupindentations
+ [\c!style=\v!normal,
+ \c!headstyle=\v!normal,
+ \c!color=,
+ \c!headcolor=,
+ \c!width=\v!fit,
+ \c!text=\unknown,
+ \c!sample=,
+ \c!before=\blank,
+ \c!after=\blank,
+ \c!distance=1em,
+ \c!separator={ :}]
+
+\protect \endinput