diff options
Diffstat (limited to 'tex/context/base/mkiv/lang-ini.mkiv')
-rw-r--r-- | tex/context/base/mkiv/lang-ini.mkiv | 831 |
1 files changed, 831 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/lang-ini.mkiv b/tex/context/base/mkiv/lang-ini.mkiv new file mode 100644 index 000000000..8ff41b287 --- /dev/null +++ b/tex/context/base/mkiv/lang-ini.mkiv @@ -0,0 +1,831 @@ +%D \module +%D [ file=lang-ini, +%D version=1996.01.25, +%D title=\CONTEXT\ Language Macros, +%D subtitle=Initialization, +%D author=Hans Hagen, +%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. + +%D This module needs a further cleanup (real split between ii/iv). + +% \cldcontext{languages.numbers[tex.count.mainlanguagenumber]} + +%D This module implements the (for the moment still simple) +%D multi||language support of \CONTEXT, which should not be +%D confused with the multi||lingual interface. This support +%D will be extended when needed. + +\writestatus{loading}{ConTeXt Language Macros / Initialization} + +\registerctxluafile{lang-ini}{1.001} +\registerctxluafile{lang-def}{1.001} + +\unprotect + +% \def\testlanguage[#1]% +% {\start +% \language[#1] +% \number\normallanguage/\the\lefthyphenmin/\the\righthyphenmin: +% \input tufte +% \hyphenatedword{effetestenofditwerkt} +% \par +% \stop} +% +% \testlanguage[de] \testlanguage[de-de] \testlanguage[de-at] \testlanguage[de-ch] \page +% \testlanguage[en] \testlanguage[us] \testlanguage[en-us] \testlanguage[uk] \testlanguage[en-gb] \page + +\ifdefined\nonfrenchspacing\else \let\nonfrenchspacing\relax \fi +\ifdefined\frenchspacing \else \let\frenchspacing \relax \fi + +%D When loading hyphenation patterns, \TEX\ assign a number to +%D each loaded table, starting with~0. Switching to a specific +%D table is done by assigning the relevant number to the +%D predefined \COUNTER\ \type{\language}. + +%D We keep track of the last loaded patterns by means of a +%D pseudo \COUNTER. This just one of those situations in which +%D we don't want to spent a real one. Language zero has no +%D patterns, first of all because I like to start numbering +%D at one. It may come in handy for special purposes as well. + +\normallanguage\zerocount \def\loadedlanguage{1} + +%D \macros +%D {currentlanguage, setupcurrentlanguage} +%D +%D Instead of numbers,we are going to use symbolic names for +%D the languages. The current langage is saved in the macro +%D \type {\currentlanguage}. The setup macro is mainly used +%D for cosmetic purposes. +%D +%D \starttyping +%D \dorecurse{3} +%D {\language[nl] +%D \startmode[*en] english \stopmode +%D \startmode[*nl] dutch \stopmode +%D \language[en] +%D \startmode[*en] english \stopmode +%D \startmode[*nl] dutch \stopmode} +%D \stoptyping + +\let\currentlanguage \empty +\let\currentmainlanguage\empty + +%D \macros +%D {defaultlanguage,languageparameter,specificlanguageparameter} + +%D We don't use the commandhandler here (yet) because we have +%D a rather special fallback mechanism so quite some compatibility +%D testing is needed. + +\installcorenamespace{language} +\installcorenamespace{languagelinked} + +\def\currentusedlanguage{\currentlanguage} + +\def\defaultlanguage#1% + {\ifcsname\??language#1\s!default\endcsname + \expandafter\defaultlanguage\lastnamedcs + \else + #1% + \fi} + +% \def\languageparameter#1% +% {\ifcsname\??language\currentlanguage#1\endcsname +% \csname\??language\currentlanguage#1\endcsname +% \else\ifcsname\??language\currentlanguage\s!default\endcsname +% \expandafter\specificlanguageparameter\csname\??language\currentlanguage\s!default\endcsname{#1}% +% \else\ifcsname\??language\s!default#1\endcsname +% \csname\??language\s!default#1\endcsname +% \fi\fi\fi} +% +% \def\specificlanguageparameter#1#2% +% {\ifcsname\??language#1#2\endcsname +% \csname\??language#1#2\endcsname +% \else\ifcsname\??language#1\s!default\endcsname +% \expandafter\specificlanguageparameter\csname\??language#1\s!default\endcsname{#2}% +% \else\ifcsname\??language\s!default#2\endcsname +% \csname\??language\s!default#2\endcsname +% \fi\fi\fi} +% +% \def\mainlanguageparameter#1% +% {\ifcsname\??language\currentmainlanguage#1\endcsname +% \csname\??language\currentmainlanguage#1\endcsname +% \else\ifcsname\??language\currentmainlanguage\s!default\endcsname +% \expandafter\specificlanguageparameter\csname\??language\currentmainlanguage\s!default\endcsname{#1}% +% \else\ifcsname\??language\s!default#1\endcsname +% \csname\??language\s!default#1\endcsname +% \fi\fi\fi} + +\def\languageparameter#1% + {\ifcsname\??language\currentlanguage#1\endcsname + \lastnamedcs + \else\ifcsname\??language\currentlanguage\s!default\endcsname + \expandafter\specificlanguageparameter\lastnamedcs{#1}% + \else\ifcsname\??language\s!default#1\endcsname + \lastnamedcs + \fi\fi\fi} + +\def\specificlanguageparameter#1#2% + {\ifcsname\??language#1#2\endcsname + \lastnamedcs + \else\ifcsname\??language#1\s!default\endcsname + \expandafter\specificlanguageparameter\lastnamedcs{#2}% + \else\ifcsname\??language\s!default#2\endcsname + \lastnamedcs + \fi\fi\fi} + +\def\mainlanguageparameter#1% + {\ifcsname\??language\currentmainlanguage#1\endcsname + \lastnamedcs + \else\ifcsname\??language\currentmainlanguage\s!default\endcsname + \expandafter\specificlanguageparameter\lastnamedcs{#1}% + \else\ifcsname\??language\s!default#1\endcsname + \lastnamedcs + \fi\fi\fi} + +\let\usedlanguageparameter\languageparameter + +% \def\askedlanguageparameter#1% assumes \currentusedlanguage being set +% {\ifcsname\??language\currentusedlanguage#1\endcsname +% \csname\??language\currentusedlanguage#1\endcsname +% \else\ifcsname\??language\currentusedlanguage\s!default\endcsname +% \expandafter\specificlanguageparameter\csname\??language\currentusedlanguage\s!default\endcsname{#1}% +% \else\ifcsname\??language\s!default#1\endcsname +% \csname\??language\s!default#1\endcsname +% \fi\fi\fi} + +\def\askedlanguageparameter#1% assumes \currentusedlanguage being set + {\ifcsname\??language\currentusedlanguage#1\endcsname + \lastnamedcs + \else\ifcsname\??language\currentusedlanguage\s!default\endcsname + \expandafter\specificlanguageparameter\lastnamedcs{#1}% + \else\ifcsname\??language\s!default#1\endcsname + \lastnamedcs + \fi\fi\fi} + +\unexpanded\def\setlanguageparameter#1% + {\edef\currentusedlanguage{\reallanguagetag{#1\c!language}}% + %\let\setlanguageparameter\gobbleoneargument + \ifx\currentusedlanguage\empty + \let\currentusedlanguage \currentlanguage + \let\usedlanguageparameter\languageparameter + \else\ifx\currentusedlanguage\v!global + \let\currentusedlanguage \currentmainlanguage + \let\usedlanguageparameter\mainlanguageparameter + \else\ifx\currentusedlanguage\v!local + \let\currentusedlanguage \currentlanguage + \let\usedlanguageparameter\languageparameter + \else + \let\usedlanguageparameter\askedlanguageparameter + \fi\fi\fi} + +\unexpanded\def\setupcurrentlanguage[#1]% + {\setcurrentlanguage\currentmainlanguage{#1}} + +\unexpanded\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current) + {\edef\xaskedlanguage{#1}% otherwise clash with \askedlanguage + \ifx\xaskedlanguage\empty \else + \ifx\currentmainlanguage\empty\else\resetsystemmode{\systemmodeprefix\currentmainlanguage}\fi + \let\currentmainlanguage\xaskedlanguage + \setsystemmode{\systemmodeprefix\currentmainlanguage}% + \fi + \edef\xaskedlanguage{#2}% + \ifx\xaskedlanguage\empty \else + \ifx\currentlanguage\empty\else\resetsystemmode\currentlanguage\fi + \let\currentlanguage\xaskedlanguage + \setsystemmode\currentlanguage + \fi} + +%D The internal macros will be defined later. + +%D \macros +%D {installlanguage} +%D +%D Hyphenation patterns can only be loaded when the format file +%D is prepared. The next macro takes care of this loading. A +%D language is specified with +%D +%D \showsetup{installlanguage} +%D +%D When \type {state} equals \type {start}, both patterns +%D and additional hyphenation specifications are loaded. These +%D files are seached for on the system path and are to be +%D named: +%D +%D \starttyping +%D \f!languageprefix-identifier.\f!patternsextension +%D \f!languageprefix-identifier.\f!hyhensextension +%D \stoptyping +%D +%D The \type{spacing} variable specifies how the spaces after +%D punctuation has to be handled. English is by tradition more +%D tolerant to inter||sentence spacing than other languages. +%D +%D This macro also defines \type {\identifier} as a shortcut +%D switch to the language. Furthermore the command defined as +%D being language specific, are executed. With +%D \type {default} we can default to another language +%D (patterns) at format generation time. This default language +%D is overruled when the appropriate patterns are loaded (some +%D implementations support run time addition of patterns to a +%D preloaded format). + +%D \macros +%D {preloadlanguages} +%D +%D We first try to load the files defined as file synonym +%D for \type {lang-*.pat} and \type {lang-*.hyp}. After that we +%D fall back on those files. The macro \type {\preloadpatterns} +%D reports which patterns are loaded and what hyphenmin +%D values are set. + +\newtoks \everysetuplanguage + +\def\installedlanguages{\clf_installedlanguages} + +\unexpanded\def\doifelselanguage#1% + {\ifcsname\??language#1\c!state\endcsname + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\let\doiflanguageelse\doifelselanguage + +\def\reallanguagetag#1% + %{\ifcsname\??languagelinked#1\endcsname\csname\??languagelinked#1\endcsname\else#1\fi} + {\ifcsname\??languagelinked#1\endcsname\lastnamedcs\else#1\fi} + +% \language[#1] gave unwanted side effect of loading language specifics + +\unexpanded\def\installlanguage + {\dodoubleargument\lang_basics_install} + +\def\lang_basics_install[#1][#2]% + {\doifelseassignment{#2} + {\doifelselanguage{#1} + {\getparameters[\??language#1][#2]} + {\setvalue{\??languagelinked#1}{#1}% + \lang_basics_install_indeed{#1}{#1}% + \getparameters[\??language#1][\c!state=\v!start,#2]}% + \edef\currentsetuplanguage{#1}% + \clf_definelanguage{#1}{\specificlanguageparameter{#1}\s!default}% + \the\everysetuplanguage} + {\setvalue{\??languagelinked#1}{#2}% + \clf_setlanguagesynonym{#1}{#2}% + \lang_basics_install_indeed{#1}{#2}}} + +\def\lang_basics_install_indeed#1#2% + {\ifcsname#1\endcsname\else\setuvalue{#1}{\lang_basics_set_current[#2]}\fi} + +%D When the second argument is a language identifier, a +%D synonym is created. This feature is present because we +%D used dutch mnemonics in the dutch version, but nowadays +%D conform a standard. + +\unexpanded\def\doifelsepatterns#1% + {\begingroup % will change + \lang_basics_set_current[#1]% + \ifnum\normallanguage>\zerocount + \endgroup\expandafter\firstoftwoarguments + \else + \endgroup\expandafter\secondoftwoarguments + \fi} + +\let\doifpatternselse\doifelsepatterns + +%D \macros +%D {setuplanguage} +%D +%D Quick and dirty, but useful: +%D +%D \showsetup{setuplanguage} +%D +%D Beware, this command can only be used when a language is installed. + +\unexpanded\def\setuplanguage + {\dodoubleempty\lang_basics_setup} + +\ifdefined\lang_basics_synchronize \else + \let\lang_basics_synchronize\relax % be nice for setups till we have one +\fi + +\def\lang_basics_setup[#1][#2]% + {\ifsecondargument + \pushmacro\currentlanguage % can be default + \edef\currentsetuplanguage{\reallanguagetag{#1}}% + \getparameters[\??language\currentsetuplanguage][#2]% + \the\everysetuplanguage + \popmacro\currentlanguage + %\doif\currentsetuplanguage\currentlanguage we can have influenced inheritance (default) + \else + \let\currentsetuplanguage\currentlanguage + \getparameters[\??language\currentsetuplanguage][#1]% + \the\everysetuplanguage + \fi + \lang_basics_synchronize} + +\appendtoks + \clf_unloadlanguage{\currentsetuplanguage}% +\to \everysetuplanguage + +\setuplanguage + [\s!default] + [\s!patterns=, + \s!lefthyphenmin=2, + \s!righthyphenmin=2, + \s!lefthyphenchar=-1, + \s!righthyphenchar=45, + % used in compound i.e. interfaced with c! and can be anything so no numbers + \c!lefthyphen=, + \c!righthyphen=-, + \c!hyphen=-, + \c!spacing=\v!packed, + \c!compoundhyphen=\compoundhyphen, + \c!rightcompoundhyphen=\compoundhyphen, + \c!leftcompoundhyphen=, + \c!midsentence=---, + \c!leftsentence=---, + \c!rightsentence=---, + \c!leftsubsentence=---, + \c!rightsubsentence=---, + \c!leftquote=\upperleftsinglesixquote, + \c!rightquote=\upperrightsingleninequote, + \c!leftquotation=\upperleftdoublesixquote, + \c!rightquotation=\upperrightdoubleninequote, + \c!leftspeech=\languageparameter\c!leftquotation, + \c!middlespeech=, + \c!rightspeech=\languageparameter\c!rightquotation, + \c!limittext=\unknown, + \c!date={\v!year,\ ,\v!month,\ ,\v!day}, + \c!text=Ag, + \s!font=] % \v!auto : experimental ! + +% to be tested: +% +% \setuplanguage +% [\s!default] +% [\c!righthyphenchar="AD] + +%D The values \type {leftsentence} and \type +%D {rightsentence} can be (and are) used to implement +%D automatic subsentence boundary glyphs, like in {\fr +%D |<|french guillemots|>|} or {\de |<|german guillemots|>|} or +%D {\nl |<|dutch dashes|>|} like situations. Furthermore \type +%D {leftquotation} and \type {leftquote} come into view +%D \quotation {when we quote} or \quote {quote} something. + +%D \macros +%D {currentdatespecification} +%D +%D Just to make things easy we can ask for the current date +%D specification by saying: + +\def\currentdatespecification{\languageparameter\c!date} + +%D This command is not meant for users. + +%D Carefull reading of these macros shows that it's legal to +%D say +%D +%D \starttyping +%D \installlanguage [du] [de] +%D \stoptyping + +%D \macros +%D {language,mainlanguage} +%D +%D Switching to another language (actually another hyphenation +%D pattern) is done with: +%D +%D \starttyping +%D \language[identifier] +%D \stoptyping +%D +%D or with \type{\identifier}. Just to be compatible with +%D \PLAIN\ \TEX, we still support the original meaning, so +%D +%D \starttyping +%D \language=1 +%D \stoptyping +%D +%D is a valid operation, where the relation between number +%D and language depends on the order in installing languages. +%D +%D \showsetup{language} +%D \showsetup{mainlanguage} +%D +%D Both commands take a predefined language identifier as +%D argument. We can use \type{\mainlanguage[identifier]} for +%D setting the (indeed) main language. This is the language +%D used for translating labels like {\em figure} and {\em +%D table}. The main language defaults to the current language. +%D +%D We take care of local as well as standardized language +%D switching (fr and fa, de and du, but nl and nl). + +\newtoks \everylanguage + +% \def\lang_basics_synchronize% assumes that \currentlanguage is set % % % use different name as complex +% {\normallanguage\ctxcommand{languagenumber(% +% "\currentlanguage",% +% "\defaultlanguage\currentlanguage",% +% "\languageparameter\s!patterns"% +% )}\relax +% \the\everylanguage\relax} + +% (some 20%) faster but code jungle (the publication code can have excessive +% switching + +\installcorenamespace{languagenumbers} + +\appendtoks + % we need to reassign the number because new patterns can be defined later on + % so let's hope not that many \setups happen during a run + \global\expandafter\let\csname\??languagenumbers\currentlanguage\endcsname\undefined +\to \everysetuplanguage + +\def\lang_basics_synchronize_yes + {\zerocount % see below + \global\expandafter\chardef\csname\??languagenumbers\currentlanguage\endcsname + \clf_languagenumber + {\currentlanguage}% + {\defaultlanguage\currentlanguage}% + {\languageparameter\s!patterns}% + \relax + \normallanguage\csname\??languagenumbers\currentlanguage\endcsname} + +\let\lang_basics_synchronize_nop\zerocount % not loaded anyway + +\letvalue{\??languagenumbers}\lang_basics_synchronize_nop % initime + +\appendtoks + \letvalue{\??languagenumbers}\lang_basics_synchronize_yes % runtime +\to \everydump + +\def\lang_basics_synchronize% assumes that \currentlanguage is set % % % use different name as complex + {\normallanguage\csname\??languagenumbers + \ifcsname\??languagenumbers\currentlanguage\endcsname + \currentlanguage + \fi + \endcsname + \relax + \the\everylanguage + \relax} + +% experimental + +\newcount\hyphenstate + +% so far + +\newcount\hyphenminoffset + +\unexpanded\def\lesshyphens + {\advance\hyphenminoffset\plusone + \lang_basics_synchronize_min_max} + +\unexpanded\def\morehyphens + {\ifcase\hyphenminoffset \else + \advance\hyphenminoffset\minusone + \fi + \lang_basics_synchronize_min_max} + +% \unexpanded\def\nohyphens % % % % % not clever, we still hyphenate but supress application +% {\ifx\dohyphens\relax +% \unexpanded\edef\dohyphens +% {\hyphenpenalty \the\hyphenpenalty +% \exhyphenpenalty\the\exhyphenpenalty +% \relax}% +% \fi +% \hyphenpenalty \plustenthousand +% \exhyphenpenalty\plustenthousand} + +\unexpanded\def\nohyphens % nicer for url's + {\ifx\dohyphens\relax + \unexpanded\edef\dohyphens + {\hyphenminoffset\the\hyphenminoffset\relax + \lang_basics_synchronize_min_max}% + \fi + \hyphenminoffset\plusthousand + \lang_basics_synchronize_min_max} + +\let\dohyphens\relax + +\unexpanded\def\lang_basics_synchronize_min_max + {% these values are stored along with glyph nodes + \lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax + \righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax + \hyphenationmin\numexpr0\languageparameter\s!hyphenmin\relax + % these values are stored with the language (global!) + \prehyphenchar \languageparameter\s!righthyphenchar\relax + \posthyphenchar\languageparameter\s!lefthyphenchar \relax} + +\appendtoks + \lang_basics_synchronize_min_max +\to \everylanguage + +\unexpanded\def\unhyphenated + {\groupedcommand{\lefthyphenmin\maxdimen}\donothing} + +% \appendtoks +% \setups[\languageparameter\c!setups]% +% \to \everylanguage + +%D You can setup the 'default' language to reset settings. + +\appendtoks + \edef\currentlanguagesetups{\languageparameter\c!setups}% + \ifx\currentlanguagesetups\empty \else + \setups[\currentlanguagesetups]% + \fi +\to \everylanguage + +% this will move to core-spa ! + +\appendtoks + \doifelse{\languageparameter\c!spacing}\v!broad\nonfrenchspacing\frenchspacing +\to \everylanguage + +% \mainlanguage[nl] \setuplanguage[nl][lefthyphen=,righthyphen=?] +% +% \dorecurse{100}{dit is toch wel een heel\normalhyphendiscretionary lang\normalhyphendiscretionary woord \recurselevel\ } +% \dorecurse{100}{dit is toch wel een heellangwoord \recurselevel\ } + +% new experimental feature + +\unexpanded\def\setuplanguages + {\setuplanguage[\s!default]} + +% \setuplanguages[\s!font=\v!auto] +% \setuplanguage[\s!default][\s!font=\v!auto] +% \setuplanguage[nl][\s!font=\v!auto] + +\ifdefined\feature \else \let\feature\gobbleoneargument \fi + +\appendtoks + \edef\p_language_font{\languageparameter\s!font}% + \ifx\p_language_font\v!auto + \doaddfeature\currentlanguage + \fi +\to \everylanguage + +% The following may be a solution for the fact that one cannot +% change catcodes of characters like : and ; inside an environment. + +% we will also permit access by the other names + +%D Fast switcher + +% \def\lang_basics_switch_asked +% {\ifx\askedlanguage\empty \else +% \ifcsname\??languagelinked\askedlanguage\endcsname +% \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}% +% \ifx\currentlanguage\askedlanguage \else +% \setcurrentlanguage\currentmainlanguage\askedlanguage +% \lang_basics_synchronize +% \fi +% \fi +% \fi} + +\def\lang_basics_switch_asked + {\ifx\askedlanguage\empty \else + \ifcsname\??languagelinked\askedlanguage\endcsname + %\edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}% + \edef\askedlanguage{\lastnamedcs}% + \ifx\currentlanguage\askedlanguage \else + \setcurrentlanguage\currentmainlanguage\askedlanguage + \lang_basics_synchronize + \fi + \fi + \fi} + +\unexpanded\def\uselanguageparameter#1% + {\edef\askedlanguage{#1\c!language}% + \lang_basics_switch_asked} + +\unexpanded\def\lang_basics_set_current[#1]% + {\edef\askedlanguage{#1}% + \lang_basics_switch_asked} + +\unexpanded\def\language + {\doifelsenextoptionalcs\lang_basics_set_current\normallanguage} + +\let\setlanguage\language % we make these synonyms + +\let\patterns\gobbleoneargument + +\newcount\mainlanguagenumber + +% \unexpanded\def\mainlanguage[#1]% +% {\edef\askedlanguage{#1}% +% \ifx\askedlanguage\empty \else +% \ifcsname\??languagelinked\askedlanguage\endcsname +% \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}% +% \ifx\currentlanguage\askedlanguage +% \ifx\currentmainlanguage\askedlanguage \else +% \setcurrentlanguage\askedlanguage\askedlanguage +% \lang_basics_synchronize +% \fi +% \else +% \setcurrentlanguage\askedlanguage\askedlanguage +% \lang_basics_synchronize +% \fi +% \fi +% \fi +% \mainlanguagenumber\normallanguage} + +\unexpanded\def\mainlanguage[#1]% + {\edef\askedlanguage{#1}% + \ifx\askedlanguage\empty \else + \ifcsname\??languagelinked\askedlanguage\endcsname + %\edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}% + \edef\askedlanguage{\lastnamedcs}% + \ifx\currentlanguage\askedlanguage + \ifx\currentmainlanguage\askedlanguage \else + \setcurrentlanguage\askedlanguage\askedlanguage + \lang_basics_synchronize + \fi + \else + \setcurrentlanguage\askedlanguage\askedlanguage + \lang_basics_synchronize + \fi + \fi + \fi + \mainlanguagenumber\normallanguage} + +\appendtoks + \normallanguage\mainlanguagenumber +\to \everybeforepagebody + +%D Used at all? + +\def\splitsequence#1#2% + {\doifelse{#1}\v!no{#2}{\doifelse{#1}\v!yes{\languageparameter\c!limittext}{#1}}} + +\def\splitsymbol#1% + {\splitsequence{#1}{\languageparameter\c!limittext}} + +%D Just like with subsentence boundary symbols, quotes +%D placement depends on the current language, therefore we show +%D the defaults here. +%D +%D \def\ShowLanguageValues [#1] [#2] #3 #4 +%D {\blank +%D \startlinecorrection +%D \vbox\bgroup +%D \language[#1] +%D \midaligned{\bf#2 subsentence symbol and quotes} +%D \framed[width=\hsize,frame=off,topframe=on,bottomframe=on,offset=.5ex] +%D {\hfil\quotation{#3 #4}\hfil\quote{#2}\hfil +%D \startsubsentence\startsubsentence#3\stopsubsentence#4\stopsubsentence\hfil} +%D \egroup +%D \stoplinecorrection +%D \blank} +%D +%D \ShowLanguageValues [af] [afrikaans] afrikaanse ... +%D \ShowLanguageValues [ca] [catalan] catalan ... +%D \ShowLanguageValues [cs] [czech] tjechisch tex +%D \ShowLanguageValues [cs] [slovak] slowaakse ... +%D \ShowLanguageValues [da] [danish] deense ... +%D \ShowLanguageValues [de] [german] duitse degelijkheid +%D \ShowLanguageValues [en] [english] engelse humor +%D \ShowLanguageValues [fi] [finnish] finse ... +%D \ShowLanguageValues [fr] [french] franse slag +%D \ShowLanguageValues [it] [italian] italiaanse ... +%D \ShowLanguageValues [la] [latin] latijnse missen +%D \ShowLanguageValues [nl] [dutch] nederlandse zuinigheid +%D \ShowLanguageValues [nb] [bokmal] noorse zalm +%D \ShowLanguageValues [nn] [nnynorsk] noorse zalm +%D \ShowLanguageValues [pl] [polish] poolse vlag +%D \ShowLanguageValues [pt] [portuguese] portugese ... +%D \ShowLanguageValues [es] [spanish] spaans benauwd +%D \ShowLanguageValues [sv] [swedish] zweedse ... +%D \ShowLanguageValues [tr] [turkish] turks fruit + +%D We support a lot of languages. These are specified and +%D loaded in separate files, according to their roots. Here +%D we only take care of (postponed) setting of the current +%D language. +%D +%D \unprotect +%D \placetable{The germanic languages (\type{lang-ger})} +%D \starttable[||||] +%D \HL +%D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR +%D \HL +%D \NC \s!nl \NC dutch \NC germanic \NC\FR +%D \NC \s!en \NC english \NC germanic \NC\MR +%D \NC \s!de \NC german \NC germanic \NC\MR +%D \NC \s!da \NC danish \NC germanic \NC\MR +%D \NC \s!sv \NC swedish \NC germanic \NC\MR +%D \NC \s!af \NC afrikaans \NC germanic \NC\MR +%D \NC \s!nb \NC bokmal \NC germanic \NC\LR +%D \NC \s!nn \NC nynorsk \NC germanic \NC\LR +%D \HL +%D \stoptable +%D \protect +%D +%D \unprotect +%D \placetable{The italic languages (\type{lang-ita})} +%D \starttable[||||] +%D \HL +%D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR +%D \HL +%D \NC \s!fr \NC french \NC italic \NC\FR +%D \NC \s!ca \NC catalan \NC italic \NC\MR +%D \NC \s!es \NC spanish \NC italic \NC\MR +%D \NC \s!it \NC italian \NC italic \NC\MR +%D \NC \s!la \NC latin \NC italic \NC\MR +%D \NC \s!pt \NC portuguese \NC italic \NC\LR +%D \HL +%D \stoptable +%D \protect +%D +%D \unprotect +%D \placetable{The slavic languages (\type{lang-sla})} +%D \starttable[||||] +%D \HL +%D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR +%D \HL +%D \NC \s!pl \NC polish \NC slavic \NC\FR +%D \NC \s!cs \NC czech \NC slavic \NC\MR +%D \NC \s!sk \NC slavik \NC slavic \NC\LR +%D \HL +%D \stoptable +%D \protect +%D \unprotect +%D +%D \placetable{The altaic languages (\type{lang-alt})} +%D \starttable[||||] +%D \HL +%D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR +%D \HL +%D \NC \s!tr \NC turkish \NC altaic \NC\SR +%D \HL +%D \stoptable +%D +%D \placetable{The uralic languages (\type{lang-ura})} +%D \starttable[||||] +%D \HL +%D \NC \bf mnemonic \NC \bf language \NC \bf group \NC\SR +%D \HL +%D \NC \s!fi \NC finnish \NC uralic \NC\SR +%D \HL +%D \stoptable +%D \protect + +\unexpanded\def\nopatterns{\normallanguage\minusone} + +%D We default to the language belonging to the interface. This +%D is one of the few places outside the interface modules where +%D \type{\startinterface} is used. + +\setupcurrentlanguage[\s!en] + +\unexpanded\def\initializemainlanguage + {\mainlanguage[\currentlanguage]% + \showmessage\m!languages9\currentlanguage} + +%D New: + +\let\stopexceptions\relax + +\unexpanded\def\startexceptions + {\dosingleempty\lang_basics_start_exceptions} + +\def\lang_basics_start_exceptions[#1]#2\stopexceptions % multilingual or not? + {\begingroup + \edef\askedlanguage{\reallanguagetag{#1}}% + \ifx\askedlanguage\empty + \let\askedlanguage\currentlanguage + \fi + \clf_setlanguageexceptions{\askedlanguage}{#2}% + \endgroup} + +%D For the moment here: + +\uchyph 1 % also treat uppercase +\exhyphenchar 45 % to permit breaking at explicit hyphens + +%D New: + +\unexpanded\def\traceddiscretionary#1#2#3% + {\dontleavehmode + \discretionary{\darkred#1}{\darkgreen#2}{\darkblue#3}} + +\unexpanded\def\samplediscretionary + {\traceddiscretionary + {pre\clf_currentprehyphenchar}% + {\clf_currentposthyphenchar post}% + {replace}} + +% todo: make this configurable + +\protect \endinput |