summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/strc-itm.mklx
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/strc-itm.mklx')
-rw-r--r--tex/context/base/mkiv/strc-itm.mklx1886
1 files changed, 0 insertions, 1886 deletions
diff --git a/tex/context/base/mkiv/strc-itm.mklx b/tex/context/base/mkiv/strc-itm.mklx
deleted file mode 100644
index e2388eeec..000000000
--- a/tex/context/base/mkiv/strc-itm.mklx
+++ /dev/null
@@ -1,1886 +0,0 @@
-%D \module
-%D [ file=strc-itm,
-%D version=2008.10.20,
-%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.
-
-\writestatus{loading}{ConTeXt Structure Macros / Itemgroups}
-
-\registerctxluafile{strc-itm}{}
-
-%D As we analyze/register widths and such we could as well push and pop the numbers
-%D at the \LUA\ end (which saves a few calls).
-%D
-%D Cleaning up this module happened around the time when Kate Bush came up with the
-%D nicest numbered list of words: 50 Words For Snow. It's therefore no surprise that
-%D I had that cd running several times when updating this code. One of the
-%D highlights of 2011.
-%D
-%D This module needs to be rewritten but that is tricky with respect to
-%D compatibilitity. Basically each major variant (regular, text, columns,
-%D horizontal, etc) needs to be on its own.
-
-% todo: check breaks
-% todo: check grouping
-% todo: fixedconversion
-
-% \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
-%
-% \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
-%
-% 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
-%
-% beware, we don't group (yet) as we want to keep the left/right skip
-%
-% \startitemize
-% \startitem \stopitem
-% some intermediate text that will properly indent
-% \startitem \stopitem
-% \stopitem
-%
-% so we need to keep that property
-%
-% \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
-%
-% \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
-%
-% \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
-%
-% \startitemize[n,repeat][width=0pt]
-% \noitem \startitemize[a][width=2em] \item Item 1.a. \item Item 1.b. \stopitemize
-% \noitem \startitemize[a][width=2em] \item Item 2.a. \item Item 2.b. \stopitemize
-% \stopitemize
-%
-% \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
-%
-% todo: assume startitem ... stopitem and do an autostopitem .. cleaner for
-% elements
-%
-% \startitemize[text][space=medium]
-% \item one \item two \item three
-% \stopitemize
-%
-% 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
-
-\unprotect
-
-\newconditional\c_strc_itemgroups_sub
-\newconditional\c_strc_itemgroups_head
-\newconditional\c_strc_itemgroups_intro
-\newconditional\c_strc_itemgroups_randomize
-\newconditional\c_strc_itemgroups_horizontal
-\newconditional\c_strc_itemgroups_collecting
-\newconditional\c_strc_itemgroups_auto_intro
-\newconditional\c_strc_itemgroups_pack
-\newconditional\c_strc_itemgroups_paragraph
-\newconditional\c_strc_itemgroups_text
-\newconditional\c_strc_itemgroups_text_saved
-\newconditional\c_strc_itemgroups_first
-\newconditional\c_strc_itemgroups_before
-\newconditional\c_strc_itemgroups_after
-\newconditional\c_strc_itemgroups_nowhite
-\newconditional\c_strc_itemgroups_joined
-\newconditional\c_strc_itemgroups_reverse
-\newconditional\c_strc_itemgroups_continue
-\newconditional\c_strc_itemgroups_fitting
-\newconditional\c_strc_itemgroups_indented_first
-\newconditional\c_strc_itemgroups_inline
-\newconditional\c_strc_itemgroups_columns
-\newconditional\c_strc_itemgroups_concat
-\newconditional\c_strc_itemgroups_txt
-\newconditional\c_strc_itemgroups_extra
-\newconditional\c_strc_itemgroups_repeat
-\newconditional\c_strc_itemgroups_inline_head
-
-% 0 = before/after
-% 1 = between unless before
-% 2 = between
-
-\newconstant \c_strc_itemgroups_spacing_mode \c_strc_itemgroups_spacing_mode\plustwo
-\newconditional\c_strc_itemgroups_optimize \settrue\c_strc_itemgroups_optimize
-\newconditional\c_strc_itemgroups_auto_concat \settrue\c_strc_itemgroups_auto_concat
-
-\newsignal \d_strc_itemgroups_signal
-
-\newbox \b_strc_itemgroups
-
-\newdimen \d_strc_itemgroups_list_width
-\newdimen \d_strc_itemgroups_asked_width
-
-\newdimen \d_strc_itemgroups_max_width % multipass
-\newcount \c_strc_itemgroups_max_items % multipass
-
-\newcount \c_strc_itemgroups_n_of_items
-\newcount \c_strc_itemgroups_nesting
-\newcount \c_strc_itemgroups_column_depth
-
-\def \v_strc_itemgroups_counter {itemgroup:\currentparentitemgroup}
-\let \m_strc_itemgroups_repeat_start \empty
-\def \v_strc_itemgroups_unknown_symbol {?}
-\let \m_strc_itemgroups_indenting \empty
-\let \m_strc_itemgroups_destination \empty
-
-\let \currentitemlevel \!!zerocount % public
-\def \currentnofitems {\the\c_strc_itemgroups_max_items}
-\def \currentitemnumber {\strc_counters_raw_sub\v_strc_itemgroups_counter\currentitemlevel} % public
-
-\newtoks \itemgroupcommands % maybe public
-
-\def \currentitemgroupsymbol {n} % here we cannot use a _ in the name
-\let \currentitemgroupconversionset \empty % here we cannot use a _ in the name
-\let \currentitemgroupsegments \empty
-
-\def\strc_itemgroups_register_status
- {\clf_registeritemgroup{\currentparentitemgroup}\c_strc_itemgroups_nesting\c_strc_itemgroups_n_of_items\dimexpr\itemgroupparameter\c!maxwidth\relax}
-
-\def\strc_itemgroups_check_n_of_items % we could do this at the lua end and save a call (i.e. will be dimen and counter)
- {\clf_analyzeitemgroup{\currentparentitemgroup}\c_strc_itemgroups_nesting\relax
- \edef\currentnofitems{\the\c_strc_itemgroups_max_items}}
-
-% todo: \dodosetreference -> \strc_counters_register_component (to be checked)
-
-\def\strc_itemgroups_insert_reference % we will make a decent number helper
- {\iftrialtypesetting \orelse \ifempty\currentitemreference \else
- \strc_itemgroups_insert_reference_indeed
- \fi}
-
-\def\strc_itemgroups_insert_extra_reference
- {\iftrialtypesetting \orelse \ifempty\currentitemreference \else
- \normalexpanded{\textreference[\currentitemreference]{\strc_itemgroups_extra_symbol}}%
- \fi}
-
-\def\strc_itemgroups_insert_reference_indeed % maybe we need a 'frozen counter' numberdata blob / quick hack .. .mive this to strc-ref
- {% needs testing, gave problems:
- \setnextinternalreference
- % no need to collect nodes in \b_strc_destination_nodes here ... maybe at some point
- \strc_references_start_destination_nodes
- % this is somewhat over the top ... we should use the counter's reference
- \clf_setdestinationattribute
- {%
- metadata {%
- kind {item}% was item, why?
- \ifx\currentreferencecoding\s!xml
- xmlroot {\xmldocument}% only useful when text
- \fi
- catcodes \catcodetable
- }%
- references {%
- internal \locationcount % no: this spoils references
- % block {\currentsectionblock}%
- view {\interactionparameter\c!focus}%
- prefix {\referenceprefix}%
- reference {\currentitemreference}%
- }%
- prefixdata {%
- prefix {\namedcounterparameter\v_strc_itemgroups_counter\c!prefix}%
- separatorset {\namedcounterparameter\v_strc_itemgroups_counter\c!prefixseparatorset}%
- conversion {\namedcounterparameter\v_strc_itemgroups_counter\c!prefixconversion}%
- conversionset {\namedcounterparameter\v_strc_itemgroups_counter\c!prefixconversionset}%
- set {\namedcounterparameter\v_strc_itemgroups_counter\c!prefixset}%
- segments {\namedcounterparameter\v_strc_itemgroups_counter\c!prefixsegments}%
- % segments {\askedprefixsegments}%
- connector {\namedcounterparameter\v_strc_itemgroups_counter\c!prefixconnector}%
- }%
- numberdata {%
- numbers {\v_strc_itemgroups_counter}%
- separatorset {\namedcounterparameter\v_strc_itemgroups_counter\c!numberseparatorset}%
- % conversion {\namedcounterparameter\v_strc_itemgroups_counter\c!numberconversion}%
- % conversionset {\namedcounterparameter\v_strc_itemgroups_counter\c!numberconversionset}%
- % fixedconversion {\currentitemgroupconversionset}%
- conversionset {fixed::\currentitemgroupconversionset}% temp hack
- %
- % for the moment no stopper, we need to make references configurable first
- % stopper {\namedcounterparameter\v_strc_itemgroups_counter\c!numberstopper}%
- segments {\namedcounterparameter\v_strc_itemgroups_counter\c!numbersegments}%
- }%
- }%
- \relax
- \strc_references_stop_destination_nodes
- \xdef\currentdestinationattribute{\number\lastdestinationattribute}%
- % will become an option:
- \ifnum\lastdestinationattribute>\zerocount
- \dontleavehmode\hbox attr \destinationattribute\lastdestinationattribute\bgroup
- \strc_references_flush_destination_nodes
- \egroup
- \fi}
-
-%D Defining and setup:
-
-\installcorenamespace{itemgroup}
-\installcorenamespace{itemgroupoption}
-\installcorenamespace{itemgroupsetting}
-\installcorenamespace{itemgroupkeyword}
-\installcorenamespace{itemgroupalign}
-\installcorenamespace{itemgrouplocal}
-\installcorenamespace{itemgroupglobal}
-\installcorenamespace{itemgroupdistance}
-\installcorenamespace{itemgroupstack}
-\installcorenamespace{itemgroupfirst}
-\installcorenamespace{itemgroupstart}
-
-\installcommandhandler \??itemgroup {itemgroup} \??itemgroup
-
-\aliased\let\setupitemgroups\setupitemgroup
-
-\appendtoks
- \frozen\instance\setuevalue{\e!start\currentitemgroup}{\startitemgroup[\currentitemgroup]}%
- \frozen\instance\setuevalue{\e!stop \currentitemgroup}{\stopitemgroup}%
- \frozen\instance\setuevalue{\e!setup\currentitemgroup\e!endsetup}{\setupitemgroup[\currentitemgroup]}% obsolete
- \let\currentparentitemgroup\currentitemgroup
- \definecounter[\v_strc_itemgroups_counter]%
-\to \everydefineitemgroup
-
-%D Global states
-
-\def\strc_itemgroups_store_continue_state#options#settings%
- {\global\edefcsname\??itemgroupoption \currentitemgroup\endcsname{\strc_itemgroups_process_options{#options}}%
- \global\defcsname \??itemgroupsetting\currentitemgroup\endcsname{\setupcurrentitemgroup[#settings]}}
-
-\def\strc_itemgroups_fetch_continue_state
- {\csname\??itemgroupoption \currentitemgroup\endcsname
- \csname\??itemgroupsetting\currentitemgroup\endcsname}
-
-\def\strc_itemgroups_reset_continue_state
- {\global\letcsname\??itemgroupoption \currentitemgroup\endcsname\relax
- \global\letcsname\??itemgroupsetting\currentitemgroup\endcsname\relax}
-
-% These will become keywords. We will also add a feature to keep the while set
-% together.
-
-\definevspacing[\v!item @0] [penalty:0] % allow
-\definevspacing[\v!item @10000] [penalty:10000] % no
-\definevspacing[\v!item @-5] [penalty:-5]
-\definevspacing[\v!item @5] [penalty:5]
-\definevspacing[\v!item @500] [penalty:500] % discourage .. too low, 5000 is better
-
-\def\strc_itemgroups_insert_break_when_needed#break%
- {\ifconditional\c_strc_itemgroups_optimize
- \ifconditional\c_strc_itemgroups_text \else
- #break\relax
- \fi
- \fi}
-
-\def\strc_itemgroups_insert_breakallow {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_breakallow_indeed}
-\def\strc_itemgroups_insert_breakno {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_breakno_indeed }
-\def\strc_itemgroups_insert_break {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_break_indeed }
-\def\strc_itemgroups_insert_nobreak {\strc_itemgroups_insert_break_when_needed\strc_itemgroups_insert_nobreak_indeed }
-
-\def\strc_itemgroups_insert_breakallow_indeed{\vspacing[\v!item @0]}
-\def\strc_itemgroups_insert_breakno_indeed {\vspacing[\v!item @10000]}
-\def\strc_itemgroups_insert_break_indeed {\flushnotes
- \vspacing[\v!item @-5]}
-\def\strc_itemgroups_insert_nobreak_indeed {\flushnotes
- \ifinsidecolumns % todo
- \vspacing[\v!item @5]%
- \else
- \vspacing[\v!item @500]%
- \fi}
-
-\protected\def\strc_itemgroups_process_options#options%
- {\processcommacommand[#options]\strc_itemgroups_process_option} % expansion of options is handy for xml
-
-% \installcommalistprocessorcommand \strc_itemgroups_process_option_list \strc_itemgroups_process_option
-%
-% \protected\def\strc_itemgroups_process_options#options%
-% {\normalexpanded{\strc_itemgroups_process_option_list[#options]}} % expansion of options is handy for xml
-
-\def\strc_itemgroups_process_option#option%
- {\edef\itemgroupconstantvalue{#option}%
- \ifempty\itemgroupconstantvalue\else
- \splitatasterisk\itemgroupconstantvalue\itemgroupfirst\itemgroupsecond
- \ifempty\itemgroupsecond
- \let\itemgroupsecond\itemgroupfirst
- \let\itemgroupfirst\!!plusone
- \fi
- \ifcsname\??itemgroupkeyword\itemgroupsecond\endcsname
- \lastnamedcs
- \else
- \strc_itemgroups_set_symbol\itemgroupconstantvalue
- \fi
- \fi}
-
-\def\strc_itemgroups_process_set_option_pack
- {\ifcase\c_strc_itemgroups_nesting \else
- \settrue\c_strc_itemgroups_pack
- \fi}
-
-\def\strc_itemgroups_process_set_option_unpack
- {\ifcase\c_strc_itemgroups_nesting\else
- \setfalse\c_strc_itemgroups_pack
- \fi}
-
-\setvalue{\??itemgroupkeyword\!!zerocount }{} % ignore 0
-\setvalue{\??itemgroupkeyword\v!packed }{\strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!unpacked }{\strc_itemgroups_process_set_option_unpack}
-\setvalue{\??itemgroupkeyword\v!intro }{\settrue\c_strc_itemgroups_intro} % here? not set to false
-\setvalue{\??itemgroupkeyword\v!autointro }{\settrue\c_strc_itemgroups_auto_intro}
-\setvalue{\??itemgroupkeyword\v!broad }{\ifempty\itemgroupfirst
- \let\itemgroupfirst\!!plusone
- \fi
- \letitemgroupparameter\c!factor\itemgroupfirst}
-\setvalue{\??itemgroupkeyword\v!text }{\settrue\c_strc_itemgroups_text
- \settrue\c_strc_itemgroups_inline
- \settrue\c_strc_itemgroups_joined
- \strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!before }{\settrue\c_strc_itemgroups_before}
-\setvalue{\??itemgroupkeyword\v!after }{\settrue\c_strc_itemgroups_after}
-\setvalue{\??itemgroupkeyword\v!nowhite }{\settrue\c_strc_itemgroups_nowhite}
-\setvalue{\??itemgroupkeyword\v!margin }{\setitemgroupparameter\c!width{-2em}} % signal
-\setvalue{\??itemgroupkeyword\v!inmargin }{\setitemgroupparameter\c!width{-2em}} % signal
-\setvalue{\??itemgroupkeyword\v!atmargin }{\ifnum\c_strc_itemgroups_nesting>\plusone
- \setitemgroupparameter\c!width{0em}%
- \fi} % signal
-\setvalue{\??itemgroupkeyword\v!intext }{\settrue\c_strc_itemgroups_inline}
-\setvalue{\??itemgroupkeyword\v!headintext }{\settrue\c_strc_itemgroups_inline_head}
-\setvalue{\??itemgroupkeyword\v!loose }{\setfalse\c_strc_itemgroups_optimize}
-\setvalue{\??itemgroupkeyword\v!fit }{\settrue\c_strc_itemgroups_fitting}
-\setvalue{\??itemgroupkeyword\v!nofit }{\setfalse\c_strc_itemgroups_fitting}
-\setvalue{\??itemgroupkeyword\v!paragraph }{\settrue\c_strc_itemgroups_paragraph
- \strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!joinedup }{\settrue\c_strc_itemgroups_joined
- \strc_itemgroups_process_set_option_pack}
-\setvalue{\??itemgroupkeyword\v!notjoinedup}{\setfalse\c_strc_itemgroups_joined}
-\setvalue{\??itemgroupkeyword\v!serried }{\edef\itemgroupfirst{-\ifempty\itemgroupfirst1\else\itemgroupfirst\fi}%
- \letitemgroupparameter\c!factor\itemgroupfirst}
-\setvalue{\??itemgroupkeyword\v!stopper }{\letitemgroupparameter\c!placestopper\v!yes} % keep {}
-\setvalue{\??itemgroupkeyword\v!nostopper }{\letitemgroupparameter\c!placestopper\v!no} % keep {}
-\setvalue{\??itemgroupkeyword\v!repeat }{\settrue\c_strc_itemgroups_repeat}
-\setvalue{\??itemgroupkeyword\v!norepeat }{\setfalse\c_strc_itemgroups_repeat}
-\setvalue{\??itemgroupkeyword\v!reverse }{\settrue\c_strc_itemgroups_reverse}
-\setvalue{\??itemgroupkeyword\v!columns }{\settrue\c_strc_itemgroups_columns}
-\setvalue{\??itemgroupkeyword\v!one }{\letitemgroupparameter\c!n\plusone}
-\setvalue{\??itemgroupkeyword\v!two }{\letitemgroupparameter\c!n\plustwo}
-\setvalue{\??itemgroupkeyword\v!three }{\letitemgroupparameter\c!n\plusthree}
-\setvalue{\??itemgroupkeyword\v!four }{\letitemgroupparameter\c!n\plusfour}
-\setvalue{\??itemgroupkeyword\v!five }{\letitemgroupparameter\c!n\plusfive}
-\setvalue{\??itemgroupkeyword\v!six }{\letitemgroupparameter\c!n\plussix}
-\setvalue{\??itemgroupkeyword\v!seven }{\letitemgroupparameter\c!n\plusseven}
-\setvalue{\??itemgroupkeyword\v!eight }{\letitemgroupparameter\c!n\pluseight}
-\setvalue{\??itemgroupkeyword\v!nine }{\letitemgroupparameter\c!n\plusnine}
-\setvalue{\??itemgroupkeyword\v!standard }{\setitemgroupparameter\c!width {1.5\emwidth}%
- \setitemgroupparameter\c!distance {.5\emwidth}%
- %\letitemgroupparameter\c!factor \!!zerocount
- \letitemgroupparameter\c!factor {\zerocount}%
- \setitemgroupparameter\c!packcriterium{\zerocount}%
- \letitemgroupparameter\c!inner \empty
- \letitemgroupparameter\c!beforehead \empty
- \letitemgroupparameter\c!afterhead \blank
- \letitemgroupparameter\c!before \blank
- \letitemgroupparameter\c!inbetween \blank
- \letitemgroupparameter\c!after \blank}
-
-\def\strc_itemgroups_initialize_local
- {\setfalse\c_strc_itemgroups_inline
- \setfalse\c_strc_itemgroups_concat
- \setfalse\c_strc_itemgroups_txt
- %
- \setfalse\c_strc_itemgroups_reverse
- \setfalse\c_strc_itemgroups_intro
- \setfalse\c_strc_itemgroups_auto_intro
- \setfalse\c_strc_itemgroups_before
- \setfalse\c_strc_itemgroups_after
- \setfalse\c_strc_itemgroups_nowhite
- \setfalse\c_strc_itemgroups_randomize
- \setfalse\c_strc_itemgroups_horizontal
- \setfalse\c_strc_itemgroups_collecting
- \setfalse\c_strc_itemgroups_intro
- \setfalse\c_strc_itemgroups_continue
- % this will be a constant
- \setfalse\c_strc_itemgroups_head
- \setfalse\c_strc_itemgroups_sub
- \setfalse\c_strc_itemgroups_symbol
- \setfalse\c_strc_itemgroups_columns
- % to be checked
- \let\m_strc_itemgroups_destination\empty
- \let\strc_itemgroups_used_symbol \empty % ** start value
- \let\strc_itemgroups_margin_symbol\empty
- \let\strc_itemgroups_extra_symbol \empty
- %
- \global\letitemgroupparameter\c!maxwidth\!!zeropoint
- }
-
-\setvalue{\??itemgroupfirst\v!intro }{\settrue\c_strc_itemgroups_intro}
-\setvalue{\??itemgroupfirst\v!continue }{\settrue\c_strc_itemgroups_continue}
-\setvalue{\??itemgroupfirst\v!random }{\settrue\c_strc_itemgroups_randomize
- \settrue\c_strc_itemgroups_collecting}
-\setvalue{\??itemgroupkeyword\v!horizontal}{\settrue\c_strc_itemgroups_horizontal
- \settrue\c_strc_itemgroups_collecting
- \settrue\c_strc_itemgroups_inline
- \settrue\c_strc_itemgroups_joined
- \strc_itemgroups_process_set_option_pack}
-
-\def\strc_itemgroups_preset_stage_one#options%
- {\processcommacommand[#options]\strc_itemgroups_preset_stage_one_indeed}
-
-% \installcommalistprocessorcommand \strc_itemgroups_preset_stage_one_list \strc_itemgroups_preset_stage_one_indeed
-%
-% \def\strc_itemgroups_preset_stage_one#options%
-% {\normalexpanded{\strc_itemgroups_preset_stage_one_list[#options]}}
-
-\def\strc_itemgroups_preset_stage_one_indeed#option%
- {\ifcsname\??itemgroupfirst#option\endcsname
- \lastnamedcs
- \fi}
-
-\ifdefined\dotagsetitemgroup \else \let\dotagsetitemgroup\relax \fi
-\ifdefined\dotagsetitem \else \let\dotagsetitem \gobbleoneargument \fi
-
-\def\strc_itemgroups_tag_start_group
- {\dostarttaggedchained\t!itemgroup\currentparentitemgroup\??itemgroup
- \dotagsetitemgroup}
-
-\def\strc_itemgroups_tag_stop_group
- {\dostoptagged}
-
-\def\strc_itemgroups_before_command
- {\ifconditional\c_strc_itemgroups_nowhite
- \ifconditional\c_strc_itemgroups_before
- \ifcase\c_strc_itemgroups_nesting\or\itemgroupparameter\c!before\fi
- \else
- \nowhitespace
- \fi
- \orelse\ifconditional\c_strc_itemgroups_joined
- % \empty
- \else
- \itemgroupparameter\c!before
- \fi}
-
-\def\strc_itemgroups_after_command
- {\ifconditional\c_strc_itemgroups_nowhite
- \ifconditional\c_strc_itemgroups_after
- \ifcase\c_strc_itemgroups_nesting\or\itemgroupparameter\c!after\fi
- \else
- \nowhitespace
- \fi
- \orelse\ifconditional\c_strc_itemgroups_joined
- % \empty
- \else
- \itemgroupparameter\c!after
- \fi}
-
-\def\strc_itemgroups_between_command
- {\ifconditional\c_strc_itemgroups_nowhite
- \nowhitespace
- \orelse\ifconditional\c_strc_itemgroups_joined
- % \empty
- \else
- \itemgroupparameter\c!inbetween
- \fi}
-
-\def\strc_itemgroups_before_head_command
- {\ifconditional\c_strc_itemgroups_nowhite
- \nowhitespace
- \orelse\ifconditional\c_strc_itemgroups_joined
- % \empty
- \else
- \itemgroupparameter\c!beforehead
- \fi}
-
-\def\strc_itemgroups_after_head_command
- {\ifconditional\c_strc_itemgroups_nowhite
- \nowhitespace
- \orelse\ifconditional\c_strc_itemgroups_joined
- % \empty
- \else
- \itemgroupparameter\c!afterhead
- \fi}
-
-% compatible setup command:
-
-\let\strc_itemgroups_normal_setup\setupitemgroup
-
-\permanent\overloaded\tolerant\protected\def\setupitemgroup[#category]#spacer[#levels]#spacer[#options]#spacer[#settings]% category level|each options|settings settings|options
- {\ifarguments
- % nothing to set up
- \or
- \edef\strc_itemgroups_setup_what{#levels}%
- \strc_itemgroups_normal_setup[#category]% == settings
- \or
- \edef\strc_itemgroups_setup_what{#levels}%
- \strc_itemgroups_setup_each{#category}{#levels}%
- \or
- \edef\strc_itemgroups_setup_what{#levels}%
- \ifx\strc_itemgroups_setup_what\v!each
- \strc_itemgroups_setup_each{#category}{#options}%
- \else
- \strc_itemgroups_setup_list{#levels}{#category}{#options}%
- \fi
- \or
- \edef\strc_itemgroups_setup_what{#levels}%
- \ifx\strc_itemgroups_setup_what\v!each
- \strc_itemgroups_setup_each{#category}{#options}%
- \strc_itemgroups_setup_each{#category}{#settings}%
- \else
- \strc_itemgroups_setup_list{#levels}{#category}{#options}%
- \strc_itemgroups_setup_list{#levels}{#category}{#settings}%
- \fi
- \fi}
-
-% can be made a bit faster
-
-% \def\strc_itemgroups_setup_each#category#whatever%
-% {\doifelseassignment{#whatever}
-% {\strc_itemgroups_normal_setup[#category][#whatever]}
-% {\strc_itemgroups_normal_setup[#category][\c!option={#whatever}]}}
-
-\def\strc_itemgroups_setup_each#category#whatever%
- {\ifcondition\validassignment{#whatever}%
- \strc_itemgroups_normal_setup[#category][#whatever]%
- \else
- \strc_itemgroups_normal_setup[#category][\c!option={#whatever}]%
- \fi}
-
-\def\strc_itemgroups_setup_list_level_a#category#whatever#level%
- {\strc_itemgroups_normal_setup[#category:#level][#whatever]}
-
-\def\strc_itemgroups_setup_list_level_b#category#whatever#level%
- {\strc_itemgroups_normal_setup[#category:#level][\c!option={#whatever}]}
-
-% \def\strc_itemgroups_setup_list#subcategories#category#whatever%
-% {\doifelseassignment{#whatever}
-% {\processcommalist[#subcategories]{\strc_itemgroups_setup_list_level_a{#category}{#whatever}}}
-% {\processcommalist[#subcategories]{\strc_itemgroups_setup_list_level_b{#category}{#whatever}}}}
-
-\def\strc_itemgroups_setup_list#subcategories#category#whatever%
- {\ifcondition\validassignment{#whatever}%
- \processcommalist[#subcategories]{\strc_itemgroups_setup_list_level_a{#category}{#whatever}}%
- \else
- \processcommalist[#subcategories]{\strc_itemgroups_setup_list_level_b{#category}{#whatever}}%
- \fi}
-
-\def\strc_itemgroups_increment_item_counter
- {\ifconditional\c_strc_itemgroups_sub \else
- \ifconditional\c_strc_itemgroups_symbol \else % \ifempty\strc_itemgroups_extra_symbol
- \strc_counters_increment_sub\v_strc_itemgroups_counter\currentitemlevel
- \fi
- \fi}
-
-\protected\def\strc_itemgroups_insert_item_counter
- {\ifconditional\c_strc_itemgroups_repeat
- \ifcase\c_strc_itemgroups_nesting
- % skip
- \or
- \strc_itemgroups_insert_item_counter_indeed % this could become an option
- \else
- \strc_itemgroups_insert_item_counter_indeed
- \fi
- \else
- \strc_itemgroups_insert_item_counter_indeed
- \fi}
-
-\installcorenamespace{itemstopper}
-
-\setvalue{\??itemstopper\v!yes }{\itemgroupparameter\c!stopper}
-\setvalue{\??itemstopper\v!display}{\ifconditional\c_strc_itemgroups_inline\else\itemgroupparameter\c!stopper\fi}
-\setvalue{\??itemstopper\v!inline }{\ifconditional\c_strc_itemgroups_inline\itemgroupparameter\c!stopper\fi}
-
-\def\strc_itemgroups_insert_item_counter_indeed % quite slow ... every time this setup .. but it
- {\begingroup % can be optimized ... best move some to strc-num
- \setupcounter
- [\v_strc_itemgroups_counter]%
- [\c!prefix=\itemgroupparameter\c!prefix,
- \c!prefixstopper=\itemgroupparameter\c!prefixstopper,
- \c!prefixseparatorset=\itemgroupparameter\c!prefixseparatorset,
- \c!prefixconversion=\itemgroupparameter\c!prefixconversion,
- \c!prefixconversionset=\itemgroupparameter\c!prefixseparatorset,
- \c!prefixset=\itemgroupparameter\c!prefixset,
- \c!prefixsegments=\itemgroupparameter\c!prefixsegments,
- \c!prefixconnector=\itemgroupparameter\c!prefixconnector,
- \c!criterium=\itemgroupparameter\c!criterium,
- \c!numberorder=\ifconditional\c_strc_itemgroups_reverse\v!reverse\else\v!normal\fi,
- \c!numberstopper=\begincsname\??itemstopper\itemgroupparameter\c!placestopper\endcsname,
- \c!numberconversionset=\v_strc_itemgroups_counter,
- \c!numbersegments=\currentitemgroupsegments]%
- % there will be a fixedconversion key
- \normalexpanded{\defineconversionset[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}%
- %\normalexpanded{\strc_sets_define_conversion_set[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}%
- %
- \convertedcounter[\v_strc_itemgroups_counter]% [\number\currentitemlevel]%
- \strc_itemgroups_insert_reference
- \endgroup}
-
-% needs testing (maybe it need to happen later)
-%
-% \appendtoks
-% \setupcounter
-% [\v_strc_itemgroups_counter]%
-% [\c!prefix=\itemgroupparameter\c!prefix,
-% \c!prefixstopper=\itemgroupparameter\c!prefixstopper,
-% \c!prefixseparatorset=\itemgroupparameter\c!prefixseparatorset,
-% \c!prefixconversion=\itemgroupparameter\c!prefixconversion,
-% \c!prefixconversionset=\itemgroupparameter\c!prefixseparatorset,
-% \c!prefixset=\itemgroupparameter\c!prefixset,
-% \c!prefixsegments=\itemgroupparameter\c!prefixsegments,
-% \c!prefixconnector=\itemgroupparameter\c!prefixconnector,
-% \c!criterium=\itemgroupparameter\c!criterium,
-% \c!numberorder=\ifconditional\c_strc_itemgroups_reverse\v!reverse\else\v!normal\fi,
-% \c!numberstopper=\expdoif{\itemgroupparameter\c!placestopper}\v!yes{\itemgroupparameter\c!stopper},
-% \c!numberconversionset=\v_strc_itemgroups_counter,
-% \c!numbersegments=\currentitemgroupsegments]%
-% \to\itemgroupcommands
-%
-% \def\strc_itemgroups_insert_item_counter_indeed % quite slow ... every time this setup .. but it
-% {\begingroup % can be optimized ... best move some to strc-num
-% % there will be a fixedconversion key
-% %\normalexpanded{\defineconversionset[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}%
-% \normalexpanded{\strc_sets_define_conversion_set[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}%
-% %
-% \convertedcounter[\v_strc_itemgroups_counter]% [\number\currentitemlevel]%
-% \strc_itemgroups_insert_reference
-% \endgroup}
-
-\def\strc_itemgroups_set_symbol#symbol%
- {\edef\strc_itemgroups_tmp_symbol{#symbol}%
- \ifempty\strc_itemgroups_tmp_symbol \else
- \doifelsesymboldefined\strc_itemgroups_tmp_symbol
- \strc_itemgroups_set_symbol_symbol
- {\doifelseconversiondefined\strc_itemgroups_tmp_symbol
- \strc_itemgroups_set_symbol_conversion
- \donothing}%
- \fi}
-
-\def\strc_itemgroups_set_symbol_symbol
- {\let\currentitemgroupsymbol\strc_itemgroups_tmp_symbol
- \strc_itemgroups_store_global_symbol\currentitemgroupsymbol
- \strc_itemgroups_store_local_symbol\v_strc_itemgroups_unknown_symbol
- \let\strc_itemgroups_used_symbol\strc_itemgroups_set_symbol_symbol_item
- \let\strc_itemgroups_asked_symbol\empty}
-
-\def\strc_itemgroups_set_symbol_conversion
- {\let\currentitemgroupsymbol\strc_itemgroups_tmp_symbol
- \strc_itemgroups_store_global_symbol\currentitemgroupsymbol
- \strc_itemgroups_store_local_symbol\strc_itemgroups_insert_item_counter
- \let\strc_itemgroups_used_symbol\strc_itemgroups_set_symbol_conversion_item
- \let\strc_itemgroups_asked_symbol\empty}
-
-\def\strc_itemgroups_set_symbol_symbol_item
- {\symbol[\currentitemgroupsymbol]}
-
-\def\strc_itemgroups_set_symbol_conversion_item
- {\ifconditional\c_strc_itemgroups_text
- % maybe block stopper here, but one can as well clone an itemgroup then
- \itemgroupparameter\c!lefttext
- \strc_itemgroups_fetch_local_symbol
- \itemgroupparameter\c!righttext
- \else
- \itemgroupparameter\c!left
- \strc_itemgroups_fetch_local_symbol
- \itemgroupparameter\c!right
- \fi}
-
-\def\strc_itemgroups_calculate_list_width#level%
- {\let\savedcurrentitemgroup\currentitemgroup
- \edef\currentitemgroup{\currentparentitemgroup:\number#level}%
- \ifdim\d_strc_itemgroups_max_width>\zeropoint
- \d_strc_itemgroups_list_width\d_strc_itemgroups_max_width
- \orelse\ifnum\itemgroupparameter\c!factor>\zerocount
- \d_strc_itemgroups_list_width\itemgroupparameter\c!step\relax
- \ifzeropt\d_strc_itemgroups_list_width \d_strc_itemgroups_list_width=.5em\fi
- \multiply\d_strc_itemgroups_list_width \itemgroupparameter\c!factor
- \advance\d_strc_itemgroups_list_width\itemgroupparameter\c!width\relax
- \else
- \d_strc_itemgroups_list_width\itemgroupparameter\c!width\relax
- \fi
- \advance\d_strc_itemgroups_list_width\itemgroupparameter\c!distance\relax
- \let\currentitemgroup\savedcurrentitemgroup}
-
-\permanent\tolerant\protected\def\startitemgroup[#category]#spacer[#options]#spacer[#settings]%
- {\begingroup % (1)
- \nofarguments\lastarguments
- \def\currentitemgroup{#category}% no nested mixing of itemgroups
- \let\currentparentitemgroup\currentitemgroup
- \global\advance\c_strc_itemgroups_nesting\plusone
- \def\currentitemlevel{\number\c_strc_itemgroups_nesting}%
- \normalexpanded{\chaintocurrentitemgroup{\currentparentitemgroup:\currentitemlevel}}%
- \edef\currentitemgroup{\currentparentitemgroup:\currentitemlevel}%
- %
- \edef\itemgroupoptions{\itemgroupparameter\c!option}%
- \let\itemgroupextraoptions\empty
- \ifcase\nofarguments
- \strc_itemgroups_start_indeed{}%
- \or
- \strc_itemgroups_start_indeed{}%
- \or
- \ifhastok={#options}%
- \strc_itemgroups_start_indeed{#options}%
- \else
- \edef\itemgroupextraoptions{#options}%
- \strc_itemgroups_start_indeed{}%
- \fi
- \or
- \edef\itemgroupextraoptions{#options}%
- \strc_itemgroups_start_indeed{#settings}%
- \fi}
-
-\def\strc_itemgroups_start_indeed#settings%
- {\ifempty\itemgroupoptions
- \let\itemgroupoptions\itemgroupextraoptions
- \orelse\ifempty\itemgroupextraoptions
- % ok
- \else
- \edef\itemgroupoptions{\itemgroupoptions,\itemgroupextraoptions}%
- \fi
- \begingroup % (2)
- \the\itemgroupcommands
- \setconditional\c_strc_itemgroups_text_saved\c_strc_itemgroups_text
- \strc_itemgroups_initialize_local
- \strc_itemgroups_preset_stage_one\itemgroupoptions
-%
-% \ifhmode
-% \ifconditional\c_strc_itemgroups_auto_concat
-% \ifdim\lastskip=\d_strc_itemgroups_signal
-% \settrue\c_strc_itemgroups_concat
-% \fi
-% \fi
-% \ifconditional\c_strc_itemgroups_text_saved \else
-% \ifconditional\c_strc_itemgroups_text \else
-% \par
-% \fi
-% \fi
-% \fi
-%
- \iftrialtypesetting
- \strc_counters_save\v_strc_itemgroups_counter
- \fi
- \c_strc_itemgroups_n_of_items\zerocount
- \strc_itemgroups_check_n_of_items
- \ifempty\itemgroupoptions
- \strc_itemgroups_setup_symbol_default
- \strc_itemgroups_reset_continue_state
- \setupcurrentitemgroup[#settings]%
- \else
- \strc_itemgroups_process_options\itemgroupoptions
- \setupcurrentitemgroup[#settings]%
- \ifconditional\c_strc_itemgroups_continue
- \strc_itemgroups_setup_symbol_continue
- \strc_itemgroups_fetch_continue_state
- \else
- \strc_itemgroups_setup_symbol_asked
- \strc_itemgroups_store_continue_state\itemgroupoptions{#settings}%
- \fi
- \fi
- %
- \ifhmode
- \ifconditional\c_strc_itemgroups_auto_concat
- \ifdim\lastskip=\d_strc_itemgroups_signal
- \settrue\c_strc_itemgroups_concat
- \fi
- \fi
- \ifconditional\c_strc_itemgroups_text_saved \else
- \ifconditional\c_strc_itemgroups_text \else
- \par
- \fi
- \fi
- \fi
- %
- \ifconditional\c_strc_itemgroups_pack
- \ifnum\currentnofitems>\itemgroupparameter\c!packcriterium\relax\else
- \setfalse\c_strc_itemgroups_pack
- \fi
- \fi
- %
- \ifnum\c_strc_itemgroups_nesting=\plusone % NIEUW
- \doadaptleftskip {\itemgroupparameter\c!margin}%
- \doadaptleftskip {\itemgroupparameter\c!leftmargin}%
- \doadaptrightskip{\itemgroupparameter\c!rightmargin}%
- \fi
- %
- \doadaptleftskip {\itemgroupparameter\c!leftmargindistance}%
- \doadaptrightskip{\itemgroupparameter\c!rightmargindistance}%
- %
- \usealignparameter\itemgroupparameter
- \edef\m_strc_itemgroups_indenting{\itemgroupparameter\c!indenting}%
- \ifnum\c_strc_itemgroups_nesting>\zerocount
- \settrue\c_strc_itemgroups_first
- \ifconditional\c_strc_itemgroups_continue \else
- \strc_counters_restart_sub\v_strc_itemgroups_counter\currentitemlevel{\numexpr\itemgroupparameter\c!start-\plusone\relax}%
- \fi
- \fi
- \ifempty\strc_itemgroups_used_symbol
- \strc_itemgroups_set_symbol\strc_itemgroups_asked_symbol % ** default value
- \ifempty\strc_itemgroups_used_symbol
- \let\currentitemgroupsymbol\currentitemlevel % ** fall back
- \fi
- \fi
- \ifconditional\c_strc_itemgroups_auto_intro\ifnum\prevgraf<\plusthree
- \settrue\c_strc_itemgroups_intro
- \fi\fi
- \ifconditional\c_strc_itemgroups_paragraph
- \ifnum\c_strc_itemgroups_nesting>\plusone
- \letitemgroupparameter\c!inbetween\empty
- \fi
- \fi
- \ifconditional\c_strc_itemgroups_pack
- \letitemgroupparameter\c!inbetween\empty
- \fi
- \ifconditional\c_strc_itemgroups_columns
- \ifinsidecolumns\orelse\ifcase\c_strc_itemgroups_column_depth
- \global\c_strc_itemgroups_column_depth\c_strc_itemgroups_nesting % global ?
- \strc_itemgroups_before_command
- \strc_itemgroups_tag_start_group
- \strc_itemgroups_start_columns
- \fi
- \fi
- \ifconditional\c_strc_itemgroups_fitting
- \ifdim\d_strc_itemgroups_max_width>\zeropoint
- \letitemgroupparameter\c!width\d_strc_itemgroups_max_width
- \fi
- \fi
- \strc_itemgroups_calculate_list_width\c_strc_itemgroups_nesting
- \ifdim\d_strc_itemgroups_list_width>\zeropoint\relax
- \ifconditional\c_strc_itemgroups_inline\else
- \frozen\advance\leftskip\d_strc_itemgroups_list_width\relax
- \fi
- \fi
- \ifempty\m_strc_itemgroups_repeat_start
- \let\currentitemgroupconversionset \currentitemgroupsymbol
- \edef\currentitemgroupsegments {\currentitemlevel}%
- \else
- \edef\currentitemgroupconversionset{\currentitemgroupconversionset,\currentitemgroupsymbol}%
- \edef\currentitemgroupsegments {\m_strc_itemgroups_repeat_start:\currentitemlevel}%
- \fi
- \d_strc_itemgroups_asked_width\itemgroupparameter\c!width\relax
- \startcollectitems}
-
-\let\startcollectitems\relax
-\let\stopcollectitems \relax
-
-\letvalue{\??itemgroupalign\v!flushleft }\relax
-\letvalue{\??itemgroupalign\v!right }\relax
-\letvalue{\??itemgroupalign\v!flushright}\hfill
-\letvalue{\??itemgroupalign\v!left }\hfill
-\letvalue{\??itemgroupalign\v!middle }\hfil
-\letvalue{\??itemgroupalign\v!center }\hfil
-
-\def\strc_itemgroups_left_sym_filler
- {\csname\??itemgroupalign\itemgroupparameter\c!symalign\endcsname}
-
-% symbols + states
-
-\def\strc_itemgroups_store_global_symbol#symbol%
- {\letgvalue{\??itemgroupglobal\currentitemgroup:\currentitemlevel}#symbol}
-
-\def\strc_itemgroups_store_local_symbol#symbol%
- {\letgvalue{\??itemgrouplocal\currentitemgroup:\currentitemlevel}#symbol}
-
-\def\strc_itemgroups_fetch_global_symbol
- {\csname\??itemgroupglobal\currentitemgroup:\currentitemlevel\endcsname}
-
-\def\strc_itemgroups_fetch_local_symbol
- {\csname\??itemgrouplocal\currentitemgroup:\currentitemlevel\endcsname}
-
-\def\strc_itemgroups_setup_symbol_default
- {\edef\strc_itemgroups_asked_symbol{\itemgroupparameter\c!symbol}%
- \strc_itemgroups_store_global_symbol\empty}
-
-\def\strc_itemgroups_setup_symbol_continue
- {\ifcsname\??itemgroupglobal\currentitemgroup:\currentitemlevel\endcsname
- \let\strc_itemgroups_asked_symbol\strc_itemgroups_fetch_global_symbol
- \else
- \let\strc_itemgroups_asked_symbol\currentitemlevel
- \fi}
-
-\def\strc_itemgroups_setup_symbol_asked
- {\edef\strc_itemgroups_asked_symbol{\itemgroupparameter\c!symbol}}
-
-\ifdefined\strc_itemgroups_start_columns
-
- % already defined in page-mix
-
-\else
-
- % will be redefined in page-mix
-
- \ifdefined\startcolumns \else
- \protected\def\startcolumns[#settings]{}
- \protected\def\stopcolumns {}
- \fi
-
- \def\strc_itemgroups_start_columns
- {\startcolumns
- [\c!n=\itemgroupparameter\c!n,
- \c!height=,
- \c!rule=\v!off,
- \c!balance=\v!yes,
- \c!align=\v!no]}
-
- \def\strc_itemgroups_stop_columns
- {\stopcolumns}
-
-\fi
-
-\permanent\protected\def\stopitemgroup
- {\stopcollectitems
- \ifconditional\c_strc_itemgroups_text
- \removeunwantedspaces
- \space
- \ignorespaces
- \else
- \par
- \fi
- \strc_itemgroups_register_status
- \ifconditional\c_strc_itemgroups_first \else
- \dostoptagged
- \dostoptagged
- % \endgroup % (3)
- \fi
- \ifnum\c_strc_itemgroups_column_depth=\c_strc_itemgroups_nesting\relax
- \strc_itemgroups_stop_columns
- \global\c_strc_itemgroups_column_depth\zerocount % global ?
- \strc_itemgroups_tag_stop_group
- \strc_itemgroups_after_command
- \dontrechecknextindentation
- \orelse\ifnum\c_strc_itemgroups_nesting=\plusone
- \strc_itemgroups_insert_breakallow
- \strc_itemgroups_tag_stop_group
- \strc_itemgroups_after_command
- \useindentnextparameter\itemgroupparameter
- \else
- % nieuw, not yet nobreak handling
- \strc_itemgroups_tag_stop_group
- \ifcase\c_strc_itemgroups_spacing_mode
- \strc_itemgroups_after_command
- \or
- \strc_itemgroups_after_command
- \fi
- \dontrechecknextindentation
- \fi
- % new test, needed in sidefloats (surfaced in volker's proceedings)
- \iftrialtypesetting
- \strc_counters_restore\v_strc_itemgroups_counter % could happen in LUA
- \fi
- \global\advance\c_strc_itemgroups_nesting\minusone
- \xdef\currentitemlevel{\number\c_strc_itemgroups_nesting}%
- %\ifconditional\c_strc_itemgroups_text
- \endgroup % (2)
- \endgroup % (1)
- %\else
- % \endgroup % (2)
- % \endgroup % (1)
- % \par % hm, already done, and dangerous as \c_strc_itemgroups_text is already forgotten
- %\fi
- \dorechecknextindentation}
-
-% The items.
-
-\def\strc_itemgroups_start_item_first
- {\setfalse\c_strc_itemgroups_first
- % \begingroup % (3)
- \ifcase\c_strc_itemgroups_nesting
- % 0
- \or
- \strc_itemgroups_start_item_first_one % 1
- \else
- \strc_itemgroups_start_item_first_two % 2+
- \fi}
-
-\def\strc_itemgroups_start_item_first_one
- {\ifcase\c_strc_itemgroups_column_depth
- \ifconditional\c_strc_itemgroups_intro\strc_itemgroups_insert_breakno\fi
- \strc_itemgroups_before_command
- \strc_itemgroups_tag_start_group
- \ifconditional\c_strc_itemgroups_intro\strc_itemgroups_insert_breakno\fi
- \fi}
-
-\def\strc_itemgroups_start_item_first_two
- {\ifconditional\c_strc_itemgroups_paragraph\else
- \edef\previtemlevel{\the\numexpr\c_strc_itemgroups_nesting-\plusone}%
- \ifcase\c_strc_itemgroups_spacing_mode
- \strc_itemgroups_before_command
- \or
- \doifelsenothing\strc_itemgroups_before_command % should possibly expand to empty
- {\nameditemgroupparameter{\currentparentitemgroup:\previtemlevel}\c!inbetween}%
- \strc_itemgroups_before_command
- \else
- \nameditemgroupparameter{\currentparentitemgroup:\previtemlevel}\c!inbetween
- \fi
- \strc_itemgroups_tag_start_group
- \fi}
-
-\def\strc_itemgroups_start_item_next
- {\dostoptagged % ok? what do we stop here?
- \dostoptagged % ok? what do we stop here?
- \ifconditional\c_strc_itemgroups_text
- \ifhmode
- % WS: make the distance between items customizable, think about better default values -> see itemize-1.tex
- \strc_itemgroups_set_text_item_distance% HH: moved out and made configurable (sort of)
- \removeunwantedspaces
- \hskip\m_strc_itemgroups_text_distance\relax
- \fi
- \else
- \strc_itemgroups_between_command
- \fi}
-
-% c_strc_itemgroups_concat:
-%
-% the problem is that we use leftskip so concat cannot reliable take the height into
-% account; it's .. rather tricky when white space in there anyway (due to \par) .. so
-% we rely on a special blank method
-%
-% \startitemize[n]
-% \item bla
-% \item \startitemize[a]
-% \item bla $\displaystyle\int^{x^{y^4}}$ \item bla
-% \stopitemize
-% \stopitemize
-
-\tolerant\protected\def\startitemgroupitem[#reference]% we can reuse more
- {\def\currentitemreference{#reference}%
- \ifconditional\c_strc_itemgroups_text
- % begin of item
- \else
- \par
- \fi
- \ifconditional\c_strc_itemgroups_concat
- \strc_itemgroups_insert_breakno
- \fi
- \strc_itemgroups_increment_item_counter
- \ifconditional\c_strc_itemgroups_first
- \strc_itemgroups_start_item_first
- \else
- \strc_itemgroups_start_item_next
- \fi
- \ifconditional\c_strc_itemgroups_concat
- \spac_overlay_lines % see spac-ver.mkvi ... a typical potential problem
- \setfalse\c_strc_itemgroups_concat
- \fi
- \dostarttagged\t!item\empty
- % \dotagsetitem\empty
- \dostarttagged\t!itemtag\empty
- \strc_itemgroups_insert_item
- \dostoptagged
- \ifconditional\c_strc_itemgroups_pack
- \setupwhitespace[\v!none]%
- \fi
- \itemgroupparameter\c!inner % will become obsolete (better use setups)
- \strc_itemgroups_margin_symbol
- \let\strc_itemgroups_margin_symbol\relax
- \dostarttagged\t!itemcontent\empty
- \begstrut % \strut
- \nobreak % else problems with intext items
- \seteffectivehsize % NEW !
- \hskip\d_strc_itemgroups_signal % concat
- \itemgroupparameter\c!command}
-
-\protected\def\stopitemgroupitem
- {\ifhmode
- \endstrut % new per 2017-12-15
- \fi
- \ifconditional\c_strc_itemgroups_text
- % nothing
- \else
- \endgraf
- \fi}
-
-\tolerant\protected\def\startitemgrouphead[#reference]%
- {\ifconditional\c_strc_itemgroups_first \else
- \strc_itemgroups_insert_breakallow
- \fi
- \ifconditional\c_strc_itemgroups_pack \else
- \strc_itemgroups_before_head_command
- \fi
- \ifconditional\c_strc_itemgroups_first
- \ifconditional\c_strc_itemgroups_intro \else
- \ifcase\c_strc_itemgroups_nesting
- \strc_itemgroups_insert_breakallow
- \fi
- \fi
- \fi
- %\strc_itemgroups_start_item[#reference]%
- \startitemgroupitem[#reference]%
- \pickupgroupedcommand
- \strc_itemgroups_start_head_indeed
- \strc_itemgroups_stop_head_indeed
- \strc_itemgroups_head_body_indeed}
-
-\protected\def\stopitemgrouphead
- {\dostoptagged
- \stopitemgroupitem}
-
-\protected\def\strc_itemgroups_start_head_indeed
- {\settrue\c_strc_itemgroups_head
- \dotagsetitem\s!head% % weird place
- \dostarttagged\t!itemhead\empty
- \useitemgroupstyleandcolor\c!headstyle\c!headcolor\ignorespaces}
-
-\protected\def\strc_itemgroups_stop_head_indeed
- {\removeunwantedspaces
- \dostoptagged
- \ifconditional\c_strc_itemgroups_inline_head
- \space
- \ignorespaces
- \else
- \ifconditional\c_strc_itemgroups_text
- \space
- \ignorespaces
- \else
- \par
- \fi
- \strc_itemgroups_insert_breakno
- \ifconditional\c_strc_itemgroups_pack\else\strc_itemgroups_after_head_command\fi
- \strc_itemgroups_insert_breakno
- \fi}
-
-\protected\def\strc_itemgroups_head_body_indeed
- {\dostarttagged\t!itembody\empty
- \noindentation
- \ignorespaces}
-
-% Simple commands.
-
-\protected\def\strc_itemgroups_start_do_item
- {\startitemgroupitem}
-
-\protected\def\strc_itemgroups_start_no_item
- {\let\currentitemreference\empty
- \strc_itemgroups_increment_item_counter
- %\advance\c_strc_itemgroups_n_of_items\plusone
- \setbox\b_strc_itemgroups\emptyhbox
- \strc_itemgroups_check_for_repeated
- \ignorespaces}
-
-\protected\def\strc_itemgroups_start_button[#destination]%
- {\edef\m_strc_itemgroups_destination{#destination}%
- \startitemgroupitem}
-
-\protected\def\strc_itemgroups_start_symbol#text%
- {\def\strc_itemgroups_extra_symbol{#text}%
- \settrue\c_strc_itemgroups_symbol
- \startitemgroupitem
- \dotagsetitem\s!symbol}
-
-\protected\def\strc_itemgroups_start_dummy
- {\strc_itemgroups_start_symbol
- %\strut\strut} % two ?
- \begstrut}
-
-\protected\def\strc_itemgroups_start_subitem
- {\settrue\c_strc_itemgroups_sub
- \startitemgroupitem
- \dotagsetitem\s!sub}
-
-\protected\def\strc_itemgroups_start_edge#text%
- {\strc_itemgroups_start_symbol
- {\strc_itemgroups_calculate_list_width\c_strc_itemgroups_nesting
- \dostarttagged\t!ignore\empty % for the moment, maybe an attribute
- \hbox to \d_strc_itemgroups_list_width
- {#text\hskip\itemgroupparameter\c!distance}%
- \dostoptagged}}
-
-\protected\def\strc_itemgroups_start_margin#text%
- {\def\strc_itemgroups_margin_symbol % brrr
- {\dostarttagged\t!ignore\empty % for the moment, maybe an attribute
- \llap
- {\begingroup
- \useitemgroupstyleandcolor\c!marstyle\c!marcolor
- #text% keep em/ex local
- \endgroup
- \hskip\dimexpr\leftskip+\leftmargindistance\relax}%
- \dostoptagged}%
- \startitemgroupitem
- \dotagsetitem\s!margin}
-
-\protected\def\strc_itemgroups_start_text#text%
- {\def\strc_itemgroups_extra_symbol{#text}%
- \settrue\c_strc_itemgroups_symbol
- \settrue\c_strc_itemgroups_txt
- \startitemgroupitem}
-
-% \protected\def\strc_itemgroups_start_head
-% {\settrue\c_strc_itemgroups_head
-% \startitemgrouphead}
-
-\protected\def\strc_itemgroups_start_items
- {\dosingleempty\strc_itemgroups_start_items_indeed}
-
-\protected\def\strc_itemgroups_start_items_indeed[#whatever]% something got lost
- {\strc_itemgroups_start_edge
- {\dorecurse{0\itemgroupparameter\c!items}{\strc_itemgroups_used_symbol\hss}%
- \unskip}}
-
-\protected\def\startspecialitemgroupitem[#name]% todo: frozen
- {\ifcsname\??itemgroupstart#name\endcsname
- \expandafter\lastnamedcs
- \else
- \expandafter\strc_itemgroups_start_do_item
- \fi}
-
-\protected\def\stopspecialitemgroupitem % todo: frozen
- {\stopitemgroupitem}
-
-\letvalue{\??itemgroupstart\v!item}\strc_itemgroups_start_do_item
-\letvalue{\??itemgroupstart\v!sub }\strc_itemgroups_start_subitem
-\letvalue{\??itemgroupstart\v!sym }\strc_itemgroups_start_symbol
-\letvalue{\??itemgroupstart\v!ran }\strc_itemgroups_start_edge
-\letvalue{\??itemgroupstart\v!its }\strc_itemgroups_start_items
-\letvalue{\??itemgroupstart\v!mar }\strc_itemgroups_start_margin
-\letvalue{\??itemgroupstart\v!txt }\strc_itemgroups_start_text
-
-\def\strc_itemgroups_optimize_breaks
- {\ifcase\c_strc_itemgroups_column_depth
- \ifconditional\c_strc_itemgroups_optimize
- \ifcase\c_strc_itemgroups_max_items
- \orelse\ifnum\c_strc_itemgroups_max_items=\plusthree
- \ifnum\c_strc_itemgroups_n_of_items>\plusone
- \strc_itemgroups_insert_nobreak
- \fi
- \orelse\ifnum\c_strc_itemgroups_max_items>\plusthree
- \ifnum\c_strc_itemgroups_n_of_items=\plustwo
- \ifconditional\c_strc_itemgroups_intro
- \strc_itemgroups_insert_breakno
- \else
- \strc_itemgroups_insert_nobreak
- \fi
- \orelse\ifnum\c_strc_itemgroups_max_items=\c_strc_itemgroups_n_of_items\relax
- \strc_itemgroups_insert_nobreak
- \orelse\ifnum\c_strc_itemgroups_n_of_items>\plustwo
- \strc_itemgroups_insert_break
- \else
- \ifconditional\c_strc_itemgroups_intro\else\strc_itemgroups_insert_break\fi
- \fi
- \fi
- \fi
- \fi}
-
-\def\strc_itemgroups_handle_text_item
- {\scratchdimen\wd\b_strc_itemgroups
- \advance \scratchdimen \itemgroupparameter\c!distance\relax
- \ifdim\scratchdimen>\d_strc_itemgroups_list_width
- \advance\scratchdimen -\d_strc_itemgroups_list_width
- \else
- \scratchdimen\zeropoint
- \fi
- \llap{\hbox to \d_strc_itemgroups_list_width{\ifconditional\c_strc_itemgroups_sub\llap{+\enspace}\fi\box\b_strc_itemgroups\hss}}% was: \hfill
- \hskip\scratchdimen}
-
-\def\strc_itemgroups_handle_lapped_item_positive
- {\llap
- {\dontcomplain
- \hbox to \d_strc_itemgroups_list_width
- {\ifconditional\c_strc_itemgroups_sub
- \dostarttagged\t!ignore\empty
- \llap{+\enspace}%
- \dostoptagged
- \fi
- \strc_itemgroups_left_sym_filler
- \box\b_strc_itemgroups % can already have a forced widt, only factor handled here
- \hfil
- \hskip\itemgroupparameter\c!distance}}}
-
-\def\strc_itemgroups_handle_lapped_item_negative
- {\llap
- {\ifconditional\c_strc_itemgroups_sub
- \dostarttagged\t!ignore\empty
- \llap{+\enspace}%
- \dostoptagged
- \fi
- \box\b_strc_itemgroups
- \hskip\leftmargindistance}}
-
-\def\strc_itemgroups_handle_groups_text_item
- {\hbox
- {\ifconditional\c_strc_itemgroups_sub
- \dostarttagged\t!ignore\empty
- +\enspace
- \dostoptagged
- \fi
- \box\b_strc_itemgroups
- \hskip\interwordspace}%
- \nobreak}
-
-\def\strc_itemgroups_handle_groups_inline_item
- {\hbox to \d_strc_itemgroups_list_width
- {\ifconditional\c_strc_itemgroups_sub
- \dostarttagged\t!ignore\empty
- \llap{+\enspace}%
- \dostoptagged
- \fi
- \box\b_strc_itemgroups
- \hss}} % was: \hfill
-
-\protected\def\strc_itemgroups_start_head_sym#text%
- {\def\strc_itemgroups_extra_symbol{#text}%
- \settrue\c_strc_itemgroups_symbol
- \settrue\c_strc_itemgroups_head
- %\strc_itemgroups_start_head}
- \startitemgrouphead}
-
-\def\strc_itemgroups_make_symbol_box
- {\setbox\b_strc_itemgroups\autodirhbox
- {\ifconditional\c_strc_itemgroups_head
- \ifconditional\c_strc_itemgroups_symbol
- \strc_itemgroups_insert_extra_reference
- \useitemgroupstyleandcolor\c!symstyle\c!symcolor
- \strc_itemgroups_extra_symbol
- \else
- \useitemgroupstyleandcolor\c!headstyle\c!headcolor
- \strc_itemgroups_used_symbol
- \fi
- \else
- \ifconditional\c_strc_itemgroups_symbol
- \strc_itemgroups_insert_extra_reference
- \useitemgroupstyleandcolor\c!symstyle\c!symcolor
- \strc_itemgroups_extra_symbol
- \else
- \useitemgroupstyleandcolor\c!style\c!color
- \strc_itemgroups_used_symbol
- \fi
- \fi}%
- \let\strc_itemgroups_extra_symbol\empty
- \setfalse\c_strc_itemgroups_symbol}
-
-\def\strc_itemgroups_make_fitting_box
- {\ifdim\wd\b_strc_itemgroups>\itemgroupparameter\c!maxwidth\relax
- \normalexpanded{\global\setitemgroupparameter{\c!maxwidth}{\the\wd\b_strc_itemgroups}}%
- \fi
- \ifdim\d_strc_itemgroups_max_width>\zeropoint
- \setbox\b_strc_itemgroups\simplealignedbox
- {\dimexpr\d_strc_itemgroups_max_width+\itemgroupparameter\c!distance\relax}
- {\itemgroupparameter\c!itemalign}
- {\box\b_strc_itemgroups\hskip\itemgroupparameter\c!distance}%
- \fi}
-
-\def\strc_itemgroups_make_aligned_box
- {\doifsomething{\itemgroupparameter\c!itemalign}
- {\setbox\b_strc_itemgroups\simplealignedbox
- {\dimexpr\d_strc_itemgroups_asked_width+\itemgroupparameter\c!distance\relax}
- {\itemgroupparameter\c!itemalign}
- {\box\b_strc_itemgroups\hskip\itemgroupparameter\c!distance}}}
-
-\def\strc_itemgroups_make_destination_box
- {\iftrialtypesetting \orelse \ifempty\m_strc_itemgroups_destination \else
- \setbox\b_strc_itemgroups\hbox{\directgotobox{\box\b_strc_itemgroups}[\m_strc_itemgroups_destination]}%
- \fi}
-
-\def\strc_itemgroups_check_indenting
- {\setfalse\c_strc_itemgroups_indented_first
- \ifempty\m_strc_itemgroups_indenting \else
- \normalexpanded{\setupindenting[\v!reset,\v!yes,\m_strc_itemgroups_indenting]}%
- \ifconditional\c_spac_indentation_indent_first % better is to have a mode
- \doifnot{\itemgroupparameter\c!alignsymbol}\v!yes
- {\settrue\c_strc_itemgroups_indented_first}%
- \fi
- \fi}
-
-\def\strc_itemgroups_check_for_repeated
- {\ifconditional\c_strc_itemgroups_repeat
- \ifempty\m_strc_itemgroups_repeat_start
- \edef\m_strc_itemgroups_repeat_start{\currentitemlevel}%
- \fi
- \else
- \let\m_strc_itemgroups_repeat_start\empty
- \fi}
-
-\def\strc_itemgroups_insert_item
- {\ifconditional\c_strc_itemgroups_text % again?
- % begin of item
- \else
- \par % done twice?
- \fi
- \advance\c_strc_itemgroups_n_of_items\plusone
- \strc_itemgroups_optimize_breaks
- \strc_itemgroups_check_indenting
- \dontleavehmode
- \ifconditional\c_strc_itemgroups_indented_first
- \hskip-\parindent
- \fi
- \strc_itemgroups_make_symbol_box
- \strc_itemgroups_make_destination_box
- \ifconditional\c_strc_itemgroups_fitting
- \strc_itemgroups_make_fitting_box
- \orelse\ifdim\d_strc_itemgroups_asked_width>\zeropoint
- \strc_itemgroups_make_aligned_box
- \fi
- \let\m_strc_itemgroups_destination\empty
- \ht\b_strc_itemgroups\strutheight % just in case a symbols is not yet available in
- \dp\b_strc_itemgroups\strutdepth % the current run (more a mkii mp side artifact)
- \strc_itemgroups_check_for_repeated
- \ifdim\d_strc_itemgroups_asked_width<\zeropoint\relax
- \strc_itemgroups_handle_lapped_item_negative
- \else
- \ifzeropt\d_strc_itemgroups_asked_width
- \strc_itemgroups_calculate_list_width\plusone
- \else
- \strc_itemgroups_calculate_list_width\c_strc_itemgroups_nesting
- \fi
- \ifconditional\c_strc_itemgroups_text
- \strc_itemgroups_handle_groups_text_item
- \orelse\ifconditional\c_strc_itemgroups_inline
- \strc_itemgroups_handle_groups_inline_item
- \orelse\ifconditional\c_strc_itemgroups_txt
- \strc_itemgroups_handle_text_item
- \else
- \strc_itemgroups_handle_lapped_item_positive
- \fi
- \fi
- \setfalse\c_strc_itemgroups_head
- \setfalse\c_strc_itemgroups_sub
- \ifconditional\c_strc_itemgroups_indented_first
- \hskip\parindent
- \fi
- \ignorespaces}
-
-\def\strc_itemgroups_start_item_nop
- {\let\currentitemreference\empty
- \strc_itemgroups_increment_item_counter
- \advance\c_strc_itemgroups_n_of_items\plusone
- \setbox\b_strc_itemgroups\hbox
- {\useitemgroupstyleandcolor\c!style\c!color
- \strc_itemgroups_used_symbol}%
- \strc_itemgroups_check_for_repeated
- \ignorespaces}
-
-\setvalue{\??itemgroupdistance\v!none}%
- {\let\m_strc_itemgroups_text_distance\zeropoint}
-
-\setvalue{\??itemgroupdistance\v!space}%
- {\def\m_strc_itemgroups_text_distance{\interwordspace\s!plus\interwordstretch\s!minus\interwordshrink}}
-
-\setvalue\??itemgroupdistance % catches empty value
- {\let\m_strc_itemgroups_text_distance\zeropoint}
-
-\protected\def\strc_itemgroups_set_text_item_distance
- {\edef\m_strc_itemgroups_text_distance{\itemgroupparameter\c!textdistance}%
- \ifempty\m_strc_itemgroups_text_distance
- %
- \orelse\ifcsname\??itemgroupdistance\m_strc_itemgroups_text_distance\endcsname
- \lastnamedcs
- \else
- \strc_itemgroups_set_text_item_distance_indeed
- \fi}
-
-\def\strc_itemgroups_set_text_item_distance_indeed
- {\assignvalue
- \m_strc_itemgroups_text_distance
- \m_strc_itemgroups_text_distance
- {.5\interwordspace\s!plus.5\emwidth}%
- {\interwordspace \s!plus \emwidth}%
- {\emwidth \s!plus \interwordstretch\s!minus\interwordshrink}}
-
-% \protected\def\strc_itemgroups_default_command
-% {\EveryPar{\ignorespaces}% needed ?
-% \ignorespaces}
-
-\protected\def\strc_itemgroups_default_command
- {\ignorespaces}
-
-%D Special case:
-
-\protected\def\strc_itemgroups_head#text\par
- {\startitemgrouphead{#text}}
-
-%D The local commands:
-
-\appendtoks
- \enforced\let\item \strc_itemgroups_start_do_item
- \enforced\let\sub \strc_itemgroups_start_subitem
- \enforced\let\sym \strc_itemgroups_start_symbol
- \enforced\let\ran \strc_itemgroups_start_edge
- \enforced\let\its \strc_itemgroups_start_items
- \enforced\let\mar \strc_itemgroups_start_margin
- \enforced\let\noitem \strc_itemgroups_start_no_item
- \enforced\let\itm \strc_itemgroups_start_do_item
- \enforced\let\but \strc_itemgroups_start_button
- \enforced\let\nop \strc_itemgroups_start_dummy
- \enforced\let\txt \strc_itemgroups_start_text
- \enforced\let\head \strc_itemgroups_head
- \enforced\let\headsym \strc_itemgroups_start_head_sym
- \enforced\let\startitem \startitemgroupitem
- \enforced\let\stopitem \stopitemgroupitem
- \enforced\let\starthead \startitemgrouphead
- \enforced\let\stophead \stopitemgrouphead
- \enforced\let\startspecialitem\startspecialitemgroupitem
- \enforced\let\stopspecialitem \stopspecialitemgroupitem
-\to \itemgroupcommands
-
-\ifx\currentinterface \s!english \else
-
- \def\next#1#2{\ifcsname#1\endcsname\else\enforced\letcsname#1\endcsname#2\fi}
-
- \etoksapp\itemgroupcommands{%
- \next{\v!item }\strc_itemgroups_start_do_item
- \next{\v!sub }\strc_itemgroups_start_subitem
- \next{\v!sym }\strc_itemgroups_start_symbol
- \next{\v!ran }\strc_itemgroups_start_edge
- \next{\v!head }\strc_itemgroups_head
- \next{\v!its }\strc_itemgroups_start_items
- \next{\v!mar }\strc_itemgroups_start_margin
- \next{\v!txt }\strc_itemgroups_start_text
- \next{\e!start\v!item}\startitemgroupitem
- \next{\e!stop \v!item}\stopitemgroupitem
- \next{\e!start\v!head}\startitemgrouphead
- \next{\e!stop \v!head}\stopitemgrouphead
- }
-
-\fi
-
-\relaxvalueifundefined \v!item
-\relaxvalueifundefined \v!sub
-\relaxvalueifundefined \v!sym
-\relaxvalueifundefined \v!ran
-\relaxvalueifundefined \v!head
-\relaxvalueifundefined \v!its
-\relaxvalueifundefined \v!mar
-\relaxvalueifundefined \v!txt
-\relaxvalueifundefined {\e!start\v!item}
-\relaxvalueifundefined {\e!stop \v!item}
-\relaxvalueifundefined {\e!start\v!head}
-\relaxvalueifundefined {\e!stop \v!head}
-
-%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)
-
-\newcount\c_strc_itemgroups_collected_stored
-\newcount\c_strc_itemgroups_collected_done
-\newcount\c_strc_itemgroups_collected_current
-
-\let\strc_itemgroups_collected_store\relax
-
-\normalexpanded{\def\strc_itemgroups_collected_store#1\csname\e!stop\v!item\endcsname}%
- {\advance\c_strc_itemgroups_collected_stored\plusone
- \setvalue{\??itemgroupstack\number\c_strc_itemgroups_collected_stored}{\startitemgroupitem#1\stopitemgroupitem}}
-
-\def\strc_itemgroups_collected_flush_randomize
- {\collecteditemgroupitem}
-
-\def\strc_itemgroups_collected_flush_horizontal
- {\begingroup
- \scratchcounter\itemgroupparameter\c!n\relax
- \ifnum\c_strc_itemgroups_collected_done>\plusone
- \ifcase\modulonumber\scratchcounter\c_strc_itemgroups_collected_done\relax
- % compensate for rounding errors
- \hfill % \hskip\zeropoint plus \scaledpoint minus \scaledpoint
- \allowbreak
- \fi
- \fi
- \noindent % no \dontleavehmode
- \hbox to \dimexpr\availablehsize/\scratchcounter\relax{\collecteditemgroupitem\hss}%
- \endgroup}
-
-% \def\strc_itemgroups_collected_flush_indeed
-% {\collecteditemgroupitem
-% \iftrialtypesetting
-% \undefinevalue{\??itemgroupstack\number\c_strc_itemgroups_collected_current}%
-% \fi}
-
-\def\strc_itemgroups_collected_flush_indeed
- {\collecteditemgroupitem
- \undefinevalue{\??itemgroupstack\number\c_strc_itemgroups_collected_current}}
-
-\def\strc_itemgroups_collected_flush
- {\ifconditional\c_strc_itemgroups_randomize
- \getrandomcount\c_strc_itemgroups_collected_current\plusone\c_strc_itemgroups_collected_stored
- \else
- \advance\c_strc_itemgroups_collected_current\plusone
- \fi
- \ifcsname\??itemgroupstack\number\c_strc_itemgroups_collected_current\endcsname
- \edef\collecteditemgroupitem{\lastnamedcs}%
- \ifconditional\c_strc_itemgroups_horizontal
- \strc_itemgroups_collected_flush_horizontal
- \else
- \strc_itemgroups_collected_flush_indeed
- \fi
- \advance\c_strc_itemgroups_collected_done\plusone
- \fi
- \ifnum\c_strc_itemgroups_collected_done<\c_strc_itemgroups_collected_stored
- \expandafter\strc_itemgroups_collected_flush
- \fi}
-
-\protected\def\stopcollectitems % todo: frozen
- {\ifconditional\c_strc_itemgroups_collecting
- \c_strc_itemgroups_collected_done \zerocount
- \c_strc_itemgroups_collected_current\zerocount
- \ifnum\c_strc_itemgroups_collected_stored>\zerocount
- \ifconditional\c_strc_itemgroups_horizontal
- \strc_itemgroups_before_command
- \setfalse\c_strc_itemgroups_first
- \strc_itemgroups_collected_flush
- %\strc_itemgroups_after_command % triggered elsewhere
- \else
- \strc_itemgroups_collected_flush
- \fi
- \fi
- \fi}
-
-\protected\def\startcollectitems % todo: frozen
- {\ifconditional\c_strc_itemgroups_collecting
- \c_strc_itemgroups_collected_stored\zerocount
- \letvalue{\e!start\v!item}\strc_itemgroups_collected_store
- \fi}
-
-%D Left-overs:
-
-\protected\def\item % todo: frozen
- {\strc_itemgroups_item_alone}
-
-\def\strc_itemgroups_item_alone[#category]#text\par
- {\doifelsesomething{#category}{\startitemgroup[#category]}{\startitemgroup[\v!itemize]}%
- \startitem#text\stopitem
- \stopitemgroup}
-
-\protected\def\head % todo: frozen
- {\strc_itemgroups_head_alone}
-
-\def\strc_itemgroups_head_alone[#category]#head\par#body\par
- {\doifelsesomething{#category}{\startitemgroup[#category]}{\startitemgroup[\v!itemize]}%
- \starthead{#head}#body\stophead
- \stopitemgroup}
-
-\setuvalue{\e!start\v!item}% todo: frozen
- {\startitemgroup[\v!itemize]%
- \startitemgroupitem
- \setuvalue{\e!stop\v!item}{\stopitemgroupitem\stopitemgroup}} % todo: frozen
-
-% \def\sym#text%
-% {\noindent
-% \begingroup
-% \setbox\scratchbox\hbox{\settrialtypesetting#text}%
-% \setbox\scratchbox\hbox\ifdim\wd\scratchbox<1em to 1.5\else spread 1\fi em{#text\hfil}%
-% \normalexpanded{\box\scratchbox\endgroup\hangindent\the\wd\scratchbox}%
-% \ignorespaces}
-
-%D End of plugin.
-
-%D Something for tables:
-
-\permanent\tolerant\protected\def\itemtag[#reference]% we can reuse more
- {% what if empty
- \def\currentitemreference{#reference}%
- \iftrialtypesetting
- \strc_counters_save\v_strc_itemgroups_counter
- \strc_itemgroups_increment_item_counter
- \strc_itemgroups_insert_item_tag_indeed
- \strc_counters_restore\v_strc_itemgroups_counter
- \else
- \strc_itemgroups_increment_item_counter
- \strc_itemgroups_insert_item_tag_indeed
- \fi}
-
-\def\strc_itemgroups_insert_item_tag_indeed
- {\letitemgroupparameter\c!distance\zeropoint
- %letitemgroupparameter\c!width\zeropoint
- \strc_itemgroups_make_symbol_box
- \strc_itemgroups_make_destination_box
- \let\m_strc_itemgroups_destination\empty
- \ht\b_strc_itemgroups\strutheight
- \dp\b_strc_itemgroups\strutdepth
- \box\b_strc_itemgroups
- \ignorespaces}
-
-%D Done again.
-
-\setupitemgroup
- [\c!margin=\zeropoint,
- \c!leftmargin=\zeropoint,
- \c!rightmargin=\zeropoint,
- \c!leftmargindistance=\zeropoint,
- \c!rightmargindistance=\zeropoint,
- \c!indentnext=\v!yes,
- \c!width=1.5\emwidth,
- \c!factor=0,
- %\c!distance=.5em, % is now:
- \c!step=.5\emwidth, % deals with broad
- \c!distance=\zeropoint,
- %\c!align=\v!normal, % definitely not \v!normal !
- %\c!symalign=,
- %\c!color=,
- %\c!indenting=, % untouched if empty
- %\c!style=,
- \c!marstyle=\v!type,
- %\c!symstyle=,
- %\c!headstyle=,
- %\c!marcolor=,
- %\c!symcolor=,
- %\c!headcolor=,
- %\c!beforehead=,
- \c!symcolor=\itemgroupparameter\c!color, % new per 2012.01.17
- \c!symstyle=\itemgroupparameter\c!style, % new per 2012.01.17
- \c!afterhead=\blank,
- \c!before=\blank,
- \c!inbetween=\blank,
- \c!after=\blank,
- %\c!stopper=.,
- \c!placestopper=\v!yes,
- \c!stopper=.,
- %\c!inner=,
- \c!n=2,
- \c!items=4,
- \c!levels=10,
- \c!lefttext=(,
- \c!righttext=),
- \c!start=1,
- \c!packcriterium=\zerocount,
- \c!criterium=\v!all, % permits 0 and negative numbers
- %\c!option=,
- \c!textdistance=\v!space, % none big medium small <dimension>
- \c!command=\strc_itemgroups_default_command,
- \c!indenting=\v!next,
- %\c!alignsymbol=v!no,
- \c!symbol=\currentitemlevel,
- \c!prefix=\v!no,
- %\c!prefixstopper=.,
- %\c!prefixseparatorset=,
- %\c!prefixconversion=,
- %\c!prefixconversionset=,
- %\c!prefixset=,
- %\c!prefixsegments=1:100,
- \c!prefixconnector=.,
- \c!numberseparatorset=,
- \c!numberconversionset=,
- \c!numberstopper=.,
- \c!numbersegments=1]
-
-\defineitemgroup
- [\v!itemize]
-
-%D This is really ugly I should get rid of the global mess, whuch is a side
-%D effect of the simple \type {\item} interface that we're stuck with for
-%D compatibility reasons. See footnotes for usage. It's probablynot robust
-%D for mixed itemgroups so in the end I need to get rid of the globals. One
-%D problem is that counters are set.
-
-\defineitemgroup
- [\v!itemize:\v!note]
-
-\def\strc_itemgroups_push
- {\edef\strc_itemgroups_pop
- {\xdef\noexpand\currentitemlevel{\currentitemlevel}%
- \global\c_strc_itemgroups_nesting \the\c_strc_itemgroups_nesting \relax
- \global\c_strc_itemgroups_column_depth\the\c_strc_itemgroups_column_depth\relax}%
- \global\c_strc_itemgroups_column_depth\zerocount
- \global\c_strc_itemgroups_nesting \zerocount
- \glet\currentitemlevel\!!zerocount
- \enforced\permanent\protected\def\startitemize{\startitemgroup[\v!itemize:\v!note]}%
- \enforced\permanent\protected\def\stopitemize {\stopitemgroup}}
-
-\let\strc_itemgroups_pop\relax
-
-\protect \endinput