% A documentation for LANG package (in Czech language, sorry)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% February 2004                                   Petr Olsak

\chyph  % pou�ijte csplain

%\headline={\hfil See the ofsdoce.tex for English version 
%           of this documentation.\global\headline={\hfil}}

\magnification\magstephalf

\hoffset=4pc
\voffset=1pc
\hsize=31.6pc
\vsize=49pc
\raggedbottom
\parindent=15pt
\emergencystretch=2em

\font\smallbf=csb10 at7pt
\font\smalltt=cstt8
\font\titulfont=\fontname\tenbf\space scaled\magstep4
\font\bigbf=\fontname\tenbf\space scaled\magstep1
\font\bigtt=\fontname\tentt\space scaled\magstep1

\def\Red{}
\def\Black{}
\def\Blue{}
\def\Green{}
\def\beglink#1{}
\def\endlink{}
\def\aimlink#1{}

\ifx\pdfoutput\undefined\else   %%%% pdfTeX is used %%%%%%%%%%
\ifnum\pdfoutput>0    

\ifx \pdfstartlink\undefined %%% PDFTeX version <= 13
   \let\pdfstartlink=\pdfannotlink
\fi

\def\beglink#1{%          % Za��tek textu odkazu, #1 je kl�� odkazu
   \Green \pdfstartlink height9pt depth3pt 
     attr{/Border[0 0 0]} goto name{#1}\relax}
\def\endlink{\pdfendlink\Black}  

\def\aimlink#1{%          % M�sto c�le odkazu, #1 je kl�� odkazu
   \expandafter\ifx \csname aim:#1\endcsname \relax
      \expandafter\gdef \csname aim:#1\endcsname {}%
      \vbox to0pt{\vss\hbox{\pdfdest name{#1} fith}\kern15pt}%
   \fi
}
\def\pdfsetcmykcolor#1{\special{PDF:#1 k}}
\def\Red{\leavevmode\pdfsetcmykcolor{0.1 0.9 0.9 0}}
\def\Black{\leavevmode\pdfsetcmykcolor{0 0 0 1}}
\def\Green{\leavevmode\pdfsetcmykcolor{0.9 0.1 0.9 .3}}
\def\Blue{\leavevmode\pdfsetcmykcolor{0.9 0.9 0.1 0}}

\pdfcompresslevel=9
\pdfinfo{/Author (Petr Olsak)
         /CreationDate (Ferbuary 2004) 
         /ModDate (April 2004)
         /Creator (TeX)
         /Producer (pdfTeX)
         /Title (LANG: Olsak's multi language system)
         /Subject (Documentation)
         /Keywords (TeX, fonts)
}

\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% End of pdfTeX macros %%%%%

\newcount\secnum \newcount\subsecnum

\def\sec #1\par{\ifnum\secnum>0 \goodbreak\fi\removelastskip
   \vskip2\baselineskip
   \subsecnum=0 \advance\secnum by1
   \noindent{\bigbf\let\tt=\bigtt\llap{\the\secnum.\quad}#1}\par\nobreak\medskip}
\def\subsec #1\par{\removelastskip\bigskip
   \advance\subsecnum by1   
   \noindent{\bf \llap{\aimlink{\the\secnum.\the\subsecnum}%
      \the\secnum.\the\subsecnum.\quad}#1}\par\nobreak\medskip}
\def\title #1\par{\vglue2\baselineskip 
   \line{\hss\titulfont #1}\vskip2\baselineskip}
\def\author #1\par{\noindent{\bigbf#1}\medskip}

\def\LaTeX{La\TeX}

\catcode`<=13
\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}}
\def\,{\thinspace}
\let\levaskoba=<

{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
\def\begtt{\medskip\bgroup \setverb \catcode`@=0 \activespace
   \parindent=0pt \catcode`\"=12
   \def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1}
   \obeylines \startverb}
{\catcode`\|=0 \catcode`\\=12
|gdef|startverb#1\endtt{|tt#1|egroup|medskip|testpar}}
\long\def\testpar#1{\ifx\par#1\else\noindent\fi#1}

\catcode`"=13
\def"{\hbox\bgroup\setverb\activespace\tt\readverb}
\def\readverb #1"{#1\egroup}

\def\begitems{\medskip\bgroup \catcode`*=13 }
{\catcode`*=13 \gdef*{\item{$\bullet$}}}
\def\enditems{\medskip\egroup}

\newwrite\indout
\immediate\openout\indout=\jobname.ind
\def\inl[#1]{\strut
   \write\indout{\noexpand\indexentry{#1}{\the\pageno}}%
   \vadjust{\vbox to0pt{\vss
   \hbox to\hsize{\llap{{\aimlink{#1}\smalltt\Blue\char`\\ #1%
      \ifx\extratext\empty\else\space\extratext\fi\Black}%
      \kern2pt\quad}\strut\hfil}%
   \hrule height0pt}}\def\extratext{}}
\def\inll[#1 #2]{\def\extratext{#2}\inl[#1]}
\def\indexentry #1#2{\expandafter \ifx \csname ind:#1\endcsname \relax
      \expandafter \def \csname ind:#1\endcsname {#2}%
   \else 
      \expandafter \edef \csname ind:#1\endcsname {%
          \csname ind:#1\endcsname, #2}%
   \fi
}
\def\extratext{}  
\def\pg[#1]{\csname ind:#1\endcsname}

\chardef\back=`\\

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\noindent\llap{\tt Apr. 2004}

\title LANG: multijazykov� bal��ek pro plain
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\author Petr Ol��k

Vzhledem k tomu, �e nejsem spokojen se syst�mem babel, vytvo�il jsem
si vlastn� multijazykov� bal��ek, kter� �e�� mo�nosti p�ep�n�n�
mezi jazyky s maxim�ln�m mo�n�m komfortem. Na��t� vzory d�len� jednoho
jazyka pro v�ce k�dov�n�, je-li to pot�eba. Umo��uje velmi p�ehledn�
deklarovat nov� jazyk a zapsat pro n�j stylov� soubor s definicemi
p��kaz� z�visl�ch na pou�it�m jazyku.

Bal��ek LANG �zce spolupracuje s makrem OFS, viz "ofsdoc.tex". 
Jedn� se vlastn� o~p��klad pou�it� OFS pro plain. Pro provoz
bal��ku LANG je nutn� OFS aspo� ve verzi Apr.~2004.

Krom� bal��ku LANG je v p��prav� je�t� bal��ek IENC, kter� se star� 
o~konverzi vstupn�ho k�dov�n� na k�dov�n� font�. Viz "iencdoc.tex".
Bal��ky LANG, IENC a OFS spolu s Knuthov�m makrem "plain.tex"
d�vaj� u�ivatel�m plainu do ruky n�stroj na efektivn� spr�vu font�,
jazyk� a mapov�n� vstupn�ch k�dov�n�. Na rozd�l od \LaTeX{}u v�ak bal��ky
ned�laj� nic jin�ho, tj.~n�vrh zna�kov�n� dokumentu a tvorba maker 
definuj�c�ch vzhled dokumentu z�st�v� st�le v rukou a pod plnou 
kontrolou u�ivatele plainu.

\LaTeX{} nepou��v�m, tj. nepl�nuji portov�n� bal�ku LANG pro \LaTeX.
Nicm�n� nab�dnu zde pou�it� my�lenky tv�rci bal��ku "babel" a po��d�m
ho, aby n�co z toho do sv�ho bal��ku zahrnul. Jakmile "babel" bude
um�t to sam� co LANG, nebude pot�eba udr�ovat v \TeX{}ov� distribuci 
zvl�tn� form�t cs\LaTeX, proto�e bude mo�n� ve�kerou funkcionalitu
cs\LaTeX{}u zahrnout do nov�ho (zat�m bohu�el neexistuj�c�ho) 
bal�ku "babel".


\sec U�ivatelsk� rozhran�
%%%%%%%%%%%%%%%%%%%%%%%%%

\subsec P�ep�n�n� jazyk�
%%%%%%%%%%%%%%%%%%%%%%%%

Jazyk nebo k�dov�n� font� nebo oboj� m��eme p�epnout
p��kazem\inl[setlang] 

\begtt
\setlang[<zkratka-jazyka>/<k�dov�n�>]
\endtt
%
p�i�em� n�kter� z t�chto parametr� m��e chyb�t. Pokud chyb�, ponech� se
parametr pokud mo�no beze zm�ny.

Bal��ek LANG v souboru "langdef.tex" deklaruje jazyky a jejich vazby
na p�ep�na�e jazyk� a na stylov� soubory.
Ka�d� jazyk zde m� deklarov�n seznam (t�eba i v�ce) k�dov�n� font�, 
ve kter�ch je abeceda jazyka dosa�iteln�: 
tzv.~{\it seznam k�dov�n� dan�ho jazyka}.
Ka�d� k�dov�n� m� p�i�azenu implicitn� rodinu font�, kter� je 
pro toto k�dov�n� registrovan� a je deklarovan� v OFS.

P��kaz "\setlang" na�te stylov� soubor nov�ho jazyka
(pokud tento je�t� nebyl na�ten) a zkontroluje, zda po�adovan�
k�dov�n� je v seznamu k�dov�n� dan�ho jazyka. Pokud nen�, nastav�
k�dov�n� na v�choz� k�dov�n� dan�ho jazyka bez ohledu na to, co bylo
ps�no v parametru p��kazu "\setlang" a vyp��e varov�n� o zm�n�
k�dov�n�. Potom "\setlang" nastav� vzory d�len� pro dan� jazyk
a pou�it� k�dov�n�. D�le zkontroluje, zda je k�dov�n� registrov�no 
v aktu�ln� rodin� font� v OFS. Pokud nen�, nastav� implicitn� 
rodinu font� dan�ho k�dov�n�. Co d�l� p��kaz "\setlang" p�esn�,
je uvedeno v~sekci...

M�sto p��kazu "\setlang" m��eme pou��t p�ep�na�e jednotliv�ch jazyk�
"\english", "\ukenglish", "\czech", "\french", "\german" atd.
Tyto p��kazy jsou implicitn� definov�ny tak, �e spust�
"\setlang[<zkratka-jazyka>/]".

Seznam v�ech jazyk�, kter� jsou v bal��ku LANG deklarov�ny, v�etn�
jejich p�ep�na�� z�sk�me pomoc� p��kazu "\showlangs".\inl[showlangs] 
Tento p��kaz vyp��e seznam jazyk� na termin�l a do log souboru 
nap��klad ve tvaru:

\bgroup \catcode`<=12
\begtt
LANG selector    style-file   encodings<num.of.hyphen.table>
------------------------------------------------------------
en   \english    lang-en.tex  8t<0> 8z<0> 6a<0>
de   \german     lang-de.tex  8t<1> 8z<1>
de2  \germannew  lang-de.tex  8t<2> 8z<2>
fr   \french     lang-fr.tex  8t<?> 8z<?>
cz   \czech      lang-cz.tex  8t<3> 8z<4>
sk   \slovak     lang-sk.tex  8t<5> 8z<6>
pl   \polish     lang-pl.tex  8t<?> 8z<?>
ru   \russian    lang-ru.tex  6a<7> 6c<7> 6t<7> 6k<8> 6y<?>
\endtt \par \egroup

Prvn� sloupec obsahuje zkratku jazyka, kter� se pou��v� v argumentu
p��kazu "\setlang". Ve druh�m sloupci je p�ep�na� jazyka a ve t�et�m
je n�zev stylov�ho souboru, kter� se automaticky p�e�te p�i prvn�m
p�epnut� do tohoto jazyka. Pak n�sleduje seznam k�dov�n�, kter� lze
pro abecedu dan�ho jazyka pou��t. Jm�na k�dov�n� by m�la b�t v souladu
s dokumentem o n�zvech font� v \TeX{}u [1]. Nap��klad "8t" je k�dov�n�
podle Corku v \LaTeX{}u zn�m� jako T1. Za jm�nem k�dov�n� n�sleduje v
lomen� z�vorce intern� ��slo tabulky vzor� d�len�, kter� byla
v dob� ini\TeX{}u na�tena primitivem "\patterns" pro dan� jazyk a dan�
k�dov�n�. Konkr�tn� hodnoty t�chto ��sel nejsou z u�ivatelsk�ho
pohledu zaj�mav� (LANG je p�i p�i na��t�n� tabulek vzor� d�len�
alokuje automaticky). D�le�it� je pouze skute�nost, �e n�kter� k�dov�n�
sd�lej� stejnou tabulku vzor� d�len�, proto�e abeceda jazyka m� 
v t�chto k�dov�n�ch zcela stejn� rozlo�en� znak�. 

N�kter� k�dov�n� maj� p�id�lenu pr�zdnou tabulku vozor�, co� je
vyzna�eno symbolem~{\tt\char`\<=>}. 
Znamen� to, �e slova se v tomto jazyku a k�dov�n� v�bec nerozd�luj�.
N�kter� jin� k�dov�n� maj� v seznamu 
uvedeno {\tt\char`\<?>}, co� zamen�, �e v dob� ini\TeX{}u nebyla
tabulka vzor� d�len� na�tena. Chceme-li s~n� pracovat, mus�me v
souboru "langdef.tex" upravit argument p��kazu "\loadpatterns" a
spustit ini\TeX{} znova. Jedin� ini\TeX{} p�i generov�n� form�tu
um� na��tat tabulky vzor� d�len�. P�itom pam�
\TeX{}u je omezena, tak�e pravd�podobn� nen� mo�n� m�t trvale na�teny
v�echny tabulky vzor� d�len� v�ech jazyk�.

Podrobn�j�� informaci o jednotliv�m jazyku z�sk�me tak, �e p�epneme
do zvolen�ho jazyka a pou�ijeme p��kaz "\langinfo".\inl[langinfo]
Nap��klad 

\begtt
\setlang[de2/]\message{\langinfo}
\endtt
vyp��e:
\begtt
German language with hyphenation table adapted to new orthography.
\endtt
%
Je�t� podrobn�j�� informaci lze z�skat p��kazem "\printlangdoc", viz sekci...

Pokus�me-li se p��kazem "\setlang" p�epnout do jazyka a k�dov�n�,
pro kter� nen� na�tena tabulka vzor� d�len� slov, LANG vyp��e
varov�n�:

\vbox{
\begtt
LANG (l...): WARNING. Hyphen table [<jazyk>/<k�dov�n�>] was not loaded.
    I use "\defaulthyphentable=255" instead of given table.
    Modify \loadpatterns parameters in langdef.tex and 
    run iniTeX again if you need given table exactly.
\endtt
\relax}

Znamen� to, �e m�sto po�adovan� tabulky se pou�ije tabulka
"\defaulthyphentable".\inl[defaulthyphentable]
Tento registr je implicitn� nastaven na hodnotu
255, co� p�edstavuje pr�zdnou tabulku, p�i kter� slova nebudou
v�bec d�lena. Registr m��eme ve sv�m dokumentu nastavit na tabulku vzor�
jin�ho jazyka nap��klad pomoc� p��kazu "\hyphentable":\inl[hyphentable]

\begtt
\defaulthyphentable=\hyphentable[en/8t]
\endtt
%
V tomto p��klad� je registr "\defaulthyphentable" nastaven na na 
tabulku anglick�ch vzor� d�len� p�i k�dov�n� "8t".

Podobn� jako v OFS si m��eme p��kazem "\langusage"\inl[langusage]
vypsat na termin�l z�kladn� p��kazy bal��ku LANG.

Pozor: nen� vhodn� pro p�ep�n�n� k�dov�n� font� p��mo pracovat
s~makrem "\fotenc",\inl[fotenc] 
tj.~pou��vat "\def\fotenc{<k�dov�n�>}". Tuto pr�ci d�l� p��kaz
"\setlang[/<k�dov�n�>]", ale nav�c tento p��kaz udr�uje v konzistenci
s nastaven�m <k�dov�n�m> vzory d�len� slov, "\lccode" znak� atd.

Zm�n�-li "\setlang" k�dov�n� font� a je-li pou�it tak� bal��ek IENC, 
pak LANG informuje o t�to zm�n� sv�ho kolegu IENC, kter� m��e na
z�klad� t�to informace upravit k�dovac� tabulky vstupn�ch znak�. Pokud ale
IENC nen� pou�it, mus�me se sami postarat o to, aby znaky ze 
vstupn�ho souboru se spr�vn� mapovaly na znaky v pou�it�m k�dov�n� font�.


\subsec Inicializace a v�choz� nastaven�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Bal��ek LANG je pot�eba inicializovat v ini\TeX{}u, proto�e
na��t� vzory d�len� jazyk�, kter� jsou vyjmenov�ny 
v parametru "\loadpatterns" v souboru "langdef.tex". P��klad
pou�it� bal��ku najdeme v souboru "oktex.ini".

V�choz� nastaven� po inicializaci bal��ku LANG je co nejv�ce podobn�
makru "plain.tex". P�esn�ji: nepozn�me rozd�l mezi makrem "plain.tex",
pokud nepou�ijeme n�kter� z nov� definovan�ch maker z OFS nebo 
z~bal��ku LANG. Ov�em po prvn�m pou�it� maker "\setlang" nebo
"\setfonts" se situace m�n�, proto�e makra na��taj� fonty a soubory,
ve kter�ch jsou p�edefinov�na makra plainu z�visl� na
k�dov�n� (typicky "\ae" nebo "\v").

Implicitn� k�dov�n� je "8t" a implicitn� rodina font� "CMRoman".
Znamen� to, �e pokud se jako prvn� pou�ije "\setfonts[/]",
inicializuje se rodina "CMRoman" v k�dov�n� "8t", kter� je
implementov�na prost�ednictv�m tzv.~EC~font�.

Implicitn� jazyk je "none". Toto je zvl�tn� jazyk, kter� nena��t�
��dn� stylov� soubor a nep�ep�n� tabulku vzor� d�len�. Akceptuje
ve�ker� k�dov�n�, kter� jsou v bal��ku LANG registrov�na. Pokud tedy
prvn� v�skyt p��kazu "\setlang" m� jen parametr "[/<k�dov�n�>]", pak LANG
z�st�v� u jazyka "none" a p�epne pouze k�dov�n� font�.

Prvn� v�skyt p��kazu "\setlang" v dokumentu m� jednu speci�ln� funkci:
p�i pr�zdn�m parametru "<k�dov�n�>" a nepr�zdn� <zkratce jazyka>
nastav� <k�dov�n�> na v�choz� k�dov�n� zvolen�ho jazyka. Nap��klad
"\setlang[cz/]" nastav� k�dov�n� na "8z", proto�e toto je v�choz�
k�dov�n� pro �e�tinu. V�echny n�sleduj�c� p��kazy "\setlang" 
s pr�zdn�m parametrem <k�dov�n�> se u� pokou�ej� ct�t nastaven�
k�dov�n�.

Implicitn� k�dov�n� jazyka "none" je "8t". Pokud tedy je prvn�m
p��kazem "\setlang[/]", pak LANG pouze potvrd� k�dov�n� "8t" a
inicializuje rodinu "CMRoman" v~tomto k�dov�n�. Pokud pak n�sleduje
t�eba "\setlang[cz/]", z�stane u� �e�tina v k�dov�n� "8t", a�koli se
nejedn� o v�choz� k�dov�n� tohoto jazyka.

P�i�azen� proveden� p��kazem "\setlang" je lok�ln�, ale z~tohoto
pravidla existuje v�jimka: a�koli d�me prvn� v�skyt p��kazu "\setlang"
do skupiny, po opu�t�n� skupiny se u� nevrac� k�dov�n� do v�choz�ho
stavu podle plain\TeX{}u, ale potvrd� se v~takov�m p��pad� k�dov�n�
"8t" s jazykem "none".


\subsec Pou�it� stylov�ch soubor�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Stylov� soubor se p�i prvn�m p�epnut� do vybran�ho jazyka na�te
automaticky. V~n�m jsou obvykle p�ipravena makra, kter�
usnad�uj� sazbu v dan�m jazyku. U�ivatel si m��e vytisknout
dokumentaci k dan�mu stylov�mu souboru pomoc� p�epnut� do vybran�ho
jazyka a n�sledn�m spu�t�n� p��kazu "\printlangdoc".\inl[printlangdoc]
Nap��klad "\setlang[de2/]\printlangdoc" vytiskne (do "dvi")
dokumentaci k pou�it� stylov�ho souboru n�meck�ho jazyka.

Ve stylov�m souboru se obvykle definuj� pomoc� "\langdef"\inl[langdef]
makra, kter� jsou z�visl� na aktu�ln� zvolen�m jazyku. Nap��klad
makro "\today" se v r�zn�ch stylov�ch souborech definuje r�zn�, ale
jejich definice se vz�jemn� nep�ekr�vaj�. Je-li aktu�ln� angli�tina,
vytiskne "\today" dne�n� datum v angli�tin�, zat�mco p�i aktu�ln�
�e�tin� bude "\today" tisknout dne�n� datum �esky. Podrobn�ji 
o~"\langdef" viz sekci ...

Ka�d� stylov� soubor definuje (z�visle na zvolen�m jazyku) makro
"\langinit",\inl[langinit] 
ve kter�m prob�h� inicializace dan�ho jazyka. V tomto
makru b�v� obvykle nastaveno "\lefthyphenmin" a "\righthyphenmin"
pro dan� jazyk. D�le se zde nastavuje "\fenchspacing" nebo jin�
mezerov�n�. P��kaz "\langinit" se spust� automaticky v�dy 
p�i nastaven� jazyka pomoc� "\setlang".
P�i�azen� v p��kazu "\langinit" jsou lok�ln�.
Ve stylov�m souboru se nav�c zajist�,
aby se nastaven� z "\langinit" vr�tila do p�vodn�ho stavu (podle
plain\TeX{}u), pokud se jazyk opust� tak, �e se spust� "\setlang" jin�ho jazyka.

Ka�d� stylov� soubor by m�l definovat makro "\langphrases"\inl[langphrases]
(z�visl� na zvolen�m jazyku), jeho�
spu�t�n�m se definuj� makra "\abstractname", "\appendixname",
"\bibname", "\ccname", "\chaptername", "\contentsname", "\enclname",
"\figurename", "\headpagename", "\headtoname", "\indexname",
"\listfigurename", "\listtablename", "\partname", "\prefacename",
"\proofname", "\seename", "\alsoseename", "\refname", "\tablename",
tak, �e expanduj� na odpov�daj�c� fr�ze podle aktu�ln�ho jazyka. Tato
makra sama o sob� nejsou z�visl� na aktu�ln�m jazyku, ale p�i p�echodu
do nov�ho jazyka je mus�me p�edefinovat op�tovn�m spu�t�n�m makra
"\langphrases". D�vod tohoto chov�n� je prost�: v dokumentu m��eme
docela �asto p�ep�nat mezi jazyky, ale texty v z�hlav�, texty pro
n�zvy kapitol apod. nech�me v jedin�m zvolen�m jazyku, kter�
pova�ujeme pro tento dokument za hlavn�. Pro tento hlavn� jazyk pak
spust�me "\langphrases" a d�le z�st�vaj� tyto fr�ze nem�nn�.
{\emergencystretch=4em \hbadness=8133 \par}

Ka�d� stylov� soubor tak� definuje makro "\langinfo" (jak bylo
uk�z�no v p�edchoz� sekci ...). 

Stylov� soubory by nem�ly samy od sebe inicializovat ��dn� aktivn� znaky, ale
pomoc� (na jazyku z�visl�m) p��kazu "\activechar<znak>"\inl[activechar]
mohou umo�nit u�ivateli nastavit zvolen� znaky jako aktivn� a vyu��t
jejich p�eddefinovan� funkce ze stylov�ho souboru. Nap��klad styl
pro �e�tinu umo�n� nastavit aktivn� znak \clqq"-"\crqq, aby se tento znak choval jako 
"\discretionary{-}{-}{-}". U�ivatel ale mus� explicitn� tuto vlastnost
znaku \clqq"-"\crqq{} inicializovat p��kazem "\activechar-". 
Pokud ale u�ivatel pou�ije
nap�. "\activechar-" p�i aktu�ln� angli�tin�, dostane na termin�l
pouze varov�n�, �e stylov� soubor pro angli�tinu nepodporuje aktivn� znak
\clqq"-"\crqq{} a znak z�stane neaktivn�.
Konstrukce \clqq"\czech \activechar-"\crqq{} se tedy podob� \LaTeX{}ov�mu
\clqq"\usepackage[split]{czech}"\crqq.

Stylov� soubor pro �e�tinu "lang-cz.tex" umo��uje tak� nastavit 
aktivn� znak pro po��ta�ov� uvozovky ("\activechar"{\tt\char`\"}). To zp�sob�,
�e {\tt\char`\"text mezi po��ta�ov�mi uvozovkami\char`\"} bude nahrazen 
\uv{textem mezi skute�n�mi �esk�mi uvozovkami}. Je jenom na u�ivateli,
zda si tuto vlastnost aktivuje pomoc� "\activechar" nebo ne.
P�ehled v�ech p�eddefinovan�ch aktivn�ch znak� dan�ho stylov�ho
souboru lze z�skat tiskem dokumentace k~jazyku pomoc� "\printlangdoc".

Nastaven� zvolen�ho znaku jako aktivn�ho je lok�ln� uvnit� skupiny,
ale pokud opust�me jazyk p�epnut�m do jin�ho jazyka (nikoli opu�t�n�m
skupiny), z�st�v� znak aktivn� nad�le a m� po��d funkci, kterou z�skal
v dob� jeho aktivace p��kazem "\activechar". Pokud to nen� ��douc�,
mus� u�ivatel deaktivovat znak manu�ln� nap��klad pomoc�
"\catcode`<znak>=12" 
(m��e pou��t zkratku "\deactivechar<znak>"\inl[deactivechar]), 
nebo mus� znak opakovan� aktivovat v kontextu
nov�ho jazyka p��kazem "\activechar<znak>".

U�ivatel si m��e zajistit deaktivaci znaku po opu�t�n� jazyka
automaticky makrem "\afterlang{<p��kazy>}".\inl[afterlang] 
V takov�m p��pad� se
<p��kazy> spust� p�i opu�t�n� jazyka p�epnut�m do jin�ho jazyka.
Makro "\afterlang" je mo�n� v~r�mci jednoho jazyka pou��t opakovan�. 
V~takov�m p��pad� se <p��kazy> kumuluj� do z�sobn�ku, tj. p�i
opu�t�n� jazyka se vykon�vaj� v opa�n�m po�ad�, ne� byly pou�it�m
maker "\afterlang" do z�sobn�ku vlo�eny. Pokud je jazyk ukon�en koncem
skupiny (tj. nikoli p�epnut�m do jin�ho jazyka), z�sobn�k se ru�� 
a v�bec se neprovede.

P��klad pou�it� maker "\activechar" a "\afterlang" je uveden 
v n�sleduj�c� sekci~... Je tam uk�zka mo�n�ho p�edefinov�n� p�ep�na�e 
"\czech".

V mnoha jazyc�ch se pou��v� sada dvojic znak� jako tzv.~zkratky (shorthands),
umo��uj�c� p��stup ke speci�ln�m znak�m nebo jin�m vlastnostem jazyka.
Nap��klad N�mci pou��vaj�~{\tt\char`"u} jako zkratku za \"u,
{\tt\char`"s} je zkratka za \ss{} atd. Pol�ci
zase pro zm�nu maj� speci�ln� znaky uvozeny b�n�m lom�tkem~"/".  Aby
toto za�alo fungovat, mus� u�ivatel nastavit prvn� znak z dvojice znak�
jako aktivn�. Je-li ve v�ech pou�it�ch jazyc�ch tento znak definov�n
stejn� jako:

\begtt
LANG (l...): `<znak>' is activated as expandable double-char prefix
\endtt
%
pak jej sta�� aktivovat p��kazem "\activechar" v kontextu jedin�ho jazyka
(tj. nen� pot�eba jej znovu opakovan� aktivovat v ostatn�ch jazyc�ch).
P�itom zkratky z�st�vaj� z�visl� na aktu�ln�m jazyku, tj. nap��klad 
v~n�m�in� expanduje {\tt\char`"u} na \"u zat�mco v~ma�ar�tin� na \H u.
Na druhou stranu v �e�tin� n�m po takov� aktivaci nahrazov�n�
palcov�ch uvozovek skute�n� �esk�mi fungovat nebude, proto�e v �esk�m
stylov�m souboru nen� tabulka dvojic s prefixem {\tt\char`"} v�bec 
deklarov�na. Tento znak bude tedy v �e�tin� expandovat jen na sv�j 
neaktivn� prot�j�ek.

Stylov� soubor m��e deklarovat k~pou�it�mu jazyku n�kolik
n��e��. Pozn�me to tak, �e makro "\whichdialect"\inl[whichdialect]
expanduje po p�epnut� do zkouman�ho jazyka na slovo \uv{default}. Pokud
nejsou n��e�� pro jazyk deklarov�na, expanduje "\whichdialect" na
slovo \uv{none}. Zvolen�m jin�ho n��e�� tam, kde jsou n��e��
deklarov�na, zp�sob� m�rnou zm�nu chov�n� n�kter�ch maker (nap�.
makra "\today" nebo "\langphrases").

Pokud jsou n��e�� pro aktu�ln� jazyk deklarov�na, je mo�no p�epnout do
jin�ho n��e�� ne� \uv{default} pomoc� p��kazu
"\setdialect[<n��e��>]"\inl[setdialect]. P�i op�tovn�m p�epnut� do
tohoto jazyka pomoc� "\setlang" se znovu inicializuje n��e��
"\default" a je nutno znovu pou��t "\setdialect".
Seznam v�ech dosa�iteln�ch n��e�� z�sk�me jednak p��kazem
"\printlangdoc" a d�le tak� p��kazem "\setdialect[]", kter� ulo�� do
makra "\tmpc" v�echna deklarovan� n��e�� aktu�ln�ho jazyka odd�len� mezerou.


\subsec P�edefinov�n� p�ep�na�� jazyka
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

K p�ep�na��m jazyka "\english", "\czech", "\german" atd. se u�ivatel
m��e chovat \uv{neuctiv�} a p�ed jejich pou�it�m si je m��e definovat
podle sv� pot�eby. Implicitn� definice t�chto p�ep�na�� obsahuj� jen vol�n�
"\setlang[<jazyk>/]" s~pr�zdn�m parametrem pro k�dov�n�. Takov�
p�ep�na� se sna�� zachovat p�vodn� nastaven� k�dov�n�, pokud to je
mo�n�. P�i prvn�m v�skytu tohoto p��kazu se nastav� v�choz� k�dov�n�
dan�ho jazyka.

Typick� p��klad na p�edefinov�n� p�ep�na�e je volba jin�ho ne�
v�choz�ho n��e��:
"\def\jazyk{\setlang[<zkratka>/]\setdialect[<n��e��>]}",
nebo volba jin�ho ne� v�choz�ho k�dov�n�:
"\def\jazyk{\setlang[<zkratka>/<k�dov�n�>]".

Pokud nap��klad chceme pro �e�tinu pou��t EC fonty, kter� jsou
k�dovan� v~"8t", a nav�c vyu��t aktivn� znak \clqq"-"\crqq{}, kter�
se bude p�i d�len� slov rozpadat automaticky na dva spojovn�ky,
pak se vyplat� definovat:

\begtt
\def\czech{\setlang[cz/8t]\activechar-\afterlang{\deactivechar-}}
\endtt

Je pot�eba si rozmyslet, kter� jazyky v dokumentu budeme pou��vat,
jak� pro n� zvol�me k�dov�n� a podle toho definovat p�ep�na�e.
V p�ep�na��ch m��e nap��klad za "\setlang" okam�it� n�sledovat
"\setfonts", pomoc� kter�ho d�v�me najevo, v jak� rodin� font� si
p�ejmeme (nap��klad mongol�tinu) tisknout. Rovn� zde m��e
b�t inicializace n�kter�ch maker specifick�ch pro zvolen� jazyk.
V�e z�le�� na volb� u�ivatele.

Nevhodn� p��klad: pou�ijeme "\def\czech{\setlang[cz/8t]}", ale nech�me
implicitn� hodnotu p�ep�na�e "\slovak" a za�neme po pou�it� p�ep�na�e 
"\slovak" ps�t slovensky. V tomto jazyku z�stane v�choz�
k�dov�n� font� "8z". Pak p�epneme do �e�tiny p��kazem "\czech" a zpracov�v�me
�e�tinu v k�dov�n� "8t". Nyn� ale pozor: pokud znovu p�epneme do
sloven�tiny pomoc� "\slovak", m�me u� tento jazyk v k�dov�n� "8t",
proto�e implicitn� p�ep�na� ct� aktu�ln� k�dov�n�. To mo�n� nen� to,
co jsme pot�ebovali.

Jin� p��klad: p��eme anglicky v k�dov�n� "8t" (po pou�it� p�ep�na�e
"\english") a p�epneme do ru�tiny pomoc� "\russian". V tomto jazyce
nen� mo�n� z�stat u k�dov�n� "8t", proto�e rusk� abeceda v n�m nen�
zahrnuta. LANG tedy vyp��e varov�n� a p�epne do k�dov�n� "6a"
(v�choz� k�dov�n� ru�tiny). Po op�tovn�m p�epnut� pomoc� "\english" m�me sice
znovu angli�tinu, ale fonty z�st�vaj� v kodov�n� "6a" a nevracej� se
do k�dov�n� "8t", proto�e anglick� abeceda je v k�dov�n� "6a"
zahrnuta. Je pot�eba si rozmyslet, zda to je pro danou �lohu
��douc� chov�n�. Pokud bychom pozd�ji v anglick�m textu cht�li p�epnout
pomoc� "\setfonts" do jin�ho fontu, kter� nen� dostupn� v~k�dov�n�
"6a", ohl�s� OFS chybu. Tato chyba je p�itom jen d�sledkem d��v�j��ho
p�echodn�ho p�epnut� do ru�tiny.

Pozn�mka: pokud do ru�tiny v p�edchoz�m p��klad� p�epneme jen uvnit�
skupiny pomoc� "{\russian rusk� text} anglick� text", v��e uveden�
probl�m nenast�v�. Po ukon�en� skupiny se toti� k�dov�n� font� vrac� do
stavu p�ed zah�jen�m skupiny, tj.~v~na�em p��klad� se vrac�
do o�ek�van�ho k�dov�n� "8t".



\sec Jak je to ud�l�no, aneb pohled do hloubky
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsec Deklarace v souboru "langdef.tex"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Pomoc� skupiny p��kaz� "\declareenc"\inl[declareenc]
je v souboru "langdef.tex"
deklarov�na mno�ina k�dov�n� font�, se kterou budeme d�le pracovat:

\begtt
\declareenc <k�dov�n�><mezera><Rodina><mezera>
\endtt

P��kaz deklaruje k�dov�n� a p�i�ad� mu implicitn� rodinu font�.
Zkontroluje, zda existuje soubor "ofs-<k�dov�n�>.tex", zda
existuje implicitn� rodina a zda je tato rodina v~OFS pro dan� k�dov�n�
registrovan�. Pokud n�co z toho nen� spln�no, ohl�s� chybu
a <k�dov�n�> nedeklaruje.

N�sleduje skupina p��kaz� "\declarelang",\inl[declarelang]
kter� deklaruj� jednotliv� jazyky:

{\catcode`!=0
\begtt
\declarelang \<p�ep�na�> <zkratka-jazyka> <stylov�-soubor> <seznam-k�dov�n�> ;
\endtt
\relax}
%
Jednotliv� parametry jsou odd�leny mezerou. Pokud <stylov�-soubor>
neexistuje, p��kaz ohl�s� chybu a ukon�� �innost.
Jinak provede:

\begtt
\def\<p�ep�na�>{\setlang[<zkratka-jazyka>/]
\endtt
%
a ulo�� si do pam�ti jm�no <stylov�ho-souboru>. 
D�le zkontroluje, zda jsou v�echna k�dov�n� ze <seznamu-k�dov�n�> deklarovan�.
Nedeklarovan� k�dov�n� ignoruje a nap��e o tom varov�n�.
Pokud po odstran�n� nedeklarovan�ch k�dov�n� v seznamu ��dn� k�dov�n�
nezbyde, jazyk z�st�v� nedeklarov�n.

Jednotliv� k�dov�n� jsou v <seznamu-k�dov�n�> odd�lov�na mezerou
a p�ed ukon�ovac�m st�edn�kem je tak� mezera.
Prvn� k�dov�n� se st�v� v�choz�m k�dov�n�m jazyka a nesm� mu p�edch�zet
samotn� rovn�tko. Pokud n�kter�mu n�sleduj�c�mu k�dov�n� p�edch�z�
samotn� rovn�tko, znamen� to, �e pro p�epnut� do tohoto k�dov�n� 
vysta��me se stejn�mi vzory d�len� slov jako pro 
p�edchoz� k�dov�n�. Ini\TeX{} tedy nebude na��tat nov� vzory. 
Jin�mi slovy: abeceda jazyka je v~tomto k�dov�n� stejn� jako v p�edchoz�m.

P�ed k�dov�n�m m��e tak� p�edch�zet hranat� z�vorka a rovn�tko ve tvaru:

\begtt
[<jin�-jazyk>/<k�dov�n�>]=<nov�-k�dov�n�>
\endtt
%
V takov�m p��pad� je pro <nov�-k�dov�n�> pou�ita stejn� tabulka vzor�
d�len� slov, jako pro "[<jin�-jazyk>/<k�dov�n�>]". D�le�it�: v parametrech
"\loadpatterns" mus� b�t tabulky vzor� d�len� slov pro <jin�-jazyk> zavedeny
d��ve, ne� pro pr�v� deklarovan� jazyk, jinak z�st�v� <nov�-k�dov�n�>
s~pr�zdnou tabulkou. 

M�sto "[<jin�-jazyk>/<k�dov�n�>]=" m��e b�t uvedeno jen "[]=", co�
znamen�, �e <nov� k�dov�n�> bude m�t pr�zdnou tabulku vzor� d�len�, 
kterou LANG rezervuje pod ��slem 255.

P��kaz "\loadpatterns"\inl[loadpatterns]
na�te vzory d�len� vyjmenovan�ch jazyk�. 

\begtt
\loadpatterns <seznam-zkratek-jazyk�> ;
\endtt

Zkratky jazyk� jsou odd�leny mezerami a p�ed ukon�ovac�m st�edn�kem
mus� b�t tak� mezera. Za zkratkou jazyka m��e
n�sledovat "{<aktu�ln�-seznam-k�dov�n�>}" odd�len� od p�edchoz� i
n�sleduj�c� zkratky jazyka mezerou. Jestli�e za zkratkou jazyka nen�
uveden "{<aktu�ln�-seznam-k�dov�n�>}", pak se na�tou vzory d�len� pro
v�echna k�dov�n� ze <seznamu-k�dov�n�>. Pokud ale za zkratkou
n�sleduje "{<aktu�ln�-seznam-k�dov�n�>}", na�tou se vzory d�len� podle
tohoto aktu�ln�ho seznamu. P�edpokl�d� se, �e aktu�ln� seznam k�dov�n�
je podmno�inou seznamu k�dov�n� a �e jej pou�ijeme v p��pad�, kdy
chceme na��st men�� po�et tabulek vzor� d�len�, proto�e �et��me pam�t�
\TeX{}u. V~<aktu�ln�m-seznamu-k�dov�n�> je mo�no pou��t stejn�ch
syntaktick�ch pravidel (s~rovn�tky a hranat�mi z�vorkami), jako bylo
vysv�tleno v��e pro <seznam-k�dov�n�> u p��kazu "\declarelang".

P��kaz "\loadpatterns" p�esn� d�l� toto:

\begitems
* Zalo�� novou skupinu ("\bgroup")
* Pro ka�d� jazyk ze <seznamu-zkratek-jazyk�> projde <seznam-k�dov�n�>
  dan�ho jazyka (resp. <aktu�ln�-seznam-k�dov�n�>, pokud je za
  zkratkou jazyka uveden).
  Ka�d� takto vytvo�en� dvojici <jazyk>/<k�dov�n�> p�id�l� tabulku
  vzor� d�len� slov zp�sobem popsan�m n��e.
* Ukon�� skupinu ("\egroup")
\enditems

\noindent
Pro ka�dou dvojici <jazyk>/<k�dov�n�> d�l� "\loadpatterns" toto:

\begitems
* Je-li k�dov�n� ozna�eno samotn�m rovn�tkem, p�id�l� dvojici <jazyk>/<k�dov�n�>
  tabulku vzor� d�len� z p�edchoz� dvojice a �innost pro tuto dvojici 
  <jazyk>/<k�dov�n�> kon��. 
* Jestli�e <k�dov�n�> bylo deklarov�no pomoc� z�pisu "[...]=<k�dov�n�>", pak p�id�l�
  dvojici <jazyk>/<k�dov�n�> tabulku, kter� je vyzna�ena v hranat�
  z�vorce. �innost pro tuto dvojici <jakyk>/<k�dov�n�> kon��.
* Pokud byla pro danou dvojici <jazyk>/<k�dov�n�> u� tabulka vzor� d�len� p�id�lena,
  vyp��e varov�n� a vzory d�len� znovu nena��t�.
* Zalo�� dal�� skupinu ("\begingroup").
* Nastav� "\fotenc" podle <k�dov�n�>.
* P�e�te soubor "hyph-<lang>.tex". Tam se p�edpokl�d� deklarace
  "\patterns" a p��padn� "\hyphenation". Pokud nejsme v ini\TeX{}u,
  p��kaz "\patterns" ohl�s� chybu.
* Ukon�� skupinu ("\endgroup")
* Dvojici <jazyk>/<k�dov�n�> p�id�l� st�vaj�c� hodnotu "\language".
* Zv�t�� "\language" o jedni�ku a p�ech�z� na dal�� dvojici <jazyk>/<k�dov�n�>.
\enditems
  
Skute�nost, �e jsou p��kazy "\patterns" a "\hyphenation" uvnit� skupin,
n�m nevad�, proto�e jejich p�i�azen� je glob�ln�. 

Soubory "hyph-<lang>.tex" by m�ly obsahovat p��kaz\inl[declarehyphentable]

\begtt
\declarehyphentable[<jazyk>/<k�dov�n�>]
\endtt
%
kter� podle aktu�ln� hodnoty "\fotenc" m��e p�ed skute�n�m na�ten�m
"\patterns" zav�st konverzn� tabulku. Pro r�zn� "\fotenc" se tedy
nastav� r�zn� konverzn� tabulky, tak�e opakovan�m na�ten�m stejn�ho
souboru "hyph-<lang>.tex" dost�v�me pro r�zn� "\fotenc" r�zn� vzory
d�len�. O~to �lo. Podrobn�ji se o t�to v�ci zmi�uji
v~sekci..., kde je seznam doporu�en�, jak by m�l soubor
"hyph-<jazyk>.tex" vypadat.

P��kaz "\loadpatterns" je mo�n� pou��t opakovan� k na�ten� vzor�
d�len� dal��ch jazyk�. Nap��klad v souboru "langdef.tex"
m��eme na��st jen vzory d�len� \uv{z�kladn�ch jazyk�}, zat�mco 
v n�jak�m extern�m souboru, kter� generuje nap��klad instala�n� program, m��eme
pou��t "\loadpatterns" se seznamem dal��ch jazyk�. Tyto jazyky si
u�ivatel nap��klad vybral v instala�n�m programu pomoc� n�jak�ho
klikac�ho rozhran�. 


\subsec P��kaz {\tt\char`\\setlang}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Nyn� podrobn� pop��eme, co d�l� p��kaz 
"\setlang[<jazyk>/<k�dov�n�>]"\inl[setlang]

\begitems
* Je-li n�jak� parametr pr�zdn�, dopln� jej akt�ln� hodnotou
  jazyka (resp. k�dov�n�).
* Je-li nov� <jazyk> shodn� se st�vaj�c�m a z�rove� nov� <k�dov�n�>
  shodn� se st�vaj�c�m, ned�l� nic a kon��. V�jimkou z tohoto pravidla
  je prvn� spu�t�n� "\setlang", kter� v�dy provede nastaven� jazyka
  a k�dov�n�: p�i pr�zdn�ch parametrech pou�ije jazyk "none" a
  k�dov�n� "8t", p�i pr�zdn�m <k�dov�n�> a nepr�zdn�m <jazyku> pou�ije
  v�choz� k�dov�n� <jazyka>.
* Pokud je <jazyk> nedeklarovan�, vyp��e chybov� hl�en� a kon��.
* Je-li <k�dov�n�> nedeklarovan� nebo nen� uvedeno 
  v~<seznamu-k�dov�n�> pro dan� jazyk,
  vyp��e varov�n� a nastav� v�choz� na defaultn� k�dov�n�
  dan�ho jazyka.
* Jestli�e do�lo ke zm�n� k�dov�n� nebo jazyka,
  nastav� tabulku vzor� d�len� slov podle zvolen�ho jazyka
  a k�dov�n�. Pokud tabulka nebyla v dob� iniTeXu na�tena, 
  vyp��e varov�n� a nastav� tabulku "\defaulthyphentable".
* Jestli�e byl zm�n�n jazyk, pak spust� "\afterlangstack", kter�
  obsahuje z�sobn�k <p��kaz�> z "\afterlang" pro deaktivaci
  p�edchoz�ho jazyka. 
* Byl-li zm�n�n jazyk, nastav� 
  "\def\currentlang{<jazyk>}"\inl[currentlang] a "\currentdialect=0" a d�le
  spust� "\langinit" nov�ho jazyka.\inl[currentdialect] 
  P�ed p��kazem "\langinit" je�t�
  zkontroluje, zda byl na�ten stylov� soubor jazyka a pokud ne, na�te
  jej. (P�i �ten� m� "\globaldefs=1" a ignoruje mezery na konc�ch ��dk�.)
* Jestli�e nebylo zm�n�no <k�dov�n�>, pak kon��.
* Spust� p��kaz "\lccodesback", kter�
  vr�t� "\lccode" a "\uccode" do v�choz�ho stavu podle plain\TeX{}u (viz sekce...).
* Je-li pou�ito IENC, spust� "\unsetienc[\ienc/\fotenc]" (podle star�ho "\fotenc").
* Provede "\def\fotenc{<k�dov�n�>}". Nebyl-li na�ten soubor
  "ofs-<k�dov�n�>.tex", na�te jej.
  (P�i �ten� m� "\globaldefs=1" a ignoruje mezery na konc�ch ��dk�.)
* Provede "\global\let\gfotenc=\fotenc" a "\aftergroup\resetcodes". D�vod
  tohoto kroku je vysv�tlen v sekci~...
* Je-li pou�ito IENC, provede "\setienc [\ienc/\fotenc]".
* Spust� p��kaz "\<k�dov�n�>:lccodes", kter�
  je deklarovan� pomoc� "\modifydef" v~souboru "ofs-<k�dov�n�>.tex".
  T�m by se m�ly spr�vn� nastavit "\lccode", "\uccode" a "\catcode"
  P�i jejich nastaven� je p�echodn� "\globaldefs=1". Podrobn�ji o~tomto
  kroku viz sekci~...
* Pro dal�� pot�ebu nastav� <k�dov�n�> jako v�choz� k�dov�n� dan�ho jazyka.
* N�sleduje-li t�sn� za "\setlang" p��kaz "\setfonts" (bez mezery), provede ho,
  jinak provede "\setfonts[/]".
* Pokud "\setfonts" skon�il ne�sp�n�, vyp��e varov�n� a 
  nastav� v�choz� rodinu podle dan�ho k�dov�n�. Pro tuto rodinu
  znovu provede "\setfonts".
\enditems

Je vid�t, �e za p��kazem "\setlang" m��e okam�it� n�sledovat
"\setfonts" a pak se m�n� parametry "\setlang" a "\setfonts"
spole�n�. P��kaz "\setfonts" ale nesm� b�t ukryt� uvnit� makra.
Dvojice:

\begtt
\setlang[<jazyk>/<k�dov�n�>]\setfonts[<Rodina>-<varianta>/<velikost>]
\endtt
%
n�m tedy umo��uje p�ep�nat v p�tirozm�rn�m prostoru parametr�, p�i�em�
p�ep�nat m��eme t�eba jen pod�l n�kter� z p�ti os. Pokud po�adavek na
p�epnut� nen� mo�n� splnit (nap�. <Rodina> neobsahuje abecedu
po�adovan�ho jazyka), LANG a OFS nastav� p��padn� jin� <k�dov�n�>
a <Rodinu> a vyp��e o tom varov�n�. 


\subsec P��kaz {\tt\char`\\langdef}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Z�kladn�m p��kazem pou��van�m ve stylov�ch souborech je "\langdef",\inl[langdef]
kter� m� dv� mo�nosti z�pisu:

\begtt
\langdef (<seznam jazyk�>) \<makro> <maska parametr�> {<t�lo makra>}
\endtt
nebo
\begtt
\langdef \<makro> <maska parametr�> {<t�lo makra>}
\endtt
%
Pokud se pou�ije zkr�cen� verze z�pisu (bez <seznamu jazyk�> v~z�vorce), "\langdef" si
dopln� <seznam jazyk�> z makra "\langdeflist".\inl[langdeflist]
Parametr <seznam jazyk�> je seznam zkratek jazyk� odd�len�ch od sebe
mezerami.

P��kaz "\langdef" definuje "\<makro>" podobn�, jako to d�l� "\def".
To znamen�, �e <maska parametr�> a <t�lo definice> se zapisuj� stejn�
jako p�i pou�it� primitivu "\def". Rozd�l je ale v tom, �e "\makro"
m� dan� v�znam jen pro jazyky ze <seznamu jazyk�>. Jinde m��ete pou��t
"\langdef" stejn�ho "\<makra>" pro jin� jazyky, ani� by do�lo 
k p�ekr�v�n� definic. Typick�m p��kladem pou�it� "\langdef" je
definov�n� makra "\today" pro r�zn� jazyky r�zn�.

Chceme-li definovat "\<makro>" s prefixem (smysl m� asi jen prefix
"\long"), pak je nutno p�ed pou�it�m makra napsat
"\let\langdefprefix=\<prefix>". Po ka�d�m proveden� "\langdef"
se vrac� "\langdefprefix" na hodnotu "\relax".

Pokud u�ivatel pou�ije ve sv�m dokumentu "\<makro>" definovan� pomoc�
"\langdef", pak se pou�ije ta hodnota makra, kter� odpov�d� aktu�ln�
zvolen�mu jazyku. Jestli�e je "\<makro>" definovan� jen pro jin�
jazyky ne� aktu�ln� zvolen�, LANG je�t� zkontroluje, zda 
"\<makro>" bylo definovan� pomoc� "\langdef (*) \<makro>". Pokud ano, spust� toto
makro. Jinak LANG vyp��e varov�n� o~nedefinovan�m
"\<makru>" pro aktu�ln� jazyk a "\<makro>" je ignorov�no.

Pop��eme nyn� podrobn�, co "\langdef" d�l�. Nejprve 
definuje "\<makro>" jako "\langcommand{<makro>}".
To d�l� pro v�echny
jazyky stejn�, tak�e nedoch�z� k~p�ekr�v�n� definic stejn�ho makra.
D�le provede:

\begtt
\langdefprefix\def \c:><makro>(<jazyk>) <maska parametr�> {<t�lo makra>}
\endtt
%
kde <jazyk> je prvn� jazyk ze <seznamu jazyk�> a "\c:><makro>(<jazyk>)"
je kontroln� sekvence, kterou zde definujeme.
Pokud <seznam jazyk�> obsahuje dal�� jazyky, "\langdef" pro ka�d� 
z~nich je�t� provede

\begtt
\let \c:><makro>(<dal�� jazyk>) = \c:><makro>(<jazyk>)
\endtt

Dal�� pr�ci provede a� p��kaz "\langcommand{<makro>}"\inl[langcommand]
v~dob� pou�it�
"\<makra>". Tento p��kaz p�ekontroluje, zda je definov�no makro
"\c:><makro>(\currentlang)". Pokud je definov�no, pak toto makro spust�.
Nen�-li toto makro definov�no, pokus� se spustit
"\c:><makro>(*)". Pokud ani toto makro nen� 
definov�no, vyp��e chybov� hl�en� pou�it�m p��kazu 
"\langcommandwarn{<makro>}".\inl[langcommandwarn]

M�-li "\expandaction" hodnotu "\noexpand", pak "\langcommand{<makro>}"
zp�tn� expanduje na "\<makro>", tak�e je \uv{robustn�} v La\TeX{}ov�m
smyslu tohoto slova. O~triku s~"\expandaction" je �e�eno v�ce 
v~dokumentaci k~OFS v~sekci~3.2.

P��kaz "\langdef" odm�t� p�edefinovat kontroln� sekvence, kter� byly
definov�ny jinak ne� pomoc� "\langdef". P�i pokusu o~p�edefinov�n�
takov� sekvence "\langdef" vyp��e varov�n� pomoc� p��kazu
"\langdefwarn\<makro>"\inl[langdefwarn]. 
P�esn�ji: m�-li kontroln� sekvence "\<makro>"
jin� v�znam ne� "\undefined", "\relax" nebo "\langcommand{<makro>}",
pak "\langdef" ponech� "\<makro>" nezm�n�no a vyp��e jen varov�n�.
D�vod tohoto opat�en� je ten, �e ve stylov�ch souborech m��e b�t
definov�no pomoc� "\langdef" plno maker, o~nich� u�ivatel v�bec netu��
a jejich� n�zvy m��e u�ivatel m�t ve sv�ch vlastn�ch
definic�ch. P��kaz "\langdef" v takov�m p��pad� ct� u�ivatelovy
definice. Podobn� opat�en� je uplatn�no na "\characterdef" z~OFS.


\subsec P��kaz {\tt\char`\\setdialect}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

P��kaz "\setdialect[<n��e��>]"\inl[setdialect] 
spolupracuje s makrem "\whichdialect", kter� m��e b�t 
pomoc� "\langdef"\inl[whichdialect] 
(z�visle na pou�it�m jazyku) definov�no ve stylov�m souboru.
Pravidla definice makra "\whichdialect" jsou uvedena v~sekci...

Nen�-li makro "\whichdialect" pro aktu�ln� jazyk v�bec deklarov�no,
pak p��kaz
"\setdialect[<n��e��>]" vyp��e jen varov�n� a kon��. Jinak nastav� numerick�
registr "\currentdialect"\inl[currentdialect] na ��selnou hodnotu
<n��e��>, kter� je deklarov�na v makru "\whichdialect". D�l� to tak,
�e nastav� "\currentdialect=0" a d�le v cyklu zkou�� spustit
"\whichdialect", kde p�i ka�d�m dal��m pokusu zv�t�� "\currentdialect"
o~jedni�ku.  Cyklus je ukon�en v p��pad�, kdy "\whichdialect" vr�t�
<n��e��> stejn� jako v~parametru p��kazu "\setdialect". Cyklus je
ukon�en tak� tehdy, kdy� "\whichdialect" vr�t� pr�zdnou hodnotu. 
V~tomto druh�m p��pad� je�t� p��kaz "\setdialect" vr�t� hodnotu
"\currentdialect" do stavu, ve kter�m byla p�ed zavol�n�m p��kazu, a
vyp��e varov�n�, �e <n��e��> nen� pro aktu�ln� jazyk
deklarov�no. V�echna p�i�azen� jsou lok�ln�.

Jestli�e pou�ijeme "\setdialect[]", pak p��kaz "\setdialect" prov�d� stejnou
�innost jako je uvedena v��e. Nav�c ka�dou nepr�zdnou n�vratovou
hodnotu makra "\whichdialect" p�id� do makra "\tmpc" a odd�luje je
mezerou. V tomto p��pad� nep��e ��dn� varov�n�.


\subsec Tabulky dvojic znak�, z nich� prvn� je aktivn�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

V n�kter�ch jazyc�ch se pracuje s tzv. zkratkami (shorthands), viz t�
sekci~... LANG umo��uje ve stylov�ch souborech deklarovat tabulky maker
dvojznak� nez�visle pro ka�d� jazyk zvlṻ. U�ivatel pak m��e nastavit
prvn� znak dvojznak� jako aktivn� a definovat jej jako "\expdoublechar".
T�m za�nou dvojznaky expandovat na deklarovan� makra v~z�vislosti 
na aktu�ln�m jazyku. P��klad:

\begtt
\def\langdeflist {de de2} % uk�zka ze stylov�ho souboru lang-de.tex
\doublechardef "u{\"u}
\doublechardef "o{\"o}
\doublechardef "s{\ss}
... atd.
\def\langdeflist {hu}     % uk�zka ze stylov�ho souboru lang-hu.tex
\doublechardef "u{\H u}
\doublechardef "o{\H o}
... atd.
\activedef "{\expdoublechar"}  % toto provede makro \activechar"
\endtt

Po proveden� "\activedef"{\tt\char`\"} se stane uvozovka aktivn�.
Pokud m� "\currentlang" hodnotu "de" nebo "de2", pak dvojice
{\tt\char`\"u} expanduje na {\tt\char`\\\char`\"u}, zat�mco p�i "\currentlang"
s hodnotou "hu" expanduje tat� dvojice na "\H u". P�i jin�m,
"\currentlang" expanduje samotn� uvozovka na sv�j neaktivn� prot�j�ek
za kter�m n�sleduje znak \clqq"u"\crqq{} jako oby�ejn� znak.

Vysv�tl�me si nyn� podrobn�, jak je to ud�l�no. Makro 
"\doublechardef"\inl[doublechardef]
m� dv� varianty z�pisu stejn� jako "\langdef":

\begtt
\doublechardef (<seznam jazyk�>) <znak1><znak2><maska parametr�>{<makro>}
\endtt
nebo
\begtt
\doublechardef <znak1><znak2><maska parametr�>{<makro>}
\endtt
%
V p��pad� varianty bez explicitn�ho "<seznamu jazyk�>" se pou�ije
<seznam jazyk�> z~makra "\langdeflist".
<Maska parametr�> je samoz�ejm� nepovinn� a v�t�inou se nepou��v�,
proto�e obvykl� zkratky expanduj� na makra bez parametr�.

P��kaz "\doublechardef" provede:

\begtt
\def \d:><znak1><znak2>(<jazyk>) <maska parametr�>{<makro>}
\endtt
%
kde "\d:><znak1><znak2>(<jazyk>)" je nov� definovan� kontroln� sekvence
a <jazyk> je prvn� jazyk ze <seznamu jazyk�>. Pro ostatn� jazyky 
makro provede ztoto�n�n� "\d:><znak1><znak2>(<dal�� jazyk>)" se
sekvenc� "\d:><znak1><znak2>(<jazyk>)" pomoc� "\let".

M�sto <znaku2> je mo�no pou��t symbol "#1":
\begtt
\doublechardef <znak1>#1<maska dal��ch parametr�>{<makro>}
\endtt
%
V tomto p��pad� "\doublechardef" provede:

\begtt
\def \d:><znak1>(<jazyk>) #1<maska dal��ch parametr�>{<makro>}
\endtt
%
a provede ztoto�n�n� pro ostatn� jazyky ze seznamu parametr�.

Informace ulo�en� pomoc� "\doublechardef" vyu�ije makro
"\expdoublechar"\inl[expdoublechar]
nebo "\ssdoublechar".\inl[ssdoublechar] Ob� makra d�laj� zhruba tot�.
P�e�tou dva n�sleduj�c� znaky <znak1> a <znak2> a expanduj� na 
prvn� definovanou sekvenci z n�sleduj�c�ho seznamu sekvenc�:

\begtt
\d:><znak1><znak2>(\currentlang)
\d:><znak1>(\currentlang)
\d:><znak1><znak2>(*)
\d:><znak1>(*)
\endtt
%
Jedn�-li se o~sekvenci, v~jej�m� n�zvu
chyb� <znak2>, pak se p�ipoj� za tuto sekvenci nav�c "{<znak2>}", 
tj.~<makro> m��e pracovat se <znakem2> jako s~parametrem "#1".

Nen�-li ��dn� z uveden�ch sekvenc� definov�na, makra "\expdoublechar" nebo
"\ssdoublechar" expanduj� na neaktivn� <znak1> a p�ipoj� za n�j <znak2>.
Na kategori�ch <znaku1> a <znaku2> nez�le��.

Makro "\expdoublechar" prov�d� ve�kerou svou �innost na �rovni expand
procesoru. Nen� tedy ohro�ena tvorba ligatur a kerningov�ch p�r� 
s~okoln�mi znaky ani d�len� slov, pokud se makro vyskytuje uvnit�
slova. Bohu�el, expand procesor neum� o�et�it, zda n�hodou nen�
<znak2> mezera. Mezeru bez varov�n� ignoruje a za <znak2> pova�uje a�
prvn� nemezerov� znak. 

Pokud se n�m to nel�b�, lze pou��t m�sto "\expdoublechar"
makro "\ssdoublechar" (space-sensitive double-char). Toto makro
pracuje s "\futurelet", tj. vyu��v� p��kazy hlavn�ho procesoru.
Bohu�el, pak nefunguj� ligatury s okoln�mi znaky ani kerningov�
p�ry. Na druhou stranu makro neignoruje mezeru jako <znak2> a je
odoln� i proti symbol�m \clqq"{"\crqq{} nebo \clqq"}"\crqq{} 
v m�st� <znaku2>. Pro tyto speci�ln� p��pady m��eme dokonce deklarovat
vlastn� <makro> pomoc�:

\begtt
\doublechardef <znak1>\space  <maska parametr�>{<makro>}
\doublechardef <znak1>\bgroup <maska parametr�>{<makro>}
\doublechardef <znak1>\egroup <maska parametr�>{<makro>}
\endtt

P��kaz "\ssdoublechar" nejprve zkontroluje, zda <znak2> nen� n�kter�
z~t�chto znak�: \uv{mezera}, \clqq"{"\crqq{} nebo \clqq"}"\crqq. 
Pokud ano, pak pozm�n� <znak2>
na odpov�daj�c� kontroln� sekvenci: "\space", "\bgroup" nebo "\egroup"
a spust� "\expdoublechar". Nyn� u� bude na�ten <znak2> do parametru
maker bez probl�m�.

Chceme-li deklarovat vlastn� makro, kter� reaguje na 
\clqq"{"\crqq{} nebo \clqq"}"\crqq{}
v~m�st� <znaku2>, pak bude asi pot�eba, aby makro expandovalo (mimo
jin�) na odpov�daj�c� "\bgroup" resp. "\egroup", jinak by mohl z�stat
dokument p�i pou�it� takov�ho makra nevybalancovan�.

Makra "\expdoublechar" i "\ssdoublechar" jsou vybavena
testem na to, zda je kontroln� sekvence "\expandaction" rovna
"\noexpand". Pokud ano, 
makra expanduj� na "\noexpand<znak1>", za kter�m n�sleduje <znak2>.

Makra "\expdoublechar" a "\ssdoublechar" pracuj� stejn� v textov�m i
matematick�m m�du, pokud pro <znak1> nen� deklarov�no matematick�
makro pomoc�:

\begtt
\doublechardef <znak1>\mathchar <maska parametr�>{<matematick� makro>}
\endtt

V takov�m p��pad� "\expdoublechar<znak1>" i
"\ssdoublechar<znak1>" expanduj� v~matematick�m m�du na 
<matematick� makro>, zat�mco v~textov�m m�du se chovaj� zp�sobem
popsan�m v��e.

Proto�e v��e uveden� <matematick� makro> se pou�ije v�dy bez
z�vislost� na hodnot� <znaku2>, je n�kdy v�hodn� je v�bec nedeklarovat
a m�sto toho v�tvit na p��pad matematick�ho m�du jednotliv� u ka�d�ho
<makra> deklarovan�ho pomoc� "\doublechardef". M��eme k tomu vyu��t
p��kaz "\textormath{<text-makro>}{<math-makro>}",\inl[textormath] 
kter� expanduje na odpov�daj�c� makro podle toho, zda je \TeX{} 
v~textov�m nebo matematick�m m�du. Tato makra mohou za sebou okam�it�
��st dal�� znaky ze vstupu bez nutnosti p�eskakovat "\else" nebo
"\fi". P��klad pou�it� najdeme v souboru "lang-de.tex".



\subsec Pr�ce s aktivn�mi znaky
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

V uk�zce na za��tku p�edchoz� sekce byl zm�n�n p��kaz
"\activedef"\inl[activedef].

\begtt
\activedef <znak><maska parametr�>{<makro>}
\endtt

P��kaz "\activedef" nastav� <znak> jako aktivn� a d�le jej definuje stejn�,
jako by to ud�lal primitiv "\def". Pokud se <znak> vyskytuje 
v~masce parametr� nebo v t�le makra, pak tam m� je�t� svoji p�vodn�
(pravd�podobn� neaktivn�) kategorii. P��kaz definuje makro p��mo�a�e,
tj. nen� zde implementov�na z�vislost na hodnot� "\currentlang".

P�i tvorb� maker, kter� pracuj� s aktivn�mi znaky, se m��e hodit
pou��t p��kaz "\maybeactive"\inl[maybeactive], kter� m� dva parametry:

\begtt
\maybeactive <token1><token2>
\endtt
%
Makro ponech� <token1> beze zm�ny, ale ne� mu p�ed� ��zen�, m��e
zm�nit kategorii <tokenu2> na aktivn�. Ud�l� to pouze tehdy, 
kdy� znak s ASCII hodnotou <tokenu2> m� v dob� �innosti makra 
aktivn� kategorii. Jinak ponech� <token2> beze zm�ny.
P��klad pou�it�:

\begtt
\def\test {\maybeactive \ifx *\tmpa ...\else ...\fi}
\endtt
%
P��klad ukazuje, jak m��eme porovn�vat znak
v~"\tmpa" (t�eba tam byl ulo�en pomoc� "\futurelet") s~konkr�tn�m znakem.
Nech� v dob� definice makra "\test" m� hv�zdi�ka kategorii~12.
Je-li pak p�ed spu�t�n�m makra "\test" provedeno 
"\let\tmpa=*", pak "\ifx" vr�t� hodnotu true nez�visle na tom, zda 
v tomto okam�iku je kategorie hv�zdi�ky~12 nebo~13.

Makro "\maybeactive" pracuje na �rovni hlavn�ho procesoru
a vyu��v� pomocn� kontroln� sekvence "\tmpc" a "\tmpd".


\subsec Princip nastavov�n� {\tt\char`\\lccode} znak�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

P�ipome�me, �e "\setlang" p�i zm�n� k�dov�n� font� spust�
"\lccodesback" a d�le p��kaz "\fotenc:lccodes",
kter� m� b�t deklarov�n v souboru "ofs-\fotenc.tex".
T�m by m�ly b�t nastaveny "\lccode", "\uccode" a p��padn� "\catcode"
podle nov�ho k�dov�n�. Nastaven� se provede glob�ln�, proto�e v dob�
spu�t�n� t�chto maker je p�echodn� nastaveno "\globaldefs=1".

P��kaz "\fotenc:lccodes" by m�l definovat nov� v�znam makra
"\lccodesback"\inl[lccodesback], kter� by m�lo obsahovat p��kazy, pomoc�
nich� se nov� nastaven� "\lccode", "\uccode" a p��padn� "\catcode"
vr�t� do p�vodn�ho stavu podle standardu z ini\TeX{}u a souboru
"plain.tex". P���t�, a� bude "\setlang" p�ep�nat na dal�� k�dov�n�, se
toto makro "\lccodesback" pou�ije, tak�e nov� makro "\fotenc:lccodes"
m��e p�edpokl�dat, �e v�choz� stav "\lccode", "\uccode" a "\catcode"
je podle ini\TeX{}u a plainu. P�i prvn�m nastaven� k�dov�n� (prvn�
vol�n� "\setlang" v dokumentu) je "\lccodesback" nastaveno na "\relax",
proto�e v�choz� stav k�d� je skute�n� podle ini\TeX{}u a podle plainu.

P��kaz "\fotenc:lccodes" m��e pro nastaven� k�d� vyu��t n�sleduj�c�
p�ipraven� makra:

\begitems
* "\lccodes<znak1><znak2>"\inl[lccodes] -- nastav� "\lccode" <znaku1> i <znaku2> na
  <znak1> a nastav� "\uccode" <znaku1> i <znaku2> na <znak2>. Pokud
  maj� <znak1> anebo <znak2> kategorii 12, nastav� jim kategorii 11.
* "\lccodesloop<znak1><znak2><znak3>"\inl[lccodesloop] -- provede cyklus, kter�
  spou�t� n�sleduj�c� p��kazy: "\lccodes<znak1><znak3>", "\lccodes<znak1+1><znak3+1>",
  atd. a� po posledn� p��kaz "\lccodes<znak1+k=znak2><znak3+k>". 
  Jin�mi slovy: cyklus se prov�d� p�es \uv{mal� p�smena} v rozsahu
  <znak1> a� <znak2>, p�i�em� \uv{velk� p�smeno} pro <znak1> je
  <znak3> a dal�� \uv{velk� p�smena} maj� od \uv{mal�ch p�smen} st�le
  stejn� odstup.
\enditems

V p��kazu "\fotenc:lccodes" je pot�eba dodr�ovat n�sleduj�c� pravidlo
pro nastaven� "\catcode":
zm�n�me kategorii 12 na 11 pr�v� tehdy, kdy� je pro dan�
znak nastaveno nenulov� "\lccode". M�-li znak kategorii 13 (je
aktivn�) nebo jakoukoli jinou kategorii, nech�me ji nezm�n�nu. Jde o
to, �e p�ed zavol�n�m "\fotenc:lccodes" je zavol�no p��kazem
"\setlang" p��padn� nastaven� vstupn�ho p�ek�dov�n� bal��kem
IENC. Tento bal��ek, pokud nem� k dispozici enc\TeX{} a pokud mus�
skute�n� prov�st p�ek�dov�n� vstupu na odli�n� intern� hodnoty, nastav�
pot�ebn�m znak�m aktivn� kategorii. Tuto kategorii tedy mus�me 
v p��kazu "\fotenc:lccodes" respektovat a nesm�me ji m�nit.
P�ipraven� makra "\lccodes" a "\lccodesloop" toto pravidlo dodr�uj�.

P�i definici p��kazu "\lccodesback" m��eme pou��t n�sleduj�c� p��kazy:

\begitems
* "\zerolccodes<znak1><znak2>"\inl[zerolccodes] -- nastav� v�em znak�m v rozsahu
   <znak1> a� <znak2> nulov� "\lccode" a "\uccode". Pokud m� znak
   kategorii 11, nastav� mu kategorii 12.
* "\plainlccodes"\inl[plainlccodes] -- nastav� "\lccode", "\uccode" znak�m v rozsahu
  "^^00" a� "^^7f" podle hodnot obvykl�ch pro plain\TeX{}. Kategorii
   nastav� na 12 u pot�ebn�ch znak� (podle plain\TeX{}u) jen tehdy,
   kdy� p�vodn� kategorie znaku je 11.
\enditems 

Nyn� vysv�tl�me, jak se m�n� nastaven� "\lccode" atd. p�i opou�t�n�
skupin nebo p�i nastaven� nov�ho k�dov�n� p��kazem "\setlang". Tento
mechanismus je spole�n� s nastavov�n�m p�ek�dovac�ch tabulek bal��kem
IENC. Tyto tabulky jsme ob�as nuceni nastavit jen glob�ln� (v~enc\TeX{}u
to ani nijak nejde), tak�e jsem se rozhodl i "\lccode" atd. nastavit 
glob�ln� a o�et�it p�echody mezi skupinami n�sleduj�c�m trikem.

P��kaz "\setlang" p�i zm�n� k�dov�n� glob�ln� definuje makro 
"\gfotenc"\inl[gfotenc]
hodnotou nov�ho k�dov�n�. Makro "\fotenc" je definov�no stejn�,
ale jenom lok�ln�. D�le "\setlang" provede 
"\aftergroup\resetcodes".

Makro "\resetcodes"\inl[resetcodes] p�i sv�m spu�t�n� na konci skupiny
provede n�sleduj�c� �innost:

\begitems
* Je-li "\fotenc" rovno "\gfotenc", ned�l� nic a kon��.
* Spust� "\lccodesback" (s p�echodn�m "\globaldefs=1").
* Je-li pou�it bal��ek IENC, spust� "\unsetienc [\ienc/\gfotenc]".
* Je-li pou�it bal��ek IENC, spust� "\setienc [\ienc/\fotenc]".
* Spust� "\fotenc:lccodes" (s p�echodn�m "\globaldefs=1").
* Provede "\global\let\gfotenc=\fotenc".
\enditems

Uva�ujme p��klad:

\begtt
\setlang [/A]   % provede \aftergroup\resetcodes, toto \resetcodes 
                % se nikdy nespust�, proto�e nejsme uvnit� skupiny.
                % nastav� IENC podle A, 
                % spust�  \A:lccodes, kter� (mj.) definuje \lccodesback
                % je \fotenc=A, \gfotenc=A
{  ...          % je st�le \fotenc=A, \gfotenc=A
  \setlang [/B] % provede \aftergroup\resetcodes
                % spust� \lccodesback definovan� p�edchoz�m \A:lccodes        
                % ukon�� tabulku IENC podle A a nastav� ji podle B 
                % spust� \B:lccodes, kter� (mj.) definuje \lccodesback
  ...           % je \fotenc=B, \gfotenc=B
  \setlang [/C] % provede \aftergroup\resetcodes
                % spust� \lccodesback definovan� p�edchoz�m \B:lccodes        
                % ukon�� tabulku IENC podle B a nastav� ji podle C  
                % spust� \C:lccodes, kter� (mj.) definuje \lccodesback
  ...           % je \fotenc=C, \gfotenc=C
}               % je \fotenc=A, \gfotenc=C
                % prvn� \resetcodes (z \aftergroup\resetcodes) provede:         
                %   spust� \lccodesback definovan� p�edchoz�m \C:lccodes
                %   ukon�� tabulku IENC podle C a nastav� ji podle A
                %   spust� \A:lccodes, kter� (mj.) definuje \lccodesback
                %   nastav� \gfotenc=A
                % druh� \resetcodes neprovede nic, proto�e u� je
                % \fotenc=A, \gfotenc=A 
\endtt

Z u�ivatelsk�ho pohledu se tedy k�dy nastavuj� lok�ln�, a�koli ve
skute�nosti jsou nastaveny glob�ln� a v makrech se star�me o jejich
spr�vn� p�enastaven�.

V popisu �innosti makra "\resetcodes" jsme je�t� nezm�nili n�sleduj�c�
vlastnost: pokud m� makro "\langisused"\inl[langisused] v�znam
"\undefined", pak "\resetcodes" zavol� "\setlang[/]". Prvn�
zavol�n� makra "\setlang" nastav� lok�ln� pro sekvenci "\langisused" 
v�znam "\relax", tak�e k v��e zm�n�n� podm�nce dojde jen tehdy, kdy� prvn�
pou�it� p��kazu "\setlang" bylo provedeno ve skupin� a \TeX{} je zrovna
na konci t�to skupiny. V~t�to situaci je u� velmi obt��n� se vr�tit 
k p�vodn�m makr�m z "plain.tex", nebo� k�dovac� soubory byly p�e�teny
s glob�ln�mi definicemi. Z�staneme tedy rad�ji u v�choz�ho k�dov�n� 
"8t" a jazyka "none". To v tuto chv�li za��d� pr�v� p��kaz "\setlang[/]".


\sec Pravidla vytv��en� podp�rn�ch soubor� pro LANG
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsec Pravidla pro soubory {\tt hyph-\levaskoba jazyk>.tex}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

P�vodn� jsem po��tal s t�m, �e LANG bude ��st soubory
"ofs-<k�dov�n�>.tex" je�t� p�ed na�ten�m souboru "hyph-<jazyk>.tex". 
V takov�m p��pad� by sta�ilo pou��vat pro speci�ln� znaky jazyka na k�dov�n� 
nez�visl� \TeX{}ov� sekvence.  Podobn� je to ud�l�no nap��klad ve form�tu
"csplain". Ukazuje se ale, �e i po opu�t�n� skupiny \TeX{} nech�v� 
v~pam�ti v�echny pou�it� \uv{multiletter control sequences}, p�i�em� p�i
na��t�n� soubor� "ofs-<k�dov�n�>.tex" v�ech mo�n�ch jazyk� sv�ta se 
t�chto \uv{multiletter control sequences} m��e vytvo�it docela dost. 
P�itom ve vlastn�m dokumentu v�t�� ��st t�chto
kontroln�ch sekvenc� nepou�ijeme (proto�e asi nebudeme pou��vat
v�echny jazyky). Rozhodl jsem se tedy �et�it pam� \TeX{}u a soubory
"ofs-<k�dov�n�>.tex" v dob� ini\TeX{}u nena��tat. 
Soubory "hyph-<jazyk>.tex" se tak stanou m�n� p�ehledn�, ale
to snad nevad�, proto�e se do nich stejn� nikdo ned�v�.

Soubory "hyph-<jazyk>.tex" by m�ly n�kde na za��tku obsahovat
p��kaz\inl[declarehyphentable]

\begtt
\declarehyphentable [<jazyk>/<k�dov�n�>] % for LANG package
\endtt
%
kde <jazyk> je zkratka jazyka dan�ch vzor� d�len� a <k�dov�n�> je
k�dov�n�, ve kter�m jsou tyto vzory d�len� naps�ny. P��kaz
"\declarehyphentable" zkontroluje, zda je aktu�ln� hodnota 
"\fotenc" rovna <k�dov�n�>. Pokud ano, pak nastav� v�em znak�m s~k�dy
128--255 "\lccode" rovno k�du znaku. Pokud ne, pak zavol� soubor
"h<k�dov�n�>-\fotenc.tex", ve kter�m se p�edpokl�d� nastaven�
"\lccode" znaku podle <k�dov�n�> na hodnotu podle "\fotenc".
T�m je zaru�eno spr�vn� p�ek�dov�n� obsahu "\patterns" a
"\hyphenation" na k�dov�n� podle "\fotenc", proto�e zm�n�n� \TeX{}ov�
primitivy konvertuj� v�echna data vzor� d�len� podle aktu�ln�
hodnoty "\lccode".

V~datech pro "\patterns" a "\hyphenation" je mo�n� ps�t p��mo
osmibitov� znaky podle deklarovan�ho <k�dov�n�>. Proto�e ale m��eme
m�t obavy, �e nebude v dob� ini\TeX{}u nastaven "xord/xchr" vektor na
identick� zobrazen�, je lep�� asi ps�t osmibitov� znaky v~"^^ab" notaci.

V~souborech <hyph> m��eme pro sv� pot�eby prov�d�t lok�ln� nastaven� a
definice. Bal��ek LANG po na�ten� vzor� tato nastaven� zapomene.


\subsec Probl�m p�ep�n�n� {\tt\char`\\lccode} uvnit� odstavce
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

P�i hled�n� m�st vzor� d�len� slov v odstavci \TeX{} konvertuje text
podle hodnot "\lccode" v dob�, kdy je odstavec kompletn� na�ten.
Pokud v dob� �ten� odstavce byly tyto hodnoty m�n�ny, m� nakonec vliv
jen jejich posledn� stav na konci odstavce. M��eme to pova�ovat za
chybu \TeX{}u, proto�e p�ep�n�n� vzor� d�len� slov a hodnot
"\lefthyphenmin", "\righthyphenmin" je uvnit� odstavce umo�n�no 
(do textu odstavce se vkl�daj� zna�ky, podle kter�ch se \TeX{} v~dob�
vyhled�v�n� m�st d�len� ��d�), zat�mco p�ep�n�n� hodnot "\lccode",
kter� se vzory d�len� tak� �zce souvis�, nar�� na probl�my.
Autor z�ejm� implementoval do \TeX{}u p�ep�n�n� vzor� a zapomn�l na
p�ep�n�n� hodnot "\lccode".

Je pot�eba si uv�domit, �e v��e uveden� chyba se pravd�podobn� projev� ve
velmi mal�m mno�stv� p��pad�. �asto m��eme m�nit vzory d�len�, a
p�itom v�bec nem�nit hodnoty "\lccode". Pokud m�n�me i tyto hodnoty,
pak v�t�ina textu v odstavci je stejn� napsan� mal�mi p�smeny, pro kter�
se hodnoty "\lccode" nem�n�. Velk�mi p�smeny jsou vesm�s jen zkratky,
kter� nesm�j� b�t d�leny v�bec. D�le velk�mi p�smeny za��naj� za��tky
v�t a slov, ov�em prvn� p�smeno m� pro vyhodnocen� m�st vzor� d�len�
mal� vliv, nebo� je skryto v oblasti "\lefthyphenmin". Velk� p�smena
s akcenty nebo nelatinkov� abecedy se nav�c vyskytuj� jen z��dka. Netvrd�m, �e 
k projevu chyby nikdy nedojde, jen se domn�v�m, �e to nemus� b�t tak �ast�.

Pokud chceme chybu zcela odstranit, mus�me pou��t e-\TeX{}. Ten dovol�
p�ep�nat hodnoty "\lccode" znovu v dob� hled�n� m�st d�len� slov v
odstavci. Bohu�el, tato mo�nost je naprogramov�na pon�kud nekoncep�n�:
vyu�ij� se p�i tomto p�ep�n�n� hodnoty, kter�mi byly napln�ny registry
"\lccode" v dob� generov�n� form�tu p�i �innosti p��kazu "\pattern", a
nikoli v~dob�, kdy byl postupn� na��t�n text odstavce. Sada hodnot
"\lccode" se tak st�v� ned�lnou sou��st� tabulky vzor� d�len� slov. To
n�m m�rn� komplikuje �ivot, proto�e jsme "\lccode" vyu�ili pro
konverzi na r�zn� k�dov�n� pr�v� v dob� �innosti "\patterns" (viz
p�edchoz� sekce).  Bal��ek LANG m�, nicm�n�, pro tento probl�m �e�en�:
pokud je pou�it e-\TeX{}, pak lok�ln� p�edefinuje na za��tku na��t�n�
vzor� d�len� slov primitiv "\patterns" zhruba takto:

\begtt
\let\oripatterns=\patterns
\def\patterns #1{\lowercase{\resetlccodes\oripatterns{#1}}}
\endtt
%
kde "\resetlccodes" provede p��kaz "<k�dov�n�>:lccodes", kter� si LANG
p�i aktivn�m e-\TeX{}u na�te ze souboru "ofs-<k�dov�n�>.tex".
Abychom �et�ili pam�t� \TeX{}u a nena��tali mno�stv� nov�ch
kontroln�ch sekvenc� z tohoto souboru u� p�i generov�n� form�tu, je
nutn� um�stit "\modifydef" p��kazu "<k�dov�n�>:lccodes" hned na
za��tek tohoto souboru. LANG si lok�ln� p�edefinuje p�i na��t�n� vzor�
d�len� p��kaz "\modifydef" tak, �e za n�m spust� "\endinput". Tak�e se
ostatn� ��st souboru v�bec ne�te.


\subsec Stylov� soubory, pravidla definov�n� maker pro jazyky
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

V sou�asn�ch \TeX{}ov�ch distribuc�ch jsou stylov� soubory pro jazyky
definov�ny r�zn�. Jak �el �as, nabalovaly se dal�� my�lenky a n�kter�
p�vodn� p��stupy se ponech�valy jen kv�li zp�tn� kompatibilit�. V p��pad�
bal��ku LANG m�me v�hodu, �e m��eme za��t \uv{na zelen� louce} a d�lat
pro v�echny jazyky v�ci po��dn� a s jednotn�m p��stupem. Z~tohoto
pohledu se jev� vhodn� v�echny stylov� soubory  pro jazyky p�epsat a
nazvat je nap��klad jm�nem "lang-<zkratka jazyka>.tex".

P�i psan� stylov�ho souboru pro LANG mus�me m�t na pam�ti, �e je �ten a� v dob�
prvn�ho p�epnut� do deklarovan�ho jazyka. P�itom re�im �ten� je
nastaven tak, �e prob�h� uvnit� skupiny s~"\endlinechar=-1"
a "\globaldefs=1".

Nastaven� "\endlinechar=-1" zp�sob� ignorov�n� pr�zdn�ch ��dk� a
token procesor nav�c nevytv��� mezery na konc�ch ��dk�. D�vod tohoto
opat�en� je z�ejm�: nen� toti� ��douc�, aby se p�i na�ten� stylov�ho
souboru do sazby vloudila mezera (nebo dokonce konec odstavce),
proto�e je mo�n�, �e bude stylov� soubor na�ten v horizont�ln�m m�du.

Po naps�n� stylov�ho souboru je tedy pot�eba p�ekontrolovat, zda jeho
p�e�ten�m nevygenerujeme ne��douc� mezery
v~horizont�ln�m m�du. D�ky "\endlinechar=-1" je to m�n� pravd�podobn�,
ne� obvykle, ale bohu�el to nen� vylou�en�. P��klad:

\begtt
\langdef \makro {...} % komentar
\endtt
%
Zde mezera za pravou z�vorkou \clqq"}"\crqq{} z�st�v� a to je �patn�. 
Mus�me tedy zcela odstranit \clqq"% komentar"\crqq{} nebo p�ilepit znak procenta
t�sn� za ukon�ovac� z�vorku definice.

D�ky "\globaldefs=1" jsou v�echny definice na vn�j�� �rovni stylov�ho
souboru glob�ln�, tj. efekt je stejn�, jako by byl stylov� soubor
p�e�ten na za��tku dokumentu, kdy je�t� nen� otev�ena ��dn� skupina.
Bohu�el, p�i "\globaldefs=1" nen� mo�no ve stylov�ch souborech p�echodn�
nastavovat "\catcode" uvnit� \uv{pracovn�ch} skupin. Jin�mi slovy
n�sleduj�c� p��klad je �patn�:

\begtt
{\catcode`\*=13 \gdef *{...}}
\endtt
%
Zde se nevr�t� kategorie hv�zdi�ky po ukon�en� skupiny do p�vodn�ho
stavu. M��eme sice vr�tit kategorii hv�zdi�ky \uv{ru�n�}
p��kazem "\catcode`\*=12", ale ani to nen� korektn�, proto�e nem�me
jistotu, zda v dob�, kdy je n� stylov� soubor p�e�ten, nen� n�hodou
u�ivatelem nastavena kategorie hv�zdi�ky na jinou hodnotu ne�~12.

Jedin� spr�vn� mo�nost, jak pracovat ve stylov�ch souborech se zm�nami
kategori�, je pou��vat p�ipraven� makra "\activedef", "\maybeactive".
Nebo je mo�no pou��t n�sleduj�c� postup:

\begtt
\globaldefs=0  % toto p�i�azen� se provede glob�ln�, ale to nevad�
{\catcode`\...  \gdef... }
\globaldefs=1  % toto p�i�azen� je lok�ln�, co� pot�ebujeme
... dal�� definice jsou automaticky glob�ln�
\endtt

P�i na�ten� stylov�ho souboru provede LANG p�esn� tuto �innost:

\begitems
* Pokud u� byl <stylov�-soubor> na�ten, neprovede nic.
* Jinak zalo�� novou skupinu ("\bgroup").
* Zavol� makro "\plaincatcodes"\inl[plaincatcodes], kter� 
  lok�ln� nastav� kategorie v�ech ASCII znak� na \uv{norm�ln� hodnoty}
  podle plain\TeX{}u. D�le nastav� "\catcode`\@=11".
* Provede "\endlinechar=-1".
* Provede "\globaldefs=1".
* Spust� "\input <stylov�-soubor>".
* Ukon�� skupinu ("\egroup"). T�m se vr�t� "\globaldefs=0" a nav�c se
  uvedou hodnoty kategori� znak� do stavu, jak je m�l p�ed "\bgroup"
  nastaveny u�ivatel.
\enditems

Vid�me tedy, �e ve stylov�m souboru m�me zaru�eny \uv{norm�ln�}
kategorie jako v~plain\TeX{}u (plus kategorie "@" nastavenu na 11) 
nez�visle na tom, jak� kategorie m� v~dob� vol�n� souboru 
nastaveny u�ivatel. 

Poznamenejme, �e v��e popsan� postup �ten� je implementov�n v~makru
"\ofsinput"\inl[ofsinput] z~OFS. Rovn� zde zm�n�n� 
makro "\plaincatcodes" je definov�no v~OFS. Tato makra jsou vyu�ita
i p�i �ten� k�dovac�ch soubor� typu "ofs-<k�dov�n�>.tex".

K�dov�n� stylov�ho souboru by m�lo b�t jen ASCII.
Chceme-li pracovat se znaky, kter� jsou v deklarovan�m jazyku b�n�,
ale nejsou v ASCII, pak mus�me pou��t \TeX{}ov� sekvence, kter� jsou
definov�ny v souboru "ofs-<k�dov�n�>.tex". Zaru�en� budou fungovat
v�echny takov� sekvence, kter� jsou deklarov�ny sou�asn� ve v�ech 
souborech "ofs-<k�dov�n�>.tex" pro v�echna <k�dov�n�> ze <seznamu-k�dov�n�>
dan�ho jazyka. P�ipom�n�m, �e <seznam-k�dov�n�> byl deklarov�n p��kazem
"\declarelang" v souboru "langdef.tex". 

Prvn�m p��kazem ve stylov�m souboru by m�l b�t:

\begtt
\def\langdeflist {<seznam zkratek jazyk�>}
\endtt
%
abychom nemuseli ps�t kulat� z�vorky ke ka�d�mu "\langdef".

D�le by m�lo b�t pomoc� "\langdef" definov�no makro 
"\langinfo",\inl[langinfo] kter�
expanduje na pln� n�zev deklarovan�ho jazyka. Obsahuje-li <seznam zkratek jazyk�>
v�ce ne� jeden jazyk, m�li bychom definovat "\langinfo" pro ka�d�
jazyk samostatn� za pou�it� kulat� z�vorky.

Obsahuje-li jazyk v�ce n��e��, pak je nutn� definovat
makro "\whichdialect"\inl[whichdialect] 
n�sleduj�c�m zp�sobem:

\begtt
\langdef \whichdialect {\ifcase\currentdialect default\or
   <n��e�� 1>\or <n��e�� 2>\or ... \or <n��e�� n>\fi}
\endtt
%
Neobsahuje-li jazyk n��e��, pak makro "\whichdialect" v�bec
nedefinujeme. V bal��ku LANG je �e�eno "\langdef \whichdialect (*) {none}",
tak�e m�me zaru�eno, �e "\whichdialect" expanduje na \uv{none} pro
v�echny jazyky, kter� si nedeklaruj� vlastn� podobu tohoto makra.

V dal��ch makrech m��eme pou��vat podm�nky 
"\ifnum <��slo>=\currentdialect" nebo "\ifcase\currentdialect",
abychom makra v�tvili podle n��e��, kter� si u�ivatel nastavil
p��kazem "\setdialect". P��klad pou�it� "\currentdialect"
najdeme nap��klad v souboru "lang-de.tex", kde "\toady"
pou��v� pro leden slovo \uv{Januar}, ale pokud je nastaveno n��e��
"austrian", pak se leden vypisuje jako \uv{J\"anner}.

V~makru "\langinit"\inl[langinit] bychom m�li soust�edit v�choz�
nastaven�, proto�e toto makro se spou�t� p�i ka�d�m p�epnut� do jazyka
p��kazem "\setlang". Makro "\langinit" definujeme pomoc� "\langdef".
M��e zde b�t nastaven� mezerov�n� (nap�.~"\frenchspacing")
a nastaven� hodnot "\lefthyphenmin" a "\righthyphenmin". 
O tomto nastaven� bychom m�li informovat u�ivatele v log souboru p��kazem
"\langmessage". D�le je nutn� uvnit� makra "\langinit" pamatovat na
navr�tila a p��kazem "\afterlang" deklarovat postup, jak vr�tit
nastaven� do stavu podle plain\TeX{}u. 

Pokud si vysta��me pro deklarovan� jazyk s implicitn�m nastaven�m
parametr� sazby podle plain\TeX{}u, nemus�me ve stylov�m souboru 
makro "\langinit" definovat.

P�edpokl�d� se, �e ka�d� stylov� soubor definuje p��kazem "\langdef"
makro "\today"\inl[today], kter� expanduje na z�pis aktu�ln�ho data v
p��slu�n�m jazyce. D�le je pot�eba definovat p��kazem "\langdef"
makro "\langphrases",\inl[langphrases] 
kter� sadou p��kaz� "\def" definuje fr�ze pro
n�zev kapitoly, seznam obr�zk� atd.~podle pou�it�ho jazyka. 
Seznam maker, kter� se zde maj� definovat, je uveden v~sekci~...
V~makru "\langphrases" m��eme nap��klad pou��t v�tven� podle hodnoty "\currentdialect",
aby mohl u�ivatel m�t p��stup k r�zn�m variant�m fr�z� v z�vislosti na
nastaven�m <n��e��>.

Ve stylov�m souboru bychom nem�li v ��dn�m p��pad� nastavovat znak�m
aktivn� kategorii. M�sto toho bychom m�li p��kazem "\langdef"
definovat makro "\activechar"\inl[activechar] s~jedn�m parametrem
zhruba takto:

\begtt
\langdef \activechar #1{%
   \if\string#1<znak1>\langmessage 
      {Character <znak1> is activated as ...}%
      \activedef <znak1>{...}\else
   \if\string#1<znak2>\langmessage
      {Character <znak2> is activated as ...}%
      \activedef <znak2>{...}\else
   ...
   \if\string#1<znak n>\langmessage
      {Character <znak n> is activated as ...}%
      \activedef <znak n>{...}\else
   \activecharwarn#1\fi...\fi\fi}
\endtt
%
T�m d�v�me u�ivateli mo�nost, aby mohl
p��kazem "\activechar<znak>" nastavit aktivn� kategorii
jen t�m znak�m, kter� uzn� za vhodn�.
Typickou deklarac� aktivn�ho znaku v~makru "\activechar" je:

\begtt
...\if\string#1<znak>\langmessage
      {Character <znak> is activated as expandable double-char prefix.}
      \activedef <znak>{\expdoublechar<znak>}\else ...
\endtt
%
a d�le pomoc� sady p��kaz� "\doublechardef<znak><znak2>..." definujeme
tabulku maker, kter� se po "\activechar<znak>" za�ne v z�vislosti na
aktu�ln�m jazyku pou��vat. Podrobn�ji je tato metoda pops�na v sekci...

Za posledn�m "\else" v makru "\activechar" p��eme "\activecharwarn#1", co�
vyvol� tisk varov�n� o~tom, �e "#1" nem� v aktu�ln�m jazyku p�ipravenu
deklaraci jako aktivn� znak.

Pokud definujeme ve stylov�m souboru
vlastn� pomocn� makra, pak by m�la m�t identifik�tor ve tvaru
"\<zkratka jazyka>@<identifik�tor>", nap��klad "\cz@tryemdash".
T�m snad zabr�n�me konfliktu s~n�zvy maker, kter� si definuje u�ivatel
nebo jsou pou�ita v~jin�m stylov�m souboru.

Za "\endinput" by m�la ve stylov�m souboru pokra�ovat dokumentace
stylov�ho souboru. Ta je �tena p��kazem "\printlangdoc"
od sekvence "\langdocbegin". Podrobn�ji o mo�nosti psan� 
dokumentace
ke stylov�m soubor�m rovnou ve stylov�ch souborech pojedn�v� sekce... 

P�i psan� stylov�ch soubor� se m��eme inspirovat existuj�c�mi
stylov�mi soubory "lang-cz.tex", "lang-de.tex", "l-czsk.tex" a dal��mi.


\subsec Dokumentov�n� stylov�ch soubor�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

P��kaz "\printlangdoc"\inl[printlangdoc] nastav� kategorie znak� podle
plain\TeX{}u (pou�ije k~tomu p��kaz "\plaincatcodes" z~OFS) a p�e�te soubor maker
"l-doc.tex". Tento soubor definuje n�kolik maker, kter� se daj�
pou��vat p�i psan� dokumentace (viz n��e) a nastav� znaky {\tt\char`\"}
a {\tt\char`\<} jako aktivn�.  Pak p��kaz "\printlangdoc" p�e�te
stylov� soubor aktu�ln�ho jazyka. P�i �ten� souboru se
p�esko�� balancovan� text od za��tku souboru a� po
sekvenci "\langdocbegin".\inl[langdocbegin] 
Za touto sekvenc� by m�l n�sledovat
vlastn� text dokumentace.

V souboru "l-doc.tex" je obsa�eno i jednoduch� nastaven� sazby:
"\parindent", "\parskip", "\emergencystretch" a 
d�le je spu�t�n p��kaz "\english", proto�e se p�edpokl�d�,
�e dokumentace bude psan� v~anglick�m jazyce.

Po p�e�ten� a vyti�t�n� dokumentace "\printlangdoc" nevrac� nastaven�
a makra do p�vodn�ho stavu. Pouze si poznamen�, �e u� byl soubor
"l-doc.tex" p�e�ten a p�i dal��m spu�t�n� p��kazu "\printlangdoc" jej
ne�te znova. Nep�edpokl�d�me toti�, �e bude p��kaz "\printlangdoc"
za�azen do oby�ejn�ho dokumentu, ale na druhou stranu po��t�me s t�m,
�e m��e n�sledovat p�ep�na� do dal��ho jazyka n�sledovan� dal��m
p��kazem "\printlangdoc". T�m m��eme z�skat p��ru�ku o jazyc�ch, kter�
n�s zaj�maj�.

Pokud se po pou�it� p��kazu "\printlangdoc" chceme zbavit nastaven�,
kter� bylo provedeno v souboru "l-doc.tex", pak sta�� uzav��t p��kaz
do skupiny. P�i op�tovn�m pou�it� p��kazu "\printlangdoc" bude v
takov�m p��pad� na��t�n soubor "l-doc.tex" znova.

V dal��m textu uv�d�m makra, kter� nejsou definov�na v bal��ku LANG
obecn�, ale jsou k dispozici jen v souboru "l-doc.tex" a maj� umo�nit
snadn�j�� psan� dokumentace.

Makro "\title <text><pr�zdn� ��dek>"\inl[title]
vytiskne "<text>" jako nadpis. M�l by zde b�t uveden pln� n�zev jazyka
a jeho zkratka.

Makro "\author <text><pr�zdn� ��dek>"\inl[author]
vytiskne slovo Author: n�sledovan� <textem>.

Text mezi po��ta�ov�mi uvozovkami: {\tt\char`\"takto psan�\char`\"}
bude ti�t�n strojopisem ve verbatim re�imu, tj. v�echny znaky
v�etn� zp�tn�ho lom�tka se tisknou tak, jak jsou. Makro vytvo��
nezlomiteln� box s~textem a je ur�eno pro �seky verbatim textu uvnit�
odstavce (nap��klad p�i zmi�ov�n� kontroln�ch sekvenc�).
Mezi {\tt\char`\"...\char`\"} je p�echodn� aktivn� vyk�i�n�k, kter� je
definov�n jako "\string". Tak�e {\tt!\char`\"} mezi
{\tt\char`\"...\char`\"} vytiskne po��ta�ovou uvozovku a 
{\tt!!} vytiskne jeden vyk�i�n�k.

Text mezi skobat�mi z�vorkami {\tt\char`\<takto psan�\char`\>}
se prom�n� na nezlomiteln� symbol <takto psan�>. Tato vlastnost je
implementov�na pomoc� aktivn�ho znaku \clqq{\tt\char`\<}\crqq, kter�
z�st�v� aktivn� i mezi po��ta�ov�mi uvozovkami. Tak�e i verbatim text
mezi po��ta�ov�mi uvozovkami je citliv� na v�skyt znaku 
\clqq{\tt\char`\<}\crqq.

\uv{Display verbatim re�im} je mo�n� pomoc� dvojice
"\begtt"\inll[begtt ...\back endtt]..."\endtt". Nap��klad

{\catcode`*=13 \def*{\char`\\}
\begtt
\begtt
tady je text v�etn� \kontroln�ch \sekvenc�, kter� bude
vyti�t�n ve verbatim re�imu se stejn�m �len�n�m na ��dky.
Pouze otev�rac� lomen� z�vorka z�st�v� aktivn�
a vytv��� <takov� v�ci>.
*endtt
\endtt
\relax}

Pokud za "\endtt" nen� pr�zdn� ��dek, bude se n�sleduj�c� odstavec
tisknout bez odsazen�. Mezi "\begtt" a "\endtt" m� vyk�i�n�k kategorii
nula, tak�e je mo�no ps�t kontroln� sekvence {\tt\char`!takto}. 
P�itom makro "\!" je definov�no jako oby�ejn� vyk�i�n�k, tak�e "!!" vytiskne
jeden oby�ejn� vyk�i�n�k.

Pro v��et �daj� s odr�kami lze pou��t dvojici
"\begitems"..."\enditems"\inl[begitems]. Mezi touto dvojic� je
p�echodn� aktivn� znak "*",\inl[enditems] 
kter� ukon�uje p�edchoz� �daj a zahajuje
nov� �daj v�etn� punt�ku na za��tku. P��klad:

\begtt
\begitems
* prvn� polo�ka
* druh� polo�ka
* posledn� polo�ka
\enditems
\endtt

Jinak je mo�n� pou��t v�echna makra z plain\TeX{}u.


\sec Licence

...

\sec Rejst��k
%%%%%%%%%%%%%

Rejst��k obsahuje odkazy pouze na m�sta v~textu, kde je k~makru
vysv�tluj�c� koment��. V~tom m�st� je t� uveden pro snadn�j�� orientaci
n�zev makra v~lev�m okraji. V~rejst��ku nejsou odkazy na 
v�echny zm�nky o~makru v~textu. 

\bigskip
\immediate\closeout\indout
\input \jobname.ind

\def\inr #1 #2 #3;{\noindent{\tt
  \expandafter \ifx \csname ind:#2\endcsname \relax 
     \back#1%
  \else 
     \beglink{#2}\back#1\endlink
  \fi}\quad 
  #3 \quad\pg[#2]\par} 
\def\\#1 #2;{\inr #1 #1 #2;}


\\activechar ;
\\activedef ;
\\afterlang ;
\\author ;
\\begtt ;
\\begitems ;
\\currentdialect ;
\\currentlang ;
\\deactivechar ;
\\declareenc ;
\\declarehyphentable ;
\\declarelang ;
\\defaulthyphentable ;
\\doublechardef ;
\\enditems ;
\inr endtt begtt ;
\\expdoublechar ;
\\fotenc (OFS);
\\gfotenc ;
\\hyphentable ;
\\langcommand ;
\\langcommandwarn ;
\\langdef ;
\\langdefwarn ;
\\langdeflist ;
\\langdocbegin ;
\\langinfo ;
\\langinit ;
\\langisused ;
\\langphrases ;
\\langusage ;
\\lccodes ;
\\lccodesback ;
\\lccodesloop ;
\\loadpatterns ;
\\maybeactive ;
\\ofsinput (OFS);
\\plaincatcodes (OFS);
\\plainlccodes ;
\\printlangdoc ;
\\resetcodes ;
\\setdialect ;
\\setlang ;
\\showlangs ;
\\ssdoublechar ;
\\textormath ;
\\title ;
\\today ;
\\whichdialect ;
\\zerolccodes ;

\sec Literatura

\indent\llap{[1] }Karl Berry: Fontname -- Filenames for TeX fonts,
{\tt fontname.pdf}

\end


