00001
00002
00003
00004
00005
00006
00007 static const unsigned short tatar_cyr_2uni[128] = {
00008
00009 0x04d8, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
00010 0x20ac, 0x2030, 0x04e8, 0x2039, 0x04ae, 0x0496, 0x04a2, 0x04ba,
00011
00012 0x04d9, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
00013 0x98, 0x2122, 0x04e9, 0x203a, 0x04af, 0x0497, 0x04a3, 0x04bb,
00014
00015 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
00016 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
00017
00018 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
00019 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
00020
00021 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
00022 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
00023
00024 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
00025 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
00026
00027 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
00028 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
00029
00030 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
00031 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
00032 };
00033
00034 static int
00035 tatar_cyr_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00036 {
00037 unsigned char c = *s;
00038 if (c < 0x80)
00039 *pwc = (ucs4_t) c;
00040 else
00041 *pwc = (ucs4_t) tatar_cyr_2uni[c-0x80];
00042 return 1;
00043 }
00044
00045 static const unsigned char tatar_cyr_page00[32] = {
00046 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7,
00047 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00,
00048 0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7,
00049 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00,
00050 };
00051 static const unsigned char tatar_cyr_page04[240] = {
00052 0x00, 0xa8, 0x00, 0x81, 0xaa, 0xbd, 0xb2, 0xaf,
00053 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00,
00054 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00055 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00056 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00057 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
00058 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00059 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00060 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
00061 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
00062 0x00, 0xb8, 0x00, 0x83, 0xba, 0xbe, 0xb3, 0xbf,
00063 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00,
00064 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00066 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00067 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00068 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00069 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00070 0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x9d,
00071 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00072 0x00, 0x00, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00,
00073 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x9c,
00074 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00075 0x00, 0x00, 0x8f, 0x9f, 0x00, 0x00, 0x00, 0x00,
00076 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00077 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00079 0x80, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00080 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00081 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00082 };
00083 static const unsigned char tatar_cyr_page20[48] = {
00084 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00,
00085 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00,
00086 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00,
00087 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00088 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00089 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00,
00090 };
00091 static const unsigned char tatar_cyr_page21[24] = {
00092 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00,
00093 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00094 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00,
00095 };
00096 static const unsigned char tatar_cyr_page22[1] = {
00097 0xb0,
00098 };
00099
00100 static int
00101 tatar_cyr_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00102 {
00103 unsigned char c = 0;
00104 if (wc < 0x0080) {
00105 *r = wc;
00106 return 1;
00107 }
00108 else if (wc >= 0x00a0 && wc < 0x00bc)
00109 c = tatar_cyr_page00[wc-0x00a0];
00110 else if (wc >= 0x0400 && wc < 0x04ef)
00111 c = tatar_cyr_page04[wc-0x0400];
00112 else if (wc >= 0x2010 && wc < 0x203b)
00113 c = tatar_cyr_page20[wc-0x2010];
00114 else if (wc == 0x20ac)
00115 c = 0x88;
00116 else if (wc >= 0x2110 && wc < 0x2123)
00117 c = tatar_cyr_page21[wc-0x2110];
00118 if (c != 0) {
00119 *r = c;
00120 return 1;
00121 }
00122 return RET_ILSEQ;
00123 }