⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 179711 in webkit


Ignore:
Timestamp:
Feb 5, 2015, 2:35:48 PM (12 years ago)
Author:
Lucas Forschler
Message:

Merged r179567. rdar://problem/19432892

Location:
branches/safari-600.1.4.15-branch
Files:
5 edited
2 copied

Legend:

Unmodified
Added
Removed
  • branches/safari-600.1.4.15-branch/LayoutTests/ChangeLog

    r179685 r179711  
     12015-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
    1162015-02-05  Lucas Forschler  <lforschler@apple.com>
    217
  • branches/safari-600.1.4.15-branch/Source/WebCore/ChangeLog

    r179678 r179711  
     12015-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
    1262015-02-04  Lucas Forschler  <lforschler@apple.com>
    227
  • branches/safari-600.1.4.15-branch/Source/WebCore/platform/graphics/Font.cpp

    r179030 r179711  
    621621    // list of ranges.
    622622    CodePath result = Simple;
     623    bool previousCharacterIsEmojiGroupCandidate = false;
    623624    for (unsigned i = 0; i < len; i++) {
    624625        const UChar c = characters[i];
     626        if (c == zeroWidthJoiner && previousCharacterIsEmojiGroupCandidate)
     627            return Complex;
     628
     629        previousCharacterIsEmojiGroupCandidate = false;
    625630        if (c < 0x2E5) // U+02E5 through U+02E9 (Modifier Letters : Tone letters) 
    626631            continue;
     
    742747            if (supplementaryCharacter <= 0x1F1FF)
    743748                return Complex;
    744 
     749   
     750            if (supplementaryCharacter >= 0x1F466 && supplementaryCharacter <= 0x1F469) {
     751                previousCharacterIsEmojiGroupCandidate = true;
     752                continue;
     753            }
    745754            if (supplementaryCharacter < 0xE0100) // U+E0100 through U+E01EF Unicode variation selectors.
    746755                continue;
  • branches/safari-600.1.4.15-branch/Source/WebCore/platform/text/TextBreakIterator.cpp

    r165848 r179711  
    208208        "$Mal1    = [\\u0D15-\\u0D39];"    // Malayalam Letter A,...,Ha
    209209        "$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
    210214        "!!chain;"
    211215        "!!forward;"
     
    226230        "$Kan0 $KanV $Kan1;"               // Kannada Virama (forward)
    227231        "$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
    228234        "!!reverse;"
    229235        "$LF $CR;"
     
    243249        "$Kan1 $KanV $Kan0;"               // Kannada Virama (backward)
    244250        "$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
    245253        "!!safe_reverse;"
    246254        "!!safe_forward;";
  • branches/safari-600.1.4.15-branch/Source/WebCore/rendering/RenderText.cpp

    r179133 r179711  
    13811381};
    13821382
    1383 inline bool isHangulLVT(UChar32 character)
     1383static inline bool isHangulLVT(UChar32 character)
    13841384{
    13851385    return (character - HANGUL_SYLLABLE_START) % HANGUL_JONGSEONG_COUNT;
    13861386}
    13871387
    1388 inline bool isMark(UChar32 c)
    1389 {
    1390     int8_t charType = u_charType(c);
     1388static inline bool isMark(UChar32 character)
     1389{
     1390    int8_t charType = u_charType(character);
    13911391    return charType == U_NON_SPACING_MARK || charType == U_ENCLOSING_MARK || charType == U_COMBINING_SPACING_MARK;
    13921392}
    13931393
    1394 inline bool isRegionalIndicator(UChar32 c)
     1394static inline bool isRegionalIndicator(UChar32 character)
    13951395{
    13961396    // 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
     1400static inline bool isEmojiGroupCandidate(UChar32 character)
     1401{
     1402    return character >= 0x1F466 && character <= 0x1F469;
     1403}
     1404
     1405static inline bool isEmojiModifier(UChar32 character)
     1406{
     1407    return character >= 0x1F3FB && character <= 0x1F3FF;
    13981408}
    13991409
     
    14071417    UChar32 character;
    14081418    bool sawRegionalIndicator = false;
     1419    bool sawEmojiGroupCandidate = false;
     1420    bool sawEmojiModifier = false;
     1421   
    14091422    while (current > 0) {
    14101423        if (U16_IS_TRAIL(text[--current]))
     
    14141427
    14151428        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        }
    14161445
    14171446        if (sawRegionalIndicator) {
     
    14311460        if (isRegionalIndicator(character)) {
    14321461            sawRegionalIndicator = true;
     1462            continue;
     1463        }
     1464       
     1465        if (isEmojiModifier(character)) {
     1466            sawEmojiModifier = true;
     1467            continue;
     1468        }
     1469
     1470        if (isEmojiGroupCandidate(character)) {
     1471            sawEmojiGroupCandidate = true;
    14331472            continue;
    14341473        }
Note: See TracChangeset for help on using the changeset viewer.