
\titul  Projekt Ok\TeX
%%%%%%%%%%%%%%%%%%%%%%

\autor Petr Ol��k

\institut Elektrotechnick� fakulta �VUT, Praha

\email petr@olsak.net

\abstrakt 
   Ok\TeX{} je form�t \TeX{}u postaven� na plain\TeX{}u a bal��c�ch
   OFS, LANG a IENC. Je to pokus vytvo�it multijazykov� prost�ed� pro
   plain\TeX{}, kter� sv�mi vastnostmi p�ed�� bal��ek Babel zn�m�
   p�edev��m z~\LaTeX{}u. Pro pot�eby projektu byl vytvo�en nov� 
   bal��ek LANG, kter� spolupracuje s~OFS pro plain a dovoluje 
   p�ep�nat mezi jazyky v�etn� mo�nosti deklarovat pro ka�d� jazyk 
   libovoln� mno�stv� k�dov�n� font�. Ve f�zi v�voje je d�le bal��ek 
   IENC, kter� umo��uje nastavit konverze ze vstupn�ho k�dov�n� na k�dov�n� 
   font� a spolupracuje p�itom s~bal��kem LANG a p��padn�
   s~enc\TeX{}em, pokud je toto roz���en� v~\TeX{}ov� distribuci dosa�iteln�.
     

\kap �vodem
%----------

Na rozd�l od ostatn�ch program� a maker,
kter� jsem dosud na Internetu zve�ejnil a na \TeX{}ov�ch setk�n�ch
prezentoval, je Ok\TeX{} zat�m neukon�en. To znamen�, �e
makra jsou neodlad�n� a podl�haj� v�voji. Rozhodl jsem se k~tomuto
kroku proto, �e projekt si asi vy��d� v�ce pr�ce a p�edpokl�dal jsem,
�e se na n�m zapoj� studenti m�ho p�edm�tu \uv{Publika�n� syst�m
\TeX}. Bohu�el, m� p�edpoklady se nenaplnily, asi si na spolupr�ci
studenti netroufli.

Na \cite{ftp} tedy m��ete vid�t rozpracovan� projekt a m��ete
pozorovat, v~jak�m po�ad� se postupn� c�le projektu napl�uj�. Osobn�
jsem zast�ncem principu: \uv{nejprve dokumentace a potom
programov�n�}, a�koli mnoho jin�ch projekt� to d�l� pr�v� v~opa�n�m
po�ad�. Postup od dokumentce k~programu resp. implementaci maker mn�
p�ijde daleko p�irozen�j��, proto�e koncept si autor m��e
rozmyslet v~dob� psan� dokumentace. Jakmile je dokumentace p�esn�
sformulov�na, pak vlastn� programov�n� u� m��e zvl�dnout cvi�en�
opice. Vym��len� konceptu je intelektu�ln� daleko z�bavn�j�� �innost
ne� programov�n� podle toho, co je v~dokumentaci naps�no. A~ps�t
dokumentaci a� podle toho, co n�kdo naprogramoval, mi p�ipad� m�rn�
�e�eno nekoncep�n�.

Po��t�m, �e prvn� pou�iteln� verze maker bude k~dispozici na Internetu
na konci l�ta~2004.
 
Hlavn�m pil��em Ok\TeX{}u je bal��ek LANG, kter� p�ep�n� mezi jazyky a
op�r� se o~OFS pro plain\TeX{}. Rozhodl jsem se naprogramovat tuto
aplikaci proto, abych p�edvedl mo�nosti p�ep�n�n� jazyk�, kter� je
�zce prov�z�no s~p�ep�n�n�m font� v�etn� mo�nosti volby jejich
k�dov�n�. To se m��e st�t inspirac� pro \LaTeX{}ov� bal��ek Babel. S�m
osobn� s~\LaTeX{}em nekoketuji, a proto nepl�nuji ani vylep�ov�n�
Babelu ani portov�n� bal��ku LANG pro \LaTeX. Zku�enosti s~Ok\TeX{}em
by ale mohly b�t podn�tem pro podobn� p��stup v~\LaTeX{}u, kter� tam
zat�m chyb�. Nap��klad \CSLaTeX{} p�e��v� v~\TeX{}ov�ch distribuc�ch
jen kv�li neexistuj�c� mo�nosti pracovat v~Babelu s~v�t��m mno�stv�m
k�dov�n� font� pro jeden jazyk. \CSLaTeX{} toti� pou�it�
v�ce k�dov�n� pro �estinu a sloven�tinu umo��uje, ale p�in�� tak�
probl�my novope�en�m u�ivatel�m, kte�� nev�d�, �e se stylov� soubor pro 
\CSLaTeX{} ned� pou��t s~Babelem.

\kap Form�t
%----------

Proto�e p�ep�n�n� jazyk� si vynucuje p�ep�n�n� vzor� d�len� slov a
tyto vzory se v~\TeX{}u daj� na��st jen p�i generov�n� form�tu
ini\TeX{}em, je pot�eba, aby se bal��ek LANG stal sou��st� form�tu.
Nen� tedy mo�n� jej na��tat pomoc� "\input" a� p�i 
zpracov�n� dokumentu. To je d�vod,
pro� jsem zavedl nov� form�t. Ten jsem nazval Ok\TeX{}, proto�e m� nic
lep��ho nenapadlo. N�sleduje uk�zka souboru "oktex.ini", kter�
je pou�it pro generov�n� form�tu:

\begtt
% oktex.ini
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Feb. 2004                         Petr Olsak

%  initex oktex.ini   nebo:  initex -enc oktex.ini

\input csfonts        % p�edefinuje primitiv \font jako v csplainu
\let\oriinput=\input  
\def\input#1 {}       % p�edefinuje \input, aby ned�lal nic
\oriinput plain       % na�te plain.tex s pozm�n�n�m \font a \input
\restorefont \let\input=\oriinput
                      % vr�t� \font a \input do p�vodn�ho stavu
\input ofs [allfonts] % na�te OFS v�etn� v�ech deklara�n�ch soubor�
\input lang           % na�te LANG a ulo�� vzory d�len� slov
\everyjob={\message{This is oktex (plain+OFS+LANG), version May 2004}}
\showlangs            % vyp��e seznam deklarovan�ch jazyk�
\dump                 % ulo�� form�t oktex.fmt
\endtt

Vid�me, �e form�t krom� bal��ku LANG zahrnuje i bal��ek OFS.
Proto�e jsou p�i na��t�n� OFS zavedeny n�zvy
ve�ker�ch font�, co m�me v~po��ta�i "[allfonts]", m�me tak
mo�nost v~Ok\TeX{}u rovnou pracovat s~fonty prost�ednictv�m rozhran�
OFS a nemus�me kv�li tomu na��tat ani OFS samotn�, ani deklara�n�
soubory pou�it�ch font�.

