72 {
73 std::u16string
text = u
"\U000f2008";
78 client->computeCodeUnitFlags(
utf8.data(),
utf8.size(),
false, &results);
79
80 for (
auto flag : results) {
82 }
83}
84#endif
85
86#if defined(SK_UNICODE_ICU_IMPLEMENTATION)
89 if (!icu) {
91 return;
92 }
93 std::u16string
text = u
"\U000f2008";
96 icu->computeCodeUnitFlags(
utf8.data(),
utf8.size(),
false, &results);
97 for (
auto flag : results) {
99 }
100}
101#endif
102
103#if defined(SK_UNICODE_LIBGRAPHEME_IMPLEMENTATION)
106 std::vector<SkUnicode::Position> expected = { 0, 1, 2, 4, 5, 8, 9, 13, 14, 19, 20, 26, 27, 34 };
108 std::vector<SkUnicode::Position> results;
109 auto result = libgrapheme->getUtf8Words(
text.data(),
text.size(),
"en", &results);
112 for (auto i = 0ul; i < results.size(); ++i) {
114 }
115}
116#endif
117
118#if defined(SK_UNICODE_ICU_IMPLEMENTATION)
121 if (!icu) {
123 return;
124 }
125 SkString text(
"Hello world! Hello world? Hello world... Not a sentence end: 3.1415926");
126 std::vector<SkUnicode::Position> expected = {0, 13, 26, 41, 70};
127 std::vector<SkUnicode::Position> results;
128 auto result = icu->getSentences(
text.data(),
text.size(),
nullptr, &results);
131 for (auto i = 0ul; i < results.size(); ++i) {
133 }
134}
135#endif
136
139}
140
141
143 if (!unicode) {
144 return;
145 }
147 std::vector<SkUnicode::BidiRegion> results;
151 &results);
155 results[0].
end ==
text.size() &&
156 results[0].level == 0);
157}
158
160 if (!unicode) {
161 return;
162 }
163 SkString text(
"الهيمنة على العالم عبارة قبيحة ، أفضل أن أسميها تحسين العالم.");
164 std::vector<SkUnicode::BidiRegion> results;
168 &results);
172 results[0].
end ==
text.size() &&
173 results[0].level == 1);
174}
175
177 if (!unicode) {
178 return;
179 }
180
182 std::vector<SkUnicode::BidiRegion> expected = {
183 {0, 1, 2},
184 {1, 2, 1},
185 {2, 4, 2},
186 {4, 5, 1},
187 {5, 8, 2},
188 {8, 9, 1},
189 {9, 13, 2},
190 {13, 14, 1},
191 {14, 19, 2},
192 {19, 20, 1},
193 {20, 26, 2},
194 {26, 27, 1},
195 {27, 34, 2},
196 };
197 std::vector<SkUnicode::BidiRegion> results;
201 &results);
204 for (auto i = 0ul; i < results.size(); ++i) {
206 results[i].
end == expected[i].
end &&
207 results[i].level == expected[i].level);
208 }
209}
210
212 if (!unicode) {
213 return;
214 }
215
216 SkString text(
"World ЛТР Domination هي عبارة قبيحة ، أفضل أن أسميها World ЛТР Optimization.");
217 std::vector<SkUnicode::BidiRegion> expected = {
218 { 0, 24, 0},
219 { 24, 80, 1},
220 { 80, 107, 0},
221 };
222 std::vector<SkUnicode::BidiRegion> results;
226 &results);
229 for (auto i = 0ul; i < results.size(); ++i) {
231 results[i].
end == expected[i].
end &&
232 results[i].level == expected[i].level);
233 }
234}
235
236
237
239 if (!unicode) {
240 return;
241 }
243 SkString upper(
"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
244 auto icu_result1 =
unicode->toUpper(lower);
246 auto icu_result2 =
unicode->toUpper(upper);
248}
249
251 if (!unicode) {
252 return;
253 }
254
256
260 true,
261 &results);
264 for (
auto i = 0; i < results.
size(); ++i) {
265 auto flags = results[i];
267 if (i == 1) {
269 }
270 if (i == 2) {
272 }
273 if (i == 1 || i == 4 || i == 8 || i == 13 || i == 19 || i == 26) {
276 }
277 if (i == 0 || i == 2 || i == 5 || i == 9 || i == 14 || i == 20
278 || i == 27 || i == 34) {
280 }
282 }
283}
284
286 if (!unicode) {
287 return;
288 }
289 auto reorder = [&](std::vector<SkUnicode::BidiLevel> levels,
290 std::vector<int32_t> expected) {
291 std::vector<int32_t> logicalOrder(levels.size());
292 unicode->reorderVisual(levels.data(), levels.size(), logicalOrder.data());
293 for (auto i = 0ul; i < levels.size(); ++i) {
295 }
296 };
297 reorder({}, {});
298 reorder({0}, {0});
299 reorder({1}, {0});
300 reorder({0, 1, 0, 1}, {0, 1, 2, 3});
301}
302
304 std::u32string emojis(U"😄😁😆😅😂🤣");
305 std::u32string not_emojis(U"満毎行昼本可");
306 for (auto e : emojis) {
308 }
309 for (auto n: not_emojis) {
311 }
312}
313
314#ifdef SK_UNICODE_ICU_IMPLEMENTATION
317 if (!icu) {
319 return;
320 }
322}
323#endif
324
325#ifdef SK_UNICODE_ICU4X_IMPLEMENTATION
328 if (!icu) {
330 return;
331 }
333}
334#endif
335
337 std::u32string ideographic(U"満毎行昼本可");
338 std::u32string not_ideographic(U"😄😁😆😅😂🤣");
339 for (auto i : ideographic) {
341 }
342 for (auto n: not_ideographic) {
344 }
345}
346
347#ifdef SK_UNICODE_ICU_IMPLEMENTATION
350 if (!icu) {
352 return;
353 }
355}
356#endif
357
358#ifdef SK_UNICODE_ICU4X_IMPLEMENTATION
361 if (!icu) {
363 return;
364 }
366}
367#endif
constexpr int16_t SkToS16(S x)
#define DEF_TEST_ICU_UNICODES(name, reporter)
static void SkUnicode_Emoji(SkUnicode *icu, skiatest::Reporter *reporter)
static void SkUnicode_Ideographic(SkUnicode *icu, skiatest::Reporter *reporter)
bool hasWordFlag(SkUnicode::CodeUnitFlags flags)
#define DEF_TEST_UNICODES(name, reporter)
#define REPORTER_ASSERT(r, cond,...)
virtual bool isIdeographic(SkUnichar utf8)=0
static bool hasPartOfWhiteSpaceBreakFlag(SkUnicode::CodeUnitFlags flags)
static SkString convertUtf16ToUtf8(const char16_t *utf16, int utf16Units)
virtual bool isEmoji(SkUnichar utf8)=0
FlutterSemanticsFlag flag
FlutterSemanticsFlag flags
SKUNICODE_API sk_sp< SkUnicode > Make(SkSpan< char > text, std::vector< SkUnicode::Position > words, std::vector< SkUnicode::Position > graphemeBreaks, std::vector< SkUnicode::LineBreakBefore > lineBreaks)
SKUNICODE_API sk_sp< SkUnicode > Make()
SKUNICODE_API sk_sp< SkUnicode > Make()
SKUNICODE_API sk_sp< SkUnicode > Make()