\setuplayout
	[backspace=2cm,width=middle]

% \usetypescript[antykwa-poltawskiego]
% \setupbodyfont[antykwa-poltawskiego,10pt]
\usetypescript[antykwa-poltawskiego][ec]
\setupbodyfont[antykwa-poltawskiego,10pt]

\setuphead
	[section,subject]
	[style=\bfc]
\setuphead
	[subsection,subsubject]
	[style=\bfb]
\setuppagenumbering
	[location={footer}]
\setuplayout
	[header=0pt,headerdistance=0pt,height=24cm]
\setupwhitespace
	[medium]

\def\TeXLive{\TeX\ Live}
\def\MiKTeX{MiK\TeX}
\def\W32TeX{W32\TeX}
\def\pTeX{p\TeX}

\starttext

\section{\TeX\ distributions}

\subsection{\TeXLive}

In \TeXLive\ you can install different language collections \type{collection-lang}{\tt\sl <foo>}.

\placefigure[force]{}{\externalfigure[img/texlive-collection-lang.png]}

For example, the German collection \type{collection-langgerman} contains packages \type{hyphen-german} and \type{dehyph-exptl} which both contain hyphenation patterns (in addition to many other packages related to German language). The Greek collection \type{collection-langgreek} contains \type{hyphen-greek} and \type{hyphen-ancientgreek} among other packages. The package \type{dehyph-exptl} is maintained independently, while all packages \type{hyphen-}{\tt\sl<foo>} belong to \type{hyph-utf8}.




Hyphenation packages may contain one or more patterns. For example \type{hyphen-norwegian} contains two directives for adding two hyphenation patterns:
\starttyping
execute AddHyphen \
        name=bokmal synonyms=norwegian,norsk \
        lefthyphenmin=2 \
        righthyphenmin=2 \
        file=loadhyph-nb.tex \
        file_patterns=hyph-nb.pat.txt \
        file_exceptions=hyph-nb.hyp.txt
execute AddHyphen \
        name=nynorsk \
        lefthyphenmin=2 \
        righthyphenmin=2 \
        file=loadhyph-nn.tex \
        file_patterns=hyph-nn.pat.txt \
        file_exceptions=hyph-nn.hyp.txt
\stoptyping

The keywords {\bf name} and {\bf synonyms} are used as language name to access the patterns in \TeX, {\bf file} is used as pattern loader for 8-bit engines and \XeTeX, while {\bf file\_patterns} and {\bf file\_exceptions} are plain text files used by \LuaTeX.

The information from \type{AddHyphen} directives end up in three different files: \type{language.dat} used by \LaTeX, \type{language.def} used by plain \eTeX\  and \type{language.dat.lua} used by \LuaTeX. All the three are placed in\crlf \type{    $TEXMFSYSVAR/tex/generic/config},\crlf for example to\crlf \type{    /usr/local/texlive/2011/texmf-var/tex/generic/config},\crlf while a static copy also exists in\crlf
	\type{    $TEXMFMAIN/tex/generic/config},\crlf but that one contains all languages and only makes sense if you have a complete checkout from SVN repository for example.

\placefigure[force]{\type{language.dat}}{
\starttyping
% from hyphen-norwegian:
bokmal loadhyph-nb.tex
=norwegian
=norsk
nynorsk loadhyph-nn.tex
\stoptyping
}

\placefigure[force]{\type{language.def}}{
\starttyping
% from hyphen-norwegian:
\addlanguage{bokmal}{loadhyph-nb.tex}{}{2}{2}
\addlanguage{norwegian}{loadhyph-nb.tex}{}{2}{2}
\addlanguage{norsk}{loadhyph-nb.tex}{}{2}{2}
\addlanguage{nynorsk}{loadhyph-nn.tex}{}{2}{2}
\stoptyping
}

\placefigure[force]{\type{language.dat.lua} (the keyword \type{loader} is not used anywhere at the moment)}{
\starttyping
-- from hyphen-norwegian:
	['bokmal'] = {
		loader = 'loadhyph-nb.tex',
		lefthyphenmin = 2,
		righthyphenmin = 2,
		synonyms = { 'norwegian', 'norsk' },
		patterns = 'hyph-nb.pat.txt',
		hyphenation = 'hyph-nb.hyp.txt',
	},
	['nynorsk'] = {
		loader = 'loadhyph-nn.tex',
		lefthyphenmin = 2,
		righthyphenmin = 2,
		synonyms = {  },
		patterns = 'hyph-nn.pat.txt',
		hyphenation = 'hyph-nn.hyp.txt',
	},
\stoptyping
}

The files \type{language.dat} and \type{language.def} are used both by 8-bit and native Unicode engines. On one hand this simplifies things, while on the other it makes very little sense to include sanskrit patterns in \pdfTeX\ -- the package doesn't load any patterns in that case any way. It might be that there will be multiple copies of \type{language.dat} for different engines in future.

In addition to the three mentioned files, \TeXLive\ also provides two additional files for \pTeX:
\startitemize[packed,joinedup]
\item \type{$TEXMFDIST/tex/ptexgeneric/config/language.ptx} as an equivalent of \type{language.dat} which enables all languages that make sense in an 8-bit engine
\item \type{$TEXMFDIST/tex/ptex/config/language.def} which enables just most frequently used languages
\stopitemize
The contents are almost the same as in the generated \type{language.dat} and \type{language.def}, except that these two files are not generated and might enable a different set of languages, independent of installed language collections. When \pTeX\ was first included into \TeXLive\ it was loading its own files with patterns, so it needed its own \type{language.ptx}. Nowadays this restriction is gone and one could replace both static files with the generated ones if needed.

