summaryrefslogtreecommitdiff
path: root/tex/context/base/lang-lab.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/lang-lab.mkiv')
-rw-r--r--tex/context/base/lang-lab.mkiv281
1 files changed, 117 insertions, 164 deletions
diff --git a/tex/context/base/lang-lab.mkiv b/tex/context/base/lang-lab.mkiv
index 545a64455..1ef27c6c3 100644
--- a/tex/context/base/lang-lab.mkiv
+++ b/tex/context/base/lang-lab.mkiv
@@ -13,6 +13,9 @@
\unprotect
+%C The UPPERCASE variants are obsolete as we can now use \WORD
+%C in an non-interfering way.
+
%D In this module we deal with language dependant labels and
%D prefixes, like in {\em Figure~12} and {\em Chapter 1}. In
%D this file we set the default values. Users can easily
@@ -28,6 +31,9 @@
%D in front as well as after a part number. This is why the
%D current implementation of labels supports two labels too.
+\ifdefined\simplifiedcommands \else \newtoks\simplifiedcommands \fi
+\ifdefined\Word \else \let\Word\relax \fi
+
%D \macros
%D {setupheadtext, setuplabeltext}
%D
@@ -38,19 +44,117 @@
%D \showsetup{setuplabeltext}
%D
%D A regular \CONTEXT\ stores some 1500 labels at most.
+%D
+%D These commands accept all kind of inputs:
+%D
+%D \starttyping
+%D \setuplabeltext [language] [labellabel=text]
+%D \setuplabeltext [language] [labellabel=text,labellabel=text,...]
+%D \setuplabeltext [labellabel=text]
+%D \setuplabeltext [labellabel=text,labellabel=text,...]
+%D \stoptyping
+%D
+%D The last two cases concern the current language.
+
+\def\definelabelclass
+ {\dodoubleempty\dodefinelabelclass}
+
+\def\dodefinelabelclass[#1][#2]%
+ {\normalexpanded
+ {\noexpand\dododefinelabelclass
+ {#1}%
+ {\ifsecondargument#2\else\zerocount\fi}%
+ \expandafter\noexpand\csname dogetupsome#1text\endcsname
+ \expandafter\noexpand\csname #1language\endcsname
+ \expandafter\noexpand\csname dodogetupsome#1text\endcsname
+ \expandafter\noexpand\csname left#1text\endcsname
+ \expandafter\noexpand\csname right#1text\endcsname
+ \expandafter\noexpand\csname #1texts\endcsname
+ \expandafter\noexpand\csname #1text\endcsname}}
+
+\def\dododefinelabelclass#1#2#3#4#5#6#7#8#9%
+ {\unexpanded\def#3{#5#4}%
+ \def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}%
+ \setuvalue{setup#1text}{\protecttextprefixes#2\def\currenttextprefixclass{#1}\dodoubleempty\dosetupsometextprefix}%
+ \setuvalue{preset#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dodoubleempty\dosetupsometextprefix}%
+ \ifnum#2=\plustwo
+ \unexpanded\def#5##1##2% ##1=language
+ {\ifcsname\??ml:#1:##1:##2\endcsname
+ \csname\??ml:#1:##1:##2\endcsname
+ \else\ifcsname\??la#4\s!default\endcsname
+ \expandafter#5\csname\??la#4\s!default\endcsname{##2}%
+ \else\ifcsname\??ml:#1:##2\endcsname
+ \csname\??ml:#1:##2\endcsname
+ \else\ifcsname\??ml:#1:\s!en:##2\endcsname
+ \csname\??ml:#1:\s!en:##2\endcsname
+ \else
+ #2%
+ \fi\fi\fi\fi}%
+ \let#6\gobbleoneargument
+ \let#7\gobbleoneargument
+ \let#8\gobbletwoarguments
+ \let#9#3%
+ \else
+ \unexpanded\def#5##1##2%
+ {\ifcsname\??ml:#1:##1:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??ml:#1:##1:##2\endcsname
+ \else\ifcsname\??la#4\s!default\endcsname
+ \expandafter#5\csname\??la#4\s!default\endcsname{##2}%
+ \else\ifcsname\??ml:#1:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??ml:#1:##2\endcsname
+ \else\ifcsname\??ml:#1:\s!en:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??ml:#1:\s!en:##2\endcsname
+ \else
+ \let\thetextprefix\dummytextprefix
+ \fi\fi\fi\fi}%
+ \unexpanded\def#6##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}%
+ \unexpanded\def#7##1{#3{##1}\expandafter\flushrightlabelclass\thetextprefix}%
+ \unexpanded\def#8##1{#3{##1}\expandafter\flushbothlabelclass \thetextprefix}% #2
+ \unexpanded\def#9##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}%
+ \fi
+ \appendtoks
+ \let#6\firstofoneargument % to be checked
+ \let#7\firstofoneargument % to be checked
+ \let#8\firstofoneargument % to be checked
+ \let#9\firstofoneargument % to be checked
+ \to \simplifiedcommands
+ }
+
+\let\flushleftlabelclass \firstoftwoarguments
+\let\flushrightlabelclass\secondoftwoarguments
+\def\flushbothlabelclass #1#2#3{#1#3#2}
+\def\dummytextprefix {\empty\empty}
+
+%D \macros
+%D {headtext,
+%D labeltext, leftlabeltext, rightlabeltext, labeltexts,
+%D LABELTEXT, LEFTLABELTEXT, RIGHTLABELTEXT, LABELTEXTS}
+%D
+%D Once defined, head and label texts can be called upon using:
+%D
+%D \showsetup{headtext}
+%D \showsetup{labeltext}
+%D
+%D The latter one has an upcased alternative \type{\LABELTEXT}.
+%D
+%D \macros
+%D {presetheadtext,presetlabeltext}
+%D
+%D These macros enable us to automatically define head and label
+%D texts without replacing predefined ones. They are internal macros.
-\let\handletextprefix\relax
+\definelabelclass [head] [0]
+\definelabelclass [label] [0]
+\definelabelclass [mathlabel] [0]
+\definelabelclass [taglabel] [2]
-\let\protecttextprefixes\zerocount
+\appendtoks \let\labellanguage\currentlanguage \to \everycurrentdate
+
+\newconstant\protecttextprefixes
\let\currenttextprefixtag \s!unknown
\let\currenttextprefixclass\s!unknown
-\unexpanded\def\setupheadtext {\let\protecttextprefixes\zerocount\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix}
-\unexpanded\def\setuplabeltext {\let\protecttextprefixes\zerocount\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix}
-\unexpanded\def\setupmathlabeltext{\let\protecttextprefixes\zerocount\let\currenttextprefixclass\??mm\dodoubleempty\dosetupsometextprefix}
-\unexpanded\def\setuptaglabeltext {\let\protecttextprefixes\plustwo \let\currenttextprefixclass\??me\dodoubleempty\dosetupsometextprefix}
-
\def\dosetupsometextprefix[#1][#2]%
{\ifsecondargument
\edef\currenttextprefixtag{\reallanguagetag{#1}}%
@@ -72,7 +176,7 @@
\expandafter\doassignsometextprefixyes
\or
% checking
- \ifcsname\currenttextprefixclass\currenttextprefixtag#1\endcsname
+ \ifcsname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname
\expandafter\expandafter\expandafter\doassignsometextprefixnop
\else
\expandafter\expandafter\expandafter\doassignsometextprefixyes
@@ -82,180 +186,29 @@
\expandafter\doassignsometextprefixdumb
\fi{#1}}
-\ifdefined\Word\else \let\Word\relax \fi
-
-% Checking saves some 8K in the compressed format and getting rid of the embedded
-% \handletextprefix was good for another 6K. In the end the new solution is not
-% even that inefficient. And the checking is done at format generation time anyway.
-
\def\doassignsometextprefixyes#1[#2,#3,#4]%
{\edef\!!stringa{#2}%
\edef\!!stringb{#3}%
\ifx\!!stringb\empty
\ifx\!!stringa\empty
- \expandafter\def\csname\currenttextprefixclass\currenttextprefixtag#1\endcsname{\empty\empty}%
+ \expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{\empty\empty}%
\else
- \expandafter\def\csname\currenttextprefixclass\currenttextprefixtag#1\endcsname{{#2}\empty}%
+ \expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}\empty}%
\fi
\else
- \expandafter\def\csname\currenttextprefixclass\currenttextprefixtag#1\endcsname{{#2}{#3}}%
+ \expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}{#3}}%
\fi}
\def\doassignsometextprefixnop#1[#2]%
{}
\def\doassignsometextprefixdumb#1[#2,#3]%
- {\expandafter\def\csname\currenttextprefixclass\currenttextprefixtag#1\endcsname{#2}}
-
-%D By changing the meaning of \type {\handletextprefix} we
-%D can filter the left and right labeltext as well as convert
-%D labels to uppercase.
-%D
-%D These commands accept all kind of inputs:
-%D
-%D \starttyping
-%D \setuplabeltext [language] [labellabel=text]
-%D \setuplabeltext [language] [labellabel=text,labellabel=text,...]
-%D \setuplabeltext [labellabel=text]
-%D \setuplabeltext [labellabel=text,labellabel=text,...]
-%D \stoptyping
-%D
-%D The last two cases concern the current language.
-
-%D \macros
-%D {headtext,
-%D labeltext, leftlabeltext, rightlabeltext, labeltexts,
-%D LABELTEXT, LEFTLABELTEXT, RIGHTLABELTEXT, LABELTEXTS}
-%D
-%D Once defined, head and label texts can be called upon using:
-%D
-%D \showsetup{headtext}
-%D \showsetup{labeltext}
-%D
-%D The latter one has an upcased alternative \type{\LABELTEXT}.
-
-\def\labellanguage {\reallanguagetag{\defaultlanguage\currentmainlanguage}}
-\def\headlanguage {\reallanguagetag{\defaultlanguage\currentmainlanguage}}
-\def\mathlabellanguage{\reallanguagetag{\defaultlanguage\currentmainlanguage}}
-\def\taglabellanguage {\reallanguagetag{\defaultlanguage\currentmainlanguage}}
-
-\appendtoks \let\labellanguage\currentlanguage \to \everycurrentdate
-
-\def\dummytextprefix{\empty\empty}
-
-\def\dogetupsomelabeltext {\dodogetupsomelabeltext \labellanguage } % second argument is textlabel
-\def\dogetupsomeheadtext {\dodogetupsomeheadtext \headlanguage } % second argument is headlabel
-\def\dogetupsomemathlabeltext{\dodogetupsomemathlabeltext\mathlabellanguage }
-\def\dogetupsometaglabeltext {\dodogetupsometaglabeltext \taglabellanguage }
-
-\def\dodogetupsomelabeltext#1#2%
- {\ifcsname\??ml#1#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??ml#1#2\endcsname
- \else\ifcsname\??la\labellanguage\s!default\endcsname
- \expandafter\dodogetupsomelabeltext\csname\??la\labellanguage\s!default\endcsname{#2}%
- \else\ifcsname\??ml#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??ml#2\endcsname
- \else\ifcsname\??ml\s!en#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??ml\s!en#2\endcsname
- \else
- \let\thetextprefix\dummytextprefix
- \fi\fi\fi\fi}
-
-\def\dodogetupsomeheadtext#1#2%
- {\ifcsname\??mh#1#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??mh#1#2\endcsname
- \else\ifcsname\??la\headlanguage\s!default\endcsname
- \expandafter\dodogetupsomeheadtext\csname\??la\headlanguage\s!default\endcsname{#2}%
- \else\ifcsname\??mh#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??mh#2\endcsname
- \else\ifcsname\??mh\s!en#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??mh\s!en#2\endcsname
- \else
- \let\thetextprefix\dummytextprefix
- \fi\fi\fi\fi}
-
-\def\dodogetupsomemathlabeltext#1#2%
- {\ifcsname\??mm#1#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??mm#1#2\endcsname
- \else\ifcsname\??la\mathlabellanguage\s!default\endcsname
- \expandafter\dodogetupsomemathlabeltext\csname\??la\mathlabellanguage\s!default\endcsname{#2}%
- \else\ifcsname\??mm#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??mm#2\endcsname
- \else\ifcsname\??mm\s!en#2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??mm\s!en#2\endcsname
- \else
- \let\thetextprefix\dummytextprefix
- \fi\fi\fi\fi}
-
-\def\dodogetupsometaglabeltext#1#2% special
- {\ifcsname\??me#1#2\endcsname
- \csname\??me#1#2\endcsname
- \else\ifcsname\??la\mathlabellanguage\s!default\endcsname
- \expandafter\dodogetupsomemathlabeltext\csname\??la\mathlabellanguage\s!default\endcsname{#2}%
- \else\ifcsname\??me#2\endcsname
- \csname\??me#2\endcsname
- \else\ifcsname\??me\s!en#2\endcsname
- \csname\??me\s!en#2\endcsname
- \else
- #2%
- \fi\fi\fi\fi}
-
-% The WORD variants are a bit inefficient when #1/#2 are empty but they are
-% seldom used (one can better set the style).
-
-\let\flushleftlabeltext \firstoftwoarguments
-\let\flushrightlabeltext \secondoftwoarguments
-\let\flushleftmathlabeltext \firstoftwoarguments
-\let\flushrightmathlabeltext\secondoftwoarguments
-
-\def\flushleftlabelWORD #1#2{\WORD{#1}}
-\def\flushrightlabelWORD #1#2{\WORD{#2}}
-\def\flushbothlabeltexts #1#2#3{#1#3#2}
-\def\flushbothlabelTEXTS #1#2#3{\WORD{#1}#3\WORD{#2}}
-
-\unexpanded\def\headtext #1{\dogetupsomeheadtext {#1}\expandafter\flushleftlabeltext \thetextprefix}
-\unexpanded\def\leftlabeltext #1{\dogetupsomelabeltext {#1}\expandafter\flushleftlabeltext \thetextprefix}
-\unexpanded\def\rightlabeltext #1{\dogetupsomelabeltext {#1}\expandafter\flushrightmathlabeltext\thetextprefix}
-\unexpanded\def\LEFTLABELTEXT #1{\dogetupsomelabeltext {#1}\expandafter\flushleftlabelWORD \thetextprefix}
-\unexpanded\def\RIGHTLABELTEXT #1{\dogetupsomelabeltext {#1}\expandafter\flushrightlabelWORD \thetextprefix}
-\unexpanded\def\labeltexts #1{\dogetupsomelabeltext {#1}\expandafter\flushbothlabeltexts \thetextprefix} % #2
-\unexpanded\def\LABELTEXTS #1{\dogetupsomelabeltext {#1}\expandafter\flushbothlabelTEXTS \thetextprefix} % #2
-\unexpanded\def\leftmathlabeltext #1{\dogetupsomemathlabeltext{#1}\expandafter\flushleftmathlabeltext \thetextprefix}
-\unexpanded\def\rightmathlabeltext#1{\dogetupsomemathlabeltext{#1}\expandafter\flushrightlabeltext \thetextprefix}
-
-\let\labeltext \leftlabeltext
-\let\LABELTEXT \LEFTLABELTEXT
-\let\mathlabeltext\leftmathlabeltext
-
-\ifx\simplifiedcommands\undefined \newtoks\simplifiedcommands \fi
-
-\appendtoks
- \let \headtext \firstofoneargument
- \let \labeltext \firstofoneargument
- \let \leftlabeltext \firstofoneargument
- \let \rightlabeltext \firstofoneargument
- \let \HEADTEXT \firstofoneargument
- \let \LABELTEXT \firstofoneargument
- \let \LEFTLABELTEXT \firstofoneargument
- \let \RIGHTLABELTEXT \firstofoneargument
- \let \mathlabeltext \firstofoneargument
-\to \simplifiedcommands
-
-%D \macros
-%D {presetheadtext,presetlabeltext}
-%D
-%D The next two macros enable us to automatically define
-%D head and label texts without replacing predefined ones.
-%D These are internal macros.
-
-\def\presetheadtext {\let\protecttextprefixes\plusone\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix}
-\def\presetlabeltext {\let\protecttextprefixes\plusone\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix}
-\def\presetmathlabeltext{\let\protecttextprefixes\plusone\let\currenttextprefixclass\??mm\dodoubleempty\dosetupsometextprefix}
+ {\expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{#2}}
%D \macros
%D {translate}
%D
-%D Sometismes macros contain language specific words that are to
+%D Sometimes macros contain language specific words that are to
%D be typeset. Such macros can be made (more) language
%D independant by using:
%D