% utf8cs.tex 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Petr Olsak                                   SLT2002, 9. 11. 2002

% Usage:
% \input utf8cs  \activeUTF

% See the Czech documentation at the end of this file.

% The input text may be in ISO8859-2 OR in UTF8.
% The result after expansion of three active characters 
% is in ISO-8859-2. 
% The consequence: you can re-read the toc/aux etc. \write files.

% Warning: use only the one-to-one tcx/tcp table (il2-cs.tcx for example)

% Only the Czech and Slovak alphabet is supported here.

\ifx \activeUTFcs\undefined \else \endinput \fi

{\catcode`\^^c3=13 \expandafter}\expandafter \def \noexpand^^c3#1{%
  \ifx ^^81#1^^c1\else % \'A
  \ifx ^^a1#1^^e1\else % \'a
  \ifx ^^89#1^^c9\else % \'E
  \ifx ^^a9#1^^e9\else % \'e
  \ifx ^^8d#1^^cd\else % \'I
  \ifx ^^ad#1^^ed\else % \'i
  \ifx ^^93#1^^d3\else % \'O
  \ifx ^^b3#1^^f3\else % \'o
  \ifx ^^9a#1^^da\else % \'U
  \ifx ^^ba#1^^fa\else % \'u
  \ifx ^^9d#1^^dd\else % \'Y
  \ifx ^^bd#1^^fd\else % \'y
  \ifx ^^94#1^^d4\else % \^O
  \ifx ^^b4#1^^f4\else % \^o
  \ifx ^^84#1^^c4\else % \"A
  \ifx ^^a4#1^^e4\else % \"a
  \ifx ^^96#1^^d6\else % \"O
  \ifx ^^b6#1^^f6\else % \"o
  \ifx ^^9c#1^^dc\else % \"U
  \ifx ^^bc#1^^fc\else % \"u
  ^^c3#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
{\catcode`\^^c4=13 \expandafter}\expandafter \def \noexpand^^c4#1{%
  \ifx ^^8c#1^^c8\else % \v C
  \ifx ^^8d#1^^e8\else % \v c
  \ifx ^^8e#1^^cf\else % \v D
  \ifx ^^8f#1^^ef\else % \v d
  \ifx ^^9a#1^^cc\else % \v E
  \ifx ^^9b#1^^ec\else % \v e
  \ifx ^^b9#1^^c5\else % \' L
  \ifx ^^ba#1^^e5\else % \' l
  \ifx ^^bd#1^^a5\else % \v L
  \ifx ^^be#1^^b5\else % \v l  
  ^^c4#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
{\catcode`\^^c5=13 \expandafter}\expandafter \def \noexpand^^c5#1{%
  \ifx ^^87#1^^d2\else % \v N
  \ifx ^^88#1^^f2\else % \v n
  \ifx ^^98#1^^d8\else % \v R
  \ifx ^^99#1^^f8\else % \v r
  \ifx ^^a0#1^^a9\else % \v S
  \ifx ^^a1#1^^b9\else % \v s
  \ifx ^^a4#1^^ab\else % \v T
  \ifx ^^a5#1^^bb\else % \v t
  \ifx ^^ae#1^^d9\else % \r U
  \ifx ^^af#1^^f9\else % \r u
  \ifx ^^bd#1^^ae\else % \r Z
  \ifx ^^be#1^^be\else % \v z
  \ifx ^^94#1^^c0\else % \' R
  \ifx ^^95#1^^e0\else % \' r  
  ^^c5#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
\def\activeUTFcs{\catcode`\^^c3=13\catcode`\^^c4=13\catcode`\^^c5=13 
  \message{The UTF-8 encoding for Czech and Slovak alphabet activated.}%
  \message{The ISO-8859-2 input and internal encodings are still accepted.}%
}
\let\activeUTF=\activeUTFcs

\endinput

-----------------------------------------------------

Ceska dokumentace nize je kodovana v UTF-8, protoze predpokladam,
ze bude nejvice zajimat uzivatele "postizene" timto kodovanim.

Po provedení

\input utf8cs \activeUTF

se stanou tři znaky aktivní: 0xc3, 0xc4 a 0xc5

Jsou to právě všechny znaky, které pracují jako "prefixy"
pro písmena české a slovenské abecedy v kódování UTF-8.
Za tímto "prefixem" následuje další byte a tato dvojice bytů
určuje v UTF-8 jedno písmeno.

Makra spojená se znaky 0xc3, 0xc4 a 0xc5 sejmou následující byte a
tato dvojice expanduje na znak podle ISO-8859-2. Protože je
koverze provedena na úrovni expand procesoru, není ohroženo dělení
slov.

Až na výjimky ve slovenském jazyce (viz níže) je po provedení
\activeUTF akceptováno i kódování české a slovenské abecedy
podle ISO-8859-2. Důležitý důsledek: \write soubory (toc, aux apod.)
jsou po expanzi primitivem \write kódovány podle ISO-8859-2 a je
možné je použít při opakovaném čtení bez problémů.

Upozornění: používejte jen tcx/tcp tabulku, která nedělá žádné změny 
v kódování, např. csplain a cslatex v UNIXu používá implicitně
il2-cs.tcx, která je vyhovující. S tabulkou, která dělá konverzi
na úrovni pre-procesoru TeXu to nebude fungovat!

Při použití tabulky il2-t1.tcx je potřeba načíst soubor utf8t1.tex
na místo tohoto souboru. Soubor uft8t1.tex bude vytvořen později.

Český jazyk je zcela bez problémů pro vstup jednak v ISO-8859-2 a
jednak v UTF-8. Slovenština má tyto problémy:

Za znakem Ĺ (\'L) kódovaném v ISO-8859-2 nesmí po \activeUTF
následovat mezera a svorky { }. Ostatní znaky za tímto znakem mohou
být přítomny bez problémů. Za tímto znakem kódovaném v UTF-8 může být
cokoli. Totéž platí pro znak Ä (\"A). Ostatní znaky jsou v obou
kódováních bez problémů.

Jinak řečeno: dvojice "Ĺ ", "Ĺ{", "Ĺ}", "Ä ", "Ä{" a "Ä}"
nebudou fungovat za předpokladu, že písmena Ĺ a Ä jsou kódována
v ISO-8859-2 a současně ja zapnuto \activeUTF. 

Petr Olšák

==========================================================================

Zari 2005:

Vsechny vyse popsane problemy resi encTeX. Mate-li tuto nadstavbu TeXu
v binarce zahrnutou (zkuste tex -enc), pak doporucuji zapomenout na
aktivni znaky a na tento soubor a generovat formaty csplain a cslatex 
schopne rovnou pracovat s UTF8 kodovanim:

tex -ini -enc '\let\enc=u \input csplain.ini'

Podrobnejsi informace najdete v souboru csplain.ini a csenc-u.tex.

Petr Olsak










