summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkxl/strc-syn.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/strc-syn.mkxl')
-rw-r--r--Master/texmf-dist/tex/context/base/mkxl/strc-syn.mkxl680
1 files changed, 680 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/strc-syn.mkxl b/Master/texmf-dist/tex/context/base/mkxl/strc-syn.mkxl
new file mode 100644
index 00000000000..df573a7e995
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkxl/strc-syn.mkxl
@@ -0,0 +1,680 @@
+%D \module
+%D [ file=strc-syn,
+%D version=2008.10.20,
+%D title=\CONTEXT\ Structure Macros,
+%D subtitle=Synonyms and Sorting,
+%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 / Synonyms and Sorting}
+
+\registerctxluafile{strc-syn}{}
+
+%D Although we could nowadays build this on top of regular lists we keep this
+%D more efficient variant around. Eventually we can add some options to lists
+%D that also provide such functionality but at the cost of much more overhead.
+%D
+%D We show a usage of both synonyms and sorts, which are deep down variants of
+%D so called simple lists. A definition looks like this:
+%D
+%D \startbuffer
+%D \definesynonyms
+%D [myabbreviation]
+%D
+%D \setupsynonyms
+%D [myabbreviation]
+%D [headstyle=bold,
+%D headcolor=darkred,
+%D synonymstyle=boldslanted,
+%D synonymcolor=darkblue,
+%D textstyle=slanted,
+%D textcolor=darkgreen,
+%D style=normal,
+%D color=darkyellow]
+%D
+%D \definesorting
+%D [mylogo]
+%D
+%D \setupsorting
+%D [mylogo]
+%D [style=bold,
+%D color=darkmagenta]
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D More complex definitions involves commands to call up meanings and such. The
+%D use of the defined commands is as follows: \
+%D
+%D \startbuffer
+%D \myabbreviation [FIRST] {TheFirst} {The First Words}
+%D \myabbreviation [SECOND] {TheSecond} {The Second Words}
+%D \myabbreviation [THIRD] {TheThird} {The Third Words}
+%D
+%D \mylogo [FOURTH] {TheFourth}
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D By default a synonym is just typeset and flagges as being used, so that in
+%D a list it wil be shows with its meaning. You can however also expand the
+%D meaning automatically at first use:
+%D
+%D \startbuffer
+%D \setupsynonyms[myabbreviation][alternative=first]
+%D
+%D We have \FIRST, \SECOND\ and also \THIRD\ but no \FOURTH.
+%D
+%D We have \FIRST, \SECOND\ and also \THIRD\ but no \FOURTH.
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D We can change the order, as demonstrated in:
+%D
+%D \startbuffer
+%D \resetshownsynonyms[myabbreviation]
+%D
+%D \setupsynonyms[myabbreviation][alternative=last]
+%D
+%D We have \FIRST\ and \THIRD\ or \FOURTH.
+%D
+%D We have \FIRST\ and \THIRD\ or \FOURTH.
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D A list is called up with:
+%D
+%D \startbuffer
+%D \placelistofsynonyms[myabbreviation]
+%D
+%D \placelistofsorts[mylogo]
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D The lists are constructions (like descriptions are) and can be set up
+%D likewise.
+
+% todo: add 'define only' option to descriptions, then add sorting (also based on key)
+% and call to definition -> replaces this module
+
+\unprotect
+
+% split but common in lua
+
+\permanent\protected\def\preprocessexpansion#1#2#3#4% do this at the lua end if still needed
+ {\ifx#1\s!xml
+ \xmlstartraw
+ \xdef#2{#4}%
+ \xmlstopraw
+ \glet#3\s!xml
+ \else
+ \ifx#1\v!yes
+ \xdef#2{#4}%
+ \else
+ \xdef#2{\detokenize{#4}}%
+ \fi
+ \glet#3\s!tex
+ \fi}
+
+%D We now use a simple list variant:
+
+\installcorenamespace {simplelist}
+
+\installcommandhandler \??simplelist {simplelist} \??simplelist
+
+\aliased\let\setupsimplelists\setupsimplelist
+
+\setupsimplelists[%
+ %c!title=,
+ %c!text=,
+ %
+ %c!style=,
+ %c!color=,
+ %c!command=,
+ %c!align=,
+ %
+ %c!headstyle=,
+ %c!headcolor=,
+ %c!headalign=,
+ %
+ %c!titlestyle=,
+ %c!titlecolor=,
+ %c!titlecommand=,
+ %c!titleleft=,
+ %c!titleright=,
+ %
+ %c!closesymbol=,
+ %c!closecommand=,
+ %
+ \c!alternative=\v!left,
+ \c!display=\v!yes,
+ \c!width=7\emwidth,
+ \c!distance=\emwidth,
+ \c!titledistance=.5\emwidth,
+ %c!hang=,
+ %c!sample=,
+ \c!margin=\v!no,
+ \c!before=\startpacked,
+ \c!inbetween=\blank,
+ \c!after=\stoppacked,
+ %c!indentnext=,
+ %c!indenting=,
+ %
+ \c!expansion=\v!no,
+ %c!xmlsetup=,
+ %s!catcodes=,
+ \s!language=\currentmainlanguage,
+]
+
+\appendtoks
+ \setfalse\c_strc_constructions_define_commands
+ \ifempty\currentsimplelistparent
+ \defineconstruction[\currentsimplelist][\s!handler=\v!simplelist,\c!level=1]%
+ \else
+ \defineconstruction[\currentsimplelist][\currentsimplelistparent][\s!handler=\v!simplelist,\c!level=1]%
+ \fi
+ \settrue\c_strc_constructions_define_commands
+\to \everydefinesimplelist
+
+\protected\defcsname\??constructioninitializer\v!simplelist\endcsname
+ {\let \currentsimplelist \currentconstruction
+ \enforced\let\constructionparameter \simplelistparameter
+ \enforced\let\constructionnamespace \??simplelist
+ \enforced\let\detokenizedconstructionparameter\detokenizedsimplelistparameter
+ \enforced\let\letconstructionparameter \letsimplelistparameter
+ \enforced\let\useconstructionstyleandcolor \usesimpleliststyleandcolor
+ \enforced\let\setupcurrentconstruction \setupcurrentsimplelist}
+
+\protected\defcsname\??constructionfinalizer\v!simplelist\endcsname
+ {}
+
+\protected\defcsname\??constructiontexthandler\v!simplelist\endcsname
+ {\begingroup
+ \useconstructionstyleandcolor\c!headstyle\c!headcolor
+ \the\everyconstruction
+ \constructionparameter\c!headcommand
+ {\strut
+ \currentsimplelistentry}%
+ \endgroup}
+
+% And we build on top of this.
+
+\ifdefined\dotagsynonym \else \aliased\let\dotagsynonym\relax \fi
+\ifdefined\dotagsorting \else \aliased\let\dotagsorting\relax \fi
+
+\definesimplelist
+ [\v!synonym]
+ [\c!state=\v!start,
+ %\c!synonymstyle=,
+ %\c!textstyle=,
+ %\c!headstyle=,
+ %\c!headcolor=,
+ %\c!criterium=,
+ \c!location=\v!left,
+ \c!width=5\emwidth,
+ \c!distance=\zeropoint,
+ %\c!sample=,
+ %\c!hang=,
+ %\c!align=,
+ %\c!before=,
+ %\c!inbetween=,
+ %\c!after=,
+ \c!indentnext=\v!no,
+ %\c!expansion=,
+ \c!method=]
+
+\aliased\let\setupsynonyms\setupsimplelist
+
+% these might become private
+
+\mutable\let\currentsynonymoption \empty
+\mutable\let\currentsynonymcoding \empty
+\mutable\let\currentsynonymexpansion\empty
+\mutable\let\currentsynonym \empty
+\mutable\let\currentsynonymtag \empty
+\mutable\let\currentsynonymtext \empty
+
+\permanent\tolerant\protected\def\definesynonyms[#1]#*[#2]#*[#3]#*[#4]% name plural \meaning \use
+ {\ifnum\lastarguments=\plusfour
+ \protected\instance\def#4##1{\strc_synonyms_insert{#1}{##1}}% name tag
+ \frozen\instance\protected\defcsname#1\endcsname{\definesynonym[\v!no][#1]}% \name
+ \else
+ \frozen\instance\protected\defcsname#1\endcsname{\definesynonym[\v!yes][#1]}% \name
+ \fi
+ \ifparameter#3\or
+ \frozen\instance\protected\def#3##1{\strc_synonyms_insert_meaning{#1}{##1}}% \meaning
+ \fi
+ \edef\currentsynonym{#1}%
+ %
+ %\checksynonymparent
+ %\setupcurrentsynonym[\s!single={#1},\s!multi={#2}]%
+ \setfalse\c_strc_constructions_define_commands
+ \definesimplelist
+ [\currentsynonym]%
+ [\v!sorting]
+ [\s!single={#1},%
+ \s!multi={#2}]%
+ \settrue\c_strc_constructions_define_commands
+ \ifparameter#2\or
+ %
+ \presetheadtext[#2=\Word{#2}]% changes the \if...argument
+ %
+ % These will go away. Actually the overloads catched this empty case!
+ %
+ \frozen\instance\protected\defcsname\e!setup #2\e!endsetup\endcsname{\setupsynonyms[#1]}% obsolete definition
+ \frozen\instance\protected\defcsname\e!place \e!listof#2\endcsname{\placelistofsynonyms[#1]}% accepts extra argument
+ \frozen\instance\protected\defcsname\e!complete\e!listof#2\endcsname{\completelistofsynonyms[#1]}%
+ \fi}
+
+\permanent\tolerant\protected\def\definesynonym[#1]#*[#2]#*[#3]%
+ {\begingroup
+ \edef\currentsynonymoption{#1}%
+ \edef\currentsynonym{#2}%
+ \edef\currentsynonymtag{#3}%
+ \strc_synonyms_define_entry}
+
+\def\strc_synonyms_define_entry#1#2%
+ {\let\currentsimplelist\currentsynonym
+ \ifempty\currentsynonymtag
+ \edef\currentsynonymtag{#1}%
+ \fi
+ \ifempty\currentsynonymtag \else
+ % this is not that efficient, esp when we load a big list
+ \edef\currentsynonymexpansion{\simplelistparameter\c!expansion}%
+ \preprocessexpansion\currentsynonymexpansion\m_synonyms_text \currentsynonymcoding{#1}%
+ \preprocessexpansion\currentsynonymexpansion\m_synonyms_meaning\currentsynonymcoding{#2}%
+ % currently they all end up in the tuc file
+ \clf_registersynonym
+ {\currentsynonym}%
+ {synonym}%
+ {%
+ metadata {%
+ catcodes \catcodetable
+ coding {\currentsynonymcoding}%
+ \ifx\currentsynonymcoding\s!xml
+ xmlroot {\xmldocument}%
+ \fi
+ }%
+ definition {%
+ tag {\currentsynonymtag}%
+ synonym {\m_synonyms_text}%
+ meaning {\m_synonyms_meaning}%
+ % used false
+ }%
+ }%
+ \relax
+ \ifx\currentsynonymoption\v!yes
+ \instance\setuxvalue\currentsynonymtag{\strc_synonyms_insert{\currentsynonym}{\currentsynonymtag}}%
+ \fi
+ \fi
+ \endgroup}
+
+\permanent\tolerant\protected\def\registersynonym [#1]#*[#2]{\clf_registerusedsynonym{#1}{#2}}
+\permanent \protected\def\currentsynonymname {\clf_synonymname{\currentsimplelist}{\currentsynonymtag}}
+\permanent \protected\def\currentsynonymmeaning {\clf_synonymmeaning{\currentsimplelist}{\currentsynonymtag}}
+\permanent \protected\def\doifelsecurrentsynonymused {\clf_doifelsesynonymused{\currentsimplelist}{\currentsynonymtag}}
+\permanent \protected\def\doifelsecurrentsynonymshown{\clf_doifelsesynonymshown{\currentsimplelist}{\currentsynonymtag}}
+\permanent \protected\def\resetusedsynonyms [#1]{\clf_resetusedsynonyms{#1}}
+\permanent \protected\def\resetshownsynonyms [#1]{\clf_resetshownsynonyms{#1}}
+
+\aliased\let\rawsynonymname \clf_synonymname
+\aliased\let\rawsynonymmeaning\clf_synonymmeaning
+
+\installcorenamespace{simplelistalternative} % specific ways of rendering a list
+\installcorenamespace{simplelistrenderings} % a namespace for setups (rather local)
+
+\installcommandhandler \??simplelistalternative {simplelistalternative} \??simplelistalternative
+
+\setupsimplelist
+ [\v!synonym]
+ [\c!alternative=\v!normal]
+
+\protected\def\strc_synonyms_insert_meaning#1#2% name tag
+ {\dontleavehmode % otherwise we don't get it right at the beginning of a par
+ \begingroup
+ \def\currentsimplelist{#1}%
+ \def\currentsynonymtag{#2}%
+ \fastsetup{\??simplelistrenderings::\v!text}%
+ \endgroup}
+
+\protected\def\strc_synonyms_insert#1#2% name tag
+ {\dontleavehmode % otherwise we don't get it right at the beginning of a par
+ \begingroup
+ \edef\currentsimplelist{#1}%
+ \let\currentsynonym\currentsimplelist % for a while
+ \def\currentsynonymtag{#2}%
+ \edef\currentsimplelistalternative{\simplelistparameter\c!alternative}%
+ \doifnotcommandhandler\??simplelistalternative\currentsimplelistalternative
+ {\let\currentsimplelistalternative\v!normal}%
+ \fastsetup{\??simplelistrenderings:\v!synonym:\currentsimplelistalternative}%
+ \normalexpanded{\endgroup\simplelistparameter\c!next}}
+
+% \setupsimplelistalternative
+% [\c!command=\directsimplelistparameter\c!command]
+
+\definesimplelistalternative
+ [\v!normal]
+ [\c!inbetween=\space,
+ \c!left=(,
+ \c!right=)]
+
+\definesimplelistalternative
+ [\v!first]
+ [\v!normal]
+
+\definesimplelistalternative
+ [\v!last]
+ [\v!normal]
+
+\startsetups[\??simplelistrenderings::\v!synonym]
+ \begingroup
+ \dostarttaggedchained\t!synonym\currentsynonym\??simplelist
+ \dotagsynonym
+ \usesimpleliststyleandcolor\c!synonymstyle\c!synonymcolor
+ \simplelistparameter\c!synonymcommand{\currentsynonymname}%
+ \dostoptagged
+ \endgroup
+\stopsetups
+
+\startsetups[\??simplelistrenderings::\v!text]
+ \begingroup
+ \usehyphensparameter\simplelistparameter
+ \usesimpleliststyleandcolor\c!textstyle\c!textcolor
+ \simplelistparameter\c!textcommand{\currentsynonymmeaning}%
+ \endgroup
+\stopsetups
+
+\startsetups[\??simplelistrenderings:\v!synonym:\v!normal]
+ \fastsetup{\??simplelistrenderings::\v!synonym}
+\stopsetups
+
+\startsetups[\??simplelistrenderings:\v!synonym:\v!first]
+ \fastsetup{\??simplelistrenderings::\v!synonym}
+ \doifelsecurrentsynonymshown \donothing {
+ \simplelistalternativeparameter\c!inbetween
+ \simplelistalternativeparameter\c!left
+ \fastsetup{\??simplelistrenderings::\v!text}
+ \simplelistalternativeparameter\c!right
+ }
+\stopsetups
+
+\startsetups[\??simplelistrenderings:\v!synonym:\v!last]
+ \doifelsecurrentsynonymshown {
+ \fastsetup{\??simplelistrenderings::\v!synonym}
+ } {
+ \fastsetup{\??simplelistrenderings::\v!text}
+ \simplelistalternativeparameter\c!inbetween
+ \simplelistalternativeparameter\c!left
+ \fastsetup{\??simplelistrenderings::\v!synonym}
+ \simplelistalternativeparameter\c!right
+ }
+\stopsetups
+
+\aliased\let\synonymentry\relax
+
+\permanent\tolerant\protected\def\placelistofsynonyms[#1]#*[#2]%
+ {\begingroup
+ \edef\currentsimplelist{#1}%
+ \doifelsecommandhandler\??simplelist\currentsimplelist
+ {\strc_constructions_initialize{#1}%
+ \setupcurrentsimplelist[#2]%
+ \enforced\let\synonymentry\strc_synonym_normal
+ % so we can hook tabulate into before and after
+ \normalexpanded{\simplelistparameter\c!before
+ \noexpand\clf_processsynonyms
+ {#1}%
+ {%
+ criterium {\simplelistparameter\c!criterium}%
+ language {\simplelistparameter\s!language}%
+ method {\simplelistparameter\c!method}%
+ }%
+ \relax
+ \simplelistparameter\c!after}%
+ \relax}%
+ {}% todo: message that invalid
+ \endgroup}
+
+\permanent\tolerant\protected\def\completelistofsynonyms[#1]#*[#2]%
+ {\begingroup
+ \edef\currentsimplelist{#1}%
+ \doifelsecommandhandler\??simplelist\currentsimplelist
+ {\normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\simplelistparameter\s!multi}},\c!reference=#1]}%
+ \placelistofsynonyms[#1][#2]%
+ \page
+ \stopnamedsection}%
+ {}% todo: message that invalid
+ \endgroup}
+
+\mutable\let\currentsimplelistentry\empty
+
+\protected\def\strc_synonym_normal#1#2#3#4%
+ {\begingroup
+ \def\currentsimplelistentry{#3}%
+ \csname\??constructionstarthandler\v!construction\endcsname
+ #4%
+ \csname\??constructionstophandler\v!construction\endcsname
+ \endgroup}
+
+%D Sorting (a simplified version of synonym).
+
+\definesimplelist
+ [\v!sorting]
+ [\c!state=\v!start,
+ %\c!command=, % we test for defined !
+ %\c!criterium=,
+ %\c!style=,
+ \c!before=\startpacked,
+ \c!after=\stoppacked,
+ %\c!expansion=,
+ \c!method=]
+
+\aliased\let\setupsorting\setupsimplelist
+
+% if #3=\relax or \v!none, then no command but still protected
+
+% these might become private
+
+\mutable\let\currentsortingoption \empty
+\mutable\let\currentsortingcoding \empty
+\mutable\let\currentsortingexpansion\empty
+\mutable\let\currentsorting \empty
+\mutable\let\currentsortingtag \empty
+\mutable\let\currentsortingtext \empty
+
+\permanent\tolerant\protected\def\definesorting[#1]#*[#2]#*[#3]%
+ {\ifnum\lastarguments=\plusthree
+ \doifnot{#3}\v!none
+ {\ifx#3\relax \else
+ \protected\instance\def#3##1{\strc_sorting_insert{#1}{##1}}%
+ \fi}%
+ \frozen\instance\protected\defcsname#1\endcsname{\definesort[\v!no][#1]}%
+ \else
+ \frozen\instance\protected\defcsname#1\endcsname{\definesort[\v!yes][#1]}%
+ \fi
+ \edef\currentsorting{#1}%
+ \setfalse\c_strc_constructions_define_commands
+ \definesimplelist
+ [\currentsorting]%
+ [\v!sorting]
+ [\s!single={#1},%
+ \s!multi={#2}]%
+ \settrue\c_strc_constructions_define_commands
+ \ifparameter#2\or
+ %
+ \presetheadtext[#2=\Word{#2}]% changes the \if...argument
+ %
+ % These will go away. Actually the overloads catched this empty case!
+ %
+ %
+ \presetheadtext[#2=\Word{#2}]%
+ %
+ \frozen\instance\protected\defcsname\e!setup #2\e!endsetup\endcsname{\setupsorting[#1]}% obsolete definition
+ \frozen\instance\protected\defcsname\e!place \e!listof#2\endcsname{\placelistofsorts[#1]}%
+ \frozen\instance\protected\defcsname\e!complete\e!listof#2\endcsname{\completelistofsorts[#1]}%
+ \fi}
+
+\permanent\tolerant\protected\def\definesort[#1]#*[#2]#*[#3]%
+ {\begingroup
+ \edef\currentsortingoption{#1}%
+ \edef\currentsorting{#2}%
+ \edef\currentsortingtag{#3}%
+ \strc_sorting_define_entry}
+
+\def\strc_sorting_define_entry#1%
+ {\let\currentsimplelist\currentsimplelist
+ \ifempty\currentsortingtag
+ \edef\currentsortingtag{#1}%
+ \fi
+ \ifempty\currentsortingtag \else
+ \edef\currentsortingexpansion{\simplelistparameter\c!expansion}%
+ \preprocessexpansion\currentsortingexpansion\currentsortingtext\currentsortingcoding{#1}%
+ \clf_registersynonym
+ {\currentsorting}%
+ {sorting}%
+ {%
+ metadata {%
+ catcodes \catcodetable
+ coding {\currentsortingcoding}%
+ \ifx\currentsortingcoding\s!xml
+ xmlroot {\xmldocument}%
+ \fi
+ }%
+ definition {%
+ tag {\currentsortingtag}%
+ synonym {\currentsortingtext}%
+ % used false
+ }%
+ }%
+ \relax
+ \ifx\currentsortingoption\v!yes
+ \instance\setuxvalue\currentsortingtag{\strc_sorting_insert{\currentsorting}{\currentsortingtag}}%
+ \fi
+ \fi
+ \endgroup}
+
+\permanent\protected\def\currentsortingname {\clf_synonymname {\currentsimplelist}{\currentsortingtag}}
+\permanent\protected\def\doifelsecurrentsortingused {\clf_doifelsesynonymused {\currentsimplelist}{\currentsortingtag}}
+\permanent\protected\def\resetusedsortings [#1]{\clf_resetusedsynonyms {#1}}
+
+\setupsimplelist
+ [\v!sorting]
+ [\c!alternative=\v!normal]
+
+\protected\def\strc_sorting_insert#1#2% name tag
+ {\dontleavehmode % otherwise we don't get it right at the beginning of a par
+ \begingroup
+ % no kap currently, of .. we need to map cap onto WORD
+ \edef\currentsorting{#1}%
+ \edef\currentsortingtag{#2}%
+ \let\currentsimplelist\currentsorting
+ \edef\currentsimplelistalternative{\simplelistparameter\c!alternative}%
+ \doifnotcommandhandler\??simplelistalternative\currentsimplelistalternative
+ {\let\currentsimplelistalternative\v!normal}%
+ \fastsetup{\??simplelistrenderings:\v!sorting:\currentsimplelistalternative}%
+ \normalexpanded{\endgroup\simplelistparameter\c!next}}
+
+% or:
+%
+% \doifelsesetups{\??simplelistrenderings:\v!sorting:\currentsimplelistalternative}
+% {\fastsetup{\??simplelistrenderings:\v!sorting:\currentsimplelistalternative}}
+% {\fastsetup{\??simplelistrenderings:\v!sorting:\v!normal}}
+
+\startsetups [\??simplelistrenderings:\v!sorting:\v!normal]
+ \fastsetup{\??simplelistrenderings::\v!sorting}%
+\stopsetups
+
+\startsetups [\??simplelistrenderings::\v!sorting]
+ \begingroup
+ \dostarttaggedchained\t!sorting\currentsorting\??simplelist
+ \dotagsorting
+ \usesimpleliststyleandcolor\c!style\c!color
+ \currentsortingname
+ \dostoptagged
+ \endgroup
+\stopsetups
+
+\permanent\tolerant\protected\def\registersort[#1]#*[#2]%
+ {\clf_registerusedsynonym{#1}{#2}}
+
+% before after
+%
+% maybe just 'commandset' and then combine
+
+\permanent\tolerant\protected\def\placelistofsorts[#1]#*[#2]%
+ {\begingroup
+ \edef\currentsimplelist{#1}%
+ \strc_constructions_initialize{#1}%
+ \setupcurrentsimplelist[#2]%
+ \edef\p_simplelist_command{\simplelistparameter\c!command}%
+ \ifempty\p_simplelist_command
+ \enforced\let\synonymentry\strc_sorting_normal
+ \else
+ \enforced\let\synonymentry\strc_sorting_command
+ \fi
+ % so we can hook tabulate into before and after
+ \normalexpanded{\simplelistparameter\c!before
+ \noexpand\clf_processsynonyms
+ {#1}%
+ {%
+ criterium {\simplelistparameter\c!criterium}%
+ language {\simplelistparameter\s!language}%
+ method {\simplelistparameter\c!method}%
+ }%
+ \relax
+ \simplelistparameter\c!after}%
+ \endgroup}
+
+\permanent\tolerant\protected\def\completelistofsorts[#1]#*[#2]%
+ {\begingroup
+ \edef\currentsimplelist{#1}%
+ \normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\simplelistparameter\s!multi}},\c!reference=#1]}%
+ \placelistofsorts[#1][#2]%
+ \page
+ \stopnamedsection
+ \endgroup}
+
+\def\strc_sorting_command#1#2#3#4% #4 is meaning but empty here
+ {\p_simplelist_command{#1}{#2}{#3}}
+
+\def\strc_sorting_normal#1#2#3#4% #4 is meaning but empty here
+ {\begingroup
+ \usesimpleliststyleandcolor\c!style\c!color
+ #3%
+ \endgroup
+ \par}
+
+%D Presets.
+
+% To be considered:
+%
+% \setupsimplelist
+% [\v!sorting]
+% [\c!headstyle=\simplelistparameter\c!synonymstyle,
+% \c!headcolor=\simplelistparameter\c!synonymcolor,
+% \c!style=\simplelistparameter\c!textstyle,
+% \c!color=\simplelistparameter\c!textcolor]
+
+\definesynonyms
+ [\v!abbreviation]
+ [\v!abbreviations]
+ [\infull]
+
+\setupsynonyms
+ [\v!abbreviation]
+ [\c!hyphens=\v!no, % new, not yet in setup definitions
+ \c!textstyle=\v!capital]
+
+\definesorting
+ [\v!logo]
+ [\v!logos]
+% [\logogram] % no
+
+\protect \endinput