Changeset 179711 in webkit
- Timestamp:
- Feb 5, 2015, 2:35:48 PM (12 years ago)
- Location:
- branches/safari-600.1.4.15-branch
- Files:
-
- 5 edited
- 2 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/editing/deleting/delete-emoji-expected.txt (copied) (copied from trunk/LayoutTests/editing/deleting/delete-emoji-expected.txt )
-
LayoutTests/editing/deleting/delete-emoji.html (copied) (copied from trunk/LayoutTests/editing/deleting/delete-emoji.html )
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/platform/graphics/Font.cpp (modified) (2 diffs)
-
Source/WebCore/platform/text/TextBreakIterator.cpp (modified) (3 diffs)
-
Source/WebCore/rendering/RenderText.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-600.1.4.15-branch/LayoutTests/ChangeLog
r179685 r179711 1 2015-02-05 Lucas Forschler <lforschler@apple.com> 2 3 Merge r179567 4 5 2015-02-02 Enrica Casucci <enrica@apple.com> 6 7 Additional emoji support. 8 https://bugs.webkit.org/show_bug.cgi?id=141047 9 rdar://problem/19045135 10 11 Reviewed by Darin Adler. 12 13 * editing/deleting/delete-emoji.html: Added. 14 * editing/deleting/delete-emoji-expected.txt: Added. 15 1 16 2015-02-05 Lucas Forschler <lforschler@apple.com> 2 17 -
branches/safari-600.1.4.15-branch/Source/WebCore/ChangeLog
r179678 r179711 1 2015-02-05 Lucas Forschler <lforschler@apple.com> 2 3 Merge r179567 4 5 2015-02-02 Enrica Casucci <enrica@apple.com> 6 7 Additional emoji support. 8 https://bugs.webkit.org/show_bug.cgi?id=141047 9 rdar://problem/19045135 10 11 Reviewed by Darin Adler. 12 13 Adds support for emoji modifiers and group emoji. 14 15 Test: editing/deleting/delete-emoji.html 16 17 * platform/graphics/FontCascade.cpp: 18 (WebCore::FontCascade::characterRangeCodePath): 19 * platform/text/TextBreakIterator.cpp: 20 (WebCore::cursorMovementIterator): 21 * rendering/RenderText.cpp: 22 (WebCore::isEmojiGroupCandidate): 23 (WebCore::isEmojiModifier): 24 (WebCore::RenderText::previousOffsetForBackwardDeletion): 25 1 26 2015-02-04 Lucas Forschler <lforschler@apple.com> 2 27 -
branches/safari-600.1.4.15-branch/Source/WebCore/platform/graphics/Font.cpp
r179030 r179711 621 621 // list of ranges. 622 622 CodePath result = Simple; 623 bool previousCharacterIsEmojiGroupCandidate = false; 623 624 for (unsigned i = 0; i < len; i++) { 624 625 const UChar c = characters[i]; 626 if (c == zeroWidthJoiner && previousCharacterIsEmojiGroupCandidate) 627 return Complex; 628 629 previousCharacterIsEmojiGroupCandidate = false; 625 630 if (c < 0x2E5) // U+02E5 through U+02E9 (Modifier Letters : Tone letters) 626 631 continue; … … 742 747 if (supplementaryCharacter <= 0x1F1FF) 743 748 return Complex; 744 749 750 if (supplementaryCharacter >= 0x1F466 && supplementaryCharacter <= 0x1F469) { 751 previousCharacterIsEmojiGroupCandidate = true; 752 continue; 753 } 745 754 if (supplementaryCharacter < 0xE0100) // U+E0100 through U+E01EF Unicode variation selectors. 746 755 continue; -
branches/safari-600.1.4.15-branch/Source/WebCore/platform/text/TextBreakIterator.cpp
r165848 r179711 208 208 "$Mal1 = [\\u0D15-\\u0D39];" // Malayalam Letter A,...,Ha 209 209 "$RI = [\\U0001F1E6-\\U0001F1FF];" // Emoji regional indicators 210 "$ZWJ = \\u200D;" // Zero width joiner 211 "$EmojiForModsAndSeqs = [\\U0001F466-\\U0001F469];" // Emoji that take Fitzpatrick modifiers AND participate in ZWJ sequences 212 "$EmojiForModsOnly = [\\u261D \\u270A-\\u270C \\U0001F385 \\U0001F3C3-\\U0001F3C4 \\U0001F3C7 \\U0001F3CA \\U0001F442-\\U0001F443 \\U0001F446-\\U0001F450 \\U0001F46E-\\U0001F478 \\U0001F47C \\U0001F481-\\U0001F483 \\U0001F485-\\U0001F487 \\U0001F4AA \\U0001F645-\\U0001F647 \\U0001F64B-\\U0001F64F \\U0001F6B4-\\U0001F6B6 \\U0001F6C0];" // Emoji that take Fitzpatrick modifiers 213 "$EmojiMods = [\\U0001F3FB-\\U0001F3FF];" // Fitzpatrick modifiers 210 214 "!!chain;" 211 215 "!!forward;" … … 226 230 "$Kan0 $KanV $Kan1;" // Kannada Virama (forward) 227 231 "$Mal0 $MalV $Mal1;" // Malayalam Virama (forward) 232 "$ZWJ $EmojiForModsAndSeqs;" // Don't break in emoji ZWJ sequences 233 "[$EmojiForModsAndSeqs $EmojiForModsOnly] $EmojiMods;" // Don't break between relevant emoji and Fitzpatrick modifier 228 234 "!!reverse;" 229 235 "$LF $CR;" … … 243 249 "$Kan1 $KanV $Kan0;" // Kannada Virama (backward) 244 250 "$Mal1 $MalV $Mal0;" // Malayalam Virama (backward) 251 "$EmojiForModsAndSeqs $ZWJ;" // Don't break in emoji ZWJ sequences 252 "$EmojiMods [$EmojiForModsAndSeqs $EmojiForModsOnly];" // Don't break between relevant emoji and Fitzpatrick modifier 245 253 "!!safe_reverse;" 246 254 "!!safe_forward;"; -
branches/safari-600.1.4.15-branch/Source/WebCore/rendering/RenderText.cpp
r179133 r179711 1381 1381 }; 1382 1382 1383 inline bool isHangulLVT(UChar32 character)1383 static inline bool isHangulLVT(UChar32 character) 1384 1384 { 1385 1385 return (character - HANGUL_SYLLABLE_START) % HANGUL_JONGSEONG_COUNT; 1386 1386 } 1387 1387 1388 inline bool isMark(UChar32 c)1389 { 1390 int8_t charType = u_charType(c );1388 static inline bool isMark(UChar32 character) 1389 { 1390 int8_t charType = u_charType(character); 1391 1391 return charType == U_NON_SPACING_MARK || charType == U_ENCLOSING_MARK || charType == U_COMBINING_SPACING_MARK; 1392 1392 } 1393 1393 1394 inline bool isRegionalIndicator(UChar32 c)1394 static inline bool isRegionalIndicator(UChar32 character) 1395 1395 { 1396 1396 // National flag emoji each consists of a pair of regional indicator symbols. 1397 return 0x1F1E6 <= c && c <= 0x1F1FF; 1397 return 0x1F1E6 <= character && character <= 0x1F1FF; 1398 } 1399 1400 static inline bool isEmojiGroupCandidate(UChar32 character) 1401 { 1402 return character >= 0x1F466 && character <= 0x1F469; 1403 } 1404 1405 static inline bool isEmojiModifier(UChar32 character) 1406 { 1407 return character >= 0x1F3FB && character <= 0x1F3FF; 1398 1408 } 1399 1409 … … 1407 1417 UChar32 character; 1408 1418 bool sawRegionalIndicator = false; 1419 bool sawEmojiGroupCandidate = false; 1420 bool sawEmojiModifier = false; 1421 1409 1422 while (current > 0) { 1410 1423 if (U16_IS_TRAIL(text[--current])) … … 1414 1427 1415 1428 UChar32 character = text.characterStartingAt(current); 1429 1430 if (sawEmojiGroupCandidate) { 1431 sawEmojiGroupCandidate = false; 1432 if (character == zeroWidthJoiner) 1433 continue; 1434 // We could have two emoji group candidates without a joiner in between. 1435 // Those should not be treated as a group. 1436 U16_FWD_1_UNSAFE(text, current); 1437 break; 1438 } 1439 1440 if (sawEmojiModifier) { 1441 if (isEmojiModifier(character)) 1442 U16_FWD_1_UNSAFE(text, current); 1443 break; 1444 } 1416 1445 1417 1446 if (sawRegionalIndicator) { … … 1431 1460 if (isRegionalIndicator(character)) { 1432 1461 sawRegionalIndicator = true; 1462 continue; 1463 } 1464 1465 if (isEmojiModifier(character)) { 1466 sawEmojiModifier = true; 1467 continue; 1468 } 1469 1470 if (isEmojiGroupCandidate(character)) { 1471 sawEmojiGroupCandidate = true; 1433 1472 continue; 1434 1473 }
Note:
See TracChangeset
for help on using the changeset viewer.