00001
00002
00003
00004
00005
00006
00007 static const unsigned short georgian_ps_2uni_1[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 static const unsigned short georgian_ps_2uni_2[39] = {
00016
00017 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10f1,
00018 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10f2, 0x10dd,
00019
00020 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10f3, 0x10e3, 0x10e4,
00021 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec,
00022
00023 0x10ed, 0x10ee, 0x10f4, 0x10ef, 0x10f0, 0x10f5,
00024 };
00025
00026 static int
00027 georgian_ps_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00028 {
00029 unsigned char c = *s;
00030 if (c >= 0x80 && c < 0xa0)
00031 *pwc = (ucs4_t) georgian_ps_2uni_1[c-0x80];
00032 else if (c >= 0xc0 && c < 0xe6)
00033 *pwc = (ucs4_t) georgian_ps_2uni_2[c-0xc0];
00034 else
00035 *pwc = (ucs4_t) c;
00036 return 1;
00037 }
00038
00039 static const unsigned char georgian_ps_page00[32] = {
00040 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00041 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f,
00042 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00043 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00,
00044 };
00045 static const unsigned char georgian_ps_page01[72] = {
00046 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00,
00047 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00048 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00049 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00050 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00051 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00052 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00053 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00054 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00,
00055 };
00056 static const unsigned char georgian_ps_page02[32] = {
00057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00,
00058 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00059 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00060 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00,
00061 };
00062 static const unsigned char georgian_ps_page10[40] = {
00063 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8,
00064 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xcf, 0xd0, 0xd1,
00065 0xd2, 0xd3, 0xd4, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
00066 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe3,
00067 0xe4, 0xc7, 0xce, 0xd5, 0xe2, 0xe5, 0x00, 0x00,
00068 };
00069 static const unsigned char georgian_ps_page20[48] = {
00070 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00,
00071 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00,
00072 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00,
00073 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00074 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00075 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00,
00076 };
00077
00078 static int
00079 georgian_ps_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00080 {
00081 unsigned char c = 0;
00082 if (wc < 0x0080) {
00083 *r = wc;
00084 return 1;
00085 }
00086 else if (wc >= 0x0080 && wc < 0x00a0)
00087 c = georgian_ps_page00[wc-0x0080];
00088 else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e6 && wc < 0x0100))
00089 c = wc;
00090 else if (wc >= 0x0150 && wc < 0x0198)
00091 c = georgian_ps_page01[wc-0x0150];
00092 else if (wc >= 0x02c0 && wc < 0x02e0)
00093 c = georgian_ps_page02[wc-0x02c0];
00094 else if (wc >= 0x10d0 && wc < 0x10f8)
00095 c = georgian_ps_page10[wc-0x10d0];
00096 else if (wc >= 0x2010 && wc < 0x2040)
00097 c = georgian_ps_page20[wc-0x2010];
00098 else if (wc == 0x2122)
00099 c = 0x99;
00100 if (c != 0) {
00101 *r = c;
00102 return 1;
00103 }
00104 return RET_ILSEQ;
00105 }