|
fltk 1.3.0rc3
About: FLTK (Fast Light Tool Kit) is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X. Release candidate.
SfR Fresh Dox: fltk-1.3.0rc3-source.tar.gz ("inofficial" and yet experimental doxygen-generated source code documentation) ![]() |
00001 // 00002 // "$Id: fl_encoding_mac_roman.cxx 7903 2010-11-28 21:06:39Z matt $" 00003 // 00004 // Convert Mac Roman encoded text to the local encoding. 00005 // 00006 // Copyright 1998-2010 by Bill Spitzak and others. 00007 // 00008 // This library is free software; you can redistribute it and/or 00009 // modify it under the terms of the GNU Library General Public 00010 // License as published by the Free Software Foundation; either 00011 // version 2 of the License, or (at your option) any later version. 00012 // 00013 // This library is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 // Library General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU Library General Public 00019 // License along with this library; if not, write to the Free Software 00020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00021 // USA. 00022 // 00023 // Please report all bugs and problems on the following page: 00024 // 00025 // http://www.fltk.org/str.php 00026 // 00027 00028 #include <FL/fl_draw.H> 00029 #include <FL/Enumerations.H> 00030 #include <stdlib.h> 00031 #include "flstring.h" 00032 00033 // These function assume a western code page. If you need to support 00034 // scripts that are not part of this code page, you might want to 00035 // take a look at FLTK2, which uses utf8 for text encoding. 00036 // 00037 // By keeping these conversion tables in their own module, they will not 00038 // be statically linked (by a smart linker) unless actually used. 00039 // 00040 // On Mac OS X, nothing need to be converted. We simply return the 00041 // original pointer. 00042 // 00043 // MSWindows and X11 render text in ISO or Latin-1 for western settings. The 00044 // lookup tables below will convert all common character codes and replace 00045 // unknown characters with an upsidedown question mark. 00046 00047 #ifdef __APPLE__ 00048 00049 const char *fl_mac_roman_to_local(const char *t, int) 00050 { 00051 return t; 00052 } 00053 00054 const char *fl_local_to_mac_roman(const char *t, int) 00055 { 00056 return t; 00057 } 00058 00059 #else 00060 00061 // This table converts MSWindows-1252/Latin 1 into MacRoman encoding 00062 static uchar latin2roman[128] = { 00063 0xdb, 0xc0, 0xe2, 0xc4, 0xe3, 0xc9, 0xa0, 0xe0, 0xf6, 0xe4, 0xc0, 0xdc, 0xce, 0xc0, 0xc0, 0xc0, 00064 0xc0, 0xd4, 0xd5, 0xd2, 0xd3, 0xa5, 0xd0, 0xd1, 0xf7, 0xaa, 0xc0, 0xdd, 0xcf, 0xc0, 0xc0, 0xd9, 00065 0xca, 0xc1, 0xa2, 0xa3, 0xc0, 0xb4, 0xc0, 0xa4, 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0xc0, 0xa8, 0xf8, 00066 0xa1, 0xb1, 0xc0, 0xc0, 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xc0, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 00067 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 00068 0xc0, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xc0, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xc0, 0xc0, 0xa7, 00069 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, 00070 0xc0, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc0, 0xc0, 0xd8 00071 }; 00072 00073 // This table converts MacRoman into MSWindows-1252/Latin 1 00074 static uchar roman2latin[128] = { 00075 0xc4, 0xc5, 0xc7, 0xc9, 0xd1, 0xd6, 0xdc, 0xe1, 0xe0, 0xe2, 0xe4, 0xe3, 0xe5, 0xe7, 0xe9, 0xe8, 00076 0xea, 0xeb, 0xed, 0xec, 0xee, 0xef, 0xf1, 0xf3, 0xf2, 0xf4, 0xf6, 0xf5, 0xfa, 0xf9, 0xfb, 0xfc, 00077 0x86, 0xb0, 0xa2, 0xa3, 0xa7, 0x95, 0xb6, 0xdf, 0xae, 0xa9, 0x99, 0xb4, 0xa8, 0xbf, 0xc6, 0xd8, 00078 0xbf, 0xb1, 0xbf, 0xbf, 0xa5, 0xb5, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xaa, 0xba, 0xbf, 0xe6, 0xf8, 00079 0xbf, 0xa1, 0xac, 0xbf, 0x83, 0xbf, 0xbf, 0xab, 0xbb, 0x85, 0xa0, 0xc0, 0xc3, 0xd5, 0x8c, 0x9c, 00080 0x96, 0x97, 0x93, 0x94, 0x91, 0x92, 0xf7, 0xbf, 0xff, 0x9f, 0xbf, 0x80, 0x8b, 0x9b, 0xbf, 0xbf, 00081 0x87, 0xb7, 0x82, 0x84, 0x89, 0xc2, 0xca, 0xc1, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xd3, 0xd4, 00082 0xbf, 0xd2, 0xda, 0xdb, 0xd9, 0xbf, 0x88, 0x98, 0xaf, 0xbf, 0xbf, 0xbf, 0xb8, 0xbf, 0xbf, 0xbf 00083 }; 00084 00085 static char *buf = 0; 00086 static int n_buf = 0; 00087 00088 const char *fl_local_to_mac_roman(const char *t, int n) 00089 { 00090 if (n==-1) n = strlen(t); 00091 if (n<=n_buf) { 00092 n_buf = (n + 257) & 0x7fffff00; 00093 if (buf) free(buf); 00094 buf = (char*)malloc(n_buf); 00095 } 00096 const uchar *src = (const uchar*)t; 00097 uchar *dst = (uchar*)buf; 00098 for ( ; n>0; n--) { 00099 uchar c = *src; 00100 if (c>127) 00101 *dst = latin2roman[c-128]; 00102 else 00103 *dst = c; 00104 } 00105 //*dst = 0; // this would be wrong! 00106 return buf; 00107 } 00108 00109 const char *fl_mac_roman_to_local(const char *t, int n) 00110 { 00111 if (n==-1) n = strlen(t); 00112 if (n<=n_buf) { 00113 n_buf = (n + 257) & 0x7fffff00; 00114 if (buf) free(buf); 00115 buf = (char*)malloc(n_buf); 00116 } 00117 const uchar *src = (const uchar*)t; 00118 uchar *dst = (uchar*)buf; 00119 for ( ; n>0; n--) { 00120 uchar c = *src++; 00121 if (c>127) 00122 *dst++ = roman2latin[c-128]; 00123 else 00124 *dst++ = c; 00125 } 00126 //*dst = 0; // this would be wrong 00127 return buf; 00128 } 00129 00130 #endif 00131 00132 // 00133 // End of "$Id: fl_encoding_mac_roman.cxx 7903 2010-11-28 21:06:39Z matt $". 00134 //