diff options
Diffstat (limited to 'tex/context/base/strc-des.mkiv')
-rw-r--r-- | tex/context/base/strc-des.mkiv | 182 |
1 files changed, 105 insertions, 77 deletions
diff --git a/tex/context/base/strc-des.mkiv b/tex/context/base/strc-des.mkiv index 779cf38c9..a802adcb0 100644 --- a/tex/context/base/strc-des.mkiv +++ b/tex/context/base/strc-des.mkiv @@ -67,6 +67,17 @@ \def\dodescriptionparentparameter#1#2% {\ifx#1\relax\s!empty\else\dodescriptionparameter#1#2\fi} +\def\descriptionlocationparameter#1{\csname\dodescriptionlocationparameter{\??dd\currentdescription}#1\endcsname} + +\def\dodescriptionlocationparameter#1#2% + {\ifcsname#1#2:\descriptionparameter\c!location\endcsname + #1#2:\descriptionparameter\c!location + \else\ifcsname#1\s!parent\endcsname + \expandafter\dodescriptionlocationparameter\csname#1\s!parent\endcsname#2% + \else + \dodescriptionparameter{\??dd\currentdescription}#2% + \fi\fi} + % description hashes (needed for style/color) \def\descriptionparameterhash #1{\dodescriptionparameterhash{\??dd\currentdescription }#1} @@ -136,17 +147,17 @@ \noindent \llap {\@@makedescriptionpurebox\raggedright - \hbox to \descriptionparameter\c!width{\copy\descriptionheadbox\hss}% - \hskip\descriptionparameter\c!distance}% + \hbox to \descriptionsheadwidth{\copy\descriptionheadbox\hss}% + \hskip\descriptionsheaddistance}% \@@dodescription} \def\@@descriptionrightmargin % whatever this means {\def\\{\crlf}% \noindent \rlap - {\hskip\descriptionparameter\c!distance + {\hskip\descriptionsheaddistance \@@makedescriptionpurebox\raggedright - \hbox to \descriptionparameter\c!width{\copy\descriptionheadbox\hss}}% + \hbox to \descriptionsheadwidth{\copy\descriptionheadbox\hss}}% \@@dodescription} \def\@@makedescriptionpurebox#1% @@ -256,7 +267,7 @@ \setvalue{@@description\v!serried}% {\processaction - [\descriptionparameter\c!width] + [\descriptionlocationparameter\c!width] [ \v!fit=>\let\next\v!fit, \v!broad=>\let\next\v!broad, \s!unknown=>\let\next\v!wide, @@ -309,33 +320,27 @@ \begingroup \doadaptleftskip{\descriptionparameter\c!margin}% \showcomposition - \descriptionsheaddistance\descriptionparameter\c!distance\relax + \setlocalhsize % so we can use \localhsize in width assignments + \descriptionsheaddistance\descriptionlocationparameter\c!distance\relax \ifdim\descriptionsheaddistance=\zeropoint\relax - \doif{\descriptionparameter\c!width}\v!broad{\descriptionsheaddistance=1em}% + \doif{\descriptionlocationparameter\c!width}\v!broad{\descriptionsheaddistance=1em}% \fi \setbox\descriptionheadbox\hbox {\forgetall\dontcomplain \trialtypesettingtrue \doifelsenothing{\descriptionparameter\c!sample} - {\dodescriptionhandler - {\begstrut\descriptionparameter\c!text\ignorespaces\currentdescriptiontext\endstrut}}% - {\dodescriptionhandler - {\begstrut\descriptionparameter\c!text\descriptionparameter\c!sample\endstrut}}}% + {\dodescriptionhandler\currentdescriptiontext}% + {\dodescriptionhandler\currentdescriptionsample}}% \assignwidth \descriptionsheadwidth - {\descriptionparameter\c!width} + {\descriptionlocationparameter\c!width} {\unhcopy\descriptionheadbox} \descriptionsheaddistance \setbox\descriptionheadbox\hbox {\forgetall\dontcomplain \doifelse{\descriptionparameter\c!location}\v!serried % brrr, hack - {\dodescriptionhandler - {\begstrut\descriptionparameter\c!text\currentdescriptiontext\endstrut}} - {\dodescriptionhandler - {\vtop - {\hsize\dimexpr\descriptionsheadwidth-\descriptionsheaddistance\relax - \doifsomething{\descriptionparameter\c!headalign}{\setupalign[\descriptionparameter\c!headalign]}% - \begstrut\descriptionparameter\c!text\ignorespaces\currentdescriptiontext\endstrut}}}}% + {\dodescriptionhandler\currentdescriptiontext} + {\dodescriptionhandler{\boxeddescriptionhead\currentdescriptiontext}}}% \doifelse{\descriptionparameter\c!aligntitle}\v!no {\leftdescriptionskip\leftskip\rightdescriptionskip\rightskip} {\ifcase\nesteddescriptionstate\leftdescriptionskip\leftskip\rightdescriptionskip\rightskip\fi}% @@ -349,6 +354,13 @@ \fi % now happens elsewhere : \noindent\ignorespaces \@@resetdescriptionclosesymbol} +\def\boxeddescriptionhead#1% + {\vtop + %{\hsize\dimexpr\descriptionsheadwidth-\descriptionsheaddistance\relax + {\hsize\descriptionsheadwidth + \doifsomething{\descriptionparameter\c!headalign}{\setupalign[\descriptionparameter\c!headalign]}% + #1}} + \def\@@stopdescription {\@@placedescriptionclosesymbol \par % else we loose @@ -467,9 +479,14 @@ \def\dodescriptionstart #1{\dodescriptioninit{#1}\dosingleempty\@@startdescription} \def\dodescriptionstop #1{\dodescriptioninit{#1}\@@stopdescription} -\def\dodescriptionhandler {\csname\??dd:\descriptionparameter\s!handler:\s!handler \endcsname} -\def\dohandledescriptiondo {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!do \endcsname} -\def\dohandledescriptionstart{\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!start\endcsname} +\def\dodescriptiontext {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!text \endcsname} +\def\dodescriptionnumber {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!number\endcsname} +\def\dodescriptionhandler {\csname\??dd:\descriptionparameter\s!handler:\s!handler \endcsname} +\def\dohandledescriptiondo {\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!do \endcsname} +\def\dohandledescriptionstart{\csname\??dd:\descriptionparameter\s!handler:\s!handler:\s!start \endcsname} + +\def\currentdescriptiontext {\begstrut\dodescriptiontext\endstrut} +\def\currentdescriptionsample{\begstrut\descriptionparameter\c!text\descriptionparameter\c!sample\endstrut} % implementation @@ -478,23 +495,28 @@ \newtoks \everydescription +\setvalue{\??dd:\v!description:\s!handler:\s!text }{\@@dodescriptiontext} \setvalue{\??dd:\v!description:\s!handler }{\@@dodescriptionhandler} \setvalue{\??dd:\v!description:\s!handler:\s!do }{\@@somedescription} \setvalue{\??dd:\v!description:\s!handler:\s!start}{\@@startsomedescription} \def\@@dodescriptionhandler#1% - {\strut - \dodescriptionheadtext{#1}% - \iftrialtypesetting \else + {\iftrialtypesetting \else + \begingroup \currentdescriptionsynchronize - \dosetattribute{destination}\currentdescriptionattribute % todo - \fi} + \dosetattribute{destination}\currentdescriptionattribute % todo, whole text + \forcecolorhack + \endgroup + \fi#1} -\def\dodescriptionheadtext#1% title +\def\@@dododescriptiontext + {\ctxlua{structure.lists.savedtitle("\currentdescriptionmain",\currentdescriptionnumberentry)}} + +\def\@@dodescriptiontext {\begingroup \dosetdescriptionattributes\c!headstyle\c!headcolor \the\everydescription - \descriptionparameter\c!command{\strut#1}% probably incomplete + \descriptionparameter\c!command{\strut\descriptionparameter\c!text\ignorespaces\@@dododescriptiontext}% probably incomplete \endgroup} % setup enumerations @@ -603,32 +625,61 @@ \letvalue{\??dd:\c!couplingway:\v!local }\plusone \letvalue{\??dd:\c!couplingway:\v!global}\plustwo -\setvalue{\??dd:\v!enumeration:\s!handler }{\@@doenumerationhandler} -\setvalue{\??dd:\v!enumeration:\s!handler:\s!do }{\@@somedescription} -\setvalue{\??dd:\v!enumeration:\s!handler:\s!start}{\@@startsomedescription} +\setvalue{\??dd:\v!enumeration:\s!handler:\s!number}{\@@doenumerationnumber} +\setvalue{\??dd:\v!enumeration:\s!handler:\s!text }{\@@doenumerationtext} +\setvalue{\??dd:\v!enumeration:\s!handler }{\@@doenumerationhandler} +\setvalue{\??dd:\v!enumeration:\s!handler:\s!do }{\@@somedescription} +\setvalue{\??dd:\v!enumeration:\s!handler:\s!start }{\@@startsomedescription} -\def\@@doenumerationhandler#1% - {\strut - \iftrialtypesetting \else - \begingroup - \currentdescriptionsynchronize - \dosetattribute{destination}\currentdescriptionattribute % todo, whole text - \forcecolorhack - \endgroup - \fi - \ifconditional\enumerationnumberenabled +\let\@@doenumerationhandler\@@dodescriptionhandler + +% \def\currentenumerationfullnumber +% {\ctxlua{structure.lists.savedprefixednumber("\currentdescriptionmain",\currentdescriptionnumberentry)}} + +\def\@@doenumerationnumber + {\ctxlua{structure.lists.savedprefixednumber("\currentdescriptionmain",\currentdescriptionnumberentry)}} + +\def\@@dodoenumerationtext + {\ctxlua{structure.lists.savedtitle("\currentdescriptionmain",\currentdescriptionnumberentry)}} + +\def\doenumerationnumber + {\descriptionparameter\c!left + \dodescriptionnumber + \descriptionparameter\c!stopper + \descriptionparameter\c!right} + +\def\@@doenumerationtext + {\ifconditional\enumerationnumberenabled \iftrialtypesetting - \doenumerationfullnumber\showdntext{#1}% + \doenumerationfullnumber\showdntext \doenumerationcouplingsymbol \else \doenumerationregistercoupling - \doenumerationfullnumber\showdntext{#1}% + \doenumerationfullnumber\showdntext \doenumerationcouplingsymbol \fi \else - \doenumerationfullnumber\showdnpuretext{#1}% + \doenumerationfullnumber\showdnpuretext \fi} +\def\doenumerationfullnumber#1% text, title + {\begingroup + \dosetdescriptionattributes\c!headstyle\c!headcolor + \the\everyenumeration + \descriptionparameter\c!command{\strut#1\doenumerationnumber\doenumerationextratext}% + \endgroup} + +\def\doenumerationextratext + {\doif{\descriptionparameter\c!title}\v!yes + {\begingroup + \dosetdescriptionattributes\c!titlestyle\c!titlecolor + \hskip\descriptionparameter\c!titledistance + \descriptionparameter\c!titlecommand + {\descriptionparameter\c!titleleft + \begstrut\@@dodoenumerationtext\endstrut + \descriptionparameter\c!titleright}% + \endgroup}} + \def\doenumerationsavecounter {\savestructurecounter[\currentdescriptionnumber]} \def\doenumerationrestorecounter {\restorestructurecounter[\currentdescriptionnumber]} \def\doenumerationincrementcounter{\doincrementsubstructurecounter[\currentdescriptionnumber][\currentdescriptionlevel]} @@ -660,38 +711,6 @@ % todo \fi\fi} -\def\currentdescriptiontext - {\ctxlua{structure.lists.savedtitle("\currentdescriptionmain",\currentdescriptionnumberentry)}} - -\def\currentenumerationfullnumber -% {\ctxlua{structure.lists.savednumber("\currentdescriptionmain",\currentdescriptionnumberentry)}} - {\ctxlua{structure.lists.savedprefixednumber("\currentdescriptionmain",\currentdescriptionnumberentry)}} - -\def\doenumerationfullnumber#1#2% text, title - {\begingroup - \dosetdescriptionattributes\c!headstyle\c!headcolor - \the\everyenumeration - \descriptionparameter\c!command - {\strut - #1% - \descriptionparameter\c!left - \currentenumerationfullnumber - % save cq. treat expansion etc - \doiftext{#2} % always true anyway - {\doif{\descriptionparameter\c!title}\v!yes - {\begingroup - \dosetdescriptionattributes\c!titlestyle\c!titlecolor - \hskip\descriptionparameter\c!titledistance - \descriptionparameter\c!titlecommand - {\descriptionparameter\c!titleleft - \begstrut#2\endstrut - \descriptionparameter\c!titleright}% - \endgroup}}% - % - \descriptionparameter\c!stopper - \descriptionparameter\c!right}% - \endgroup} - \def\showdnpuretext{\strut\descriptionparameter\c!text} % geen spatie \def\showdnlisttext{\descriptionparameter\c!listtext} % space in default \def\showdntext {\doifsomething{\descriptionparameter\c!text}{\descriptionparameter\c!text\removeunwantedspaces\fixedspace}} @@ -1027,6 +1046,15 @@ \s!catcodes=, \c!saveinlist=\v!yes] +\setupdescriptions + [\c!width=7em, + \c!distance=1em] + +\setupdescriptions[\c!width:\c!top=\localhsize] % undocumented, only width and distance +% \setupdescriptions[\c!width:\c!left=7em,\c!distance=1em] +% \setupdescriptions[\c!width:\c!right=7em,\c!distance=1em] + + \setuplabels [\s!parent=\??dn] |