openbase 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +50 -0
- data/License.txt +20 -0
- data/Manifest.txt +53 -0
- data/README.txt +35 -0
- data/Rakefile +126 -0
- data/examples/example.rb +37 -0
- data/ext/CommAPI.c +643 -0
- data/ext/Headers/CommAPI.h +1 -0
- data/ext/Headers/NetClient.h +42 -0
- data/ext/Headers/NetClientLib.h +41 -0
- data/ext/Headers/OB_Memory.h +69 -0
- data/ext/Headers/OpenBaseAdmin.h +227 -0
- data/ext/Headers/OpenBaseConnection.h +337 -0
- data/ext/Headers/OpenBaseEncoding.h +302 -0
- data/ext/Headers/OpenBasePrepare.h +1 -0
- data/ext/Headers/OpenBaseSupport.h +1 -0
- data/ext/Headers/Platform_Carbon_Header.h +5 -0
- data/ext/Headers/Platform_Classic_Header.h +6 -0
- data/ext/Headers/Platform_Linux.h +4 -0
- data/ext/Headers/Platform_Mach_Header.h +4 -0
- data/ext/Headers/Platform_Windows.h +3 -0
- data/ext/Headers/conversion.h +1 -0
- data/ext/Headers/datetime.h +26 -0
- data/ext/Headers/longlong.h +46 -0
- data/ext/Headers/platform.h +67 -0
- data/ext/Headers/stringConversion.h +15 -0
- data/ext/NetClient.c +888 -0
- data/ext/OpenBaseAdmin.c +1884 -0
- data/ext/OpenBaseConnection.c +1841 -0
- data/ext/OpenBaseEncoding.c +993 -0
- data/ext/OpenBaseEncoding_DOS.c +1 -0
- data/ext/OpenBaseEncoding_ISO8859.c +1 -0
- data/ext/OpenBaseEncoding_MacOS.c +1 -0
- data/ext/OpenBaseEncoding_Windows.c +1150 -0
- data/ext/OpenBasePrepare.c +1 -0
- data/ext/OpenBaseSupport.c +1 -0
- data/ext/conversion.c +1 -0
- data/ext/datetime.c +816 -0
- data/ext/depend +1 -0
- data/ext/extconf.rb +10 -0
- data/ext/longlong.c +1 -0
- data/ext/openbase.c +980 -0
- data/ext/stringConversion.c +169 -0
- data/lib/ruby-openbase/version.rb +9 -0
- data/scripts/txt2html +67 -0
- data/setup.rb +1585 -0
- data/test/test_helper.rb +2 -0
- data/test/test_openbase.rb +241 -0
- data/website/index.html +114 -0
- data/website/index.txt +59 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +133 -0
- data/website/template.rhtml +47 -0
- metadata +105 -0
@@ -0,0 +1,993 @@
|
|
1
|
+
/*
|
2
|
+
OB_Encoding.c
|
3
|
+
OpenBase Unified Client
|
4
|
+
�1996-2002 OpenBase International, Ltd.
|
5
|
+
All rights reserved
|
6
|
+
|
7
|
+
Theory of operation:
|
8
|
+
|
9
|
+
A client side driver often needs to convert character data from the client's
|
10
|
+
preferred encoding to the encoding of the database. The SQL 92 language is
|
11
|
+
all ASCII, so the client can safely convert all data. Only string literals
|
12
|
+
should be affected.
|
13
|
+
|
14
|
+
To do the conversion, these routines will get the database encoding from
|
15
|
+
a connection, then use a global map to do the conversion.
|
16
|
+
|
17
|
+
Here is a note about how UTF8 works:
|
18
|
+
|
19
|
+
http://lists.w3.org/Archives/Public/ietf-charsets/2002AprJun/att-0010/01-draft-yergeau-utf8-rev2-00.html
|
20
|
+
|
21
|
+
The table below summarizes the format of these different octet types.
|
22
|
+
The letter x indicates bits available for encoding bits of the character
|
23
|
+
number.
|
24
|
+
|
25
|
+
|
26
|
+
Char. number range | UTF-8 octet sequence
|
27
|
+
(hexadecimal) | (binary)
|
28
|
+
--------------------+---------------------------------------------
|
29
|
+
0000 0000-0000 007F | 0xxxxxxx
|
30
|
+
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
|
31
|
+
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
|
32
|
+
|
33
|
+
(these would not be legal in the Unicode Standard, but they happen)
|
34
|
+
0001 0000-001F FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
35
|
+
0020 0000-03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
|
36
|
+
0400 0000-7FFF FFFF | 1111110x 10xxxxxx ... 10xxxxxx
|
37
|
+
|
38
|
+
|
39
|
+
Disclaimer:
|
40
|
+
-----------
|
41
|
+
THIS SOFTWARE IS FURNISHED ON AN "AS-IS" BASIS. OPENBASE MAKES NO WARRANTIES OF
|
42
|
+
ANY KIND, EITHER EXPRESS OR IMPLIED, AS TO ANY MATTER WHATSOEVER, INCLUDING WITHOUT
|
43
|
+
LIMITATION THE CONDITION, MERCHANTABILITY, OR FITNESS FOR ANY PARTICULAR PURPOSE OF
|
44
|
+
THIS SOFTWARE. OPENBASE DOES NOT ASSUME ANY LIABILITY REGARDING USE OF, OR ANY
|
45
|
+
DEFECT IN, THIS SOFTWARE. IN NO EVENT SHALL OPENBASE BE LIABLE FOR ANY INDIRECT,
|
46
|
+
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, EVEN IF IT HAS BEEN ADVISED OF THE
|
47
|
+
POSSIBILITY OF SUCH DAMAGE.
|
48
|
+
|
49
|
+
WARNING: MODIFY THIS SOURCE CODE AT YOUR OWN RISK. IF YOU DON'T NEED TO MODIFY THE
|
50
|
+
OPENBASE API SOURCE, WE RECOMMEND THAT YOU USE THE COMPILED LIBRARIES.
|
51
|
+
*/
|
52
|
+
#include "platform.h"
|
53
|
+
|
54
|
+
#ifdef __cplusplus
|
55
|
+
extern "C" {
|
56
|
+
#endif
|
57
|
+
|
58
|
+
//================================================================================
|
59
|
+
// Includes
|
60
|
+
//================================================================================
|
61
|
+
#include "OpenBaseEncoding.h"
|
62
|
+
|
63
|
+
#include <string.h>
|
64
|
+
#include <stdlib.h>
|
65
|
+
|
66
|
+
|
67
|
+
//================================================================================
|
68
|
+
// Functions
|
69
|
+
//================================================================================
|
70
|
+
|
71
|
+
int unicode_strlen(const unsigned short* string);
|
72
|
+
unsigned char map_from_unicode(unsigned short unicode_char, OpenBaseCharacterMap* map);
|
73
|
+
unsigned char* ob_encodeUTF8(const unsigned short* unicode, int* size);
|
74
|
+
unsigned short* ob_decodeUTF8(const unsigned char* utf8, int* size);
|
75
|
+
OpenBaseCharacterMap* ob_getCharacterMap(int map_code);
|
76
|
+
|
77
|
+
|
78
|
+
inline int unicode_strlen(const unsigned short* string)
|
79
|
+
{
|
80
|
+
int result = 0;
|
81
|
+
|
82
|
+
if (string != NULL)
|
83
|
+
{
|
84
|
+
while (*string != 0x0000)
|
85
|
+
{
|
86
|
+
string++;
|
87
|
+
result++;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
return result;
|
92
|
+
}
|
93
|
+
|
94
|
+
unsigned char map_from_unicode(unsigned short unicode_char, OpenBaseCharacterMap* map)
|
95
|
+
{
|
96
|
+
char result = 0;
|
97
|
+
|
98
|
+
if (map != NULL)
|
99
|
+
{
|
100
|
+
int low = 0;
|
101
|
+
int high = 255;
|
102
|
+
|
103
|
+
result = map->defaultCharacter;
|
104
|
+
|
105
|
+
// binary search for index that maps to this character
|
106
|
+
while (low <= high)
|
107
|
+
{
|
108
|
+
int mid = (low + high) / 2;
|
109
|
+
if (map->mapToEncoding[mid].unicodeCharacter > unicode_char)
|
110
|
+
{
|
111
|
+
high = mid - 1;
|
112
|
+
}
|
113
|
+
else if (map->mapToEncoding[mid].unicodeCharacter < unicode_char)
|
114
|
+
{
|
115
|
+
low = mid + 1;
|
116
|
+
}
|
117
|
+
else
|
118
|
+
{
|
119
|
+
low = mid + 1;
|
120
|
+
high = mid;
|
121
|
+
result = map->mapToEncoding[mid].encodingCharacter;
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
return result;
|
127
|
+
}
|
128
|
+
|
129
|
+
unsigned char* ob_encodeUTF8(const unsigned short* unicode, int* size)
|
130
|
+
{
|
131
|
+
unsigned char* result = NULL;
|
132
|
+
int result_size = 0;
|
133
|
+
|
134
|
+
// strategy: (1) compute size, (2) do the conversion
|
135
|
+
|
136
|
+
if ((unicode != NULL) && (size != NULL))
|
137
|
+
{
|
138
|
+
int i;
|
139
|
+
|
140
|
+
// compute size
|
141
|
+
for (i = 0; i < *size; i++)
|
142
|
+
{
|
143
|
+
unsigned short curr_unicode = unicode[i];
|
144
|
+
if ((curr_unicode >= 0x0000) && (curr_unicode <= 0x007F))
|
145
|
+
{
|
146
|
+
result_size += 1;
|
147
|
+
}
|
148
|
+
else if ((curr_unicode >= 0x0080) && (curr_unicode <= 0x07FF))
|
149
|
+
{
|
150
|
+
result_size += 2;
|
151
|
+
}
|
152
|
+
else if ((curr_unicode >= 0x0800) && (curr_unicode <= 0xFFFF))
|
153
|
+
{
|
154
|
+
result_size += 3;
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
// allocate space and do the conversion
|
159
|
+
result = (unsigned char*) malloc(result_size);
|
160
|
+
if (result != NULL)
|
161
|
+
{
|
162
|
+
unsigned char* result_ptr = result;
|
163
|
+
|
164
|
+
for (i = 0; i < *size; i++)
|
165
|
+
{
|
166
|
+
unsigned short curr_unicode = unicode[i];
|
167
|
+
if ((curr_unicode >= 0x0000) && (curr_unicode <= 0x007F))
|
168
|
+
{
|
169
|
+
result_ptr[0] = curr_unicode;
|
170
|
+
result_ptr++;
|
171
|
+
}
|
172
|
+
else if ((curr_unicode >= 0x0080) && (curr_unicode <= 0x07FF))
|
173
|
+
{
|
174
|
+
result_ptr[0] = 0xC0 | ((curr_unicode >> 6) & 0x001F);
|
175
|
+
result_ptr[1] = 0x80 | (curr_unicode & 0x003F);
|
176
|
+
result_ptr += 2;
|
177
|
+
}
|
178
|
+
else if ((curr_unicode >= 0x0800) && (curr_unicode <= 0xFFFF))
|
179
|
+
{
|
180
|
+
result_ptr[0] = 0xE0 | ((curr_unicode >> 12) & 0x000F);
|
181
|
+
result_ptr[1] = 0x80 | ((curr_unicode >> 6) & 0x003F);
|
182
|
+
result_ptr[2] = 0x80 | (curr_unicode & 0x003F);
|
183
|
+
result_size += 3;
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
187
|
+
*size = result_size;
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
return result;
|
192
|
+
}
|
193
|
+
|
194
|
+
unsigned short* ob_decodeUTF8(const unsigned char* utf8, int* size)
|
195
|
+
{
|
196
|
+
unsigned short* result = NULL;
|
197
|
+
int result_size = 0;
|
198
|
+
|
199
|
+
// strategy: (1) compute size, (2) do the conversion
|
200
|
+
if ((utf8 != NULL) && (size != NULL))
|
201
|
+
{
|
202
|
+
int i;
|
203
|
+
const unsigned char* utf8_ptr = utf8;
|
204
|
+
|
205
|
+
// compute size
|
206
|
+
for (i = 0; i < *size;)
|
207
|
+
{
|
208
|
+
unsigned char curr_utf8 = ((unsigned char*) utf8)[i];
|
209
|
+
|
210
|
+
if ((curr_utf8 & 0x80) == 0)
|
211
|
+
{
|
212
|
+
result_size += 1;
|
213
|
+
i += 1;
|
214
|
+
}
|
215
|
+
else if ((curr_utf8 & 0xE0) == 0xC0)
|
216
|
+
{
|
217
|
+
result_size += 1;
|
218
|
+
i += 2;
|
219
|
+
}
|
220
|
+
else if ((curr_utf8 & 0xF0) == 0xE0)
|
221
|
+
{
|
222
|
+
result_size += 1;
|
223
|
+
i += 3;
|
224
|
+
}
|
225
|
+
else if ((curr_utf8 & 0xF8) == 0xF0)
|
226
|
+
{
|
227
|
+
result_size += 1;
|
228
|
+
i += 4;
|
229
|
+
}
|
230
|
+
else if ((curr_utf8 & 0xFC) == 0xF8)
|
231
|
+
{
|
232
|
+
result_size += 1;
|
233
|
+
i += 5;
|
234
|
+
}
|
235
|
+
else if ((curr_utf8 & 0xFE) == 0xFC)
|
236
|
+
{
|
237
|
+
result_size += 1;
|
238
|
+
i += 6;
|
239
|
+
}
|
240
|
+
else
|
241
|
+
{
|
242
|
+
// error condition! eat a character
|
243
|
+
result_size += 0;
|
244
|
+
i += 1;
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
248
|
+
result = (unsigned short*) malloc(2 * result_size);
|
249
|
+
if (result != NULL)
|
250
|
+
{
|
251
|
+
unsigned short* result_ptr = result;
|
252
|
+
|
253
|
+
for (i = 0; i < *size;)
|
254
|
+
{
|
255
|
+
unsigned char curr_utf8 = ((unsigned char*) utf8)[i];
|
256
|
+
|
257
|
+
if ((curr_utf8 & 0x80) == 0)
|
258
|
+
{
|
259
|
+
*result_ptr = curr_utf8;
|
260
|
+
result_ptr++;
|
261
|
+
i += 1;
|
262
|
+
}
|
263
|
+
else if ((curr_utf8 & 0xE0) == 0xC0)
|
264
|
+
{
|
265
|
+
unsigned short curr_utf8_0 = ((unsigned char*) utf8)[i];
|
266
|
+
unsigned short curr_utf8_1 = ((unsigned char*) utf8)[i+1];
|
267
|
+
|
268
|
+
*result_ptr = ((curr_utf8_0 & 0x001F) << 6) +
|
269
|
+
(curr_utf8_1 & 0x003F);
|
270
|
+
result_ptr++;
|
271
|
+
i += 2;
|
272
|
+
}
|
273
|
+
else if ((curr_utf8 & 0xF0) == 0xE0)
|
274
|
+
{
|
275
|
+
unsigned short curr_utf8_0 = ((unsigned char*) utf8)[i];
|
276
|
+
unsigned short curr_utf8_1 = ((unsigned char*) utf8)[i+1];
|
277
|
+
unsigned short curr_utf8_2 = ((unsigned char*) utf8)[i+2];
|
278
|
+
|
279
|
+
*result_ptr = ((curr_utf8_0 & 0x001F) << 12) +
|
280
|
+
((curr_utf8_1 & 0x003F) << 6) +
|
281
|
+
(curr_utf8_2 & 0x003F);
|
282
|
+
result_ptr++;
|
283
|
+
i += 3;
|
284
|
+
}
|
285
|
+
else if ((curr_utf8 & 0xF8) == 0xF0)
|
286
|
+
{
|
287
|
+
*result_ptr = '?';
|
288
|
+
result_ptr++;
|
289
|
+
i += 4;
|
290
|
+
}
|
291
|
+
else if ((curr_utf8 & 0xFC) == 0xF8)
|
292
|
+
{
|
293
|
+
*result_ptr = '?';
|
294
|
+
result_ptr++;
|
295
|
+
i += 5;
|
296
|
+
}
|
297
|
+
else if ((curr_utf8 & 0xFE) == 0xFC)
|
298
|
+
{
|
299
|
+
*result_ptr = '?';
|
300
|
+
result_ptr++;
|
301
|
+
i += 6;
|
302
|
+
}
|
303
|
+
else
|
304
|
+
{
|
305
|
+
// error condition!
|
306
|
+
i += 1;
|
307
|
+
}
|
308
|
+
}
|
309
|
+
|
310
|
+
*size = result_size * 2;
|
311
|
+
}
|
312
|
+
}
|
313
|
+
|
314
|
+
return result;
|
315
|
+
}
|
316
|
+
|
317
|
+
|
318
|
+
//void dodo ();
|
319
|
+
//extern int xyz;
|
320
|
+
|
321
|
+
|
322
|
+
OpenBaseCharacterMap* ob_getCharacterMap(int map_code)
|
323
|
+
{
|
324
|
+
OpenBaseCharacterMap* result = NULL;
|
325
|
+
|
326
|
+
switch (map_code)
|
327
|
+
{
|
328
|
+
case OB_ENCODING_ASCII:
|
329
|
+
// use latin1 and strip off characters > 127
|
330
|
+
result = &kOpenBaseCharacterMap_ISO8859_1;
|
331
|
+
//xyz ++;
|
332
|
+
//dodo ();
|
333
|
+
break;
|
334
|
+
|
335
|
+
// ISO 8859 encodings
|
336
|
+
case OB_ENCODING_ISO8859_1:
|
337
|
+
result = &kOpenBaseCharacterMap_ISO8859_1;
|
338
|
+
break;
|
339
|
+
case OB_ENCODING_ISO8859_2:
|
340
|
+
result = &kOpenBaseCharacterMap_ISO8859_2;
|
341
|
+
break;
|
342
|
+
case OB_ENCODING_ISO8859_3:
|
343
|
+
result = &kOpenBaseCharacterMap_ISO8859_3;
|
344
|
+
break;
|
345
|
+
case OB_ENCODING_ISO8859_4:
|
346
|
+
result = &kOpenBaseCharacterMap_ISO8859_4;
|
347
|
+
break;
|
348
|
+
case OB_ENCODING_ISO8859_5:
|
349
|
+
result = &kOpenBaseCharacterMap_ISO8859_5;
|
350
|
+
break;
|
351
|
+
case OB_ENCODING_ISO8859_6:
|
352
|
+
result = &kOpenBaseCharacterMap_ISO8859_6;
|
353
|
+
break;
|
354
|
+
case OB_ENCODING_ISO8859_7:
|
355
|
+
result = &kOpenBaseCharacterMap_ISO8859_7;
|
356
|
+
break;
|
357
|
+
case OB_ENCODING_ISO8859_8:
|
358
|
+
result = &kOpenBaseCharacterMap_ISO8859_8;
|
359
|
+
break;
|
360
|
+
case OB_ENCODING_ISO8859_9:
|
361
|
+
result = &kOpenBaseCharacterMap_ISO8859_9;
|
362
|
+
break;
|
363
|
+
case OB_ENCODING_ISO8859_10:
|
364
|
+
result = &kOpenBaseCharacterMap_ISO8859_10;
|
365
|
+
break;
|
366
|
+
case OB_ENCODING_ISO8859_13:
|
367
|
+
result = &kOpenBaseCharacterMap_ISO8859_13;
|
368
|
+
break;
|
369
|
+
case OB_ENCODING_ISO8859_14:
|
370
|
+
result = &kOpenBaseCharacterMap_ISO8859_14;
|
371
|
+
break;
|
372
|
+
case OB_ENCODING_ISO8859_15:
|
373
|
+
result = &kOpenBaseCharacterMap_ISO8859_15;
|
374
|
+
break;
|
375
|
+
case OB_ENCODING_ISO8859_16:
|
376
|
+
result = &kOpenBaseCharacterMap_ISO8859_16;
|
377
|
+
break;
|
378
|
+
|
379
|
+
// Japanese encodings
|
380
|
+
case OB_ENCODING_ISO2022JP:
|
381
|
+
result = NULL;
|
382
|
+
break;
|
383
|
+
case OB_ENCODING_EUC:
|
384
|
+
result = NULL;
|
385
|
+
break;
|
386
|
+
case OB_ENCODING_SHIFTJIS:
|
387
|
+
result = NULL;
|
388
|
+
break;
|
389
|
+
|
390
|
+
// Mac OS Encodings
|
391
|
+
case OB_ENCODING_MACOS_ROMAN:
|
392
|
+
result = &kOpenBaseCharacterMap_MacOS_Roman;
|
393
|
+
break;
|
394
|
+
case OB_ENCODING_MACOS_ARABIC:
|
395
|
+
result = &kOpenBaseCharacterMap_MacOS_Arabic;
|
396
|
+
break;
|
397
|
+
case OB_ENCODING_MACOS_CENTEURO:
|
398
|
+
result = &kOpenBaseCharacterMap_MacOS_CentEuro;
|
399
|
+
break;
|
400
|
+
case OB_ENCODING_MACOS_CORPCHAR:
|
401
|
+
result = &kOpenBaseCharacterMap_MacOS_CorpChar;
|
402
|
+
break;
|
403
|
+
case OB_ENCODING_MACOS_CROATIAN:
|
404
|
+
result = &kOpenBaseCharacterMap_MacOS_Croatian;
|
405
|
+
break;
|
406
|
+
case OB_ENCODING_MACOS_CYRILLIC:
|
407
|
+
result = &kOpenBaseCharacterMap_MacOS_Cyrillic;
|
408
|
+
break;
|
409
|
+
case OB_ENCODING_MACOS_DEVANAGA:
|
410
|
+
result = &kOpenBaseCharacterMap_MacOS_Devanaga;
|
411
|
+
break;
|
412
|
+
case OB_ENCODING_MACOS_DINGBATS:
|
413
|
+
result = &kOpenBaseCharacterMap_MacOS_Dingbats;
|
414
|
+
break;
|
415
|
+
case OB_ENCODING_MACOS_FARSI:
|
416
|
+
result = &kOpenBaseCharacterMap_MacOS_Farsi;
|
417
|
+
break;
|
418
|
+
case OB_ENCODING_MACOS_GREEK:
|
419
|
+
result = &kOpenBaseCharacterMap_MacOS_Greek;
|
420
|
+
break;
|
421
|
+
case OB_ENCODING_MACOS_GUJARATI:
|
422
|
+
result = &kOpenBaseCharacterMap_MacOS_Gujarati;
|
423
|
+
break;
|
424
|
+
case OB_ENCODING_MACOS_GURMUKHI:
|
425
|
+
result = &kOpenBaseCharacterMap_MacOS_Gurmukhi;
|
426
|
+
break;
|
427
|
+
case OB_ENCODING_MACOS_HEBREW:
|
428
|
+
result = &kOpenBaseCharacterMap_MacOS_Hebrew;
|
429
|
+
break;
|
430
|
+
case OB_ENCODING_MACOS_ICELAND:
|
431
|
+
result = &kOpenBaseCharacterMap_MacOS_Iceland;
|
432
|
+
break;
|
433
|
+
case OB_ENCODING_MACOS_ROMANIAN:
|
434
|
+
result = &kOpenBaseCharacterMap_MacOS_Romanian;
|
435
|
+
break;
|
436
|
+
case OB_ENCODING_MACOS_SYMBOL:
|
437
|
+
result = &kOpenBaseCharacterMap_MacOS_Symbol;
|
438
|
+
break;
|
439
|
+
case OB_ENCODING_MACOS_THAI:
|
440
|
+
result = &kOpenBaseCharacterMap_MacOS_Thai;
|
441
|
+
break;
|
442
|
+
case OB_ENCODING_MACOS_TURKISH:
|
443
|
+
result = &kOpenBaseCharacterMap_MacOS_Turkish;
|
444
|
+
break;
|
445
|
+
case OB_ENCODING_MACOS_UKRAINE:
|
446
|
+
result = &kOpenBaseCharacterMap_MacOS_Ukraine;
|
447
|
+
break;
|
448
|
+
|
449
|
+
// DOS encodings
|
450
|
+
case OB_ENCODING_DOS_CP437_LATINUS:
|
451
|
+
result = &kOpenBaseCharacterMap_DOS_CP437_LatinUS;
|
452
|
+
break;
|
453
|
+
case OB_ENCODING_DOS_CP737_GREEK:
|
454
|
+
result = &kOpenBaseCharacterMap_DOS_CP737_Greek;
|
455
|
+
break;
|
456
|
+
case OB_ENCODING_DOS_CP775_BALTRIM:
|
457
|
+
result = &kOpenBaseCharacterMap_DOS_CP775_BaltRim;
|
458
|
+
break;
|
459
|
+
case OB_ENCODING_DOS_CP850_LATIN1:
|
460
|
+
result = &kOpenBaseCharacterMap_DOS_CP850_Latin1;
|
461
|
+
break;
|
462
|
+
case OB_ENCODING_DOS_CP852_LATIN2:
|
463
|
+
result = &kOpenBaseCharacterMap_DOS_CP852_Latin2;
|
464
|
+
break;
|
465
|
+
case OB_ENCODING_DOS_CP855_CYRILLIC:
|
466
|
+
result = &kOpenBaseCharacterMap_DOS_CP855_Cyrillic;
|
467
|
+
break;
|
468
|
+
case OB_ENCODING_DOS_CP857_TURKISH:
|
469
|
+
result = &kOpenBaseCharacterMap_DOS_CP857_Turkish;
|
470
|
+
break;
|
471
|
+
case OB_ENCODING_DOS_CP860_PORTUGUESE:
|
472
|
+
result = &kOpenBaseCharacterMap_DOS_CP860_Portuguese;
|
473
|
+
break;
|
474
|
+
case OB_ENCODING_DOS_CP861_ICELANDIC:
|
475
|
+
result = &kOpenBaseCharacterMap_DOS_CP861_Icelandic;
|
476
|
+
break;
|
477
|
+
case OB_ENCODING_DOS_CP862_HEBREW:
|
478
|
+
result = &kOpenBaseCharacterMap_DOS_CP862_Hebrew;
|
479
|
+
break;
|
480
|
+
case OB_ENCODING_DOS_CP863_CANADAF:
|
481
|
+
result = &kOpenBaseCharacterMap_DOS_CP863_CanadaF;
|
482
|
+
break;
|
483
|
+
case OB_ENCODING_DOS_CP864_ARABIC:
|
484
|
+
result = &kOpenBaseCharacterMap_DOS_CP864_Arabic;
|
485
|
+
break;
|
486
|
+
case OB_ENCODING_DOS_CP865_NORDIC:
|
487
|
+
result = &kOpenBaseCharacterMap_DOS_CP865_Nordic;
|
488
|
+
break;
|
489
|
+
case OB_ENCODING_DOS_CP866_CYRILLICRUSSIAN:
|
490
|
+
result = &kOpenBaseCharacterMap_DOS_CP866_CyrillicRussian;
|
491
|
+
break;
|
492
|
+
case OB_ENCODING_DOS_CP869_GREEK2:
|
493
|
+
result = &kOpenBaseCharacterMap_DOS_CP869_Greek2;
|
494
|
+
break;
|
495
|
+
case OB_ENCODING_DOS_CP874_THAI:
|
496
|
+
result = &kOpenBaseCharacterMap_DOS_CP874_Thai;
|
497
|
+
break;
|
498
|
+
|
499
|
+
// Windows encodings
|
500
|
+
case OB_ENCODING_WIN_CP874_THAI:
|
501
|
+
result = &kOpenBaseCharacterMap_Win_CP874_Thai;
|
502
|
+
break;
|
503
|
+
|
504
|
+
case OB_ENCODING_WIN_CP1250_LATIN2:
|
505
|
+
result = &kOpenBaseCharacterMap_Win_CP1250_Latin2;
|
506
|
+
break;
|
507
|
+
|
508
|
+
case OB_ENCODING_WIN_CP1251_CYRILLIC:
|
509
|
+
result = &kOpenBaseCharacterMap_Win_CP1251_Cyrillic;
|
510
|
+
break;
|
511
|
+
|
512
|
+
case OB_ENCODING_WIN_CP1252_LATIN1:
|
513
|
+
result = &kOpenBaseCharacterMap_Win_CP1252_Latin1;
|
514
|
+
break;
|
515
|
+
|
516
|
+
case OB_ENCODING_WIN_CP1253_GREEK:
|
517
|
+
result = &kOpenBaseCharacterMap_Win_CP1253_Greek;
|
518
|
+
break;
|
519
|
+
|
520
|
+
case OB_ENCODING_WIN_CP1254_TURKISH:
|
521
|
+
result = &kOpenBaseCharacterMap_Win_CP1254_Turkish;
|
522
|
+
break;
|
523
|
+
|
524
|
+
case OB_ENCODING_WIN_CP1255_HEBREW:
|
525
|
+
result = &kOpenBaseCharacterMap_Win_CP1255_Hebrew;
|
526
|
+
break;
|
527
|
+
|
528
|
+
case OB_ENCODING_WIN_CP1256_ARABIC:
|
529
|
+
result = &kOpenBaseCharacterMap_Win_CP1256_Arabic;
|
530
|
+
break;
|
531
|
+
|
532
|
+
case OB_ENCODING_WIN_CP1257_BALTRIM:
|
533
|
+
result = &kOpenBaseCharacterMap_Win_CP1257_BaltRim;
|
534
|
+
break;
|
535
|
+
|
536
|
+
case OB_ENCODING_WIN_CP1258_VIETNAMESE:
|
537
|
+
result = &kOpenBaseCharacterMap_Win_CP1258_Vietnamese;
|
538
|
+
break;
|
539
|
+
|
540
|
+
|
541
|
+
// NeXT encodings
|
542
|
+
case OB_ENCODING_NEXT:
|
543
|
+
result = &kOpenBaseCharacterMap_NeXT;
|
544
|
+
break;
|
545
|
+
|
546
|
+
}
|
547
|
+
|
548
|
+
return result;
|
549
|
+
}
|
550
|
+
|
551
|
+
const char* ob_getEncodingName(int encoding)
|
552
|
+
{
|
553
|
+
const char* result = NULL;
|
554
|
+
|
555
|
+
switch (encoding)
|
556
|
+
{
|
557
|
+
case OB_ENCODING_ASCII: result = "ASCII"; break;
|
558
|
+
case OB_ENCODING_UTF8: result = "UTF8"; break;
|
559
|
+
case OB_ENCODING_UNICODE: result = "Unicode (2 byte)"; break;
|
560
|
+
|
561
|
+
case OB_ENCODING_ISO8859_1: result = "ISO 8859-1 (Latin 1)"; break;
|
562
|
+
case OB_ENCODING_ISO8859_2: result = "ISO 8859-2 (Latin 2)"; break;
|
563
|
+
case OB_ENCODING_ISO8859_3: result = "ISO 8859-3 (Latin 3)"; break;
|
564
|
+
case OB_ENCODING_ISO8859_4: result = "ISO 8859-4 (Latin 4)"; break;
|
565
|
+
case OB_ENCODING_ISO8859_5: result = "ISO 8859-5 (Latin/Cyrillic)"; break;
|
566
|
+
case OB_ENCODING_ISO8859_6: result = "ISO 8859-6 (Arabic)"; break;
|
567
|
+
case OB_ENCODING_ISO8859_7: result = "ISO 8859-7 (Latin/Greek)"; break;
|
568
|
+
case OB_ENCODING_ISO8859_8: result = "ISO 8859-8 (Latin/Hebrew)"; break;
|
569
|
+
case OB_ENCODING_ISO8859_9: result = "ISO 8859-9 (Latin 5 - Turkish)"; break;
|
570
|
+
case OB_ENCODING_ISO8859_10: result = "ISO 8859-10 (Latin 6 - Nordic)"; break;
|
571
|
+
case OB_ENCODING_ISO8859_13: result = "ISO 8859-13 (Latin 7 - Baltic Rim)"; break;
|
572
|
+
case OB_ENCODING_ISO8859_14: result = "ISO 8859-14 (Latin 8 - Sami)"; break;
|
573
|
+
case OB_ENCODING_ISO8859_15: result = "ISO 8859-15 (Latin 9)"; break;
|
574
|
+
case OB_ENCODING_ISO8859_16: result = "ISO 8859-16 (Latin 10)"; break;
|
575
|
+
|
576
|
+
case OB_ENCODING_ISO2022JP: result = "ISO2022JP"; break;
|
577
|
+
case OB_ENCODING_EUC: result = "EUC"; break;
|
578
|
+
case OB_ENCODING_SHIFTJIS: result = "SHIFTJIS"; break;
|
579
|
+
|
580
|
+
case OB_ENCODING_MACOS_ROMAN: result = "Mac OS Roman"; break;
|
581
|
+
case OB_ENCODING_MACOS_ARABIC: result = "Mac OS Arabic"; break;
|
582
|
+
case OB_ENCODING_MACOS_CENTEURO: result = "Mac OS CentEuro"; break;
|
583
|
+
case OB_ENCODING_MACOS_CORPCHAR: result = "Mac OS CorpChar"; break;
|
584
|
+
case OB_ENCODING_MACOS_CROATIAN: result = "Mac OS Croatian"; break;
|
585
|
+
case OB_ENCODING_MACOS_CYRILLIC: result = "Mac OS Cyrillic"; break;
|
586
|
+
case OB_ENCODING_MACOS_DEVANAGA: result = "Mac OS Devanaga"; break;
|
587
|
+
case OB_ENCODING_MACOS_DINGBATS: result = "Mac OS Dingbats"; break;
|
588
|
+
case OB_ENCODING_MACOS_FARSI: result = "Mac OS Farsi"; break;
|
589
|
+
case OB_ENCODING_MACOS_GREEK: result = "Mac OS Greek"; break;
|
590
|
+
case OB_ENCODING_MACOS_GUJARATI: result = "Mac OS Gujarati"; break;
|
591
|
+
case OB_ENCODING_MACOS_GURMUKHI: result = "Mac OS Gurmukhi"; break;
|
592
|
+
case OB_ENCODING_MACOS_HEBREW: result = "Mac OS Hebrew"; break;
|
593
|
+
case OB_ENCODING_MACOS_ICELAND: result = "Mac OS Iceland"; break;
|
594
|
+
case OB_ENCODING_MACOS_ROMANIAN: result = "Mac OS Romanian"; break;
|
595
|
+
case OB_ENCODING_MACOS_SYMBOL: result = "Mac OS Symbol"; break;
|
596
|
+
case OB_ENCODING_MACOS_THAI: result = "Mac OS Thai"; break;
|
597
|
+
case OB_ENCODING_MACOS_TURKISH: result = "Mac OS Turkish"; break;
|
598
|
+
case OB_ENCODING_MACOS_UKRAINE: result = "Mac OS Ukraine"; break;
|
599
|
+
|
600
|
+
|
601
|
+
case OB_ENCODING_DOS_CP437_LATINUS: result = "DOS Latin US"; break;
|
602
|
+
case OB_ENCODING_DOS_CP737_GREEK: result = "DOS Greek"; break;
|
603
|
+
case OB_ENCODING_DOS_CP775_BALTRIM: result = "DOS Baltic Rim"; break;
|
604
|
+
case OB_ENCODING_DOS_CP850_LATIN1: result = "DOS Latin 2"; break;
|
605
|
+
case OB_ENCODING_DOS_CP852_LATIN2: result = "DOS Latin 1"; break;
|
606
|
+
case OB_ENCODING_DOS_CP855_CYRILLIC: result = "DOS Cyrillic"; break;
|
607
|
+
case OB_ENCODING_DOS_CP857_TURKISH: result = "DOS Turkish"; break;
|
608
|
+
case OB_ENCODING_DOS_CP860_PORTUGUESE: result = "DOS Portuguese"; break;
|
609
|
+
case OB_ENCODING_DOS_CP861_ICELANDIC: result = "DOS Icelandic"; break;
|
610
|
+
case OB_ENCODING_DOS_CP862_HEBREW: result = "DOS Hebrew"; break;
|
611
|
+
case OB_ENCODING_DOS_CP863_CANADAF: result = "DOS French Canadian"; break;
|
612
|
+
case OB_ENCODING_DOS_CP864_ARABIC: result = "DOS Arabic"; break;
|
613
|
+
case OB_ENCODING_DOS_CP865_NORDIC: result = "DOS Nordic"; break;
|
614
|
+
case OB_ENCODING_DOS_CP866_CYRILLICRUSSIAN: result = "DOS Cyrillic Russian"; break;
|
615
|
+
case OB_ENCODING_DOS_CP869_GREEK2: result = "DOS Greek 2"; break;
|
616
|
+
case OB_ENCODING_DOS_CP874_THAI: result = "DOS Thai"; break;
|
617
|
+
|
618
|
+
case OB_ENCODING_NEXT: result = "NeXT"; break;
|
619
|
+
|
620
|
+
default: result = "Unknown"; break;
|
621
|
+
}
|
622
|
+
|
623
|
+
return result;
|
624
|
+
}
|
625
|
+
|
626
|
+
/*
|
627
|
+
#define DEBUG
|
628
|
+
#ifdef DEBUG
|
629
|
+
#include <stdio.h>
|
630
|
+
extern void out ( const char* label, const char* msg );
|
631
|
+
#endif
|
632
|
+
*/
|
633
|
+
|
634
|
+
|
635
|
+
// if you need to do conversions of your own, this is exposed
|
636
|
+
// caller owns result, must free()
|
637
|
+
unsigned char* ob_convertCharacters(int from_code, int to_code, const unsigned char* source, int* size)
|
638
|
+
{
|
639
|
+
unsigned char* result = NULL;
|
640
|
+
unsigned short* unicode = NULL;
|
641
|
+
int source_size;
|
642
|
+
int unicode_size = 0;
|
643
|
+
int result_size = 0;
|
644
|
+
|
645
|
+
#ifdef DEBUG
|
646
|
+
char s[1000];
|
647
|
+
sprintf ( s, "ob_convertCharacters from encoding %d to %d size %d", from_code, to_code, *size );
|
648
|
+
out ( "", s );
|
649
|
+
#endif
|
650
|
+
|
651
|
+
// out ( "convert", "1" );
|
652
|
+
|
653
|
+
if (from_code == to_code || from_code == OB_ENCODING_UNKNOWN || to_code == OB_ENCODING_UNKNOWN )
|
654
|
+
{
|
655
|
+
// out ( "convert", "2" );
|
656
|
+
// make a copy of the indicated number of bytes
|
657
|
+
if (source != NULL)
|
658
|
+
{
|
659
|
+
if (size != NULL)
|
660
|
+
{
|
661
|
+
source_size = *size;
|
662
|
+
result_size = source_size;
|
663
|
+
}
|
664
|
+
else
|
665
|
+
{
|
666
|
+
if (from_code == OB_ENCODING_UNICODE)
|
667
|
+
{
|
668
|
+
source_size = unicode_strlen((const unsigned short*) source) + 1;
|
669
|
+
result_size = 2 * source_size;
|
670
|
+
}
|
671
|
+
else
|
672
|
+
{
|
673
|
+
source_size = strlen((const char*) source) + 1;
|
674
|
+
result_size = source_size;
|
675
|
+
}
|
676
|
+
}
|
677
|
+
|
678
|
+
result = (unsigned char*) malloc(result_size);
|
679
|
+
if (result != NULL)
|
680
|
+
{
|
681
|
+
memcpy(result, source, result_size);
|
682
|
+
}
|
683
|
+
}
|
684
|
+
}
|
685
|
+
else
|
686
|
+
{
|
687
|
+
// out ( "convert", "3" );
|
688
|
+
|
689
|
+
// first convert to unicode
|
690
|
+
if (source != NULL)
|
691
|
+
{
|
692
|
+
if (size != NULL)
|
693
|
+
{
|
694
|
+
source_size = *size;
|
695
|
+
}
|
696
|
+
else
|
697
|
+
{
|
698
|
+
if (from_code == OB_ENCODING_UNICODE)
|
699
|
+
{
|
700
|
+
source_size = unicode_strlen((const unsigned short*) source) + 1;
|
701
|
+
}
|
702
|
+
else
|
703
|
+
{
|
704
|
+
source_size = strlen((const char*) source) + 1;
|
705
|
+
}
|
706
|
+
}
|
707
|
+
|
708
|
+
// out ( "convert", "4" );
|
709
|
+
|
710
|
+
if (from_code == OB_ENCODING_UNICODE)
|
711
|
+
{
|
712
|
+
// do nothing
|
713
|
+
unicode_size = 2 * source_size;
|
714
|
+
unicode = (unsigned short*) source;
|
715
|
+
}
|
716
|
+
else if (from_code == OB_ENCODING_UTF8)
|
717
|
+
{
|
718
|
+
// out ( "convert", "5" );
|
719
|
+
unicode_size = source_size;
|
720
|
+
unicode = ob_decodeUTF8(source, &unicode_size);
|
721
|
+
}
|
722
|
+
else
|
723
|
+
{
|
724
|
+
// out ( "convert", "6" );
|
725
|
+
OpenBaseCharacterMap* map = ob_getCharacterMap(from_code);
|
726
|
+
if (map != NULL)
|
727
|
+
{
|
728
|
+
unicode_size = 2 * source_size;
|
729
|
+
unicode = (unsigned short*) malloc(unicode_size);
|
730
|
+
if (unicode != NULL)
|
731
|
+
{
|
732
|
+
int i = 0;
|
733
|
+
while (i < source_size)
|
734
|
+
{
|
735
|
+
// out ( "convert", "7" );
|
736
|
+
unicode[i] = map->mapToUnicode[source[i]];
|
737
|
+
i++;
|
738
|
+
}
|
739
|
+
}
|
740
|
+
}
|
741
|
+
}
|
742
|
+
}
|
743
|
+
// out ( "convert", "8" );
|
744
|
+
|
745
|
+
// now convert to to_code
|
746
|
+
if (unicode != NULL)
|
747
|
+
{
|
748
|
+
if (to_code == OB_ENCODING_UNICODE)
|
749
|
+
{
|
750
|
+
result_size = unicode_size;
|
751
|
+
result = (unsigned char*) unicode;
|
752
|
+
}
|
753
|
+
else if (to_code == OB_ENCODING_UTF8)
|
754
|
+
{
|
755
|
+
// compress UTF8
|
756
|
+
// out ( "convert", "9" );
|
757
|
+
result_size = unicode_size / 2;
|
758
|
+
result = ob_encodeUTF8(unicode, &result_size);
|
759
|
+
free(unicode);
|
760
|
+
}
|
761
|
+
else
|
762
|
+
{
|
763
|
+
// out ( "convert", "10" );
|
764
|
+
OpenBaseCharacterMap* map = ob_getCharacterMap(to_code);
|
765
|
+
// out ( "convert", "11" );
|
766
|
+
if (map != NULL)
|
767
|
+
{
|
768
|
+
|
769
|
+
// out ( "convert", "12" );
|
770
|
+
|
771
|
+
char z[100];
|
772
|
+
sprintf ( z, "%d", unicode_size );
|
773
|
+
// out ( "unicode_size", z );
|
774
|
+
|
775
|
+
result_size = unicode_size / 2;
|
776
|
+
result = (unsigned char*) malloc(result_size);
|
777
|
+
// out ( "convert", "12.1" );
|
778
|
+
if (result != NULL)
|
779
|
+
{
|
780
|
+
// out ( "convert", "13" );
|
781
|
+
int i = 0;
|
782
|
+
while (i < result_size)
|
783
|
+
{
|
784
|
+
// out ( "convert", "13.1" );
|
785
|
+
// binary search the map for the character
|
786
|
+
result[i] = map_from_unicode(unicode[i], map);
|
787
|
+
i++;
|
788
|
+
}
|
789
|
+
// out ( "convert", "14" );
|
790
|
+
|
791
|
+
// ASCII should be restricted to characters 0-127
|
792
|
+
// Do this by hand since a mapping doesn't make complete sense
|
793
|
+
// and it can use the Latin1 mapping to get halfway there.
|
794
|
+
if (to_code == OB_ENCODING_ASCII)
|
795
|
+
{
|
796
|
+
// out ( "convert", "14.1" );
|
797
|
+
for (i = 0; i < result_size; i++)
|
798
|
+
{
|
799
|
+
if (((unsigned char) result[i]) > 127)
|
800
|
+
{
|
801
|
+
result[i] = '?';
|
802
|
+
}
|
803
|
+
}
|
804
|
+
}
|
805
|
+
}
|
806
|
+
else {
|
807
|
+
//out ("","malloc failure");
|
808
|
+
}
|
809
|
+
}
|
810
|
+
// out ( "convert", "15" );
|
811
|
+
free(unicode);
|
812
|
+
// out ( "convert", "15.1" );
|
813
|
+
}
|
814
|
+
}
|
815
|
+
|
816
|
+
// out ( "convert", "16" );
|
817
|
+
if (size != NULL)
|
818
|
+
{
|
819
|
+
// out ( "convert", "17" );
|
820
|
+
*size = (result != NULL) ? result_size : 0;
|
821
|
+
}
|
822
|
+
}
|
823
|
+
// out ( "convert", "18" );
|
824
|
+
|
825
|
+
return result;
|
826
|
+
}
|
827
|
+
|
828
|
+
// call this on SQL statements before sending to server
|
829
|
+
// caller owns result, must free()
|
830
|
+
/*
|
831
|
+
unsigned char* ob_convertSQLStatement(OB_Connection* connection, const unsigned char* source, int* size)
|
832
|
+
{
|
833
|
+
unsigned char* result = NULL;
|
834
|
+
int database_encoding = -1;
|
835
|
+
int client_encoding = -1;
|
836
|
+
|
837
|
+
if (connection != NULL)
|
838
|
+
{
|
839
|
+
database_encoding = ob_databaseEncoding(connection);
|
840
|
+
client_encoding = ob_clientEncoding(connection);
|
841
|
+
result = ob_convertCharacters(client_encoding, database_encoding, source, size);
|
842
|
+
}
|
843
|
+
|
844
|
+
return result;
|
845
|
+
}
|
846
|
+
|
847
|
+
// call this on character results restured from server
|
848
|
+
// caller owns result, must free()
|
849
|
+
unsigned char* ob_convertResult(OB_Connection* connection, const unsigned char* source, int* size)
|
850
|
+
{
|
851
|
+
unsigned char* result = NULL;
|
852
|
+
int database_encoding = -1;
|
853
|
+
int client_encoding = -1;
|
854
|
+
|
855
|
+
if (connection != NULL)
|
856
|
+
{
|
857
|
+
database_encoding = ob_databaseEncoding(connection);
|
858
|
+
client_encoding = ob_clientEncoding(connection);
|
859
|
+
result = ob_convertCharacters(database_encoding, client_encoding, source, size);
|
860
|
+
}
|
861
|
+
|
862
|
+
return result;
|
863
|
+
}
|
864
|
+
|
865
|
+
*/
|
866
|
+
|
867
|
+
//================================================================================
|
868
|
+
// Character Maps
|
869
|
+
//================================================================================
|
870
|
+
|
871
|
+
#pragma mark -
|
872
|
+
|
873
|
+
|
874
|
+
OpenBaseCharacterMap kOpenBaseCharacterMap_ISO2022JP;
|
875
|
+
OpenBaseCharacterMap kOpenBaseCharacterMap_EUC;
|
876
|
+
OpenBaseCharacterMap kOpenBaseCharacterMap_SHIFTJIS;
|
877
|
+
|
878
|
+
#pragma mark kOpenBaseCharacterMap_NeXT
|
879
|
+
OpenBaseCharacterMap kOpenBaseCharacterMap_NeXT =
|
880
|
+
{
|
881
|
+
// _fMapToUnicode
|
882
|
+
{
|
883
|
+
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
|
884
|
+
0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
|
885
|
+
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
|
886
|
+
0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
|
887
|
+
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
|
888
|
+
0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
|
889
|
+
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
|
890
|
+
0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
|
891
|
+
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
|
892
|
+
0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
|
893
|
+
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
|
894
|
+
0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
|
895
|
+
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
|
896
|
+
0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
|
897
|
+
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
|
898
|
+
0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
|
899
|
+
0x00A0, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C7,
|
900
|
+
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
|
901
|
+
0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D9,
|
902
|
+
0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00B5, 0x00D7, 0x00F7,
|
903
|
+
0x00A9, 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x00A5, 0x0192, 0x00A7,
|
904
|
+
0x00A4, 0x2019, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02,
|
905
|
+
0x00AE, 0x2013, 0x2020, 0x2021, 0x00B7, 0x00A6, 0x00B6, 0x2022,
|
906
|
+
0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x00AC, 0x00BF,
|
907
|
+
0x00B9, 0x02CB, 0x00B4, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9,
|
908
|
+
0x00A8, 0x00B2, 0x02DA, 0x00B8, 0x00B3, 0x02DD, 0x02DB, 0x02C7,
|
909
|
+
0x2014, 0x00B1, 0x00BC, 0x00BD, 0x00BE, 0x00E0, 0x00E1, 0x00E2,
|
910
|
+
0x00E3, 0x00E4, 0x00E5, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB,
|
911
|
+
0x00EC, 0x00C6, 0x00ED, 0x00AA, 0x00EE, 0x00EF, 0x00F0, 0x00F1,
|
912
|
+
0x0141, 0x00D8, 0x0152, 0x00BA, 0x00F2, 0x00F3, 0x00F4, 0x00F5,
|
913
|
+
0x00F6, 0x00E6, 0x00F9, 0x00FA, 0x00FB, 0x0131, 0x00FC, 0x00FD,
|
914
|
+
0x0142, 0x00F8, 0x0153, 0x00DF, 0x00FE, 0x00FF, 0xFFFD, 0xFFFD
|
915
|
+
},
|
916
|
+
|
917
|
+
// mapFromUnicode
|
918
|
+
{
|
919
|
+
{ 0x0000, 0x0000 }, { 0x0001, 0x0001 }, { 0x0002, 0x0002 }, { 0x0003, 0x0003 },
|
920
|
+
{ 0x0004, 0x0004 }, { 0x0005, 0x0005 }, { 0x0006, 0x0006 }, { 0x0007, 0x0007 },
|
921
|
+
{ 0x0008, 0x0008 }, { 0x0009, 0x0009 }, { 0x000A, 0x000A }, { 0x000B, 0x000B },
|
922
|
+
{ 0x000C, 0x000C }, { 0x000D, 0x000D }, { 0x000E, 0x000E }, { 0x000F, 0x000F },
|
923
|
+
{ 0x0010, 0x0010 }, { 0x0011, 0x0011 }, { 0x0012, 0x0012 }, { 0x0013, 0x0013 },
|
924
|
+
{ 0x0014, 0x0014 }, { 0x0015, 0x0015 }, { 0x0016, 0x0016 }, { 0x0017, 0x0017 },
|
925
|
+
{ 0x0018, 0x0018 }, { 0x0019, 0x0019 }, { 0x001A, 0x001A }, { 0x001B, 0x001B },
|
926
|
+
{ 0x001C, 0x001C }, { 0x001D, 0x001D }, { 0x001E, 0x001E }, { 0x001F, 0x001F },
|
927
|
+
{ 0x0020, 0x0020 }, { 0x0021, 0x0021 }, { 0x0022, 0x0022 }, { 0x0023, 0x0023 },
|
928
|
+
{ 0x0024, 0x0024 }, { 0x0025, 0x0025 }, { 0x0026, 0x0026 }, { 0x0027, 0x0027 },
|
929
|
+
{ 0x0028, 0x0028 }, { 0x0029, 0x0029 }, { 0x002A, 0x002A }, { 0x002B, 0x002B },
|
930
|
+
{ 0x002C, 0x002C }, { 0x002D, 0x002D }, { 0x002E, 0x002E }, { 0x002F, 0x002F },
|
931
|
+
{ 0x0030, 0x0030 }, { 0x0031, 0x0031 }, { 0x0032, 0x0032 }, { 0x0033, 0x0033 },
|
932
|
+
{ 0x0034, 0x0034 }, { 0x0035, 0x0035 }, { 0x0036, 0x0036 }, { 0x0037, 0x0037 },
|
933
|
+
{ 0x0038, 0x0038 }, { 0x0039, 0x0039 }, { 0x003A, 0x003A }, { 0x003B, 0x003B },
|
934
|
+
{ 0x003C, 0x003C }, { 0x003D, 0x003D }, { 0x003E, 0x003E }, { 0x003F, 0x003F },
|
935
|
+
{ 0x0040, 0x0040 }, { 0x0041, 0x0041 }, { 0x0042, 0x0042 }, { 0x0043, 0x0043 },
|
936
|
+
{ 0x0044, 0x0044 }, { 0x0045, 0x0045 }, { 0x0046, 0x0046 }, { 0x0047, 0x0047 },
|
937
|
+
{ 0x0048, 0x0048 }, { 0x0049, 0x0049 }, { 0x004A, 0x004A }, { 0x004B, 0x004B },
|
938
|
+
{ 0x004C, 0x004C }, { 0x004D, 0x004D }, { 0x004E, 0x004E }, { 0x004F, 0x004F },
|
939
|
+
{ 0x0050, 0x0050 }, { 0x0051, 0x0051 }, { 0x0052, 0x0052 }, { 0x0053, 0x0053 },
|
940
|
+
{ 0x0054, 0x0054 }, { 0x0055, 0x0055 }, { 0x0056, 0x0056 }, { 0x0057, 0x0057 },
|
941
|
+
{ 0x0058, 0x0058 }, { 0x0059, 0x0059 }, { 0x005A, 0x005A }, { 0x005B, 0x005B },
|
942
|
+
{ 0x005C, 0x005C }, { 0x005D, 0x005D }, { 0x005E, 0x005E }, { 0x005F, 0x005F },
|
943
|
+
{ 0x0060, 0x0060 }, { 0x0061, 0x0061 }, { 0x0062, 0x0062 }, { 0x0063, 0x0063 },
|
944
|
+
{ 0x0064, 0x0064 }, { 0x0065, 0x0065 }, { 0x0066, 0x0066 }, { 0x0067, 0x0067 },
|
945
|
+
{ 0x0068, 0x0068 }, { 0x0069, 0x0069 }, { 0x006A, 0x006A }, { 0x006B, 0x006B },
|
946
|
+
{ 0x006C, 0x006C }, { 0x006D, 0x006D }, { 0x006E, 0x006E }, { 0x006F, 0x006F },
|
947
|
+
{ 0x0070, 0x0070 }, { 0x0071, 0x0071 }, { 0x0072, 0x0072 }, { 0x0073, 0x0073 },
|
948
|
+
{ 0x0074, 0x0074 }, { 0x0075, 0x0075 }, { 0x0076, 0x0076 }, { 0x0077, 0x0077 },
|
949
|
+
{ 0x0078, 0x0078 }, { 0x0079, 0x0079 }, { 0x007A, 0x007A }, { 0x007B, 0x007B },
|
950
|
+
{ 0x007C, 0x007C }, { 0x007D, 0x007D }, { 0x007E, 0x007E }, { 0x007F, 0x007F },
|
951
|
+
{ 0x00A0, 0x0080 }, { 0x00A1, 0x00A1 }, { 0x00A2, 0x00A2 }, { 0x00A3, 0x00A3 },
|
952
|
+
{ 0x00A4, 0x00A8 }, { 0x00A5, 0x00A5 }, { 0x00A6, 0x00B5 }, { 0x00A7, 0x00A7 },
|
953
|
+
{ 0x00A8, 0x00C8 }, { 0x00A9, 0x00A0 }, { 0x00AA, 0x00E3 }, { 0x00AB, 0x00AB },
|
954
|
+
{ 0x00AC, 0x00BE }, { 0x00AE, 0x00B0 }, { 0x00AF, 0x00C5 }, { 0x00B1, 0x00D1 },
|
955
|
+
{ 0x00B2, 0x00C9 }, { 0x00B3, 0x00CC }, { 0x00B4, 0x00C2 }, { 0x00B5, 0x009D },
|
956
|
+
{ 0x00B6, 0x00B6 }, { 0x00B7, 0x00B4 }, { 0x00B8, 0x00CB }, { 0x00B9, 0x00C0 },
|
957
|
+
{ 0x00BA, 0x00EB }, { 0x00BB, 0x00BB }, { 0x00BC, 0x00D2 }, { 0x00BD, 0x00D3 },
|
958
|
+
{ 0x00BE, 0x00D4 }, { 0x00BF, 0x00BF }, { 0x00C0, 0x0081 }, { 0x00C1, 0x0082 },
|
959
|
+
{ 0x00C2, 0x0083 }, { 0x00C3, 0x0084 }, { 0x00C4, 0x0085 }, { 0x00C5, 0x0086 },
|
960
|
+
{ 0x00C6, 0x00E1 }, { 0x00C7, 0x0087 }, { 0x00C8, 0x0088 }, { 0x00C9, 0x0089 },
|
961
|
+
{ 0x00CA, 0x008A }, { 0x00CB, 0x008B }, { 0x00CC, 0x008C }, { 0x00CD, 0x008D },
|
962
|
+
{ 0x00CE, 0x008E }, { 0x00CF, 0x008F }, { 0x00D0, 0x0090 }, { 0x00D1, 0x0091 },
|
963
|
+
{ 0x00D2, 0x0092 }, { 0x00D3, 0x0093 }, { 0x00D4, 0x0094 }, { 0x00D5, 0x0095 },
|
964
|
+
{ 0x00D6, 0x0096 }, { 0x00D7, 0x009E }, { 0x00D8, 0x00E9 }, { 0x00D9, 0x0097 },
|
965
|
+
{ 0x00DA, 0x0098 }, { 0x00DB, 0x0099 }, { 0x00DC, 0x009A }, { 0x00DD, 0x009B },
|
966
|
+
{ 0x00DE, 0x009C }, { 0x00DF, 0x00FB }, { 0x00E0, 0x00D5 }, { 0x00E1, 0x00D6 },
|
967
|
+
{ 0x00E2, 0x00D7 }, { 0x00E3, 0x00D8 }, { 0x00E4, 0x00D9 }, { 0x00E5, 0x00DA },
|
968
|
+
{ 0x00E6, 0x00F1 }, { 0x00E7, 0x00DB }, { 0x00E8, 0x00DC }, { 0x00E9, 0x00DD },
|
969
|
+
{ 0x00EA, 0x00DE }, { 0x00EB, 0x00DF }, { 0x00EC, 0x00E0 }, { 0x00ED, 0x00E2 },
|
970
|
+
{ 0x00EE, 0x00E4 }, { 0x00EF, 0x00E5 }, { 0x00F0, 0x00E6 }, { 0x00F1, 0x00E7 },
|
971
|
+
{ 0x00F2, 0x00EC }, { 0x00F3, 0x00ED }, { 0x00F4, 0x00EE }, { 0x00F5, 0x00EF },
|
972
|
+
{ 0x00F6, 0x00F0 }, { 0x00F7, 0x009F }, { 0x00F8, 0x00F9 }, { 0x00F9, 0x00F2 },
|
973
|
+
{ 0x00FA, 0x00F3 }, { 0x00FB, 0x00F4 }, { 0x00FC, 0x00F6 }, { 0x00FD, 0x00F7 },
|
974
|
+
{ 0x00FE, 0x00FC }, { 0x00FF, 0x00FD }, { 0x0131, 0x00F5 }, { 0x0141, 0x00E8 },
|
975
|
+
{ 0x0142, 0x00F8 }, { 0x0152, 0x00EA }, { 0x0153, 0x00FA }, { 0x0192, 0x00A6 },
|
976
|
+
{ 0x02C6, 0x00C3 }, { 0x02C7, 0x00CF }, { 0x02CB, 0x00C1 }, { 0x02D8, 0x00C6 },
|
977
|
+
{ 0x02D9, 0x00C7 }, { 0x02DA, 0x00CA }, { 0x02DB, 0x00CE }, { 0x02DC, 0x00C4 },
|
978
|
+
{ 0x02DD, 0x00CD }, { 0x2013, 0x00B1 }, { 0x2014, 0x00D0 }, { 0x2019, 0x00A9 },
|
979
|
+
{ 0x201A, 0x00B8 }, { 0x201C, 0x00AA }, { 0x201D, 0x00BA }, { 0x201E, 0x00B9 },
|
980
|
+
{ 0x2020, 0x00B2 }, { 0x2021, 0x00B3 }, { 0x2022, 0x00B7 }, { 0x2026, 0x00BC },
|
981
|
+
{ 0x2030, 0x00BD }, { 0x2039, 0x00AC }, { 0x203A, 0x00AD }, { 0x2044, 0x00A4 },
|
982
|
+
{ 0xFB01, 0x00AE }, { 0xFB02, 0x00AF }, { 0xFFFD, 0x00FE }, { 0xFFFD, 0x00FF }
|
983
|
+
},
|
984
|
+
|
985
|
+
// defaultCharacter
|
986
|
+
'?'
|
987
|
+
} ;
|
988
|
+
|
989
|
+
|
990
|
+
#ifdef __cplusplus
|
991
|
+
}
|
992
|
+
#endif
|
993
|
+
|