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