ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* itemize numbering
@ 2008-05-19 12:08 Hans van der Meer
  2008-05-19 12:15 ` Wolfgang Schuster
  0 siblings, 1 reply; 8+ messages in thread
From: Hans van der Meer @ 2008-05-19 12:08 UTC (permalink / raw)
  To: NTG ConTeXt

The following minimal example goes wrong:
\starttext
\startitemize[a]
\item sub a
	\startitemize
	\item sub a1
	\item sub a2
	\stopitemize
\item sub b
\stopitemize
\stoptext

The result is:
. sub a
   - sub a1
   - sub a2
a. sub b

Whereas:
\starttext
\startitemize[a]
\item sub a
\item sub b
\stopitemize
\stoptext

results in the expected output:
a. sub a
b. sub b

Both mkii and mkiv show this behaviour. Versions are:
This is pdfTeXk, Version 3.141592-1.40.7 (Web2C 7.5.6)
ConTeXt  ver: 2008.04.18 14:17 MKII  fmt: 2008.4.19  int: english/ 
english

Is this corrected in a later version than I have installed or is it  
still present?

Hans van der Meer




___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: itemize numbering
  2008-05-19 12:08 itemize numbering Hans van der Meer
@ 2008-05-19 12:15 ` Wolfgang Schuster
  0 siblings, 0 replies; 8+ messages in thread
From: Wolfgang Schuster @ 2008-05-19 12:15 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Mon, May 19, 2008 at 2:08 PM, Hans van der Meer <hansm@science.uva.nl> wrote:
> The following minimal example goes wrong:
> \starttext
> \startitemize[a]
> \item sub a
>        \startitemize
>        \item sub a1
>        \item sub a2
>        \stopitemize
> \item sub b
> \stopitemize
> \stoptext
>
> The result is:
> . sub a
>   - sub a1
>   - sub a2
> a. sub b
>
> Whereas:
> \starttext
> \startitemize[a]
> \item sub a
> \item sub b
> \stopitemize
> \stoptext
>
> results in the expected output:
> a. sub a
> b. sub b
>
> Both mkii and mkiv show this behaviour. Versions are:
> This is pdfTeXk, Version 3.141592-1.40.7 (Web2C 7.5.6)
> ConTeXt  ver: 2008.04.18 14:17 MKII  fmt: 2008.4.19  int: english/
> english
>
> Is this corrected in a later version than I have installed or is it
> still present?

Works with the latest version on the wiki.

> Hans van der Meer

Wolfgang
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Itemize numbering
@ 2008-05-02 14:03 richard.stephens
  0 siblings, 0 replies; 8+ messages in thread
From: richard.stephens @ 2008-05-02 14:03 UTC (permalink / raw)
  To: Aditya Mahajan; +Cc: mailing list for ConTeXt users