P�ed na�ten�m makra "plain.tex" je pozm�n�n v�znam primitiv� "\font" a
"\input". V�choz� fonty jsou tedy na�teny stejn� jako ve form�tu
"csplain": fonty "\preloaded" nejsou na�teny v�bec a v~p��pad�
textov�ch font� jsou m�sto CM zavedeny \CS fonty. Hlavn�m d�vodem
tohoto opat�en� je nezav�d�t do pam�ti fonty "\preloaded", kter�ch je
v~makru "plain.tex" docela hodn�. S~fonty budeme pracovat pomoc� OFS a
budeme je zav�d�t a� v~okam�iku pot�eby. Pot�ebujeme tedy �et�it 
s~pam�t� pro fonty. Obrovsk� sada font� "\preloaded" v~makru "plain.tex" m�
podle m�ho n�zoru jen historick� d�vody, kter� d�vno pominuly. 
V~prad�vn�ch po��tc�ch \TeX{}u asi trvalo n�jakou dobu, ne� se font 
z~metriky "tfm" zavedl do pam�ti. Bylo tedy ��eln� tuto �innost prov�st jen
jednou p�i generov�n� form�tu, a nikoli opakovan� p�i pr�ci 
s~dokumentem. Dnes je toto opat�en� zcela zbyte�n�, ba naopak n�m
p�ek��, proto�e "\preloaded" fonty zbyte�n� zapl�uj� pam� vyhrazenou
pro fonty smet�m, kter� pravd�podobn� nikdy nebudeme pot�ebovat.

Pozm�n�n� "\input" p�ed na�ten�m "plain.tex" zp�sob�, �e nebudou makrem
"plain.tex" na�teny vzory d�len� pro anglick� jazyk. V~tomto makru je toti�
jedin� v�skyt primitivu "\input" v~kontextu: "\input hyphen<mezera>".
O~na�ten� vzor� d�len� se postar� bal��ek LANG, jak uvid�me
d�le. Proto�e je obvykle angli�tina deklarov�na jako prvn� jazyk,
dostane p�id�leno "\language=0" a v�sledek je tedy kompatibiln� 
s~makrem "plain.tex".

Bal��ky OFS ani LANG nem�n� v�znam ��dn�ch maker plainu ani primitiv�
\TeX{}u, dokud nejsou pou�ity p��kazy "\setfonts" nebo "\setlang".
Znamen� to, �e form�t Ok\TeX{} se chov� identicky, jako form�t plain,
pokud u�ivatel nepou�ije v��e zm�n�n� p��kazy. Dokumenty, ur�en� pro
plain\TeX{}, jsou tedy Ok\TeX{}em zpracov�ny se stejn�m v�sledkem.

Bal��ek LANG definuje (pouze pro pot�ebu kompatibility s~csplainem)
p��kaz "\chyph", kter� nastav� �esk� vzory d�len� a zavede stylov�
soubor pro �e�tinu, kde je nap��klad definov�no makro "\uv". Dokument,
kter� m� v~�vodn� ��sti pou�it p��kaz "\chyph" se tedy v~Ok\TeX{}u
chov� (skoro) stejn� jako v~csplainu. Slovo \uv{skoro} v~sob� zahrnuje
dv� odli�nosti:

\begitems
* Ok\TeX{} z�st�v� implicitn� u~hodnot "\hsize", "\vsize" podle
  plain\TeX{}u, zat�mco csplain tyto hodnoty m�n�, aby l�pe odpov�daly
  form�tu A4.
* Makro "\uv" ze stylov�ho souboru Ok\TeX{}u umo�n� tvorbu 
  kerningov�ch p�r� se znaky uvozovek, ale neumo�n� pou��t verbatim 
  konstrukci uvnit� uvozovek.
  Chceme-li kompatibilitu s~csplainem, m�li bychom po p��kazu
  "\chyph" napsat je�t� "\let\uv=\verbuv".
\enditems

To sam�, co zde bylo �e�eno o p��kazu
"\chyph", plat� pro p��kaz "\shyph" a slovensk� jazyk.


\kap Deklarace jazyk� v~bal��ku LANG
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Bal��ek LANG je podrobn� dokumentov�n v~souboru "langdoc.tex".
Mimo jin� se tam dozv�me, jak m��e vypadat struktura deklara�n�ho
souboru pro jazyky. Tento soubor m� n�zev "langdef.tex" a zde je jeho
uk�zka:

\begtt
% langdef.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mar. 2004                                  Petr Ol��k

\declareenc  8t  CMRoman  % T1, latin from Cork (EC fonts, DC fonts)
\declareenc  8z  CMRoman  % IL2, similar to ISO-8859-2 (CS fonts)
\declareenc  6a  CMRoman  % T2A, Cyrillic (LH fonts)
\declareenc  6t  CMRoman  % T2B, Cyrillic, another spec. symbols (LH fonts)
\declareenc  6c  CMRoman  % T2C, Cyrillic, another spec. symbols (LH fonts)
\declareenc  6x  CMRoman  % X2, Cyrillic, another spec. symbols (LH fonts)
\declareenc  6k  CMRoman  % KOI-8, Cyrillic 
\declareenc  6y  CMRoman  % LCY, Cyrillic (LH fonts)

%              selector      code  style          encodings
 \declarelang  \english      en   lang-en.tex    8t =8z ;
 \declarelang  \czech        cz   lang-cz.tex    8z  8t ;
 \declarelang  \slovak       sk   lang-sk.tex    8z  8t ;
 \declarelang  \german       de   lang-de.tex    8t =8z ;
 \declarelang  \newgerman    de2  lang-de.tex    8t =8z ;
 \declarelang  \polish       pl   lang-pl.tex    8t  8z ;
 \declarelang  \russian      ru   lang-ru.tex    6a =6t =6c =6x 6k 6y ;
\endtt

Vid�me, �e nejprve jsou deklarov�na k�dov�n�, kter� budou pro
jednotliv� jazyky pou�ita. Sou��st� deklarace je informace o~rodin�
font�, o~kter� v�me, �e ur�it� je v~dan�m k�dov�n� p�ipravena. Kdy�
bude bal��ek LANG pot�ebovat p�epnout do takov�ho k�dov�n�, pak
v~p��pad�, �e aktu�ln� rodina font� toto k�dov�n� nepodporuje, bude
m�sto n� pou�ita rodina font� z~t�to deklarace. Je to tedy implicitn�
rodina font� pro dan� k�dov�n�. 
Jm�na k�dov�n� font� odpov�daj� dokumentu \cite{fontname} a jm�na
rodin odpov�daj� deklaraci v~OFS.

