summaryrefslogtreecommitdiff
path: root/macros/cstex/base/utf8cs.tex
blob: 6550d109104878c9f83155a52577c4e63dbd27b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
% 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