1 /*
2  * "streamable kanji code filter and converter"
3  * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
4  *
5  * LICENSE NOTICES
6  *
7  * This file is part of "streamable kanji code filter and converter",
8  * which is distributed under the terms of GNU Lesser General Public
9  * License (version 2) as published by the Free Software Foundation.
10  *
11  * This software is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with "streamable kanji code filter and converter";
18  * if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19  * Suite 330, Boston, MA  02111-1307  USA
20  *
21  * The authors of this file: PHP3 Internationalization team
22  *
23  */
24 
25 /* charactor property table */
26 #define MBFL_CHP_CTL		0x01
27 #define MBFL_CHP_DIGIT		0x02
28 #define MBFL_CHP_UALPHA		0x04
29 #define MBFL_CHP_LALPHA		0x08
30 #define MBFL_CHP_MMHQENC	0x10	/* must Q-encoding in MIME Header encoded-word */
31 #define MBFL_CHP_MSPECIAL	0x20	/* RFC822 Special characters */
32 
33 /*
34  * Unicode table
35  */
36 
37 static const unsigned char mbfl_charprop_table[] = {
38 /* NUL	0 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC,
39 /* SCH	1 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
40 /* SIX	2 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
41 /* EIX	3 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
42 /* EOT	4 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
43 /* ENQ	5 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
44 /* ACK	6 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
45 /* BEL	7 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
46 /* BS	8 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
47 /* HI	9 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
48 /* LF	10 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
49 /* VI	11 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
50 /* FF	12 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
51 /* CR	13 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
52 /* SO	14 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
53 /* SI	15 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
54 /* SLE	16 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
55 /* CSI	17 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
56 /* DC2	18 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
57 /* DC3	19 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
58 /* DC4	20 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
59 /* NAK	21 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
60 /* SYN	22 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
61 /* EIB	23 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
62 /* CAN	24 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
63 /* EM	25 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
64 /* SLB	26 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
65 /* ESC	27 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
66 /* FS	28 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
67 /* GS	29 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
68 /* RS	30 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
69 /* US	31 */	MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
70 /* SP	32 */	MBFL_CHP_MMHQENC ,
71 /* !	33 */	0 ,
72 /* "	34 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
73 /* #	35 */	MBFL_CHP_MMHQENC ,
74 /* $	36 */	MBFL_CHP_MMHQENC ,
75 /* %	37 */	MBFL_CHP_MMHQENC ,
76 /* &	38 */	MBFL_CHP_MMHQENC ,
77 /* '	39 */	MBFL_CHP_MMHQENC ,
78 /* (	40 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
79 /* )	41 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
80 /* *	42 */	0 ,
81 /* +	43 */	0 ,
82 /* ,	44 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
83 /* -	45 */	0 ,
84 /* .	46 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
85 /* /	47 */	0 ,
86 /* 0	48 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
87 /* 1	49 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
88 /* 2	50 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
89 /* 3	51 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
90 /* 4	52 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
91 /* 5	53 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
92 /* 6	54 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
93 /* 7	55 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
94 /* 8	56 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
95 /* 9	57 */	MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
96 /* :	58 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
97 /* ;	59 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
98 /* <	60 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
99 /* =	61 */	0 ,
100 /* >	62 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
101 /* ?	63 */	MBFL_CHP_MMHQENC ,
102 /* @	64 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
103 /* A	65 */	MBFL_CHP_UALPHA ,
104 /* B	66 */	MBFL_CHP_UALPHA ,
105 /* C	67 */	MBFL_CHP_UALPHA ,
106 /* D	68 */	MBFL_CHP_UALPHA ,
107 /* E	69 */	MBFL_CHP_UALPHA ,
108 /* F	70 */	MBFL_CHP_UALPHA ,
109 /* G	71 */	MBFL_CHP_UALPHA ,
110 /* H	72 */	MBFL_CHP_UALPHA ,
111 /* I	73 */	MBFL_CHP_UALPHA ,
112 /* J	74 */	MBFL_CHP_UALPHA ,
113 /* K	75 */	MBFL_CHP_UALPHA ,
114 /* L	76 */	MBFL_CHP_UALPHA ,
115 /* M	77 */	MBFL_CHP_UALPHA ,
116 /* N	78 */	MBFL_CHP_UALPHA ,
117 /* O	79 */	MBFL_CHP_UALPHA ,
118 /* P	80 */	MBFL_CHP_UALPHA ,
119 /* Q	81 */	MBFL_CHP_UALPHA ,
120 /* R	82 */	MBFL_CHP_UALPHA ,
121 /* S	83 */	MBFL_CHP_UALPHA ,
122 /* T	84 */	MBFL_CHP_UALPHA ,
123 /* U	85 */	MBFL_CHP_UALPHA ,
124 /* V	86 */	MBFL_CHP_UALPHA ,
125 /* W	87 */	MBFL_CHP_UALPHA ,
126 /* X	88 */	MBFL_CHP_UALPHA ,
127 /* Y	89 */	MBFL_CHP_UALPHA ,
128 /* Z	90 */	MBFL_CHP_UALPHA ,
129 /* [	91 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
130 /* \	92 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
131 /* ]	93 */	MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
132 /* ^	94 */	MBFL_CHP_MMHQENC ,
133 /* _	95 */	MBFL_CHP_MMHQENC ,
134 /* `	96 */	MBFL_CHP_MMHQENC ,
135 /* a	97 */	MBFL_CHP_LALPHA ,
136 /* b	98 */	MBFL_CHP_LALPHA ,
137 /* c	99 */	MBFL_CHP_LALPHA ,
138 /* d	100 */	MBFL_CHP_LALPHA ,
139 /* e	101 */	MBFL_CHP_LALPHA ,
140 /* f	102 */	MBFL_CHP_LALPHA ,
141 /* g	103 */	MBFL_CHP_LALPHA ,
142 /* h	104 */	MBFL_CHP_LALPHA ,
143 /* i	105 */	MBFL_CHP_LALPHA ,
144 /* j	106 */	MBFL_CHP_LALPHA ,
145 /* k	107 */	MBFL_CHP_LALPHA ,
146 /* l	108 */	MBFL_CHP_LALPHA ,
147 /* m	109 */	MBFL_CHP_LALPHA ,
148 /* n	110 */	MBFL_CHP_LALPHA ,
149 /* o	111 */	MBFL_CHP_LALPHA ,
150 /* p	112 */	MBFL_CHP_LALPHA ,
151 /* q	113 */	MBFL_CHP_LALPHA ,
152 /* r	114 */	MBFL_CHP_LALPHA ,
153 /* s	115 */	MBFL_CHP_LALPHA ,
154 /* t	116 */	MBFL_CHP_LALPHA ,
155 /* u	117 */	MBFL_CHP_LALPHA ,
156 /* v	118 */	MBFL_CHP_LALPHA ,
157 /* w	119 */	MBFL_CHP_LALPHA ,
158 /* x	120 */	MBFL_CHP_LALPHA ,
159 /* y	121 */	MBFL_CHP_LALPHA ,
160 /* z	122 */	MBFL_CHP_LALPHA ,
161 /* {	123 */	MBFL_CHP_MMHQENC ,
162 /* |	124 */	MBFL_CHP_MMHQENC ,
163 /* }	125 */	MBFL_CHP_MMHQENC ,
164 /* ~	126 */	MBFL_CHP_MMHQENC ,
165 /* DEL	127 */	MBFL_CHP_MMHQENC
166 };
167 
168