N�sleduj�c� ��st souboru "langdef.tex" obsahuje vlastn� deklarace
jazyk�. Je zde uveden p�ep�na� ("\czech", "\german", atd.), pomoc�
kter�ho m��e u�ivatel bal��ku p�epnout do zvolen�ho jazyka.  N�sleduje
zkratka jazyka ("cz", "de"), kter� se pou��v� v~parametru p��kazu
"\setlang" a na mnoha dal��ch m�stech v~bal��ku LANG.  D�le n�sleduje
jm�no stylov�ho souboru, kter� bal��ek LANG na�te p�i prvn�m p�epnut�
do dan�ho jazyka. Tam jsou na jazyku z�visl� definice.  Kone�n� je 
v~deklaraci uveden seznam k�dov�n�, kter� jsou pro dan� jazyk
pou�iteln�. Jin�mi slovy, abeceda jazyka je v~t�chto k�dov�n�ch pln�
obsa�ena. Prvn� k�dov�n� v~seznamu je tzv. \uv{v�choz� k�dov�n�}.  To
bude pou�ito nap�. p�i prvn�m p�epnut� jazyka, pokud nen�
k�dov�n� specifikov�no. Dal�� k�dov�n� v~deklaraci
mohou b�t uvozena rovn�tkem. To znamen�, �e abeceda jazyka je tam
stejn� rozlo�ena jako v~p�edchoz�m k�dov�n� a nem� tedy smysl na��tat
nov� vzory d�len� slov.  Pokud ale rovn�tko chyb�, LANG na�te znovu
vzory d�len� slov podle po�adovan�ho k�dov�n�. Jazyk m��e tedy m�t
stejn� vzory d�len� slov na�teny v�cekr�t pod r�zn�mi k�dov�n�mi. To
pro n�s nen� nic p�ekvapiv�ho~--- zn�me to z~csplainu i z~CS\LaTeX{}u.

P��kaz "\declarelang" s�m vzory d�len� nena��t�. P�edpokl�d�m toti�,
�e zde budou deklarov�ny v�echny jazyky, se kter�mi budeme cht�t 
v~bal��ku LANG pracovat a �e t�chto jazyk� bude t�eba tolik, �e na�ten�
v�ech jejich vzor� d�len� bu� nebude v�bec mo�n�, nebo by zbyte�n�
zv�t�ovalo form�t. M��eme tedy na��st vzory d�len� jen n�kter�ch
deklarovan�ch jazyk�, ba co d�m, jen pro n�kter� k�dov�n� dan�ho
jazyka. K~tomu slou�� p��kaz "\loadpatterns", jeho� pou�it� m��e
vypadat takto:

\begtt
\loadpatterns en cz sk ru {6a =6t =6c =6x} de de2 ;
\endtt

V~tomto p��klad� jsme se rozhodli v�bec nena��tat polsk� vzory d�len� a
d�le omezit na��t�n� rusk�ch vzor� d�len� na jedinou tabulku
("6a =6t =6c =6x"), vzory pro k�dov�n� "6k" a "6y" nebudou pro ru�tinu
na�teny. Bal��ek LANG p�id�l� ��sla vzor� d�len� po��naje nulou vzestupn�.
Proto�e jazyk "en" je uveden jako prvn� (v~parametru p��kazu
"\loadpatterns"), bude m�t p�id�leno ��slo nula.

Bal��ek LANG umo��uje p��kazem "\showlangs" zobrazit seznam
deklarovan�ch jazyk� a p�id�len�ch ��sel vzor� d�len�. Pro n� p��klad
dopadne v�stup "\showlang" takto:

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

Otazn�k znamen�, �e vzory d�len� nejsou na�teny. Vid�me, �e n�m�ina m�
pro ob� p��pustn� k�dov�n� na�teny stejn� vzory d�len�, zat�mco
�e�tina a sloven�tina m� pro r�zn� k�dov�n� r�zn� vzory d�len�.
N�m�ina je sv�m zp�sobem specifick�, proto�e m� dv� r�zn� varianty
vzor� d�len�: podle star�ch pravidel ("\german") a podle nov�ch
pravidel ("\newgerman"). Tento p��pad je v~bal��ku LANG deklarov�n
jakoby dva r�zn� jazyky.

Pokud bude muset bal��ek LANG p�epnout do jazyka a k�dov�n�, pro kter�
nejsou na�teny vzory d�len�, vyp��e se varov�n� a pou�ij� se vzory
d�len� podle tabulky "\defaulthyphentable". Tento registr je 
implicitn� nastaven na hodnotu~255, co� p�edstavuje pr�zdnou tabulku 
vzor�, p�i kter� se ��dn� d�len� slov konat nebude.

Deklarace jazyk� a na�ten� vzor� d�len� m� je�t� dal�� mo�nosti, kter�
si z�jemce m��e p�e��st v~dokumentaci.


\kap Pravidla p�ep�n�n� jazyk�, k�dov�n� a font�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

P�edstavme si �estirozm�rn� prostor~$L$, v~n�m� na jednotliv� osy nan��me
tyto �daje:

\begitems
* jazyk
* n��e��
* k�dov�n� font�
* rodina font�
* varianta fontu
* velikost fontu
\enditems

C�lem projektu Ok\TeX{} bylo p�ipravit makra, pomoc� kter�ch bude mo�n� se 
v~tomto prostoru pohybovat t�eba pod�l jen n�kter�ch os.
Probl�m je samoz�ejm� v~tom, �e uveden� prostor je pom�rn� dost
d�rav�: Ne v~ka�d�m k�dov�n� m�me k~dispozici v�echny rodiny 
font�, ne v�echny jazyky jsou pou�iteln� ve v�ech k�dov�n�ch, ne ka�d�
varianta fontu se vyskytuje v~ka�d� rodin� font� atd.
�pln� z�ruka nem�nnosti ostatn�ch sou�adnic p�i zm�n� jedn� 
sou�adnice prostoru~$L$ tedy nen� mo�n�.
Obecn� lze ��ci, �e pokud si u�ivatel p�eje zm�nit sou�adnice takov�m
zp�sobem, �e se \uv{stref� do d�ry} v~tomto prostoru, pak LANG a OFS
se sna�� naj�t nejbli��� vhodn� nepr�zdn� uzel prostoru a o~t�to
skute�nosti vyp��e na termin�l a do logu varov�n�.
D�ky deklarac�m jazyk� a registrac�m k�dov�n� ke zvolen�m rodin�m
font� maj� makra OFS a LANG p�ehled o~\uv{d�r�ch} i pln�ch uzlech 
tohoto prostoru a mohou se podle toho za��dit.

Nap��klad OFS udr�uje pokud mo�no st�le stejnou variantu fontu, a�koli
p�ep�n� mezi rodinami. Pokud nov� rodina po�adovanou variantu
neobsahuje, pou�ije OFS variantu "\rm", kter� mus� b�t deklarov�na 
v~ka�d� rodin� font�.

