summaryrefslogtreecommitdiff
path: root/tex/context/base/lang-ini.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/lang-ini.tex')
-rw-r--r--tex/context/base/lang-ini.tex1016
1 files changed, 508 insertions, 508 deletions
diff --git a/tex/context/base/lang-ini.tex b/tex/context/base/lang-ini.tex
index eb81793c4..f42373a7b 100644
--- a/tex/context/base/lang-ini.tex
+++ b/tex/context/base/lang-ini.tex
@@ -1,508 +1,508 @@
-%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. Non||commercial use is
-%C granted.
-
-%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
- 2: geen afbreekpatronen voor --
- 3: afbreekdefinities voor -- geladen
- 4: geen afbreekdefinities voor --
- 5: afbreekpatronen voor -- niet geladen
- 6: taal -- is niet gedefinieerd
- 7: taal specifieke opties [--] introduceren een skip van --
- 8: taal specifieke opties [--] naadloos toegevoegd
-\stopmessages
-
-\startmessages english library: linguals
- title: language
- 1: patterns for -- loaded
- 2: no patterns for --
- 3: hyphenations for -- loaded
- 4: no hyphenations for --
- 5: patterns for -- not loaded
- 6: language -- is undefined
- 7: language specific options [--] introduce a -- skip
- 8: language specific options [--] seamless appended
-\stopmessages
-
-\startmessages german library: linguals
- title: Sprache
- 1: Trennmuster fuer -- geladen
- 2: Keine Trennmuster fuer --
- 3: Trenndefinitionen fuer -- geladen
- 4: Keine Trenndefinitionen fuer --
- 5: Trennmuster fuer -- nicht geladen
- 6: Sprache -- ist undefiniert
- 7: Sprachenspezifische Option [--] fuegt eine Luecke von -- ein
- 8: Sprachenspezifische Option [--] nahtlos hinzugefuegt
-\stopmessages
-
-% dutch : \lccode`\'=`\'
-% english : \lccode`\'=0
-% german : \lccode`\'=`\'
-% french : \lccode`\'=`\'
-
-%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.
-
-\newcounter\loadedlanguage
-
-%D \macros
-%D {currentlanguage}
-%D {}
-%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}.
-
-\let\currentlanguage = \empty
-
-%D \macros
-%D {installlanguage}
-%D {}
-%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{\y!installlanguage}
-%D
-%D When \type{\c!status} equals \type{\v!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 \starttypen
-%D \f!languageprefix-identifier.\f!patternsextension
-%D \f!languageprefix-identifier.\f!hyhensextension
-%D \stoptypen
-%D
-%D The \type{\c!spatiering} 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{\c!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%
- {\doifundefined{#1}{\setvalue{#1}{\language[#1]}}%
- \expanded{\noexpand\uppercase{\noexpand\edef\noexpand\ascii{#1}}}%
- \doifundefined{\ascii}{\setvalue{\ascii}{\language[#1]}}}
-
-\def\doinstalllanguage[#1][#2]%
- {\doifinstringelse{=}{#2}
- {\doifdefinedelse{\??la#1\c!nummer}%
- {\getparameters[\??la#1][#2]}
- {\setvalue{\l!prefix!#1}{#1}%
- \setevalue{\??la#1\c!nummer}{\loadedlanguage}%
- \increment\loadedlanguage
- \dodoinstalllanguage{#1}%
- \getparameters
- [\??la#1]
- [\s!lefthyphenmin=2,
- \s!righthyphenmin=2,
- \c!spatiering=\v!opelkaar,
- \c!leftsentence=---,
- \c!rightsentence=---,
- \c!leftsubsentence=---,
- \c!rightsubsentence=---,
- \c!leftquote=\upperleftsinglesixquote,
- \c!rightquote=\upperrightsingleninequote,
- \c!leftquotation=\upperleftdoublesixquote,
- \c!rightquotation=\upperrightdoubleninequote,
- \c!datum={\v!jaar,\ ,\v!maand,\ ,\v!dag},
- \c!status=\v!stop,
- \s!done=\v!nee,
- \c!default=#1,
- #2]}%
- \language=\getvalue{\??la#1\c!nummer}\relax
- \doifelsevalue{\??la#1\c!status}{\v!start}
- {\doifelsevalue{\??la#1\s!done}{\v!nee}
- {\readsysfile{\f!languageprefix#1.\f!patternsextension}
- {\getparameters[\??la#1][\s!done=\v!ja,\c!default=#1]%
- \showmessage{\m!linguals}{1}{#1}}
- {\showmessage{\m!linguals}{2}{#1}}%
- \readsysfile{\f!languageprefix#1.\f!hyphensextension}
- {\showmessage{\m!linguals}{3}{#1}}
- {\showmessage{\m!linguals}{4}{#1}}}
- {\showmessage{\m!linguals}{1}{#1}%
- \showmessage{\m!linguals}{3}{#1}}}
- {\showmessage{\m!linguals}{5}{#1}}}
- {\setvalue{\l!prefix!#1}{#2}%
- \dodoinstalllanguage{#1}}%
- }% \language[#1]} gave unwanted side effect of loading language specifics
-
-\def\installlanguage%
- {\dodoubleargument\doinstalllanguage}
-
-%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.
-
-%D \macros
-%D {setuplanguage}
-%D
-%D Quick and dirty, but useful:
-%D
-%D \showsetup{\y!setuplanguage}
-
-\def\setuplanguage[#1]%
- {\dodoubleargument\getparameters[\??la#1]}
-
-%D The values \type {\c!leftsentence} and \type
-%D {\c!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 {\c!leftquotation} and \type {\c!leftquote} come into view
-%D \citaat {when we quote} or \citeer {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%
- {\getvalue{\??la\currentlanguage\c!datum}}
-
-%D This command is not meant for users.
-
-%D Carefull reading of these macros shows that it's legal to
-%D say
-%D
-%D \starttypen
-%D \installlanguage [du ] [de]
-%D \stoptypen
-
-%D \macros
-%D {language,mainlanguage}
-%D {}
-%D
-%D Switching to another language (actually another hyphenation
-%D pattern) is done with:
-%D
-%D \starttypen
-%D \language[identifier]
-%D \stoptypen
-%D
-%D or with \type{\identifier}. Just to be compatible with
-%D \PLAIN\ \TEX, we still support the original meaning, so
-%D
-%D \starttypen
-%D \language=1
-%D \stoptypen
-%D
-%D is a valid operation.
-%D
-%D \showsetup{\y!language}
-%D \showsetup{\y!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).
-
-\def\docomplexlanguage[#1]%
- {\processaction
- [\getvalue{\??la#1\c!default}]
- [ #1=>\normallanguage=\getvalue{\??la#1\c!nummer},
- \s!default=>\normallanguage=\getvalue{\??la#1\c!nummer},
- \s!unknown=>\expanded{\language[\getvalue{\??la#1\c!default}]}]%
- \edef\currentlanguage{#1}%
- \enablelanguagespecifics[#1]%
- \lefthyphenmin =0\getvalue{\??la#1\s!lefthyphenmin}\relax
- \righthyphenmin=0\getvalue{\??la#1\s!righthyphenmin}\relax
- \processaction
- [\getvalue{\??la#1\c!spatiering}]
- [\v!opelkaar=>\frenchspacing,
- \v!ruim=>\nonfrenchspacing,
- \s!unknown=>\frenchspacing]}
-
-\def\complexlanguage[#1]%
- {\doifdefinedelse{\l!prefix!#1}
- {\expanded{\docomplexlanguage[\getvalue{\l!prefix!#1}]}}
- {\showmessage{\m!linguals}{6}{#1}}}
-
-\def\simplelanguage%
- {\normallanguage}
-
-\definecomplexorsimple\language
-
-\let\currentmainlanguage=\empty
-
-\def\mainlanguage[#1]%
- {\edef\currentmainlanguage{#1}} % We expand indeed!
-
-%D \macros
-%D {startlanguagespecifics,enablelanguagespecifics}
-%D {}
-%D
-%D Each language has its own typographic pecularities. Some of
-%D those can be influenced by parameters, others are handled by
-%D the interface, but as soon as specific commands come into
-%D view we need another mechanism. In the macro that activates
-%D a language, we call \type{\enablelanguagespecifics}. This
-%D macro in return calls for the setup of language specific
-%D macros. Such specifics are defined as:
-%D
-%D \starttypen
-%D \startlanguagespecifics[de]
-%D \installcompoundcharacter "a {\"a}
-%D \installcompoundcharacter "e {\"e}
-%D \installcompoundcharacter "s {\SS}
-%D \stoplanguagespecifics
-%D \stoptypen
-%D
-%D Instead of \type{[du]} we can pass a comma separated
-%D list, like \type{[du,nl]}. Next calls to this macro add the
-%D specifics to the current list.
-%D
-%D Before we actually read the specifics, we first take some
-%D precautions that will prevent spurious spaces to creep into
-%D the list.
-
-\def\startlanguagespecifics%
- {\bgroup
- \catcode`\^^I=\@@ignore
- \catcode`\^^M=\@@ignore
- \catcode`\^^L=\@@ignore
- \dostartlanguagespecifics}
-
-%D The main macro looks quite complicated but actually does
-%D nothing special. By embedding \type{\do} we can easily
-%D append to the lists and also execute them at will. Just to
-%D be sure, we check on spurious spaces.
-
-\long\def\dostartlanguagespecifics[#1]#2\stoplanguagespecifics%
- {\egroup
- \long\def\docommando##1%
- {\doifdefinedelse{\??la##1\??la}
- {\long\def\do####1####2####3%
- {\setvalue{\??la####1\??la}{\do{####1}{####2####3}}}%
- \getvalue{\??la##1\??la}{#2}}
- {\setvalue{\??la##1\??la}{\do{##1}{#2}}}%
- \bgroup
- \setbox0=\hbox{\enablelanguagespecifics[##1]}%
- \ifdim\wd0>\!!zeropoint
- \showmessage{\m!linguals}{7}{##1,\the\wd0\space}\wait
- \else
- \showmessage{\m!linguals}{8}{##1}%
- \fi
- \egroup}%
- \processcommalist[#1]\docommando}
-
-%D Enabling them is rather straightforward. We only have to
-%D define \type{\do} in such a way that \type{{ }} is removed
-%D and the language key is gobbled.
-
-\def\enablelanguagespecifics[#1]%
- {\long\def\do##1##2{##2}%
- \getvalue{\??la#1\??la}}
-
-%D \macros
-%D {leftguillemot,rightguillemot,leftsubguillemot,rightsubguillemot,
-%D ...single...quote,...double...quote}
-%D {}
-%D
-%D We assign logical names to all kind of quote and sentence
-%D boundary characters.
-
-\def\lowerleftsingleninequote {\char44 }
-\def\lowerleftdoubleninequote {\char44\kern-.1em\char44 }
-\def\upperleftsingleninequote {\char39 }
-\def\upperleftdoubleninequote {\char34\kern-.1em}
-\def\upperleftsinglesixquote {\char96 }
-\def\upperleftdoublesixquote {\char96\kern-.1em\char96 }
-
-\def\lowerrightsingleninequote {\char44 }
-\def\lowerrightdoubleninequote {\char44\kern-.1em\char44 }
-\def\upperrightsingleninequote {\char39 }
-\def\upperrightdoubleninequote {\char34 }
-\def\upperrightsinglesixquote {\char96 }
-\def\upperrightdoublesixquote {\kern-.125em\char92 }
-
-\unexpanded\def\leftguillemot%
- {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle\ll$}}}
-
-\unexpanded\def\rightguillemot%
- {\hbox{\raise.25ex\hbox{$\scriptscriptstyle\gg$}}}
-
-\unexpanded\def\leftsubguillemot%
- {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle<$}}}
-
-\unexpanded\def\rightsubguillemot%
- {\hbox{\raise.25ex\hbox{$\scriptscriptstyle>$}}}
-
-%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 {\blanko
-%D \startregelcorrectie
-%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 \hbox to \hsize
-%D {\hfil\citaat{#3 #4}\hfil\citeer{#2}\hfil\strut|<||<|#3|>|#4|>|\hfil}
-%D \vskip.5em
-%D \hrule
-%D \egroup
-%D \stopregelcorrectie
-%D \blanko}
-%D
-%D \ShowLanguageValues [nl] [dutch] nederlandse zuinigheid
-%D \ShowLanguageValues [en] [english] engelse humor
-%D \ShowLanguageValues [de] [german] duitse degelijkheid
-%D \ShowLanguageValues [fr] [french] franse slag
-%D \ShowLanguageValues [sp] [spanish] spaans benauwd
-%D \ShowLanguageValues [it] [italian] italiaanse ...
-%D \ShowLanguageValues [da] [danish] deense ...
-%D \ShowLanguageValues [pt] [portuguese] portugese ...
-%D \ShowLanguageValues [sv] [swedish] zweedse ...
-%D \ShowLanguageValues [pl] [polish] poolse ...
-%D \ShowLanguageValues [fi] [finnish] finse ...
-%D \ShowLanguageValues [af] [afrikaans] afrikaanse ...
-%D \ShowLanguageValues [no] [norwegian] noorse ...
-%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 \plaatstabel{The germanic languages (\type{lang-ger})}
-%D \starttabel[||||]
-%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 \stoptabel
-%D \protect
-%D
-%D \unprotect
-%D \plaatstabel{The italic languages (\type{lang-ita})}
-%D \starttabel[||||]
-%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!sp \NC spanish \NC italic \NC\MR
-%D \NC \s!it \NC italian \NC italic \NC\MR
-%D \NC \s!pt \NC portuguese \NC italic \NC\LR
-%D \HL
-%D \stoptabel
-%D \protect
-%D
-%D \unprotect
-%D \plaatstabel{The slavic languages (\type{lang-sla})}
-%D \starttabel[||||]
-%D \HL
-%D \NC \bf mnemonic \NC \bf language \NC \bf group \NC \bf file \NC\SR
-%D \HL
-%D \NC \s!pl \NC polish \NC slavic \NC lang-sla \NC\SR
-%D \HL
-%D \stoptabel
-%D \protect
-%D \unprotect
-%D
-%D \plaatstabel{The altaic languages (\type{lang-alt})}
-%D \starttabel[||||]
-%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 \stoptabel
-%D
-%D \plaatstabel{The uralic languages (\type{lang-ura})}
-%D \starttabel[||||]
-%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 \stoptabel
-%D \protect
-
-%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.
-
-% \language[\s!en] \mainlanguage[\currentlanguage]
-
-\startinterface dutch \appendtoks \language[\s!nl]\to \everyjob \stopinterface
-\startinterface english \appendtoks \language[\s!en]\to \everyjob \stopinterface
-\startinterface german \appendtoks \language[\s!de]\to \everyjob \stopinterface
-\startinterface french \appendtoks \language[\s!fr]\to \everyjob \stopinterface
-\startinterface spanish \appendtoks \language[\s!sp]\to \everyjob \stopinterface
-\startinterface italian \appendtoks \language[\s!it]\to \everyjob \stopinterface
-\startinterface danish \appendtoks \language[\s!da]\to \everyjob \stopinterface
-\startinterface portuguese \appendtoks \language[\s!pt]\to \everyjob \stopinterface
-\startinterface swedish \appendtoks \language[\s!sv]\to \everyjob \stopinterface
-\startinterface polish \appendtoks \language[\s!pl]\to \everyjob \stopinterface
-\startinterface finish \appendtoks \language[\s!fi]\to \everyjob \stopinterface
-\startinterface afrikaans \appendtoks \language[\s!af]\to \everyjob \stopinterface
-\startinterface norwegian \appendtoks \language[\s!no]\to \everyjob \stopinterface
-\startinterface turkish \appendtoks \language[\s!tr]\to \everyjob \stopinterface
-
-\appendtoks \mainlanguage[\currentlanguage] \to \everyjob
-
-\protect
-
-\endinput
+%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. Non||commercial use is
+%C granted.
+
+%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
+ 2: geen afbreekpatronen voor --
+ 3: afbreekdefinities voor -- geladen
+ 4: geen afbreekdefinities voor --
+ 5: afbreekpatronen voor -- niet geladen
+ 6: taal -- is niet gedefinieerd
+ 7: taal specifieke opties [--] introduceren een skip van --
+ 8: taal specifieke opties [--] naadloos toegevoegd
+\stopmessages
+
+\startmessages english library: linguals
+ title: language
+ 1: patterns for -- loaded
+ 2: no patterns for --
+ 3: hyphenations for -- loaded
+ 4: no hyphenations for --
+ 5: patterns for -- not loaded
+ 6: language -- is undefined
+ 7: language specific options [--] introduce a -- skip
+ 8: language specific options [--] seamless appended
+\stopmessages
+
+\startmessages german library: linguals
+ title: Sprache
+ 1: Trennmuster fuer -- geladen
+ 2: Keine Trennmuster fuer --
+ 3: Trenndefinitionen fuer -- geladen
+ 4: Keine Trenndefinitionen fuer --
+ 5: Trennmuster fuer -- nicht geladen
+ 6: Sprache -- ist undefiniert
+ 7: Sprachenspezifische Option [--] fuegt eine Luecke von -- ein
+ 8: Sprachenspezifische Option [--] nahtlos hinzugefuegt
+\stopmessages
+
+% dutch : \lccode`\'=`\'
+% english : \lccode`\'=0
+% german : \lccode`\'=`\'
+% french : \lccode`\'=`\'
+
+%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.
+
+\newcounter\loadedlanguage
+
+%D \macros
+%D {currentlanguage}
+%D {}
+%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}.
+
+\let\currentlanguage = \empty
+
+%D \macros
+%D {installlanguage}
+%D {}
+%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{\y!installlanguage}
+%D
+%D When \type{\c!status} equals \type{\v!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 \starttypen
+%D \f!languageprefix-identifier.\f!patternsextension
+%D \f!languageprefix-identifier.\f!hyhensextension
+%D \stoptypen
+%D
+%D The \type{\c!spatiering} 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{\c!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%
+ {\doifundefined{#1}{\setvalue{#1}{\language[#1]}}%
+ \expanded{\noexpand\uppercase{\noexpand\edef\noexpand\ascii{#1}}}%
+ \doifundefined{\ascii}{\setvalue{\ascii}{\language[#1]}}}
+
+\def\doinstalllanguage[#1][#2]%
+ {\doifinstringelse{=}{#2}
+ {\doifdefinedelse{\??la#1\c!nummer}%
+ {\getparameters[\??la#1][#2]}
+ {\setvalue{\l!prefix!#1}{#1}%
+ \setevalue{\??la#1\c!nummer}{\loadedlanguage}%
+ \increment\loadedlanguage
+ \dodoinstalllanguage{#1}%
+ \getparameters
+ [\??la#1]
+ [\s!lefthyphenmin=2,
+ \s!righthyphenmin=2,
+ \c!spatiering=\v!opelkaar,
+ \c!leftsentence=---,
+ \c!rightsentence=---,
+ \c!leftsubsentence=---,
+ \c!rightsubsentence=---,
+ \c!leftquote=\upperleftsinglesixquote,
+ \c!rightquote=\upperrightsingleninequote,
+ \c!leftquotation=\upperleftdoublesixquote,
+ \c!rightquotation=\upperrightdoubleninequote,
+ \c!datum={\v!jaar,\ ,\v!maand,\ ,\v!dag},
+ \c!status=\v!stop,
+ \s!done=\v!nee,
+ \c!default=#1,
+ #2]}%
+ \language=\getvalue{\??la#1\c!nummer}\relax
+ \doifelsevalue{\??la#1\c!status}{\v!start}
+ {\doifelsevalue{\??la#1\s!done}{\v!nee}
+ {\readsysfile{\f!languageprefix#1.\f!patternsextension}
+ {\getparameters[\??la#1][\s!done=\v!ja,\c!default=#1]%
+ \showmessage{\m!linguals}{1}{#1}}
+ {\showmessage{\m!linguals}{2}{#1}}%
+ \readsysfile{\f!languageprefix#1.\f!hyphensextension}
+ {\showmessage{\m!linguals}{3}{#1}}
+ {\showmessage{\m!linguals}{4}{#1}}}
+ {\showmessage{\m!linguals}{1}{#1}%
+ \showmessage{\m!linguals}{3}{#1}}}
+ {\showmessage{\m!linguals}{5}{#1}}}
+ {\setvalue{\l!prefix!#1}{#2}%
+ \dodoinstalllanguage{#1}}%
+ }% \language[#1]} gave unwanted side effect of loading language specifics
+
+\def\installlanguage%
+ {\dodoubleargument\doinstalllanguage}
+
+%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.
+
+%D \macros
+%D {setuplanguage}
+%D
+%D Quick and dirty, but useful:
+%D
+%D \showsetup{\y!setuplanguage}
+
+\def\setuplanguage[#1]%
+ {\dodoubleargument\getparameters[\??la#1]}
+
+%D The values \type {\c!leftsentence} and \type
+%D {\c!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 {\c!leftquotation} and \type {\c!leftquote} come into view
+%D \citaat {when we quote} or \citeer {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%
+ {\getvalue{\??la\currentlanguage\c!datum}}
+
+%D This command is not meant for users.
+
+%D Carefull reading of these macros shows that it's legal to
+%D say
+%D
+%D \starttypen
+%D \installlanguage [du ] [de]
+%D \stoptypen
+
+%D \macros
+%D {language,mainlanguage}
+%D {}
+%D
+%D Switching to another language (actually another hyphenation
+%D pattern) is done with:
+%D
+%D \starttypen
+%D \language[identifier]
+%D \stoptypen
+%D
+%D or with \type{\identifier}. Just to be compatible with
+%D \PLAIN\ \TEX, we still support the original meaning, so
+%D
+%D \starttypen
+%D \language=1
+%D \stoptypen
+%D
+%D is a valid operation.
+%D
+%D \showsetup{\y!language}
+%D \showsetup{\y!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).
+
+\def\docomplexlanguage[#1]%
+ {\processaction
+ [\getvalue{\??la#1\c!default}]
+ [ #1=>\normallanguage=\getvalue{\??la#1\c!nummer},
+ \s!default=>\normallanguage=\getvalue{\??la#1\c!nummer},
+ \s!unknown=>\expanded{\language[\getvalue{\??la#1\c!default}]}]%
+ \edef\currentlanguage{#1}%
+ \enablelanguagespecifics[#1]%
+ \lefthyphenmin =0\getvalue{\??la#1\s!lefthyphenmin}\relax
+ \righthyphenmin=0\getvalue{\??la#1\s!righthyphenmin}\relax
+ \processaction
+ [\getvalue{\??la#1\c!spatiering}]
+ [\v!opelkaar=>\frenchspacing,
+ \v!ruim=>\nonfrenchspacing,
+ \s!unknown=>\frenchspacing]}
+
+\def\complexlanguage[#1]%
+ {\doifdefinedelse{\l!prefix!#1}
+ {\expanded{\docomplexlanguage[\getvalue{\l!prefix!#1}]}}
+ {\showmessage{\m!linguals}{6}{#1}}}
+
+\def\simplelanguage%
+ {\normallanguage}
+
+\definecomplexorsimple\language
+
+\let\currentmainlanguage=\empty
+
+\def\mainlanguage[#1]%
+ {\edef\currentmainlanguage{#1}} % We expand indeed!
+
+%D \macros
+%D {startlanguagespecifics,enablelanguagespecifics}
+%D {}
+%D
+%D Each language has its own typographic pecularities. Some of
+%D those can be influenced by parameters, others are handled by
+%D the interface, but as soon as specific commands come into
+%D view we need another mechanism. In the macro that activates
+%D a language, we call \type{\enablelanguagespecifics}. This
+%D macro in return calls for the setup of language specific
+%D macros. Such specifics are defined as:
+%D
+%D \starttypen
+%D \startlanguagespecifics[de]
+%D \installcompoundcharacter "a {\"a}
+%D \installcompoundcharacter "e {\"e}
+%D \installcompoundcharacter "s {\SS}
+%D \stoplanguagespecifics
+%D \stoptypen
+%D
+%D Instead of \type{[du]} we can pass a comma separated
+%D list, like \type{[du,nl]}. Next calls to this macro add the
+%D specifics to the current list.
+%D
+%D Before we actually read the specifics, we first take some
+%D precautions that will prevent spurious spaces to creep into
+%D the list.
+
+\def\startlanguagespecifics%
+ {\bgroup
+ \catcode`\^^I=\@@ignore
+ \catcode`\^^M=\@@ignore
+ \catcode`\^^L=\@@ignore
+ \dostartlanguagespecifics}
+
+%D The main macro looks quite complicated but actually does
+%D nothing special. By embedding \type{\do} we can easily
+%D append to the lists and also execute them at will. Just to
+%D be sure, we check on spurious spaces.
+
+\long\def\dostartlanguagespecifics[#1]#2\stoplanguagespecifics%
+ {\egroup
+ \long\def\docommando##1%
+ {\doifdefinedelse{\??la##1\??la}
+ {\long\def\do####1####2####3%
+ {\setvalue{\??la####1\??la}{\do{####1}{####2####3}}}%
+ \getvalue{\??la##1\??la}{#2}}
+ {\setvalue{\??la##1\??la}{\do{##1}{#2}}}%
+ \bgroup
+ \setbox0=\hbox{\enablelanguagespecifics[##1]}%
+ \ifdim\wd0>\!!zeropoint
+ \showmessage{\m!linguals}{7}{##1,\the\wd0\space}\wait
+ \else
+ \showmessage{\m!linguals}{8}{##1}%
+ \fi
+ \egroup}%
+ \processcommalist[#1]\docommando}
+
+%D Enabling them is rather straightforward. We only have to
+%D define \type{\do} in such a way that \type{{ }} is removed
+%D and the language key is gobbled.
+
+\def\enablelanguagespecifics[#1]%
+ {\long\def\do##1##2{##2}%
+ \getvalue{\??la#1\??la}}
+
+%D \macros
+%D {leftguillemot,rightguillemot,leftsubguillemot,rightsubguillemot,
+%D ...single...quote,...double...quote}
+%D {}
+%D
+%D We assign logical names to all kind of quote and sentence
+%D boundary characters.
+
+\def\lowerleftsingleninequote {\char44 }
+\def\lowerleftdoubleninequote {\char44\kern-.1em\char44 }
+\def\upperleftsingleninequote {\char39 }
+\def\upperleftdoubleninequote {\char34\kern-.1em}
+\def\upperleftsinglesixquote {\char96 }
+\def\upperleftdoublesixquote {\char96\kern-.1em\char96 }
+
+\def\lowerrightsingleninequote {\char44 }
+\def\lowerrightdoubleninequote {\char44\kern-.1em\char44 }
+\def\upperrightsingleninequote {\char39 }
+\def\upperrightdoubleninequote {\char34 }
+\def\upperrightsinglesixquote {\char96 }
+\def\upperrightdoublesixquote {\kern-.125em\char92 }
+
+\unexpanded\def\leftguillemot%
+ {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle\ll$}}}
+
+\unexpanded\def\rightguillemot%
+ {\hbox{\raise.25ex\hbox{$\scriptscriptstyle\gg$}}}
+
+\unexpanded\def\leftsubguillemot%
+ {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle<$}}}
+
+\unexpanded\def\rightsubguillemot%
+ {\hbox{\raise.25ex\hbox{$\scriptscriptstyle>$}}}
+
+%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 {\blanko
+%D \startregelcorrectie
+%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 \hbox to \hsize
+%D {\hfil\citaat{#3 #4}\hfil\citeer{#2}\hfil\strut|<||<|#3|>|#4|>|\hfil}
+%D \vskip.5em
+%D \hrule
+%D \egroup
+%D \stopregelcorrectie
+%D \blanko}
+%D
+%D \ShowLanguageValues [nl] [dutch] nederlandse zuinigheid
+%D \ShowLanguageValues [en] [english] engelse humor
+%D \ShowLanguageValues [de] [german] duitse degelijkheid
+%D \ShowLanguageValues [fr] [french] franse slag
+%D \ShowLanguageValues [sp] [spanish] spaans benauwd
+%D \ShowLanguageValues [it] [italian] italiaanse ...
+%D \ShowLanguageValues [da] [danish] deense ...
+%D \ShowLanguageValues [pt] [portuguese] portugese ...
+%D \ShowLanguageValues [sv] [swedish] zweedse ...
+%D \ShowLanguageValues [pl] [polish] poolse ...
+%D \ShowLanguageValues [fi] [finnish] finse ...
+%D \ShowLanguageValues [af] [afrikaans] afrikaanse ...
+%D \ShowLanguageValues [no] [norwegian] noorse ...
+%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 \plaatstabel{The germanic languages (\type{lang-ger})}
+%D \starttabel[||||]
+%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 \stoptabel
+%D \protect
+%D
+%D \unprotect
+%D \plaatstabel{The italic languages (\type{lang-ita})}
+%D \starttabel[||||]
+%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!sp \NC spanish \NC italic \NC\MR
+%D \NC \s!it \NC italian \NC italic \NC\MR
+%D \NC \s!pt \NC portuguese \NC italic \NC\LR
+%D \HL
+%D \stoptabel
+%D \protect
+%D
+%D \unprotect
+%D \plaatstabel{The slavic languages (\type{lang-sla})}
+%D \starttabel[||||]
+%D \HL
+%D \NC \bf mnemonic \NC \bf language \NC \bf group \NC \bf file \NC\SR
+%D \HL
+%D \NC \s!pl \NC polish \NC slavic \NC lang-sla \NC\SR
+%D \HL
+%D \stoptabel
+%D \protect
+%D \unprotect
+%D
+%D \plaatstabel{The altaic languages (\type{lang-alt})}
+%D \starttabel[||||]
+%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 \stoptabel
+%D
+%D \plaatstabel{The uralic languages (\type{lang-ura})}
+%D \starttabel[||||]
+%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 \stoptabel
+%D \protect
+
+%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.
+
+% \language[\s!en] \mainlanguage[\currentlanguage]
+
+\startinterface dutch \appendtoks \language[\s!nl]\to \everyjob \stopinterface
+\startinterface english \appendtoks \language[\s!en]\to \everyjob \stopinterface
+\startinterface german \appendtoks \language[\s!de]\to \everyjob \stopinterface
+\startinterface french \appendtoks \language[\s!fr]\to \everyjob \stopinterface
+\startinterface spanish \appendtoks \language[\s!sp]\to \everyjob \stopinterface
+\startinterface italian \appendtoks \language[\s!it]\to \everyjob \stopinterface
+\startinterface danish \appendtoks \language[\s!da]\to \everyjob \stopinterface
+\startinterface portuguese \appendtoks \language[\s!pt]\to \everyjob \stopinterface
+\startinterface swedish \appendtoks \language[\s!sv]\to \everyjob \stopinterface
+\startinterface polish \appendtoks \language[\s!pl]\to \everyjob \stopinterface
+\startinterface finish \appendtoks \language[\s!fi]\to \everyjob \stopinterface
+\startinterface afrikaans \appendtoks \language[\s!af]\to \everyjob \stopinterface
+\startinterface norwegian \appendtoks \language[\s!no]\to \everyjob \stopinterface
+\startinterface turkish \appendtoks \language[\s!tr]\to \everyjob \stopinterface
+
+\appendtoks \mainlanguage[\currentlanguage] \to \everyjob
+
+\protect
+
+\endinput