1 /* 2 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 // Tests for the Font class. 27 28 #include "config.h" 29 30 #include "core/platform/graphics/Font.h" 31 32 #include <gtest/gtest.h> 33 34 namespace WebCore { 35 36 static void TestSpecificUCharRange(UChar rangeStart, UChar rangeEnd) 37 { 38 UChar below[1]; 39 UChar start[1]; 40 UChar midway[1]; 41 UChar end[1]; 42 UChar above[1]; 43 44 below[0] = rangeStart - 1; 45 start[0] = rangeStart; 46 midway[0] = ((int)rangeStart + (int)rangeEnd) / 2; 47 end[0] = rangeEnd; 48 above[0] = rangeEnd + 1; 49 50 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(below, 1)); 51 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(start, 1)); 52 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(midway, 1)); 53 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(end, 1)); 54 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(above, 1)); 55 } 56 57 TEST(FontTest, TestCharacterRangeCodePath) 58 { 59 static UChar c1[] = { 0x0 }; 60 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c1, 1)); 61 62 TestSpecificUCharRange(0x2E5, 0x2E9); 63 TestSpecificUCharRange(0x300, 0x36F); 64 TestSpecificUCharRange(0x0591, 0x05BD); 65 TestSpecificUCharRange(0x05BF, 0x05CF); 66 TestSpecificUCharRange(0x0600, 0x109F); 67 TestSpecificUCharRange(0x1100, 0x11FF); 68 TestSpecificUCharRange(0x135D, 0x135F); 69 TestSpecificUCharRange(0x1700, 0x18AF); 70 TestSpecificUCharRange(0x1900, 0x194F); 71 TestSpecificUCharRange(0x1980, 0x19DF); 72 TestSpecificUCharRange(0x1A00, 0x1CFF); 73 74 static UChar c2[] = { 0x1DBF }; 75 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c2, 1)); 76 static UChar c3[] = { 0x1DC0 }; 77 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c3, 1)); 78 static UChar c4[] = { 0x1DD0 }; 79 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c4, 1)); 80 static UChar c5[] = { 0x1DFF }; 81 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c5, 1)); 82 static UChar c6[] = { 0x1E00 }; 83 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c6, 1)); 84 static UChar c7[] = { 0x2000 }; 85 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c7, 1)); 86 static UChar c8[] = { 0x2001 }; 87 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c8, 1)); 88 89 TestSpecificUCharRange(0x20D0, 0x20FF); 90 TestSpecificUCharRange(0x2CEF, 0x2CF1); 91 TestSpecificUCharRange(0x302A, 0x302F); 92 93 TestSpecificUCharRange(0xA67C, 0xA67D); 94 TestSpecificUCharRange(0xA6F0, 0xA6F1); 95 TestSpecificUCharRange(0xA800, 0xABFF); 96 97 TestSpecificUCharRange(0xD7B0, 0xD7FF); 98 TestSpecificUCharRange(0xFE00, 0xFE0F); 99 TestSpecificUCharRange(0xFE20, 0xFE2F); 100 } 101 102 TEST(FontTest, TestCharacterRangeCodePathSurrogate1) 103 { 104 /* To be surrogate ... */ 105 /* 1st character must be 0xD800 .. 0xDBFF */ 106 /* 2nd character must be 0xdc00 .. 0xdfff */ 107 108 /* The following 5 should all be Simple because they are not surrogate. */ 109 static UChar c1[] = { 0xD800, 0xDBFE }; 110 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c1, 2)); 111 static UChar c2[] = { 0xD800, 0xE000 }; 112 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c2, 2)); 113 static UChar c3[] = { 0xDBFF, 0xDBFE }; 114 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c3, 2)); 115 static UChar c4[] = { 0xDBFF, 0xE000 }; 116 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c4, 2)); 117 static UChar c5[] = { 0xDC00, 0xDBFF }; 118 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c5, 2)); 119 120 /* To be Complex, the Supplementary Character must be in either */ 121 /* U+1F1E6 through U+1F1FF or U+E0100 through U+E01EF. */ 122 /* That is, a lead of 0xD83C with trail 0xDDE6 .. 0xDDFF or */ 123 /* a lead of 0xDB40 with trail 0xDD00 .. 0xDDEF. */ 124 static UChar c6[] = { 0xD83C, 0xDDE5 }; 125 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c6, 2)); 126 static UChar c7[] = { 0xD83C, 0xDDE6 }; 127 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c7, 2)); 128 static UChar c8[] = { 0xD83C, 0xDDF0 }; 129 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c8, 2)); 130 static UChar c9[] = { 0xD83C, 0xDDFF }; 131 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c9, 2)); 132 static UChar c10[] = { 0xD83C, 0xDE00 }; 133 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c10, 2)); 134 135 static UChar c11[] = { 0xDB40, 0xDCFF }; 136 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c11, 2)); 137 static UChar c12[] = { 0xDB40, 0xDD00 }; 138 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c12, 2)); 139 static UChar c13[] = { 0xDB40, 0xDDED }; 140 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c13, 2)); 141 static UChar c14[] = { 0xDB40, 0xDDEF }; 142 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c14, 2)); 143 static UChar c15[] = { 0xDB40, 0xDDF0 }; 144 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c15, 2)); 145 } 146 147 TEST(FontTest, TestCharacterRangeCodePathString) 148 { 149 // Simple-Simple is still simple 150 static UChar c1[] = { 0x2FF, 0x2FF }; 151 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c1, 2)); 152 // Complex-Simple is Complex 153 static UChar c2[] = { 0x300, 0x2FF }; 154 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c2, 2)); 155 // Simple-Complex is Complex 156 static UChar c3[] = { 0x2FF, 0x330 }; 157 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c3, 2)); 158 // Complex-Complex is Complex 159 static UChar c4[] = { 0x36F, 0x330 }; 160 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c4, 2)); 161 // SimpleWithGlyphOverflow-Simple is SimpleWithGlyphOverflow 162 static UChar c5[] = { 0x1E00, 0x2FF }; 163 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c5, 2)); 164 // Simple-SimpleWithGlyphOverflow is SimpleWithGlyphOverflow 165 static UChar c6[] = { 0x2FF, 0x2000 }; 166 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c6, 2)); 167 // SimpleWithGlyphOverflow-Complex is Complex 168 static UChar c7[] = { 0x1E00, 0x330 }; 169 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c7, 2)); 170 // Complex-SimpleWithGlyphOverflow is Complex 171 static UChar c8[] = { 0x330, 0x2000 }; 172 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c8, 2)); 173 // Surrogate-Complex is Complex 174 static UChar c9[] = { 0xD83C, 0xDDE5, 0x330 }; 175 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c9, 3)); 176 // Complex-Surrogate is Complex 177 static UChar c10[] = { 0x330, 0xD83C, 0xDDE5 }; 178 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c10, 3)); 179 } 180 181 static void TestSpecificUChar32RangeIdeograph(UChar32 rangeStart, UChar32 rangeEnd) 182 { 183 EXPECT_FALSE(Font::isCJKIdeograph(rangeStart - 1)); 184 EXPECT_TRUE(Font::isCJKIdeograph(rangeStart)); 185 EXPECT_TRUE(Font::isCJKIdeograph((UChar32)((uint64_t)rangeStart + (uint64_t)rangeEnd) / 2)); 186 EXPECT_TRUE(Font::isCJKIdeograph(rangeEnd)); 187 EXPECT_FALSE(Font::isCJKIdeograph(rangeEnd + 1)); 188 } 189 190 TEST(FontTest, TestIsCJKIdeograph) 191 { 192 // The basic CJK Unified Ideographs block. 193 TestSpecificUChar32RangeIdeograph(0x4E00, 0x9FFF); 194 // CJK Unified Ideographs Extension A. 195 TestSpecificUChar32RangeIdeograph(0x3400, 0x4DBF); 196 // CJK Unified Ideographs Extension A and Kangxi Radicals. 197 TestSpecificUChar32RangeIdeograph(0x2E80, 0x2FDF); 198 // CJK Strokes. 199 TestSpecificUChar32RangeIdeograph(0x31C0, 0x31EF); 200 // CJK Compatibility Ideographs. 201 TestSpecificUChar32RangeIdeograph(0xF900, 0xFAFF); 202 // CJK Unified Ideographs Extension B. 203 TestSpecificUChar32RangeIdeograph(0x20000, 0x2A6DF); 204 // CJK Unified Ideographs Extension C. 205 // CJK Unified Ideographs Extension D. 206 TestSpecificUChar32RangeIdeograph(0x2A700, 0x2B81F); 207 // CJK Compatibility Ideographs Supplement. 208 TestSpecificUChar32RangeIdeograph(0x2F800, 0x2FA1F); 209 } 210 211 static void TestSpecificUChar32RangeIdeographSymbol(UChar32 rangeStart, UChar32 rangeEnd) 212 { 213 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(rangeStart - 1)); 214 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(rangeStart)); 215 EXPECT_TRUE(Font::isCJKIdeographOrSymbol((UChar32)((uint64_t)rangeStart + (uint64_t)rangeEnd) / 2)); 216 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(rangeEnd)); 217 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(rangeEnd + 1)); 218 } 219 220 TEST(FontTest, TestIsCJKIdeographOrSymbol) 221 { 222 // CJK Compatibility Ideographs Supplement. 223 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2C7)); 224 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2CA)); 225 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2CB)); 226 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2D9)); 227 228 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2020)); 229 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2021)); 230 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2030)); 231 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x203B)); 232 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x203C)); 233 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2042)); 234 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2047)); 235 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2048)); 236 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2049)); 237 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2051)); 238 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x20DD)); 239 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x20DE)); 240 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2100)); 241 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2103)); 242 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2105)); 243 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2109)); 244 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x210A)); 245 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2113)); 246 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2116)); 247 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2121)); 248 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x212B)); 249 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x213B)); 250 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2150)); 251 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2151)); 252 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2152)); 253 254 TestSpecificUChar32RangeIdeographSymbol(0x2156, 0x215A); 255 TestSpecificUChar32RangeIdeographSymbol(0x2160, 0x216B); 256 TestSpecificUChar32RangeIdeographSymbol(0x2170, 0x217B); 257 258 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x217F)); 259 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2189)); 260 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2307)); 261 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2312)); 262 263 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0x23BD)); 264 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x23BE)); 265 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x23C4)); 266 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x23CC)); 267 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0x23CD)); 268 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x23CE)); 269 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2423)); 270 271 TestSpecificUChar32RangeIdeographSymbol(0x2460, 0x2492); 272 TestSpecificUChar32RangeIdeographSymbol(0x249C, 0x24FF); 273 274 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25A0)); 275 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25A1)); 276 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25A2)); 277 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25AA)); 278 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25AB)); 279 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25B1)); 280 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25B2)); 281 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25B3)); 282 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25B6)); 283 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25B7)); 284 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25BC)); 285 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25BD)); 286 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25C0)); 287 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25C1)); 288 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25C6)); 289 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25C7)); 290 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25C9)); 291 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25CB)); 292 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25CC)); 293 294 TestSpecificUChar32RangeIdeographSymbol(0x25CE, 0x25D3); 295 TestSpecificUChar32RangeIdeographSymbol(0x25E2, 0x25E6); 296 297 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x25EF)); 298 299 TestSpecificUChar32RangeIdeographSymbol(0x2600, 0x2603); 300 301 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2605)); 302 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2606)); 303 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x260E)); 304 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2616)); 305 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2617)); 306 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2640)); 307 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2642)); 308 309 TestSpecificUChar32RangeIdeographSymbol(0x2660, 0x266F); 310 TestSpecificUChar32RangeIdeographSymbol(0x2672, 0x267D); 311 312 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x26A0)); 313 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x26BD)); 314 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x26BE)); 315 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2713)); 316 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x271A)); 317 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x273F)); 318 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2740)); 319 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2756)); 320 321 TestSpecificUChar32RangeIdeographSymbol(0x2776, 0x277F); 322 323 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x2B1A)); 324 325 TestSpecificUChar32RangeIdeographSymbol(0x2FF0, 0x302F); 326 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x3031)); 327 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x312F)); 328 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0x3130)); 329 330 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0x318F)); 331 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x3190)); 332 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x319F)); 333 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x31BF)); 334 335 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0x31FF)); 336 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x3200)); 337 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x3300)); 338 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x33FF)); 339 340 TestSpecificUChar32RangeIdeographSymbol(0xF860, 0xF862); 341 TestSpecificUChar32RangeIdeographSymbol(0xFE30, 0xFE4F); 342 343 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0xFE10)); 344 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0xFE11)); 345 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0xFE12)); 346 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0xFE19)); 347 348 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0xFF0D)); 349 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0xFF1B)); 350 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0xFF1C)); 351 EXPECT_FALSE(Font::isCJKIdeographOrSymbol(0xFF1E)); 352 353 TestSpecificUChar32RangeIdeographSymbol(0xFF00, 0xFFEF); 354 355 EXPECT_TRUE(Font::isCJKIdeographOrSymbol(0x1F100)); 356 357 TestSpecificUChar32RangeIdeographSymbol(0x1F110, 0x1F129); 358 TestSpecificUChar32RangeIdeographSymbol(0x1F130, 0x1F149); 359 TestSpecificUChar32RangeIdeographSymbol(0x1F150, 0x1F169); 360 TestSpecificUChar32RangeIdeographSymbol(0x1F170, 0x1F189); 361 TestSpecificUChar32RangeIdeographSymbol(0x1F200, 0x1F6FF); 362 } 363 364 } // namespace WebCore 365 366