summaryrefslogtreecommitdiff
path: root/tex/context/base/lang-spe.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/lang-spe.mkiv')
-rw-r--r--tex/context/base/lang-spe.mkiv111
1 files changed, 111 insertions, 0 deletions
diff --git a/tex/context/base/lang-spe.mkiv b/tex/context/base/lang-spe.mkiv
new file mode 100644
index 000000000..6f32888e6
--- /dev/null
+++ b/tex/context/base/lang-spe.mkiv
@@ -0,0 +1,111 @@
+%D \module
+%D [ file=lang-spe,
+%D version=2002.05.07, % 1996.01.25,
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Specifics,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Language Macros / Specifics}
+
+%D In \MKIV\ we will get away from this feature. See \MKII\ file
+%D for comments. So, consider this a temporary feature.
+
+\unprotect
+
+%D \macros
+%D {everyresetlanguagespecifics,resetlanguagespecifics}
+%D
+%D Cleanup macros.
+
+\newevery \everyresetlanguagespecifics \relax
+
+\def\resetlanguagespecifics
+ {\ifcase\protectionlevel
+ \the\everyresetlanguagespecifics
+ \fi}
+
+\appendtoks
+ \resetlanguagespecifics
+\to \everycleanupfeatures
+
+%D \macros
+%D {startlanguagespecifics,enablelanguagespecifics}
+
+\def\startlanguagespecifics
+ {\bgroup
+ \catcode`\^^I=\@@ignore
+ \catcode`\^^M=\@@ignore
+ \catcode`\^^L=\@@ignore
+ \dodoubleempty\dostartlanguagespecifics} % get rid of spaces
+
+\long\def\dostartlanguagespecifics[#1][#2]#3\stoplanguagespecifics
+ {\egroup
+ \processcommalist[#1]{\dosetlanguagespecifics{#3}}}
+
+\long\def\dosetlanguagespecifics#1#2% specifics language
+ {\ifcsname\??la#2\??la\endcsname \else
+ \expandafter\newtoks\csname\??la#2\??la\endcsname
+ \fi
+ \csname\??la#2\??la\endcsname\@EA{\the\csname\??la#2\??la\endcsname#1}%
+ \bgroup
+ \setbox\scratchbox\hbox{\enablelanguagespecifics[#2]}%
+ \ifdim\wd\scratchbox>\zeropoint
+ \showmessage\m!linguals7{#2,\the\wd\scratchbox\space}\wait
+ \else
+ \showmessage\m!linguals8{#2}%
+ \fi
+ \egroup
+ \doif{#2}\currentmainlanguage{\enablelanguagespecifics[#2]}}
+
+\def\forgetlanguagespecifics[#1]%
+ {\ifcsname\??la#1\??la\endcsname
+ \csname\??la#1\??la\endcsname\emptytoks
+ \fi}
+
+% \def\enablelanguagespecifics[#1]% no default language fallback (yet)
+% {\ifcsname\??la#1\??la\endcsname
+% \the\csname\??la#1\??la\endcsname\relax
+% \fi}
+
+\def\enablelanguagespecifics[#1]%
+ {\edef\askedlanguagespecificslanguage{\defaultlanguage{#1}}%
+ \ifcsname\??la\askedlanguagespecificslanguage\??la\endcsname
+ \the\csname\??la\askedlanguagespecificslanguage\??la\endcsname
+ \fi}
+
+%D \macros
+%D {ordinaldaynumber, highordinalstr, ordinalstr}
+%D
+%D Efficient general ordinal number converters are sometimes
+%D difficult to implement. Fortunately dates never exceed the
+%D number~31.
+
+\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}%
+ \noexpand\firstofoneargument{\number#1}}}
+
+%D Language specific converters have definitions like:
+%D
+%D \starttyping
+%D \def\enordinaldaynumber#1{...}
+%D \stoptyping
+%D
+%D Examples can be found in the other \type {lang} modules.
+
+\appendtoks
+ \ifprocessingXML \else \resetlanguagespecifics \fi
+\to \everylanguage
+
+\protect \endinput