diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2008-09-10 23:56:49 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2008-09-10 23:56:49 +0000 |
| commit | b6bde2e4569aa617c8a6af64947c688c624ed7f8 (patch) | |
| tree | 010d15843eb7d4faf7cd1b0cd44d5b9c00462a83 /src/xutf8/ucs2fontmap.c | |
| parent | dfb50e85292687561927610e689eb5ab30d0ba26 (diff) | |
Merging the UTF8 patch, consisting of O'ksi'd s original 1.1.6 patch and additions by Ian. PLEASE BE AWARE that the patch in its current incarnation is a regression in many aspects and further work is required before we can announce Unicode support.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6212 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/xutf8/ucs2fontmap.c')
| -rw-r--r-- | src/xutf8/ucs2fontmap.c | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/src/xutf8/ucs2fontmap.c b/src/xutf8/ucs2fontmap.c new file mode 100644 index 000000000..905bc0ba7 --- /dev/null +++ b/src/xutf8/ucs2fontmap.c @@ -0,0 +1,382 @@ +/****************************************************************************** + Copyright (c) 2000-2002 by O'ksi'D + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of O'ksi'D nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + + Author: Jean-Marc Lienher ( http://oksid.ch ) + +******************************************************************************/ + +#include <stdlib.h> +#include <string.h> + +#define RET_ILSEQ -1 +#define RET_TOOFEW(x) (-10 - x) +#define RET_TOOSMALL -2 +#define conv_t void* +#define ucs4_t unsigned int +typedef struct { + unsigned short indx; + unsigned short used; +} Summary16; + + +#include "lcUniConv/big5.h" +#include "lcUniConv/gb2312.h" +#include "lcUniConv/iso8859_10.h" +#include "lcUniConv/iso8859_11.h" +#include "lcUniConv/iso8859_13.h" +#include "lcUniConv/iso8859_14.h" +#include "lcUniConv/iso8859_15.h" +#include "lcUniConv/iso8859_2.h" +#include "lcUniConv/iso8859_3.h" +#include "lcUniConv/iso8859_4.h" +#include "lcUniConv/iso8859_5.h" +#include "lcUniConv/iso8859_6.h" +#include "lcUniConv/iso8859_7.h" +#include "lcUniConv/iso8859_8.h" +#include "lcUniConv/iso8859_9.h" +#include "lcUniConv/jisx0201.h" +#include "lcUniConv/jisx0208.h" +#include "lcUniConv/jisx0212.h" +#include "lcUniConv/koi8_r.h" +#include "lcUniConv/koi8_u.h" +#include "lcUniConv/ksc5601.h" +#include "lcUniConv/cp1251.h" +#include "headers/symbol_.h" +#include "headers/dingbats_.h" + + /*************** conv_gen.c ************/ +//const +int ucs2fontmap(char *s, unsigned int ucs, int enc) +{ + switch(enc) { + case 0: //iso10646-1 + s[0] = (char) ((ucs & 0xFF00) >> 8); + s[1] = (char) (ucs & 0xFF); + return 0; + break; + case 1: //iso8859-1 + if (ucs <= 0x00FF) { + if (ucs >= 0x0001) { + s[0] = 0; + s[1] = (char) (ucs & 0xFF); + return 1; + } + } + break; + case 2: //iso8859-2 + if (ucs <= 0x00a0) { + s[0] = 0; + s[1] = (char) ucs; + return 2; + } else if (ucs < 0x0180) { + if (ucs >= 0x00a0) { + s[0] = 0; + s[1] = (char) iso8859_2_page00[ucs-0x00a0]; + if (s[1]) return 2; + } + } else if (ucs < 0x02e0) { + if (ucs >= 0x02c0) { + s[0] = 0; + s[1] = (char) iso8859_2_page02[ucs-0x02c0]; + if (s[1]) return 2; + } + } + break; + case 3: //iso8859-3 + if (iso8859_3_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 3; + } + break; + case 4: //iso8859-4 + if (iso8859_4_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 4; + } + break; + case 5: //iso8859-5 + if (iso8859_5_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 5; + } + break; + case 6: //iso8859-6 + if (iso8859_6_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 6; + } + break; + case 7: //iso8859-7 + if (iso8859_7_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 7; + } + break; + case 8: //iso8859-8 + if (iso8859_8_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 8; + } + break; + case 9: //iso8859-9 + if (iso8859_9_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 9; + } + break; + case 10: //iso8859-10 + if (iso8859_10_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 10; + } + break; + case 25: //iso8859-11 + if (iso8859_11_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 25; + } + break; + case 11: //iso8859-13 + if (iso8859_13_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 11; + } + break; + case 12: //iso8859-14 + if (iso8859_14_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 12; + } + break; + case 13: //iso8859-15 + if (iso8859_15_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 13; + } + break; + case 14: //koi8-r + if (koi8_r_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 14; + } + break; + case 15: //big5 + if (big5_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 15; + } + break; + case 16: //ksc5601.1987-0 + if (ksc5601_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 16; + } + break; + case 17: //gb2312.1980-0 + if (gb2312_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 17; + } + break; + case 18: //jisx0201.1976-0 + if (jisx0201_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 18; + } + break; + case 19: //jisx0208.1983-0 + if (jisx0208_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 19; + } + break; + case 20: //jisx0212.1990-0 + if (jisx0212_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 20; + } + break; + case 21: //symbol + if (ucs <= 0x00F7) { + if (ucs >= 0x0020) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_0020[ucs - 0x0020]; + if (s[1]) return 21; + } + } else if (ucs <= 0x0192) { + if (ucs >= 0x0192) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_0192[ucs - 0x0192]; + if (s[1]) return 21; + } + } else if (ucs <= 0x03D6) { + if (ucs >= 0x0391) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_0391[ucs - 0x0391]; + if (s[1]) return 21; + } + } else if (ucs <= 0x232A) { + if (ucs >= 0x2022) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_2022[ucs - 0x2022]; + if (s[1]) return 21; + } + } else if (ucs <= 0x25CA) { + if (ucs >= 0x25CA) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_25CA[ucs - 0x25CA]; + if (s[1]) return 21; + } + } else if (ucs <= 0x2666) { + if (ucs >= 0x2660) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_2660[ucs - 0x2660]; + if (s[1]) return 21; + } + } else if (ucs <= 0xF6DB) { + if (ucs >= 0xF6D9) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_F6D9[ucs - 0xF6D9]; + if (s[1]) return 21; + } + } else if (ucs <= 0xF8FE) { + if (ucs >= 0xF8E5) { + s[0] = 0; + s[1] = unicode_to_symbol_1b_F8E5[ucs - 0xF8E5]; + if (s[1]) return 21; + } + } + break; + case 22: //dingbats + if (ucs <= 0x00A0) { + if (ucs >= 0x0020) { + s[0] = 0; + s[1] = unicode_to_dingbats_1b_0020[ucs - 0x0020]; + if (s[1]) return 22; + } + } else if (ucs <= 0x2195) { + if (ucs >= 0x2192) { + s[0] = 0; + s[1] = unicode_to_dingbats_1b_2192[ucs - 0x2192]; + if (s[1]) return 22; + } + } else if (ucs <= 0x2469) { + if (ucs >= 0x2460) { + s[0] = 0; + s[1] = unicode_to_dingbats_1b_2460[ucs - 0x2460]; + if (s[1]) return 22; + } + } else if (ucs <= 0x2666) { + if (ucs >= 0x25A0) { + s[0] = 0; + s[1] = unicode_to_dingbats_1b_25A0[ucs - 0x25A0]; + if (s[1]) return 22; + } + } else if (ucs <= 0x27BE) { + if (ucs >= 0x2701) { + s[0] = 0; + s[1] = unicode_to_dingbats_1b_2701[ucs - 0x2701]; + if (s[1]) return 22; + } + } else if (ucs <= 0xF8E4) { + if (ucs >= 0xF8D7) { + s[0] = 0; + s[1] = unicode_to_dingbats_1b_F8D7[ucs - 0xF8D7]; + if (s[1]) return 22; + } + } + break; + case 23: //koi8-u + if (koi8_u_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 23; + } + break; + case 24: //microsoft-cp1251 + if (cp1251_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) { + return 24; + } + break; + default: + break; + }; + return -1; +}; + +//const +int encoding_number(const char *enc) +{ + if (!enc || !strncmp(enc, "iso10646-1", 10)) { + return 0; + } else if (!strcmp(enc, "iso8859-1")) { + return 1; + } else if (!strcmp(enc, "iso8859-2")) { + return 2; + } else if (!strcmp(enc, "iso8859-3")) { + return 3; + } else if (!strcmp(enc, "iso8859-4")) { + return 4; + } else if (!strcmp(enc, "iso8859-5")) { + return 5; + } else if (!strcmp(enc, "iso8859-6")) { + return 6; + } else if (!strcmp(enc, "iso8859-7")) { + return 7; + } else if (!strcmp(enc, "iso8859-8")) { + return 8; + } else if (!strcmp(enc, "iso8859-9")) { + return 9; + } else if (!strcmp(enc, "iso8859-10")) { + return 10; + } else if (!strcmp(enc, "iso8859-13")) { + return 11; + } else if (!strcmp(enc, "iso8859-14")) { + return 12; + } else if (!strcmp(enc, "iso8859-15")) { + return 13; + } else if (!strcmp(enc, "koi8-r")) { + return 14; + } else if (!strcmp(enc, "big5-0") || !strcmp(enc, "big5.eten-0") || + !strcmp(enc, "big5p-0")) + { + return 15; + } else if (!strcmp(enc, "ksc5601.1987-0")) { + return 16; + } else if (!strcmp(enc, "gb2312.1980-0") || !strcmp(enc, "gb2312.80-0") || + !strcmp(enc, "gb2312.80&gb8565.88") || !strcmp(enc, "gb2312.80-0")) + { + return 17; + } else if (!strcmp(enc, "jisx0201.1976-0")) { + return 18; + } else if (!strcmp(enc, "jisx0208.1983-0") || !strcmp(enc, "jisx0208.1990-0") + || !strcmp(enc, "jisx0208.1978-0")) + { + return 19; + } else if (!strcmp(enc, "jisx0212.1990-0")) { + return 20; + } else if (!strcmp(enc, "symbol")) { + return 21; + } else if (!strcmp(enc, "dingbats") || !strcmp(enc, "zapfdingbats") || + !strcmp(enc, "zapf dingbats") || !strcmp(enc, "itc zapf dingbats")) + { + return 22; + } else if (!strcmp(enc, "koi8-u")) { + return 23; + } else if (!strcmp(enc, "microsoft-cp1251")) { + return 24; + } else if (!strcmp(enc, "iso8859-11")) { + return 25; + }; + return -1; +}; + |
