1 #include "xincs.h"
2 #include "fxver.h"
3 #include "fxdefs.h"
4 #include "FXArray.h"
5 #include "FXHash.h"
6 #include "FXStream.h"
7 #include "FXTextCodec.h"
8 #include "FXCP1251Codec.h"
9 
10 namespace FX {
11 
12 FXIMPLEMENT(FXCP1251Codec,FXTextCodec,NULL,0)
13 
14 
15 //// Created by codec tool on 03/25/2005 from: CP1251.TXT ////
16 static const unsigned short forward_data[256]={
17    0,    1,    2,    3,    4,    5,    6,    7,    8,    9,    10,   11,   12,   13,   14,   15,
18    16,   17,   18,   19,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
19    32,   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
20    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
21    64,   65,   66,   67,   68,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,   79,
22    80,   81,   82,   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
23    96,   97,   98,   99,   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
24    112,  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,  126,  127,
25    1026, 1027, 8218, 1107, 8222, 8230, 8224, 8225, 8364, 8240, 1033, 8249, 1034, 1036, 1035, 1039,
26    1106, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 65533, 8482, 1113, 8250, 1114, 1116, 1115, 1119,
27    160,  1038, 1118, 1032, 164,  1168, 166,  167,  1025, 169,  1028, 171,  172,  173,  174,  1031,
28    176,  177,  1030, 1110, 1169, 181,  182,  183,  1105, 8470, 1108, 187,  1112, 1029, 1109, 1111,
29    1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055,
30    1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071,
31    1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
32    1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
33   };
34 
35 
36 static const unsigned char reverse_plane[17]={
37   0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
38   };
39 
40 static const unsigned char reverse_pages[73]={
41   0,  64, 74, 74, 74, 74, 74, 74, 137,74, 74, 74, 74, 74, 74, 74,
42   74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
43   74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
44   74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
45   74, 74, 74, 74, 74, 74, 74, 74, 74,
46   };
47 
48 static const unsigned short reverse_block[201]={
49   0,   16,  32,  48,  64,  80,  96,  112, 128, 128, 144, 160, 128, 128, 128, 128,
50   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
51   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
52   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
53   175, 191, 207, 223, 239, 255, 128, 128, 128, 271, 128, 128, 128, 128, 128, 128,
54   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
55   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
56   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
57   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 284, 300, 316, 128, 128, 128,
58   128, 128, 128, 327, 128, 128, 128, 128, 128, 128, 340, 354, 128, 128, 128, 128,
59   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
60   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
61   128, 128, 128, 128, 128, 128, 128, 128, 128,
62   };
63 
64 static const unsigned char reverse_data[370]={
65    0,    1,    2,    3,    4,    5,    6,    7,    8,    9,    10,   11,   12,   13,   14,   15,
66    16,   17,   18,   19,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
67    32,   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
68    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
69    64,   65,   66,   67,   68,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,   79,
70    80,   81,   82,   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
71    96,   97,   98,   99,   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
72    112,  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,  126,  127,
73    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
74    160,  26,   26,   26,   164,  26,   166,  167,  26,   169,  26,   171,  172,  173,  174,  26,
75    176,  177,  26,   26,   26,   181,  182,  183,  26,   26,   26,   187,  26,   26,   26,   26,
76    168,  128,  129,  170,  189,  178,  175,  163,  138,  140,  142,  141,  26,   161,  143,  192,
77    193,  194,  195,  196,  197,  198,  199,  200,  201,  202,  203,  204,  205,  206,  207,  208,
78    209,  210,  211,  212,  213,  214,  215,  216,  217,  218,  219,  220,  221,  222,  223,  224,
79    225,  226,  227,  228,  229,  230,  231,  232,  233,  234,  235,  236,  237,  238,  239,  240,
80    241,  242,  243,  244,  245,  246,  247,  248,  249,  250,  251,  252,  253,  254,  255,  26,
81    184,  144,  131,  186,  190,  179,  191,  188,  154,  156,  158,  157,  26,   162,  159,  165,
82    180,  26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   150,
83    151,  26,   26,   26,   145,  146,  130,  26,   147,  148,  132,  26,   134,  135,  149,  26,
84    26,   26,   133,  26,   26,   26,   26,   26,   26,   26,   26,   26,   137,  26,   26,   26,
85    26,   26,   26,   26,   26,   139,  155,  26,   26,   26,   26,   26,   26,   26,   26,   26,
86    26,   26,   26,   136,  26,   26,   26,   26,   26,   26,   185,  26,   26,   26,   26,   26,
87    26,   26,   26,   26,   153,  26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
88    26,   26,
89   };
90 
91 
mb2wc(FXwchar & wc,const FXchar * src,FXint nsrc) const92 FXint FXCP1251Codec::mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const {
93   if(nsrc<1) return -1;
94   wc=forward_data[(FXuchar)src[0]];
95   return 1;
96   }
97 
98 
wc2mb(FXchar * dst,FXint ndst,FXwchar wc) const99 FXint FXCP1251Codec::wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const {
100   if(ndst<1) return -1;
101   dst[0]=reverse_data[reverse_block[reverse_pages[reverse_plane[wc>>16]+((wc>>10)&63)]+((wc>>4)&63)]+(wc&15)];
102   return 1;
103   }
104 
mibEnum() const105 FXint FXCP1251Codec::mibEnum() const {
106   return 2251;
107   }
108 
109 
name() const110 const FXchar* FXCP1251Codec::name() const {
111   return "windows-1251";
112   }
113 
114 
mimeName() const115 const FXchar* FXCP1251Codec::mimeName() const {
116   return "windows-1251";
117   }
118 
119 
aliases() const120 const FXchar* const* FXCP1251Codec::aliases() const {
121   static const FXchar *const list[]={"microsoft-cp1251","windows-1251","cp1251",NULL};
122   return list;
123   }
124 
125 }
126 
127