summaryrefslogtreecommitdiff
path: root/tex/context/base/strc-lab.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/strc-lab.mkiv')
-rw-r--r--tex/context/base/strc-lab.mkiv239
1 files changed, 74 insertions, 165 deletions
diff --git a/tex/context/base/strc-lab.mkiv b/tex/context/base/strc-lab.mkiv
index 0bf65608f..483791462 100644
--- a/tex/context/base/strc-lab.mkiv
+++ b/tex/context/base/strc-lab.mkiv
@@ -15,173 +15,82 @@
\unprotect
-%D Labels are implemented somewhat inefficient but have the advantage that they
-%D can be controlled like other constructions. Who knows when that comes in
-%D handy?
-
-\installcorenamespace{labels}
-
-\installcommandhandler \??labels {label} \??labels % plural hash, else clash with label (or rename that one)
-
-\let\setuplabels\setuplabel
-
-\setuplabel
- [\c!alternative=\v!intext,
- \c!headstyle=\v!bold,
- \c!titlestyle=\v!bold,
- \c!distance=\zeropoint,
- \c!width=\v!fit,
- \c!titledistance=.5\emwidth,
- \c!margin=\v!no,
- \c!titleleft=(,
- \c!titleright=),
- \c!display=\v!no,
- \c!titlecommand=,
- \c!expansion=\v!no,
- \c!way=\v!by\v!text,
- \c!prefix=\v!no,
- \c!prefixconnector=.,
- \c!text=\currentlabel,
- \c!number=\v!yes, % else description
- \c!start=0,
- \c!state=\v!start,
- \c!levels=3]
-
-\unexpanded\def\strc_define_commands_label#1#2#3% current level parent
- {\doifelsenothing{#3}
- {\normalexpanded{\defineconstruction[#1][\s!handler=\v!label,\c!level=#2]}%
- \setevalue{\??label#1:\s!parent}{\??label}}%
- {\normalexpanded{\defineconstruction[#1][#3][\s!handler=\v!label,\c!level=#2]}%
- \setevalue{\??label#1:\s!parent}{\??label#3}}%
- \setuevalue{\e!next #1}{\strc_labels_next }%
- \setuevalue{\c!reset#1}{\strc_labels_reset }%
- %setuevalue{\c!set #1}{\strc_labels_set }%
- \setuevalue {#1}{\strc_labels_command{#1}}}
-
-\appendtoks
- \ifx\currentlabelparent\empty
- % clone => parent | subclone => clone | subsubclone => subclone
- \let\currentlabelsub\empty
- \strc_define_commands_label
- {\currentlabelsub\currentlabel}%
- \plusone
- \empty
- \edef\p_levels{\labelparameter\c!levels}%
- \dostepwiserecurse\plustwo\p_levels\plusone
- {\strc_define_commands_label
- {\v!sub\currentlabelsub\currentlabel}%
- \recurselevel
- {\currentlabelsub\currentlabel}%
- \edef\currentlabelsub{\v!sub\currentlabelsub}}%
+% labels, we could share with enumerations and forget about the text; anyhow, figure
+% labels etc can use enumerations; we keep labels for compatibility reasons; we need
+% the slightly different namespace; we can still define structure counters directly
+% (multiple levels) and use an enumeration without following text
+
+% unfinished ... no longer okay
+
+\unexpanded\def\setuplabels
+ {\getparameters[\??db]}
+
+\unexpanded\def\definelabel
+ {\dotripleargumentwithset\dodefinelabel}
+
+\def\dodefinelabel[#1][#2][#3]% #2 or #3 assignment
+ {\doenumerationinit{#1}{1}\empty
+ \getparameters[\??dd#1][\c!command=,\c!state=\v!start,\c!location=,\c!text=#1]%
+ \ifsecondargument\doifassignmentelse{#2}\donetrue\donefalse\else\donetrue\fi
+ \ifdone
+ % an independent one
+ \getparameters[\??dd#1][\s!counter=#1,\s!parent=\??db,#2]%
+ \dodefinelabelcommands{#1}{\??db}%
+ \dodefineenumerationcounter{#1}%
\else
- % clone => parent | subclone => subparent | subsubclone => subsubparent
- \let\currentlabelsub\empty
- \edef\p_levels{\labelparameter\c!levels}%
- \dorecurse\p_levels
- {\strc_define_commands_label
- {\currentlabelsub\currentlabel}%
- \recurselevel
- {\currentlabelsub\currentlabelparent}%
- \edef\currentlabelsub{\v!sub\currentlabelsub}}%
- \fi
- \edef\p_counter{\labelparameter\s!counter}% can inherit from parent
- \ifx\p_counter\empty %
- \let\p_counter\currentlabel
- \fi
- \doifcounterelse\p_counter\donothing{\strc_labels_define_counter\p_counter}%
- \letlabelparameter\s!counter\p_counter
- \strc_labels_setup_counter\currentlabel
-\to \everydefinelabel
-
-\let\p_strc_constructions_title \empty
-\let\p_strc_constructions_number\empty
-
-\setvalue{\??constructioninitializer\v!label}%
- {\let\currentlabel \currentconstruction
- \let\constructionparameter \labelparameter
- \let\detokenizedconstructionparameter\detokenizedlabelparameter
- \let\letconstructionparameter \letlabelparameter
- \let\useconstructionstyleandcolor \uselabelstyleandcolor
- \let\setupcurrentconstruction \setupcurrentlabel
- % shared with enumerations
- \edef\p_strc_constructions_number{\constructionparameter\c!number}%
- \ifx\p_strc_constructions_number\v!yes
- \settrue\c_strc_constructions_number_state
- \iftrialtypesetting
- \strc_counters_save\currentconstructionnumber
- \fi
- \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel
- \else
- \setfalse\c_strc_constructions_number_state
- \fi
- \edef\p_strc_constructions_title{\constructionparameter\c!title}%
- \ifx\p_strc_constructions_title\v!yes
- \settrue\c_strc_constructions_title_state
- \else
- \setfalse\c_strc_constructions_title_state
+ \getparameters[\??dd#1][\s!counter=#1,\s!parent=\??dd#2,#3]%
+ \dodefinelabelcommands{#1}{\??dd#2}%
\fi}
-\setvalue{\??constructionfinalizer\v!label}%
- {\ifconditional\c_strc_constructions_number_state
- \iftrialtypesetting
- \strc_counters_restore\currentconstructionnumber
- \fi
- \fi}
-
-%D Interfaces:
-
-\let\strc_labels_command\strc_descriptions_command
-\let\strc_labels_next \strc_enumerations_next
-\let\strc_labels_reset \strc_enumerations_reset
-%let\strc_labels_set \strc_enumerations_set
-
-% similar to enumerations
-
-\newtoks\everysetuplabelcounter
-
-\let\v_strc_labels_counter_name\empty
-
-\def\strc_labels_setup_counter#1%
- {\edef\v_strc_labels_counter_name{#1}%
- \the\everysetuplabelcounter}
-
-\def\strc_labels_define_counter#1%
- {\definecounter[#1]%
- \strc_labels_setup_counter{#1}}
-
-\appendtoks
- \strc_counter_setup_using_parameter\v_strc_labels_counter_name\labelparameter
-\to \everysetuplabelcounter
-
-\appendtoks
- \strc_labels_setup_counter\currentlabel
-\to \everysetuplabel
-
-% no start stop here
-
-\expandafter\let\csname\??constructionmainhandler\v!label\expandafter\endcsname\csname\??constructionmainhandler\v!description\endcsname
-
-\unexpanded\setevalue{\??constructioncommandhandler\v!label}%
- {\csname\??constructionstarthandler\v!construction\endcsname
- \csname\??constructionstophandler \v!construction\endcsname
- \endgroup}
-
-\unexpanded\setvalue{\??constructiontexthandler\v!label}%
- {\begingroup
- \useconstructionstyleandcolor\c!headstyle\c!headcolor
- \strc_labels_text
- \endgroup}
-
-\let\strc_labels_text\strc_enumerations_text
-
-% inline variant
-
-\defineconstructionalternative
- [\v!intext]
- [\c!renderingsetup=\??constructionrenderings:\v!intext]
-
-\startsetups[\??constructionrenderings:\v!intext]
- \dontleavehmode\box\constructionheadbox
-\stopsetups
+\def\dodefinelabelcommands#1#2%
+ {\setuevalue {#1}{\noexpand\dolabelnumbercommand {#1}}%
+ \setuevalue{\c!reset #1}{\noexpand\doresetlabelnumber {#1}}%
+ %\setuevalue{\c!set #1}{\noexpand\dosetlabelnumber {#1}}% [#2] or {#2} ?
+ \setuevalue{\e!next #1}{\noexpand\donextlabelnumber {#1}}%
+ \setuevalue{\e!increment#1}{\noexpand\doincrementlabelnumber{#1}}%
+ \setuevalue{\c!current #1}{\noexpand\docurrentlabelnumber {#1}}}
+
+% this is just for downward compatibility, we might drop it
+
+\setvalue{\??db:\c!location:\v!inmargin}{\inmargin}
+\setvalue{\??db:\c!location:\v!inleft }{\inleft}
+\setvalue{\??db:\c!location:\v!inright }{\inright}
+\setvalue{\??db:\c!location:\v!margin }{\inmargin}
+
+\def\dolabelinit#1%
+ {\def\currentdescriptionmain{#1}%
+ \def\currentdescription {#1}%
+ \def\currentdescriptionlevel{1}}
+
+\def\docurrentlabelnumber #1{\dolabelinit{#1}\dosingleempty\dodocurrentlabelnumber}
+\def\donextlabelnumber #1{\dolabelinit{#1}\dosingleempty\dodonextlabelnumber}
+\def\dolabelnumbercommand #1{\dolabelinit{#1}\dosingleempty\dodolabelnumbercommand}
+
+\def\doresetlabelnumber #1{\dolabelinit{#1}\strc_counters_reset_sub \currentdescriptionnumber\currentdescriptionlevel}
+\def\dosetlabelnumber #1#2{\dolabelinit{#1}\strc_counters_set_sub \currentdescriptionnumber\currentdescriptionlevel{#2}}
+\def\doincrementlabelnumber #1{\dolabelinit{#1}\strc_counters_increment_sub\currentdescriptionnumber\currentdescriptionlevel}
+
+\def\dodocurrentlabelnumber[#1]%
+ {\dontleavehmode
+ \writestatus{!!!}{todo: reference of label}%
+ \dotextprefix{\descriptionparameter\c!text}%
+ \convertedsubcounter[\currentdescriptionnumber][\currentdescriptionlevel]}
+
+\def\dodonextlabelnumber[#1]% todo: ref
+ {\strc_counters_increment_sub\currentdescriptionnumber\currentdescriptionlevel
+ \dodocurrentlabelnumber[\currentdescriptionnumber]}
+
+\def\dodolabelnumbercommand[#1]% todo: ref
+ {\dontleavehmode
+ \descriptionparameter\c!before
+ \begingroup
+ \strc_counters_increment_sub\currentdescriptionnumber\currentdescriptionlevel
+ \usedescriptionstyleandcolor\c!headstyle\c!headcolor
+ \executeifdefined{\??db:\c!location:\descriptionparameter\c!location}{\descriptionparameter\c!command}{\dodocurrentlabelnumber[#1]}%
+ \endgroup
+ \descriptionparameter\c!after}
+
+\setuplabels
+ [\s!parent=\??dn]
\protect \endinput