Jazyky m��eme m�nit pomoc� p�ep�na�� ("\czech",
"\german", atd.) nebo pou�it�m p��kazu
"\setlang[<zkratka-jazyka>/<k�dov�n�>]". Jestli�e je n�kter� z~parametr� 
tohoto p��kazu pr�zdn�, pokus� se LANG zachovat tento parametr beze zm�ny.
P�i p�epnut� do jazyka a k�dov�n� se samoz�ejm� inicializuj�
odpov�daj�c� vzory d�len� slov, pokud byly p��kazem "\loadpatterns"
na�teny.

Je-li pou�ito takov� "\setlang[<zkratka-jazyka>/<k�dov�n�>]", kter�
vych�z� do \uv{d�ry} prostoru~$L$, sna�� se LANG p�epnout 
na po�adovan� jazyk a p�izp�sobit k�dov�n�. V~takov�m p��pad� pou�ije
k�dov�n�, kter� bylo v~dokumentu s~dan�m jazykem pou�ito naposled.
P�i prvn�m p�epnut� do dan�ho jazyka pou�ije v~tomto p��pad� v�choz�
k�dov�n� dan�ho jazyka.

Pr�zdn� parametr <k�dov�n�> v~p��kazu "\setlang" znamen�, �e
aktu�ln� k�dov�n� nebude m�n�no, pokud se t�m ov�em nedost�v�me
do \uv{d�ry} v~prostoru~$L$. Pr�zdn� parametr <k�dov�n�> p�i prvn�m pou�it�
p��kazu "\setlang" v~dokumentu m� ale pon�kud odli�n� v�znam: p�epne do v�choz�ho
k�dov�n� dan�ho jazyka.

P�ep�na�e "\czech", "\german", "\english" atd. jsou v~bal��ku LANG 
definov�ny jako "\setlang[<zkratka-jazyka>/]", tedy s~pr�zdn�m parametrem 
<k�dov�n�>. Znamen� to, �e prvn� pou�it� takov�ho p�ep�na�e (nen�-li
p�ed n�m pou�ito ��dn� "\setlang") ur�� i k�dov�n� font�. 
LANG zvol� za k�dov�n� font� v~tomto p��pad� v�choz� k�dov�n� tohoto jazyka.
V�echna dal�� pou�it� t�chto p�ep�na�� udr�� nastaven� k�dov�n�, pokud se t�m
nedost�v�me do \uv{d�ry} prostoru~$L$.

P��klady:

\begtt
\czech  % od t�to chv�le m�me zapnuto k�dov�n� 8z, tj. podle CSfont�
        % OkTeX se nyn� chov� stejn� jako csplain
\endtt

Jin� dokument:
\begtt
\setlang[/8t]
\czech % fonty jsou nyn� k�dovan� podle Corku
\endtt

Je�t� jin� dokument:

\begtt
\setlang[cz/8t] % fonty jsou k�dov�ny podle Corku
\endtt

Implicitn� jazyk bal��ku LANG (m� smysl se na n�j pt�t, pokud se p�i
prvn�m pou�it� p��kazu "\setlang" pou�ije pr�zdn� parametr <jazyk>) m�
hodnotu "none". Tento speci�ln� jazyk nep�ep�n� ��dn� vzory d�len�,
nena��t� ��dn� stylov� soubor a akceptuje jak�koli deklarovan� k�dov�n� font�.
Podrobn�ji o~t�to mo�nosti je pojedn�no v~dokumentaci.

Proto�e p��kaz "\setlang" p�ep�n� k�dov�n� font�, �zce p�i tom 
spolupracuje s~makrem OFS. P�i p�echodu na jin�
k�dov�n� se mus� naj�t vhodn� rodina font�, kter� dan� k�dov�n�
podporuje. Pokud aktu�ln� rodina tuto vlastnost spl�uje, ponech� se
beze zm�ny, pouze se nov� na�tou metriky t�to rodiny podle
po�adovan�ho k�dov�n�. Pokud ale aktu�ln� rodina font� nem� po�adovan�
k�dov�n� registrov�no, spust� makro "\setlang" na z�v�r sv� �innosti 
p��kaz "\setfonts[<Rodina>/]", kde <Rodina> je implicitn� rodina
zvolen�ho k�dov�n�. Ta je deklarov�na v~souboru "langdef.tex". 
Samoz�ejm� tento p��kaz udr�� fonty ve stejn�
velikosti a pokus� se udr�et variantu font�, pokud ji nov� rodina
obsahuje. Jinak p�ech�z� na "\rm".

P�i jak�mkoli pokusu dostat se do \uv{d�ry} prostoru~$L$ se vyp��e
varov�n� o~zm�n� sou�adnic aktu�ln�ho bodu prostoru, proto�e
jsou nastaveny jinak, ne� si u�ivatel p�eje. U�ivatel m��e zm�nit
v�ech p�t zat�m zm�n�n�ch sou�adnic najednou pomoc� dvojice p��kaz�:

\begtt
\setlang [<jazyk>/<k�dov�n�>]\setfonts[<Rodina>-<varianta>/<velikost>]
\endtt

Libovoln� z~t�chto �daj� m��e chyb�t. V~takov�m p��pad� se LANG a OFS
pokus� ponechat odpov�daj�c� sou�adnici beze zm�ny. Pokud se takto
t�sn� za sebou sejdou p��kazy "\setlang" a "\setfonts", pak se makro
"\setlang" nesna�� p�ep�nat rodiny ve vlastn� re�ii, ale p�enech� tuto
pr�ci n�sleduj�c�mu p��kazu "\setfonts". U�ivatel tak m��e zamezit
v�pisu varov�n� o~tom, �e dosud pou��van� rodina font� nen� v~nov�m 
k�dov�n� akceptovateln�. Bal��ek LANG se v~tomto p��pad� nesna�� p�epnout 
do implicitn� rodiny zvolen�ho k�dov�n�. Ud�l� to jen tehdy, pokud 
p��kaz "\setfonts" skon�il ne�sp�n�.

Dosud jsem nezm�nil posledn� sou�adnici prostoru~$L$: \uv{n��e��}.
Z~matematick�ho pohledu se nejedn� o~plnohodnotnou dimenzi tohoto
prostoru, proto�e ka�d� jazyk m��e m�t (ve stylov�m souboru pro jazyk)
deklarov�nu svou mno�inu n��e��, kter� je zcela nez�visl� na jin�ch
jazyc�ch. U�ivatel m��e v~r�mci aktu�ln�ho jazyka p�epnout do n��e��
pomoc� "\setdialect[<n��e��>]". To m��e ovlivnit chov�n� n�kter�ch na
jazyku z�visl�ch maker, kter� jsou definov�na ve stylov�ch souborech.
Typick�m p��kladem takov�ho makra je "\today".

