summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/lang-ini.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:45:13 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:45:13 +0000
commit92a15e15b276458e10aa05016bf472e8c6dd3eb0 (patch)
treeaf0343097e5f497167cefa16ed45c03475b98c37 /Master/texmf-dist/tex/context/base/lang-ini.tex
parentdf014cf02a62504f6b3e7a4398fb1e093b84f114 (diff)
context
git-svn-id: svn://tug.org/texlive/trunk@608 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/lang-ini.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.tex923
1 files changed, 923 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.tex b/Master/texmf-dist/tex/context/base/lang-ini.tex
new file mode 100644
index 00000000000..e435c2420cf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-ini.tex
@@ -0,0 +1,923 @@
+%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 / 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.
+
+%D Todo : --language=pl,en,nl : nl incs number of language
+
+%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}
+
+\unprotect
+
+\startmessages dutch library: linguals
+ title: taal
+ 1: afbreekpatronen -- voor -- geladen (n=--,e=--,m=--)
+ 2: geen afbreekpatronen -- voor -- (n=--,e=--,m=--) (--,--)
+ 3: afbreekdefinities -- voor -- geladen (n=--,e=--,m=--)
+ 4: geen afbreekdefinities -- voor -- (n=--,e=--,m=--)
+ 5: afbreekpatronen voor -- niet geladen
+ 6: taal -- is niet gedefinieerd
+ 7: taal specifieke opties [--] introduceren een skip van --
+ 8: taal specifieke opties [--] naadloos toegevoegd
+ 9: taal -- is actief
+ 10: patronen --geladen
+\stopmessages
+
+\startmessages english library: linguals
+ title: language
+ 1: patterns -- for -- loaded (n=--,e=--,m=--)
+ 2: no patterns -- for -- (n=--,e=--,m=--) (--,--)
+ 3: hyphenations -- for -- loaded (n=--,e=--,m=--)
+ 4: no hyphenations -- for -- (n=--,e=--,m=--)
+ 5: patterns for -- not loaded
+ 6: language -- is undefined
+ 7: language specific options [--] introduce a -- skip
+ 8: language specific options [--] seamless appended
+ 9: language -- is active
+ 10: patterns --loaded
+\stopmessages
+
+\startmessages german library: linguals
+ title: Sprache
+ 1: Trennmuster -- fuer -- geladen (n=--,e=--,m=--)
+ 2: Keine Trennmuster -- fuer -- (n=--,e=--,m=--) (--,--)
+ 3: Trenndefinitionen -- fuer -- geladen (n=--,e=--,m=--)
+ 4: Keine Trenndefinitionen -- fuer -- (n=--,e=--,m=--)
+ 5: Trennmuster fuer -- nicht geladen
+ 6: Sprache -- ist undefiniert
+ 7: Sprachenspezifische Option [--] fuegt eine Luecke von -- ein
+ 8: Sprachenspezifische Option [--] nahtlos hinzugefuegt
+ 9: Sprache -- ist aktiv
+ 10: Trennmuster --geladen
+\stopmessages
+
+% TOM: 9 and 10
+
+\startmessages czech library: linguals
+ title: jazyky
+ 1: vzory -- pro -- nacteny (n=--,e=--,m=--)
+ 2: zadne vzory -- pro -- (n=--,e=--,m=--) (--,--)
+ 3: deleni slov -- pro -- nacteno (n=--,e=--,m=--)
+ 4: zadne deleni slov -- pro -- (n=--,e=--,m=--)
+ 5: vzory pro -- nenacteny
+ 6: jazyk -- neni definovan
+ 7: specificke volby jazyka [--] zavadeji -- (zavlecenou) mezeru
+ 8: specificke volby jazyka [--] bez mezer pripojeny
+ 9: language -- is active
+ 10: vzory --nacteny
+\stopmessages
+
+\startmessages italian library: linguals
+ title: lingua
+ 1: schemi -- per -- caricati (n=--,e=--,m=--)
+ 2: niente schemi -- per -- (n=--,e=--,m=--) (--,--)
+ 3: sillabazione -- per -- caricata (n=--,e=--,m=--)
+ 4: niente sillabazione -- per -- (n=--,e=--,m=--)
+ 5: schemi per -- non caricati
+ 6: lingua -- non definita
+ 7: opzioni specifiche per la lingua [--] introducono un salto --
+ 8: opzioni specifiche per la lingua [--] aggiunte trasparentemente
+ 9: lingua -- attiva
+ 10: schemi -- caricati
+\stopmessages
+
+\startmessages norwegian library: linguals
+ title: språk
+ 1: orddelingsmønster -- for -- er lest inn (n=--,e=--,m=--)
+ 2: ingen orddelingsmønster -- for -- (n=--,e=--,m=--) (--,--)
+ 3: orddelingsdefinisjon -- for -- er lest inn (n=--,e=--,m=--)
+ 4: ingen orddelingsdefinisjon -- for -- (n=--,e=--,m=--)
+ 5: orddelingsmønster for -- er ikke lest inn
+ 6: språk -- er udefinert
+ 7: språk spesifikk opsjon [--] introduserer et -- hopp
+ 8: språk spesifikk opsjon [--] problemfritt tilføyd
+ 9: språk -- er aktivt
+ 10: orddelingsmønster -- er lest inn
+\stopmessages
+
+\startmessages romanian library: linguals
+ title: limbi
+ 1: sablonul -- pentru -- s-a incarcat (n=--,e=--,m=--)
+ 2: nu exista sabloane -- pentru -- (n=--,e=--,m=--) (--,--)
+ 3: despartirea in silabe -- pentru -- s-a incarcat (n=--,e=--,m=--)
+ 4: nu exista despartire in silabe -- pentru -- (n=--,e=--,m=--)
+ 5: sabloanele pentru -- nu sunt incarcate
+ 6: limba -- nu este definita
+ 7: optiunile specifice ale limbii [--] introduc un spatiu --
+ 8: optiunile specifice ale limbii [--] adaugate
+ 9: limba -- este activa
+ 10: sabloanele -- incarcate
+\stopmessages
+
+%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}. Unfortunately the
+%D name of this command suits very well the name of the
+%D language switching command we are to define, so let's save
+%D this primitive under another name:
+
+\let\normallanguage\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 Let's start with setting the lowercase code of quotes, so
+%D that we get proper hyphenation in languages like Dutch,
+%D French and Czech.
+
+% elsewhere: \lccode`\'=`\'
+
+% \def\showlccodes
+% {\currentlanguage:\space
+% \dostepwiserecurse{0}{255}{1}
+% {\ifnum\lccode\recurselevel>0
+% \char\recurselevel:\the\lccode\recurselevel\relax\space
+% \fi}
+% \endgraf}
+
+% \de \hyphenatedword{Works''} \showlccodes
+% \nl \hyphenatedword{Works''} \showlccodes
+% \uk \hyphenatedword{Works''} \showlccodes
+
+%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.
+
+\let\currentlanguage \empty
+\let\currentmainlanguage\empty
+
+\def\setupcurrentlanguage[#1]{\def\currentlanguage{#1}}
+
+%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).
+
+\def\dodoinstalllanguage#1#2% #2 added
+ {\doifundefined{#1}{\setvalue{#1}{\complexlanguage[#2]}}%
+ \expanded{\noexpand\uppercase{\noexpand\edef\noexpand\ascii{#1}}}%
+ \doifundefined\ascii{\setvalue\ascii{\complexlanguage[#2]}}}
+
+%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.
+
+\let\preloadedpatterns\empty
+\let\preloadedpmessage\empty
+
+\def\doshowpatterns#1#2#3#4% language number encoding mapping
+ {#1->#3:#4->#2->\xxlanguageparameter{#1}\s!lefthyphenmin:\xxlanguageparameter{#1}\s!righthyphenmin\space}
+
+\def\preloadlanguages
+ {\doifsomething\preloadedpmessage{\showmessage\m!linguals{10}\preloadedpmessage}}
+
+\fetchruntimecommand \showpatterns {\f!languageprefix\s!run}
+
+\let\installedlanguages\empty
+
+\def\doiflanguageelse#1{\doifdefinedelse{\??la#1\c!state}}
+
+\def\doinstalllanguage[#1][#2]%
+ {%\ConvertConstantAfter\doifinstringelse{=}{#2}
+ \doifassignmentelse{#2}
+ {\doiflanguageelse{#1}
+ {\getparameters[\??la#1][#2]}
+ {\setvalue{\l!prefix!#1}{#1}%
+ \addtocommalist{#1}\installedlanguages
+ \dodoinstalllanguage{#1}{#1}%
+ \getparameters
+ [\??la#1]
+ [\c!state=\v!stop,
+ \c!default=,
+ \s!patterns=,
+ \s!mapping=,
+ \s!encoding=,
+ #2]}%
+ \doifvalue{\??la#1\c!default}{#1}{\letvalue{\??la#1\c!default}\empty}%
+ % loop in deo: \doifvalue{\??la#1\s!patterns}{#1}{\letvalue{\??la#1\c!default}\empty}%
+ \doifelsevalue{\??la#1\c!state}\v!start
+ {\doifelsevaluenothing{\??la#1\s!patterns}
+ {\edef\languagesuffix{#1}}
+ {\edef\languagesuffix{\getvalue{\??la#1\s!patterns}}}%
+ \doifundefinedelse{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}
+ {\doloadpatterns{#1}\languagesuffix}
+ {\bgroup
+ \edef\loadedlanguage{\getvalue{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}}%
+ \showmessage\m!linguals1{\languagesuffix,#1,\loadedlanguage,*,*}%
+ \showmessage\m!linguals3{\languagesuffix,#1,\loadedlanguage,*,*}%
+ \egroup}}
+ {\showmessage\m!linguals5{#1}}}
+ {\setvalue{\l!prefix!#1}{#2}%
+ \dodoinstalllanguage{#1}{#2}}}
+
+% ^^ \language[#1] gave unwanted side effect of loading language specifics
+
+\def\installlanguage
+ {\dodoubleargument\doinstalllanguage}
+
+%D Handy
+
+\def\preloadallpatterns
+ {\gdef\preloadallpatterns##1{\installlanguage[##1][\c!state=\v!start]}%
+ \processcommacommand[\installedlanguages]\preloadallpatterns
+ \global\let\preloadallpatterns\relax}
+
+%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.
+
+\let \patternencoding \s!default
+\let \patternmapping \s!default
+
+\def\doloadpatterns#1#2%
+ {\expanded{\getcommacommandsize[\getvalue{\??la#2\s!encoding}]}%
+ \ifnum\commalistsize>0
+ %\message{[nofpatterns #2: \commalistsize/\getvalue{\??la#2\s!encoding}]}%
+ \dorecurse\commalistsize
+ {\expanded{\getfromcommacommand[\getvalue{\??la#2\s!encoding}][\recurselevel]}%
+ \let\patternencoding\commalistelement
+ \expanded{\getfromcommacommand[\getvalue{\??la#2\s!mapping }][\recurselevel]}%
+ \let\patternmapping \commalistelement
+ %\message{[patterns: #1/#2/\patternencoding/\patternmapping]}%
+ \dodoloadpatterns{#1}{#2}\patternencoding\patternmapping}%
+ \else
+ %\message{[patterns: #1/#2]}%
+ \dodoloadpatterns{#1}{#2}{}{}%
+ \fi}
+
+\def\dodoloadpatterns#1#2#3#4% beware, loaded language also incr
+ {\normallanguage\loadedlanguage % when not really needed
+ \bgroup
+ % \startencoding[#3]%
+ % \enablemapping[#4]% hm, does a sync patterns
+ % \doifnothing\currentencoding{\let\currentencoding\s!default}%
+ % \doifnothing\currentmapping {\let\currentmapping \s!default}%
+ % better:
+ \let\synchronizepatterns\relax % needed?
+ \let\enabledmapping \empty % needed?
+ % old (original) patterns
+ \doifelsenothing{#3}{\enableencoding[\s!default]}{\enableencoding[#3]}%
+ \doifelsenothing{#4}{\enablemapping [\s!default]}{\enablemapping [#4]}%
+ % new patterns
+ % \enableregime[utf]%
+ %
+ \ifundefined{\??la\??la:\currentencoding:\currentmapping:#2}%
+ \let\doshowpatterns\relax
+ \edef\alreadyloadedlanguage
+ {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}\empty}%
+ \edef\alreadyloadedlanguage
+ {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\f!languageprefix#2.\f!patternsextension}\alreadyloadedlanguage}%
+ \ifx\alreadyloadedlanguage\empty
+ \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\loadedlanguage
+ \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back
+ \startpatternloading{\truefilename{\f!languageprefix#2.\f!patternsextension}}{#3}{#4}%
+ \readsysfile{\truefilename{\f!languageprefix#2.\f!patternsextension}}
+ {\setxvalue{\??la#1\s!patterns}{#2}%
+ \setxvalue{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}{\number\loadedlanguage}%
+ \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{\number\normallanguage}{\currentencoding}{\currentmapping}}%
+ \doglobal\addtocommalist{#2}\preloadedpatterns
+ \showmessage\m!linguals1{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}
+ {\showmessage\m!linguals2{#2,#1,\loadedlanguage,\currentencoding,\currentmapping,\f!languageprefix#2.\f!patternsextension,\truefilename{\f!languageprefix#2.\f!patternsextension}}}%
+ \stoppatternloading
+ \startpatternloading{\truefilename{\f!languageprefix#2.\f!hyphensextension}}{#3}{#4}%
+ \readsysfile{\truefilename{\f!languageprefix#2.\f!hyphensextension}}
+ {\showmessage\m!linguals3{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}
+ {\showmessage\m!linguals4{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}%
+ \stoppatternloading
+ \doglobal\increment\loadedlanguage
+ % \stopencoding
+ \else % optimization, introduced 2004.08.24, while sorting out changes in tl
+ \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\alreadyloadedlanguage
+ \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back
+ \setxvalue{\??la#1\s!patterns}{#2}%
+ \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{[\number\alreadyloadedlanguage]}{\currentencoding}{\currentmapping}}%
+ \doglobal\addtocommalist{#2}\preloadedpatterns
+ \showmessage\m!linguals1{#2,#1,[\alreadyloadedlanguage],\currentencoding,\currentmapping}%
+ \fi
+ \fi
+ \egroup}
+
+\def\doifpatternselse#1%
+ {\expanded{\doifinsetelse{#1}{\preloadedpatterns}}}
+
+%D Since we can only load patterns in ini\TeX, we nil the
+%D loading before dumping (which saves a bit of memory, but
+%D strangely enough not in the format).
+
+\appendtoks
+ \gdef\doloadpatterns{\doglobal\increment\loadedlanguage\gobbletwoarguments}%
+ \globallet\dodoloadpatterns\gobblefourarguments
+\to \everydump
+
+%D \macros
+%D {setuplanguage}
+%D
+%D Quick and dirty, but useful:
+%D
+%D \showsetup{setuplanguage}
+
+% \def\setuplanguage
+% {\dodoubleargument\dosetuplanguage}
+
+% \def\dosetuplanguage[#1][#2]%
+% {\getparameters[\??la#1][#2]%
+% \doif{#1}\currentlanguage\docomplexlanguage}
+
+\unprotected \def\setuplanguage
+ {\dodoubleempty\dosetuplanguage}
+
+\def\dosetuplanguage[#1][#2]% handy patch for testing
+ {\ifsecondargument
+ \getparameters[\??la#1][#2]%
+ \doif{#1}\currentlanguage\docomplexlanguage
+ \else
+ \getparameters[\??la\currentlanguage][#1]%
+ \docomplexlanguage
+ \fi}
+
+\setuplanguage
+ [\s!default]
+ [\s!lefthyphenmin=2,
+ \s!righthyphenmin=2,
+ \c!spacing=\v!packed,
+ \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]
+
+% rather new, split and per language
+
+\setuplanguage
+ [\s!default]
+ [\c!compoundhyphen=\compoundhyphen,
+ \c!leftcompoundhyphen=\compoundhyphen,
+ \c!rightcompoundhyphen=]
+
+%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).
+
+% new, encoding specific patterns
+
+\ifx\synchronizepatterns\undefined \let\synchronizepatterns\relax \fi
+
+\beginTEX
+
+\def\dosetnormallanguage#1#2%
+ {\@EA\ifx\csname\??la\??la#1#2\endcsname\relax
+ \@EA\firstofoneargument
+ \else\@EA\ifx\csname\??la\??la#1#2\endcsname\empty
+ \@EAEAEA\firstofoneargument
+ \else
+ \donetrue
+ \@EA\xdef\csname\??la\currentlanguage\s!patterns\endcsname{#2}%
+ \normallanguage\csname\??la\??la#1#2\endcsname\relax % \relax is needed for lookahead problems
+ \@EAEAEA\gobbleoneargument
+ \fi\fi}
+
+\endTEX
+
+\beginETEX
+
+\def\dosetnormallanguage#1#2%
+ {\ifcsname\??la\??la#1#2\endcsname
+ \edef\thenormallanguage{\csname\??la\??la#1#2\endcsname}%
+ \ifx\thenormallanguage\empty
+ \@EAEAEA\firstofoneargument
+ \else
+ \donetrue
+ \@EA\xdef\csname\??la\currentlanguage\s!patterns\endcsname{#2}%
+ \normallanguage\thenormallanguage\relax % \relax is needed for lookahead problems
+ \@EAEAEA\gobbleoneargument
+ \fi
+ \else
+ \@EA\firstofoneargument
+ \fi}
+
+\endETEX
+
+\newevery \everylanguage \relax
+\newevery \everyresetlanguagespecifics \relax
+
+\def\disablelanguagespecifics
+ {\ignorecompoundcharacter}
+
+% \def\setnormallanguage#1%
+% {\dosetnormallanguage{:\currentencoding:\currentmapping:}{#1}{%
+% \dosetnormallanguage{:\currentencoding:\s!default :}{#1}{%
+% \dosetnormallanguage{:\s!default :\currentmapping:}{#1}{%
+% \dosetnormallanguage{:\s!default :\s!default :}{#1}\empty}}}}
+%
+% assume #1 = \cs
+
+\def\setnormallanguage#1%
+ {\dosetnormallanguage{:\currentencoding:\currentmapping:}#1{%
+ \dosetnormallanguage{:\currentencoding:\s!default :}#1{%
+ \dosetnormallanguage{:\s!default :\currentmapping:}#1{%
+ \dosetnormallanguage{:\s!default :\s!default :}#1\empty}}}}
+
+\def\docomplexlanguage% assumes that \currentlanguage is set
+ {\edef\currentdefaultlanguage{\defaultlanguage\currentlanguage}%
+ % called quite often, so we use \csname
+ % \def\synchronizepatterns{\setnormallanguage
+ % {\csname\??la\currentlanguage\s!patterns\endcsname}}% called often
+ % of even better pre-expand in an ugly way:
+ \@EA\def\@EA\synchronizepatterns\@EA{\@EA\setnormallanguage
+ \csname\??la\currentlanguage\s!patterns\endcsname}%
+ \donefalse
+ \synchronizepatterns
+ \ifdone\else
+ \def\synchronizepatterns{\setnormallanguage\currentlanguage}%
+ \synchronizepatterns
+ \ifdone\else
+ \ifx\currentdefaultlanguage\empty\else
+ % \def\synchronizepatterns{\setnormallanguage
+ % {\csname\??la\currentdefaultlanguage\s!patterns\endcsname}}%
+ \@EA\def\@EA\synchronizepatterns\@EA{\@EA\setnormallanguage
+ \csname\??la\currentdefaultlanguage\s!patterns\endcsname}%
+ \synchronizepatterns
+ \ifdone\else
+ \setnormallanguage\currentdefaultlanguage
+ \synchronizepatterns
+ \fi
+ \fi
+ \fi
+ \fi
+ \the\everylanguage
+ \enablelanguagespecifics[\currentlanguage]%
+ % strange, what is this doing here, dangerous for {il2,ec}
+ % \edef\languagemapping{\csname\??la\currentlanguage\s!mapping\endcsname}%
+ % \ifx\languagemapping\empty\else
+ % \fastenablemapping\languagemapping
+ % \fi
+ \lefthyphenmin 0\languageparameter\s!lefthyphenmin
+ \righthyphenmin0\languageparameter\s!righthyphenmin
+ \relax
+ % will be definable and move to core-spa !
+ \doifelse{\languageparameter\c!spacing}\v!broad
+ \nonfrenchspacing\frenchspacing}
+
+\ifx\enablelanguagespecifics\undefined
+
+ \def\enablelanguagespecifics[#1]{}
+
+\fi
+
+\beginETEX
+
+\def\complexlanguage[#1]%
+ {\edef\askedlanguage{#1}%
+ \ifx\askedlanguage\empty \else
+ \ifcsname\l!prefix!\askedlanguage\endcsname
+ \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
+ \ifx\currentlanguage\askedlanguage \else
+ \let\currentlanguage\askedlanguage
+ \docomplexlanguage
+ \fi
+ \else
+ \showmessage\m!linguals6{#1}%
+ \fi
+ \fi}
+
+\endETEX
+
+\beginTEX
+
+\def\complexlanguage[#1]%
+ {\edef\askedlanguage{#1}%
+ \ifx\askedlanguage\empty \else
+ \@EA\ifx\csname\l!prefix!\askedlanguage\endcsname\relax
+ \showmessage\m!linguals6{#1}%
+ \else
+ \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
+ \ifx\currentlanguage\askedlanguage \else
+ \let\currentlanguage\askedlanguage
+ \docomplexlanguage
+ \fi
+ \fi
+ \fi}
+
+\endTEX
+
+\let\simplelanguage\normallanguage
+
+\definecomplexorsimple\language
+
+\beginETEX
+
+\def\mainlanguage[#1]%
+ {\edef\askedlanguage{#1}%
+ \ifx\askedlanguage\empty \else
+ \ifcsname\l!prefix!\askedlanguage\endcsname
+ \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
+ \ifx\currentmainlanguage\askedlanguage \else
+ \let\currentmainlanguage\askedlanguage
+ \let\currentlanguage\askedlanguage
+ \docomplexlanguage
+ \fi
+ \fi
+ \fi}
+
+\endETEX
+
+\beginTEX
+
+\def\mainlanguage[#1]%
+ {\edef\askedlanguage{#1}%
+ \ifx\askedlanguage\empty \else
+ \@EA\ifx\csname\l!prefix!\askedlanguage\endcsname\relax\else
+ \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
+ \ifx\currentmainlanguage\askedlanguage \else
+ \let\currentmainlanguage\askedlanguage
+ \let\currentlanguage\askedlanguage
+ \docomplexlanguage
+ \fi
+ \fi
+ \fi}
+
+\endTEX
+
+%D \macros
+%D {defaultlanguage,languagedefault}
+%D
+%D The macro \type {\defaultlanguage{id}} expands into the
+%D default language, when defined, while \type
+%D {\languagedefault{id}\c!parameter} returns the default's
+%D parameter.
+
+\def\defaultlanguage#1%
+ {\@EA\ifx\csname\??la#1\c!default\endcsname\empty
+ #1%
+ \else
+ \@EA\defaultlanguage\csname\??la#1\c!default\endcsname
+ \fi}
+
+\def\languagedefault#1#2%
+ {\csname\??la\defaultlanguage{#1}#2\endcsname}
+
+% \def\languageparameter#1%
+% {\csname\??la\defaultlanguage\currentlanguage#1\endcsname}
+
+\def\languageparameter
+ {\@EA\dolanguageparameter\@EA{\defaultlanguage\currentlanguage}}
+
+\def\xxlanguageparameter#1%
+ {\@EA\dolanguageparameter\@EA{\defaultlanguage{#1}}}
+
+\beginETEX
+
+ \def\dolanguageparameter#1#2%
+ {\csname\??la
+ \ifcsname\??la\currentlanguage#2\endcsname
+ \currentlanguage
+ \else\ifcsname\??la#1#2\endcsname
+ \@EA\ifx\csname\??la#1#2\endcsname\empty\s!default\else#1\fi
+ \else
+ \s!default
+ \fi\fi
+ #2\endcsname}
+
+\endETEX
+
+\beginTEX
+
+ \def\dolanguageparameter#1#2%
+ {\csname\??la
+ \@EA\ifx\csname\??la\currentlanguage#2\endcsname\relax
+ \@EA\ifx\csname\??la#1#2\endcsname\relax
+ \s!default
+ \else
+ \@EA\ifx\csname\??la#1#2\endcsname\empty\s!default\else#1\fi
+ \fi
+ \else
+ \currentlanguage
+ \fi
+ #2\endcsname}
+
+\endTEX
+
+% moved
+%
+% %D \macros
+% %D {leftguillemot,rightguillemot,leftsubguillemot,rightsubguillemot,
+% %D ...single...quote,...double...quote}
+% %D
+% %D We assign logical names to all kind of quote and sentence
+% %D boundary characters.
+% %D
+% %D When using Computer Modern Roman, the next definitions
+% %D looks a bit better than the default ligatures.
+% %D
+% %D \starttyping
+% %D \def\lowerleftsingleninequote {,}
+% %D \def\lowerleftdoubleninequote {,\kern-.1em,}
+% %D \def\upperleftsingleninequote {'}
+% %D \def\upperleftdoubleninequote {''\kern-.1em}
+% %D \def\upperleftsinglesixquote {`}
+% %D \def\upperleftdoublesixquote {`\kern-.1em`}
+% %D
+% %D \def\lowerrightsingleninequote {,}
+% %D \def\lowerrightdoubleninequote {,\kern-.1em,}
+% %D \def\upperrightsingleninequote {'}
+% %D \def\upperrightdoubleninequote {''}
+% %D \def\upperrightsinglesixquote {`}
+% %D \def\upperrightdoublesixquote {\kern-.125em``}
+% %D \stoptyping
+% %D
+% %D But in other fonts, these definitions can give problems, so
+% %D we just say:
+%
+% \def\lowerleftsingleninequote {,}
+% \def\lowerleftdoubleninequote {,,}
+% \def\upperleftsingleninequote {'}
+% \def\upperleftdoubleninequote {''}
+% \def\upperleftsinglesixquote {`}
+% \def\upperleftdoublesixquote {``}
+%
+% \def\lowerrightsingleninequote {,}
+% \def\lowerrightdoubleninequote {,,}
+% \def\upperrightsingleninequote {'}
+% \def\upperrightdoubleninequote {''}
+% \def\upperrightsinglesixquote {`}
+% \def\upperrightdoublesixquote {``}
+%
+% %D Yes I know, they are ugly:
+%
+% \def\leftfakeguillemot
+% {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle\ll$}}}
+%
+% \def\rightfakeguillemot
+% {\hbox{\raise.25ex\hbox{$\scriptscriptstyle\gg$}}}
+%
+% \def\leftsubfakeguillemot
+% {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle<$}}}
+%
+% \def\rightsubfakeguillemot
+% {\hbox{\raise.25ex\hbox{$\scriptscriptstyle>$}}}
+
+%D New (see nomarking and nolist):
+
+\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 \setbox0=\hbox to \hsize{\hss\bf#2 subsentence symbol and quotes\hss}
+%D \dp0=0pt
+%D \box0
+%D \vskip.5em
+%D \hrule
+%D \vskip.5em
+%D \let\normalbar=|
+%D \hbox to \hsize
+%D {\hfil\quotation{#3 #4}\hfil\quote{#2}\hfil
+%D \let|=\normalbar\strut|<||<|#3|>|#4|>|\hfil}
+%D \vskip.5em
+%D \hrule
+%D \egroup
+%D \stoplinecorrection
+%D \blank}
+%D
+%D \ShowLanguageValues [af] [afrikaans] afrikaanse ...
+%D \ShowLanguageValues [ca] [catalan] catalan ...
+%D \ShowLanguageValues [cz] [czech] tjechisch tex
+%D \ShowLanguageValues [cz] [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 [no] [norwegian] noorse ...
+%D \ShowLanguageValues [pl] [polish] poolse ...
+%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!no \NC norwegian \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!cz \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
+
+% \bgroup \normallanguage255 \patterns{} \egroup
+% \def\nopatterns{\normallanguage255 }
+
+\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.
+
+\let\normaldoublequote ="
+\let\normalforwardslash=/
+
+%D We default to english:
+
+\setupcurrentlanguage[\s!en]
+
+\appendtoks\mainlanguage[\currentlanguage]\to\everyjob
+
+\appendtoks\showmessage\m!linguals9\currentlanguage\to\everyjob
+
+\protect \endinput