%D \module %D [ file=core-des, %D version=1997.03.31, %D title=\CONTEXT\ Core 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 Core Macros / Descriptions} \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}}% \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\insidedefinition=\plusone \ifdim\leftskip>\zeropoint \relax \leftskipadaption\leftskip \fi \fi \fi \ifnum\insidedefinition=\plusone \advance\leftskip \leftskipadaption \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. \chardef\insidedefinition=0 \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\insidedefinition \edef\@@leftdescriptionskip {\the\leftskip }% \edef\@@rightdescriptionskip{\the\rightskip}% \fi}% \expanded{\indenting[\descriptionparameter\c!indenting]}% % better a system mode \ifcase\insidedefinition \chardef\insidedefinition\plusone \or \chardef\insidedefinition\plustwo \fi} % now happens elsewhere : \noindent\ignorespaces \def\@@stopdescription#1% {\def\currentdescription{#1}% % was \par \dostopattributes % here, else problems with interlinespace and font change \dostopparbasedattributes % == \settrue\parbasedattributes \dostopattributes \endgroup \descriptionparameter\c!after \egroup % temporary hack \dochecknextindentation{\??dd#1}% \currentdescription}} \dorechecknextindentation} \def\@@dodescription {\dostartattributes{\??dd\currentdescription}\c!style\c!color\empty \ignorespaces} % starters: % \def\@@startdescription[#1][#2]% % {\def\currentdescription{#1}% % \doifelse{\descriptionparameter{\s!do\c!state}}\v!start % {\@@startsomedescription{#1}[#2]{}} % {\dowithwargument{\@@startsomedescription{#1}[#2]}}} % % \def\@@description[#1][#2]% % {\def\currentdescription{#1}% % \doifelse{\descriptionparameter{\s!do\c!state}}\v!start % {\@@somedescription{#1}[#2]{}} % {\dowithwargument{\@@somedescription{#1}[#2]}}} \def\@@startdescription[#1][#2]% {\def\currentdescription{#1}% \doifelse{\descriptionparameter\c!title}\v!yes {\dowithwargument{\@@startsomedescription{#1}[#2]}} {\@@startsomedescription{#1}[#2]{}}} \def\@@description[#1][#2]% {\def\currentdescription{#1}% \doifelse{\descriptionparameter\c!title}\v!yes {\dowithwargument{\@@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% {\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!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]% % \getparameters[\??dd#1] % [\s!do\c!state=\v!stop,\s!do\c!command=\normal@@descriptionhandler,\c!level=,#2]% % %\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]}}% % \setvalue {#1}{\dodoubleempty\@@description[#1]}% % \setvalue{\e!start#1}{\dodoubleempty\@@startdescription[#1]}% % \setvalue{\e!stop #1}{\@@stopdescription{#1}}}% \def\dodefinedescription[#1][#2]% {\copyparameters[\??dd#1][\??dd] [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor, \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]% \getparameters[\??dd#1] [\c!title=\v!yes,\s!do\c!command=\normal@@descriptionhandler, \c!type=\v!description,\c!list=,\c!listtext=, \c!level=,#2]% %\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\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]% % \preparethenumber{\??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]% % \preparethenumber{\??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]% % %\preparethenumber{\??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\domakednnumber}}% hook for taco % \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}}% % \else % Why was this strange expansion needed? % \edef\!!stringa{\showdnpuretext}% nog eens testen binnen \expanded % \expanded{\doattributes{\??dd\currentdescription}\noexpand\c!headstyle\noexpand\c!headcolor % {\noexpand\descriptionparameter\noexpand\c!command{\!!stringa}}}% % \doifnot{#1}{-}{\rawreference\s!num{#1}{}}% % \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]% \preparethenumber{\??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]% \preparethenumber{\??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]% %\preparethenumber{\??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 \domakednnumber \doif{\descriptionparameter\c!title}\v!yes % new, for david antos {\doattributes{\??dd\currentdescription}\c!titlestyle\c!titlecolor {\hskip\descriptionparameter\c!titledistance\begstrut#2\endstrut}}% }}% \c!command is hook for taco \doifsomething{\descriptionparameter\c!list} % also for david antos {\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}}% \else % Why was this strange expansion needed? \edef\!!stringa{\showdnpuretext}% nog eens testen binnen \expanded \expanded{\doattributes{\??dd\currentdescription}\noexpand\c!headstyle\noexpand\c!headcolor {\noexpand\descriptionparameter\noexpand\c!command{\!!stringa}}}% \doifnot{#1}{-}{\rawreference\s!num{#1}{}}% \fi} \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}% \descriptionparameter\c!separator \convertednumber[\v!sub\currentdescriptionnumber]} \setvalue{showdn\v!sub\v!sub\c!number}% {\getvalue{showdn\v!sub\c!number}% \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}% \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{\currentdescriptionnumber}% \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{\currentdescriptionnumber}% \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]% {\edef\@@descriptionnumber{\currentdescriptionnumber}% \incrementnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]% \rawreference\s!num{#1}{\getvalue{showdn\v!sub\v!sub\v!sub\c!number}}}% \setvalue{\??dd\e!next\v!sub\v!sub\c!number}[#1]% {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}% \incrementnumber[\v!sub\v!sub\@@descriptionnumber]% \rawreference\s!num{#1}{\getvalue{showdn\v!sub\v!sub\c!number}}}% \setvalue{\??dd\e!next\v!sub\c!number}[#1]% {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}% \incrementnumber[\v!sub\@@descriptionnumber]% \rawreference\s!num{#1}{\getvalue{showdn\v!sub\c!number}}}% \setvalue{\??dd\e!next\c!number}[#1]% {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}% \incrementnumber[\@@descriptionnumber]% \rawreference\s!num{#1}{\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\dododefineenumeration#1#2#3[#4][#5]% % {\makecounter{\??dd\c!coupling#1}% new: global cross linking % \dodefinedescription[#3#1]% % [\s!do\c!state=\v!start,\c!level=#3, % \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!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!number]% % \doifassignmentelse{#4} % {\getparameters[\??dd#3#1]% % [\c!text=#1,\??dd\c!number=#1,\c!conversion=, % \c!left=,\c!right=,\c!coupling=,\c!couplingway=\v!local,#4]}% % {\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]}% % {\copyparameters[\??dd#3#1][\??dd#3#4] % [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor, % \c!width,\c!number,\c!distance,\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]% % \getparameters[\??dd#3#1] % [\c!text=#1,\??dd\c!number=#4,\c!conversion=,#5]}}% % \doifvalue{\??dd#3#1\??dd\c!number}{#1} % {\definenumber % [#3#1] % [\c!way=\descriptionparentparameter\c!way, % \c!blockway=\descriptionparentparameter\c!blockway, % \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 % \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]}} \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!number]% \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]}% {\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]}% {\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]% \getparameters[\??dd#3#1] [\c!text=#1,\??dd\c!number=#4,\c!conversion=,#5]}}% \doifvalue{\??dd#3#1\??dd\c!number}{#1} {\definenumber [#3#1] [\c!way=\descriptionparentparameter\c!way, \c!blockway=\descriptionparentparameter\c!blockway, \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]% {\getvalue{\??dd\s!reset#2\c!number}{#1}}% \def\dosetenumerationnumber[#1][#2]% {\getvalue{\??dd\s!set#2\c!number}{#1}}% \def\donextenumerationnumber[#1][#2][#3]% {\pluscounter{\??dd\c!coupling#1}% new: global crosslinking \getvalue{\??dd\e!next#2\c!number}[#3]}% % 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}\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 \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 {\dotextprefix{\numberparameter{#1}\c!text}% \getvalue{\e!next#1}[#2]}}% \numberparameter{#1}\c!after}% \def\do@@nextlabel[#1][#2]% {\nextnumber[#1][\s!lab][#2]} \setupdescriptions [\c!location=\v!left, \c!headstyle=\v!bold, \c!style=\v!normal, \c!color=, \c!headcolor=, \c!width=8em, \c!distance=0pt, \c!titledistance=0pt, \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!command=] \setupenumerations [\c!location=\v!top, \c!headstyle=\v!bold, \c!headcolor=, \c!style=\v!normal, \c!color=, \c!width=8em, \c!distance=0pt, \c!titledistance=0pt, \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=., \c!stopper=, \c!number=, \c!command=] \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