Pokud "\setdialect" skon�il �sp�n�, LANG p�epne n��e��. Jinak LANG
z�st�v� u~implicitn�ho n��e�� dan�ho jazyka. LANG si tak� pamatuje
naposledy pou�it� n��e�� ka�d�ho jazyka a pokud se pomoc� "\setlang"
u�ivatel k~tomuto jazyku vr�t�, automaticky se obnov� naposledy
pou�it� n��e�� tohoto jazyka.


\kap Pou��v�n� stylov�ch soubor� jazyka
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Abych odli�il stylov� soubory "*.sty" z~\LaTeX{}u
od stylov�ch soubor� pro bal��ek LANG, rozhodl jsem se jim d�vat
p��ponu ".tex". Doporu�en� n�zev stylov�ho souboru pro LANG je
"lang-<zkratka-jazyka>.tex".

P�i prvn�m p�epnut� do dan�ho jazyka se stylov� soubor na�te
automaticky. U�ivatel tedy nemus� nic ps�t do z�hlav� sv�ho dokumentu.
Ve stylov�ch souborech jazyka se definuj� makra specifick� pro dan�
jazyk. Nav�c je za "\endinput" ve stylov�m souboru rovnou naps�na
dokumentace, kter� se d� form�tovat plain\-\TeX{}em pomoc�
p��kazu "\printlangdoc". Nap��klad 

\begtt
\czech \printlangdoc \german \printlangdoc
\endtt
%
vytiskne do "dvi" souboru
dokumentaci ke stylov�mu souboru �esk�ho a n�meck�ho jazyka.

Typick� �loha stylov�ch soubor� pro LANG je vytvo�it makra, kter� maj�
spole�n� n�zev, ale pro ka�d� jazyk jsou definov�na pon�kud
odli�n�. To za��d� p��kaz "\langdef", kter� definuje makro v�zan� na
zvolen� jazyk. Pokud p���t� definujeme pomoc� "\langdef" makro
stejn�ho jm�na, ale pro jin� jazyk, pak se definice nep�ekr�vaj�.
Jm�no makra pak expanduje z�visle na aktu�ln� zvolen�m jazyce.
Nap��klad "\today" je jinak definov�no pro angli�tinu
a jinak pro �estinu. V~obou stylov�ch souborech je uvedeno
"\langdef\today", p�i�em� definice tohoto makra pro �e�tinu se 
jist� li�� od definice pro angli�tinu.
Pokud u�ivatel nap��e "\today" a je zrovna aktivn� �e�tina,
uplatn� se �esk� definice a p�i p�epnut� do angli�tiny nap��e
"\today" dne�n� datum anglicky. 

Uve�me si p��klad stylov�ho souboru
"lang-cz.tex":

\begtt
%% Czech lang-style file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Mar. 2004                           Petr Olsak

\def\langdeflist {cz}%   %% Czech language

\langdef \langinfo {Czech language}

\langdef \langphrases {%
   \def\abstractname{Abstrakt}%
   \def\appendixname{P\v r\'iloha}%
   \def\bibname{Literatura}%
   \def\ccname{Na v\v edom\'i}%
   <...atd.>
   \def\tablename{Tabulka}%
}
\langdef \today {\number\day. \ifcase\month\or ledna\or \'unora\or
   b\v rezna\or dubna\or kv\v etna\or \v cervna\or \v cervence\or
   srpna\or z\'a\v r\'i\or \v r\'ijna\or listopadu\or
   prosince\fi \space\number\year
}
%%% Common parts for Czech+Slovak languages:
\inputonce l-czsk.tex %space
\endinput
\endtt
%
A~v~souboru "l-czsk.tex" pokra�uje spole�n� ��st pro �e�tinu a sloven�tinu:

\begtt
%% Czech + Slovak lang-style file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Mar. 2004                           Petr Olsak

\def\langdeflist {cz sk} %% Common part for Czech and Slovak 

\langdef \langinit {%
   \langmessage{frenchspacing on}\frenchspacing
   \afterlang{\langmessage{frenchspacing off}\nonfrenchspacing}%
}
\langdef \activechar #1{%
   \if\string#1"\langmessage 
      {Character " is activated as \string\clqq...\string\crqq.}%
      \activedef "{\bgroup\maybeactive\def"{\crqq\egroup}\clqq}\else
   \if\string#1-\langmessage
      {Character - is activated as hyphen-split character.}%
      \def\minus{-}%
      \activedef -{\ssdoublechar-}\else
   \if\string#1`\langmessage
      <..atd.>
}
%%% double chars:
\doublechardef -\mathchar{-}
\doublechardef --{\futurelet\tmpa\cz@tryemdash}
\doublechardef -#1{\discretionary{-}{-}{-}#1}
\doublechardef `\mathchar{`}
<...atd.>

%%% quotes:
\let\langdefprefix=\long \langdef \doubleuv #1{\clqq#1\crqq}
\let\langdefprefix=\long \langdef \singleuv #1{\clq#1\crq}
\let\langdefprefix=\long \langdef \doublefuv #1{\frqq#1\flqq}

\langdef \verbuv {%
   \bgroup\aftergroup\crqq
   \afterassignment\clqq\let\next=}

\ifx\uv\undefined    \let\uv=\doubleuv    \fi
\ifx\fuv\undefined   \let\fuv=\doublefuv  \fi

\let\langdefprefix=\long \langdef \uvinuv #1{%
   \bgroup \let\uv=\singleuv \clqq#1\crqq\egroup}
<...atd.>
\endtt

Nebudu zde podrobn� popisovat vlastnosti pou�it�ch p��kaz� ani koncept
stylov�ho souboru, od toho je dokumentace. Zm�n�m z�kladn� strategii
jen stru�n�. Makro "\langdeflist" mus� obsahovat seznam zkratek
jazyk�, pro kter� p��kaz "\langdef" bude definovat makra.
Ka�d� stylov� soubor by m�l definovat pomoc� "\langdef" makra
"\langinfo" (jm�no jazyka), "\langinit" (inicializa�n� makro, kter� se
provede p�i ka�d�m p�epnut� do tohoto jazyka), "\langphrases"
(definice b�n�ch fr�z� pou��van�ch v�t�inou v~\LaTeX{}u), "\today"
(aktu�ln� datum v~dan�m jazyce), "\activechar" (spou�t�dlo aktivn�ch
znak� s~definicemi v�t�inou specifick�mi pro dan� jazyk). D�le je
mo�no ve stylov�ch souborech pou��vat "\doublechardef", kter� definuje
dvojice znak�, pokud u�ivatel prvn� znak t�chto dvojic zaktivn�
pomoc� "\activechar". Implicitn� stylov� soubory nenastavuj� ��dn�
znak samy o~sob� jako aktivn�. Volba je ponech�na na u�ivateli (ten
mus� m�t �plnou kontrolu o~aktivn�ch znac�ch) a m��e znak zaktivnit
pomoc� "\activechar<znak>". Nap��klad \clqq"\czech \activechar-"\crqq{}
je analogick� \LaTeX{}ov�mu \clqq"\usepackage[split]{czech}"\crqq.

