diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/lang-lab.mkxl')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/lang-lab.mkxl | 377 |
1 files changed, 377 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/lang-lab.mkxl b/Master/texmf-dist/tex/context/base/mkxl/lang-lab.mkxl new file mode 100644 index 00000000000..369049ed162 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/lang-lab.mkxl @@ -0,0 +1,377 @@ +%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 ADE \& \CONTEXT\ Development Team}] +%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 / Labels} + +\registerctxluafile{lang-lab}{} +\registerctxluafile{lang-txt}{} + +\unprotect + +%D Left-overs: + +\ifdefined\sixperemspace \else + \permanent\def\sixperemspace{\normalUchar"2006} +\fi + +%D In this module we deal with language dependant labels and prefixes, like in {\em +%D Figure~12} and {\em Chapter 1}. In this file we set the default values. Users can +%D easily overrule these. +%D +%D This module is dedicated to the grandfather of Tobias Burnus, who's extensive +%D languages oriented library helped us a lot in finding the right translations. All +%D those labels are collected in files that reflect their common ancestor. +%D +%D Not all languages can be satisfied with the labeling mechanism as provided here. +%D Chinese for instance put a label in front as well as after a part number. This is +%D why the 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 call head and label +%D texts. Such texts are defines by: +%D +%D \showsetup{setupheadtext} +%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. + +\installcorenamespace{label} + +% \let\currentlabelcategory\empty + +\permanent\tolerant\protected\def\definelabelclass[#1]#*[#2]% + {\normalexpanded + {\lang_labels_define_class_indeed + {#1}% + {\ifchknum#2\or#2\else\zerocount\fi}% + \expandafter\noexpand\csname lang_labels_#1_text_1\endcsname + \expandafter\noexpand\csname #1language\endcsname + \expandafter\noexpand\csname lang_labels_#1_text_2\endcsname + \expandafter\noexpand\csname left#1text\endcsname + \expandafter\noexpand\csname right#1text\endcsname + \expandafter\noexpand\csname #1texts\endcsname + \expandafter\noexpand\csname #1text\endcsname}} + +% hm, not interfaced + +\mutable\let\thetextprefix\empty + +\mutable\let\currenttextprefixclass\s!unknown +\mutable\let\currenttextprefixname \empty +\mutable\let\currenttextprefixtag \s!unknown + +\protected\def\lang_labels_define_class_indeed#1#2#3#4#5#6#7#8#9% + {\permanent\instance\protected\defcsname setup#1text\endcsname{\protecttextprefixes#2\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% + \permanent\instance\protected\defcsname preset#1text\endcsname{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% + \permanent\instance\protected\defcsname copy#1text\endcsname{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_copy }% + \permanent\instance\protected\defcsname start#1text\endcsname{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_start[#1]}% + \permanent\instance \letcsname stop#1text\endcsname \relax + \permanent\instance\def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}% + \ifnum#2=\plustwo % used for math and tags + \instance\def#3{#5#4}% +% \instance\def#5##1##2% ##1=language +% {\ifcsname\??label\currentlabelcategory#1:##1:##2\endcsname +% \lastnamedcs +% \orelse\ifcsname\??label#1:##1:##2\endcsname +% \lastnamedcs +% \orelse\ifcsname\??language##1\s!default\endcsname +% \expandafter#5\lastnamedcs{##2}% +% \orelse\ifcsname\??label\currentlabelcategory#1:##2\endcsname +% \lastnamedcs +% \orelse\ifcsname\??label#1:##2\endcsname +% \lastnamedcs +% \orelse\ifcsname\??label\currentlabelcategory#1:\s!en:##2\endcsname +% \lastnamedcs +% \orelse\ifcsname\??label#1:\s!en:##2\endcsname +% \lastnamedcs +% \else +% ##2% +% \fi}% + \instance\def#5##1##2% ##1=language + {\ifcsname\??label#1:##1:##2\endcsname + \lastnamedcs + \orelse\ifcsname\??language##1\s!default\endcsname + \expandafter#5\lastnamedcs{##2}% + \orelse\ifcsname\??label#1:##2\endcsname + \lastnamedcs + \orelse\ifcsname\??label#1:\s!en:##2\endcsname + \lastnamedcs + \else + ##2% + \fi}% + \permanent\instance\let#6\gobbleoneargument + \permanent\instance\let#7\gobbleoneargument + \permanent\instance\let#8\gobbletwoarguments + \permanent\instance\let#9#3% + \else + \instance\protected\def#3{#5#4}% + \instance\protected\def#5##1##2% + {\ifcsname\??label#1:##1:##2\endcsname + \enforced\expandafter\let\expandafter\thetextprefix\lastnamedcs + \orelse\ifcsname\??language#4\s!default\endcsname + \expandafter#5\lastnamedcs{##2}% + \orelse\ifcsname\??label#1:##2\endcsname + \enforced\expandafter\let\expandafter\thetextprefix\lastnamedcs + \orelse\ifcsname\??label#1:\s!en:##2\endcsname + \enforced\expandafter\let\expandafter\thetextprefix\lastnamedcs + \else + \enforced\let\thetextprefix\dummytextprefix + \fi}% + \permanent \instance\protected\def#6##1{#3{##1}\expandafter\firstoftwoarguments \thetextprefix}% \flushleftlabelclass + \permanent\instance\protected\def#7##1{#3{##1}\expandafter\secondoftwoarguments \thetextprefix}% \flushrightlabelclass + \permanent\instance\protected\def#8##1{#3{##1}\expandafter\lang_labels_flush_both\thetextprefix}% \flushbothlabelclass #2 + \permanent\instance\protected\def#9##1{#3{##1}\expandafter\firstoftwoarguments \thetextprefix}% \flushleftlabelclass + \fi + \appendtoks + \enforced\permanent\instance\let#6\firstofoneargument % to be checked + \enforced\permanent\instance\let#7\firstofoneargument % to be checked + \enforced\permanent\instance\let#8\firstofoneargument % to be checked + \enforced\permanent\instance\let#9\firstofoneargument % to be checked + \to \everysimplifycommands} + +% why not lang_* ? + +% \let\flushleftlabelclass \firstoftwoarguments +% \let\flushrightlabelclass\secondoftwoarguments + +\permanent\def\lang_labels_flush_both#1#2#3{#1#3#2} + +\permanent\def\dummytextprefix{\empty\empty} + +%D \macros +%D {headtext, 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 \macros +%D {presetheadtext,presetlabeltext} +%D +%D These macros enable us to automatically define head and label texts without +%D replacing predefined ones. They are internal macros. + +\appendtoks \enforced\let\labellanguage\currentlanguage \to \everycurrentdate + +\newconstant\protecttextprefixes + +\tolerant\def\lang_labels_text_prefix_start[#1]#*[#2]#*[#3]% class language name + {\ifarguments\or\or + \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% + \edef\currenttextprefixname{#2}% + \else + \edef\currenttextprefixtag{\reallanguagetag{#2}}% + \edef\currenttextprefixname{#3}% + \fi + \grabuntil{stop#1text}\lang_labels_text_prefix_start_indeed} + +\def\lang_labels_text_prefix_start_indeed#1% text (not special checking done here yet, only for long texts anyway) + {\edefcsname\??label\currenttextprefixclass:\currenttextprefixtag:\currenttextprefixname\endcsname{{\clf_strip{#1}}\empty}} + +\tolerant\def\lang_labels_text_prefix_setup[#1]#*[#2]% + {\ifarguments\or + \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% + \processcommalist[#1]\lang_labels_text_prefix_setup_indeed + \else + \edef\currenttextprefixtag{\reallanguagetag{#1}}% + \processcommalist[#2]\lang_labels_text_prefix_setup_indeed + \fi} + +\def\lang_labels_text_prefix_setup_indeed#1% + {\lang_labels_text_prefix_assign[#1]} + +\def\lang_labels_text_prefix_assign[#1=#2]% + {\lang_labels_text_prefix_assign_indeed{#1}[#2,,]} + +\def\lang_labels_text_prefix_assign_indeed#1% + {\ifcase\protecttextprefixes + % no checking + \expandafter\lang_labels_text_prefix_assign_yes + \or + % checking + \ifcsname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname + \expandafter\expandafter\expandafter\lang_labels_text_prefix_assign_nop + \else + \expandafter\expandafter\expandafter\lang_labels_text_prefix_assign_yes + \fi + \or + % simple assignment (a bit overkill but it fits in the whole) + \expandafter\lang_labels_text_prefix_assign_dumb + \fi{#1}} + +\let\m_lang_labels_left \empty +\let\m_lang_labels_right\empty + +\def\lang_labels_text_prefix_assign_yes#1[#2,#3,#4]% + {\def\m_lang_labels_left {#2}% no longer an edef ... else \Word undefined expansion issues + \def\m_lang_labels_right{#3}% no longer an edef ... else \Word undefined expansion issues + \defcsname\??label\currenttextprefixclass:\currenttextprefixtag:#1% + \ifempty\m_lang_labels_right + \ifempty\m_lang_labels_left + \endcsname{\empty\empty}% + \else + \endcsname{{#2}\empty}% + \fi + \else + \endcsname{{#2}{#3}}% + \fi} + +\def\lang_labels_text_prefix_assign_nop#1[#2]% + {} + +\def\lang_labels_text_prefix_assign_dumb#1[#2,#3]% + {\defcsname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{#2}} + +\permanent\protected\def\setlabeltextpair#1#2#3#4#5% a fast one for usage at the Lua end + {%\writestatus{!!!!}{#1:\reallanguagetag{#2}:#3}% + \defcsname\??label#1:\reallanguagetag{#2}:#3\endcsname{{#4}{#5}}} % class tag key left right + +\tolerant\def\lang_labels_text_prefix_copy[#1]#*[#2]% + {\ifarguments\or + \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% + \processcommalist[#1]\lang_labels_text_prefix_copy_indeed + \else + \edef\currenttextprefixtag{\reallanguagetag{#1}}% + \processcommalist[#2]\lang_labels_text_prefix_copy_indeed + \fi} + +\def\lang_labels_text_prefix_copy_indeed#1% + {\lang_labels_text_prefix_copy_pair[#1]} + +\def\lang_labels_text_prefix_copy_pair[#1=#2]% + {\lang_labels_text_prefix_copy_pair_indeed{#1}[#2,,]} + +% \def\lang_labels_text_prefix_copy_pair_indeed#1[#2,#3]% +% {\expandafter\let +% \csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\expandafter\endcsname +% \csname\??label\currenttextprefixclass:\currenttextprefixtag:#2\endcsname} +% +% this delays the aliasing so that we can switch mainlanguage in between + +\def\lang_labels_text_prefix_copy_pair_indeed#1[#2,#3]% + {\edefcsname\??label\currenttextprefixclass:#1\endcsname + {{\noexpand\csname\??label\currenttextprefixclass:\noexpand\reallanguagetag\noexpand\currentmainlanguage:#2\endcsname}{}}} + +\definelabelclass [head] [0] % titles +\definelabelclass [label] [0] % texts +\definelabelclass [mathlabel] [0] % functions +\definelabelclass [taglabel] [2] % tags + +\clf_definelabels{head}{titles}\s!true\relax +\clf_definelabels{label}{texts}\s!true\relax +\clf_definelabels{mathlabel}{functions}\s!false\relax +\clf_definelabels{taglabel}{tags}\s!false\relax + +%D \macros +%D {translate} +%D +%D Sometimes macros contain language specific words that are to be typeset. Such +%D macros can be made (more) language 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 de current language. + +\installcorenamespace{translation} + +\permanent\tolerant\protected\def\translate[#1]% + {\getparameters[\??translation][#1]% + \ifcsname\??translation\currentlanguage\endcsname + \lastnamedcs + \orelse\ifcsname\??translation\s!en\endcsname + \lastnamedcs + \else + [translation #1]% + \fi} + +%D When used without argument, the last defined values are used. This enables +%D 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 translation to a macro. +%D Its form is: +%D +%D \starttyping +%D \assigntranslation[en=something,nl=iets]\to\command +%D \stoptyping + +% nicer is \edef\command{\translated[...]} ... todo + +\permanent\protected\def\assigntranslation[#1]\to#2% bad, this \to + {\getparameters[\??translation][#1]% + \edef#2{\begincsname\??translation\currentlanguage\endcsname}} + +%D \macros +%D {commalistsentence} +%D +%D Redone in \LUA: +%D +%D \startbuffer +%D \commalistsentence[aap,noot,mies] +%D \commalistsentence[aap,noot] +%D \commalistsentence[aap] +%D \commalistsentence[a,b,c] +%D \commalistsentence[a,b,c][{ \& },{ and }] +%D \commalistsentence[a,b,c][+,-] +%D \stopbuffer +%D +%D \typebuffer +%D +%D \startlines +%D \getbuffer +%D \stoplines + +\permanent\tolerant\protected\def\commalistsentence[#1]#*[#2]% + {\clf_concatcommalist + text {#1}% + separators {#2}% + separator {\detokenize\expandafter{\normalexpanded{\labeltext{and-1}}}}% + last {\detokenize\expandafter{\normalexpanded{\labeltext{and-2}}}}% + \relax} + +\setuplabeltext [\s!nl] [and-1={{, }}, and-2={{ en }}] % 1, 2 en 3 +\setuplabeltext [\s!en] [and-1={{, }}, and-2={{, }}] % 1, 2, 3 +\setuplabeltext [\s!de] [and-1={{, }}, and-2={{ und }}] % 1, 2 und 3 +\setuplabeltext [\s!hr] [and-1={{, }}, and-2={{ i }}] % 1, 2 i 3 + +%D Goodie (handy at \LUA\ end): + +\permanent\protected\def\LABELTEXT#1{\WORD{\labeltext{#1}}} % only for simple cases! + +\protect \endinput |