00001 #include <stdio.h>
00002 #include "CEncoding.h"
00003
00004 void CUtf8::getch(tchar& ch, CStyle& sty, unsigned long& pos)
00005 {
00006 tchar ret;
00007 parent->getch(ret, sty, pos);
00008 if (ret == UEOF)
00009 {
00010 ch = UEOF;
00011 return;
00012 }
00013 int count = 0;
00014 if (ret & (1 << 7))
00015 {
00016 unsigned char flags = ret << 1;
00017 while ((flags & (1 << 7)) != 0)
00018 {
00019 ret <<= 6;
00020 tchar iret;
00021 parent->getch(iret, sty, pos);
00022 ret += iret & 0x3f;
00023 flags <<= 1;
00024 count++;
00025 }
00026 switch (count)
00027 {
00028 case 0:
00029 break;
00030 case 1:
00031 ret &= 0x07ff;
00032 break;
00033 case 2:
00034 break;
00035 case 3:
00036 case 4:
00037 case 5:
00038 default:
00039 printf("Only 16bit unicode supported...");
00040 }
00041 }
00042 ch = ret;
00043 return;
00044 }
00045
00046 void CUcs16be::getch(tchar& ch, CStyle& sty, unsigned long& pos)
00047 {
00048 tchar iret;
00049 parent->getch(iret, sty, pos);
00050 if (iret == UEOF)
00051 {
00052 ch = UEOF;
00053 return;
00054 }
00055 tchar ret = iret;
00056 parent->getch(iret, sty, pos);
00057 ch = (ret << 8) + iret;
00058 }
00059
00060 void CUcs16le::getch(tchar& ch, CStyle& sty, unsigned long& pos)
00061 {
00062 tchar iret;
00063 parent->getch(iret, sty, pos);
00064 if (iret == UEOF)
00065 {
00066 ch = UEOF;
00067 return;
00068 }
00069 tchar ret = iret;
00070 parent->getch(iret, sty, pos);
00071 ch = ret + (iret << 8);
00072 }
00073
00074 void Ccp1252::getch(tchar& ch, CStyle& sty, unsigned long& pos)
00075 {
00076 tchar iret;
00077 parent->getch(iret, sty, pos);
00078 ch = iret;
00079 switch (ch)
00080 {
00081 case UEOF:
00082 ch = UEOF;
00083 break;
00084 case 0x80:
00085 ch = 0x20ac;
00086 break;
00087 case 0x82:
00088 ch = 0x201a;
00089 break;
00090 case 0x83:
00091 ch = 0x0192;
00092 break;
00093 case 0x84:
00094 ch = 0x201e;
00095 break;
00096 case 0x85:
00097 ch = 0x2026;
00098 break;
00099 case 0x86:
00100 ch = 0x2020;
00101 break;
00102 case 0x87:
00103 ch = 0x2021;
00104 break;
00105 case 0x88:
00106 ch = 0x02c6;
00107 break;
00108 case 0x89:
00109 ch = 0x2030;
00110 break;
00111 case 0x8a:
00112 ch = 0x0160;
00113 break;
00114 case 0x8b:
00115 ch = 0x2039;
00116 break;
00117 case 0x8c:
00118 ch = 0x0152;
00119 break;
00120 case 0x8e:
00121 ch = 0x017d;
00122 break;
00123 case 0x91:
00124 ch = 0x2018;
00125 break;
00126 case 0x92:
00127 ch = 0x2019;
00128 break;
00129 case 0x93:
00130 ch = 0x201c;
00131 break;
00132 case 0x94:
00133 ch = 0x201d;
00134 break;
00135 case 0x95:
00136 ch = 0x2022;
00137 break;
00138 case 0x96:
00139 ch = 0x2013;
00140 break;
00141 case 0x97:
00142 ch = 0x2014;
00143 break;
00144 case 0x98:
00145 ch = 0x02dc;
00146 break;
00147 case 0x99:
00148 ch = 0x2122;
00149 break;
00150 case 0x9a:
00151 ch = 0x0161;
00152 break;
00153 case 0x9b:
00154 ch = 0x203a;
00155 break;
00156 case 0x9c:
00157 ch = 0x0153;
00158 break;
00159 case 0x9e:
00160 ch = 0x017e;
00161 break;
00162 case 0x9f:
00163 ch = 0x0178;
00164 break;
00165 default:
00166 break;
00167 }
00168 }
00169
00170 void CPalm::getch(tchar& ch, CStyle& sty, unsigned long& pos)
00171 {
00172 Ccp1252::getch(ch, sty, pos);
00173 switch (ch)
00174 {
00175 case 0x18:
00176 ch = 0x2026;
00177 break;
00178 case 0x19:
00179 ch = 0x2007;
00180 break;
00181 case 0x8d:
00182 ch = 0x2662;
00183 break;
00184 case 0x8e:
00185 ch = 0x2663;
00186 break;
00187 case 0x8f:
00188 ch = 0x2661;
00189 break;
00190 case 0x90:
00191 ch = 0x2660;
00192 break;
00193 default:
00194 break;
00195 }
00196 }
00197
00198 void CAscii::getch(tchar& ch, CStyle& sty, unsigned long& pos)
00199 {
00200 tchar iret;
00201 parent->getch(iret, sty, pos);
00202 if (iret == UEOF)
00203 {
00204 ch = UEOF;
00205 }
00206 else
00207 {
00208 ch = iret;
00209 }
00210 }