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