| 1 | |
| 2 | /* CVS-ID: $Id$ */ |
| 3 | |
| 4 | #include <stdio.h> |
| 5 | |
| 6 | typedef struct { |
| 7 | unsigned char c; |
| 8 | unsigned short u; |
| 9 | } charsetItem; |
| 10 | |
| 11 | |
| 12 | |
| 13 | int cmpt(const void *i1, const void *i2) |
| 14 | { |
| 15 | unsigned short u1 = ((charsetItem*)i1) -> u; |
| 16 | unsigned short u2 = ((charsetItem*)i2) -> u; |
| 17 | return (u1 - u2); |
| 18 | } |
| 19 | |
| 20 | |
| 21 | |
| 22 | int main(int argc, char *argv[]) |
| 23 | { |
| 24 | unsigned enc, unic; |
| 25 | unsigned i; |
| 26 | charsetItem table[256]; |
| 27 | |
| 28 | for (i = 0; i < 256; i++) { table[i].c = i, table[i].u = 0; /* unknown */} |
| 29 | |
| 30 | while (!feof(stdin)) |
| 31 | { |
| 32 | scanf("%i\t%i\n", &enc, &unic); |
| 33 | table[enc].u = unic; |
| 34 | table[enc].c = enc; |
| 35 | if (enc < 128 && enc != unic) |
| 36 | fprintf(stderr, "7bit ASCII incompatibilit (%s): %i->%i\n", |
| 37 | argv[2], enc, unic); |
| 38 | } |
| 39 | |
| 40 | /* dump it: */ |
| 41 | |
| 42 | printf("\n\n" |
| 43 | "/* \n" |
| 44 | " * %s to Unicode recoding table \n" |
| 45 | " * based on file %s by Unicode Consortium\n" |
| 46 | " */\n\n" |
| 47 | "static wxUint16 encoding_table__%s[128] = {", |
| 48 | argv[2], argv[1], argv[2]); |
| 49 | |
| 50 | for (i = 128; i < 256; i++) |
| 51 | { |
| 52 | if (i % 8 == 0) |
| 53 | printf("\n "); |
| 54 | printf("0x%04X%c ", table[i].u, (i == 255) ? '\n' : ','); |
| 55 | } |
| 56 | printf("};\n"); |
| 57 | |
| 58 | qsort(table + 128, 128, sizeof(table[0]), cmpt); |
| 59 | |
| 60 | |
| 61 | /* |
| 62 | NO, WE DON'T NEED REVERSE TABLE, WE CAN BUILD IT AT RUNTIME |
| 63 | (won't take that much time, after all you don't init |
| 64 | conversion so often...) |
| 65 | |
| 66 | printf("\n" |
| 67 | "static wxUint16 encoding_table_rev__%s[128] = {", |
| 68 | argv[2]); |
| 69 | |
| 70 | for (i = 128; i < 256; i++) |
| 71 | { |
| 72 | if (i % 4 == 0) |
| 73 | printf("\n "); |
| 74 | printf("{c:0x%02X,u:0x%04X}%c ", table[i].c, table[i].u, (i == 255) ? '\n' : ','); |
| 75 | } |
| 76 | printf("};\n"); |
| 77 | */ |
| 78 | |
| 79 | return 1; |
| 80 | } |