[-- Attachment #1.1: Type: text/plain, Size: 575 bytes --]

Aditya,

Many thanks, that works beautifully.

Thanks again.

Richard



On Tue, 29 Apr 2008, richard.stephens@converteam.com wrote:

> Hello All,
>
> I just tried the following on Context Live:
>
> \starttext
> \startitemize[n]
>  \item one
>  \item two
>    \startitemize
>      \item a
>      \item b
>    \stopitemize
>  \item three
> \stopitemize
> \stoptext
>
> and the first itemize starts at 0.  Remove the inner itemize and it 
starts
> at 1.
>
> Is this a feature or a bug?  How do I get around it?

Here is a modified core-itm.tex that corrects this bug.

Aditya


[-- Attachment #1.2: Type: text/html, Size: 1130 bytes --]

[-- Attachment #2: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Itemize numbering
  2008-04-29 14:45 richard.stephens
  2008-04-29 15:49 ` Aditya Mahajan
@ 2008-05-02 12:47 ` Aditya Mahajan
  1 sibling, 0 replies; 8+ messages in thread
From: Aditya Mahajan @ 2008-05-02 12:47 UTC (permalink / raw)
  To: richard.stephens; +Cc: mailing list for ConTeXt users, Hans Hagen

[-- Attachment #1: Type: TEXT/PLAIN, Size: 499 bytes --]

On Tue, 29 Apr 2008, richard.stephens@converteam.com wrote:

> Hello All,
>
> I just tried the following on Context Live:
>
> \starttext
> \startitemize[n]
>  \item one
>  \item two
>    \startitemize
>      \item a
>      \item b
>    \stopitemize
>  \item three
> \stopitemize
> \stoptext
>
> and the first itemize starts at 0.  Remove the inner itemize and it starts
> at 1.
>
> Is this a feature or a bug?  How do I get around it?

Here is a modified core-itm.tex that corrects this bug.

Aditya

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: TEXT/x-tex; name=core-itm.tex, Size: 46339 bytes --]

%D \module
%D   [       file=core-itm, % updated
%D        version=1997.03.31,
%D          title=\CONTEXT\ Core Macros,
%D       subtitle=itemgroups,
%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.

% new: text + lefttext=(,righttext=)
%      start=

\writestatus{loading}{Context Core Macros / Itemgroups}

\startmessages  dutch  library: layouts
      9: momenteel maximaal -- niveaus in opsommingen
\stopmessages

\startmessages  english  library: layouts
      9: currently no more than -- levels in itemizations
\stopmessages

\startmessages  german  library: layouts
      9: z.Z. nicht mehr als -- Niveaus in Posten
\stopmessages

\startmessages  czech  library: layouts
      9: aktualne ne vice nez -- urovne/urovni vyctu
\stopmessages

\startmessages  italian  library: layouts
      9: attualmente non più di -- livelli di elencazione
\stopmessages

\startmessages  norwegian  library: layouts
      9: for øyeblikket maksimalt -- nivåer i opplisting
\stopmessages

\startmessages  romanian  library: layouts
      9: acum nu se supota mai mult de -- nivele de adancime la iteratii
\stopmessages

\startmessages  french  library: layouts
      9: pas plus de -- niveaux pour l'instant dans les élémentarisations
\stopmessages

\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
   \fi}

% \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}

% 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}{0}%
     \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\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}
\f
\newtoks\itemgroupcommands

\def\itemgroupitem
  {\doitemgroupitem}

\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 \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}
\f
\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\z@
   \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 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
     \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}
\f
\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

[-- Attachment #3: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Itemize numbering
  2008-04-30 12:36   ` Henning Hraban Ramm
@ 2008-04-30 17:05     ` Aditya Mahajan
  0 siblings, 0 replies; 8+ messages in thread
From: Aditya Mahajan @ 2008-04-30 17:05 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Wed, 30 Apr 2008, Henning Hraban Ramm wrote:

> Am 2008-04-29 um 17:49 schrieb Aditya Mahajan:
>>> I just tried the following on Context Live:
>>>
>>> \starttext
>>> \startitemize[n]
>>>  \item one
>>>  \item two
>>>    \startitemize
>>>      \item a
>>>      \item b
>>>    \stopitemize
>>>  \item three
>>> \stopitemize
>>> \stoptext
>>>
>>> and the first itemize starts at 0.  Remove the inner itemize and
>>> it starts
>>> at 1.
>>>
>>> Is this a feature or a bug?  How do I get around it?
>>
>> I can confirm that here. This is indeed a bug.
>
> I reported some weeks ago that numbering starts always at 0 with --once
>
> I guess Hans & Co went after the dictum of Dijkstra[0], as quoted
> recently by Knuth[1], that counting should start at 0 ;-)
>
> [0] http://en.wikipedia.org/wiki/Edsger_W._Dijkstra
> [1] http://www.informit.com/articles/article.aspx?p=1193856

