00001
00002
00003
00004
00005
00006
00007 #ifdef NEED_TOWC
00008 static const unsigned short iso8859_14_2uni[96] = {
00009
00010 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7,
00011 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178,
00012
00013 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56,
00014 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61,
00015
00016 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
00017 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
00018
00019 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a,
00020 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df,
00021
00022 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
00023 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
00024
00025 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b,
00026 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff,
00027 };
00028
00029 static int
00030 iso8859_14_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
00031 {
00032 unsigned char c = *s;
00033 if (c >= 0xa0)
00034 *pwc = (ucs4_t) iso8859_14_2uni[c-0xa0];
00035 else
00036 *pwc = (ucs4_t) c;
00037 return 1;
00038 }
00039 #endif
00040
00041 #ifdef NEED_TOMB
00042 static const unsigned char iso8859_14_page00[96] = {
00043 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7,
00044 0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00,
00045 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00,
00046 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00047 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00048 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00049 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00,
00050 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf,
00051 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00052 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00053 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00,
00054 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff,
00055 };
00056 static const unsigned char iso8859_14_page01_0[32] = {
00057 0x00, 0x00, 0xa4, 0xa5, 0x00, 0x00, 0x00, 0x00,
00058 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00059 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00060 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00061 };
00062 static const unsigned char iso8859_14_page01_1[16] = {
00063 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe,
00064 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00065 };
00066 static const unsigned char iso8859_14_page1e_0[136] = {
00067 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00,
00068 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00,
00069 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00070 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1,
00071 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00072 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00073 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00074 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00075 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00076 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00077 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9,
00078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00079 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00080 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00,
00081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00082 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
00083 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00,
00084 };
00085 static const unsigned char iso8859_14_page1e_1[8] = {
00086 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00,
00087 };
00088
00089 static int
00090 iso8859_14_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
00091 {
00092 unsigned char c = 0;
00093 if (wc < 0x00a0) {
00094 *r = wc;
00095 return 1;
00096 }
00097 else if (wc >= 0x00a0 && wc < 0x0100)
00098 c = iso8859_14_page00[wc-0x00a0];
00099 else if (wc >= 0x0108 && wc < 0x0128)
00100 c = iso8859_14_page01_0[wc-0x0108];
00101 else if (wc >= 0x0170 && wc < 0x0180)
00102 c = iso8859_14_page01_1[wc-0x0170];
00103 else if (wc >= 0x1e00 && wc < 0x1e88)
00104 c = iso8859_14_page1e_0[wc-0x1e00];
00105 else if (wc >= 0x1ef0 && wc < 0x1ef8)
00106 c = iso8859_14_page1e_1[wc-0x1ef0];
00107 if (c != 0) {
00108 *r = c;
00109 return 1;
00110 }
00111 return RET_ILSEQ;
00112 }
00113 #endif