% EncTeX documentation
%%%%%%%%%%%%%%%%%%%%%%
%           Petr Olsak

% see encdoce-e.tex for English version of this documentation

\chyph % zpracujte formatem csplain

\def\Red{}
\def\Black{}
\def\Blue{}
\def\Green{}
\def\beglink#1{}
\def\endlink{}
\def\aimlink#1{}
\def\urllink#1{{\tt#1}}
\def\urllinkk#1#2{{\tt#1}}

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

\ifx\pdfannotlink\undefined  % Verze pdfTeXu >= 14
   \let\pdfannotlink=\pdfstartlink
\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\urllinkk#1#2{\pdfannotlink height 10pt depth 3pt 
   user{/Border[0 0 0]/Subtype/Link/A << /Type/Action/S/URI/URI(#2)>>}\relax
   \Green{\tt #1}\Black\pdfendlink}
\def\urllink#1{\urllinkk{#1}{#1}}


\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 (Feb. 2003) 
         /ModDate (Jun. 2004)
         /Creator (TeX)
         /Producer (pdfTeX)
         /Title (encTeX)
         /Subject (Documentation)
         /Keywords (TeX, fonts)
}

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


\font\titulfont=\fontname\tenbf\space scaled\magstep4
\font\bigbf=\fontname\tenbf\space scaled\magstep1

\parindent=12pt

\newcount\secnum  \newcount\subsecnum

\def\kap #1\par{\ifnum\secnum>0 \goodbreak\fi\removelastskip
   \vskip2\baselineskip
   \subsecnum=0 \advance\secnum by1
   \noindent{\bigbf\llap{\the\secnum.\quad}#1}\par\nobreak\medskip}
\def\sec #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 
   \centerline{\titulfont #1}\vskip2\baselineskip}
\def\date #1\par{\bigskip#1\par}
\def\author #1\par{\bigskip#1\par}

\catcode`<=13
\def<{\hbox\bgroup\catcode`_=\active\relax\skoba}
\def\skoba #1>{$\langle$\it#1\/$\rangle$\egroup}
\def\,{\thinspace}
{\catcode`_=\active \gdef_{\_}}

{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
\def\begtt{\medskip\bgroup \setverb \activespace
   \catcode`\"=12 \catcode`_=13
   \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"{\leavevmode\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}


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

{\nopagenumbers

\vglue 4cm

\centerline {\titulfont Enc\TeX}
\vskip2cm
\centerline {\titulfont mo�nost p�ek�dov�n� vstupu v~\TeX{}u}

\vskip3cm

\centerline {\bigbf Petr Ol��k}

\vskip2cm

\centerline{\urllinkk{www.olsak.net/enctex.html}{http://www.olsak.net/enctex.html}}

\vfil

\centerline {\bigbf Toto je dokumentace k~verzi Feb. 2003 a Jun. 2004}

\vskip 4cm 
\break

\null \vfil

Enc\TeX{} je voln� programov� vybaven�; m��ete jej d�le ���it
a modifikovat podle podm�nek \uv{GNU General Public License}, kterou
publikovala "Free Software Foundation"; pou�ijte verzi 2 t�to licence
nebo (podle Va�� volby) libovolnou pozd�j�� verzi.

Bal��ek najdete na Internetu na
\urllink{ftp://math.feld.cvut.cz/pub/olsak/enctex/}.


Tento bal��ek je roz�i�ov�n v~nad�ji, �e bude u�ite�n�, av�ak BEZJAK�KOLI Z�RUKY; neposkytuj� se ani odvozen� z�ruky PRODEJNOSTI anebo
VHODNOSTI PRO UR�IT� ��EL. Dal�� podrobnosti hledejte v~Obecn� ve�ejn�
licenci GNU.

Kopii \uv{GNU General Public License} jste m�l obdr�et spolu s~t�mto
programem; pokud se tak nestalo, napi�te o~ni Free Software Foundation,
Inc., 675 Mass Ave, Cambridge, MA 02139, USA. �esk� p�eklad t�to
licence najdete na "http://www.gnu.cz/gplcz.html".

\bigskip 
\copyright\quad  1997, 2002, 2003, 2004\enspace RNDr. Petr Ol��k

\bigskip

\TeX{} je ochrann� zn�mka American Mathematical Society.

\bigskip
Autor \TeX{}u je profesor Donald Knuth. \TeX{} je voln� programov�
vybaven� se specifickou licenc�, viz dokumentaci k~tomuto programu.

\break
}

\kap Z�kladn� informace
     %%%%%%%%%%%%%%%%%%

Bal�k enc\TeX{} je jednoduch� roz���en� \TeX{}u pro takov� implementace, ve
kter�ch se \TeX{} instaluje ze zdrojov�ho k�du "tex.web". Tuto
podm�nku nap��klad spl�uje implementace web2c, ur�en� pro UNIXy 
a jin� opera�n� syst�my s~kvalitn�m p�eklada�em jazyka C.

Roz���en� enc\TeX{} je zp�tn� kompatibiln� s~origin�ln�m
\TeX{}em. P�id�v� deset nov�ch primitiv�, kter�mi lze ��st nebo
napl�ovat vnit�n� k�dovac� tabulky, podle nich� je znak transformov�n
na �rovni vstupn�ho procesoru \TeX{}u nebo p�i v�stupu na termin�l, do
"log" souboru a "\write" soubor�.  Tyto tabulky se ukl�daj� do
form�tov�ch soubor�, tak�e po na�ten� form�tu se inicializuj� ve
stejn�m stavu, v~jak�m byly v~okam�iku p��kazu "\dump".

Zm�na \TeX{}u je d�kladn� testovan� a pro�la t� testem TRIP 
s~t�mito dv�ma odli�nostmi:

\begitems
* Odli�n� banner 
* Po�et \uv{multiletter control sequences} je o~deset v�t��.
\enditems

\sec Instalace
%    ---------

Viz soubor "INSTALL".

\sec Verze
%    -----

V~roce 1997 byla zve�ejn�na prvn� verze enc\TeX{}u, kter� umo��ovala
konverze pouze v~re�imu \uv{byte na byte} a nastavovala tisknutelnost
znak� (primitivy "\xordcode", "\xchrcode", "\xprncode").

V~roce 1998 obnovil n�kdo z~Polska pou��v�n� TCX tabulek ve web2c
\TeX{}u. Proto�e enc\TeX{} z~roku 1997 d�lal v�cem�n� tot� a
pou��v�n� obou nadstaveb sou�asn� by mohlo b�t pro mnoho u�ivatel�
matouc�, p�estal jsem enc\TeX{} prosazovat. Ov�em v~roce 2002
jsem se rozhodl p�idat do enc\TeX{}u podporu UTF-8 k�dov�n�, proto�e
tato podpora nen� a asi nebude v~TCX tabulk�ch implementov�na.
V~prosinci 2002 jsem se tedy rozhodl znovu za��t propagovat enc\TeX{},
kter� nav�c zvl�dne UTF-8 k�dov�n�.

Verze enc\TeX{}u "Feb.2003"  p�id�v� dal��ch
7~primitiv� "\mubyte", "\endmubyte", "\mubytein", "\mubyteout",
"\mubytelog", "\specialout" a "\noconvert". To umo�n� definovat vstup
pro UTF-8 k�dovan� soubory. Tato verze je samoz�ejm� zp�tn�
kompatibiln� s~p�vodn� verz� enc\TeX{}u z~roku 1997. Nepl�nuji do
budoucna ��dn� rozs�hlej�� zm�ny. Pokud p�eci jenom k~n�jak�m zm�n�m
dojde, pak v�dy budou zp�tn� kompatibiln� se st�vaj�c�m �e�en�m

Verze "Jun.2004" opravuje jen n�kter� drobn� chyby a nep��d�v� ��dn�
nov� funkce (podrobn�ji viz soubor "enctex.patch-jun2004").


\sec Enc\TeX{} ve web2c distribuci
%    -----------------------------

Enc\TeX{} se v~\TeX{}u, pdf\TeX{}u, e-\TeX{}u a pdfe\TeX{}u 
v~distribuci web2c inicializuje pomoc� p�ep�na�e "-enc" na p��kazov�
��dce. Tento p�ep�na� je nutno pou��t p�i inicializaci form�tu.  
V~takov�m p��pad� enc\TeX{} ulo�� sv� primitivy a sv� data do form�tu.  P�i
pou�it� form�tu u� nen� nutn� p�ep�na� "-enc" ps�t znova. Enc\TeX{} se 
v~tomto p��pad� inicializuje z~form�tu a nap��e o~tom zpr�vu na termin�l
a do log souboru. Pokud nepou�ijete p�ep�na� "-enc" v~dob� generov�n�
form�tu, ale pou�ijete jej a� p�i pou�it� form�tu, pak
\TeX{} vyp��e varov�n� o~neexistenci enc\TeX{}u ve form�tu a p�ep�na�
"-enc" je ignorov�n.

Ve web2c distribuci pracuj� se stejn�mi k�dovac�mi vektory xord a xchr
(pro p�ek�dov�n� byte na byte) jednak enc\TeX{} a jednak tzv. TCX tabulky
(p�i pou�it� p�ep�na�e "-translate-file"). Ur�it�mu konfliktu se tedy p�i
sou�asn�m pou��v�n� obou roz���en� nevyhneme. 
Je-li v~enc\TeX{}u pou�ita TCX tabulka, pak p�i startu \TeX{}u 
p�ep��e hodnoty "\xordcode", "\xchrcode" a "\xprncode" podle sebe. 
Znamen� to, �e p�i pou�it� ini\TeX{}u pak nemusej� platit implicitn�
hodnoty t�chto k�d� dokumentovan� v~sekci 2.2 a p�i pou�it� form�tu
s~enc\TeX{}em jsou hodnoty t�chto k�d�, kter� si do form�tu ulo�il
enc\TeX{}, p�eps�ny podle TCX tabulky. O~t�to skute�nosti enc\TeX{}
n�le�it� informuje na termin�lu a v~logu. P�i b�hu programu pak m��ete
enc\TeX{}ov�mi primitivy tyto k�dy d�le ��st a m�nit. Pou�it� TCX
tabulky tedy nevylu�uje mo�nosti enc\TeX{}u.

\sec Probl�m s~licenc� \TeX{}u
%    -------------------------

Enc\TeX{} roz�i�uje \TeX{} o~nov� primitivy, tak�e bychom nem�li tomuto
programu ��kat \TeX{}. Na druh� stran� ale Knuth samotn� p�edpokl�d�,
�e vnit�nosti \TeX{}u budou odst�n�ny od prost�ed� opera�n�ho
syst�mu. Proto implementoval xord a xchr vektory. V~enc\TeX{}u m��eme
nastavit podle zvyklost� opera�n�ho syst�mu vstupn� a v�stupn�
p�ek�dovac� tabulky a pak nastavit v�em nov�m primitiv�m v�znam
"\undefined". D�le se bude \TeX{} modifikovan� enc\TeX{}em chovat stejn�,
jako origin�ln� \TeX{}. Nav�c m��eme p�ek�dovac� tabulky nastavit p�i
generov�n� form�tu a v~produk�n� verzi \TeX{}u zak�zat p��stup 
k~primitiv�m. Produk�n� verze \TeX{}u se pak chov� zcela stejn� jako
origin�ln� \TeX{}. Knuth p�edpokl�d�, �e odst�n�n� od prost�ed� 
opera�n�ho syst�mu se provede v�dy p�i kompilaci zdrojov�ho k�du
\TeX{}u, zat�mco enc\TeX{} umo��uje tuto ot�zku �e�it pozd�ji,
nap��klad v~dob� generov�n� form�tu. Umo�n�n� �pravy n�kter�ch
(nap��klad pam�ov�ch) parametr� a� za b�hu \TeX{}u tak� nen� nic
nov�ho a zn�me to skoro u~v�ech distribuc� \TeX{}u.

Domn�v�m se, �e druh� ��dek na termin�lu a v~logu dostate�n� informuje
o~tom, �e se jedn� o~modifikovanou verzi \TeX{}u. Tak� se domn�v�m, �e
pokud se velmi roz���� k�dov�n� UTF-8, pak nen� zbyt� a takov�
konverze jsou v~8 bitov� verzi \TeX{}u nezbytn�.

Je d�le�it� rovn� p�ipomenout, �e implicitn� chov�n� enc\TeX{}u je
takov�, �e pokud se nepou�ij� roz���en� primitivy enc\TeX{}u, pak se
chov� naprosto stejn� jako origin�ln� \TeX{}.

Podle m�ho n�zoru nov�j�� implementace web2c \TeX{}u taky nen� v~p��sn�m
slova smyslu \TeX{}. Umo��uje toti� zm�nu chov�n� programu, pokud na
prvn�m ��dku dokumentu za znaky "%&" je cosi specifick�ho naps�no.  To
je podle m�ho n�zoru v�t�� p�estupek oproti licenci \TeX{}u, ne�
enc\TeX{}ov�mi primitivy nastavit ve form�tu prost�ed� syst�mu a pak tyto
primitivy v~produk�n� verzi \TeX{}u zak�zat.


\kap P�ek�dov�n� byte na byte pomoc� vektor� xord, xchr
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\sec Vektory xord a xchr
%    -------------------

Vektory xord a xchr maj� velikost 255 byt� a obsahuj� informaci
o~p�ek�dov�n� znaku vstupuj�c�ho do \TeX{}u nebo vystupuj�c�ho na
termin�l a do textov�ch soubor�. Jedn� se o~pole vestav�n� do
programu, p�es kter� jsou filtrov�ny ve�ker� textov� vstupn� a
v�stupn� informace. M�-li znak na vstupu k�d $x$ a chceme, aby m�l
uvnit� \TeX{}u k�d $y$, pak mus� b�t nastaven vektor xord tak, aby
xord[$x$]=$y$. P�i zp�tn�m v�stupu znaku na termin�l, do logu a do
soubor� zpracov�van�ch pomoc� "\write" plat� tato pravidla: Nen�-li znak
s~k�dem $y$ ozna�en jako \uv{tisknuteln�}, pak vystupuje pomoc� p�episu
"^^"k�d~$y$. Je-li tisknuteln�, pak vystupuje s~k�dem $z$=xchr[$y$].

Standardn� b�vaj� v~syst�mech s~k�dem ASCII nastaveny hodnoty t�chto
vektor� tak, �e 
\medskip
xord[$i$]=xchr[$i$]=$i$ pro v�echna $i$ v~rozsahu 0~a�~255. 
\medskip
Na syst�mech, kter� nepou��vaj� ASCII, se m��e mapovat 94
tisknuteln�ch ASCII znak� jinam. Mimoto je deklarovan� vlastnost
\uv{tisknutelnosti} znaku v~ASCII takto: Znak je tisknuteln�, pokud m�
k�d~$y$ v~rozsahu 32 a� 126. Ostatn� znaky se pova�uj� za netisknuteln� a
\TeX{} je standardn� p�episuje pomoc� dvojit� st���ky.

Po instalaci bal��ku enc\TeX{} je mo�no p��mo nastavovat a ��st obsahy
vektor� xord a xchr prost�ednictv�m primitiv� "\xordcode"
a "\xchrcode" a d�le nastavovat vlastnost \uv{tisknutelnosti} znaku
pomoc� primitivu "\xprncode". Syntaxe v�ech t�� nov�ch primitiv�
je naprosto stejn�, jakou zn�me nap��klad u~primitiv� "\lccode" a
"\uccode". Nap��klad:

\begtt
\xordcode"AB="CD  \xchrcode\xordcode"AB="AB \the\xchrcode200
\endtt
%
nastavuje xord[0xAB]=0xCD; xchr[xord[0xAB]]=0xAB a d�le vytiskne
hodnotu xchr[200].

Na rozd�l od podobn�ch primitiv� "\catcode", "\lccode", "\sfcode" a 
dal��ch v�ak nov� zaveden� primitivy maj� jednu podstatnou v�jimku. 
Reprezentuj� intern� registry \TeX{}u, kter� v�dy maj� glob�ln� 
platnost. Proto je nastaven� "\xordcode" a "\xchrcode" uvnit� 
skupiny za v�ech okolnost� glob�ln�, a�koli to explicitn� nep��eme. 
�stupem z~po�adavku na mo�nost lok�ln�ho deklarov�n�
hodnot jsem dos�hl podstatn� v�t�� efektivity v�sledn�ho k�du programu.


\sec Tisknutelnost znak� nastaven� pomoc� {\tt\char`\\xprncode}
%    ----------------------------------------------------------

Primitiv "\xprncode" umo��uje nastavovat vlastnost \uv{tisknutelnosti}
znaku takto: Znak s~k�dem $y$ je tisknuteln� pr�v� tehdy, kdy� je
$y$ v~rozsahu 32 a� 126 nebo je "\xprncode" $y > 0$. Nap��eme-li nap��klad
"\xprncode255=1", bude tisknuteln� znak s~k�dem 255. Na druh� stran�,
nastaven� "\xprncode`a" t�eba na nulu nem� na chov�n� programu ��dn�
vliv, proto�e k�d znaku "a" je v~rozsahu 32 a� 126. T�mto
opat�en�m program vykazuje ur�it� pud sebez�chovy, proto�e zl� u�ivatel
by mu mohl nastavit v�echny znaky jako netisknuteln� a program by ztratil
schopnost se vyjad�ovat. Hodnoty "\xprncode" lze nastavit jako u~ostatn�ch
nov�ch primitiv� v~rozsahu nula a� 255, ov�em ot�zka tisknutelnosti je
toto�n� s~ot�zkou na kladnou hodnotu bez ohledu na to, jak velk� tato
hodnota je.

V�choz� hodnoty pro k�dov�n� v~dob� ini\TeX{}u jsou n�sleduj�c�:

\vbox{
\begitems
* "\xordcode" $i$ = $i$ pro v�echna $i$ v~rozsahu 0...255,
* "\xchrcode" $i$ = $i$ pro v�echna $i$ v~rozsahu 0...255,
* "\xprncode" $i$ = 0 pro $i$ v~rozsahu 0...31, 127...255,
* "\xprncode" $i$ = 1 pro $i$ v~rozsahu 32...126.
\enditems
}

Prvn� dva ��dky jsou pravdiv� jen na opera�n�ch syst�mech, kter� p�ijaly
k�dov�n� anglick� abecedy podle ASCII. Pokud tomu tak nen�, pak jsou
v�choz� hodnoty vektor� xord a xchr pozm�n�ny tak, aby mapovaly tisknuteln�
znaky podle syst�mu do ASCII uvnit� \TeX{}u. Takov� zm�na se t�k� jen 95
z�kladn�ch tisknuteln�ch znak�, kter� jsou v~ASCII na pozic�ch
32~a�~126.


\kap Konverze v�ce byt� na jeden byte nebo kontroln� sekvenci
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Od verze Dec 2002 enc\TeX{} um� tak� konvertovat na �rovni vstupn�ho
procesoru v�ce byt� na jeden byte nebo kontroln� sekvenci. 
P�i v�stupu do logu a "\write" soubor� je pak tento objekt 
zp�tn� p�eveden na p�vodn�ch v�ce byt�. Tato vlastnost nechce nahradit
chyb�j�c� interpret regul�rn�ch v�raz� ve vstupn�m procesoru \TeX{}u.
Byla implementov�na pouze z~d�vodu umo�nit pracovat s~UTF-8 k�dovan�mi
soubory v~b�n�m 8 bitov�m \TeX{}u tak, �e znaky z~UTF-8 
z~nej�ast�ji pou��van� abecedy mohou b�t mapov�ny na jeden znak, 
kter� m��e m�t sv�j "\catcode", "\uccode" atd. Jin� znaky 
z~UTF-8 mohou b�t mapov�ny na libovoln� kontroln� sekvence.

Pro nastaven� takov� konverze jsou do \TeX{}u p�id�no nov� p�t
primitiv�: "\mubytein", "\mubyteout", "\mubytelog", "\mubyte" a "\endmubyte".
Primitivy "\mubytein", "\mubyteout" a "\mubytelog" jsou celo��seln�
registry implicitn� s~nulovou hodnotou, tj. konverze vstupu a v�stupu
podle konverzn� tabulky se neprov�d�j�. Je-li "\mubytein" nastaveno na
kladnou hodnotu, \TeX{} okam�it� zah�j� konverze vstupn�ho ��dku podle
konverzn� tabulky. Je-li "\mubyteout" nastaveno na kladnou hodnotu,
\TeX{} za�ne konvertovat do v�stupn�ch "\write" soubor� podle
stejn� konverzn� tabulky. P�i kladn�m "\mubytelog" bude \TeX{} zp�tn� 
konvertovat tak� v�stup do logu a na termin�l.
Implicitn� je konverzn� tabulka pr�zdn� a
jednotliv� ��dky se do n� p�id�vaj� pomoc� dvojice primitiv�
"\mubyte", "\endmubyte" s~touto syntax�:

\begtt
\mubyte <first_token><one_optional_space><optional_prefix><byte_sequence>\endmubyte
\endtt

Ka�d� <byte_sequence> bude p�evedena ve vstupn�m procesoru na
<first_token>. Je-li <first_token> znakem (tj. nen� to kontroln�
sekvence), pak se ignoruje jeho kategorie, proto�e konverze je
prov�d�na v~input procesoru podle sch�matu: <byte_sequence> na jeden
<byte>. P�i v�stupu do logu a "\write" soubor� se pak ka�d� takov�
<byte> znovu p�evede na <byte_sequence>. 

Pokud je <first_token>
kontroln� sekvence, pak se na �rovni vstupn�ho procesoru prom�n�
ka�d� <byte_sequence> na tuto kontroln� sekvenci implementovanou ve form�
nem�niteln�ho tokenu. Token procesor tuto sekvenci tedy znovu
neinterpretuje a z�st�v� za n� ve stavu neignorov�n� mezer. P�i 
{\catcode`\<=12 "\mubyteout<2"} nen� p�i v�stupu do "\write" 
soubor� tato kontroln� sekvence zp�tn� p�ev�d�na na p�vodn� <byte_sequenci>, 
ale podl�h� jen b�n� expanzi, jako ostatn� kontroln� sekvence.
P�i "\mubyteout>=2" se i tyto kontroln� sekvence p�ev�d�j� do
"\write" soubor� na p�vodn� <byte_sequence>. Aby se ale mohly p�ev�st,
nesm�j� p�ed t�m expandovat, tj.~musej�
m�t v~dob� expanze v�znam neexpandovateln� kontroln� sekvence
nebo musej� b�t ozna�eny pomoc� "\noexpand".
P�i "\mubyteout>=3" enc\TeX{} potla�� expanzi kontroln�ch sekvenc�
deklarovan�ch v~"\mubyte" automaticky (podrobn�ji viz sekci~3.8).
V�stup do logu a na termin�l, kter� nen� produktem p��kazu "\write", 
ponech�v� i p�i kladn�m "\mubytelog" kontroln� sekvence nezm�n�ny.

V�znam <optional_prefix> je vysv�tlen v~sekci~3.5.

\sec Zan�en� �daj� do konverzn� tabulky
%    -----------------------------------

Z�znamy do konverzn� tabulky jsou pomoc� primitiv� "\mubyte", "\endmubyte"
zan�eny glob�ln�, zat�mco hodnoty v~registerch "\mubytein",
"\mubyteout" a "\mubytelog" maj� obvykou lok�ln� platnost. 

Dvojice primitiv� "\mubyte", "\endmubyte" pracuje analogicky, jako
dvojice "\csname", "\endcsname". Rozd�l je pouze v~tom, �e prvn� token
<first_byte> se neexpanduje a �e za n�m m��e (po expanzi) n�sledovat
<one_optional_space>. P�i skenov�n� <optional_prefix> a 
<byte_sequence> ji� prob�h� �pln� expanze a p�i n� se nesm� objevit na
vstupu do hlavn�ho procesoru token typu kontroln� sekvence, jinak
nastane chyba, kterou u� zn�me z~pou��v�n� "\csname", "\endcsname":

\begtt
! Missing \endmubyte inserted.
\endtt

Primitiv "\mubyte" na rozd�l od "\csname" neprov�d� �innost na �rovni
expand procesoru, ale jedn� se o~p�i�azovac� primitiv zpracovan� na
�rovni hlavn�ho procesoru. Tak�e po

\begtt
\edef\a{\mubyte X ABC\endmubyte}
\endtt
%
bude makro "\a" obsahovat tokeny: "\mubyte X ABC\endmubyte".

P��klady:

\begtt
\mubyte  ^^c1      ^^c3^^81\endmubyte % �
\mubyte  ^^e1      ^^c3^^a1\endmubyte % �
% atd. -- implementace UTF8

\mubyte  \endash   ^^c4^^f6\endmubyte % p��klad na kontroln� sekvenci
\mubyte  \integral  INT\endmubyte     % p��klad pro ilustraci, viz d�le.

\mubytein=1 \mubyteout=1 \mubytelog=1 % od t�to chv�le je p�ek�dov�n� aktivn�

\def\endash {--}
\def\integral {\ifmmode \int\else $\int$\fi}
\endtt

V~tomto p��klad� je v~m�st� <one optional space> v�ce mezer a
tabul�tor�. Proto�e tabul�tory maj� kategorii mezery, jsou v�echny
tyto znaky p�em�n�ny token procesorem na jedinou mezeru po�adovanou 
v~syntaktick�m pravidle pro "\mubyte", "\endmubyte".

Po pou�it� definic z~p��kladu se nap��klad slovo INTEGRAL prom�n� v~token
"\integral" okam�it� n�sledovan� p�smeny \uv{EGRAL}. V~textu INT EGRAL
bude za tokenem "\integral" mezera a teprve pak p�smena
\uv{EGRAL}. Tak� jsou mo�n� konstrukce typu "\defINT{n�co}" apod. 
Kdy� nap��eme "\show INT", dostaneme odpov��:

\begtt
> \integral=macro:
->\ifmmode \int \else $\int $\fi .
l.18 \show INT
\endtt
%
a "\string INT" se expanduje na text: "\integral".

Po deklaraci INT podle p�edchoz�ho p��kladu se m��e
st�t, �e n�kdo nap��e: "\INT". Spr�vn� by to m�lo v�st na pr�zdnou
kontroln� sekvenci ("\csname\endcsname") n�sledovanou kontroln�
sekvenc� "\integral". Proto�e se ale s~pr�zdn�mi kontroln�mi
sekvencemi v~\TeX{}u moc �asto nepracuje a pro u�ivatele by to mohlo
b�t matouc�, rozhodl jsem se tuto situaci o�et�it tak, �e "\INT" je
p�evedeno pouze na token "\integral".  Pozor na skute�nost, 
�e za sekvenc� "\INT" nen� \TeX{} ve stavu ignorov�n� mezer 
a nav�c m��e za n� okam�it� n�sledovat p�smeno.

\sec Vlastnosti konverze
%    -------------------

Multibytov� sekvence jsou p�evedeny ze vstupu pouze tehdy, pokud jsou
cel� obsa�eny v~jedin�m ��dku. P�esah do dal��ho ��dku nen�
mo�n�. P�ipojen� "\endlinechar" na konci ��dku se m��e st�t p�edm�tem
konverze podle konverzn� tabulky.

Sekvence "^^c3^^81" se neprom�n� ani po pou�it� definic z~p��kladu na
byte \uv{�}, proto�e p�evod dvojit�ch zob�k� na jednotliv� byty
prob�h� v~token procesoru, tj. pozd�ji, ne� p�evody v�ce byt� na
jeden podle "\mubyte".

P�evod v�ce byt� na jeden byte nebo kontroln� sekvenci 
prob�h� pozd�ji ne� konverze podle "\xordcode" a p�i v�stupu do "\write" a
log soubor� pak p�evod podle "\mubyte" prob�h� d��ve ne� konverze podle 
"\xchrcode". <byte_sequence> tedy mus� obsahovat sekvenci byt� tak, jak
jsou tyto byty konvertov�ny ze vstupn�ho souboru pomoc� "\xordcode".

Postupn� procesy na vstupu a v�stupu si m��eme nazna�it takto:

\begtt
vstupn� text -> \xordcode -> p�ipojen� \endlinechar -> 
                \mubyte -> token procesor -> expanze ...
argument \write -> expanze -> \mubyte -> \xchrcode -> v�stup
\endtt

P�i v�stupu do "\write" soubor� a log� zp�tn� konvertovan� 
<byte_sequence> u� nepodl�haj� dal�� konverzi na form�t typu 
"^^c3^^81" ani opakovan� konverzi podle "\mubyte". Tyto
<byte_sequence> se pouze p�evedou podle hodnot "\xchrcode".

Pokud se v~konverzn� tabulce vyskytuj� <byte_sequence> se spole�n�m
za��tkem, ale r�zn� dlouh�, pak input procesor enc\TeX{}u (od verze
Feb.~2003) p�ev�d� v�dy podle nejdel�� mo�n� <byte_sequence>, kter� se
na vstupu objev�. P��klad:

\begtt
\mubyte X A\endmubyte
\mubyte Y ABC\endmubyte
\mubyte \foo ABCD\endmubyte
\endtt

V~tomto p��klad� se ka�d� A~konvertuje na X, ale pokud n�sleduje BC,
pak se skupina ABC konvertuje na Y ov�em s~tou v�jimkou, �e se skupina
ABCD konvertuje na "\foo". Na po�ad� vkl�d�n� �daj� do konverzn� tabulky
primitivem "\mubyte" v~tomto p��pad� nez�le��.

Pokud se v~konverzn� tabulce objev� dv� stejn� <byte_sequence>, pak m�
p�ednost ta, kter� byla zanesena do tabulky pozd�ji.


\sec Konverze v�stupu do logu a na termin�l
%    --------------------------------------

V�stup do logu a na termin�l je p�i nulov�m "\mubytelog" ponech�n bez
konverze. Pokud je v~takov�m p��pad� "\xprncode" znaku nulov�, pak se
znak vytiskne ve form� "^^A" nebo "^^bc". P�i kladn�m "\mubytelog" se
znaky zanesen� do konverzn� tabulky konvertuj� zp�t na
<byte_sequence>. Do logu a na termin�l se ale na <byte_sequence>
nikdy nekonvertuj� kontroln� sekvence.

Zp�tn� konverze do logu a na termin�l je nastavov�na spole�n�
primitivem "\mubytelog" a nelze ji odd�lit tak, �e by nap��klad pro
termin�l byla zp�tn� konverze potla�ena a pro log soubory nikoli.

V�pisy do logu a na termin�l ob�as obsahuj� kompletn� p�epis pr�v�
�ten�ho ��dku, kter� je nap��klad p�i hl�en� chyby rozrt�en na dva
��dky, aby \TeX{} nazna�il m�sto, kde do�lo k~probl�mu. Pro dal��
v�klad budeme t�mto ��stem logu ��kad \uv{p�episy ��dk�}.

Je-li registr "\mubytein" nulov�, pak p�episy ��dk�
funguj� jako ve standardn�m \TeX{}u. Je-li "\mubytein" kladn� a 
"\mubytelog" nulov�, pak je v~p�episech ��dk� zobrazen obsah ��dku a�
po konverzi input procesorem enc\TeX{}u, tj. v~t�chto p�episech se
mohou nap��klad vyskytovat kontroln� sekvence, kter� tam u�ivatel
v�bec nenapsal. Jsou-li "\mubytein" i "\mubytelog"
kladn�, pak jsou p�episy ��dk� realizov�ny bez multibytov� konverze
tam ani zp�t. Prob�h� jen konverze podle xchr a xord vektor�. 
Je t�eba si uv�domit, �e v~tomto p��pad� mohou b�t chybov� v�pisy
pon�kud matouc�. Nap��klad po

\begtt
\mubyte \sekvence ABC\endmubyte  \let\sekvence=\undefined
\mubytein=1 \mubytelog=1
Tady je test ABC a ��dek poka�uje.
\endtt
%
dost�v�me na v�stupu:

\begtt
! Undefined control sequence.
l.3 Tady je test ABC
                     a ��dek poka�uje.
?
\endtt
%
Teprve "\show ABC" odhal�:

\begtt
> \sekvence=undefined.
l.3 \show ABC
\endtt


\sec Maz�n� �daj� v~konverz� tabulce
%    -------------------------------

�daje v~konverzn� tabulce lze mazat jen hromadn�: p��kaz vyma�e
v�echny �daje za��naj�c� na spole�n� prvn� znak v~<byte_sequenci>.
Provede se to pomoc� p��kazu "\mubyte <znak> <znak>\endmubyte".
Nap��klad:

\begtt
\mubyte A A\endmubyte
\endtt
%
odstran� z~konverzn� tabulky v�echny <byte_sequence> za��naj�c�
p�smenem A. 

N�sleduj�c� k�d proma�e celou tabulku:

\catcode`<=12
\begtt
{\catcode`\^^@=12
\gdef\clearmubytes{\bgroup \count255=1
   \loop \uccode`X=\count255
       \uppercase{\mubyte XX\endmubyte}%
       \advance\count255 by1
       \ifnum\count255<256 \repeat
   \mubyte ^^@^^@\endmubyte
   \egroup}
}
\clearmubytes
\endtt
\catcode`<=13


\sec Vstupn� a v�stupn� ��st konverzn� tabulky
%    -----------------------------------------

Konverzn� tabulka konstruovan� pomoc� "\mubyte", "\endmubyte" m� dv�
nez�visl� ��sti: vstupn�, se kterou pracuje input procesor a v�stupn�,
kter� se pou��v� p�i zp�tn�ch konverz�ch. �daje je mo�n� zan�st
nez�visle do ka�d� ��sti p�i pou�it� nepr�zdn�ho <optional_prefix>
(viz syntaktick� pravidlo "\mubyte" na za��tku t�to kapitoly). 
Je-li <optional_prefix>
pr�zdn�, pak se po�adavek na konverzi zanese dvojmo do vstupn� i
v�stupn� ��sti. Je-li ale <optional_prefix> znak kategorie~8 (obvykle
znak "_"), pak se �daj zanese jen do vstupn� ��sti tabulky. Obsahuje-li
<optional_prefix> dvojici znak� kategorie~8 (obvykle tedy "__"), pak
se �daj zanese jen do v�stupn� ��sti tabulky. 

P�i <optional_prefix> "__" (v�stupn� ��st tabulky) je dovoleno m�t
pr�zdnou <byte_sequenci>. V~takov�m p��pad� se p�vodn�
�daje z~v�stupn� ��sti tabulky, kter� odpov�daj� <first_token>,
vyma�ou. Pokud tam ��dn� takov� �daje nebyly, nestane se nic.

Vra�me se ke k�du na vymaz�n� tabulky z~p�edchoz� sekce. Tento k�d
vyma�e v�e ze vstupn� ��sti tabulky a z~v�stupn� jen ty �daje, kter�
jsou v�z�ny na <first_token> ve tvaru <byte>. �daje z~v�stupn� ��sti
v�zan� na kontroln� sekvence nejsou t�mto zp�sobem promaz�ny.
Promaz�n� jednoho �daje ud�l�me pomoc�:
"\mubyte \foo __\endmubyte".


\sec Vkl�d�n� dal��ch kontroln�ch sekvenc�
%    -------------------------------------

Je-li <first_token> ve tvaru kontroln� sekvence a nav�c 
<optional_prefix> je token kategorie~6 
(obvykle znak "#") n�sledovan� <��slem>, 
pak input procesor ponech� beze zm�ny <��slo> znak�, 
ale vlo�� p�ed n� deklarovanou kontroln� sekvenci. 
�daj se zanese jen do vstupn� ��sti konverzn� tabulky.
P��klad:

\begtt
\def\abc{ABC}
\mubyte X BC\endmubyte \mubytein=1  
\mubyte \foo #3 \abc\endmubyte  Nyn� ABC p�ech�z� na \foo ABC
\mubyte \foo #1 \abc\endmubyte  Nyn� ABC p�ech�z� na \foo AX
\endtt  

Parametr <��slo> m� stejnou syntaxi, jako gramatick� kategorie <number> 
z~\TeX{}booku. Nap��klad p�i p��m�m z�pisu dekadick�ch ��slic
m��e n�sledovat jedna nepovinn� mezera, jako v~p�edchoz� uk�zce.

Je-li <��slo> rovno nule, pak bude
ponech�na beze zm�ny cel� <byte_sequence>, kter� n�sleduje. 
V�sledek je tedy stejn�, jako kdyby <��slo> m�lo hodnotu d�lky 
<byte_sequence>.

Hodnota <��sla> je akceptov�na jen v~rozsahu 0 a� 50. Z�porn� ��sla
jsou interpretov�na stejn� jako nula a ��sla v�t�� ne� 50 zp�sob�, �e
input procesor vypne po vlo�en� kontroln� sekvence dal�� konverzi a�
do konce ��dku.

Praktick� p��klad pou�it�:

\begtt
\mubyte \warntwobytes  #2^^c3\endmubyte
\mubyte \warntwobytes  #2^^c4\endmubyte
\mubyte \warntwobytes  #2^^c5\endmubyte
% atd...
\def\warntwobytes #1#2{\message{WARNING: the UTF8 code: 
   \noconvert#1\noconvert#2 is not defined i my macros.}}
\endtt

V~tomto p��klad� byl pou�it nov� primitiv enc\TeX{}u "\noconvert",
jeho� vlastnosti jsou uvedeny pozd�ji v~kapitole~5. P�ipom�n�m tak�,
�e od verze Feb.~2003 nezp�sobuj� jednoznakov� <byte_sequence> kolizi
s~v�ceznakov�mi <byte_sequencemi> se stejn�m za��tkem, tak�e tento
p��klad neru�� konverzi \uv{zn�m�ch} UTF-8 k�d�.



\sec Rozpozn�n� za��tku ��dku
%    ------------------------

Existuj�-li v~konverzn� tabulce <byte_sequence> 
s~prvn�m znakem shodn�m s~aktu�ln�m "\endlinechar", 
tj.~<byte_sequence> jsou ve tvaru <endlinechar><zbytek>,
pak input procesor nav�c ov��uje, zda je <zbytek> shodn� se 
za��tkem ka�d�ho ��dku. Pokud ano, provede po�adovanou konverzi. 
P��klad pou�it�:

\begtt
\bgroup \uccode`X=\endlinechar \uppercase{\gdef\echar{X}}\egroup
\mubyte \fooB \echar ABC\endmubyte % vyhovuje ABC na za��tku ��dku
\mubyte \fooE ABC\echar \endmubyte % vyhovuje ABC na konci ��dku
\mubyte \fooW \spce\space ABC\space \endmubyte
        % vyhovuje ABC jako slovo s mezerami vp�edu i vzadu
\mubyte \foo #\echar ABC\endmubyte % 
        % je-li ABC na za��tku ��dku, vlo�� p�ed n�j \foo
\endtt


\sec Potla�en� expanze v~parametrech write
%    -------------------------------------

Chceme-li p�ev�d�t kontroln� sekvence zp�tn� na <byte_sequence> p�i
z�pisu do "\write" soubor�, mus�me potla�it p��padnou expanzi t�chto
kontroln�ch sekvenc� nap��klad pomoc� "\let\macro=\relax". Proto�e ale
"\write" �asto pracuje asynchronn� a kontroln�ch sekvenc� mapuj�c�ch
UTF-8 m��eme m�t stovky nebo tis�ce, umo��uje enc\TeX{} nastavit
v~dob� expanze parametr� "\write" p��slu�n�m kontroln�m sekvenc�m
v�znam "\relax" automaticky. D�l� to p�i "\mubyteout>=3" a v�znam
"\relax" p�i�ad� pr�v� t�m kontroln�m sekvenc�m, kter� maj� 
ve v�stupn� ��sti konverzn� tabulky nepr�zdnou <byte_sequenci>. 
Jak�koli jin� expanze mimo parametr "\write" prob�haj� 
norm�ln�m zp�sobem. P��klad:

\begtt
\mubyte \foo ABC\endmubyte  \def\foo{macro body}
\mubyteout=2
\immediate\write16{testwrite: \foo}  % zap��e "testwrite: macro body"
\immediate\write16{testwrite: \noexpand\foo} % zap��e "testwrite: ABC"
\mubyteout=3
\immediate\write16{testwrite: \foo}  % zap��e "testwrite: ABC"
\message{testmessage: \foo}          % zap��e "testmessage: macro body"
\message{testmessage: \noexpand\foo} % zap��e "testmessage: \foo"
\edef\a{testedef: \foo}              % expanduje na macro body
\foo                                 % expanduje na macro body
\immediate\write16{\meaning\foo}     % zap��e "\relax"
\message{\meaning\foo}               % zap��e "macro:->macro body"
\endtt

Pomoc� z�pisu "\mubyte <control_sequence> \relax \endmubyte" je mo�no
p�id�lit kontroln� sekvenci p��znak, aby se neexpandovala 
v~parametrech "\write" p�i "\mubyteout>=3", ale na druh� stran� nebude
konvertov�na do ��dn� <byte_sequence>, ale vyp��e se jako obvykle.
Uveden� z�pis m� tedy stejn� v�znam jako 
"\mubyte" <control_sequence>" __\string" <control_sequence>"\space\endmubyte",
ale nav�c �et�� pam�t� \TeX{}u, nebo� \TeX{} nen� nucen ukl�dat 
string <byte_sequence> do poolu.

Popsanou vlastnost enc\TeX{}u m��ete vyu��t k~vytv��en� vlastn�ch 
maker, kter� jinak expanduj� v~parametrech "\write" a jinak
\uv{norm�ln�}. P��klad:

\begtt
\mubyte \writeparameter \relax \endmubyte \def\writeparameter{}
\def\mymacro{\ifx\writeparameter\relax Tady expanduji ve write.
             \else Tady expanduji norm�ln�.\fi}
\endtt


\sec Asynchronn� zpracov�n� p��kazu write
%    ------------------------------------

Je zn�mo, �e pokud nepou�ijeme "\immediate", pak se argument p��kazu
"\write" expanduje a� pozd�ji: ne v~okam�iku v�skytu p��kazu.
P��kaz "\write" si proto ulo�� do sv� pam�ti aktu�ln� 
hodnotu registru "\mubyteout" v~dob� prvn�ho zpracov�n� a pak
p�i expanzi a z�pisu do souboru tuto hodnotu pou�ije.

D�ky t�to vlastnosti m��eme t�eba pro soubor s~obsahem zapisovat
s~hodnotou "\mubyteout=3" a sou�asn� p�i z�pisu do jin�ho souboru
ponech�me hodnotu "\mubyteout=0". To m��e b�t ��douc�
nap��klad proto, �e soubor je ur�en ke zpracov�n� programem, kter�
nem� implementov�nu schopnost pr�ce s~UTF-8 k�dov�n�m. Vyzkou�ejte:

\begtt
\newwrite\tocfile \newwrite\indexfile
\immediate\openout\tocfile=\jobname.toc
\immediate\openout\indexfile=\jobname.idx
\mubyteout=3
\write\tocfile{parametr se bude pozd�ji konvertovat do UTF-8}
{\mubyteout=0 \write\indexfile{parametr z�stane nezm�n�n� bez konverze}}
\write\tocfile{zde se znovu provede konverze}
\end % a teprve v tento okam�ik se v�echny t�i z�pisy provedou
\endtt


\sec Hodnoty registru mubyteout
%    --------------------------

Krom� ji� zm�n�n�ch hodnot 0, 1, 2 a 3 registru "\mubyteout" m��e b�t
n�kdy u�ite�n� nastavit tento registr na hodnoty $-1$, $-2$ a $-3$. 
V�znam t�chto hodnot je vysv�tlen v~n�sleduj�c� tabulce:

\vbox{
\begtt
\mubyteout  <byte>-><byte_sequence>  <cs_name>-><byte_sequence>  potla�en� expanze
----------------------------------------------------------------------------
   0             ne                       ne                   ne
   1             ano                      ne                   ne
   2             ano                      ano                  ne
   3             ano                      ano                  ano
  -1             ano                      ne                   ano
  -2             ne                       ne                   ano
\endtt
\relax}

Je-li zapnut� konverze <byte>"->"<byte_sequence>, pak se tato konverze
prov�d� i do logu a na termin�l, zat�mco konverze 
<cs_name>"->"<byte_sequence> a potla�en�
expanze se t�kaj� jen argument� "\write" a "\special". 


\kap Argumenty primitivu special
     %%%%%%%%%%%%%%%%%%%%%%%%%%%

V~argumentech "\special" se �asto objevuj� texty 
v~p�irozen�m jazyce (nap��klad texty pro z�lo�ky do PDF dokumentu).
P�i st�le �ast�j��m pou��v�n� UTF-8 je ��douc�, aby tyto texty byly 
k�dov�ny v~tomto k�dov�n�. Enc\TeX{} tuto mo�nost nab�z�.

Argument primitivu "\special" je zpracov�n podle hodnoty celo��seln�ho
registru "\specialout", kter� m� implicitn� hodnotu~0.

\begitems
* "\speialout=0" -- ��dn� konverze argumentu se neprovede.
* "\speialout=1" -- provede se konverze jen podle vektoru xchr.
* "\speialout=2" -- provede se konverze jen podle hodnoty "\mubyteout".
* "\speialout=3" -- provede se konverze podle hodnoty "\mubyteout"
                    n�sledovan� konverz� podle xchr.
\enditems

Primitiv "\special" expanduje sv�j argument okam�it�. P�i
"\specialout" 2 nebo 3 se expanze provede podle hodnoty "\mubyteout"
stejn� jako u~primitivu "\write". Pak si p��kaz "\special" ulo�� do
pam�ti aktu�ln� hodnoty "\specialout" a "\mubyteout" a tyto hodnoty
pou�ije je�t� jednou p�i skute�n�m v�stupu argumentu do "dvi" souboru.


\kap Primitiv noconvert
     %%%%%%%%%%%%%%%%%%

Enc\TeX{} zav�d� primitiv "\noconvert", kter�
potla�� p��padnou konverzi n�sleduj�c�ho znaku nebo kontroln� sekvence.
P�esn�ji: primitiv "\noconvert" je neexpanduj�c� a v~sazb� neud�l� nic
(podobn� jako "\relax"). Pokud se ale 
tento primitiv vyskytne v~argumentu "\message" nebo "\errmessage",
pak jeho kontroln� sekvence nen� v�bec vyti�t�na. Nav�c pak n�sleduj�c� 
znak nen� konvertov�n na <byte_sequenci>, a�koli t�eba je "\mubytelog"
kladn� a znak je uveden ve v�stupn� ��sti konverzn� tabulky. 

Primitiv "\noconvert" se chov� stejn� i v~parametrech "\write" a
"\special". V~tomto p��pad� nav�c m��e primitiv "\noconvert" potla�it
konverzi n�sleduj�c� kontroln� sekvence, a�koli je t�eba "\mubyteout"
v�� ne�~2.

Konstrukce "\noconvert\noconvert" vytiskne jedno "\noconvert".

Pokud se m� primitiv "\noconvert" vypsat v~jin�ch situac�ch (nap��klad
p�i v�pisu kontextu p�i hl�en� o~chyb� nebo p�i r�zn�ch
"\tracing..."), pak jeho kontroln� sekvence nemiz� a nav�c 
neovlivn� tisk n�sleduj�c�ho znaku.


\kap Seznam primitiv� enc\TeX{}u
     %%%%%%%%%%%%%%%%%%%%%%%%%%%

Pro lep�� orientaci uv�d�m p�ehled nov�ch primitiv� enc\TeX{}u:

\begitems
* "\mubyte"    --- zan�� �daje do konverzn� tabulky, viz~kap.~3.
* "\endmubyte" --- separ�tor pro "\mubyte".
* "\mubytein" --- registr integer. 0: v�cebytov� vstupn� konverze
                  potla�ena, 1 a v�ce: v�cebytov� vstupn� konverze je
                  aktivov�na. 
* "\mubyteout" --- registr integer, ovlivn� konverzi do v�stupn�ch
                  soubor� "\write" a parametr� "\special", viz~3.10.
* "\mubytelog" --- registr integer, 0: v�cebytov� v�stupn� konverze do
                  logu a na termin�l potla�ena, 1 a v�ce:  v�cebytov� 
                  v�stupn� konverze je aktivov�na.
* "\specialout" --- registr integer, ovlivn� zpracov�n� parametr�
                  "\special", viz~kap.~4.
* "\noconvert" --- podobn� jako "\noexpand", ale pro konverze. Viz~kap.~5.
* "\xordcode" --- p��stup k~vektoru xord, viz 2.1.
* "\xchrcode" --- p��stup k~vektoru xchr, viz 2.1.
* "\xprncode" --- p��stup k~vektoru pro tisknutelnost znak�, viz 2.2.
\enditems

P�ehled prefix� p�i pou�it� 
"\mubyte"<first_token><optional_space><prefix><byte_sequence>"\endmubyte".
Znak~"#" zde ozna�uje libovoln� token kategorie~6 a znak~"_" ozna�uje
libovoln� token kategorie~7.

\begitems
* ��dn� prefix --- z�znam do vstupn� i v�stupn� tabulky.
* "_" --- z�znam jen do vstupn� ��sti tabulky
* "__" --- z�znam jen do v�stupn� ��sti tabulky
* "#<��slo>" --- vlo�en� kontroln� sekvence, n�sleduj�c�ch <��slo> znak�
  ponech� input procesor beze zm�ny.
* "\relax" --- kontroln� sekvence nebude expandovat v~parametrech "\write"
\enditems

Dal�� prefixy se mohou objevit v~budouc�ch verz�ch enc\TeX{}u. V�dy
budou m�t kategorie odli�n� od 11 a 12, tak�e pro za��tek
<byte_sequence> je vhodn� v~makrech pou��t token kategorie 11 nebo 12,
aby se p�ede�lo p��padn�mu konfliktu s~budouc� vez� enc\TeX{}u.


\kap Dokumentace k~p�ilo�en�m soubor�m maker
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Tato ��st dokumentace nebyla ve verzi Dec. 2002 revidovan� a je
ponech�na ve stavu z~roku 1997 s~v�jimkou n�sleduj�c�ho odstavce.

\sec K�dov�n� UTF-8
%    --------------

Pro vstupn� k�dov�n� UTF-8 jsou p�ipraveny soubory "utf8-csf.tex" a
"utf8-t1.tex". V~tomto p��pad� je p�ek�dov�n� implementov�no pomoc�
"\mubyte" a vektory xord, xchr jsou nastaveny tak, �e na jejich �rovni 
je zachov�no identick� zobrazen�.

\sec Form�ty typu {\tt plain-x-y}
%    ----------------------------

V~bal��ku jsou p�ipraveny inicializa�n� soubory pro vygenerov�n� form�tu
podobn�mu standardn�mu form�tu plain. Nap��klad p��kazem

\begtt
$ tex -ini -enc plain-1250-cs
\endtt

vygenerujeme form�t analogick� plainu, kter� �te vstupn� soubory
v~k�dov�n� CP1250 a pracuje s~CS-fonty.

V~bal�ku jsou k~dispozici tyto inicializa�n� soubory pro plain:

\begtt
plain-il2-cs   ...  vstup podle ISO8859-2, textov� fonty v TeXu: CS-font
plain-kam-cs   ...  vstup podle Kamenick�ch, textov� fonty v TeXu: CS-font
plain-1250-cs  ...  vstup podle CP1250, textov� fonty v TeXu: CS-font
plain-852-cs   ...  vstup podle CP852, textov� fonty v TeXu: CS-font
plain-il2-dc   ...  vstup podle ISO8859-2, textov� fonty v TeXu: DC
plain-kam-dc   ...  vstup podle Kamenick�ch, textov� fonty v TeXu: DC
plain-1250-dc  ...  vstup podle CP1250, textov� fonty v TeXu: DC
plain-852-dc   ...  vstup podle CP852, textov� fonty v TeXu: DC
\endtt

\sec Pozn�mka k~dlouh�m n�zv�m soubor�
%    ---------------------------------

V�echny soubory "*.tex" v~bal��ku spl�uj� DOSov� omezen� na d�lku n�zvu
8+3. V�jimkou z~tohoto pravidla jsou pouze soubory plain-x-y popsan�
v��e a analogick� inicializa�n� soubory pro La\TeX{}. Pokud pou��v�te
syst�m, kter� je omezen na 8+3, doporu�uji pro ka�d� k�dov�n� zvolit
jedno p�smeno (nap��klad c=cs, d=dc, i=il2, w=1250, p=852, k=kam,
o=koi8, m=mac) a nahradit n�zvy soubor� v~distribuci t�mito n�zvy:

\begtt
plain-il2-cs.tex     plain-ic.tex
plain-kam-cs.tex     plain-kc.tex
plain-1250-cs.tex    plain-wc.tex
plain-852-cs.tex     plain-pc.tex
plain-il2-dc.tex     plain-id.tex
plain-kam-dc.tex     plain-kd.tex
plain-1250-dc.tex    plain-wd.tex
plain-852-dc.tex     plain-pd.tex
kam-latex.tex        latex-ki.tex
852-latex.tex        latex-pi.tex
\endtt

Obsah "\message" v~souborech {\tt plain-x-y} nem��te. Nap��klad form�t
"plain-wc" se po spu�t�n� p�edstav� sv�m pln�m jm�nem

\catcode`\<=12
\begtt
The format: plain-1250-cs <Sep. 1997>.
\endtt
\catcode`\<=13

\sec K�dovac� tabulky
%    ----------------

Proto�e zm�na vektor� xord a xchr m��e tot�ln� rozhodit chov�n�
\TeX{}u zcela k~nepozn�n�, doporu�uji pou��vat ur�it� soubory, kter�
nastav� po�adovan� k�dov�n�, a d�le s~primitivy "\xordcode",
"\xchrcode" a "\xprncode" za b�hu \TeX{}u moc nela�kovat. V~bal��ku
enc\TeX{} jsou k~dispozici soubory, kter� zm�nu vektor� pro b�n�
k�dov�n� definuj�. Tyto soubory maj� obvyklou p��ponu tex. ��k�me jim
k�dovac� tabulky. Rozli�ujeme dva typy k�dovac�ch tabulek.


\sec Prvn� typ k�dovac�ch tabulek
%    ----------------------------

Prvn� typ tabulek deklaruje vnit�n� k�dov�n� \TeX{}u ve vztahu ke k�dov�n�,
kter� je b�n� pou��van� v~hostitelsk�m opera�n�m syst�mu. M�me-li
nap��klad v~syst�mu k�dov�n� ISO-8859-2 a vnit�n� k�dov�n� \TeX{}u vol�me
podle Corku (k�dov�n� je ozna�ov�no jako T1), pak tabulka mus� p�edefinovat
xord vektor tak, aby mapoval znaky z~ISO-8859-2 do T1 a vektor xchr mus�
p�ev�d�t zp�tky z~T1 do k�dov�n� syst�mu.

Tento typ tabulek je pou�it v~inicializa�n�ch souborech "plain-*.tex" a
obsahuje v~n�zvu souboru vstupn� i c�lov� vnit�n� k�dov�n� \TeX{}u. Pod�vejte
se, jak vypad� nap��klad tabulka "il2-t1.tex", kter� definuje vnit�n�
k�dov�n� \TeX{}u podle Corku a vstupn� k�dov�n� ISO8859-2.

Ka�d� tabulka prvn�ho typu �te soubor "encmacro.tex" s~definicemi maker
"\setcharcode", "\expandto", "\texaccent", "\texmacro" a "\redefaccent".

\begitems
* "\setcharcode #1 #2 #3 #4 #5 #6 #7" deklaruje \TeX{}ov� k�dy pro jeden znak.
  Nastav� xord["#1"]="#2", xchr["#2"]="#1", "\xprncode#2"="#7" a 
  postupn� nastav� "\lccode", "\uccode", "\sfcode" a "\catcode" znaku 
  s~k�dem "#2" na hodnoty "#3", "#4", "#5" a "#6". 
  Je-li "#1" otazn�k, pak se xord a xchr nenastav�.

* "\expandto {<definice>}" definuje aktivn� podobu znaku "#2" z~posledn�ho
  "\setcharcode" tak, �e tento token expanduje na <definici>. Podrobn�ji:
  je-li v~"\setcharcode" uvedeno "#6=13", pak bude ka�d� v�skyt znaku "#2"
  expandovat na <definici>. Nen�-li v~"\setcharcode" �e�eno "#6=13", pak
  k~expanzi znaku "#2" na <definici> dojde teprve tehdy, kdy� bude
  (t�eba pozd�ji) nastaveno "\catcode" znaku "#2" na "13".

* "\texaccent" uv{z�pis akcentu} p�ipravuje expanzi \uv{z�pisu akcentu} 
  na znak s~k�dem "#2" z~naposledy pou�it�ho "\setcharcode". Nap��klad 
  z�pis "\v C" bude po na�ten� souboru il2-t1.tex expandovat na znak 
  s~k�dem {\tt\char`\"83}. Pokud z�pis pro akcent nen� v~tabulce uveden, 
  z�st�v� v~p�vodn�m v�znamu, tj. t�eba "\v g" expanduje na primitiv 
  "\accent", kter� usad� h��ek nad p�smeno g.
  K~aktivaci v�ech \uv{z�pis� akcentu} dojde a� po pou�it� makra
  "\redefaccent" (viz n��e).

* "\texmacro #1" deklaruje makro "#1" tak, �e bude expandovat na znak s~k�dem
  "#2" z~naposledy pou�it�ho "\setcharcode". K~p�edefinov�n� makra "#1" 
  dojde (na rozd�l od "\texaccent") okam�it�. Nap��klad makro "\S" bude 
  po na�ten� souboru "il2-t1.tex" expandovat na znak s~k�dem "9F", proto�e 
  na t�to pozici je podle Corku znak paragraf.

* "\redefaccent #1" aktivuje expanzi z�pis� podle "\texaccent" pro jeden
  konkr�tn� akcent "#1".
\enditems

Krom� toho je na za��tku tabulky �ten soubor definic z�visl�ch na k�dov�n�
textov�ho fontu \TeX{}u. V~na�� uk�zce jde nap��klad o~soubor "t1macro.tex".
Definuj� se tam sekvence "\promile", "\clqq" a dal��. 

M��e se st�t, �e nechceme uveden� makra pou��t, ale hodnoty z~tabulky
na��st chceme. Pak m��eme p�istoupit k~n�sleduj�c�mu triku: Definujeme si
makra "\setcharcode" a� "\redefaccent" sami a d�le provedeme na�ten� tabulky
takto:

\begtt
\let\originput=\input \def\input #1  \originput il2-t1
\let\input=\originput
\endtt

V~bal��ku jsou p�ipraveny tyto tabulky prvn�ho druhu:

\begtt
N�zev souboru       vstupn� k�dov�n�    vnit�n� k�dov�n� TeXu
-------------------------------------------------------------
il2-csf.tex         ISO8859-2           CS-font
kam-csf.tex         Kamenick�ch         CS-font
1250-csf.tex        CP1250, MS-Windows  CS-font
852-csf.tex         CP852, PC Latin2    CS-font
il2-t1.tex          ISO8859-2           T1 alias Cork
kam-t1.tex          Kamenick�ch         T1 alias Cork
1250-t1.tex         CP1250, MS-Windows  T1 alias Cork
852-t1.tex          CP852, PC Latin2    T1 alias Cork
\endtt

Za zm�nku stoj� prvn� uveden� tabulka "il2-csf.tex", proto�e ta
jedin� ponech�v� vektory xord a xchr beze zm�ny. Tuto tabulku
je tedy mo�n� pou��t i v~\TeX{}u, kter� neobsahuje roz���en�
enc\TeX{}. V�echny ostatn� tabulky enc\TeX{} explicitn� vy�aduj�.


\sec Druh� typ k�dovac�ch tabulek
%    ----------------------------

Druh� typ tabulek prov�d� p�ek�dov�n� pouze na vstupn� stran� \TeX{}u. Pozn�me
je podle toho, �e nemaj� na konci n�zvu zna�ku pro vnit�n� k�dov�n� \TeX{}u
(tj. "t1" nebo "csf"), ale zna�ku pou��vanou pro k�dov�n� opera�n�ho syst�mu
(nap�. "il2", "kam"). T�eba tabulka "kam-il2.tex" prov�d� na vstupn� stran�
konverzi z~k�dov�n� kamenick�ch do k�dov�n� ISO8859-2. Tento typ tabulek
pozm��uje pouze vektor xchr, ale v�stupn� vektor xord ponech�v� beze zm�ny.
Takovou tabulku pou�ijeme, pokud \TeX{}em na��t�me soubor, kter� je v~jin�m
k�dov�n�, ne� b�n� pou��v�me na na�em opera�n�m syst�mu. P�itom v�stup do
log, aux apod. ponech�me v~k�dov�n� podle na�eho syst�mu. Tyto zm�ny
k�dov�n� je mo�n� prov�d�t i v~pr�b�hu zpracov�n� jedin�ho dokumentu.

Druh� typ tabulek navazuje na vstupn� k�dov�n� deklarovan� d��ve
tabulkou prvn�ho typu. Nastaven� vnit�n�ho k�dov�n� \TeX{}u nen� v�bec
druh�m typem tabulek m�n�no. Uvedeme p��klad. P�i generov�n� form�tu
jsme pou�ili tabulku prvn�ho typu "il2-t1.tex", tak�e vnit�n�
k�dov�n� m�me podle Corku. Nyn� m��eme p�i zpracov�n� dokumentu na
p�echodnou dobu vybrat n�kterou z~tabulek "*-il2.tex", t�eba:

\begtt
\input kam-il2  
\input dokument
\restoreinputencoding
nyn� mohu pracovat v p�vodn�m k�dov�n�...
\end
\endtt

V~dob�, kdy prob�h� na��t�n� souboru dokument.tex se prov�d�
p�ek�dov�n� z~Kamenick�ch do T1, uvnit� \TeX{}u se v�e zpracov�v�
v~T1 a v�stup na termin�l a do logu m�me v~ISO8859-2. V~tomto
k�dov�n� je tak� zaps�n dal�� text pod "\restoreinputencoding".
Tabulka toti� deklaruje toto makro, aby byl mo�n� n�vrat k~p�vodn�mu
nastaven� vektoru xord.

P�i pou�it� tabulek druh�ho typu mus�me d�t velk� pozor, abychom n�co
neud�lali �patn�. V~na�em p��klad� jsou v�echny v�stupy do soubor�
typu aux v~ISO-8859-2, tak�e je p�i opakovan�m spu�t�n� \TeX{}u nesm�me
na��tat v~okam�iku, kdy m�me nastaven vstupn� k�d podle Kamenick�ch. To je
tak� d�vod, pro� nedoporu�uji generovat form�t p��kazem "\dump" v~situaci,
kdy m�me na�tenou tabulku druh�ho typu.

\end









