1 /********************************************************************************
2 * *
3 * Unicode Character Database Tests *
4 * *
5 *********************************************************************************
6 * Copyright (C) 2011,2021 by Jeroen van der Zijp. All Rights Reserved. *
7 ********************************************************************************/
8 #include "fx.h"
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12
13
14
15 const FXchar *const category[]={
16 "Cn",
17 "Cc",
18 "Cf",
19 "Cs",
20 "Co",
21 "Mn",
22 "Mc",
23 "Me",
24 "Zs",
25 "Zl",
26 "Zp",
27 "Lu",
28 "Ll",
29 "Lt",
30 "Lm",
31 "Lo",
32 "Nl",
33 "Nd",
34 "No",
35 "Pc",
36 "Pd",
37 "Ps",
38 "Pe",
39 "Pi",
40 "Pf",
41 "Po",
42 "Sm",
43 "Sc",
44 "Sk",
45 "So"
46 };
47
48
49 const FXchar *const direction[]={
50 "L",
51 "LRE",
52 "LRO",
53 "R",
54 "AL",
55 "RLE",
56 "RLO",
57 "PDF",
58 "EN",
59 "ES",
60 "ET",
61 "AN",
62 "CS",
63 "NSM",
64 "BN",
65 "B",
66 "S",
67 "WS",
68 "ON"
69 };
70
71 const FXchar *const linebreak[]={
72 "XX",
73
74 "BK",
75 "CR",
76 "LF",
77 "CM",
78 "NL",
79 "SG",
80 "WJ",
81 "ZW",
82 "GL",
83 "SP",
84
85 "B2",
86 "BA",
87 "BB",
88 "HY",
89 "CB",
90
91 "CL",
92 "CP",
93 "EX",
94 "IN",
95 "NS",
96 "OP",
97 "QU",
98
99 "IS",
100 "NU",
101 "PO",
102 "PR",
103 "SY",
104
105 "AI",
106 "AL",
107 "H2",
108 "H3",
109 "ID",
110
111 "JL",
112 "JV",
113 "JT",
114 "SA"
115 };
116
117
118 const FXchar *const scriptcode[]={
119 "Zzzz",
120 "Zyyy",
121 "Zinh",
122 "Latn",
123 "Grek",
124 "Cyrl",
125 "Armn",
126 "Hebr",
127 "Arab",
128 "Syrc",
129 "Thaa",
130 "Deva",
131 "Beng",
132 "Guru",
133 "Gujr",
134 "Orya",
135 "Taml",
136 "Telu",
137 "Knda",
138 "Mlym",
139 "Sinh",
140 "Thai",
141 "Laoo",
142 "Tibt",
143 "Mymr",
144 "Geor",
145 "Hang",
146 "Ethi",
147 "Cher",
148 "Cans",
149 "Ogam",
150 "Runr",
151 "Khmr",
152 "Mong",
153 "Hira",
154 "Kana",
155 "Bopo",
156 "Hani",
157 "Yiii",
158 "Ital",
159 "Goth",
160 "Dsrt",
161 "Tglg",
162 "Hano",
163 "Buhd",
164 "Tagb",
165 "Limb",
166 "Tale",
167 "Linb",
168 "Ugar",
169 "Shaw",
170 "Osma",
171 "Cprt",
172 "Brai",
173 "Bugi",
174 "Copt",
175 "Talu",
176 "Glag",
177 "Tfng",
178 "Sylo",
179 "Xpeo",
180 "Khar",
181 "Bali",
182 "Xsux",
183 "Phnx",
184 "Phag",
185 "Nkoo",
186 "Sund",
187 "Lepc",
188 "Olck",
189 "Vaii",
190 "Saur",
191 "Kali",
192 "Rjng",
193 "Lyci",
194 "Cari",
195 "Lydi",
196 "Cham",
197 "Lana",
198 "Tavt",
199 "Avst",
200 "Egyp",
201 "Samr",
202 "Lisu",
203 "Bamu",
204 "Java",
205 "Mtei",
206 "Armi",
207 "Sarb",
208 "Prti",
209 "Phli",
210 "Orkh",
211 "Kthi",
212 "Batk",
213 "Brah",
214 "Mand"
215 };
216
217 const FXchar *const joiningtype[]={
218 "NJ",
219 "RJ",
220 "DJ",
221 "JC",
222 "LJ",
223 "JT"
224 };
225
226
227 const FXchar *const decomposetype[]={
228 "None",
229 "Cann",
230 "Comp",
231 "Font",
232 "NBrk",
233 "Init",
234 "Medi",
235 "Fina",
236 "Isol",
237 "Circ",
238 "Supr",
239 "Sub",
240 "Vert",
241 "Wide",
242 "Narr",
243 "Smll",
244 "Sqre",
245 "Frac"
246 };
247
248
249 // Start the whole thing
main(int,char **)250 int main(int,char**){
251 FXchar buffer[2048];
252 FXint len;
253 FXwchar uc;
254 FXchar ch;
255
256 // Dump character properties
257 for(uc=0; uc<0x110000; ++uc){
258 if(uc%32==0){
259 printf("\nCode\tChar\tCat\tDir\tBreak\tValue\tScript\tComb\tJoin\tDecom\tNumdec\tCase\n");
260 printf("============================================================================================\n");
261 }
262 printf("%04X\t",uc);
263 if(' '<=uc){
264 len=wc2utf(buffer,uc); buffer[len]=0;
265 printf("%s\t",buffer);
266 }
267 else{
268 printf(" \t");
269 }
270 printf("%2s\t",category[Unicode::charCategory(uc)]);
271 printf("%3s\t",direction[Unicode::charDirection(uc)]);
272 printf("%2s\t",linebreak[Unicode::lineBreakType(uc)]);
273 if(0<=Unicode::digitValue(uc)){
274 printf("%2d\t",Unicode::digitValue(uc));
275 }
276 else{
277 printf("--\t");
278 }
279 printf("%4s\t",scriptcode[Unicode::scriptType(uc)]);
280 printf("%4d\t",Unicode::charCombining(uc));
281 printf("%3s\t",joiningtype[Unicode::joiningType(uc)]);
282 printf("%4s\t",decomposetype[Unicode::decomposeType(uc)]);
283 printf("%2d\t",Unicode::charNumDecompose(uc));
284 ch='-';
285 if(Unicode::isUpper(uc)) ch='U';
286 else if(Unicode::isLower(uc)) ch='L';
287 else if(Unicode::isTitle(uc)) ch='T';
288 printf("%c\t",ch);
289 printf("\n");
290 }
291 return 1;
292 }
293