00001
00002
00003
00004
00005
00006
00007 static const unsigned short georgian_academy_2uni[32] = {
00008
00009 0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
00010 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f,
00011
00012 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
00013 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178,
00014 };
00015
00016 static int
00017 georgian_academy_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00018 {
00019 unsigned char c = *s;
00020 if (c >= 0x80 && c < 0xa0)
00021 *pwc = (ucs4_t) georgian_academy_2uni[c-0x80];
00022 else if (c >= 0xc0 && c < 0xe7)
00023 *pwc = (ucs4_t) c + 0x1010;
00024 else
00025 *pwc = (ucs4_t) c;
00026 return 1;
00027 }
00028
00029 static const unsigned char georgian_academy_page00[32] = {
00030 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00031 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f,
00032 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00033 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00,
00034 };
00035 static const unsigned char georgian_academy_page01[72] = {
00036 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00,
00037 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00038 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00039 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00040 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00041 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00042 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00043 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00044 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00,
00045 };
00046 static const unsigned char georgian_academy_page02[32] = {
00047 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00,
00048 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00049 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00050 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00,
00051 };
00052 static const unsigned char georgian_academy_page20[48] = {
00053 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00,
00054 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00,
00055 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00,
00056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00057 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00058 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00,
00059 };
00060
00061 static int
00062 georgian_academy_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00063 {
00064 unsigned char c = 0;
00065 if (wc < 0x0080) {
00066 *r = wc;
00067 return 1;
00068 }
00069 else if (wc >= 0x0080 && wc < 0x00a0)
00070 c = georgian_academy_page00[wc-0x0080];
00071 else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e7 && wc < 0x0100))
00072 c = wc;
00073 else if (wc >= 0x0150 && wc < 0x0198)
00074 c = georgian_academy_page01[wc-0x0150];
00075 else if (wc >= 0x02c0 && wc < 0x02e0)
00076 c = georgian_academy_page02[wc-0x02c0];
00077 else if (wc >= 0x10d0 && wc < 0x10f7)
00078 c = wc-0x1010;
00079 else if (wc >= 0x2010 && wc < 0x2040)
00080 c = georgian_academy_page20[wc-0x2010];
00081 else if (wc == 0x2122)
00082 c = 0x99;
00083 if (c != 0) {
00084 *r = c;
00085 return 1;
00086 }
00087 return RET_ILSEQ;
00088 }