1 /* Vietnamese charset processing.
2 Copyright � 1999, 2000 Progiciels Bourbeau-Pinard inc.
3 Contributed by Fran�ois Pinard <pinard@iro.umontreal.ca>, 1999.
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public License
7 as published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be
11 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
12 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the `recode' Library; see the file `COPYING.LIB'.
17 If not, write to the Free Software Foundation, Inc., 59 Temple Place -
18 Suite 330, Boston, MA 02111-1307, USA. */
19
20 #include "common.h"
21
22 static const recode_ucs2 tcvn_pool[256] =
23 {
24 /* 0 */ 0x0000, 0x00DA, 0x1EE4, 0x0003, 0x1EEA, 0x1EEC, 0x1EEE, 0x0007,
25 /* 8 */ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
26 /* 16 */ 0x0010, 0x1EE8, 0x1EF0, 0x1EF2, 0x1EF6, 0x1EF8, 0x00DD, 0x1EF4,
27 /* 24 */ 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
28 /* 32 */ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
29 /* 40 */ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
30 /* 48 */ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
31 /* 56 */ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
32 /* 64 */ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
33 /* 72 */ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
34 /* 80 */ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
35 /* 88 */ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
36 /* 96 */ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
37 /* 104 */ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
38 /* 112 */ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
39 /* 120 */ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
40 /* 128 */ 0x00C0, 0x1EA2, 0x00C3, 0x00C1, 0x1EA0, 0x1EB6, 0x1EAC, 0x00C8,
41 /* 136 */ 0x1EBA, 0x1EBC, 0x00C9, 0x1EB8, 0x1EC6, 0x00CC, 0x1EC8, 0x0128,
42 /* 144 */ 0x00CD, 0x1ECA, 0x00D2, 0x1ECE, 0x00D5, 0x00D3, 0x1ECC, 0x1ED8,
43 /* 152 */ 0x1EDC, 0x1EDE, 0x1EE0, 0x1EDA, 0x1EE2, 0x00D9, 0x1EE6, 0x0168,
44 /* 160 */ 0xFFFF, 0x0102, 0x00C2, 0x00CA, 0x00D4, 0x01A0, 0x01AF, 0x0110,
45 /* 168 */ 0x0103, 0x00E2, 0x00EA, 0x00F4, 0x01A1, 0x01B0, 0x0111, 0x1EB0,
46 /* 176 */ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00E0, 0x1EA3, 0x00E3,
47 /* 184 */ 0x00E1, 0x1EA1, 0x1EB2, 0x1EB1, 0x1EB3, 0x1EB5, 0x1EAF, 0x1EB4,
48 /* 192 */ 0x1EAE, 0x1EA6, 0x1EA8, 0x1EAA, 0x1EA4, 0x1EC0, 0x1EB7, 0x1EA7,
49 /* 200 */ 0x1EA9, 0x1EAB, 0x1EA5, 0x1EAD, 0x00E8, 0x1EC2, 0x1EBB, 0x1EBD,
50 /* 208 */ 0x00E9, 0x1EB9, 0x1EC1, 0x1EC3, 0x1EC5, 0x1EBF, 0x1EC7, 0x00EC,
51 /* 216 */ 0x1EC9, 0x1EC4, 0x1EBE, 0x1ED2, 0x0129, 0x00ED, 0x1ECB, 0x00F2,
52 /* 224 */ 0x1ED4, 0x1ECF, 0x00F5, 0x00F3, 0x1ECD, 0x1ED3, 0x1ED5, 0x1ED7,
53 /* 232 */ 0x1ED1, 0x1ED9, 0x1EDD, 0x1EDF, 0x1EE1, 0x1EDB, 0x1EE3, 0x00F9,
54 /* 240 */ 0x1ED6, 0x1EE7, 0x0169, 0x00FA, 0x1EE5, 0x1EEB, 0x1EED, 0x1EEF,
55 /* 248 */ 0x1EE9, 0x1EF1, 0x1EF3, 0x1EF7, 0x1EF9, 0x00FD, 0x1EF5, 0x1ED0,
56 };
57
58 static struct strip_data tcvn_strip_data =
59 {
60 tcvn_pool,
61 {
62 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88,
63 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184,
64 192, 200, 208, 216, 224, 232, 240, 248
65 }
66 };
67
68 static const recode_ucs2 viscii_pool[256] =
69 {
70 /* 0 */ 0x0000, 0x0001, 0x1EB2, 0x0003, 0x0004, 0x1EB4, 0x1EAA, 0x0007,
71 /* 8 */ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
72 /* 16 */ 0x0010, 0x0011, 0x0012, 0x0013, 0x1EF6, 0x0015, 0x0016, 0x0017,
73 /* 24 */ 0x0018, 0x1EF8, 0x001A, 0x001B, 0x001C, 0x001D, 0x1EF4, 0x001F,
74 /* 32 */ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
75 /* 40 */ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
76 /* 48 */ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
77 /* 56 */ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
78 /* 64 */ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
79 /* 72 */ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
80 /* 80 */ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
81 /* 88 */ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
82 /* 96 */ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
83 /* 104 */ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
84 /* 112 */ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
85 /* 120 */ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
86 /* 128 */ 0x1EA0, 0x1EAE, 0x1EB0, 0x1EB6, 0x1EA4, 0x1EA6, 0x1EA8, 0x1EAC,
87 /* 136 */ 0x1EBC, 0x1EB8, 0x1EBE, 0x1EC0, 0x1EC2, 0x1EC4, 0x1EC6, 0x1ED0,
88 /* 144 */ 0x1ED2, 0x1ED4, 0x1ED6, 0x1ED8, 0x1EE2, 0x1EDA, 0x1EDC, 0x1EDE,
89 /* 152 */ 0x1ECA, 0x1ECE, 0x1ECC, 0x1EC8, 0x1EE6, 0x0168, 0x1EE4, 0x1EF2,
90 /* 160 */ 0x00D5, 0x1EAF, 0x1EB1, 0x1EB7, 0x1EA5, 0x1EA7, 0x1EA9, 0x1EAD,
91 /* 168 */ 0x1EBD, 0x1EB9, 0x1EBF, 0x1EC1, 0x1EC3, 0x1EC5, 0x1EC7, 0x1ED1,
92 /* 176 */ 0x1ED3, 0x1ED5, 0x1ED7, 0x1EE0, 0x01A0, 0x1ED9, 0x1EDD, 0x1EDF,
93 /* 184 */ 0x1ECB, 0x1EF0, 0x1EE8, 0x1EEA, 0x1EEC, 0x01A1, 0x1EDB, 0x01AF,
94 /* 192 */ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x1EA2, 0x0102, 0x1EB3, 0x1EB5,
95 /* 200 */ 0x00C8, 0x00C9, 0x00CA, 0x1EBA, 0x00CC, 0x00CD, 0x0128, 0x1EF3,
96 /* 208 */ 0x0110, 0x1EE9, 0x00D2, 0x00D3, 0x00D4, 0x1EA1, 0x1EF7, 0x1EEB,
97 /* 216 */ 0x1EED, 0x00D9, 0x00DA, 0x1EF9, 0x1EF5, 0x00DD, 0x1EE1, 0x01B0,
98 /* 224 */ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x1EA3, 0x0103, 0x1EEF, 0x1EAB,
99 /* 232 */ 0x00E8, 0x00E9, 0x00EA, 0x1EBB, 0x00EC, 0x00ED, 0x0129, 0x1EC9,
100 /* 240 */ 0x0111, 0x1EF1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x1ECF, 0x1ECD,
101 /* 248 */ 0x1EE5, 0x00F9, 0x00FA, 0x0169, 0x1EE7, 0x00FD, 0x1EE3, 0x1EEE,
102 };
103
104 static struct strip_data viscii_strip_data =
105 {
106 viscii_pool,
107 {
108 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88,
109 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184,
110 192, 200, 208, 216, 224, 232, 240, 248
111 }
112 };
113
114 static const recode_ucs2 vps_pool[256] =
115 {
116 /* 0 */ 0x0000, 0x0001, 0x1EA0, 0x1EAC, 0x1EB6, 0x1EB8, 0x1EC6, 0x0007,
117 /* 8 */ 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
118 /* 16 */ 0x1ECA, 0x1ECC, 0x1ED8, 0x1EE2, 0x1EE4, 0x1EF0, 0x0016, 0x0017,
119 /* 24 */ 0x0018, 0x1EF4, 0x001A, 0x001B, 0x1EAA, 0x1EEE, 0x001E, 0x001F,
120 /* 32 */ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
121 /* 40 */ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
122 /* 48 */ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
123 /* 56 */ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
124 /* 64 */ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
125 /* 72 */ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
126 /* 80 */ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
127 /* 88 */ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
128 /* 96 */ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
129 /* 104 */ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
130 /* 112 */ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
131 /* 120 */ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
132 /* 128 */ 0x00C0, 0x1EA2, 0x00C3, 0x1EA4, 0x1EA6, 0x1EA8, 0x1ECD, 0x1ED7,
133 /* 136 */ 0x0102, 0x1EBF, 0x1EC1, 0x1EC3, 0x1EC7, 0x1EAE, 0x1EB0, 0x1EB2,
134 /* 144 */ 0x1EBE, 0xFFFF, 0xFFFF, 0x1EC0, 0x1EC2, 0x1EC4, 0x1ED0, 0x1ED2,
135 /* 152 */ 0x1ED4, 0xFFFF, 0x00FD, 0x1EF7, 0x1EF5, 0x1EDA, 0x1EDC, 0x1EDE,
136 /* 160 */ 0xFFFF, 0x1EAF, 0x1EB1, 0x1EB3, 0x1EB5, 0x1EB7, 0x1EE0, 0x1EDB,
137 /* 168 */ 0x00D9, 0x1EDD, 0x1EDF, 0x1EE1, 0x0168, 0x1EE8, 0x1EE3, 0x1EEA,
138 /* 176 */ 0x1ED5, 0x1EEC, 0x1EF2, 0x1EF8, 0x00CD, 0x00CC, 0x1ED9, 0x1EC8,
139 /* 184 */ 0x0128, 0x00D3, 0x1EED, 0x1EEF, 0x00D2, 0x1ECE, 0x00D5, 0x1EF1,
140 /* 192 */ 0x1EA7, 0x00C1, 0x00C2, 0x1EA5, 0x1EA9, 0x1EAB, 0x1EAD, 0x0111,
141 /* 200 */ 0x1EBB, 0x00C9, 0x00CA, 0x1EB9, 0x1EC9, 0x1EC5, 0x1ECB, 0x1EF9,
142 /* 208 */ 0x01AF, 0x1EE6, 0x1ED3, 0x1ED1, 0x00D4, 0x1ECF, 0x01A1, 0x00C8,
143 /* 216 */ 0x1EEB, 0x1EE9, 0x00DA, 0x0169, 0x01B0, 0x00DD, 0x1EBA, 0xFFFF,
144 /* 224 */ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x1EA3, 0x1EA1, 0x0103, 0xFFFF,
145 /* 232 */ 0x00E8, 0x00E9, 0x00EA, 0x1EBD, 0x00EC, 0x00ED, 0xFFFF, 0x0129,
146 /* 240 */ 0x1EB4, 0x0110, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0xFFFF, 0x01A0,
147 /* 248 */ 0x1EE5, 0x00F9, 0x00FA, 0x1EE7, 0xFFFF, 0x1EF6, 0x1EBC, 0x1EF3,
148 };
149
150 static struct strip_data vps_strip_data =
151 {
152 vps_pool,
153 {
154 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88,
155 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184,
156 192, 200, 208, 216, 224, 232, 240, 248
157 }
158 };
159
160 static const unsigned short viscii_viqr_data[] =
161 {
162 2, 'A', '(', '?', DONE,
163 5, 'A', '(', '~', DONE,
164 6, 'A', '^', '~', DONE,
165 20, 'Y', '?', DONE,
166 25, 'Y', '~', DONE,
167 30, 'Y', '.', DONE,
168 128, 'A', '.', DONE,
169 129, 'A', '(', '\'', DONE,
170 130, 'A', '(', '`', DONE,
171 131, 'A', '(', '.', DONE,
172 132, 'A', '^', '\'', DONE,
173 133, 'A', '^', '`', DONE,
174 134, 'A', '^', '?', DONE,
175 135, 'A', '^', '.', DONE,
176 136, 'E', '~', DONE,
177 137, 'E', '.', DONE,
178 138, 'E', '^', '\'', DONE,
179 139, 'E', '^', '`', DONE,
180 140, 'E', '^', '?', DONE,
181 141, 'E', '^', '~', DONE,
182 142, 'E', '^', '.', DONE,
183 143, 'O', '^', '\'', DONE,
184 144, 'O', '^', '`', DONE,
185 145, 'O', '^', '?', DONE,
186 146, 'O', '^', '~', DONE,
187 147, 'O', '^', '.', DONE,
188 148, 'O', '+', '.', DONE,
189 149, 'O', '+', '\'', DONE,
190 150, 'O', '+', '`', DONE,
191 151, 'O', '+', '?', DONE,
192 152, 'I', '.', DONE,
193 153, 'O', '?', DONE,
194 154, 'O', '.', DONE,
195 155, 'I', '?', DONE,
196 156, 'U', '?', DONE,
197 157, 'U', '~', DONE,
198 158, 'U', '.', DONE,
199 159, 'Y', '`', DONE,
200 160, 'O', '~', DONE,
201 161, 'a', '(', '\'', DONE,
202 162, 'a', '(', '`', DONE,
203 163, 'a', '(', '.', DONE,
204 164, 'a', '^', '\'', DONE,
205 165, 'a', '^', '`', DONE,
206 166, 'a', '^', '?', DONE,
207 167, 'a', '^', '.', DONE,
208 168, 'e', '~', DONE,
209 169, 'e', '.', DONE,
210 170, 'e', '^', '\'', DONE,
211 171, 'e', '^', '`', DONE,
212 172, 'e', '^', '?', DONE,
213 173, 'e', '^', '~', DONE,
214 174, 'e', '^', '.', DONE,
215 175, 'o', '^', '\'', DONE,
216 176, 'o', '^', '`', DONE,
217 177, 'o', '^', '?', DONE,
218 178, 'o', '^', '~', DONE,
219 179, 'O', '+', '~', DONE,
220 180, 'O', '+', DONE,
221 181, 'o', '^', '.', DONE,
222 182, 'o', '+', '`', DONE,
223 183, 'o', '+', '?', DONE,
224 184, 'i', '.', DONE,
225 185, 'U', '+', '.', DONE,
226 186, 'U', '+', '\'', DONE,
227 187, 'U', '+', '`', DONE,
228 188, 'U', '+', '?', DONE,
229 189, 'o', '+', DONE,
230 190, 'o', '+', '\'', DONE,
231 191, 'U', '+', DONE,
232 192, 'A', '`', DONE,
233 193, 'A', '\'', DONE,
234 194, 'A', '^', DONE,
235 195, 'A', '~', DONE,
236 196, 'A', '?', DONE,
237 197, 'A', '(', DONE,
238 198, 'a', '(', '?', DONE,
239 199, 'a', '(', '~', DONE,
240 200, 'E', '`', DONE,
241 201, 'E', '\'', DONE,
242 202, 'E', '^', DONE,
243 203, 'E', '?', DONE,
244 204, 'I', '`', DONE,
245 205, 'I', '\'', DONE,
246 206, 'I', '~', DONE,
247 207, 'y', '`', DONE,
248 208, 'D', 'D', ELSE, 'D', 'd', ELSE, 'd', 'D', DONE,
249 209, 'u', '+', '\'', DONE,
250 210, 'O', '`', DONE,
251 211, 'O', '\'', DONE,
252 212, 'O', '^', DONE,
253 213, 'a', '.', DONE,
254 214, 'y', '?', DONE,
255 215, 'u', '+', '`', DONE,
256 216, 'u', '+', '?', DONE,
257 217, 'U', '`', DONE,
258 218, 'U', '\'', DONE,
259 219, 'y', '~', DONE,
260 220, 'y', '.', DONE,
261 221, 'Y', '\'', DONE,
262 222, 'o', '+', '~', DONE,
263 223, 'u', '+', DONE,
264 224, 'a', '`', DONE,
265 225, 'a', '\'', DONE,
266 226, 'a', '^', DONE,
267 227, 'a', '~', DONE,
268 228, 'a', '?', DONE,
269 229, 'a', '(', DONE,
270 230, 'u', '+', '~', DONE,
271 231, 'a', '^', '~', DONE,
272 232, 'e', '`', DONE,
273 233, 'e', '\'', DONE,
274 234, 'e', '^', DONE,
275 235, 'e', '?', DONE,
276 236, 'i', '`', DONE,
277 237, 'i', '\'', DONE,
278 238, 'i', '~', DONE,
279 239, 'i', '?', DONE,
280 240, 'd', 'd', DONE,
281 241, 'u', '+', '.', DONE,
282 242, 'o', '`', DONE,
283 243, 'o', '\'', DONE,
284 244, 'o', '^', DONE,
285 245, 'o', '~', DONE,
286 246, 'o', '?', DONE,
287 247, 'o', '.', DONE,
288 248, 'u', '.', DONE,
289 249, 'u', '`', DONE,
290 250, 'u', '\'', DONE,
291 251, 'u', '~', DONE,
292 252, 'u', '?', DONE,
293 253, 'y', '\'', DONE,
294 254, 'o', '+', '.', DONE,
295 255, 'U', '+', '~', DONE,
296 DONE
297 };
298
299 #define u(Character) ((unsigned char) (Character))
300 /* FIXME: Should not use Latin-1 characters, anyway. */
301
302 static const unsigned short viscii_vni_data[] =
303 {
304 2, u('A'), u('�'), DONE,
305 5, u('A'), u('�'), DONE,
306 6, u('A'), u('�'), DONE,
307 20, u('Y'), u('�'), DONE,
308 25, u('Y'), u('�'), DONE,
309 30, u('�'), DONE,
310 128, u('A'), u('�'), DONE,
311 129, u('A'), u('�'), DONE,
312 130, u('A'), u('�'), DONE,
313 131, u('A'), u('�'), DONE,
314 132, u('A'), u('�'), DONE,
315 133, u('A'), u('�'), DONE,
316 134, u('A'), u('�'), DONE,
317 135, u('A'), u('�'), DONE,
318 136, u('E'), u('�'), DONE,
319 137, u('E'), u('�'), DONE,
320 138, u('E'), u('�'), DONE,
321 139, u('E'), u('�'), DONE,
322 140, u('E'), u('�'), DONE,
323 141, u('E'), u('�'), DONE,
324 142, u('E'), u('�'), DONE,
325 143, u('O'), u('�'), DONE,
326 144, u('O'), u('�'), DONE,
327 145, u('O'), u('�'), DONE,
328 146, u('O'), u('�'), DONE,
329 147, u('O'), u('�'), DONE,
330 148, u('�'), u('�'), DONE,
331 149, u('�'), u('�'), DONE,
332 150, u('�'), u('�'), DONE,
333 151, u('�'), u('�'), DONE,
334 152, u('�'), DONE,
335 153, u('O'), u('�'), DONE,
336 154, u('O'), u('�'), DONE,
337 155, u('�'), DONE,
338 156, u('U'), u('�'), DONE,
339 157, u('U'), u('�'), DONE,
340 158, u('U'), u('�'), DONE,
341 159, u('Y'), u('�'), DONE,
342 160, u('O'), u('�'), DONE,
343 161, u('a'), u('�'), DONE,
344 162, u('a'), u('�'), DONE,
345 163, u('a'), u('�'), DONE,
346 164, u('a'), u('�'), DONE,
347 165, u('a'), u('�'), DONE,
348 166, u('a'), u('�'), DONE,
349 167, u('a'), u('�'), DONE,
350 168, u('e'), u('�'), DONE,
351 169, u('e'), u('�'), DONE,
352 170, u('e'), u('�'), DONE,
353 171, u('e'), u('�'), DONE,
354 172, u('e'), u('�'), DONE,
355 173, u('e'), u('�'), DONE,
356 174, u('e'), u('�'), DONE,
357 175, u('o'), u('�'), DONE,
358 176, u('o'), u('�'), DONE,
359 177, u('o'), u('�'), DONE,
360 178, u('o'), u('�'), DONE,
361 179, u('�'), u('�'), DONE,
362 180, u('�'), DONE,
363 181, u('o'), u('�'), DONE,
364 182, u('�'), u('�'), DONE,
365 183, u('�'), u('�'), DONE,
366 184, u('�'), DONE,
367 185, u('�'), u('�'), DONE,
368 186, u('�'), u('�'), DONE,
369 187, u('�'), u('�'), DONE,
370 188, u('�'), u('�'), DONE,
371 189, u('�'), DONE,
372 190, u('�'), u('�'), DONE,
373 191, u('�'), DONE,
374 192, u('A'), u('�'), DONE,
375 193, u('A'), u('�'), DONE,
376 194, u('A'), u('�'), DONE,
377 195, u('A'), u('�'), DONE,
378 196, u('A'), u('�'), DONE,
379 197, u('A'), u('�'), DONE,
380 198, u('a'), u('�'), DONE,
381 199, u('a'), u('�'), DONE,
382 200, u('E'), u('�'), DONE,
383 201, u('E'), u('�'), DONE,
384 202, u('E'), u('�'), DONE,
385 203, u('E'), u('�'), DONE,
386 204, u('�'), DONE,
387 205, u('�'), DONE,
388 206, u('�'), DONE,
389 207, u('y'), u('�'), DONE,
390 208, u('�'), DONE,
391 209, u('�'), u('�'), DONE,
392 210, u('O'), u('�'), DONE,
393 211, u('O'), u('�'), DONE,
394 212, u('O'), u('�'), DONE,
395 213, u('a'), u('�'), DONE,
396 214, u('y'), u('�'), DONE,
397 215, u('�'), u('�'), DONE,
398 216, u('�'), u('�'), DONE,
399 217, u('U'), u('�'), DONE,
400 218, u('U'), u('�'), DONE,
401 219, u('y'), u('�'), DONE,
402 220, u('�'), DONE,
403 221, u('Y'), u('�'), DONE,
404 222, u('�'), u('�'), DONE,
405 223, u('�'), DONE,
406 224, u('a'), u('�'), DONE,
407 225, u('a'), u('�'), DONE,
408 226, u('a'), u('�'), DONE,
409 227, u('a'), u('�'), DONE,
410 228, u('a'), u('�'), DONE,
411 229, u('a'), u('�'), DONE,
412 230, u('�'), u('�'), DONE,
413 231, u('a'), u('�'), DONE,
414 232, u('e'), u('�'), DONE,
415 233, u('e'), u('�'), DONE,
416 234, u('e'), u('�'), DONE,
417 235, u('e'), u('�'), DONE,
418 236, u('�'), DONE,
419 237, u('�'), DONE,
420 238, u('�'), DONE,
421 239, u('�'), DONE,
422 240, u('�'), DONE,
423 241, u('�'), u('�'), DONE,
424 242, u('o'), u('�'), DONE,
425 243, u('o'), u('�'), DONE,
426 244, u('o'), u('�'), DONE,
427 245, u('o'), u('�'), DONE,
428 246, u('o'), u('�'), DONE,
429 247, u('o'), u('�'), DONE,
430 248, u('u'), u('�'), DONE,
431 249, u('u'), u('�'), DONE,
432 250, u('u'), u('�'), DONE,
433 251, u('u'), u('�'), DONE,
434 252, u('u'), u('�'), DONE,
435 253, u('y'), u('�'), DONE,
436 254, u('�'), u('�'), DONE,
437 255, u('�'), u('�'), DONE,
438 DONE
439 };
440
441 bool
module_vietnamese(RECODE_OUTER outer)442 module_vietnamese (RECODE_OUTER outer)
443 {
444 if (!declare_strip_data (outer, &tcvn_strip_data, "TCVN"))
445 return false;
446 if (!declare_strip_data (outer, &viscii_strip_data, "VISCII"))
447 return false;
448 if (!declare_strip_data (outer, &vps_strip_data, "VPS"))
449 return false;
450 if (!declare_explode_data (outer, viscii_viqr_data, "VISCII", "VIQR"))
451 return false;
452 if (!declare_explode_data (outer, viscii_vni_data, "VISCII", "VNI"))
453 return false;
454 return true;
455 }
456
457 void
delmodule_vietnamese(RECODE_OUTER outer)458 delmodule_vietnamese (RECODE_OUTER outer)
459 {
460 }
461