The reason for all these bugs of starting with zero is my reqest for a 
reverse key to itemize and then I could not foresee all the use cases.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Itemize numbering
  2008-04-29 15:49 ` Aditya Mahajan
@ 2008-04-30 12:36   ` Henning Hraban Ramm
  2008-04-30 17:05     ` Aditya Mahajan
  0 siblings, 1 reply; 8+ messages in thread
From: Henning Hraban Ramm @ 2008-04-30 12:36 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Am 2008-04-29 um 17:49 schrieb Aditya Mahajan:
>> I just tried the following on Context Live:
>>
>> \starttext
>> \startitemize[n]
>>  \item one
>>  \item two
>>    \startitemize
>>      \item a
>>      \item b
>>    \stopitemize
>>  \item three
>> \stopitemize
>> \stoptext
>>
>> and the first itemize starts at 0.  Remove the inner itemize and  
>> it starts
>> at 1.
>>
>> Is this a feature or a bug?  How do I get around it?
>
> I can confirm that here. This is indeed a bug.

I reported some weeks ago that numbering starts always at 0 with --once

I guess Hans & Co went after the dictum of Dijkstra[0], as quoted  
recently by Knuth[1], that counting should start at 0 ;-)

[0] http://en.wikipedia.org/wiki/Edsger_W._Dijkstra
[1] http://www.informit.com/articles/article.aspx?p=1193856


Greetlings from Lake Constance!
Hraban
---
http://www.fiee.net/texnique/
http://wiki.contextgarden.net
https://www.cacert.org (I'm an assurer)

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Itemize numbering
  2008-04-29 14:45 richard.stephens
@ 2008-04-29 15:49 ` Aditya Mahajan
  2008-04-30 12:36   ` Henning Hraban Ramm
  2008-05-02 12:47 ` Aditya Mahajan
  1 sibling, 1 reply; 8+ messages in thread
From: Aditya Mahajan @ 2008-04-29 15:49 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Tue, 29 Apr 2008, richard.stephens@converteam.com wrote:

> Hello All,
>
> I just tried the following on Context Live:
>
> \starttext
> \startitemize[n]
>  \item one
>  \item two
>    \startitemize
>      \item a
>      \item b
>    \stopitemize
>  \item three
> \stopitemize
> \stoptext
>
> and the first itemize starts at 0.  Remove the inner itemize and it starts
> at 1.
>
> Is this a feature or a bug?  How do I get around it?

I can confirm that here. This is indeed a bug.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Itemize numbering
@ 2008-04-29 14:45 richard.stephens
  2008-04-29 15:49 ` Aditya Mahajan
  2008-05-02 12:47 ` Aditya Mahajan
  0 siblings, 2 replies; 8+ messages in thread
From: richard.stephens @ 2008-04-29 14:45 UTC (permalink / raw)
  To: ntg-context


[-- Attachment #1.1: Type: text/plain, Size: 365 bytes --]

Hello All,

I just tried the following on Context Live:

\starttext
\startitemize[n]
  \item one
  \item two
    \startitemize
      \item a
      \item b
    \stopitemize
  \item three
\stopitemize
\stoptext

and the first itemize starts at 0.  Remove the inner itemize and it starts 
at 1. 

Is this a feature or a bug?  How do I get around it?

Thanks,

Richard

[-- Attachment #1.2: Type: text/html, Size: 1150 bytes --]

[-- Attachment #2: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2008-05-19 12:15 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-19 12:08 itemize numbering Hans van der Meer
2008-05-19 12:15 ` Wolfgang Schuster
  -- strict thread matches above, loose matches on Subject: below --
2008-05-02 14:03 Itemize numbering richard.stephens
2008-04-29 14:45 richard.stephens
2008-04-29 15:49 ` Aditya Mahajan
2008-04-30 12:36   ` Henning Hraban Ramm
2008-04-30 17:05     ` Aditya Mahajan
2008-05-02 12:47 ` Aditya Mahajan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).