summaryrefslogtreecommitdiff
path: root/src/xutf8/ucs2fontmap.c
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2008-09-10 23:56:49 +0000
committerMatthias Melcher <fltk@matthiasm.com>2008-09-10 23:56:49 +0000
commitb6bde2e4569aa617c8a6af64947c688c624ed7f8 (patch)
tree010d15843eb7d4faf7cd1b0cd44d5b9c00462a83 /src/xutf8/ucs2fontmap.c
parentdfb50e85292687561927610e689eb5ab30d0ba26 (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.c382
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;
+};
+