V~Babelovsk�ch stylov�ch souborech jsou �asto definov�ny
tzv.~\uv{shorthands}, co� jsou dvojice znak� se specifick�m chov�n�m 
v~dan�m jazyce. I~tuto v�c lze deklarovat pomoc�
"\doublechardef". Tento deklar�tor nav�c podobn� jako "\langdef"
definuje makra z�visl� na zvolen�m jazyce.

Na rozd�l od \LaTeX{}ov�ch stylov�ch soubor�, kter� mus� u�ivatel
uv�st v~z�hlav� dokumentu a jsou tedy zaru�en� �teny ve vertik�ln�m
m�du na vn�j�� �rovni skupin, tento p�edpoklad nemus� b�t spln�n p�i
�ten� stylov�ch soubor� bal��ku LANG. Stylov� soubor je zde na�ten p�i
prvn�m p�epnut� do dan�ho jazyka a to se m��e st�t klidn�
v~horizont�ln�m m�du nebo dokonce uvnit� skupiny, kdy m� u�ivatel
nastaveny kategorie znak� t�eba zcela nestandardn�m zp�sobem. LANG
proto �ten� stylov�ho souboru prov�d� stejn� jako OFS na��t�
k�dovac� soubory (viz~\cite{ofs2slt}).

�ten�� si m��e v�imnout, �e stylov� soubory bal��ku LANG um�j� to sam�
jako st�vaj�c� stylov� soubory pro \LaTeX{} a Babel, ale jsou delako
p�ehledn�j�� a srozumiteln�j��. Ne�e�� se v~nich nap��klad ot�zka
jednotliv�ch znak� (nap��klad jak vytvo�it "\clqq", "\crqq"), proto�e tyto
z�le�itosti do stylov�ch soubor� pro jazyk nepat��. Tyto ot�zky maj�
b�t �e�eny na �rovni maker, kter� manipuluj� s~k�dov�n�m font�
(v~na�em p��pad� na �rovni OFS). V~deklaraci jazyka v~souboru
"langdef.tex" uv�d�me seznam povolen�ch k�dov�n�, kter� se s~dan�m
jazykem mohou pou��t. Pr�nik znak� ze v�ech t�chto k�dov�n� je znakov�
v�bava, se kterou m��eme ve stylov�ch souborech pro jazyk po��tat a
nemus�me �e�it, jak jsou tyto znaky v~jednotliv�ch fontech
realizov�ny. Toto odd�len� problematiky k�dov�n� od problematiky
jazyk� ve stavaj�c�ch stylov�ch souborech \LaTeX{}u chyb� a je tam
bohu�el nesm�rn� gul�. Bal��ek LANG n�m tedy umo��uje p�epsat kompletn�
stylov� soubory pro jazyky znova, a mnohem l�pe.

V~sou�asn� dob� jsem pro LANG p�epsal stylov� soubory angli�tiny,
n�m�iny, �e�tiny, sloven�tiny a pol�tiny, ��ste�n� ru�tiny.
Implementace dal��ch jazyk�, zvl�t� t�ch v�ce exotick�ch, vy�aduje
nejprve rozbor pou�iteln�ch k�dov�n�, implementace t�chto k�dov�n� do
OFS, p�evzet� vzor� d�len� a nakonec naps�n� stylov�ho souboru pro
LANG. OFS je pro implementaci dal��ch k�dov�n� pro nelatinkov�
abecedy p�ipraveno. Nab�z� podle m�ho n�zoru v�e, co je mo�n�
vy�d�mat z~8bitov�ho \TeX{}u. Samo�ejm� jazyky s~tis�ci znaky 
v~abeced� nebudou asi t�mto p��stupem implementovateln�, ale tady
skute�n� nar��me na limity \TeX{}u, kde vzory d�len� jednoho jazyka
musej� pracovat s~abecedou s~maxim�ln�~240 znaky.


\kap Vzory d�len� slov
%%%%%%%%%%%%%%%%%%%%%%

Vzory d�len� jsou na��t�ny p�i generov�n� form�tu
p��kazem "\loadpatterns" pro v�echny jazyky, kter� jsou uvedeny 
v~parametrech tohoto p��kazu. Podpo\-ruje-li jazyk v�ce k�dov�n�, kter�
r�zn� rozmis�uj� abecedu jazyka, pak p��kaz "\loadpatterns" m��e na��st
stejn� vzory d�len� slov v�cekr�t pod r�zn�mi k�dov�n�mi.

Vzory d�len� slov pro dan� jazyk jsou v bal��ku LANG ulo�eny v�hradn� 
v~souboru "hyph-<zkratka-jazyka>.tex".

P�vodn� jsem si myslel, �e konverzi na c�lov� k�dov�n� provedu
v dob� na��t�n� vzor� d�len� na �rovni expand procesoru, jako je to
ud�l�no v~\CSLaTeX{}u. Ve vzorech d�len� bychom zapisovali znaky
jazyka pomoc� p�epis� "\v c", "\'a" atd., co� by bylo nez�visl� na
k�dov�n�. Pro nastaven� t�chto maker by se dalo vyu��t OFS, kter� ve
sv�ch deklara�n�ch souborech pro jednotliv� k�dov�n� tato makra definuje.
Tento n�vrh jsem nakonec nepou�il, proto�e p�i na��t�n� vzor�
jazyk� cel�ho sv�ta bychom zbyte�n� zat��ili pam� \TeX{}u definicemi
maker pro velk� mno�stv� znak�. Pravda, po uzav�en� skupiny se pam�
uvoln�, ale ne cel�. V�echny \uv{multileter control sequences}
z�st�vaj� v pam�ti \TeX{}u natrvalo. To je p�i velk�m mno�stv� znak�
v�ech mo�n�ch jazyk� zbyte�n� pl�tv�n�.

Rozhodl jsem se tedy konverze vzor� d�len� d�lat pomoc� "\lccode". 
V~\TeX{}u toti� plat�, �e parametry primitiv� "\patterns" 
a "\hyphenation" jsou nejprve konvertov�ny p�es "\lccode" a teprve potom
pou�ity a ulo�eny ve vhodn�m tvaru do pam�ti. Vzor d�len� dan�ho jazyka
m��e b�t tedy osmibitov� nebo zapsan� v zob�kov� konvenci (nap�.~"^^ab").
P�itom mus�me d�t makr�m najevo, v~jak�m k�dov�n� vzory d�len� jsou.
Proto na za��tku souboru se vzory d�len� mus� b�t uveden p��kaz
"\declarehyphentable". �vodn� ��st souboru "hyph-cz.tex" tedy vypad� takto:

