diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii | 1335 |
1 files changed, 1335 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii b/Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii new file mode 100644 index 00000000000..697618323bb --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii @@ -0,0 +1,1335 @@ +%D \module +%D [ file=strc-itm, % updated +%D version=1997.03.31, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=itemgroups, +%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. + +% new: text + lefttext=(,righttext=) +% start= + +\writestatus{loading}{ConTeXt Structure Macros / Itemgroups} + +\unprotect + +% - instellingen in macro +% - [0] voor start op 0 +% - start=2 + +\newconditional\sublistitem \setfalse\sublistitem +\newconditional\symbollistitem \setfalse\symbollistitem +\newconditional\headlistitem \setfalse\headlistitem +\newconditional\introlistitem \setfalse\introlistitem +\newconditional\randomizeitems \setfalse\randomizeitems +\newconditional\autointrolistitem \setfalse\autointrolistitem +\newconditional\optimizelistitem \settrue \optimizelistitem +\newconditional\packlistitem \setfalse\packlistitem +\newconditional\paragraphlistitem \setfalse\paragraphlistitem +\newconditional\textlistitem \setfalse\textlistitem +\newconditional\firstlistitem \setfalse\firstlistitem +\newconditional\beforelistitem \setfalse\beforelistitem +\newconditional\afterlistitem \setfalse\afterlistitem +\newconditional\nowhitelistitem \setfalse\nowhitelistitem +\newconditional\joinedlistitem \setfalse\joinedwhitelistitem +\newconditional\reverselistitem \setfalse\reverselistitem +\newconditional\continuelistitems \setfalse\continuelistitems +\newconditional\fittinglistitems \setfalse\fittinglistitems + +\newcount\noflists +\newcount\currentnoflists +\newcount\itemcolumndepth +\newcount\itemdepth +\newcount\maxitemdepth + +\definetwopasslist\s!list + +\let\currentitemlevel \!!zerocount +\let\currentitemgroup \empty +\let\currentnofitems \!!zerocount +\let\currentmaxnofitems\!!zerocount +\let\currentminnofitems\!!zerocount +\let\currentitemoffset \!!zerocount +\def\currentitemnumber{\countervalue{\@@itemcounter\currentitemlevel}} + +% tricky ... we cannot use trialtypesetting here because there can be +% multiple itemizes in e.g. a table, so we need something more advanced +% where counters etc are reset to pre-outertrial values + +\def\dolistreference + {\ifconditional\continuelistitems + \savetaggedtwopassdata\s!list{\number\currentnoflists}{\number\currentnoflists}% + {\currentitemlevel:\noflistelements:c:\getitemparameter\currentitemlevel\c!maxwidth}% + \else + \savetaggedtwopassdata\s!list{\number\currentnoflists}{\number\currentnoflists}% + {\currentitemlevel:\noflistelements:n:\getitemparameter\currentitemlevel\c!maxwidth}% + \fi} + +\def\splititemtwopassdata#1% + {\expanded{\findtwopassdata{\s!list}{\number#1}}% + \expandafter\dosplititemtwopassdata\twopassdata:0:0:0:0:0\relax} + +\def\dosplititemtwopassdata#1:#2:#3:#4:#5\relax + {\edef\itemdatal{#1}\edef\itemdatan{#2}\edef\itemdatat{#3}\edef\itemdataw{#4}} + +\def\checkcurrentnofitems + {\splititemtwopassdata\currentnoflists + \iftwopassdatafound + \ifcase\itemdatan\relax % \scratchcounter + \let\currentnofitems \!!zerocount + \let\currentminnofitems\!!plusone + \let\currentmaxnofitems\!!zerocount + \else + \scratchcounter\itemdatan\relax + \edef\currentnofitems{\the\scratchcounter}% + \let\currentitemtag\itemdatat + \doloop + {\splititemtwopassdata{\numexpr\currentnoflists+\recurselevel\relax}% + \iftwopassdatafound + \ifnum\itemdatal=\currentitemlevel\relax + \doifelse{c}\itemdatat + {\advance\scratchcounter\itemdatan\relax} + {\exitloop}% + \fi + \else + \exitloop + \fi}% + \edef\currentmaxnofitems{\the\scratchcounter}% + \scratchcounter\zerocount + \doif{c}\currentitemtag + {\doloop + {\splititemtwopassdata{\numexpr\currentnoflists-\recurselevel\relax}% + \iftwopassdatafound + \ifnum\itemdatal=\currentitemlevel\relax + \doifelse{c}\itemdatat + {\advance\scratchcounter\itemdatan\relax} + {\advance\scratchcounter\itemdatan\exitloop}% + \fi + \else + \exitloop + \fi}}% + \advance\scratchcounter\plusone + \edef\currentminnofitems{\the\scratchcounter}% + % [[\currentnofitems,\currentminnofitems,\currentmaxnofitems]] + \fi + \else % new, when no tuo yet + \let\currentnofitems \!!zerocount + \let\currentminnofitems\!!plusone + \let\currentmaxnofitems\!!zerocount + \fi} % [[\currentnofitems,\currentminnofitems,\currentmaxnofitems]] + +% \startitemize[n,packed] +% \item test \item test \item test +% \stopitemize +% +% \startitemize[n,packed,reverse] +% \item test \item test \item test +% \stopitemize +% +% \startitemize[n,packed,reverse] \item test \item test \stopitemize +% \startitemize[continue] +% \item test \startitemize[n,packed] \item test \item test \stopitemize +% \item test +% \item test +% \stopitemize +% \startitemize[continue] \item test \stopitemize +% +% \startitemize[n,packed] \item test \item test \stopitemize +% \startitemize[continue] \item test \stopitemize +% \startitemize[continue] \item test \stopitemize + +\def\unknownitemreference{0} \let\itemreferences\unknownitemreference + +% #1=level #2=parameter + +\def\getitemparameter #1#2{\csname\??op\currentitemgroup#1#2\endcsname} +\def\setitemparameter #1#2{\@EA\def\csname\??op\currentitemgroup#1#2\endcsname} % #3 -> {#3} +\def\letitemparameter #1#2{\@EA\let\csname\??op\currentitemgroup#1#2\endcsname} + +% works ok but not needed (also possible compatibility problem) +% +% \def\getitemparameter#1#2% +% {\executeifdefined{\??op\currentitemgroup#1#2}% +% {\executeifdefined{\??op\currentitemgroup #2}% +% {\executeifdefined{\??oo #2}% +% {}}}} + +% test this: saves hash entries and is also faster +% +% \let\doinitializeitemgrouplevel\gobbleoneargument % todo ! ! ! + +\def\getitemparameter#1#2% + {\executeifdefined{\??op\currentitemgroup#1#2}% + {\executeifdefined{\??op\currentitemgroup #2}% + {\executeifdefined{\??oo #2}% + {}}}} + +\def\doitemattributes #1{\doattributes{\??op\currentitemgroup#1}} + +\def\@@globalitemsymbol #1{\??op\currentitemgroup\c!symbol\s!global#1} +\def\@@localitemsymbol #1{\??op\currentitemgroup\c!symbol\s!local #1} +\def\@@currentitemsymbol#1{\??op\currentitemgroup\c!symbol #1} + +\def\@@itemcounter{\s!itemcount\currentitemgroup} + +% \def\doitembreak#1{\ifconditional\textlistitem\else\dosomebreak#1\fi} +% +% s-pre-61 / pre-dis, test extensively, 2004/5 + +\def\doitembreak#1{\ifconditional\optimizelistitem\ifconditional\textlistitem\else\dosomebreak#1\fi\fi} + +\def\initializeitemgroupslevel#1% + {\ifundefined{\@@globalitemsymbol{#1}}% + \edef\itemreferences{\itemreferences,#1}% + \makecounter{\@@itemcounter#1}% + \setevalue{\@@globalitemsymbol{#1}}{#1}% + \fi} + +\def\initializeitemgrouplevel#1% safeguard + {\ifundefined{\??op\currentitemgroup#1\c!width}% + \doinitializeitemgrouplevel{#1}% + \fi} + +\def\doinitializeitemgrouplevel#1% + {\copyparameters + [\??op\currentitemgroup#1][\??oo] + [\c!width,\c!factor,\c!distance,\c!align,\c!symalign,\c!option,% + \c!style,\c!marstyle,\c!symstyle,\c!headstyle,% + \c!color,\c!marcolor,\c!symcolor,\c!headcolor,% + \c!beforehead,\c!afterhead,\c!before,\c!inbetween,\c!after,% + \c!stopper,\c!placestopper,\c!indenting,% + \c!n,\c!inner,\c!symbol,\c!margin,\c!items,% + \c!leftmargin,\c!rightmargin,\c!indentnext,% + \c!command,% + \c!start,\c!lefttext,\c!righttext]} + +\def\setupitemgroups + {\dosingleargument\dosetupitemgroups} + +\def\dosetupitemgroups[#1]% still undocumented + {\getparameters[\??oo][\c!levels=4,#1]% + % will change (remove) + \ifnum\@@oolevels>\maxitemdepth + \maxitemdepth\@@oolevels\relax + \dorecurse\maxitemdepth{\initializeitemgroupslevel\recurselevel}% + \fi} + +\def\doitemreference#1,#2,#3\\% + {\ifnum\currentitemlevel>#1\relax + \ifnum#1>\zerocount \tempsymbol \fi + \getvalue{\@@currentitemsymbol{#2}}% + \doitemreference#2,#3\\% + \fi} + +\def\itemreference + {\expandafter\doitemreference\itemreferences,,\\} + +\def\packitems + {\ifcase\currentitemlevel \else \settrue\packlistitem \fi} + +\def\dosetupitemgroupvariable[#1]% [#2]% niveau instellingen + {\doifelsenothing{#1} + {\getparameters[\??op\currentitemgroup\currentitemlevel]}% [#2]}% + {\getparameters[\??op\currentitemgroup#1]}}% [#2]}} + +\newconditional\inlinelistitem \setfalse\inlinelistitem + +\def\dododosetupitemgroupconstant[#1][#2#3#4]% * permits [2] + {\global\setitemparameter\currentitemlevel\c!maxwidth{0}% + \processaction + [#2#3#4] + [ \v!packed*=>\packitems, + \v!intro*=>\settrue\introlistitem, % here? not set to false +% no: \v!random*=>\settrue\randomizeitems,% here? not set to false + \v!autointro*=>\settrue\autointrolistitem, + \v!broad*=>\setitemparameter{#1}\c!factor{1}, + #2#3*\v!broad*=>\setitemparameter{#1}\c!factor{#2#3}, + #2*\v!broad*=>\setitemparameter{#1}\c!factor{#2}, + \v!text*=>\settrue\textlistitem + \settrue\inlinelistitem + \settrue\joinedlistitem % \dosetuppackeditemgroup{#1}% + \packitems, + \v!columns*=>\packitems, + \v!before*=>\settrue\beforelistitem, + \v!after*=>\settrue\afterlistitem, + \v!nowhite*=>\settrue\nowhitelistitem, % \def\packeditemspacing{\nowhitespace}, + \v!margin*=>\setitemparameter{#1}\c!width{-2em}, % signal + \v!inmargin*=>\setitemparameter{#1}\c!width{-2em}, % signal + \v!atmargin*=>\doifnot{#1}{1}{\setitemparameter{#1}\c!width{0em}}, % signal + \v!intext*=>\settrue\inlinelistitem, % new + \v!loose*=>\setfalse\optimizelistitem, + \v!fit*=>\settrue\fittinglistitems, + \v!nofit*=>\setfalse\fittinglistitems, + \v!paragraph*=>\settrue\paragraphlistitem + \packitems, + \v!joinedup*=>\settrue\joinedlistitem % \dosetuppackeditemgroup{#1}% + \packitems, + \v!serried*=>\setitemparameter{#1}\c!factor{-1}, + #2#3*\v!serried*=>\setitemparameter{#1}\c!factor{-#2#3}, + #2*\v!serried*=>\setitemparameter{#1}\c!factor{-#2}, + \v!stopper*=>\setitemparameter{#1}\c!placestopper{\v!yes}, % keep {} + \v!unpacked*=>\setfalse\packlistitem, + \v!repeat*=>\settrue\repeatlistitem, % new + \v!reverse*=>\settrue\reverselistitem, + \v!standard*=>\dosetupstandarditemgroup{#1}]} + +\def\dosetupstandarditemgroup#1% + {\getparameters + [\??op\currentitemgroup#1] + [\c!width=1.5em, + \c!factor=0, + \c!distance=.5em, + \c!beforehead=, + \c!afterhead=\blank, + \c!before=\blank, + \c!inbetween=\blank, + \c!after=\blank, + \c!inner=]} + +% \def\packeditemspacing{\empty} + +% \setupwhitespace[big] +% \starttext +% test \startitemize[joinedup] \item test \item test \stopitemize test \par +% test \startitemize[joinedup,nowhite] \item test \item test \stopitemize test \par +% test \startitemize[joinedup,nowhite,before] \item test \item test \stopitemize test \par +% test \startitemize[joinedup,nowhite,after] \item test \item test \stopitemize test \par +% \stoptext + +\def\itembeforecommand + {\ifconditional\nowhitelistitem + \ifconditional\beforelistitem + \ifcase\currentitemlevel\or\getitemparameter\currentitemlevel\c!before\fi + \else + \nowhitespace + \fi + \else\ifconditional\joinedlistitem + % \empty + \else + \getitemparameter\currentitemlevel\c!before + \fi\fi} + +\def\itemaftercommand + {\ifconditional\nowhitelistitem + \ifconditional\afterlistitem + \ifcase\currentitemlevel\or\getitemparameter\currentitemlevel\c!after\fi + \else + \nowhitespace + \fi + \else\ifconditional\joinedlistitem + % \empty + \else + \getitemparameter\currentitemlevel\c!after + \fi\fi} + +\def\iteminbetweencommand + {\ifconditional\nowhitelistitem + \nowhitespace + \else\ifconditional\joinedlistitem + % \empty + \else + \getitemparameter\currentitemlevel\c!inbetween + \fi\fi} + +\def\itembeforeheadcommand + {\ifconditional\nowhitelistitem + \nowhitespace + \else\ifconditional\joinedlistitem + % \empty + \else + \getitemparameter\currentitemlevel\c!beforehead + \fi\fi} + +\def\itemafterheadcommand + {\ifconditional\nowhitelistitem + \nowhitespace + \else\ifconditional\joinedlistitem + % \empty + \else + \getitemparameter\currentitemlevel\c!afterhead + \fi\fi} + +% \def\dosetuppackeditemgroup#1% +% {\setitemparameter{#1}\c!beforehead{\packeditemspacing}% +% \setitemparameter{#1}\c!afterhead {\packeditemspacing}% +% \setitemparameter{#1}\c!before {\packeditemspacing}% +% \setitemparameter{#1}\c!after {\packeditemspacing}% +% \setitemparameter{#1}\c!inbetween {\packeditemspacing}} + +\def\dosetupitemgroupconstant[#1][#2]% + {\def\dodosetupitemgroupconstant##1% catches empty in [a,b,] handy for xml + {\doifsomething{##1}{\dododosetupitemgroupconstant[#1][##1*]}}% + \processcommacommand[#2]\dodosetupitemgroupconstant} % expansion of #2 is handy for xml + +\def\dododododosetupitemgroup[#1][#2]% + {\doifassignmentelse{#2}% + {\dosetupitemgroupvariable[#1][#2]}% + {\setitemparameter{#1}\c!option{#2}}}% + +\def\dodododosetupitemgroup[#1][#2]% + {\ConvertToConstant\doifnot{#2}{} + {\doifelse{#1}\v!each + {\dorecurse\maxitemdepth{\ExpandFirstAfter\dododododosetupitemgroup[\recurselevel][#2]}} + {\ExpandFirstAfter\dododododosetupitemgroup[#1][#2]}}} + +\def\dododosetupitemgroup[#1][#2]% + {\ConvertToConstant\doifelse{#2}{} + {\ifcase\currentitemlevel\relax + \dodododosetupitemgroup[\v!each][#1]% + \else + \dodododosetupitemgroup[\currentitemlevel][#1]% + \fi} + {\doifelsenothing{#1} + {\dodododosetupitemgroup[\currentitemlevel][#2]} + {\dodododosetupitemgroup[#1][#2]}}} + +\def\dodosetupitemgroup[#1][#2][#3][#4]% + {\pushmacro\currentitemgroup + \def\currentitemgroup{#1}% + \dododosetupitemgroup[#2][#3]% + \ConvertToConstant\doifnot{#4}{} % anders wordt #2 overruled + {\dododosetupitemgroup[#2][#4]}% + \popmacro\currentitemgroup} + +\def\dosetupitemgroup[#1][#2][#3][#4]% + {\def\docommand##1{\dodosetupitemgroup[##1][#2][#3][#4]}% + \processcommalist[#1]\docommand} + +\def\setupitemgroup + {\doquadrupleempty\dosetupitemgroup} + +\def\doadvanceitem + {\ifconditional\sublistitem\else\ifconditional\symbollistitem\else + \pluscounter{\@@itemcounter\currentitemlevel}% + \fi\fi} + +\def\setitemlevel#1% + {\ifnum\currentitemlevel>\zerocount + \settrue\firstlistitem + % \expanded{\setitemparameter{\currentitemlevel}{\c!start}{1}}% *** + \doifinset{0}{#1}{\setitemparameter\currentitemlevel\c!start{0}}% *** + \setcounter{\@@itemcounter\currentitemlevel}{\the\numexpr\getitemparameter\currentitemlevel\c!start-1\relax}% *** + \doifelsenothing{\getitemparameter\currentitemlevel\c!start} + {\def\currentitemoffset{1}} + {\def\currentitemoffset{\getitemparameter\currentitemlevel\c!start}% + \letitemparameter\currentitemlevel\c!start\empty}% + \def\tempnumber + {\countervalue{\@@itemcounter\currentitemlevel}}% + \doifelse{\getitemparameter\currentitemlevel\c!placestopper}\v!yes + {\def\tempsymbol{\getitemparameter\currentitemlevel\c!stopper}} + {\let\tempsymbol\empty}% + \fi} + + +\def\actualitemnumber + {\ifconditional\reverselistitem + \convertnumber\currentitemsymbol{\numexpr\currentmaxnofitems+\currentitemoffset-\currentitemnumber+1\relax}% + \else + \convertnumber\currentitemsymbol{\numexpr\currentminnofitems+\currentitemoffset+\currentitemnumber-1\relax}% + \fi} + +% PAS OP: ook 'opelkaar' en zo worden getest, nog eens afvangen! + +\def\unknownitemsymbol{?} + +\def\setitemmark#1% % en pas op: resets \docommand + {\doifsymboldefinedelse{#1} + {\edef\currentitemsymbol{#1}% + \setxvalue{\@@globalitemsymbol\currentitemlevel}{\currentitemsymbol}% + \setgvalue{\@@localitemsymbol \currentitemlevel}{\unknownitemsymbol}% + \def\listitem{\symbol[\currentitemsymbol]}% + \let\@@opsymbol\empty}% \let\docommand\gobbleoneargument} + {\doifconversiondefinedelse{#1} + {\edef\currentitemsymbol{#1}% + \setxvalue{\@@globalitemsymbol\currentitemlevel}{\currentitemsymbol}% + \setgvalue{\@@localitemsymbol\currentitemlevel }{\actualitemnumber }% + \ifconditional\textlistitem + \doifsomething{\getitemparameter\currentitemlevel\c!lefttext} + {\let\tempsymbol\empty}% + \fi + \def\listitem + {\getitemparameter\currentitemlevel + {\ifconditional\textlistitem\c!lefttext\else\c!left\fi}% + \getvalue{\@@localitemsymbol\currentitemlevel}\tempsymbol + \getitemparameter\currentitemlevel + {\ifconditional\textlistitem\c!righttext\else\c!right\fi}}% + \let\@@opsymbol\empty}%\let\docommand\gobbleoneargument} + {}}} + +\def\calculatelistwidth#1#2% distance deals with 'broad' + {#2=\getitemparameter{#1}\c!distance\relax + \ifnum\getitemparameter{#1}\c!factor>\zerocount + \ifdim#2=\zeropoint #2=.5em\fi + \fi + \multiply#2 \getitemparameter{#1}\c!factor + \advance #2 \getitemparameter{#1}\c!width\relax} + +% The next conditionals deal with \item \startitemgroup. It +% looks like a hack to skip back, but that way we preserve +% the indentation and bullet placement. It's a rather +% untested feature. + +\newconditional\concatnextitem \setfalse\concatnextitem +\newconditional\autoconcatnextitem \settrue \autoconcatnextitem +\newsignal \itemsignal + +\def\startitemgroup + {\dotripleempty\dostartitemgroup} + +% \def\dostartitemgroup[#1][#2][#3]% +% {\bgroup +% \def\currentitemgroup{#1}% +% \ifthirdargument +% \dodostartitemgroup[#2][#3]% +% \else +% \doifassignmentelse{#2} +% {\dodostartitemgroup[][#2]} +% {\dodostartitemgroup[#2][]}% +% \fi} + +\def\dostartitemgroup[#1][#2][#3]% + {\bgroup + \ifnum\currentitemlevel=\zerocount + \def\currentitemgroup{#1}% no nested mixing of itemgroups + \fi + \ifthirdargument + \dodostartitemgroup[#2][#3]% + \else + \doifassignmentelse{#2} + {\dodostartitemgroup[][#2]} + {\dodostartitemgroup[#2][]}% + \fi} + +\def\dodostartitemgroup[#1]% [#2]% + {\relax % prevents lookahead + \ifnum\currentitemlevel=\maxitemdepth\relax + \showmessage\m!layouts9{\number\maxitemdepth}% + \let\itemincrement\zerocount + \else + \let\itemincrement\plusone + \fi + \global\advance\itemdepth\itemincrement + \xdef\currentitemlevel{\number\itemdepth}% + \initializeitemgrouplevel\currentitemlevel % safeguard + \edef\itemgroupoptions{\getitemparameter\currentitemlevel\c!option}% + \ifx\itemgroupoptions\empty + \edef\itemgroupoptions{#1}% + \else + \doifsomething{#1}{\edef\itemgroupoptions{\itemgroupoptions,#1}}% + \fi + \expanded{\redostartitemgroup[\itemgroupoptions]}}% [#2] + +\let\startcollectitems\relax +\let\stopcollectitems \relax + +%D A nice example of a plugin: +%D +%D \startbuffer +%D \startitemize[a,random,packed] +%D \startitem first \stopitem \startitem second \stopitem +%D \startitem third \stopitem \startitem fourth \stopitem +%D \stopitemize +%D +%D \startitemize[a,random,packed] +%D \startitem first \stopitem \startitem second \stopitem +%D \startitem third \stopitem \startitem fourth \stopitem +%D \stopitemize +%D +%D \startitemize[a,packed] +%D \startitem first \stopitem \startitem second \stopitem +%D \startitem third \stopitem \startitem fourth \stopitem +%D \stopitemize +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +% better collectitems als conditional and a real plugin mechanism (some day) + +\@EA\long\@EA\def\@EA\collectitemgroupitem\@EA#\@EA1\csname\e!stop\v!item\endcsname + {\increment\itemcollectcounter + \long\setvalue{\v!item*\itemcollectcounter}{\item#1\par}} + +\def\flushcollecteditems + {\ifconditional\randomizeitems + \getrandomnumber\itemcollectcounternow\plusone\itemcollectcounter + \else + \increment\itemcollectcounternow + \fi + \doifdefined{\v!item*\itemcollectcounternow} + {\getvalue{\v!item*\itemcollectcounternow}% + \letbeundefined{\v!item*\itemcollectcounternow}% + \increment\itemcollectcounterdone}% + \ifnum\itemcollectcounterdone<\itemcollectcounter\relax + \expandafter\flushcollecteditems + \fi} + +\def\stopcollectitems + {\ifconditional\randomizeitems + \newcounter\itemcollectcounterdone + \ifnum\itemcollectcounter>\zerocount + \@EAEAEA\flushcollecteditems + \fi + \fi} + +\def\startcollectitems + {\ifconditional\randomizeitems + \newcounter\itemcollectcounter + \letvalue{\e!start\v!item}\collectitemgroupitem + \fi} + +%D End of plugin. + +\ifx\startcolumns\undefined \def\startcolumns[#1]{} \fi +\ifx\stopcolumns \undefined \let\stopcolumns\relax \fi + +\def\dosetsymalign#1% hm, we should use one of the core-spa macros or make a helper + {\processaction + [#1] + [ \v!flushleft=>\let\symalignleft\relax, + \v!right=>\let\symalignleft\relax, + \v!flushright=>\let\symalignleft\hfill, + \v!left=>\let\symalignleft\hfill, + \v!middle=>\let\symalignleft\hfil, + \v!center=>\let\symalignleft\hfil]} + +\def\redostartitemgroup[#1][#2]% + {\setfalse\inlinelistitem % new, no indent (leftskip) + \setfalse\concatnextitem % new, concat + \setfalse\txtlistitem + \ifhmode + \ifconditional\autoconcatnextitem % new, concat + \ifdim\lastskip=\itemsignal % new, concat + \settrue\concatnextitem % new, concat + \fi % new, concat + \fi % new, concat + \ifconditional\textlistitem\else\doifnotinset\v!text{#1}\par\fi % suboptimal + \fi + \begingroup + % new where, ok or not / we should integrate random, intro, continue here + % beware, the following no longer inherit from the previous level, is this ok? + \setfalse\reverselistitem + \setfalse\introlistitem + \setfalse\autointrolistitem + \setfalse\beforelistitem + \setfalse\afterlistitem + \setfalse\nowhitelistitem + \setfalse\randomizeitems + % + \doifinsetelse\v!intro {#1}{\settrue\introlistitem }{\setfalse\introlistitem }% + \doifinsetelse\v!random {#1}{\settrue\randomizeitems }{\setfalse\randomizeitems }% + \doifinsetelse\v!continue{#1}{\settrue\continuelistitems}{\setfalse\continuelistitems}% + % == \doifinsetelse\v!intro{#1}\settrue\setfalse\introlistitem + \global\advance\noflists\plusone + \currentnoflists=\noflists + \newcounter\noflistelements + \setfalse\headlistitem + \setfalse\sublistitem + \setfalse\symbollistitem + \let\marsymbol\relax + \globallet\doitemdestination\empty + \let\symsymbol\empty + \let\symalignleft\relax + \the\itemgroupcommands +\checkcurrentnofitems + % \getitemparameter\currentitemlevel\empty + \let\listitem\empty % ** start value + \doifelsenothing{#1} % iffirstargument + {\edef\@@opsymbol{\getitemparameter\currentitemlevel\c!symbol}% + \letgvalueempty{\@@globalitemsymbol\currentitemlevel}% + \global\letitemparameter\currentitemlevel\v!continue\empty + % \setitemmark\@@opsymbol % ** default value + \dosetupitemgroupvariable[\currentitemlevel][#2]} + {\dosetupitemgroupconstant[\currentitemlevel][#1]% + \dosetupitemgroupvariable[\currentitemlevel][#2]% + \doifinsetelse\v!continue{#1}% \noexpand, else problems in non-etex with chinese + {\edef\@@opsymbol{\noexpand\getvalue{\@@globalitemsymbol\currentitemlevel}}% + \getitemparameter\currentitemlevel\v!continue} + {\edef\@@opsymbol{\noexpand\getitemparameter{\currentitemlevel}{\c!symbol}}% + \global\setitemparameter\currentitemlevel\v!continue + {\dosetupitemgroupconstant[\currentitemlevel][#1]% + \dosetupitemgroupvariable[\currentitemlevel][#2]}}% + \def\docommand##1% \setitemmark resets \docommand + {\doifnot{##1}{0}{\setitemmark{##1}}}% + % \processcommalist[#1,\@@opsymbol]\docommand + \processcommalist[#1]\docommand}% ** preset sequence or provided sequence + % moved to here, after settings + \ifnum\currentitemlevel=\plusone % NIEUW + \doadaptleftskip {\getitemparameter1\c!margin}% + \doadaptleftskip {\getitemparameter1\c!leftmargin}% + \doadaptrightskip{\getitemparameter1\c!rightmargin}% + \fi + \dosetraggedcommand{\getitemparameter\currentitemlevel\c!align}\raggedcommand + \dosetsymalign{\getitemparameter\currentitemlevel\c!symalign}% + \doifsomething{\getitemparameter\currentitemlevel\c!indenting} + {% is \expanded needed? + \expanded{\setupindenting[\getitemparameter\currentitemlevel\c!indenting]}}% + % + \setitemlevel{#1}% moved to here + \ifx\listitem\empty + \setitemmark\@@opsymbol % ** default value + \ifx\listitem\empty + \edef\currentitemsymbol{\currentitemlevel}% ** fall back + \fi + \fi + \ifconditional\autointrolistitem\ifnum\prevgraf<3 + \settrue\introlistitem + \fi\fi + \ifconditional\paragraphlistitem + \ifnum\currentitemlevel>\plusone + \letitemparameter\currentitemlevel\c!inbetween\empty + \fi + \fi + \ifconditional\packlistitem + \letitemparameter\currentitemlevel\c!inbetween\empty + \fi + \doifinset\v!columns{#1}% + {\ifinsidecolumns\else\ifcase\itemcolumndepth + \global\itemcolumndepth\currentitemlevel\relax + \itembeforecommand + \processfirstactioninset + [#1] + [ \v!one=>\!!counta1\relax, + \v!two=>\!!counta2\relax, + \v!three=>\!!counta3\relax, + \v!four=>\!!counta4\relax, + \v!five=>\!!counta5\relax, + \s!unknown=>\@EA\!!counta\getitemparameter\currentitemlevel\c!n]% + \startcolumns + [\c!n=\!!counta, % netter \??op\currentitemlevel\c!n + \c!height=, + \c!rule=\v!off, + \c!balance=\v!yes, + \c!align=\v!no]% + \fi\fi}% +\ifconditional\fittinglistitems + \splititemtwopassdata\currentnoflists + \ifdim\itemdataw sp>\zeropoint + \expanded{\setitemparameter{\currentitemlevel}{\c!width}{\itemdataw sp}}% + \fi +\fi + \calculatelistwidth\currentitemlevel{\dimen0}% + \ifdim\dimen0>\zeropoint\relax + \ifconditional\inlinelistitem\else + \advance\leftskip \dimen0\relax + \fi + \fi + \startcollectitems} + +% test / example +% +% \startnarrower[left] \startcolumns[n=3] \startitemize +% \item \input ward \item \input ward \item \input ward +% \stopitemize \stopcolumns\stopnarrower \blank +% +% \startnarrower[left] \startitemize[columns,three] +% \item \input ward \item \input ward \item \input ward +% \stopitemize \stopnarrower \blank +% +% \setupitemize[leftmargin=1.5em] \startitemize[columns,three] +% \item \input ward \item \input ward \item \input ward +% \stopitemize \blank + +\def\stopitemgroup + {\stopcollectitems + \ifconditional\textlistitem + \removeunwantedspaces\space\ignorespaces + \else + \par + \fi + \dolistreference + \ifconditional\firstlistitem \else \endgroup \fi % toegevoegd, eerste \som opent groep + \ifnum\itemcolumndepth=\currentitemlevel\relax + \stopcolumns + \global\itemcolumndepth\zerocount + \itemaftercommand + \dontrechecknextindentation + \else + \ifnum\currentitemlevel=\plusone + \doitembreak\allowbreak % toegevoegd + \itemaftercommand % \getitemparameter\currentitemlevel\c!after + % was: \dochecknextindentation\??oo, is now: + \dochecknextindentation{\??op\currentitemgroup\currentitemlevel}% + \else + % nieuw, not yet nobreak handling + \ifcase\autoitemgroupspacing + \itemaftercommand + \or + \itemaftercommand + \fi + \dontrechecknextindentation + \fi + \fi + % new test, needed in sidefloats (surfaced in volker's proceedings) + \ifconditional\textlistitem % else forgotten + \endgroup + \global\advance\itemdepth-\itemincrement + \xdef\currentitemlevel{\number\itemdepth}% + \egroup + \else + \endgroup + \global\advance\itemdepth-\itemincrement + \xdef\currentitemlevel{\number\itemdepth}% + \egroup + \par + \fi + \dorechecknextindentation} + +\newtoks\itemgroupcommands + +\def\itemgroupitem + {\doitemgroupitem} + +\def\itemgroupnoitem + {\doitemgroupnoitem} + +\def\itemgroupbutton[#1]% + {\gdef\doitemdestination{#1}% + \itemgroupitem} + +\def\itemgroupdummy + {\itemgroupsymbol{\strut}\strut} + +\def\itemgroupsubitem + {\settrue\sublistitem + \itemgroupitem} + +\def\itemgroupsymbol#1% + {\def\symsymbol{\doitemattributes\currentitemlevel\c!symstyle\c!symcolor{#1}}% + \settrue\symbollistitem + \itemgroupitem} + +\def\itemgroupedge#1% + {\itemgroupsymbol + {\calculatelistwidth\currentitemlevel{\dimen0}% + \hbox to \dimen0 + {#1\hskip\getitemparameter\currentitemlevel\c!distance}}} + +\def\itemgrouphead + {\settrue\headlistitem\doitemgrouphead} + +\def\itemgroupitems + {\dosingleempty\doitemgroupitems} + +\def\doitemgroupitems[#1]% + {\itemgroupedge + {\dorecurse{0\getitemparameter\currentitemlevel\c!items}{\listitem\hss}% + \unskip}} + +\def\itemgroupmargin#1% + {\def\marsymbol + {\llap + {\doitemattributes\currentitemlevel\c!marstyle\c!marcolor{#1}% + \hskip\leftskip\hskip\leftmargindistance}}% + \itemgroupitem} + +\appendtoks \let\item \itemgroupitem \to \itemgroupcommands +\appendtoks \let\noitem \itemgroupnoitem \to \itemgroupcommands +\appendtoks \letvalue\v!item \itemgroupitem \to \itemgroupcommands +\appendtoks \let\itm \itemgroupitem \to \itemgroupcommands +\appendtoks \let\but \itemgroupbutton \to \itemgroupcommands +\appendtoks \let\nop \itemgroupdummy \to \itemgroupcommands +\appendtoks \letvalue\v!sub \itemgroupsubitem \to \itemgroupcommands +\appendtoks \letvalue\v!sym \itemgroupsymbol \to \itemgroupcommands +\appendtoks \letvalue\v!ran \itemgroupedge \to \itemgroupcommands +\appendtoks \letvalue\v!head \itemgrouphead \to \itemgroupcommands +\appendtoks \letvalue\v!its \itemgroupitems \to \itemgroupcommands +\appendtoks \letvalue\v!mar \itemgroupmargin \to \itemgroupcommands + +% todo : \startitem .. \stopitem + +\appendtoks + \letvalue{\e!start\v!item}\itemgroupitem + \letvalue{\e!stop \v!item}\endgraf +\to \itemgroupcommands + +\appendtoks + \setvalue{\e!start\v!head}#1{\itemgrouphead#1\par}% + \letvalue{\e!stop \v!head}\endgraf +\to \itemgroupcommands + +% \startitemize +% \starthead {xx} test \stophead +% \startitem test \stopitem +% \startitem test \stopitem +% \stopitemize + +% Sometimes the user demands get pretty weird: +% +% \startitemize +% \item test +% \item test +% \headsym{xx} test \par test +% \stopitemize + +% aligned items +% +% \startitemize[n,fit,broad][itemalign=flushright] +% \dorecurse{100}{\item The first item.} +% \stopitemize +% +% \setupitemgroup[itemize][each][fit] +% \setupitemgroup[itemize][each][distance=.5em,factor=1,itemalign=flushright] +% +% \startitemize[n] +% \dorecurse{100}{\item The first item.} +% \stopitemize + +\appendtoks \let\headsym \itemgroupheadsym \to \itemgroupcommands + +\def\itemgroupheadsym#1% + {\def\symsymbol{\doitemattributes\currentitemlevel\c!symstyle\c!symcolor{#1}}% + \settrue\symbollistitem + \settrue\headlistitem + \doitemgrouphead} + +% \defineitemgroup[gbitemize] +% \setupitemgroup[gbitemize][each][headstyle=bold] + +% \startgbitemize +% \txt{italian} some italians like this kind of cross||breed between +% an itemize and a description +% \txt{sicilians} i wonder how many sicilian mathematicians do a thesis +% on the math involved in predicting the next big bang of the vulcano +% \stopgbitemize + +\appendtoks \letvalue\v!txt \itemgrouptext \to \itemgroupcommands + +\newconditional\txtlistitem \setfalse\txtlistitem + +\def\itemgrouptext#1% + {\def\symsymbol{\doitemattributes\currentitemlevel\c!headstyle\c!headcolor{#1}}% + \settrue\symbollistitem + \settrue\txtlistitem + \itemgroupitem} + +\def\itembreak % -10 + {\flushnotes\penalty-5\relax} + +\def\itemnobreak % +5 + {\flushnotes\penalty+5\ifinsidecolumns\else00\fi\relax} + +\def\dodotxtitem + {\scratchdimen\wd8 + \advance \scratchdimen \getitemparameter\currentitemlevel\c!distance\relax + \ifdim\scratchdimen>\dimen0 + \advance\scratchdimen -\dimen0 + \else + \scratchdimen\zeropoint + \fi + \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hss}}% was: \hfill + \hskip\scratchdimen} + +\def\optimizelistitemsbreak + {\ifcase\itemcolumndepth \ifconditional\optimizelistitem + \ifcase \currentnofitems \else + \ifnum\currentnofitems=\plusthree + \ifnum\noflistelements>\plusone + \doitembreak\itemnobreak + \fi + \else\ifnum\currentnofitems>\plusthree + \ifnum\noflistelements=\plustwo + \ifconditional\introlistitem + \doitembreak\nobreak + \else + \doitembreak\itemnobreak + \fi + \else\ifnum\currentnofitems=\noflistelements\relax + \doitembreak\itemnobreak + \else\ifnum\noflistelements>\plustwo + \doitembreak\itembreak + \else + \ifconditional\introlistitem\else\doitembreak\itembreak\fi + \fi\fi\fi + \fi\fi + \fi + \fi\fi} + +\def\dolistitem % evt aantal items opslaan per niveau, scheelt zoeken + {\ifconditional\textlistitem + % begin of item + \else + \par + \fi +% \ignorespaces + \increment\noflistelements + \optimizelistitemsbreak + \noindent + \setbox8\hbox + {\ifconditional\headlistitem + \ifconditional\symbollistitem + \symsymbol + \else + \doitemattributes\currentitemlevel\c!headstyle\c!headcolor{\listitem}% + \fi + \else + \ifconditional\symbollistitem + \symsymbol % no attributes, why? + \else + \doitemattributes\currentitemlevel\c!style\c!color{\listitem}% + \fi + \fi}% +\ifconditional\fittinglistitems + \ifdim\wd8>\getitemparameter\currentitemlevel\c!maxwidth sp\relax + \expanded{\global\noexpand\setitemparameter{\currentitemlevel}{\c!maxwidth}{\number\wd8}}% + \fi + \splititemtwopassdata\currentnoflists + \ifdim\itemdataw sp>\zeropoint + \setbox8\simplealignedbox{\getitemparameter\currentitemlevel\c!itemalign}{\itemdataw sp}{\box8}% + \fi +\fi + \doifsomething\doitemdestination + {\setbox8\hbox{\goto{\box8}[\doitemdestination]}}% + \globallet\doitemdestination\empty + \dimen2=\getitemparameter\currentitemlevel\c!width\relax + % new, prevents loops when symbol is (not yet found) graphic + \ht8=\strutheight + \dp8=\strutdepth + % so that content differs per run (esp mp graphics afterwards) + \checkforrepeatedlistitem + \ifdim\dimen2<\zeropoint\relax + \llap{\ifconditional\sublistitem\llap{+}\fi\box8\hskip\leftmargindistance}% + \else + \ifdim\dimen2=\zeropoint\relax + \calculatelistwidth1{\dimen0}% + \else + \calculatelistwidth\currentitemlevel{\dimen0}% + \fi + \ifconditional\textlistitem + \hbox{\ifconditional\sublistitem+\fi\box8\hskip\interwordspace}\nobreak + \else\ifconditional\inlinelistitem + \hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hss}% was: \hfill + \else\ifconditional\txtlistitem + \dodotxtitem + \else + % todo: align+marge binnen de hbox +% \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hfill}}% + \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi + \symalignleft + \box8\hfil + \hskip\getitemparameter\currentitemlevel\c!distance% T h + }}% + \fi\fi\fi + \fi + \forceunexpanded % needed for m conversion (\os) / i need to look into this + \setevalue{\@@currentitemsymbol\currentitemlevel}% + {\getvalue{\@@localitemsymbol\currentitemlevel}}% still problems with \uchar ? + %{\noexpand\getvalue{\@@localitemsymbol\currentitemlevel}}% no, spoils subrefs + \resetunexpanded + \setfalse\headlistitem + \setfalse\sublistitem + \setfalse\symbollistitem + \EveryPar{\ignorespaces}% needed ? + \ignorespaces} + +% For Wolfgang Schuster + +% \startitemize[n,repeat] +% \noitem \startitemize[a] \item Item 1.a. \item Item 1.b. \stopitemize +% \noitem \startitemize[a] \item Item 2.a. \item Item 2.b. \stopitemize +% \stopitemize + +\def\donolistitem % reduced \dolistitem + {\increment\noflistelements + \setbox8\hbox + {\doitemattributes\currentitemlevel\c!style\c!color{\listitem}}% + \checkforrepeatedlistitem + \ignorespaces} + +\def\doitemgroupnoitem + {\doadvanceitem\donolistitem} + +% For Frank Grieshaber and Mojca Miklavec: + +\newconditional\repeatlistitem + +\def\checkforrepeatedlistitem + {\ifnum\currentitemlevel=\plusone + \initializeboxstack{item}% + \fi + \ifconditional\repeatlistitem + \savebox{item}{\currentitemlevel}{\hbox{\copy8}}% + \setbox8\hbox to \wd8 + {\setbox\scratchbox\hbox + {\scratchcounter\currentitemlevel + \advance\scratchcounter\minusone + \dorecurse\scratchcounter{\foundbox{item}{\recurselevel}}}% + \ifnum\currentitemlevel>\plusone + \ifdim\wd\scratchbox>\zeropoint + \hskip-\dimen2 + \box\scratchbox + \fi + \fi + \box8 }% + \fi} + +% \startbuffer +% \item +% \startitemize[n] +% \item item 1.1 +% \item item 1.2 +% \startitemize[n] \item item 1.2.1 \item item 1.2.2 \stopitemize +% \item item 1.3 +% \stopitemize +% \item +% \startitemize[n] \item item 2.1 \item item 2.2 \stopitemize +% \item item 3 +% \startitemize[n] \item item 3.1 \item item 3.2 \stopitemize +% \item +% \startitemize[n] \item item 4.1 \item item 4.2 \stopitemize +% \stopbuffer +% +% \startitemize[n,repeat,6*broad,packed] \getbuffer \stopitemize \blank[3*big] +% \startitemize[n,repeat,packed] \getbuffer \stopitemize \blank[3*big] +% \setupitemize[each][atmargin][width=3em] +% \startitemize[n,repeat,packed] \getbuffer \stopitemize + +\chardef\autoitemgroupspacing=2 % 0 = voor/na, 1=tussen als geen voor 2=(prev)tussen=old/normal + +\def\complexdoitemgroupitem[#1]% + {\ifconditional\textlistitem + % begin of item + \else + \par + \fi +% \ignorespaces + \ifconditional\concatnextitem % new, concat + \doitembreak\nobreak % new, concat + \fi % new, concat + \doadvanceitem + \ifcase\itemcolumndepth \ifnum\noflistelements>0\relax + % wrong, but why was this here in the first place, probably some + % mistaken change when cleaning up: \doitembreak\nobreak + \fi\fi + \ifconditional\firstlistitem + \setfalse\firstlistitem + \begingroup + \ifcase\currentitemlevel + \or % 1 + \ifcase\itemcolumndepth + \ifconditional\introlistitem\doitembreak\nobreak\fi + \itembeforecommand % \getitemparameter\currentitemlevel\c!before + \ifconditional\introlistitem\doitembreak\nobreak\fi + \fi + \else % 2 en hoger + \ifconditional\paragraphlistitem \else + \let\previtemlevel\currentitemlevel + \decrement\previtemlevel + \ifcase\autoitemgroupspacing\relax % nieuw + \itembeforecommand + \or + \doifelsenothing{\itembeforecommand} + {\itembeforecommand} + {\getitemparameter\previtemlevel\c!inbetween}% + \else + \getitemparameter\previtemlevel\c!inbetween % == itemlevel-1 + \fi + \fi + \fi + \else +\ifconditional\textlistitem % was bugged: \inlinelistitem +% \removeunwantedspaces\hskip\interwordspace\!!plus\emwidth\relax % new per 2006/10/20 + \removeunwantedspaces\hskip\emwidth\!!plus\interwordstretch\!!minus\interwordshrink\relax % new per 2006/10/20 +\else + \iteminbetweencommand +\fi + \fi + \ifconditional\concatnextitem % new, concat + \vskip-\lastskip % new, concat + \vskip-\lineheight % new, concat + \nobreak % new, concat + \fi % new, concat +% \ignorespaces + \dolistitem + \relax + \ifconditional\packlistitem + \setupwhitespace[\v!none]% + \fi + \getitemparameter\currentitemlevel\c!inner + \marsymbol + \let\marsymbol\relax + \doifsomething{#1} + {\doifnot\itemreference\unknownitemreference + {\bgroup + \protectconversion + \rawreference\s!lst{#1}\itemreference + \egroup}}% + \strut % added 11-08-99 + \setfalse\concatnextitem % new, concat + \nobreak % else problems with intext items + \hskip\itemsignal % new, concat + \getitemparameter\currentitemlevel\c!command} % \defaultitemcommand + +\def\defaultitemcommand + {\EveryPar{\ignorespaces}% needed ? + \ignorespaces} + +% For Giuseppe "Oblomov" Bilotta, inspired on a suggestion by Taco +% Hoekwater. +% +% \def\MyItemCommand#1{{\bf#1}\quad} +% \setupitemgroup[itemize][command=\MyItemCommand] +% +% \startitemize +% \item {test} is this okay? +% \item {test} is this okay? +% \item {test} is this okay? +% \stopitemize + +\def\complexitem[#1]#2\par % todo: no two pass data + {\startitemgroup[#1]% + \complexdoitemgroupitem[]\begstrut#2\endstrut\par + \stopitemgroup} + +\definecomplexorsimpleempty\item +\definecomplexorsimpleempty\doitemgroupitem + +\def\complexhead[#1]#2\par#3\par + {\startitemgroup[#1]% + \complexdoitemgrouphead[]\begstrut#2\endstrut\par\begstrut#3\endstrut\par + \stopitemgroup} + +% \def\complexdoitemgrouphead[#1]#2\par% % beter in \complexdosom hangen met een if +% {\ifconditional\firstlistitem\else\doitembreak\allowbreak\fi +% \ifconditional\packlistitem\else\itembeforeheadcommand\fi +% \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\currentitemlevel % incr in \complexdosom +% \doitembreak\allowbreak +% \fi\fi\fi +% \complexdoitemgroupitem[#1]{\doitemattributes\currentitemlevel\c!headstyle\c!headcolor +% {\ignorespaces#2}}% +% \ifconditional\textlistitem +% \removeunwantedspaces\space\ignorespaces +% \else +% \par +% \fi +% \doitembreak\nobreak +% \ifconditional\packlistitem\else\itemafterheadcommand\fi +% \doitembreak\nobreak +% \noindentation} +% +% the next solution accepts \head test \type{x{x}x} test ... + +\def\dostartitemattributes#1{\dostartattributes{\??op\currentitemgroup#1}} +\def\dostopitemattributes {\dostopattributes} + +\def\complexdoitemgrouphead[#1]% beter in \complexdosom hangen met een if + {\ifconditional\firstlistitem\else\doitembreak\allowbreak\fi + \ifconditional\packlistitem\else\itembeforeheadcommand\fi + \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\currentitemlevel % incr in \complexdosom + \doitembreak\allowbreak + \fi\fi\fi + \complexdoitemgroupitem[#1]% + \bgroup + \dostartitemattributes\currentitemlevel\c!headstyle\c!headcolor\empty + \ignorespaces + \let\par\enditemhead} % brrrr but simple anyway + +\def\enditemhead + {\removeunwantedspaces + \dostopitemattributes + \egroup + \ifconditional\textlistitem + \space\ignorespaces + \else + \par + \fi + \doitembreak\nobreak + \ifconditional\packlistitem\else\itemafterheadcommand\fi + \doitembreak\nobreak + \noindentation} + +\definecomplexorsimpleempty\head +\definecomplexorsimpleempty\doitemgrouphead + +% \def\sym#1% +% {\noindent +% \begingroup +% \setbox\scratchbox\hbox{\trialtypesettingtrue#1}% +% \setbox\scratchbox\hbox +% \ifdim\wd\scratchbox<1em to 1.5\else spread 1\fi em{#1\hfil}% +% \hangindent\wd\scratchbox +% \box\scratchbox +% \endgroup +% \ignorespaces} + +\def\sym#1% + {\noindent + \begingroup + \setbox\scratchbox\hbox{\trialtypesettingtrue#1}% + \setbox\scratchbox\hbox + \ifdim\wd\scratchbox<1em to 1.5\else spread 1\fi em{#1\hfil}% + \expanded{\box\scratchbox\endgroup\hangindent\the\wd\scratchbox}% + \ignorespaces} + +\setupitemgroups % undocumented + [\c!levels=6, + \c!margin=\zeropoint, + \c!leftmargin=\zeropoint, + \c!rightmargin=\zeropoint, + \c!indentnext=\v!yes, + \c!width=1.5em, + \c!factor=0, + \c!distance=.5em, + %\c!align=\v!normal, % definitely not \v!normal, see mails and + \c!align=, % debug reports of David A & Patrick G on context list + \c!symalign=, + \c!color=, + \c!indenting=, % untouched if empty + \c!color=, + \c!style=, % kan tzt weg + \c!marstyle=\c!type, % \c! ??? + \c!symstyle=, + \c!headstyle=, + \c!marcolor=, + \c!symcolor=, + \c!headcolor=, + \c!beforehead=, + \c!afterhead=\blank, + \c!before=\blank, + \c!inbetween=\blank, + \c!after=\blank, + \c!stopper=., + \c!placestopper=\v!yes, + \c!inner=, + \c!n=2, + \c!items=4, + \c!lefttext=(, + \c!righttext=), + \c!start=1, + \c!option=, + \c!command=\defaultitemcommand, + \c!symbol=\currentitemlevel] % \v!niveau + +\def\defineitemgroup + {\dodoubleempty\dodefineitemgroup} + +\def\dodefineitemgroup[#1][#2]% + {\doifsomething{#1} + {\pushmacro\currentitemgroup + \def\currentitemgroup{#1}% + \setvalue{\e!start#1}{\startitemgroup[#1]}% + \setvalue{\e!stop#1}{\stopitemgroup}% + \setvalue{\e!setup#1\e!endsetup}{\setupitemgroup[#1]}% + \getparameters[\??ig#1][\c!levels=3,#2]% + \ifnum\getvalue{\??ig#1\c!levels}<\maxitemdepth\relax + \setevalue{\??ig#1\c!levels}{\number\maxitemdepth}% + \fi + \dorecurse{\getvalue{\??ig#1\c!levels}}{\initializeitemgrouplevel\recurselevel}% + \popmacro\currentitemgroup}} + +% efficient default itemize as well as upward compatible +% definition: + +\defineitemgroup [\v!itemize] [\c!levels=6] + +% keep these, needed for styles: + +% \def\startitemize {\startitemgroup[\v!itemize]} +% \def\stopitemize {\stopitemgroup} +% \def\setupitemize {\setupitemgroup[\v!itemize]} + +\protect \endinput |