00001 /******************************************************************************
00002 *
00003 * Latin1UTF8 - SWFilter decendant to convert a Latin-1 character to UTF-8
00004 *
00005 */
00006
00007
00008 #include <stdlib.h>
00009 #include <stdio.h>
00010 #include <latin1utf8.h>
00011 #include <swmodule.h>
00012
00013 Latin1UTF8::Latin1UTF8() {
00014 }
00015
00016
00017 char Latin1UTF8::ProcessText(char *text, int maxlen, const SWKey *key, const SWModule *module)
00018 {
00019 unsigned char *to, *from;
00020 int len;
00021
00022 len = strlen(text) + 1;
00023 if (len == maxlen + 1)
00024 maxlen = (maxlen + 1) * FILTERPAD;
00025 // shift string to right of buffer
00026 if (len < maxlen) {
00027 memmove(&text[maxlen - len], text, len);
00028 from = (unsigned char*)&text[maxlen - len];
00029 }
00030 else
00031 from = (unsigned char*)text; // -------------------------------
00032
00033
00034
00035 for (to = (unsigned char*)text; *from; from++) {
00036 if (*from < 0x80) {
00037 *to++ = *from;
00038 }
00039 else if (*from < 0xc0) {
00040 switch(*from) {
00041 case 0x80: // ''
00042 *to++ = 0xe2; // ''
00043 *to++ = 0x82; // ''
00044 *to++ = 0xac; // ''
00045 break;
00046 case 0x82: // ''
00047 *to++ = 0xe2; // ''
00048 *to++ = 0x80; // ''
00049 *to++ = 0x9a; // ''
00050 break;
00051 case 0x83: // ''
00052 *to++ = 0xc6; // ''
00053 *to++ = 0x92; // ''
00054 break;
00055 case 0x84: // ''
00056 *to++ = 0xe2; // ''
00057 *to++ = 0x80; // ''
00058 *to++ = 0x9e; // ''
00059 break;
00060 case 0x85: // ''
00061 *to++ = 0xe2; // ''
00062 *to++ = 0x80; // ''
00063 *to++ = 0xa6; // ''
00064 break;
00065 case 0x86: // ''
00066 *to++ = 0xe2; // ''
00067 *to++ = 0x80; // ''
00068 *to++ = 0xa0; // ''
00069 break;
00070 case 0x87: // ''
00071 *to++ = 0xe2; // ''
00072 *to++ = 0x80; // ''
00073 *to++ = 0xa1; // ''
00074 break;
00075 case 0x88: // ''
00076 *to++ = 0xcb; // ''
00077 *to++ = 0x86; // ''
00078 break;
00079 case 0x89: // ''
00080 *to++ = 0xe2; // ''
00081 *to++ = 0x80; // ''
00082 *to++ = 0xb0; // ''
00083 break;
00084 case 0x8A: // ''
00085 *to++ = 0xc5; // ''
00086 *to++ = 0xa0; // ''
00087 break;
00088 case 0x8B: // ''
00089 *to++ = 0xe2; // ''
00090 *to++ = 0x80; // ''
00091 *to++ = 0xb9; // ''
00092 break;
00093 case 0x8C: // ''
00094 *to++ = 0xc5; // ''
00095 *to++ = 0x92; // ''
00096 break;
00097 case 0x8E: // ''
00098 *to++ = 0xc5; // ''
00099 *to++ = 0xbd; // ''
00100 break;
00101 case 0x91: // ''
00102 *to++ = 0xe2; // ''
00103 *to++ = 0x80; // ''
00104 *to++ = 0x98; // ''
00105 break;
00106 case 0x92: // ''
00107 *to++ = 0xe2; // ''
00108 *to++ = 0x80; // ''
00109 *to++ = 0x99; // ''
00110 break;
00111 case 0x93: // ''
00112 *to++ = 0xe2; // ''
00113 *to++ = 0x80; // ''
00114 *to++ = 0x9c; // ''
00115 break;
00116 case 0x94: // ''
00117 *to++ = 0xe2; // ''
00118 *to++ = 0x80; // ''
00119 *to++ = 0x9d; // ''
00120 break;
00121 case 0x95: // ''
00122 *to++ = 0xe2; // ''
00123 *to++ = 0x80; // ''
00124 *to++ = 0xa2; // ''
00125 break;
00126 case 0x96: // ''
00127 *to++ = 0xe2; // ''
00128 *to++ = 0x80; // ''
00129 *to++ = 0x93; // ''
00130 break;
00131 case 0x97: // ''
00132 *to++ = 0xe2; // ''
00133 *to++ = 0x80; // ''
00134 *to++ = 0x94; // ''
00135 break;
00136 case 0x98: // ''
00137 *to++ = 0xcb; // ''
00138 *to++ = 0x9c; // ''
00139 break;
00140 case 0x99: // ''
00141 *to++ = 0xe2; // ''
00142 *to++ = 0x84; // ''
00143 *to++ = 0xa2; // ''
00144 break;
00145 case 0x9A: // ''
00146 *to++ = 0xc5; // ''
00147 *to++ = 0xa1; // ''
00148 break;
00149 case 0x9B: // ''
00150 *to++ = 0xe2; // ''
00151 *to++ = 0x80; // ''
00152 *to++ = 0xba; // ''
00153 break;
00154 case 0x9C: // ''
00155 *to++ = 0xc5; // ''
00156 *to++ = 0x93; // ''
00157 break;
00158 case 0x9E: // ''
00159 *to++ = 0xc5; // ''
00160 *to++ = 0xbe; // ''
00161 break;
00162 case 0x9F: // ''
00163 *to++ = 0xc5; // ''
00164 *to++ = 0xb8; // ''
00165 break;
00166 default:
00167 *to++ = 0xC2;
00168 *to++ = *from;
00169 }
00170 }
00171 else {
00172 *to++ = 0xC3;
00173 *to++ = (*from - 0x40);
00174 }
00175 }
00176 *to++ = 0;
00177 *to = 0;
00178 return 0;
00179 }
1.2.15