summaryrefslogtreecommitdiff
path: root/tex/context/base/lang-lab.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/lang-lab.tex')
-rw-r--r--tex/context/base/lang-lab.tex186
1 files changed, 137 insertions, 49 deletions
diff --git a/tex/context/base/lang-lab.tex b/tex/context/base/lang-lab.tex
index 00efe5a56..794cdf4c3 100644
--- a/tex/context/base/lang-lab.tex
+++ b/tex/context/base/lang-lab.tex
@@ -42,32 +42,29 @@
%D In a few paragraphs we'll show quite a lot of examples
%D of its use.
-\def\setupheadtext%
- {\dosetupsometextprefix\c!titel}
+\let\handletextprefix\relax
-\def\setuplabeltext%
- {\dosetupsometextprefix\c!label}
+\def\setupheadtext {\dosetupsometextprefix[\c!titel]}
+\def\setuplabeltext{\dosetupsometextprefix[\c!label]}
-\let\handletextprefix=\relax
+\def\dosetupsometextprefix
+ {\let\dodocommando\xdosetupsometextprefix
+ \dotripleempty\dodosetupsometextprefix}
-\def\dodosetupsometextprefix#1%
- {\def\dododosetupsometextprefix[##1][##2]%
- {\ifsecondargument
- \def\docommando####1{\dodocommando[#1##1][####1]}%
- \processcommalist[##2]\docommando
- \else
- \def\docommando####1{\dodocommando[#1\currentmainlanguage][####1]}%
- \processcommalist[##1]\docommando
- \fi}%
- \dodoubleempty\dododosetupsometextprefix}
+\def\dodosetupsometextprefix[#1][#2][#3]%
+ {\ifthirdargument
+ \def\docommando##1{\dodocommando[#1#2][##1]}%
+ \processcommalist[#3]\docommando
+ \else
+ \def\docommando##1{\dodocommando[#1\currentmainlanguage][##1]}%
+ \processcommalist[#2]\docommando
+ \fi}
\def\doassignsometextprefix[#1][#2,#3,#4]%
{\setvalue{#1}{\handletextprefix{#2}{#3}}}
-\def\dosetupsometextprefix#1%
- {\def\dodocommando[##1][##2=##3]%
- {\doassignsometextprefix[##1##2][##3,,]}%
- \dodosetupsometextprefix{#1}}
+\def\xdosetupsometextprefix[#1][#2=#3]%
+ {\doassignsometextprefix[#1#2][#3,,]}
%D By changing the meaning of \type {\handletextprefix} we
%D can filter the left and right labeltext as well as convert
@@ -96,8 +93,11 @@
%D
%D The latter one has an upcased alternative \type{\LABELTEXT}.
-\def\labellanguage{\currentmainlanguage}
-\def\headlanguage {\currentmainlanguage}
+% \def\labellanguage{\currentmainlanguage}
+% \def\headlanguage {\currentmainlanguage}
+
+\def\labellanguage{\defaultlanguage\currentmainlanguage}
+\def\headlanguage {\defaultlanguage\currentmainlanguage}
\def\headtext%
{\let\handletextprefix\firstoftwoarguments
@@ -128,24 +128,116 @@
\def\labeltexts#1#2{\leftlabeltext{#1}#2\rightlabeltext{#1}}
\def\LABELTEXTS#1#2{\LEFTLABELTEXT{#1}#2\RIGHTLABELTEXT{#1}}
-\def\dodogetupsometextprefix#1#2#3#4%
- {\doifdefinedelse{#2#1#3}
- {\getvalue{#2#1#3}}
- {\doifdefinedelse{#1#3}
- {\getvalue{#2#3}}
- {#4}}}
-
\newif\iflabeltextdone % needs to be reset elsewhere
\newif\iftracinglabels % shows missing labels
+% \def\dodogetupsometextprefix#1#2#3#4%
+% {\doifdefinedelse{#2#1#3}
+% {\getvalue{#2#1#3}}
+% {\doifdefinedelse{#2#3} % was bug: #1#3
+% {\getvalue{#2#3}}
+% {#4}}}
+%
+% \unexpanded\def\dogetupsometextprefix#1#2#3%
+% {\global\labeltextdonetrue
+% \dodogetupsometextprefix{#1}{#2}{#3}
+% {\dodogetupsometextprefix{\defaultlanguage{#1}}{#2}{#3}
+% {\dodogetupsometextprefix{\s!en}{#2}{#3}
+% {\dodogetupsometextprefix{\s!nl}{#2}{#3}
+% {\iftracinglabels{\tttf[#2:~#3/#1]~}\fi}}}}}
+
+\beginETEX
+
+% \def\dodogetupsometextprefix#1#2#3#4%
+% {\ifcsname#2#1#3\endcsname
+% \csname#2#1#3\endcsname
+% \else\ifcsname#2#3\endcsname
+% \csname#2#3\endcsname
+% \else
+% #4%
+% \fi\fi}
+%
+% this can be reduced to:
+%
+% \def\dodogetupsometextprefix#1#2#3%
+% {\ifcsname#2#1#3\endcsname
+% \csname#2#1#3\endcsname
+% \@EA\gobbleoneargument
+% \else\ifcsname#2#3\endcsname
+% \csname#2#3\endcsname
+% \@EAEAEA\gobbleoneargument
+% \else
+% \@EAEAEA\firstofoneargument
+% \fi\fi}
+%
+% \endETEX
+%
+% \beginTEX
+%
+% \def\dodogetupsometextprefix#1#2#3%
+% {\@EA\ifx\csname#2#1#3\endcsname\relax
+% \@EA\ifx\csname#2#3\endcsname\relax
+% \@EAEAEA\firstofoneargument
+% \else
+% \csname#2#3\endcsname
+% \@EAEAEA\gobbleoneargument
+% \fi
+% \else
+% \csname#2#1#3\endcsname
+% \@EA\gobbleoneargument
+% \fi}
+%
+% \endTEX
+%
+% \unexpanded\def\dogetupsometextprefix#1#2#3%
+% {\global\labeltextdonetrue
+% \dodogetupsometextprefix{#1}{#2}{#3}
+% {\dodogetupsometextprefix{\defaultlanguage{#1}}{#2}{#3}
+% {\dodogetupsometextprefix\s!en{#2}{#3}
+% {\dodogetupsometextprefix\s!nl{#2}{#3}
+% {\reporttextprefixerror{#1}{#2}{#3}}}}}}
+
+\def\reporttextprefixerror#1#2#3%
+ {\iftracinglabels{\tttf[#2:~#3/#1]~}\fi}
+
+\beginETEX \ifcsname
+
\unexpanded\def\dogetupsometextprefix#1#2#3%
- {\global\labeltextdonetrue
- \dodogetupsometextprefix{#1}{#2}{#3}
- {\dodogetupsometextprefix{\defaultlanguage{#1}}{#2}{#3}
- {\dodogetupsometextprefix{\s!en}{#2}{#3}
- {\dodogetupsometextprefix{\s!nl}{#2}{#3}
- {\iftracinglabels{\tttf[#2:~#3/#1]~}\fi}}}}}
+ {\global\labeltextdonetrue
+ \ifcsname#2#1#3\endcsname
+ \csname#2#1#3\endcsname \else
+ \ifcsname#2#3\endcsname
+ \csname#2#3\endcsname \else
+ \ifcsname#2\defaultlanguage{#1}#3\endcsname
+ \csname#2\defaultlanguage{#1}#3\endcsname \else
+ \ifcsname#2\s!en#3\endcsname
+ \csname#2\s!en#3\endcsname \else
+ \ifcsname#2\s!nl#3\endcsname
+ \csname#2\s!nl#3\endcsname \else
+ \reporttextprefixerror{#1}{#2}{#3}%
+ \fi\fi\fi\fi\fi}
+
+\endETEX
+
+\beginTEX
+\unexpanded\def\dogetupsometextprefix#1#2#3%
+ {\global\labeltextdonetrue
+ \@EA\ifx\csname#2#1#3\endcsname\relax
+ \@EA\ifx\csname#2#3\endcsname\relax
+ \@EA\ifx\csname#2\defaultlanguage{#1}#3\endcsname\relax
+ \@EA\ifx\csname#2\s!en#3\endcsname\relax
+ \@EA\ifx\csname#2\s!nl#3\endcsname\relax
+ \reporttextprefixerror{#1}{#2}{#3}%
+ \else\csname#2\s!nl#3\endcsname
+ \fi\else\csname#2\s!en#3\endcsname
+ \fi\else\csname#2\defaultlanguage{#1}#3\endcsname
+ \fi\else\csname#2#3\endcsname
+ \fi\else\csname#2#1#3\endcsname
+ \fi}
+
+\endTEX
+
\ifx\simplifiedcommands\undefined \newtoks\simplifiedcommands \fi
\appendtoks
@@ -166,17 +258,15 @@
%D head and label texts without replacing predefined ones.
%D These are internal macros.
-\def\dopresetsometextprefix#1%
- {\def\dodocommando[##1][##2=##3]%
- {\doifundefined{##1##2}
- {\doassignsometextprefix[##1##2][##3,,]}}%
- \dodosetupsometextprefix{#1}}
+\def\xdopresetsometextprefix[#1][#2=#3]%
+ {\ifundefined{#1#2}\doassignsometextprefix[#1#2][#3,,]\fi}
-\def\presetheadtext%
- {\dopresetsometextprefix\c!titel}
+\def\dopresetsometextprefix
+ {\let\dodocommando\xdopresetsometextprefix
+ \dotripleempty\dodosetupsometextprefix}
-\def\presetlabeltext%
- {\dopresetsometextprefix\c!label}
+\def\presetheadtext {\dopresetsometextprefix[\c!titel]}
+\def\presetlabeltext{\dopresetsometextprefix[\c!label]}
%D \macros
%D {translate}
@@ -196,7 +286,7 @@
%D which expands to {\em something} or {\em iets}, depending on
%D de current language.
-\def\dotranslate[#1]% don't group!
+\def\dotranslate[#1]% don't group! SLOW if really used: speed up
{\getparameters[\??lg][#1]%
\doifdefinedelse{\??lg\currentlanguage}%
{\getvalue{\??lg\currentlanguage}}
@@ -206,7 +296,7 @@
{\getvalue{\??lg\s!nl}}
{[translation #1]}}}}
-\unexpanded\def\translate%
+\unexpanded\def\translate
{\dosingleempty\dotranslate}
%D When used without argument, the last defined values are
@@ -228,8 +318,6 @@
\def\assigntranslation[#1]\to#2%
{\getparameters[\??lg][#1]%
- \edef#2{\getvalue{\??lg\currentlanguage}}}
-
-\protect
+ \edef#2{\csname\??lg\currentlanguage\endcsname}}
-\endinput
+\protect \endinput