From 85b7bc695629926641c7cb752fd478adfdf374f3 Mon Sep 17 00:00:00 2001 From: Marius Date: Sun, 4 Jul 2010 15:32:09 +0300 Subject: stable 2010-05-24 13:10 --- tex/context/base/lang-lab.mkiv | 283 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 tex/context/base/lang-lab.mkiv (limited to 'tex/context/base/lang-lab.mkiv') diff --git a/tex/context/base/lang-lab.mkiv b/tex/context/base/lang-lab.mkiv new file mode 100644 index 000000000..42f2db8ff --- /dev/null +++ b/tex/context/base/lang-lab.mkiv @@ -0,0 +1,283 @@ +%D \module +%D [ file=lang-lab, +%D version=1997.08.27, +%D title=\CONTEXT\ Language Macros, +%D subtitle=Labels, +%D author=Hans Hagen / Tobias Burnus, +%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. + +\unprotect + +%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 +%D overrule these. +%D +%D This module is dedicated to the grandfather of Tobias +%D Burnus, who's extensive languages oriented library helped us +%D a lot in finding the right translations. All those labels +%D are collected in files that reflect their common ancestor. +%D +%D Not all languages can be satisfied with the labeling +%D mechanism as provided here. Chinese for instance put a label +%D in front as well as after a part number. This is why the +%D current implementation of labels supports two labels too. + +%D \macros +%D {setupheadtext, setuplabeltext} +%D +%D First we present some macros that deal with what we will +%D call head and label texts. Such texts are defines by: +%D +%D \showsetup{setupheadtext} +%D \showsetup{setuplabeltext} +%D +%D A regular \CONTEXT\ stores some 1500 labels at most. + +\let\handletextprefix\relax + +\newconditional\protecttextprefixes + +\let\currenttextprefixtag \s!unknown +\let\currenttextprefixclass\s!unknown + +\unexpanded\def\setupheadtext {\setfalse\protecttextprefixes\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix} +\unexpanded\def\setuplabeltext {\setfalse\protecttextprefixes\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix} +\unexpanded\def\setupmathlabeltext{\setfalse\protecttextprefixes\let\currenttextprefixclass\??mm\dodoubleempty\dosetupsometextprefix} + +\def\dosetupsometextprefix[#1][#2]% + {\ifsecondargument + \edef\currenttextprefixtag{\reallanguagetag{#1}}% + \processcommalist[#2]\dodosetupsometextprefix + \else + \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% + \processcommalist[#1]\dodosetupsometextprefix + \fi} + +\def\dodosetupsometextprefix#1% + {\dododosetupsometextprefix[#1]} + +\def\dododosetupsometextprefix[#1=#2]% + {\doassignsometextprefix{#1}[#2,,]} + +\def\doassignsometextprefix#1% + {\ifconditional\protecttextprefixes + \ifcsname\currenttextprefixclass\currenttextprefixtag#1\endcsname + \expandafter\expandafter\expandafter\doassignsometextprefixnop + \else + \expandafter\expandafter\expandafter\doassignsometextprefixyes + \fi + \else + \expandafter\doassignsometextprefixyes + \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}% + \else + \expandafter\def\csname\currenttextprefixclass\currenttextprefixtag#1\endcsname{{#2}\empty}% + \fi + \else + \expandafter\def\csname\currenttextprefixclass\currenttextprefixtag#1\endcsname{{#2}{#3}}% + \fi} + +\def\doassignsometextprefixnop#1[#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}} + +\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 } % second argument is headlabel + +\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} + +% 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 {\settrue\protecttextprefixes\let\currenttextprefixclass\??mh\dodoubleempty\dosetupsometextprefix} +\def\presetlabeltext {\settrue\protecttextprefixes\let\currenttextprefixclass\??ml\dodoubleempty\dosetupsometextprefix} +\def\presetmathlabeltext{\settrue\protecttextprefixes\let\currenttextprefixclass\??mm\dodoubleempty\dosetupsometextprefix} + +%D \macros +%D {translate} +%D +%D Sometismes macros contain language specific words that are to +%D be typeset. Such macros can be made (more) language +%D independant by using: +%D +%D \showsetup{translate} +%D +%D like for instance: +%D +%D \starttyping +%D \translate[en=something,nl=iets] +%D \stoptyping +%D +%D which expands to {\em something} or {\em iets}, depending on +%D de current language. + +\def\dotranslate[#1]% + {\getparameters[\??lg][#1]% + \ifcsname\??lg\currentlanguage\endcsname + \csname\??lg\currentlanguage\endcsname + \else\ifcsname\??lg\s!en\endcsname + \csname\??lg\s!en\endcsname + \else + [translation #1]% + \fi\fi} + +\unexpanded\def\translate + {\dosingleempty\dotranslate} + +%D When used without argument, the last defined values are +%D used. This enables repetitive use like +%D +%D \starttyping +%D \en \translate\ means \nl \translate +%D \stoptyping + +%D \macros +%D {assigntranslation} +%D +%D This macro is a system macro, and can be used to assign a +%D translation to a macro. Its form is: +%D +%D \starttyping +%D \assigntranslation[en=something,nl=iets]\to\command +%D \stoptyping + +\def\assigntranslation[#1]\to#2% + {\getparameters[\??lg][#1]% + \edef#2{\csname\??lg\currentlanguage\endcsname}} + +\protect \endinput -- cgit v1.2.3