summaryrefslogtreecommitdiff
path: root/tex/context/base/mkii/strc-lst.mkii
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkii/strc-lst.mkii')
-rw-r--r--tex/context/base/mkii/strc-lst.mkii1150
1 files changed, 1150 insertions, 0 deletions
diff --git a/tex/context/base/mkii/strc-lst.mkii b/tex/context/base/mkii/strc-lst.mkii
new file mode 100644
index 000000000..ffb1a4dbd
--- /dev/null
+++ b/tex/context/base/mkii/strc-lst.mkii
@@ -0,0 +1,1150 @@
+%D \module
+%D [ file=strc-lst,
+%D version=1997.03.31,
+%D title=\CONTEXT\ Structure Macros,
+%D subtitle=Lists,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%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 / Lists}
+
+\unprotect
+
+% \getlistlevel[hoofdstuk]\test{0} \test
+
+% can be made faster if needed
+
+\def\getlistlevel[#1]#2#3% [list] \variable \default
+ {\doifdefinedelse{\??ko#1\c!section}
+ {\edef#2{\getvalue{\??ko#1\c!section}}%
+ \doifdefinedelse{\??se#2\c!level}
+ {\edef#2{\getvalue{\??se#2\c!level}}}
+ {\edef#2{#3}}}
+ {\edef#2{#3}}}
+
+% Auto cross document links work by either using logical or
+% page references, depending on the general settings. The
+% locations are stored in global references where the auto tag
+% number uses the text container. We use reference mapping
+% (define reference) to keep track of the current ref.
+
+% \@@sectie == current level
+
+\def\dowritetolist#1%
+ {\doifelsevalue{\??li#1\c!state}\v!start
+ \dodowritetolist\gobblefourarguments{#1}}
+
+\long\def\dodowritetolist#1#2#3#4%
+ {\begingroup
+ \expanded{\everylistentry\emptytoks\the\everylistentry}% \emptytoks, else loop
+ \def\currentlist{#1}% evt naar dowritetolist
+ \defconvertexpanded\asciilistentry{\getvalue{\??li\currentlist\c!expansion}}{#3}%
+ \makesectionformat
+ \doifelse\@@nmstate\v!start
+ {\def\dopagenummer{\noexpand\pagenumber}}
+ {\let\dopagenummer\!!zerocount}%
+ % niet waterdicht, wat te doen met figuren en zo
+ % first hack: scheelt rommel, second hack: alleen koppen
+ \doifelsevalue{\??rf\currentlist\c!state}\v!start
+ {\doif{\@@sectionlevel\@@sectie}{0}\autocrossdocumentfalse}
+ {\autocrossdocumentfalse}%
+ % weak and inefficient
+ \ifautocrossdocument
+ \bgroup
+ \thisisnextinternal\currentlist
+ %\thisisdestination{\currentlist::\sectionformat}%
+ \expanded{\setsectieenkoppeling{\currentlist}}%
+ \edef\currentlevel{\@@sectionlevel\@@sectie}%
+ \processcommacommand[\crossdocumentreferences]\dododowritetolist
+ \egroup
+ \else
+ \thisisnextinternal\currentlist
+ \fi
+ \expanded
+ {\writeutilitycommand % todo: also an immediate option
+ {\noexpand\listentry
+ {\currentlist}%
+ {\nextinternalreference}%
+ {#2}%
+ {\asciilistentry}%
+ {\sectionformat\sectionseparator\sectionseparator\dopagenummer}%
+ {\noexpand\realfolio}}}%
+ \endgroup}
+
+\def\dododowritetolist#1%
+ {\def\docommand##1%
+ {\doifvalue{\??rf##1\c!state}\v!start
+ {\setsectieenkoppeling{##1}%
+ \def\level{\@@sectionlevel\@@sectie}%
+ \ifnum\level>\currentlevel
+ \expanded{\definereference[#1::##1][\v!none]}%
+ \else\ifnum\level=\currentlevel
+ \expanded{\definereference[#1::##1][#1::{##1::\sectionformat}]}%
+ \fi\fi}}%
+ \processcommacommand[\crossdocumentelements]\docommand}
+
+% so far
+
+\def\dowritebetweenlist#1#2%
+ {\doifvalue{\??li#1\c!state}\v!start
+ {\begingroup
+ \defconvertedargument\ascii{#2}%
+ \makesectionformat
+ \doifelse{\@@nmstate}\v!start
+ {\def\dopagenummer{\noexpand\pagenumber}}
+ {\let\dopagenummer\!!zerocount}%
+ \expanded
+ {\writeutilitycommand
+ {\noexpand\listbetween
+ {#1}%
+ {\ascii}%
+ {\sectionformat\sectionseparator\sectionseparator\dopagenummer}%
+ {\noexpand\realfolio}}}%
+ \endgroup}}
+
+% experimental (no nodes in mvl), needed for naw
+
+\def\immediatetolist[#1]#2#3#4%
+ {\begingroup
+ \defconvertexpanded\asciilistentry{\getvalue{\??li#1\c!expansion}}{#3}%
+ \makesectionformat
+ \immediatewriteutilitycommand
+ {\listentry
+ {#1}{}{#2}{\asciilistentry}%
+ {\sectionformat\sectionseparator\sectionseparator\number#4}%
+ {\realfolio}}%
+ \endgroup}
+
+\def\immediatebetweenlist[#1]#2%
+ {\begingroup
+ \defconvertedargument\asciilistentry{#2}%
+ \makesectionformat
+ \immediatewriteutilitycommand
+ {\listbetween
+ {#1}{\asciilistentry}%
+ {\sectionformat\sectionseparator\sectionseparator0}%
+ {\realfolio}}%
+ \endgroup}
+
+\def\setlistentries
+ {\def\listentry ##1{\executeifdefined{##1\c!list }\gobblefivearguments }%
+ \def\listbetween##1{\executeifdefined{##1\c!inbetween}\gobblethreearguments}}
+
+\def\resetlistentries
+ {\let\listentry \gobblesixarguments
+ \let\listbetween\gobblefourarguments}
+
+\resetlistentries
+
+\addutilityreset{listentries}
+
+% old values:
+%
+% a: \def\listfill {\hskip 1.75em}
+% b: \def\listfill {\hskip.5em\hfill}
+% c: \def\listfill {\hskip.5em\listdots\hskip.5em}
+
+% todo: interface them
+
+% \setvalue{\??li\c!alternative a}% nr - tit - pag
+% {\def\listfill {\hskip.25em\relax}%
+% \def\listskip {0pt}%
+% \def\listwidth {2em}%
+% \def\liststretch{10em}}
+
+% \setvalue{\??li\c!alternative b}% nr - tit - fill - pag
+% {\def\listfill {\hfill}%
+% \def\listskip {5em}%
+% \def\listwidth {2em}%
+% \def\liststretch{10em}}
+
+% \setvalue{\??li\c!alternative c}% nr - tit - dots - pag
+% {\def\listfill {\hskip.5em\listdots\hskip.5em\relax}%
+% \def\listskip {5em}%
+% \def\listwidth {0pt}%
+% \def\liststretch{10em}}
+
+\def\listalternativeparameter#1%
+ {\csname\??li\??li\listparameter\c!alternative#1\endcsname}
+
+\def\setuplistalternative[#1]%
+ {\dodoubleargument\getparameters[\??li\??li#1]}
+
+ % \listfill cum suis will be replaced by the direct call
+
+\def\listfill {\listalternativeparameter\c!command }
+\def\listskip {\listalternativeparameter\c!distance}
+\def\listwidth {\listalternativeparameter\c!width }
+\def\liststretch{\listalternativeparameter\c!stretch }
+
+% a : nr - tit - pag
+% b : nr - tit - fill - pag
+% c : nr - tit - dots - pag
+
+\setuplistalternative[a][\c!distance=0pt,\c!width=2em,\c!stretch=10em,\c!command=\hskip.25em\relax]
+\setuplistalternative[b][\c!distance=5em,\c!width=2em,\c!stretch=10em,\c!command=\hfill]
+\setuplistalternative[c][\c!distance=5em,\c!width=0pt,\c!stretch=10em,\c!command=\hskip.5em\listdots\hskip.5em\relax]
+
+\def\listdots{\leaders\hbox to .5em{\hss.\hss}\hfill}
+
+% \starttext
+% \placelist[section][alternative=c]
+% \setuplistalternative[c][distance=1em,stretch=0em]
+% \placelist[section][alternative=c]
+% \section{test}
+% \section{\readfile{tufte}{}{}}
+% \stoptext
+
+\setvalue{\??li\c!alternative}{\getvalue{\??li\c!alternative b}}
+
+\getvalue{\??li\c!alternative}
+
+\def\setlistparameter#1#2#3{\@EA\def\csname\??li#1#2\endcsname{#3}} % often
+\def\listparameter #1{\csname\??li\currentlist#1\endcsname}
+
+\def\dosetuplist[#1][#2]% slow -)
+ {\def\docommand##1%
+ {\getparameters[\??li##1][#2]%
+ \preparepageprefix{\??li##1}}%
+ \processcommalist[#1]\docommand}
+
+\def\setuplist
+ {\dodoubleargument\dosetuplist}
+
+\def\dodosetlist#1%
+ {\def\nolist{\splitsequence{\getvalue{\??li#1\c!limittext}}}%
+ \setvalue{#1\c!inbetween}{\dobetweenlist{#1}}%
+ \setvalue{#1\c!list }{\dolistelement{#1}}}
+
+% \def\dodoresetlist#1%
+% {\let\nolist\empty
+% \setvalue{#1\c!inbetween}{\gobblefourarguments{#1}}%
+% \setvalue{#1\c!list }{\gobblesixarguments {#1}}}
+
+\def\dodoresetlist#1%
+ {\let\nolist\empty
+ \letvalue{#1\c!inbetween}\gobblethreearguments
+ \letvalue{#1\c!list }\gobblefivearguments}
+
+\let\nolist\empty
+
+\def\dodefinelist[#1][#2][#3]%
+ {\presetlocalframed[\??li#1]%
+ \getparameters
+ [\??li#1]
+ [\c!height=\v!broad,
+ \c!depth=\v!broad,
+ \c!offset=0.25em,
+ \c!maxwidth=,
+ \c!align=,
+ \c!state=\v!start,
+ \c!coupling=\v!off,
+ \c!criterium=\v!local,
+ \c!width=3em,
+ \c!alternative=\c!b,
+ \c!style=\v!normal,
+ \c!textstyle=\listparameter\c!style,
+ \c!numberstyle=\listparameter\c!style,
+ \c!pagestyle=\listparameter\c!style,
+ \c!color=,
+ \c!textcolor=\listparameter\c!color,
+ \c!numbercolor=\listparameter\c!color,
+ \c!pagecolor=\listparameter\c!color,
+ \c!numbercommand=\listnumbercommand,
+ \c!textcommand=\listtextcommand,
+ \c!pagecommand=\listpagecommand,
+ \c!pagenumber=\v!yes,
+ \c!headnumber=\v!yes,
+ \c!pageboundaries=,
+ \c!margin=\!!zeropoint,
+ \c!aligntitle=,
+ \c!before=,
+ \c!after=,
+ \c!inbetween=,
+ \c!symbol=,
+ \c!interaction=\v!sectionnumber,
+ \v!part\v!number=\v!yes, % nodig ? % v
+ %\c!prefix=\v!no, % we need to initialize it
+ \c!label=\v!no,
+ \c!distance=\!!zeropoint,
+ \c!separator=\@@koseparator,
+ \c!limittext=\@@kolimittext,
+ \c!stopper=,
+ \c!expansion=]%
+ \doifassignmentelse{#2}
+ {\getparameters[\??li#1][#2]}
+ {\ConvertToConstant\doifnot{#2}{} % not \doifsomething ivm Convert...
+ {\copyparameters % interactie ?
+ [\??li#1][\??li#2]
+ [\c!state,\c!width,\c!alternative,\c!style,\c!color,
+ \c!textstyle,\c!textcolor,\c!textcommand,
+ \c!pagestyle,\c!pagecommand,\c!pagecolor,
+ \c!numberstyle,\c!numbercolor,\c!numbercommand,
+ \c!headnumber,
+ \c!pagenumber,\c!pageboundaries,\c!margin,\c!symbol,\c!limittext,
+ \c!aligntitle,\c!before,\c!after,\c!inbetween,\v!part\c!number,\c!label]%
+ \getparameters[\??li#1][#3]}}%
+ \addutilityreset{#1}%
+ \setvalue{\s!set #1}{\dodosetlist {#1}}%
+ \setvalue{\s!reset#1}{\dodoresetlist{#1}}}
+
+\def\definelist
+ {\dotripleempty\dodefinelist}
+
+\def\iflijstgeplaatst{\ifutilitydone} % obsolete, is now a mode
+
+\def\placelist
+ {\dodoubleempty\doplacelist}
+
+\def\placerawlist
+ {\dodoubleempty\doplacerawlist}
+
+\def\dobeginoflist
+ {\begingroup
+ \startpacked[\v!blank]}
+
+\def\doendoflist
+ {\stoppacked
+ \endgroup}
+
+\def\doplacelist[#1][#2]%
+ {\dobeginoflist
+ \doplacerawlist[#1][#2]%
+ \doendoflist}
+
+\def\doplacerawlist[#1][#2]%
+ {\begingroup
+ \dogetcommalistelement1\from#1\to\firstlistelement
+ \dosetuplist[#1][#2]%
+ \doifvalue{\??li\firstlistelement\c!coupling}\v!on
+ {\startlistreferences{#1}}%
+ \dosettoclevel\??li\firstlistelement
+ \honorlocalfilterlevel
+ \doutilities{listentries,#1}\jobname{#1}\relax\par
+ \stoplistreferences
+ \dosetlistmode
+ \endgroup}
+
+% the simple approach:
+%
+% \def\dosettoclevel#1#2%
+% {\dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty}
+%
+% but we want to to support selection by number:
+%
+% \starttypen
+% \placelist[section][criterium=chapter,number=1] \blank
+% \placelist[section][criterium=chapter,number=2] \blank
+% \placelist[section][criterium=chapter,number=3] \blank
+%
+% \chapter{first} \section{AA} \section{BB}
+% \chapter{second} \section{CC} \section{DD}
+% \chapter{third} \section{EE} \section{FF}
+% \stoptypen
+
+\def\dosettoclevel#1#2% todo: check if criterium is headid, else error
+ {\ifundefined{#1#2\c!number}%
+ \dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty
+ \else
+ % \doifnot{#2}\v!local ...
+ \doifelsevaluenothing{#1#2\c!number}%
+ {\dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty}
+ {\setsectieenkoppeling{\getvalue{#1#2\c!criterium}}%
+ \dosetfilterlevel
+ {\previoussection\@@sectie}%
+ {\getvalue{#1#2\c!number}}}%
+ \fi}
+
+\def\dosetlistmode
+ {\ifutilitydone
+ \setsystemmode \v!list
+ \else
+ \resetsystemmode\v!list
+ \fi}
+
+\def\dodocompletelist[#1][#2][#3]% enkelvoud, meervoud, instellingen
+ {\expanded{\systemsuppliedtitle[#2]{\noexpand\headtext{#2}}}% expansion needed for v! vs french !
+ \doplacelist[#1][#3]}
+
+\def\docompletelist[#1][#2]%
+ {\dodocompletelist[#1][#1][#2]}
+
+\def\completelist
+ {\dodoubleempty\docompletelist}
+
+\def\listelements {} % list of page breaks
+\def\listnumbercommand #1{#1} % no strut due to interactive version
+\def\listtextcommand #1{\begstrut#1\endstrut}
+\def\listpagecommand #1{\strut#1}
+
+\def\doassigndimen#1#2#3%
+ {\doifinsetelse{#2}{\v!fit,\v!broad}{#1=#3}{#1=#2}\relax}
+
+% \let\dohandlelistnumber\firstofoneargument
+%
+% can be anything, so no \expanded{\separatednumber{#1}} !
+
+\def\dohandlelistnumber#1{\separatednumber{#1}}
+
+\def\listsymbol[#1]#2%
+ {\begingroup
+ \def\currentlist{#1}%
+ \def\currentlistnumber{#2}%
+ \currentlistsymbol
+ \endgroup}
+
+% Beware, the list symbol macro gets an argument passed, i.e. when this
+% argument is not picked up, the symbol becomes a kind of prefix.
+
+% for historical reasons we're stuck to symbols, so in order to generalize,
+% we have to hook it into the symbol handler; we need a beter clean up later
+%
+% < 2005
+%
+% \def\dosetlistsymbol % #1
+% {\executeifdefined{listsymbol@\listparameter\c!symbol}\listsymbol@default} % {#1}
+%
+% >= 2005
+%
+% at this symbol level, we have access to the raw 'number' in
+% \currentlistnumber
+
+\definesymbol[\v!list][\v!none ][\listsymbol@none ]
+\definesymbol[\v!list][\v!one ][\listsymbol@one ]
+\definesymbol[\v!list][\v!two ][\listsymbol@two ]
+\definesymbol[\v!list][\v!three ][\listsymbol@three ]
+\definesymbol[\v!list][\s!default][\listsymbol@default]
+\definesymbol[\v!list][\s!unknown][\listsymbol@unknown]
+
+\def\currentlistsymbol
+ {\doifinsymbolsetelse\v!list{\listparameter\c!symbol}
+ {\directsymbol\v!list{\listparameter\c!symbol}}
+ {\directsymbol\v!list\s!default}}
+
+\def\listsymbol@none
+ {\doassigndimen\scratchdimen{\listparameter\c!width}{1.5em}%
+ \hbox to \scratchdimen{}}
+
+\def\listsymbol@one
+ {\strut$\bullet$}
+
+\def\listsymbol@two
+ {\vrule\!!width1em\!!height1ex\!!depth\zeropoint}
+
+\def\listsymbol@three
+ {\begingroup
+ \doassigndimen{\dimen0}{\listparameter\c!width }{1.5em}%
+ \doassigndimen{\dimen2}{\listparameter\c!height}{1ex}%
+ \doassigndimen{\dimen4}{\listparameter\c!depth }\zeropoint
+ \vrule\!!width\dimen0\!!height\dimen2\!!depth\dimen4%
+ \endgroup}
+
+\def\listsymbol@default
+ {\doifelse{\listparameter\c!prefix}\v!no % ook nog eerste
+ {\edef\splitlistsymbol{\@EA\removefirstprefix\@EA{\currentlistnumber}}}% one level expansion
+ {\doifelse{\listparameter\c!prefix}\v!none
+ {\edef\splitlistsymbol{\@EA\removeallprefixes\@EA{\currentlistnumber}}}%
+ {\let\splitlistsymbol\currentlistnumber}}% geen \edef ivm 8 bit enz
+ \doif{\listparameter\c!label}\v!yes{\leftlabeltext\currentlist}%
+ \strut
+ \def\numberseparator{\listparameter\c!separator}% overloaded, todo
+ \@EA\dohandlelistnumber\@EA{\splitlistsymbol}%
+ \listparameter\c!stopper
+ \doif{\listparameter\c!label}\v!yes{\rightlabeltext\currentlist}}
+
+\def\listsymbol@unknown
+ {\listparameter\c!symbol}
+
+% so far for list symbols
+
+\def\@@dodolistelement{dodolistelement}
+
+\def\dosomelistelement#1#2#3{#1 #2 \translatednumber[#3]}
+
+\setvalue{\@@dodolistelement a}{\let\dosomelistelement\dodofixdlistelementABC}
+\setvalue{\@@dodolistelement b}{\let\dosomelistelement\dodofixdlistelementABC}
+\setvalue{\@@dodolistelement c}{\let\dosomelistelement\dodofixdlistelementABC}
+\setvalue{\@@dodolistelement d}{\let\dosomelistelement\dodofixdlistelementD}
+\setvalue{\@@dodolistelement e}{\let\dosomelistelement\dodofixdlistelementE}
+\setvalue{\@@dodolistelement f}{\let\dosomelistelement\dodofixdlistelementF}
+\setvalue{\@@dodolistelement g}{\let\dosomelistelement\dodofixdlistelementG}
+
+\setvalue{\@@dodolistelement\v!none }{\def\dosomelistelement{\dodofreevlistelement}}
+\setvalue{\@@dodolistelement\v!vertical }{\def\dosomelistelement{\dodofreevlistelement}}
+\setvalue{\@@dodolistelement\v!horizontal}{\def\dosomelistelement{\dodofreehlistelement}}
+\setvalue{\@@dodolistelement\v!command }{\let\dosomelistelement\dodocommandlistelement}
+
+% \setuplist
+% [section]
+% [alternative=MyListItem,
+% after=\blank,
+% before=\blank]
+%
+% \definelistplacement[MyListItem][none]#1#2#3%
+% {(#1) (#2) (#3)}
+
+\def\definelistplacement
+ {\dodoubleempty\dodefinelistplacement}
+
+\def\dodefinelistplacement[#1][#2]%
+ {\setvalue{\@@dodolistelement#1}%
+ {\doifelsenothing{#2}
+ {\getvalue{\@@dodolistelement\v!command}}%
+ {\executeifdefined{\@@dodolistelement#2}
+ {\getvalue{\@@dodolistelement\v!command}}}%
+ \setvalue{\??li\currentlist\c!command}{\getvalue{\@@dodolistelement::#1}}}%
+ \setvalue{\@@dodolistelement::#1}}
+
+% don't mess arround with endgraf/grouping else we loose leftskip
+
+% \strippedcsname\dodolistelement
+
+\def\newlineinlist{\space}
+
+\let\currentlist\s!unknown
+
+\def\dolistelement#1#2#3#4#5#6% pas op: wordt ook elders gedefinieerd
+ {\doiftoclevelelse[#5]{\dodolistelement{#1}{#2}{#3}{#4}{#5}{#6}}{}}
+
+\def\dodolistelement#1#2#3#4#5#6%
+ {\def\currentlist{#1}%
+ \def\currentlistnumber{#3}%
+ \getvalue{\@@dodolistelement\listparameter\c!alternative}%
+ %\showcomposition
+ \let\@@iawidth\!!zeropoint % moet boolean worden
+ \bgroup
+ \edef\listelements
+ {\listparameter\c!pageboundaries}%
+ \ExpandBothAfter\doifinset{#3}\listelements
+ {\showmessage\m!systems{14}{#3}%
+ \page}%
+ \egroup
+ \dontcomplain
+ \setfullsectionnumber{\??li\currentlist}%
+ \dosomelistelement{#1}{#2}{#3}{#4}{#5}{#6}%
+ \global\utilitydonetrue}
+
+\def\donestedlistattributes#1#2%
+ {\doifvaluesomething{\??li\currentlist#2} % color
+ {\resetinteractionparameter\c!color
+ \resetinteractionparameter\c!contrastcolor}%
+ \dolistattributes{#1}{#2}}
+
+\def\dostartlistattributes{\dostartattributes{\??li\currentlist}}
+\def\dostoplistattributes {\dostopattributes}
+\def\dolistattributes {\doattributes{\??li\currentlist}}
+
+\def\dodocommandlistelement#1#2#3#4#5#6%
+ {\doifdefinedelse{\??li#1\c!command}
+ {\listparameter\c!command
+ {#3}{#4}{\pageprefix\??li\currentlist[#5]\translatednumber[#5]}}
+ {[\currentlist: #3 - #4 - \pageprefix\??li\currentlist[#5]\translatednumber[#5]]}}
+
+\def\dodofreelistelement#1#2#3#4#5#6#7#8%
+ {\def\makelistelement##1##2%
+ {\noindent % new and needed
+ \hbox
+ {\doifelse{\listparameter\c!interaction}{##1} % \??li ipv \??ia
+ {\setbox0\hbox{\showcontrastlocation{\??li\currentlist}{#6}{##2}}%
+ \linklisttoelement{#2}{#5}{#6}{\box0}}%{\copy0}}%
+ {##2}}}%
+ \listparameter\c!before% can be \hskip
+ \doifdefinedelse{\??li#1\c!command}
+ {\makelistelement{\listparameter\c!interaction}% this forces all
+ {\listparameter\c!command
+ {#3}% geen conversies etc
+ {#4}% geen conversies etc
+ {\pageprefix\??li\currentlist[#5]%
+ \translatednumber[#5]}}}
+ {#7%
+ \vbox
+ {\forgetall
+ \makelistelement\v!all
+ {%
+\doif{\listparameter\c!headnumber}\v!yes
+ {\makelistelement\v!sectionnumber
+ {\donestedlistattributes\c!numberstyle\c!numbercolor
+ {\listparameter\c!numbercommand{\currentlistsymbol}}}%
+}%
+ \makelistelement\v!text
+ {\donestedlistattributes\c!textstyle\c!textcolor
+ {\let\\=\newlineinlist
+ \dontconvertfont
+ \listparameter\c!textcommand{#4}}}%
+ \doif{\listparameter\c!pagenumber}\v!yes
+ {\doifsomething{#5}
+ {\makelistelement\v!pagenumber
+ {\donestedlistattributes\c!pagestyle\c!pagecolor
+ {\listparameter\c!pagecommand
+ {\pageprefix\??li\currentlist[#5]%
+ \translatednumber[#5]}}}}}}}%
+ #8}%
+ \listparameter\c!after}
+
+\def\dodofreehlistelement#1#2#3#4#5#6%
+ {\dodofreelistelement{#1}{#2}{#3}{#4}{#5}{#6}
+ {\noindent}{}}
+
+\def\dodofreevlistelement#1#2#3#4#5#6% % \nointerlineskip needed,
+ {\dodofreelistelement{#1}{#2}{#3}{#4}{#5}{#6} % otherwise wrong spacing
+ {\ifvmode\nointerlineskip\fi} % at multi-line lists
+ {\ifvmode\nointerlineskip\fi\endgraf\allowbreak}} % test is saveguard
+
+% to be documented: align, hang
+
+% now also in abc
+
+\def\limitatedlistentry#1%
+ {\doifelsenothing{\listparameter\c!maxwidth}
+ {\listparameter\c!textcommand{#1}}
+ {\listparameter\c!textcommand
+ {\limitatetext
+ {#1}%
+ {\listparameter\c!maxwidth}%
+ {\splitsymbol{\listparameter\c!limittext}}}}}
+
+\def\dodofixdlistelementABC#1#2#3#4#5#6% weeden
+ {\endgraf
+ \leftskip\listparameter\c!margin% na de \endgraf !
+ \listparameter\c!before
+ \!!widthc\listparameter\c!distance
+ \doifelse{\listparameter\c!width}\v!fit
+ {\!!widtha\zeropoint}
+ {\doifelsenothing{#3}
+ {\doifelse{\listparameter\c!aligntitle}\v!yes
+ {\!!widtha\zeropoint
+ \!!widthc\zeropoint}
+ {\!!widtha\listparameter\c!width}}
+ {\!!widtha\listparameter\c!width}}%
+ \getvalue{\??li\c!alternative\listparameter\c!alternative}%
+ \endgraf
+ \def\makelistelement##1##2%
+ {\doifelse{\listparameter\c!interaction}{##1}
+ {\setbox0\hbox{\showcontrastlocation\??ia{#6}{##2}}%
+ \linklisttoelement{#2}{#5}{#6}{\box0}}%{\copy0}}%
+ {\hbox{##2}}}%
+ \doif{\listparameter\c!interaction}\v!text % not supported ! ! ! ! ! ! text == all
+ {\setlistparameter\currentlist\c!interaction\v!all}%
+ % \dontleavehmode % new, else no margin, but wrong, better (else \indent as well):
+ \noindent
+ \makelistelement\v!all
+ {\setlocalhsize
+ \hsize\localhsize
+ \hbox to \hsize
+ {\forgetall
+ \dostartlistattributes\c!style\c!color\empty
+ \!!widthb\hsize
+ \doifelse{\listparameter\c!headnumber}\v!yes
+ {\setbox2\hbox \ifdim\!!widtha>\zeropoint to \!!widtha \fi
+ {\makelistelement\v!sectionnumber
+ {\donestedlistattributes\c!numberstyle\c!numbercolor
+ {\listparameter\c!numbercommand{\currentlistsymbol}}%
+ \hfill}}}
+ {\!!widtha\zeropoint
+ \!!widthc\zeropoint
+ \setbox2\hbox{}}%
+ \setbox4\hbox
+ {\doif{\listparameter\c!pagenumber}\v!yes
+ {\doifsomething{#5} % \listwidth is new ; temp hack
+ {\hbox \ifdim\listwidth>\zeropoint to \listwidth\fi
+ {\hfill
+ \makelistelement\v!pagenumber
+ {\donestedlistattributes\c!pagestyle\c!pagecolor
+ {\listparameter\c!pagecommand
+ {\pageprefix\??li\currentlist[#5]%
+ \translatednumber[#5]}}}}}}}%
+ \vbox
+ {\hsize\!!widthb
+ \setupalign[\listparameter\c!align]%
+ \ifdim\!!widtha<\hsize
+ \hangindent\wd2
+ \dimen2=\!!widthc % \listparameter\c!distance
+ \advance\hangindent \dimen2
+ \hangafter\plusone
+ \doif{\listparameter\c!hang}\v!no{\hangafter\zerocount}%
+ \ifdim\wd4=\zeropoint % \ifvoid4
+ % we kunnen gewoon afbreken aan het eind
+ \else
+ \ifdim\listskip>\zeropoint\relax
+ \rightskip\listskip\!!plus\liststretch\relax
+ \parfillskip-\rightskip
+ \fi
+ \fi
+ \else
+ \dimen2\zeropoint
+ \fi
+ \parindent\zeropoint\relax
+ \leavevmode
+ \box2\relax
+ \hskip\dimen2
+ \bgroup
+ \donestedlistattributes\c!textstyle\c!textcolor
+ {\let\\=\newlineinlist
+ \dontconvertfont
+ %\listparameter\c!textcommand{#4}}%
+ \limitatedlistentry{#4}}%
+ %\carryoverpar % new otherwise wrong linespacing
+ \egroup
+ \ifdim\wd4=\zeropoint\relax % \ifvoid4
+ % \ifdim\!!widtha<\hsize \hfill\strut \fi % spoils align
+ \else
+ \nobreak\listfill
+ \box4\relax
+ \relax
+ \fi}%
+ \hss
+ \dostoplistattributes}}% new
+ \endgraf % new, else problems with nointerlinespace and prevdepth
+ \nointerlineskip % anders verkeerde spatiering bij multi-line
+ \endgraf
+ \allowbreak
+ \listparameter\c!after}
+
+% % example from the context list
+%
+% \setuphead [part] [page=right,placehead=yes]
+% \setuplist [chapter] [alternative=d,before=\blank,after=\blank]
+% \setuplist [part] [before=\blank,after=\blank]
+%
+% \starttext
+% \startnarrower[2*right] \placecontent \stopnarrower
+% \blank[4*big]
+% \startsetups chapter
+% \blank \startnarrower[3*middle] \placecontent[criterium=local] \stopnarrower
+% \stopsetups
+% \placelist[part][criterium=text,after=\setups{chapter}]
+%
+% \part{First part} \chapter{Chapter one} \chapter{Chapter two}
+% \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five}
+% \part{Second part} \chapter{Chapter one} \chapter{Chapter two}
+% \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five}
+% \part{Third part} \chapter{Chapter one} \chapter{Chapter two}
+% \chapter{Chapter three} \chapter{Chapter four} \chapter{Chapter five}
+% \stoptext
+
+% overrulen interactie kan sneller, bv door hulpconstanten
+% te gebruiken en die te letten
+
+\def\dodofixdlistelementD#1#2#3#4#5#6%
+ {%\leftskip=\listparameter\c!margin
+ \ifvmode
+ \advance\leftskip\listparameter\c!margin% AANGEPAST
+ \fi
+ \bgroup
+ \ifvmode
+ \noindent\leavevmode % leavevmode ? ? ?
+ \fi
+ \doif{\listparameter\c!interaction}\v!text % not supported
+ {\setlistparameter\currentlist\c!interaction\v!sectionnumber}%
+ \doif{\listparameter\c!interaction}\v!all % not supported
+ {\setlistparameter\currentlist\c!interaction\v!sectionnumber}%
+ \def\makelistelement##1##2%
+ {\doifelse{\listparameter\c!interaction}{##1}
+ {\setbox0\hbox{\showcontrastlocation\??ia{#6}{##2}}%
+ \linklisttoelement{#2}{#5}{#6}{\box0}}%{\copy0}}%
+ {\hbox{##2}}}%
+ \setbox4\hbox
+ {\doif{\listparameter\c!pagenumber}\v!yes
+ {\doifsomething{#5}
+ {\makelistelement\v!pagenumber
+ {\donestedlistattributes\c!pagestyle\c!pagecolor
+ {\listparameter\c!pagecommand
+ {\pageprefix\??li\currentlist[#5]%
+ \translatednumber[#5]}}}}}}%
+\doif{\listparameter\c!headnumber}\v!yes{%
+ \donetrue
+ \doifnothing{#3}{\doifnothing{\listparameter\c!symbol}\donefalse}%
+ % == \doifnothing{#3\listparameter\c!symbol}\donefalse
+ \ifdone
+ \hbox
+ {\listparameter\c!left
+ \makelistelement\v!sectionnumber
+ {\donestedlistattributes\c!numberstyle\c!numbercolor
+ {\listparameter\c!numbercommand{\currentlistsymbol}}}%
+ \listparameter\c!right
+ \hskip.5em}%
+ \nobreak
+ \fi
+}%
+ \tolerance3500 % niet zomaar veranderen
+ \donestedlistattributes\c!textstyle\c!textcolor
+ {\let\\=\newlineinlist
+ \dontconvertfont
+ %\listparameter\c!textcommand{#4}}%
+ \limitatedlistentry{#4}}%
+ \ifvoid4\else
+ \nobreak
+ \hskip.75em\relax
+ \nobreak
+ \box4
+ \fi
+ \dimen0=\listparameter\c!distance\relax
+ \ifdim\dimen0<1em\relax
+ \hskip1em\!!plus1em\!!minus.25em\relax
+ \else
+ \hskip\dimen0\!!plus.5\dimen0\!!minus.25\dimen0\relax
+ \fi
+ \egroup}
+
+\def\dodofixdlistelementE#1%
+ {\dodofixdlistelementEFG
+ {\setupinteraction[\c!strut=\v!no]}
+ {\localframed[\??li\currentlist][\c!depth=\!!zeropoint,\c!color=]}
+ {}}
+
+\def\dodofixdlistelementF#1%
+ {\dodofixdlistelementEFG
+ {}
+ {\dosetraggedhbox{\listparameter\c!align}\raggedbox}
+ {}}
+
+\def\dodofixdlistelementG#1%
+ {\dodofixdlistelementEFG
+ {}
+ \midaligned
+ {}}
+
+\def\dodofixdlistelementEFG#1#2#3#4#5#6#7#8%
+ {\noindent
+ \bgroup
+ \def\makelistelement##1##2% isolated by Wolfgang Schuster
+ {\doifelse{\listparameter\c!interaction}{##1}
+ {#2{##2}}
+ {\setbox0\hbox{#2{\showcontrastlocation\??ia{#8}{##2}}}%
+ \linklisttoelement{#4}{#7}{#8}{\box0}}}%
+ \makelistelement\v!no
+ {\let\\=\newlineinlist
+ #1% in case E nils the strut (still needed?)
+ \dostartlistattributes\c!style\c!color\empty
+ \ignorespaces\dontconvertfont\setstrut
+ \begstrut
+ \limitatedlistentry{#6}%
+ \endstrut
+ \dostoplistattributes}%
+ \egroup
+ \par
+ \listparameter\c!inbetween}
+
+% better:
+%
+% \def\linklisttoelement#1#2#3#4% % list location format page data
+% {\ifautocrossdocument
+% \gotodestination{}{}{\currentlist::\@@filterblocknumberpart[#2]}{#3}{#4}%
+% \else
+% \gotonextinternal\currentlist{#1}{#3}{#4}%
+% \fi}
+%
+% but for the moment:
+
+\def\linklisttoelement#1#2#3#4% % list location format page data
+ {\gotonextinternal\currentlist{#1}{#3}{#4}}
+
+\def\writetolist[#1]#2#3%
+ {\doifsomething{#1}
+ {\defconvertedargument\firstlistelement{#2}%
+ \@EA\dowritetolist\@EA{#1}{\firstlistelement}{#3}{\v!head}}}
+
+\def\dobetweenlist#1#2#3#4% pas op: wordt ook elders gedefinieerd
+ {\doiftoclevelelse[#3]{#2}{}}
+
+\def\writebetweenlist[#1]#2%
+ {\@EA\dowritebetweenlist\@EA{#1}{#2}} % #2 weg en \expanded
+
+% NOG ENGELS MAKEN
+
+\def\listlength{\utilitylistlength}
+\def\listwidth {\utilitylistwidth}
+\def\listheight{\utilitylistheight}
+
+\def\utilitylistlength {0}
+\def\utilitylistwidth {0pt}
+\def\utilitylistheight {0pt}
+
+\def\dolistelementX#1#2#3#4#5#6%
+ {\doiftoclevelelse[#5]
+ {\doglobal\increment\utilitylistlength
+ \hbox
+ {\dolistattributes\c!textstyle\c!textcolor
+ {\let\\=\newlineinlist
+ \dontconvertfont
+ \listparameter\c!textcommand{#4}}}%
+ \global\utilitydonetrue}
+ {}}
+
+\def\dodeterminelistcharacteristics[#1][#2]%
+ {\begingroup
+ \doglobal\newcounter\utilitylistlength
+ \let\dolistelement\dolistelementX
+ \dosetuplist[#1][#2]%
+ \dogetcommalistelement1\from#1\to\commalistelement
+ \dosettoclevel\??li\commalistelement
+ \setbox0\vbox{\doutilities{listentries,#1}\jobname{#1}\relax\par}%
+ \xdef\utilitylistheight{\the\ht0}%
+ \xdef\utilitylistwidth {\the\wd0}%
+ \endgroup
+ \dosetlistmode}
+
+\def\determinelistcharacteristics
+ {\dodoubleempty\dodeterminelistcharacteristics}
+
+% \definerreferencelist
+% [externalfigure]
+% [command=\showbigfigure,
+% before=\page,
+% after=\page]
+%
+% \definereferencelist
+% [externaltable]
+% [command=\showbigtable,
+% before=\page,
+% after=\page]
+%
+% \def\showbigfigure#1%
+% {\externalfigure[#1][frame=on,factor=max]}
+%
+% \def\showbigtable#1%
+% {\switchtobodyfont[12pt]\getbuffer[#1]}
+%
+% \writetoreferencelist[externalfigure]{koe} {\externalfigure[koe] [width=3cm,frame=on]}
+% \writetoreferencelist[externalfigure]{paard}{\externalfigure[paard][width=3cm,frame=on]}
+%
+% \startbuffer[kanweg]
+% \starttable[|||]
+% \HL
+% \VL test \VL test \VL\SR
+% \HL
+% \VL test \VL test \VL\FR
+% \VL test \VL test \VL\MR
+% \VL test \VL test \VL\LR
+% \HL
+% \stoptable
+% \stopbuffer
+%
+% \writetoreferencelist[externaltable]{kanweg}{\switchtbodyfont[5pt]\getbuffer[kanweg]}
+%
+% \placereferencelist[externalfigure,externaltable]
+
+% algemeen
+
+\def\referencebutton#1[#2]%
+ {\hbox\bgroup % the \hbox is needed to bypass
+ \let\referenceprefix\empty % \dontleavehmode in \gotobox
+ \setupinteraction[\c!color=,\c!contrastcolor=,\c!strut=]%
+ \setupreferencing[\c!prefix=]%
+ \gotobox{\hbox{\ignorespaces#1}}[#2]%
+ \egroup}
+
+\newcounter\referencecounter
+
+\def\doreferencelistelement#1#2#3#4#5%
+ {\doiftoclevelelse[#4]
+ {\getvalue{\??rl#1\c!before}%
+ \referencebutton
+ {\getvalue{\??rl#1\c!command}{#3}\pagereference[\r!to#2]}%
+ [\r!from#2]%
+ \global\utilitydonetrue
+ \getvalue{\??rl#1\c!after}}
+ {}}
+
+\def\doplacereferencelist[#1][#2]%
+ {\begingroup
+ \setupreferencelist[#1][#2,\c!state=\v!stop]%
+ \dogetcommalistelement1\from#1\to\commalistelement
+ \dosettoclevel\??rl\commalistelement
+ \doutilities{listentries,#1}\jobname{#1}\relax\par
+ \endgroup}
+
+\def\placereferencelist
+ {\dodoubleempty\doplacereferencelist}
+
+\def\dowritetoreferencelist#1#2#3%
+ {\doifvalue{\??rl#1\c!state}\v!start
+ {\begingroup
+ \makesectionformat
+ \doifelse{\@@nmstate}\v!start
+ {\def\dopagenummer{\noexpand\pagenumber}}
+ {\let\dopagenummer\!!zerocount}%
+ \expanded
+ {\writeutilitycommand%
+ {\noexpand\referencelistentry%
+ {#1}% tag
+ {#2}% number
+ {#3}% data
+ {\sectionformat\sectionseparator\sectionseparator\dopagenummer}%
+ {\noexpand\realfolio}}}%
+ \endgroup}}
+
+\def\writetoreferencelist[#1]#2% #1=class #2=data #3=visualization
+ {\dowithnextbox
+ {\doifelsevalue{\??rl#1\c!state}\v!start
+ {\doglobal\increment\referencecounter % must be resolved due to #2
+ \referencebutton
+ {\flushnextbox
+ \pagereference[\r!from\referencecounter]%
+ \dowritetoreferencelist{#1}{\referencecounter}{#2}}%
+ [\r!to\referencecounter]}
+ {\flushnextbox}}
+ \hbox} % \vbox ?
+
+\def\referencelistentry#1%
+ {\executeifdefined{#1\c!list}\gobblefourarguments}
+
+\def\dodosetreferencelist#1%
+ {\setvalue{#1\c!list}{\doreferencelistelement{#1}}}
+
+\def\dodoresetreferencelist#1%
+ {\setvalue{#1\c!list}{\gobblefourarguments}}
+
+\def\dodefinereferencelist[#1][#2]%
+ {\setupreferencelist[#1]
+ [\c!command=,
+ \c!state=\v!start,
+ \c!criterium=\v!all,
+ \c!before=,
+ \c!after=,
+ #2]%
+ \resetcounter{#1}%
+ \addutilityreset{#1}%
+ \setvalue{\s!set #1}{\dodosetreferencelist {#1}}%
+ \setvalue{\s!reset#1}{\dodoresetreferencelist{#1}}}
+
+\def\definereferencelist
+ {\dodoubleempty\dodefinereferencelist}
+
+\def\dosetupreferencelist[#1][#2]%
+ {\getparameters[\??rl#1][#2]}
+
+\def\setupreferencelist
+ {\dodoubleempty\dosetupreferencelist}
+
+\def\dosetupcombinedlist[#1][#2]%
+ {\getparameters[\??ih#1][#2]%
+ \expanded{\setuplist[\getvalue{\??ih#1\c!list}]}[#2]}
+
+\def\setupcombinedlist
+ {\dodoubleargument\dosetupcombinedlist}
+
+\def\doplacecombinedlist[#1][#2]%
+ {\begingroup
+ \getparameters[\??ih#1][#2]%
+ \dosettoclevel\??ih{#1}%
+ \edef\combinedlist{\getvalue{\??ih#1\c!list}}%
+ \doifelsevalue{\??ih#1\c!level}\v!current %
+ {\!!counta=0\@@kolevel} % hm: \@@kolevel
+ {\fullexpandoneargafter\doifnumberelse{\getvalue{\??ih#1\c!level}}% in verband
+ {\!!counta\getvalue{\??ih#1\c!level}% met de vorige implementatie
+ \advance\!!counta \plusone % accepteren we ook nummers (0==deel)
+ \getfromcommacommand[\combinedlist][\!!counta]%
+ \edef\maximumlist{\commalistelement}}%
+ {\edef\maximumlist{\getvalue{\??ih#1\c!level}}}%
+ \doifdefinedelse{\??ko\maximumlist\c!section}
+ {\!!counta\getvalue{\??se\getvalue{\??ko\maximumlist\c!section}\c!level}}%
+ {\!!counta\zerocount}}
+ \let\!!stringa\combinedlist
+ \let\combinedlist\empty
+ \def\docommand##1%
+ {\doifdefinedelse{\??ko##1\c!section}
+ {\ifnum\getvalue{\??se\getvalue{\??ko##1\c!section}\c!level}>\!!counta\else
+ \addtocommalist{##1}\combinedlist
+ \fi}%
+ {\addtocommalist{##1}\combinedlist}}%
+ \processcommacommand[\!!stringa]\docommand
+ \doifvalue{\??ih#1\c!coupling}\v!on
+ {\startlistreferences{#1}}%
+ \ExpandFirstAfter\dodoplacecombinedlist[\combinedlist][#2]%
+ \stoplistreferences
+ \endgroup
+ \dosetlistmode}
+
+\def\dodoplacecombinedlist[#1][#2]%
+ {\dobeginoflist
+ \dosetuplist[#1][#2]%
+ \doutilities{listentries,#1}\jobname{#1}\relax\par
+ \doendoflist}
+
+\def\docompletecombinedlist[#1][#2]%
+ {\expanded{\systemsuppliedtitle[#1]{\noexpand\headtext{#1}}}% expansion due to v! vs french !
+ \doplacecombinedlist[#1][#2]}
+
+\def\dodefinecombinedlist[#1][#2][#3]%
+ {\makerawcommalist[#2]\combinedlist % for fast processing
+ \letvalue{\??ih#1\c!list}\combinedlist
+ \getcommalistsize[#2]%
+ \getfromcommalist[#2][\commalistsize]%
+ \doeassign[\??ih#1][\c!level=\commalistelement]%
+ \getparameters
+ [\??ih#1]
+ [\c!criterium=\v!local,#3]%
+ \setvalue{\e!setup#1\e!endsetup}%
+ {\dodoubleempty\dosetupcombinedlist[#1]}%
+ \setvalue{\e!place#1}%
+ {\dodoubleempty\doplacecombinedlist[#1]}%
+ \setvalue{\e!complete#1}%
+ {\dodoubleempty\docompletecombinedlist[#1]}}
+
+\def\definecombinedlist
+ {\dotripleempty\dodefinecombinedlist}
+
+\def\placecombinedlist
+ {\dodoubleempty\doplacecombinedlist}
+
+% new and yet undocumented (used in cocoa qa)
+%
+% \setupremaininglistlength
+% [left=\hss nog~,right=~ingangen]
+%
+% \resetremaininglistlength
+% [section][settings]
+%
+% \placelist
+% [section]
+% [before=\showremaininglistlength]
+%
+% \dorecurse{100}{\section{hans}}
+
+\definesystemvariable {ll} % ListLength
+
+\def\setupremaininglistlength[#1]%
+ {\getparameters[\??ll][#1]%
+ \globallet\listlengthcounter\!!zerocount}
+
+\setupremaininglistlength
+ [\c!left=\hss,\c!right=,\c!number=\v!yes,
+ \c!before=\blank,\c!after=\page,
+ \c!style=\v!smallnormal,\c!color=]
+
+\def\resetremaininglistlength
+ {\dodoubleempty\doresetremaininglistlength}
+
+\def\doresetremaininglistlength[#1][#2]%
+ {\determinelistcharacteristics[#1][#2]% \determinelistcharacteristics[#1][#2]%
+ \xdef\listlengthcounter{\number\utilitylistlength}}
+
+\def\showremaininglistlength
+ {\bgroup
+ \ifnum\listlengthcounter>\plusone
+ \setbox\scratchbox\vbox
+ {\@@llbefore\par\horizontalstrut\par\horizontalstrut\par\@@llafter}%
+ \scratchdimen\pagetotal
+ \advance\scratchdimen \ht\scratchbox
+ \advance\scratchdimen \dp\scratchbox
+ \ifdim\scratchdimen>\pagegoal
+ \@@llbefore
+ \nobreak\hbox to \hsize
+ {\doifnot\@@llnumber\v!yes{\let\listlengthcounter\empty}%
+ \doattributes\??ll\c!style\c!color{\@@llleft\listlengthcounter\@@llright}}
+ \@@llafter
+ \fi
+ \fi
+ \doglobal\decrement\listlengthcounter\relax
+ \egroup}
+
+\setupreferencelist
+ [\c!style=\v!normal]
+
+\protect \endinput