[iOS] Delete hardcoded font fallback tables
authormmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Apr 2015 17:32:27 +0000 (17:32 +0000)
committermmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Apr 2015 17:32:27 +0000 (17:32 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143583

Reviewed by Darin Adler

Source/WebCore:

Instead of hardcoding which font to use for a particular character, use
CTFontCreatePhysicalFontDescriptorForCharactersWithLanguage().

Updated test expected results:
    editing/selection/vertical-rl-rtl-extend-line-backward-br.html
    editing/selection/vertical-rl-rtl-extend-line-backward-p.html
    editing/selection/vertical-rl-rtl-extend-line-forward-br.html
    editing/selection/vertical-rl-rtl-extend-line-forward-p.html
    fast/text/international/danda-space.html
    fast/text/international/thai-baht-space.html

* platform/graphics/ios/FontCacheIOS.mm:
(WebCore::FontCache::getSystemFontFallbackForCharacters):
(WebCore::FontCache::systemFallbackForCharacters):
* platform/spi/cocoa/CoreTextSPI.h:

LayoutTests:

Updating expected results.

* editing/selection/vertical-rl-rtl-extend-line-backward-br.html: Updating expected results
* editing/selection/vertical-rl-rtl-extend-line-backward-p.html: Updating expected results
* editing/selection/vertical-rl-rtl-extend-line-forward-br.html: Updating expected results
* editing/selection/vertical-rl-rtl-extend-line-forward-p.html: Updating expected results
* fast/text/international/danda-space.html: Updating expected results
* fast/text/international/thai-baht-space.html: Updating expected results

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@182894 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/ios-simulator-wk2/fast/text/international/danda-space-expected.txt
LayoutTests/platform/ios-simulator-wk2/fast/text/international/thai-baht-space-expected.txt
LayoutTests/platform/ios-simulator/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt
LayoutTests/platform/ios-simulator/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt
LayoutTests/platform/ios-simulator/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt
LayoutTests/platform/ios-simulator/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/ios/FontCacheIOS.mm
Source/WebCore/platform/spi/cocoa/CoreTextSPI.h

index d5c6d90..94ea7d9 100644 (file)
@@ -1,3 +1,19 @@
+2015-04-16  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        [iOS] Delete hardcoded font fallback tables
+        https://bugs.webkit.org/show_bug.cgi?id=143583
+
+        Reviewed by Darin Adler
+
+        Updating expected results.
+
+        * editing/selection/vertical-rl-rtl-extend-line-backward-br.html: Updating expected results
+        * editing/selection/vertical-rl-rtl-extend-line-backward-p.html: Updating expected results
+        * editing/selection/vertical-rl-rtl-extend-line-forward-br.html: Updating expected results
+        * editing/selection/vertical-rl-rtl-extend-line-forward-p.html: Updating expected results
+        * fast/text/international/danda-space.html: Updating expected results
+        * fast/text/international/thai-baht-space.html: Updating expected results
+
 2015-04-16  Alexey Proskuryakov  <ap@apple.com>
 
         More flaky tests in http/tests/security/mixedContent
index b1b4e16..775a918 100644 (file)
@@ -12,5 +12,5 @@ layer at (0,0) size 800x600
         RenderText {#text} at (121,0) size 389x19
           text run at (121,0) width 389: ": Test for rendering of Danda (U+0964) followed by a space."
       RenderBlock {P} at (0,36) size 784x25
-        RenderText {#text} at (0,3) size 269x19
-          text run at (0,3) width 269: "\x{A39}\x{A41}\x{A70}\x{A26}\x{A40} \x{A39}\x{A48}\x{964} \x{A07}\x{A38} \x{A32}\x{A3F}\x{A2A}\x{A40} \x{A26}\x{A47} \x{A35}\x{A3F}\x{A1A} \x{A69}\x{A6B} (35) \x{A05}\x{A71}\x{A16}\x{A30} \x{A39}\x{A41}\x{A70}\x{A26}\x{A47} \x{A39}\x{A28}\x{964}"
+        RenderText {#text} at (0,1) size 264x19
+          text run at (0,1) width 264: "\x{A39}\x{A41}\x{A70}\x{A26}\x{A40} \x{A39}\x{A48}\x{964} \x{A07}\x{A38} \x{A32}\x{A3F}\x{A2A}\x{A40} \x{A26}\x{A47} \x{A35}\x{A3F}\x{A1A} \x{A69}\x{A6B} (35) \x{A05}\x{A71}\x{A16}\x{A30} \x{A39}\x{A41}\x{A70}\x{A26}\x{A47} \x{A39}\x{A28}\x{964}"
index efff341..d110d8a 100644 (file)
@@ -13,8 +13,8 @@ layer at (0,0) size 800x600
           text run at (121,0) width 605: ". Characters belonging to 'Common' script followed / preceeded by a space should be rendered"
           text run at (0,20) width 646: "correctly. Two lines below have 4 Thai currency signs (U+0E3F) and all of them should be rendered."
       RenderBlock {P} at (0,56) size 784x48
-        RenderText {#text} at (0,4) size 286x19
-          text run at (0,4) width 286: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000\x{E3F} \x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
-        RenderBR {BR} at (285,19) size 1x0
-        RenderText {#text} at (0,28) size 286x19
-          text run at (0,28) width 286: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000 \x{E3F}\x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
+        RenderText {#text} at (0,4) size 289x19
+          text run at (0,4) width 289: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000\x{E3F} \x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
+        RenderBR {BR} at (288,19) size 1x0
+        RenderText {#text} at (0,28) size 289x19
+          text run at (0,28) width 289: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000 \x{E3F}\x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
index 9c5b4c5..95cc6ea 100644 (file)
@@ -6,13 +6,13 @@ layer at (0,0) size 800x204
       RenderBlock {P} at (0,0) size 784x20
         RenderText {#text} at (0,0) size 399x19
           text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode."
-      RenderBlock {DIV} at (0,36) size 86x139
-        RenderBlock {P} at (20,0) size 46x139
-          RenderText {#text} at (0,52) size 21x87
-            text run at (0,52) width 87 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
-          RenderBR {BR} at (0,52) size 21x1
-          RenderText {#text} at (23,41) size 21x98
-            text run at (23,41) width 98 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
+      RenderBlock {DIV} at (0,36) size 88x139
+        RenderBlock {P} at (20,0) size 48x139
+          RenderText {#text} at (1,30) size 21x109
+            text run at (1,30) width 109 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
+          RenderBR {BR} at (1,30) size 21x1
+          RenderText {#text} at (25,18) size 21x121
+            text run at (25,18) width 121 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
       RenderBlock {PRE} at (0,187) size 784x0
 selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
 selection end:   position 5 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body
index 86794cf..a2c6476 100644 (file)
@@ -6,13 +6,13 @@ layer at (0,0) size 800x204
       RenderBlock {P} at (0,0) size 784x20
         RenderText {#text} at (0,0) size 399x19
           text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode."
-      RenderBlock {DIV} at (0,36) size 106x139
-        RenderBlock {P} at (20,0) size 23x139
-          RenderText {#text} at (0,52) size 21x87
-            text run at (0,52) width 87 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
-        RenderBlock {P} at (63,0) size 23x139
-          RenderText {#text} at (0,41) size 21x98
-            text run at (0,41) width 98 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
+      RenderBlock {DIV} at (0,36) size 108x139
+        RenderBlock {P} at (20,0) size 24x139
+          RenderText {#text} at (1,30) size 21x109
+            text run at (1,30) width 109 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
+        RenderBlock {P} at (64,0) size 24x139
+          RenderText {#text} at (1,18) size 21x121
+            text run at (1,18) width 121 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
       RenderBlock {PRE} at (0,187) size 784x0
 selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
 selection end:   position 5 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body
index f08afd5..95cc6ea 100644 (file)
@@ -6,13 +6,13 @@ layer at (0,0) size 800x204
       RenderBlock {P} at (0,0) size 784x20
         RenderText {#text} at (0,0) size 399x19
           text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode."
-      RenderBlock {DIV} at (0,36) size 86x139
-        RenderBlock {P} at (20,0) size 46x139
-          RenderText {#text} at (0,52) size 21x87
-            text run at (0,52) width 87 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
-          RenderBR {BR} at (0,52) size 21x1
-          RenderText {#text} at (23,41) size 21x98
-            text run at (23,41) width 98 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
+      RenderBlock {DIV} at (0,36) size 88x139
+        RenderBlock {P} at (20,0) size 48x139
+          RenderText {#text} at (1,30) size 21x109
+            text run at (1,30) width 109 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
+          RenderBR {BR} at (1,30) size 21x1
+          RenderText {#text} at (25,18) size 21x121
+            text run at (25,18) width 121 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
       RenderBlock {PRE} at (0,187) size 784x0
 selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
-selection end:   position 6 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body
+selection end:   position 5 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body
index 0eb6083..a2c6476 100644 (file)
@@ -6,13 +6,13 @@ layer at (0,0) size 800x204
       RenderBlock {P} at (0,0) size 784x20
         RenderText {#text} at (0,0) size 399x19
           text run at (0,0) width 399: "This tests horizontal caret movement in vertical writing mode."
-      RenderBlock {DIV} at (0,36) size 106x139
-        RenderBlock {P} at (20,0) size 23x139
-          RenderText {#text} at (0,52) size 21x87
-            text run at (0,52) width 87 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
-        RenderBlock {P} at (63,0) size 23x139
-          RenderText {#text} at (0,41) size 21x98
-            text run at (0,41) width 98 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
+      RenderBlock {DIV} at (0,36) size 108x139
+        RenderBlock {P} at (20,0) size 24x139
+          RenderText {#text} at (1,30) size 21x109
+            text run at (1,30) width 109 RTL: "\x{5D0}\x{5E0}\x{5D9} \x{5D7}\x{5EA}\x{5D5}\x{5DC}."
+        RenderBlock {P} at (64,0) size 24x139
+          RenderText {#text} at (1,18) size 21x121
+            text run at (1,18) width 121 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
       RenderBlock {PRE} at (0,187) size 784x0
 selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
-selection end:   position 6 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body
+selection end:   position 5 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body
index 35ef8ec..6bb94ec 100644 (file)
@@ -1,3 +1,26 @@
+2015-04-16  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        [iOS] Delete hardcoded font fallback tables
+        https://bugs.webkit.org/show_bug.cgi?id=143583
+
+        Reviewed by Darin Adler
+
+        Instead of hardcoding which font to use for a particular character, use
+        CTFontCreatePhysicalFontDescriptorForCharactersWithLanguage().
+
+        Updated test expected results:
+            editing/selection/vertical-rl-rtl-extend-line-backward-br.html
+            editing/selection/vertical-rl-rtl-extend-line-backward-p.html
+            editing/selection/vertical-rl-rtl-extend-line-forward-br.html
+            editing/selection/vertical-rl-rtl-extend-line-forward-p.html
+            fast/text/international/danda-space.html
+            fast/text/international/thai-baht-space.html
+
+        * platform/graphics/ios/FontCacheIOS.mm:
+        (WebCore::FontCache::getSystemFontFallbackForCharacters):
+        (WebCore::FontCache::systemFallbackForCharacters):
+        * platform/spi/cocoa/CoreTextSPI.h:
+
 2015-04-16  Per Arne Vollan  <peavo@outlook.com>
 
         [WinCairo] Compile error when environment variable WEBKITLIBRARIESDIR is not defined.
index 2a660a2..ee7879c 100644 (file)
@@ -53,6 +53,7 @@ static inline bool requiresCustomFallbackFont(const UInt32 character)
     return character == AppleLogo || character == blackCircle || character == narrowNonBreakingSpace;
 }
 
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
 static CFCharacterSetRef copyFontCharacterSet(CFStringRef fontName)
 {
     // The size, 10, is arbitrary.
@@ -72,6 +73,7 @@ static CFCharacterSetRef phoneFallbackCharacterSet()
     static CFCharacterSetRef characterSet = copyFontCharacterSet(CFSTR(".PhoneFallback"));
     return characterSet;
 }
+#endif
 
 PassRefPtr<Font> FontCache::getSystemFontFallbackForCharacters(const FontDescription& description, const Font* originalFontData, const UChar* characters, unsigned length)
 {
@@ -81,7 +83,7 @@ PassRefPtr<Font> FontCache::getSystemFontFallbackForCharacters(const FontDescrip
     CFIndex coveredLength = 0;
     RetainPtr<CTFontRef> substituteFont = adoptCF(CTFontCreatePhysicalFontForCharactersWithLanguage(ctFont, (const UTF16Char*)characters, (CFIndex)length, 0, &coveredLength));
     if (!substituteFont)
-        return 0;
+        return nullptr;
 
     CTFontSymbolicTraits originalTraits = CTFontGetSymbolicTraits(ctFont);
     CTFontSymbolicTraits actualTraits = 0;
@@ -97,6 +99,7 @@ PassRefPtr<Font> FontCache::getSystemFontFallbackForCharacters(const FontDescrip
     return fontForPlatformData(alternateFont);
 }
 
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
 enum class LanguageSpecificFont {
     None,
     ChineseJapanese,
@@ -193,6 +196,7 @@ static LanguageSpecificFont languageSpecificFallbackFont(UChar32 c)
         return LanguageSpecificFont::ChineseJapanese;
     return LanguageSpecificFont::None;
 }
+#endif
 
 RefPtr<Font> FontCache::systemFallbackForCharacters(const FontDescription& description, const Font* originalFontData, bool, const UChar* characters, unsigned length)
 {
@@ -216,12 +220,13 @@ RefPtr<Font> FontCache::systemFallbackForCharacters(const FontDescription& descr
             return getSystemFontFallbackForCharacters(description, originalFontData, characters, length);
     }
 
+    RefPtr<Font> font;
+
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
     LanguageSpecificFont languageSpecificFont = LanguageSpecificFont::None;
     if (length)
         languageSpecificFont = languageSpecificFallbackFont(c);
 
-    RefPtr<Font> font;
-
     switch (languageSpecificFont) {
     case LanguageSpecificFont::ChineseJapanese: {
         // By default, Chinese font is preferred, fall back on Japanese.
@@ -439,6 +444,11 @@ RefPtr<Font> FontCache::systemFallbackForCharacters(const FontDescription& descr
         break;
     }
     }
+#else
+    RetainPtr<CTFontDescriptorRef> fallbackFontDescriptor = adoptCF(CTFontCreatePhysicalFontDescriptorForCharactersWithLanguage(originalFontData->getCTFont(), characters, length, nullptr, nullptr));
+    if (RetainPtr<CFStringRef> foundFontName = adoptCF(static_cast<CFStringRef>(CTFontDescriptorCopyAttribute(fallbackFontDescriptor.get(), kCTFontNameAttribute))))
+        font = fontForFamily(description, foundFontName.get(), false);
+#endif
 
     if (font)
         return font.release();
index a76c0ee..5503e1f 100644 (file)
@@ -108,6 +108,7 @@ extern const CFStringRef kCTFontDescriptorTextStyleEmphasized;
 extern const CFStringRef kCTUIFontTextStyleTitle1;
 extern const CFStringRef kCTUIFontTextStyleTitle2;
 extern const CFStringRef kCTUIFontTextStyleTitle3;
+CTFontDescriptorRef CTFontCreatePhysicalFontDescriptorForCharactersWithLanguage(CTFontRef currentFont, const UTF16Char* characters, CFIndex length, CFStringRef language, CFIndex* coveredLength);
 #endif
 
 CTFontRef CTFontCreatePhysicalFontForCharactersWithLanguage(CTFontRef, const UTF16Char* characters, CFIndex length, CFStringRef language, CFIndex* coveredLength);