|
1 /* |
|
2 ******************************************************************************* |
|
3 * |
|
4 * Copyright (C) 1999-2004, International Business Machines |
|
5 * Corporation and others. All Rights Reserved. |
|
6 * |
|
7 ******************************************************************************* |
|
8 * file name: gendata.cpp |
|
9 * |
|
10 * created on: 11/03/2000 |
|
11 * created by: Eric R. Mader |
|
12 */ |
|
13 |
|
14 #include <stdio.h> |
|
15 #include <ctype.h> |
|
16 |
|
17 #include "LETypes.h" |
|
18 #include "LEScripts.h" |
|
19 #include "LayoutEngine.h" |
|
20 |
|
21 #include "PortableFontInstance.h" |
|
22 |
|
23 #include "unicode/uscript.h" |
|
24 |
|
25 U_NAMESPACE_USE |
|
26 |
|
27 #define ARRAY_LENGTH(array) (sizeof array / sizeof array[0]) |
|
28 |
|
29 struct TestInput |
|
30 { |
|
31 char *fontName; |
|
32 LEUnicode *text; |
|
33 le_int32 textLength; |
|
34 le_int32 scriptCode; |
|
35 le_bool rightToLeft; |
|
36 }; |
|
37 |
|
38 /* |
|
39 * FIXME: should use the output file name and the current date. |
|
40 */ |
|
41 char *header = |
|
42 "/*\n" |
|
43 " *******************************************************************************\n" |
|
44 " *\n" |
|
45 " * Copyright (C) 1999-2004, International Business Machines\n" |
|
46 " * Corporation and others. All Rights Reserved.\n" |
|
47 " *\n" |
|
48 " * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT\n" |
|
49 " * UNLESS YOU REALLY KNOW WHAT YOU'RE DOING.\n" |
|
50 " *\n" |
|
51 " *******************************************************************************\n" |
|
52 " *\n" |
|
53 " * file name: testdata.cpp\n" |
|
54 " * created on: 12/14/2000\n" |
|
55 " * created by: gendata.cpp\n" |
|
56 " */\n" |
|
57 "\n" |
|
58 "#include \"LETypes.h\"\n" |
|
59 "#include \"LEScripts.h\"\n" |
|
60 "#include \"letest.h\"\n" |
|
61 "\n"; |
|
62 |
|
63 #if 0 |
|
64 char *scriptNames[] = |
|
65 { |
|
66 "USCRIPT_COMMON", /* Zyyy */ |
|
67 "USCRIPT_INHERITED", /* Qaai */ |
|
68 "USCRIPT_ARABIC", /* Arab */ |
|
69 "USCRIPT_ARMENIAN", /* Armn */ |
|
70 "USCRIPT_BENGALI", /* Beng */ |
|
71 "USCRIPT_BOPOMOFO", /* Bopo */ |
|
72 "USCRIPT_CHEROKEE", /* Cher */ |
|
73 "USCRIPT_COPTIC", /* Qaac */ |
|
74 "USCRIPT_CYRILLIC", /* Cyrl (Cyrs) */ |
|
75 "USCRIPT_DESERET", /* Dsrt */ |
|
76 "USCRIPT_DEVANAGARI", /* Deva */ |
|
77 "USCRIPT_ETHIOPIC", /* Ethi */ |
|
78 "USCRIPT_GEORGIAN", /* Geor (Geon, Geoa) */ |
|
79 "USCRIPT_GOTHIC", /* Goth */ |
|
80 "USCRIPT_GREEK", /* Grek */ |
|
81 "USCRIPT_GUJARATI", /* Gujr */ |
|
82 "USCRIPT_GURMUKHI", /* Guru */ |
|
83 "USCRIPT_HAN", /* Hani */ |
|
84 "USCRIPT_HANGUL", /* Hang */ |
|
85 "USCRIPT_HEBREW", /* Hebr */ |
|
86 "USCRIPT_HIRAGANA", /* Hira */ |
|
87 "USCRIPT_KANNADA", /* Knda */ |
|
88 "USCRIPT_KATAKANA", /* Kana */ |
|
89 "USCRIPT_KHMER", /* Khmr */ |
|
90 "USCRIPT_LAO", /* Laoo */ |
|
91 "USCRIPT_LATIN", /* Latn (Latf, Latg) */ |
|
92 "USCRIPT_MALAYALAM", /* Mlym */ |
|
93 "USCRIPT_MONGOLIAN", /* Mong */ |
|
94 "USCRIPT_MYANMAR", /* Mymr */ |
|
95 "USCRIPT_OGHAM", /* Ogam */ |
|
96 "USCRIPT_OLD_ITALIC", /* Ital */ |
|
97 "USCRIPT_ORIYA", /* Orya */ |
|
98 "USCRIPT_RUNIC", /* Runr */ |
|
99 "USCRIPT_SINHALA", /* Sinh */ |
|
100 "USCRIPT_SYRIAC", /* Syrc (Syrj, Syrn, Syre) */ |
|
101 "USCRIPT_TAMIL", /* Taml */ |
|
102 "USCRIPT_TELUGU", /* Telu */ |
|
103 "USCRIPT_THAANA", /* Thaa */ |
|
104 "USCRIPT_THAI", /* Thai */ |
|
105 "USCRIPT_TIBETAN", /* Tibt */ |
|
106 "USCRIPT_UCAS", /* Cans */ |
|
107 "USCRIPT_YI", /* Yiii */ |
|
108 "USCRIPT_TAGALOG", /* Tglg */ |
|
109 "USCRIPT_HANUNOO", /* Hano */ |
|
110 "USCRIPT_BUHID", /* Buhd */ |
|
111 "USCRIPT_TAGBANWA" /* Tagb */ |
|
112 }; |
|
113 #endif |
|
114 |
|
115 LEUnicode devaText[] = |
|
116 { |
|
117 0x0936, 0x094d, 0x0930, 0x0940, 0x092e, 0x0926, 0x094d, 0x0020, |
|
118 0x092d, 0x0917, 0x0935, 0x0926, 0x094d, 0x0917, 0x0940, 0x0924, |
|
119 0x093e, 0x0020, 0x0905, 0x0927, 0x094d, 0x092f, 0x093e, 0x092f, |
|
120 0x0020, 0x0905, 0x0930, 0x094d, 0x091c, 0x0941, 0x0928, 0x0020, |
|
121 0x0935, 0x093f, 0x0937, 0x093e, 0x0926, 0x0020, 0x092f, 0x094b, |
|
122 0x0917, 0x0020, 0x0927, 0x0943, 0x0924, 0x0930, 0x093e, 0x0937, |
|
123 0x094d, 0x091f, 0x094d, 0x0930, 0x0020, 0x0909, 0x0935, 0x093E, |
|
124 0x091A, 0x0943, 0x0020, 0x0927, 0x0930, 0x094d, 0x092e, 0x0915, |
|
125 0x094d, 0x0937, 0x0947, 0x0924, 0x094d, 0x0930, 0x0947, 0x0020, |
|
126 0x0915, 0x0941, 0x0930, 0x0941, 0x0915, 0x094d, 0x0937, 0x0947, |
|
127 0x0924, 0x094d, 0x0930, 0x0947, 0x0020, 0x0938, 0x092e, 0x0935, |
|
128 0x0947, 0x0924, 0x093e, 0x0020, 0x092f, 0x0941, 0x092f, 0x0941, |
|
129 0x0924, 0x094d, 0x0938, 0x0935, 0x0903, 0x0020, 0x092e, 0x093e, |
|
130 0x092e, 0x0915, 0x093e, 0x0903, 0x0020, 0x092a, 0x093e, 0x0923, |
|
131 0x094d, 0x0921, 0x0935, 0x093e, 0x0936, 0x094d, 0x091a, 0x0948, |
|
132 0x0935, 0x0020, 0x0915, 0x093f, 0x092e, 0x0915, 0x0941, 0x0930, |
|
133 0x094d, 0x0935, 0x0924, 0x0020, 0x0938, 0x0902, 0x091c, 0x0935 |
|
134 }; |
|
135 |
|
136 le_int32 devaTextLength = ARRAY_LENGTH(devaText); |
|
137 |
|
138 LEUnicode arabText[] = |
|
139 { |
|
140 0x0623, 0x0633, 0x0627, 0x0633, 0x064B, 0x0627, 0x060C, 0x0020, |
|
141 0x062A, 0x062A, 0x0639, 0x0627, 0x0645, 0x0644, 0x0020, |
|
142 0x0627, 0x0644, 0x062D, 0x0648, 0x0627, 0x0633, 0x064A, 0x0628, |
|
143 0x0020, 0x0641, 0x0642, 0x0637, 0x0020, 0x0645, 0x0639, 0x0020, |
|
144 0x0627, 0x0644, 0x0623, 0x0631, 0x0642, 0x0627, 0x0645, 0x060C, |
|
145 0x0020, 0x0648, 0x062A, 0x0642, 0x0648, 0x0645, 0x0020, 0x0628, |
|
146 0x062A, 0x062E, 0x0632, 0x064A, 0x0646, 0x0020, 0x0627, 0x0644, |
|
147 0x0623, 0x062D, 0x0631, 0x0641, 0x0020, 0x0648, 0x0627, 0x0644, |
|
148 0x0645, 0x062D, 0x0627, 0x0631, 0x0641, 0x0020, 0x0627, 0x0644, |
|
149 0x0623, 0x062E, 0x0631, 0x0649, 0x0020, 0x0628, 0x0639, 0x062F, |
|
150 0x0020, 0x0623, 0x0646, 0x0020, 0x062A, 0x064F, 0x0639, 0x0637, |
|
151 0x064A, 0x0020, 0x0631, 0x0642, 0x0645, 0x0627, 0x0020, 0x0645, |
|
152 0x0639, 0x064A, 0x0646, 0x0627, 0x0020, 0x0644, 0x0643, 0x0644, |
|
153 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0020, 0x0645, 0x0646, |
|
154 0x0647, 0x0627, 0x002E, 0x0020, 0x0648, 0x0642, 0x0628, 0x0644, |
|
155 0x0020, 0x0627, 0x062E, 0x062A, 0x0631, 0x0627, 0x0639, 0x0020, |
|
156 0x0022, 0x064A, 0x0648, 0x0646, 0x0650, 0x0643, 0x0648, 0x062F, |
|
157 0x0022, 0x060C, 0x0020, 0x0643, 0x0627, 0x0646, 0x0020, 0x0647, |
|
158 0x0646, 0x0627, 0x0643, 0x0020, 0x0645, 0x0626, 0x0627, 0x062A, |
|
159 0x0020, 0x0627, 0x0644, 0x0623, 0x0646, 0x0638, 0x0645, 0x0629, |
|
160 0x0020, 0x0644, 0x0644, 0x062A, 0x0634, 0x0641, 0x064A, 0x0631, |
|
161 0x0020, 0x0648, 0x062A, 0x062E, 0x0635, 0x064A, 0x0635, 0x0020, |
|
162 0x0647, 0x0630, 0x0647, 0x0020, 0x0627, 0x0644, 0x0623, 0x0631, |
|
163 0x0642, 0x0627, 0x0645, 0x0020, 0x0644, 0x0644, 0x0645, 0x062D, |
|
164 0x0627, 0x0631, 0x0641, 0x060C, 0x0020, 0x0648, 0x0644, 0x0645, |
|
165 0x0020, 0x064A, 0x0648, 0x062C, 0x062F, 0x0020, 0x0646, 0x0638, |
|
166 0x0627, 0x0645, 0x0020, 0x062A, 0x0634, 0x0641, 0x064A, 0x0631, |
|
167 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0020, 0x064A, 0x062D, |
|
168 0x062A, 0x0648, 0x064A, 0x0020, 0x0639, 0x0644, 0x0649, 0x0020, |
|
169 0x062C, 0x0645, 0x064A, 0x0639, 0x0020, 0x0627, 0x0644, 0x0645, |
|
170 0x062D, 0x0627, 0x0631, 0x0641, 0x0020, 0x0627, 0x0644, 0x0636, |
|
171 0x0631, 0x0648, 0x0631, 0x064A, 0x0629 |
|
172 |
|
173 /* The next few sentences... |
|
174 0x002E, 0x0020, 0x0648, |
|
175 0x0639, 0x0644, 0x0649, 0x0020, 0x0633, 0x0628, 0x064A, 0x0644, |
|
176 0x0020, 0x0627, 0x0644, 0x0645, 0x062B, 0x0627, 0x0644, 0x060C, |
|
177 0x0020, 0x0641, 0x0625, 0x0646, 0x0020, 0x0627, 0x0644, 0x0627, |
|
178 0x062A, 0x062D, 0x0627, 0x062F, 0x0020, 0x0627, 0x0644, 0x0623, |
|
179 0x0648, 0x0631, 0x0648, 0x0628, 0x064A, 0x0020, 0x0644, 0x0648, |
|
180 0x062D, 0x062F, 0x0647, 0x060C, 0x0020, 0x0627, 0x062D, 0x062A, |
|
181 0x0648, 0x0649, 0x0020, 0x0627, 0x0644, 0x0639, 0x062F, 0x064A, |
|
182 0x062F, 0x0020, 0x0645, 0x0646, 0x0020, 0x0627, 0x0644, 0x0634, |
|
183 0x0641, 0x0631, 0x0627, 0x062A, 0x0020, 0x0627, 0x0644, 0x0645, |
|
184 0x062E, 0x062A, 0x0644, 0x0641, 0x0629, 0x0020, 0x0644, 0x064A, |
|
185 0x063A, 0x0637, 0x064A, 0x0020, 0x062C, 0x0645, 0x064A, 0x0639, |
|
186 0x0020, 0x0627, 0x0644, 0x0644, 0x063A, 0x0627, 0x062A, 0x0020, |
|
187 0x0627, 0x0644, 0x0645, 0x0633, 0x062A, 0x062E, 0x062F, 0x0645, |
|
188 0x0629, 0x0020, 0x0641, 0x064A, 0x0020, 0x0627, 0x0644, 0x0627, |
|
189 0x062A, 0x062D, 0x0627, 0x062F, 0x002E, 0x0020, 0x0648, 0x062D, |
|
190 0x062A, 0x0649, 0x0020, 0x0644, 0x0648, 0x0020, 0x0627, 0x0639, |
|
191 0x062A, 0x0628, 0x0631, 0x0646, 0x0627, 0x0020, 0x0644, 0x063A, |
|
192 0x0629, 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0629, 0x060C, |
|
193 0x0020, 0x0643, 0x0627, 0x0644, 0x0644, 0x063A, 0x0629, 0x0020, |
|
194 0x0627, 0x0644, 0x0625, 0x0646, 0x062C, 0x0644, 0x064A, 0x0632, |
|
195 0x064A, 0x0629, 0x060C, 0x0020, 0x0641, 0x0625, 0x0646, 0x0020, |
|
196 0x062C, 0x062F, 0x0648, 0x0644, 0x0020, 0x0634, 0x0641, 0x0631, |
|
197 0x0629, 0x0020, 0x0648, 0x0627, 0x062D, 0x062F, 0x0020, 0x0644, |
|
198 0x0645, 0x0020, 0x064A, 0x0643, 0x0641, 0x0020, 0x0644, 0x0627, |
|
199 0x0633, 0x062A, 0x064A, 0x0639, 0x0627, 0x0628, 0x0020, 0x062C, |
|
200 0x0645, 0x064A, 0x0639, 0x0020, 0x0627, 0x0644, 0x0623, 0x062D, |
|
201 0x0631, 0x0641, 0x0020, 0x0648, 0x0639, 0x0644, 0x0627, 0x0645, |
|
202 0x0627, 0x062A, 0x0020, 0x0627, 0x0644, 0x062A, 0x0631, 0x0642, |
|
203 0x064A, 0x0645, 0x0020, 0x0648, 0x0627, 0x0644, 0x0631, 0x0645, |
|
204 0x0648, 0x0632, 0x0020, 0x0627, 0x0644, 0x0641, 0x0646, 0x064A, |
|
205 0x0629, 0x0020, 0x0648, 0x0627, 0x0644, 0x0639, 0x0644, 0x0645, |
|
206 0x064A, 0x0629, 0x0020, 0x0627, 0x0644, 0x0634, 0x0627, 0x0626, |
|
207 0x0639, 0x0629, 0x0020, 0x0627, 0x0644, 0x0627, 0x0633, 0x062A, |
|
208 0x0639, 0x0645, 0x0627, 0x0644, 0x002E */ |
|
209 }; |
|
210 le_int32 arabTextLength = ARRAY_LENGTH(arabText); |
|
211 |
|
212 |
|
213 LEUnicode thaiSample[] = |
|
214 { |
|
215 0x0E1A, 0x0E17, 0x0E17, 0x0E35, 0x0E48, 0x0E51, 0x0E1E, 0x0E32, |
|
216 0x0E22, 0x0E38, 0x0E44, 0x0E0B, 0x0E42, 0x0E04, 0x0E25, 0x0E19, |
|
217 0x0E42, 0x0E14, 0x0E42, 0x0E23, 0x0E18, 0x0E35, 0x0E2D, 0x0E32, |
|
218 0x0E28, 0x0E31, 0x0E22, 0x0E2D, 0x0E22, 0x0E39, 0x0E48, 0x0E17, |
|
219 0x0E48, 0x0E32, 0x0E21, 0x0E01, 0x0E25, 0x0E32, 0x0E07, 0x0E17, |
|
220 0x0E38, 0x0E48, 0x0E07, 0x0E43, 0x0E2B, 0x0E0D, 0x0E48, 0x0E43, |
|
221 0x0E19, 0x0E41, 0x0E04, 0x0E19, 0x0E0B, 0x0E31, 0x0E2A, 0x0E01, |
|
222 0x0E31, 0x0E1A, 0x0E25, 0x0E38, 0x0E07, 0x0E40, 0x0E2E, 0x0E19, |
|
223 0x0E23, 0x0E35, 0x0E0A, 0x0E32, 0x0E27, 0x0E44, 0x0E23, 0x0E48, |
|
224 0x0E41, 0x0E25, 0x0E30, 0x0E1B, 0x0E49, 0x0E32, 0x0E40, 0x0E2D, |
|
225 0x0E47, 0x0E21, 0x0E20, 0x0E23, 0x0E23, 0x0E22, 0x0E32, 0x0E0A, |
|
226 0x0E32, 0x0E27, 0x0E44, 0x0E23, 0x0E48, 0x0E1A, 0x0E49, 0x0E32, |
|
227 0x0E19, 0x0E02, 0x0E2D, 0x0E07, 0x0E1E, 0x0E27, 0x0E01, 0x0E40, |
|
228 0x0E02, 0x0E32, 0x0E2B, 0x0E25, 0x0E31, 0x0E07, 0x0E40, 0x0E25, |
|
229 0x0E47, 0x0E01, 0x0E40, 0x0E1E, 0x0E23, 0x0E32, 0x0E30, 0x0E44, |
|
230 0x0E21, 0x0E49, 0x0E2A, 0x0E23, 0x0E49, 0x0E32, 0x0E07, 0x0E1A, |
|
231 0x0E49, 0x0E32, 0x0E19, 0x0E15, 0x0E49, 0x0E2D, 0x0E07, 0x0E02, |
|
232 0x0E19, 0x0E21, 0x0E32, 0x0E14, 0x0E49, 0x0E27, 0x0E22, 0x0E40, |
|
233 0x0E01, 0x0E27, 0x0E35, 0x0E22, 0x0E19, 0x0E40, 0x0E1B, 0x0E47, |
|
234 0x0E19, 0x0E23, 0x0E30, 0x0E22, 0x0E30, 0x0E17, 0x0E32, 0x0E07, |
|
235 0x0E2B, 0x0E25, 0x0E32, 0x0E22, 0x0E44, 0x0E21, 0x0E25, 0x0E4C |
|
236 /* A few more lines... |
|
237 0x0E1A, 0x0E49, 0x0E32, 0x0E19, 0x0E21, 0x0E35, 0x0E2A, 0x0E35, |
|
238 0x0E48, 0x0E1D, 0x0E32, 0x0E21, 0x0E35, 0x0E1E, 0x0E37, 0x0E49, |
|
239 0x0E19, 0x0E01, 0x0E31, 0x0E1A, 0x0E2B, 0x0E25, 0x0E31, 0x0E07, |
|
240 0x0E04, 0x0E32, 0x0E23, 0x0E27, 0x0E21, 0x0E17, 0x0E33, 0x0E40, |
|
241 0x0E1B, 0x0E47, 0x0E19, 0x0E2B, 0x0E49, 0x0E2D, 0x0E07, 0x0E40, |
|
242 0x0E14, 0x0E35, 0x0E22, 0x0E27, 0x0E43, 0x0E19, 0x0E2B, 0x0E49, |
|
243 0x0E2D, 0x0E07, 0x0E21, 0x0E35, 0x0E17, 0x0E31, 0x0E49, 0x0E07, |
|
244 0x0E40, 0x0E15, 0x0E32, 0x0E2B, 0x0E38, 0x0E07, 0x0E15, 0x0E49, |
|
245 0x0E21, 0x0E17, 0x0E35, 0x0E48, 0x0E2A, 0x0E19, 0x0E34, 0x0E21, |
|
246 0x0E14, 0x0E39, 0x0E02, 0x0E36, 0x0E49, 0x0E19, 0x0E40, 0x0E25, |
|
247 0x0E2D, 0x0E30, 0x0E21, 0x0E35, 0x0E15, 0x0E39, 0x0E49, 0x0E43, |
|
248 0x0E2A, 0x0E48, 0x0E16, 0x0E49, 0x0E27, 0x0E22, 0x0E0A, 0x0E32, |
|
249 0x0E21, 0x0E42, 0x0E15, 0x0E4A, 0x0E30, 0x0E40, 0x0E01, 0x0E49, |
|
250 0x0E32, 0x0E2D, 0x0E35, 0x0E49, 0x0E2A, 0x0E32, 0x0E21, 0x0E2B, |
|
251 0x0E23 |
|
252 */ |
|
253 }; |
|
254 |
|
255 le_int32 thaiSampleLength = ARRAY_LENGTH(thaiSample); |
|
256 |
|
257 TestInput testInputs[] = { |
|
258 {"raghu.ttf", devaText, devaTextLength, devaScriptCode, FALSE}, |
|
259 {"CODE2000.TTF", arabText, arabTextLength, arabScriptCode, TRUE}, |
|
260 {"LucidaSansRegular.ttf", arabText, arabTextLength, arabScriptCode, TRUE}, |
|
261 {"Thonburi.ttf", thaiSample, thaiSampleLength, thaiScriptCode, FALSE} |
|
262 }; |
|
263 |
|
264 #define TEST_COUNT ARRAY_LENGTH(testInputs) |
|
265 |
|
266 le_int32 testCount = TEST_COUNT; |
|
267 |
|
268 void dumpShorts(FILE *file, char *label, le_int32 id, le_uint16 *shorts, le_int32 count) { |
|
269 char lineBuffer[8 * 8 + 2]; |
|
270 le_int32 bufp = 0; |
|
271 |
|
272 fprintf(file, label, id); |
|
273 |
|
274 for (int i = 0; i < count; i += 1) { |
|
275 if (i % 8 == 0 && bufp != 0) { |
|
276 fprintf(file, " %s\n", lineBuffer); |
|
277 bufp = 0; |
|
278 } |
|
279 |
|
280 bufp += sprintf(&lineBuffer[bufp], "0x%4.4X, ", shorts[i]); |
|
281 } |
|
282 |
|
283 if (bufp != 0) { |
|
284 lineBuffer[bufp - 2] = '\0'; |
|
285 fprintf(file, " %s\n", lineBuffer); |
|
286 } |
|
287 |
|
288 fprintf(file, "};\n\n"); |
|
289 } |
|
290 |
|
291 void dumpLongs(FILE *file, char *label, le_int32 id, le_int32 *longs, le_int32 count) { |
|
292 char lineBuffer[8 * 12 + 2]; |
|
293 le_int32 bufp = 0; |
|
294 |
|
295 fprintf(file, label, id); |
|
296 |
|
297 for (int i = 0; i < count; i += 1) { |
|
298 if (i % 8 == 0 && bufp != 0) { |
|
299 fprintf(file, " %s\n", lineBuffer); |
|
300 bufp = 0; |
|
301 } |
|
302 |
|
303 bufp += sprintf(&lineBuffer[bufp], "0x%8.8X, ", longs[i]); |
|
304 } |
|
305 |
|
306 if (bufp != 0) { |
|
307 lineBuffer[bufp - 2] = '\0'; |
|
308 fprintf(file, " %s\n", lineBuffer); |
|
309 } |
|
310 |
|
311 fprintf(file, "};\n\n"); |
|
312 } |
|
313 |
|
314 void dumpFloats(FILE *file, char *label, le_int32 id, float *floats, le_int32 count) { |
|
315 char lineBuffer[8 * 16 + 2]; |
|
316 le_int32 bufp = 0; |
|
317 |
|
318 fprintf(file, label, id); |
|
319 |
|
320 for (int i = 0; i < count; i += 1) { |
|
321 if (i % 8 == 0 && bufp != 0) { |
|
322 fprintf(file, " %s\n", lineBuffer); |
|
323 bufp = 0; |
|
324 } |
|
325 |
|
326 bufp += sprintf(&lineBuffer[bufp], "%fF, ", floats[i]); |
|
327 } |
|
328 |
|
329 if (bufp != 0) { |
|
330 lineBuffer[bufp - 2] = '\0'; |
|
331 fprintf(file, " %s\n", lineBuffer); |
|
332 } |
|
333 |
|
334 fprintf(file, "};\n\n"); |
|
335 } |
|
336 |
|
337 const char *getShortName(le_int32 scriptCode) |
|
338 { |
|
339 static char shortName[5]; |
|
340 const char *name = uscript_getShortName((UScriptCode) scriptCode); |
|
341 |
|
342 shortName[0] = tolower(name[0]); |
|
343 shortName[1] = tolower(name[1]); |
|
344 shortName[2] = tolower(name[2]); |
|
345 shortName[3] = tolower(name[3]); |
|
346 shortName[4] = '\0'; |
|
347 |
|
348 return shortName; |
|
349 } |
|
350 |
|
351 int main(int argc, char *argv[]) |
|
352 { |
|
353 le_int32 test; |
|
354 FILE *outputFile = fopen(argv[1], "w"); |
|
355 |
|
356 fprintf(outputFile, header); |
|
357 |
|
358 for (test = 0; test < testCount; test += 1) { |
|
359 LEErrorCode fontStatus = LE_NO_ERROR; |
|
360 PortableFontInstance fontInstance(testInputs[test].fontName, 12, fontStatus); |
|
361 |
|
362 if (LE_FAILURE(fontStatus)) { |
|
363 printf("ERROR: test case %d, could not get a font instance for %s\n", test, testInputs[test].fontName); |
|
364 continue; |
|
365 } |
|
366 |
|
367 LEErrorCode success = LE_NO_ERROR; |
|
368 LayoutEngine *engine = LayoutEngine::layoutEngineFactory(&fontInstance, testInputs[test].scriptCode, -1, success); |
|
369 le_uint32 glyphCount; |
|
370 LEGlyphID *glyphs; |
|
371 le_int32 *indices; |
|
372 float *positions; |
|
373 |
|
374 if (LE_FAILURE(success)) { |
|
375 printf("ERROR: test case %d, could not create a LayoutEngine for script %s.\n", test, uscript_getName((UScriptCode) testInputs[test].scriptCode)); |
|
376 continue; |
|
377 } |
|
378 |
|
379 glyphCount = engine->layoutChars(testInputs[test].text, 0, testInputs[test].textLength, testInputs[test].textLength, testInputs[test].rightToLeft, 0, 0, success); |
|
380 |
|
381 glyphs = new LEGlyphID[glyphCount]; |
|
382 indices = new le_int32[glyphCount]; |
|
383 positions = new float[glyphCount * 2 + 2]; |
|
384 |
|
385 engine->getGlyphs(glyphs, success); |
|
386 engine->getCharIndices(indices, success); |
|
387 engine->getGlyphPositions(positions, success); |
|
388 |
|
389 //fprintf(outputFile, "font: %s\n", testInputs[test].fontName); |
|
390 dumpShorts(outputFile, "LEUnicode inputText%d[] =\n{\n", test, testInputs[test].text, testInputs[test].textLength); |
|
391 |
|
392 dumpLongs(outputFile, "LEGlyphID resultGlyphs%d[] =\n{\n", test, (le_int32 *) glyphs, glyphCount); |
|
393 fprintf(outputFile, "le_int32 resultGlyphCount%d = %d;\n\n", test, glyphCount); |
|
394 |
|
395 dumpLongs(outputFile, "le_int32 resultIndices%d[] =\n{\n", test, indices, glyphCount); |
|
396 |
|
397 dumpFloats(outputFile, "float resultPositions%d[] =\n{\n", test, positions, glyphCount * 2 + 2); |
|
398 |
|
399 fprintf(outputFile, "\n"); |
|
400 |
|
401 delete[] positions; |
|
402 delete[] indices; |
|
403 delete[] glyphs; |
|
404 delete engine; |
|
405 } |
|
406 |
|
407 fprintf(outputFile, "TestInput testInputs[] = \n{\n"); |
|
408 |
|
409 for (test = 0; test < testCount; test += 1) { |
|
410 fprintf(outputFile, " {\"%s\", inputText%d, %d, %sScriptCode, %s},\n", |
|
411 testInputs[test].fontName, test, testInputs[test].textLength, getShortName(testInputs[test].scriptCode), |
|
412 testInputs[test].rightToLeft? "TRUE" : "FALSE"); |
|
413 } |
|
414 |
|
415 fprintf(outputFile, "};\n\nle_int32 testCount = ARRAY_LENGTH(testInputs);\n\n"); |
|
416 |
|
417 fprintf(outputFile, "TestResult testResults[] = \n{\n"); |
|
418 |
|
419 for (test = 0; test < testCount; test += 1) { |
|
420 fprintf(outputFile, " {resultGlyphCount%d, resultGlyphs%d, resultIndices%d, resultPositions%d},\n", |
|
421 test, test, test, test); |
|
422 } |
|
423 |
|
424 fprintf(outputFile, "};\n\n"); |
|
425 |
|
426 fclose(outputFile); |
|
427 return 0; |
|
428 } |