TODO: explain where are the sources

\subsection{\MiKTeX}

In \MiKTeX\ application {\bf MiKTeX Options} which you can run from Start menu ({\em Maintenance} $\rightarrow$ {\em Settings} or {\em Maintenance (Admin)} $\rightarrow$ {\em Settings (Admin)\/}) or from command line (\type{mo.exe} or \type{mo_admin.exe}) you can select which languages you want to include into \TeX\ formats.

\placefigure[force]{user interface to select the desired languages}{\externalfigure[img/MiKTeX-languages.png]}%[width=7cm]

Based on that selection \MiKTeX\ creates three files \type{language.dat}, \type{language.def} and \type{language.dat.lua} in directory
\starttyping
    C:\ProgramData\MiKTeX\2.9\tex\generic\config
\stoptyping

The contents of those files are the same as described in \TeXLive\ section, but the needed information about names of languages and required files comes from
\starttyping
    C:\Program Files\MiKTeX 2.9\MiKTeX\config\languages.ini
\stoptyping
instead of special \type{hyphen-}{\tt\sl<foo>} packages.

(Exact location might depend on where you install \MiKTeX\ and whether you install it for all users or just for yourself. It may also depend on Windows version. The information above holds for \MiKTeX\ 2.9 on Windows 7 with system-wide installation.)

\placefigure[force]{\type{languages.ini}}{
\starttyping
[bokmal]
loader=loadhyph-nb.tex
lefthyphenmin=2
righthyphenmin=2
synonyms=norwegian,norsk
patterns=hyph-nb.pat.txt

[nynorsk]
loader=loadhyph-nn.tex
lefthyphenmin=2
righthyphenmin=2
patterns=hyph-nn.pat.txt
\stoptyping
}

\subsection{\W32TeX}

\page

List of languages in \TeXLive\ (has to be nicer):
\starttyping
collection-langafrican
	hyphen-ethiopic
		ethiopic,amharic,geez
collection-langarabic
	hyphen-arabic
		arabic
	hyphen-farsi
		farsi,persian
collection-langcjk
	hyphen-chinese
		pinyin
collection-langcroatian
	hyphen-croatian
		croatian
collection-langcyrillic
	hyphen-bulgarian
		bulgarian
	hyphen-russian
		russian
	hyphen-ukrainian
		ukrainian
collection-langczechslovak
	hyphen-czech
		czech
	hyphen-slovak
		slovak
collection-langdanish
	hyphen-danish
		danish
collection-langdutch
	hyphen-dutch
		dutch
collection-langenglish
	hyphen-english
		ukenglish,british,UKenglish
		usenglishmax
collection-langfinnish
	hyphen-finnish
		finnish
collection-langfrench
	hyphen-basque
		basque
	hyphen-french
		french,patois,francais
collection-langgerman
	hyphen-german
		german
		ngerman
		swissgerman
collection-langgreek
	hyphen-greek
		monogreek
		greek,polygreek
	hyphen-ancientgreek
		ancientgreek
		ibycus
collection-langhungarian
	hyphen-hungarian
		hungarian
collection-langindic
	hyphen-indic
		assamese
		bengali
		gujarati
		hindi
		kannada
		malayalam
		marathi
		oriya
		panjabi
		tamil
		telugu
	hyphen-sanskrit
		sanskrit
collection-langitalian
	hyphen-italian
		italian
collection-langlatin
	hyphen-latin
		latin
collection-langlatvian
	hyphen-latvian
		latvian
collection-langlithuanian
	hyphen-lithuanian
		lithuanian
collection-langmongolian
	hyphen-mongolian
		mongolian
		mongolianlmc
collection-langnorwegian
	hyphen-norwegian
		bokmal,norwegian,norsk
		nynorsk
collection-langother
	hyphen-afrikaans
		afrikaans
	hyphen-armenian
		armenian
	hyphen-coptic
		coptic
	hyphen-esperanto
		esperanto
	hyphen-estonian
		estonian
	hyphen-icelandic
		icelandic
	hyphen-indonesian
		indonesian
	hyphen-interlingua
		interlingua
	hyphen-irish
		irish
	hyphen-kurmanji
		kurmanji
	hyphen-lao
		lao
	hyphen-romanian
		romanian
	hyphen-serbian
		serbian
		serbianc
	hyphen-slovenian
		slovenian,slovene
	hyphen-turkish
		turkish
	hyphen-uppersorbian
		uppersorbian
	hyphen-welsh
		welsh
collection-langpolish
	hyphen-polish
		polish
collection-langportuguese
	hyphen-portuguese
		portuguese,portuges
collection-langspanish
	hyphen-spanish
		spanish,espanol
	hyphen-catalan
		catalan
	hyphen-galician
		galician
collection-langswedish
	hyphen-swedish
		swedish
collection-langturkmen
	hyphen-turkmen
		turkmen
\stoptyping

% \section{Special cases}
% 
% \subsection{German}
% 
% \subsection{Russian and Ukrainian}
% 
% \section{How to add your own language?}

\stoptext