% 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