summaryrefslogtreecommitdiff
path: root/tex/context/base/lang-spe.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/lang-spe.tex')
-rw-r--r--tex/context/base/lang-spe.tex129
1 files changed, 52 insertions, 77 deletions
diff --git a/tex/context/base/lang-spe.tex b/tex/context/base/lang-spe.tex
index ed6becb60..b88b1ad77 100644
--- a/tex/context/base/lang-spe.tex
+++ b/tex/context/base/lang-spe.tex
@@ -79,6 +79,9 @@
%D precautions that will prevent spurious spaces to creep into
%D the list.
+% We should use token registers, but alas, we run out of them and
+% \ETEX\ has a bug. Well, let's use a token register now (2006).
+
\def\startlanguagespecifics% % we use double to
{\bgroup
\catcode`\^^I=\@@ignore
@@ -97,40 +100,15 @@
\characterencoding-%
\fi}
-% \long\def\dostartlanguagespecifics[#1][#2]#3\stoplanguagespecifics%
-% {\egroup
-% \long\def\docommando##1%
-% {\doifdefinedelse{\??la\languageencoding##1\??la}
-% {\long\def\do####1####2####3%
-% {\setvalue{\??la\languageencoding####1\??la}{\do{####1}{####2####3}}}%
-% \getvalue{\??la\languageencoding##1\??la}{#3}}
-% {\setvalue{\??la\languageencoding##1\??la}{\do{##1}{#3}}}%
-% \bgroup
-% \setbox0\hbox{\enablelanguagespecifics[##1]}%
-% \ifdim\wd0>\zeropoint
-% \showmessage\m!linguals7{\currentencoding-##1,\the\wd0\space}\wait
-% \else
-% \showmessage\m!linguals8{\currentencoding-##1}%
-% \fi
-% \egroup
-% \doif{##1}{\currentmainlanguage}
-% {\enablelanguagespecifics[##1]}}%
-% \processcommalist[#1]\docommando}
-
-% This saves 3K in the fmt file.
-
-% This should be a token register, but alas, we run out of them and
-% \ETEX\ has a bug.
-
\long\def\dostartlanguagespecifics[#1][#2]#3\stoplanguagespecifics
{\egroup
\processcommalist[#1]{\dosetlanguagespecifics{#3}}}
% \long\def\dosetlanguagespecifics#1#2%
-% {\doifdefinedelse{\??la\languageencoding#2\??la}
-% {\long\def\do##1##2##3{\setvalue{\??la\languageencoding##1\??la}{\do{##1}{##2##3}}}%
-% \getvalue{\??la\languageencoding#2\??la}{#1}}
-% {\setvalue{\??la\languageencoding#2\??la}{\do{#2}{#1}}}%
+% {\ifundefined{\??la\languageencoding#2\??la}\forgetlanguagespecifics[#2]\fi
+% % the next line catches the case that specifics are enabled *before* they are defined
+% \expandafter\ifx\csname\??la\languageencoding#2\??la\endcsname\relax\forgetlanguagespecifics[#2]\fi
+% \appendvalue{\??la\languageencoding#2\??la}{#1}%
% \bgroup
% \setbox\scratchbox\hbox{\enablelanguagespecifics[#2]}%
% \ifdim\wd\scratchbox>\zeropoint
@@ -139,15 +117,15 @@
% \showmessage\m!linguals8{\currentencoding-#2}%
% \fi
% \egroup
-% \doif{#2}\currentmainlanguage
-% {\enablelanguagespecifics[#2]}}
+% \doif{#2}\currentmainlanguage{\enablelanguagespecifics[#2]}}
+
+\def\languagespectag#1{\??la\languageencoding#1\??la}
\long\def\dosetlanguagespecifics#1#2%
- {%ifundefined{\??la\languageencoding#2\??la}\letvalue{\??la\languageencoding#2\??la}\empty\fi
- \ifundefined{\??la\languageencoding#2\??la}\forgetlanguagespecifics[#2]\fi
- % the next line catches the case that specifics are enabled *before* they are defined
- \expandafter\ifx\csname\??la\languageencoding#2\??la\endcsname\relax\forgetlanguagespecifics[#2]\fi
- \appendvalue{\??la\languageencoding#2\??la}{#1}%
+ {\ifcsname\languagespectag{#2}\endcsname \else
+ \expandafter\newtoks\csname\languagespectag{#2}\endcsname
+ \fi
+ \csname\languagespectag{#2}\endcsname\@EA{\the\csname\languagespectag{#2}\endcsname#1}%
\bgroup
\setbox\scratchbox\hbox{\enablelanguagespecifics[#2]}%
\ifdim\wd\scratchbox>\zeropoint
@@ -158,58 +136,52 @@
\egroup
\doif{#2}\currentmainlanguage{\enablelanguagespecifics[#2]}}
+% \def\forgetlanguagespecifics[#1]%
+% {\letvalue{\??la\languageencoding#1\??la}\empty}
+
\def\forgetlanguagespecifics[#1]%
- {\letvalue{\??la\languageencoding#1\??la}\empty}
+ {\csname\languagespectag{#1}\endcsname\emptytoks}
%D Enabling them is rather straightforward. We only have to
%D define \type{\do} in such a way that \type{{ }} is removed
%D and the language key is gobbled.
-%\def\enablelanguagespecifics[#1]%
-% {\let\do\secondoftwoarguments
-% \doifvaluesomething{\??la#1\c!default}
-% {\getvalue{\??la\getvalue{\??la#1\c!default}\??la}%
-% \getvalue{\??la\languageencoding\??la}}%
-% \getvalue{\??la#1\??la}%
-% \getvalue{\??la\languageencoding#1\??la}}
-%
-% sped up since used often:
-
\def\enablelanguagespecifics[#1]%
- {%\let\do\secondoftwoarguments
- \csname
- \??la
+ {\the\executeifdefined{\??la
\@EA\ifx\csname\??la#1\c!default\endcsname\relax
\languageencoding
\else
\csname\??la#1\c!default\endcsname
\fi
- \??la
- \endcsname
- \csname\??la#1\??la\endcsname
- \csname\??la\languageencoding#1\??la\endcsname} % dup ?
+ \??la}\emptytoks
+ \the\executeifdefined{\??la#1\??la}\emptytoks
+ \the\executeifdefined{\??la\languageencoding#1\??la}\emptytoks} % dup ?
+
+% check:
+
+% \def\enablelanguagespecifics[#1]%
+% {\the\executeifdefined{\??la\executeifdefined{\??la#1\c!default}\languageencoding\??la}\emptytoks
+% \the\executeifdefined{\??la#1\??la}\emptytoks
+% \the\executeifdefined{\??la\languageencoding#1\??la}\emptytoks} % dup ?
%D \macros
%D {deactivatelanguagespecific}
%D
%D The next code makes it possible to disable the specifics.
-\def\deactivatelanguagespecific#1%
- {\ifundefined{l g s \string#1}%
- \letgvalueempty{l g s \string#1}% signal to prevent dup def
- \bgroup
- \catcode`#1=\@@active
- \uccode`~=`#1
- \uppercase{\doglobal\appendtoks\dodeactivatetoken{~}\to\everyresetlanguagespecifics}%
- \egroup
- \expanded{\doglobal\noexpand\appendtoks{#1}{\the\catcode`#1}}\to\everyresetlanguagespecifics
- \fi}
+% \def\deactivatelanguagespecific#1%
+% {\ifundefined{l g s \string#1}%
+% \letgvalueempty{l g s \string#1}% signal to prevent dup def
+% \bgroup
+% \catcode`#1=\@@active
+% \uccode`~=`#1
+% \uppercase{\doglobal\appendtoks\dodeactivatetoken{~}\to\everyresetlanguagespecifics}%
+% \egroup
+% \expanded{\doglobal\noexpand\appendtoks{#1}{\the\catcode`#1}}\to\everyresetlanguagespecifics
+% \fi}
-% \def\dodeactivatetoken#1#2#3%
-% {\def#1{#2}\catcode`#2=#3\relax}
-
-\def\dodeactivatetoken#1#2#3% test needed to avoid clash with \unprotect
- {\def#1{#2}\ifnum\catcode`#2=\@@active\catcode`#2=#3\relax\fi}
+% \def\dodeactivatetoken#1#2#3% test needed to avoid clash with \unprotect
+% {\def#1{#2}\ifnum\catcode`#2=\@@active\catcode`#2=#3\relax\fi}
%D We cannot hook this into the installer since language
%D specifics can be anything. So far, we have the following
@@ -221,12 +193,12 @@
\protect
-\deactivatelanguagespecific "
-\deactivatelanguagespecific /
-\deactivatelanguagespecific :
-\deactivatelanguagespecific ;
-\deactivatelanguagespecific ?
-\deactivatelanguagespecific !
+% \deactivatelanguagespecific "
+% \deactivatelanguagespecific /
+% \deactivatelanguagespecific :
+% \deactivatelanguagespecific ;
+% \deactivatelanguagespecific ?
+% \deactivatelanguagespecific !
\unprotect
@@ -243,8 +215,11 @@
%D difficult to implement. Fortunately dates never exceed the
%D number~31.
-\def\highordinalstr#1{\high{\nocap{#1}}}
-\def\ordinalstr #1{\nocap{#1}}
+\ifx\high \undefined \let\high \firstofoneargument \fi % todo
+\ifx\notsmallcapped\undefined \let\notsmallcapped\firstofoneargument \fi % todo
+
+\def\highordinalstr#1{\high{\notsmallcapped{#1}}}
+\def\ordinalstr #1{\notsmallcapped{#1}}
\def\ordinaldaynumber#1% \strippedcsname\ordinaldaynumber
{\expanded{\executeifdefined{\currentlanguage ordinaldaynumber}%