\begtt
%%% Czech hyphen table by Pavel Sevecek, see czhyphen.tex for more details
\declarehyphentable [cz/8t] % for LANG package
\patterns{
.a2
.a4da
.a4de
.a4di
.a4do
.a4d^^e9
.a4kl
.a4ko
.a4kr
<...atd>
\endtt

Pokud m� "\loadpatterns" na��st �esk� vzory v k�dov�n� "8t"
(tj.~podle Corku), pak p��kaz "\declarehyphentable[cz/8t]" ponech�
v�echny hodnoty "\lccode" rovny sv�m parametr�m, tj. provede se konverze jedna
ku jedn�. Jestli�e se ale maj� na��st tyt� vzory d�len� v jin�m k�dov�n�
ne� "8t", pak se "\declarehyphentable[cz/8t]" prom�n� 
v~"\input h8t-<k�dov�n�>.tex". Nap��klad p�i �ten� na�ich vzor� 
v~k�dov�n� "8z" se p�e�te soubor "h8t-8z.tex". Tam je jednodu�e �e�eno
toto:

\begtt
%% The \lccode transformation table from 8t to 8z encoding
%
% For LANG package prepared by Petr Olsak
% Mar. 2004

\lccode`^^a3=`^^e8
\lccode`^^a4=`^^ef
\lccode`^^a5=`^^ec
\lccode`^^a8=`^^e5
<...atd.>
\endtt

T�m je konverze k�dov�n� vzor� d�len� ze vstupn�ho "8t" 
do c�lov�ho "8z" zaru�ena. Vzory d�len� pro ka�d� jazyk a pro ka�d�
k�dov�n� jsou na��t�ny ve skupin�, tak�e po ukon�en� skupiny se 
v�echna pomocn� makra a p�echodn� nastaven� "\lccode" vr�t� do
p�vodn�ho stavu. P�itom "\patterns" a "\hyphenation" prov�d� p�i�azen�
glob�ln�, tak�e to pot�ebn� se nezapomene.

Zat�mco vzory �esk�ho a slovensk�ho jazyka jsem kompletn� p�evedl do
k�dov�n� "8t" (z p�vodn�ho na k�dov�n� nez�visl�ho \TeX{}ov�ho
zna�en�), u mnoha jin�ch jazyk� to nen� pot�eba d�lat. Nap��klad
pol�tina m� vzory d�len� zaps�ny pomoc� aktivn�ho znaku "/" a ulo�eny
v souboru "plhyph.tex". Potom sta�� do souboru "hyph-pl.tex" pro LANG
napsat:

\begtt
\declarehyphentable [pl/8t] % for LANG package
 \catcode`\/=13
 \def/#1{%
  \ifx#1a^^a1\else\ifx#1c^^a2\else\ifx#1e^^a6\else\ifx#1l^^aa\else
  \ifx#1n^^ab\else\ifx#1o^^f3\else\ifx#1s^^b1\else\ifx#1x^^b9\else
  \ifx#1z^^bb\fi\fi\fi\fi\fi\fi\fi\fi\fi}%
\input plhyph.tex
\endtt

Podobn� jsem zat�m �e�il n�m�inu, kde je v souborech "hyph-de.tex", resp.
"hyph-de2.tex" ps�no "\input dehyphn.tex", resp. "\input dehypht.tex".
Skute�n� vzory d�len� jsem tedy do nov�ch soubor� nekop�roval.
Existuj� dv� mo�nosti:

\begitems
* V nov�ch souborech "hyph-<jazyk>.tex" pou��t "\input <origin�ln�-vzor>".
* Kompletn� zkop�rovat origin�ln� vzor do nov�ho souboru "hyph-<jazyk>.tex". 
\enditems

Ka�d� mo�nost m� sv� pro a proti. Prvn� mo�nost m� v�hodu v tom, �e
pokud p�ijde upgrade vzor� d�len� n�jak�ho jazyka, pak tento upgrade
m��eme rovnou pou��t v bal��ku LANG, ani� bychom o tom t�eba v�bec
v�d�li. Tato mo�nost m� ale nev�hodu, �e pokud se auto�i origin�ln�ch
vzor� rozhodnou pro zm�nu n�zvu souboru nebo p�idaj� do souboru
makro, kter� se nebude sn�et s~bal��kem LANG, pak n�m na��t�n� t�chto
vzor� p�estane fungovat. Zat�m nev�m, kter� z~uveden�ch dvou mo�nost�
je lep�� a ke kter� se nakonec p�iklon�m.

Dal�� dilema v~souvislosti se vzory d�len� spo��v� v~tom, zda je lep��
ponechat vzory d�len� 8bitov� nebo rad�ji je ps�t v~zob�kov� konvenci
(nap�.~"^^ab"). P�ipad� mi, �e zob�kov� konvence je lep��. Vzory
d�len� na��t�me v dob� ini\TeX{}u a tud�� m�me zaru�eno, �e nebude
n�jak� u�ivatel m�nit p�ed na�ten�m vzor� kategorii znaku~"^".
Na druh� stran� omylem zaveden� TCX tabulky nebo jinak modifikovan�
"xord/xchr" vektor v dob� ini\TeX{}u m��e zcela znehodnotit na��t�n�
8bitov�ch vzor� d�len� slov.


\kap Bal��ek IENC
%%%%%%%%%%%%%%%%%

Tento bal��ek se star� o~p��padn� p�ek�dov�n� vstupn�ho textu na
aktu�ln� pou�it� k�dov�n� font�. �zce p�i tom spolupracuje s~bal��kem
LANG, kter� p�ep�n� k�dov�n� font�, a p�i tomto p�ep�n�n� samoz�ejm�
spolupracuje s~bal��kem OFS.

Na rozd�l od bal��k� OFS a LANG nen� IENC zaveden do form�tu. U�ivatel
si m��e p�ek�dov�n� �e�it po sv�m a nemus� vyu��t IENC. Nap��klad si
u�ivatel nastav� TCX tabulky a pou�ije jen jedin� k�dov�n� font�.

Pokud chce u�ivatel vyu��t slu�eb bal��ku IENC, pak na za��tek sv�ho
dokumentu m��e napsat:

\begtt
\input ienc
\ienc [cp1250]
...
\endtt

V~tomto p��kladu d�v� u�ivatel najevo, �e m� vstupn� dokument k�dovan�
podle CP1250. Bal��ek IENC si ov���, zda je dostupn� enc\TeX{} a pokud
ano, �e�� p��padn� p�ek�dov�n� pomoc� n�j. Jinak se sn��� k~tomu, �e
n�kter� znaky nastav� jako aktivn� (podobn�, jako "inputenc", ale
narozd�l od n�j nenastavuje nutn� v�echny znaky jako aktivn�. Ty
pozice, kter� maj� stejn� vstupn� i fontov� k�dov�n�, z�st�vaj�
neaktivn�.

Kdykoli bal��ek LANG je nucen zm�nit k�dov�n� font�, po�le o~tom zpr�vu
bal��ku IENC a ten podle toho pozm�n� p�ek�dovac� strategii.
V tom se v�znam� li��m od \LaTeX{}u, kde rozhran�m mezi "inputenc" a
"fontenc" jsou na k�dov�n� nez�visl� \TeX{}ov� sekvence. Zm�na
k�dov�n� font� je tam tedy nez�visl� na �innosti bal��ku "inputenc".
D�vod, pro� jsem tuto strategii nep�ejal, je z�ejm�: bal��ek IENC se
sna��, pokud to jde, o p��mo�ar� p�ek�dov�n� (nap��klad pomoc�
enc\TeX{}u), aby bylo mo�no nap��klad p�id�lovat znak�m pou�it�
abecedy odpov�daj�c� kategorie.

Bal��ek IENC rozli�uje dva druhy vstupn�ho k�dov�n�: jednobytov� a
v�cebytov�. P�i jednobytov�m k�dov�n� se p�edpokl�d� 92 ASCII znak� na
sv�ch pevn�ch pozic�ch a zbyl� znaky do celkov�ho po�tu 256 se mohou 
v jednotliv�ch k�dov�n�ch m�nit. Zm�na se m��e prov�st pomoc�
enc\TeX{}u a pokud ten nen� dosa�iteln�, pak IENC vyp��e varov�n� a
nastav� p�ek�dov�n� pomoc� aktivn�ch znak�.

P�esto�e nen� enc\TeX{} dosa�iteln�, IENC si p�ekontroluje stav "xord"
vektoru \TeX{}u a p�ek�dovac� metody nav�e na v�stup z tohoto
vektoru. Kontrolu provede docela jednodu�e. Na�te vzorek znak� ze
souboru "iencdef.tex". V tomto souboru bude definov�no makro
"\bytechars", ve kter�m budou v�echny znaky s~jednotliv�mi k�dy
uspo��d�ny vzestupn� jeden za druh�m. Pokud je "xord" vektor nastaven
jinak, ne� jedna ku jedn�, makra bal��ku IENC to odhal�: nap��klad
240.~znak makra "\bytechars" nem� k�d 240, ale m� t�eba k�d 190. To
znamen�, �e "xord" vektor transformuje k�d 240 na k�d 190. Pokud nyn�
u�ivatel ozna�� vstupn� k�dov�n� souboru, ze kter�ho plyne, �e t�eba
znak s k�dem 240 je p�smeno �, nastav� makro IENC tranformaci znaku s
k�dem 190 na � a nikoli 240 na �. Tak�e IENC ct� toto po�ad�
p�ek�dov�n�: 

$$
\hbox{soubor}\kern3pt
\buildrel \rm xord \over \longrightarrow\kern3pt
\buildrel \rm IENC \over \longrightarrow\kern3pt
\hbox{\TeX{}ov� fonty, "dvi"}
$$

D�sledek: nap��e-li u�ivatel nap�. "\ienc[cp1250]" a jeho vstupn�
soubor skute�n� je v tomto k�dov�n�, pak IENC p�ek�duje z tohoto
k�dov�n� spr�vn� na vnit�n� k�dov�n� font� {\it nez�visle\/} na stavu
"xord" vektoru v \TeX{}u (tj.~nez�visle na nastaven� TCX tabulce ve
web2c\TeX{}u). Tato schopnost nap��klad sou�asn�mu bal��ku "inputenc"
z~\LaTeX{}u chyb�: tento bal��ek vy�aduje nastaven� "xord" vektoru
jedna ku jedn� a pokud toto nen� spln�no, vede to ke zbyte�n�mu maten�
u�ivatel� a ke k�dovac�mu gul�i.

Pokud jde o v�cebytov� k�dov�n�, v �vahu p�ich�z� asi jen UTF-8.
V tomto k�dov�n� m��eme zapsat znaky abeced cel�ho sv�ta sou�asn� do
jednoho souboru. To n�s v 8bitov�m \TeX{}u vede k dilematu: na��st
definice kter� transformuj� UTF-8 k�dy na \TeX{}ov� sekvence pro
v�echny znaky (je jich mnoho des�tek tis�c!) nebo rad�ji �et�it pam�t�
\TeX{}u a na��tat \uv{�seky} t�chto definic podle pot�eby a podle
pou�it�ho jazyka? Po del��m v�h�n� jsem se rozhodl ke druh� variant�
�e�en�. Pop��u stru�n�, jak to je ud�l�no.

Pro zpracov�n� UTF-8 k�dov�n� p�edpokl�d�m pou�it� enc\TeX{}u
Naraz�-li \TeX{} na zat�m nedeklarovan� UTF-8 k�d na sv�m vstupu,
vyp��e o tom varov�n� na termin�l a do logu. Tomu m��e u�ivatel
p�edej�t tak, �e p�epne v bal��ku LANG do odpov�daj�c�ho jazyka.
To zp�sob� nejen nastaven� odpov�daj�ch font�, ale tak� p��padn�
na�ten� dal��ho �seku deklarac� UTF-8 k�d�, kter� souvis� s uveden�m
jazykem. 

Bal��ek IENC m�m zat�m jen ve f�zi \uv{ideov�ho n�vrhu}. Plno v�c�
je�t� zb�v� do�e�it. Nap��klad jak p�ehledn� �lenit deklarace UTF-8
k�d� a jak�m softwarem tyto deklarace generovat p��mo z UNICODE
specifikac� na "www.unicode.org".


\reference

\bib {ftp} 
     \url{ftp://math.feld.cvut.cz/pub/olsak/oktex}.

\bib {fontname}
     Karl Berry. {\it Fontname}, \url{/texmf/doc/fontname/fontname.pdf}
     
\bib {ofsdoc}
     Petr Ol��k. {\it OFS: Ol��k�v fontov� syst�m}. 2001, 2004.
     Dokumentace k~bal�ku je v~souborech "ofsdoc.tex", "ofsdoc.pdf".

\bib {langdoc}
     Petr Ol��k. {\it LANG: Multijazykov� bal��ek pro plain}. 2004.
     Dokumentace k~bal�ku je v~souborech "ofslang.tex", "ofslang.pdf".

\bib {ofs2slt}
     Petr Ol��k. {\it Novinky v OFS}. 
     in: \SLT{} 2004 -- sborn�k semin��e o Linuxu a \TeX{}u.

\bye 







