Title: [263527] trunk
Revision
263527
Author
[email protected]
Date
2020-06-25 13:37:34 -0700 (Thu, 25 Jun 2020)

Log Message

Text manipulation should exclude text rendered using icon-only fonts
https://bugs.webkit.org/show_bug.cgi?id=213446
<rdar://problem/63734298>

Reviewed by Myles Maxfield.

Source/WebCore:

See below for more details.

Test: TextManipulation.StartTextManipulationExcludesTextRenderedAsIcons

* editing/TextManipulationController.cpp:
(WebCore::TextManipulationController::shouldExcludeNodeBasedOnStyle):
(WebCore::TextManipulationController::parse):

Augment token exclusion rules so that we're able to exclude certain text nodes from text manipulation, based on
their style (more specifically, based on their font family). Ask the text node's primary font if it is likely to
be used only for rendering icons, and cache the result in TextManipulationController to avoid running the
heuristic an excessive number of times for each font that appears in the document. We currently only run this
for the node's primary font when initiating translation, though we may want to change this in the future so that
node exclusion is recomputed when the primary font of a node changes.

Note that in the case where an icon font fails to load, we won't exclude the text node from translation,
since the primary font will be a fallback. This is intentional, since the node would appear in the document as
normally rendered text (rather than icons), which should be translated.

* editing/TextManipulationController.h:
* platform/graphics/Font.cpp:
(WebCore::Font::isProbablyOnlyUsedToRenderIcons const):
* platform/graphics/Font.h:
* platform/graphics/FontPlatformData.cpp:
(WebCore::FontPlatformData::familyName const):
* platform/graphics/FontPlatformData.h:
* platform/graphics/cocoa/FontCocoa.mm:
(WebCore::Font::isProbablyOnlyUsedToRenderIcons const):

Add a heuristic to detect whether a platform font should be excluded from text manipulation. For now, we only
return true if we suspect that this font is an "icon-only" font (for instance, the "Material Icons" font). We
guess that a font is *probably* an icon-only font if the font supports only characters from the basic or PUA
unicode planes, and the glyph bounds for the set of supported non-control basic latin characters are all empty.

* platform/graphics/cocoa/FontPlatformDataCocoa.mm:
(WebCore::FontPlatformData::familyName const):

Add a platform `familyName()` helper method on `FontPlatformData`. On Cocoa platforms, this wraps a call to
`CTFontCopyFamilyName`.

Tools:

Add a new API test.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKitCocoa/Ahem.ttf: Added.
* TestWebKitAPI/Tests/WebKitCocoa/SpaceOnly.otf: Added.
* TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
(TestWebKitAPI::TEST):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (263526 => 263527)


--- trunk/Source/WebCore/ChangeLog	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/ChangeLog	2020-06-25 20:37:34 UTC (rev 263527)
@@ -1,3 +1,51 @@
+2020-06-25  Wenson Hsieh  <[email protected]>
+
+        Text manipulation should exclude text rendered using icon-only fonts
+        https://bugs.webkit.org/show_bug.cgi?id=213446
+        <rdar://problem/63734298>
+
+        Reviewed by Myles Maxfield.
+
+        See below for more details.
+
+        Test: TextManipulation.StartTextManipulationExcludesTextRenderedAsIcons
+
+        * editing/TextManipulationController.cpp:
+        (WebCore::TextManipulationController::shouldExcludeNodeBasedOnStyle):
+        (WebCore::TextManipulationController::parse):
+
+        Augment token exclusion rules so that we're able to exclude certain text nodes from text manipulation, based on
+        their style (more specifically, based on their font family). Ask the text node's primary font if it is likely to
+        be used only for rendering icons, and cache the result in TextManipulationController to avoid running the
+        heuristic an excessive number of times for each font that appears in the document. We currently only run this
+        for the node's primary font when initiating translation, though we may want to change this in the future so that
+        node exclusion is recomputed when the primary font of a node changes.
+
+        Note that in the case where an icon font fails to load, we won't exclude the text node from translation,
+        since the primary font will be a fallback. This is intentional, since the node would appear in the document as
+        normally rendered text (rather than icons), which should be translated.
+
+        * editing/TextManipulationController.h:
+        * platform/graphics/Font.cpp:
+        (WebCore::Font::isProbablyOnlyUsedToRenderIcons const):
+        * platform/graphics/Font.h:
+        * platform/graphics/FontPlatformData.cpp:
+        (WebCore::FontPlatformData::familyName const):
+        * platform/graphics/FontPlatformData.h:
+        * platform/graphics/cocoa/FontCocoa.mm:
+        (WebCore::Font::isProbablyOnlyUsedToRenderIcons const):
+
+        Add a heuristic to detect whether a platform font should be excluded from text manipulation. For now, we only
+        return true if we suspect that this font is an "icon-only" font (for instance, the "Material Icons" font). We
+        guess that a font is *probably* an icon-only font if the font supports only characters from the basic or PUA
+        unicode planes, and the glyph bounds for the set of supported non-control basic latin characters are all empty.
+
+        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
+        (WebCore::FontPlatformData::familyName const):
+
+        Add a platform `familyName()` helper method on `FontPlatformData`. On Cocoa platforms, this wraps a call to
+        `CTFontCopyFamilyName`.
+
 2020-06-25  Kate Cheney  <[email protected]>
 
         App-bound domain service worker registrations should be limited

Modified: trunk/Source/WebCore/PAL/pal/spi/cocoa/CoreTextSPI.h (263526 => 263527)


--- trunk/Source/WebCore/PAL/pal/spi/cocoa/CoreTextSPI.h	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/PAL/pal/spi/cocoa/CoreTextSPI.h	2020-06-25 20:37:34 UTC (rev 263527)
@@ -101,6 +101,7 @@
 bool CTFontGetVerticalGlyphsForCharacters(CTFontRef, const UniChar characters[], CGGlyph glyphs[], CFIndex count);
 void CTFontGetUnsummedAdvancesForGlyphsAndStyle(CTFontRef, CTFontOrientation, CGFontRenderingStyle, const CGGlyph[], CGSize advances[], CFIndex count);
 CTFontDescriptorRef CTFontDescriptorCreateForCSSFamily(CFStringRef cssFamily, CFStringRef language);
+bool CTFontGetGlyphsForCharacterRange(CTFontRef, CGGlyph glyphs[], CFRange);
 
 CTFontDescriptorRef CTFontDescriptorCreateForUIType(CTFontUIFontType, CGFloat size, CFStringRef language);
 CTFontDescriptorRef CTFontDescriptorCreateWithTextStyle(CFStringRef style, CFStringRef size, CFStringRef language);

Modified: trunk/Source/WebCore/editing/TextManipulationController.cpp (263526 => 263527)


--- trunk/Source/WebCore/editing/TextManipulationController.cpp	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/editing/TextManipulationController.cpp	2020-06-25 20:37:34 UTC (rev 263527)
@@ -37,6 +37,7 @@
 #include "HTMLNames.h"
 #include "HTMLParserIdioms.h"
 #include "InputTypeNames.h"
+#include "NodeRenderStyle.h"
 #include "NodeTraversal.h"
 #include "PseudoElement.h"
 #include "Range.h"
@@ -330,10 +331,33 @@
     return unit;
 }
 
+bool TextManipulationController::shouldExcludeNodeBasedOnStyle(const Node& node)
+{
+    auto* style = node.renderStyle();
+    if (!style)
+        return false;
+
+    auto& font = style->fontCascade().primaryFont();
+    auto familyName = font.platformData().familyName();
+    if (familyName.isEmpty())
+        return false;
+
+    auto iter = m_cachedFontFamilyExclusionResults.find(familyName);
+    if (iter != m_cachedFontFamilyExclusionResults.end())
+        return iter->value;
+
+    // FIXME: We should reconsider whether a node should be excluded if the primary font
+    // used to render the node changes, since this "icon font" heuristic may return a
+    // different result.
+    bool result = font.isProbablyOnlyUsedToRenderIcons();
+    m_cachedFontFamilyExclusionResults.set(familyName, result);
+    return result;
+}
+
 void TextManipulationController::parse(ManipulationUnit& unit, const String& text, Node& textNode)
 {
     ExclusionRuleMatcher exclusionRuleMatcher(m_exclusionRules);
-    bool isNodeExcluded = exclusionRuleMatcher.isExcluded(&textNode);
+    bool isNodeExcluded = exclusionRuleMatcher.isExcluded(&textNode) || shouldExcludeNodeBasedOnStyle(textNode);
     size_t positionOfLastNonHTMLSpace = WTF::notFound;
     size_t startPositionOfCurrentToken = 0;
     size_t index = 0;

Modified: trunk/Source/WebCore/editing/TextManipulationController.h (263526 => 263527)


--- trunk/Source/WebCore/editing/TextManipulationController.h	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/editing/TextManipulationController.h	2020-06-25 20:37:34 UTC (rev 263527)
@@ -159,6 +159,8 @@
     ManipulationUnit createUnit(const Vector<String>&, Node&);
     void parse(ManipulationUnit&, const String&, Node&);
 
+    bool shouldExcludeNodeBasedOnStyle(const Node&);
+
     void addItem(ManipulationItemData&&);
     void addItemIfPossible(Vector<ManipulationUnit>&&);
     void flushPendingItemsForCallback();
@@ -178,6 +180,8 @@
     WeakHashSet<Element> m_elementsWithNewRenderer;
     WeakHashSet<Element> m_manipulatedElements;
 
+    HashMap<String, bool> m_cachedFontFamilyExclusionResults;
+
     ManipulationItemCallback m_callback;
     Vector<ManipulationItem> m_pendingItemsForCallback;
 

Modified: trunk/Source/WebCore/platform/graphics/Font.cpp (263526 => 263527)


--- trunk/Source/WebCore/platform/graphics/Font.cpp	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/platform/graphics/Font.cpp	2020-06-25 20:37:34 UTC (rev 263527)
@@ -475,6 +475,16 @@
     return *derivedFontData.brokenIdeographFont;
 }
 
+#if !PLATFORM(COCOA)
+
+bool Font::isProbablyOnlyUsedToRenderIcons() const
+{
+    // FIXME: Not implemented yet.
+    return false;
+}
+
+#endif
+
 #if !LOG_DISABLED
 String Font::description() const
 {

Modified: trunk/Source/WebCore/platform/graphics/Font.h (263526 => 263527)


--- trunk/Source/WebCore/platform/graphics/Font.h	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/platform/graphics/Font.h	2020-06-25 20:37:34 UTC (rev 263527)
@@ -106,6 +106,8 @@
     const Font* emphasisMarkFont(const FontDescription&) const;
     const Font& brokenIdeographFont() const;
 
+    bool isProbablyOnlyUsedToRenderIcons() const;
+
     const Font* variantFont(const FontDescription& description, FontVariant variant) const
     {
 #if PLATFORM(COCOA)

Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp (263526 => 263527)


--- trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp	2020-06-25 20:37:34 UTC (rev 263527)
@@ -84,4 +84,14 @@
 }
 #endif
 
+#if !PLATFORM(COCOA)
+
+String FontPlatformData::familyName() const
+{
+    // FIXME: Not implemented yet.
+    return { };
 }
+
+#endif
+
+}

Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.h (263526 => 263527)


--- trunk/Source/WebCore/platform/graphics/FontPlatformData.h	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.h	2020-06-25 20:37:34 UTC (rev 263527)
@@ -155,6 +155,8 @@
     TextRenderingMode textRenderingMode() const { return m_textRenderingMode; }
     bool isForTextCombine() const { return widthVariant() != FontWidthVariant::RegularWidth; } // Keep in sync with callers of FontDescription::setWidthVariant().
 
+    String familyName() const;
+
 #if USE(CAIRO)
     cairo_scaled_font_t* scaledFont() const { return m_scaledFont.get(); }
 #endif

Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm (263526 => 263527)


--- trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCocoa.mm	2020-06-25 20:37:34 UTC (rev 263527)
@@ -659,4 +659,43 @@
     return CTFontGetGlyphsForCharacters(platformData().ctFont(), codeUnits, glyphs, count);
 }
 
+bool Font::isProbablyOnlyUsedToRenderIcons() const
+{
+    auto platformFont = platformData().font();
+    if (!platformFont)
+        return false;
+
+    // Allow most non-icon fonts to bail early here by testing a single character 'a', without iterating over all basic latin characters.
+    UniChar lowercaseACharacter = 'a';
+    CGGlyph lowercaseAGlyph;
+    if (CTFontGetGlyphsForCharacters(platformFont, &lowercaseACharacter, &lowercaseAGlyph, 1)) {
+        if (!CGRectIsEmpty(CTFontGetBoundingRectsForGlyphs(platformFont, kCTFontOrientationDefault, &lowercaseAGlyph, nullptr, 1)))
+            return false;
+    }
+
+    auto supportedCharacters = adoptCF(CTFontCopyCharacterSet(platformFont));
+    if (CFCharacterSetHasMemberInPlane(supportedCharacters.get(), 1) || CFCharacterSetHasMemberInPlane(supportedCharacters.get(), 2))
+        return false;
+
+    // This encompasses all basic Latin non-control characters.
+    constexpr UniChar firstCharacterToTest = ' ';
+    constexpr UniChar lastCharacterToTest = '~';
+    constexpr auto numberOfCharactersToTest = lastCharacterToTest - firstCharacterToTest + 1;
+
+    Vector<CGGlyph> glyphs;
+    glyphs.fill(0, numberOfCharactersToTest);
+    CTFontGetGlyphsForCharacterRange(platformFont, glyphs.begin(), CFRangeMake(firstCharacterToTest, numberOfCharactersToTest));
+    glyphs.removeAll(0);
+
+    if (glyphs.isEmpty())
+        return false;
+
+    Vector<CGRect> boundingRects;
+    boundingRects.fill(CGRectZero, glyphs.size());
+    CTFontGetBoundingRectsForGlyphs(platformFont, kCTFontOrientationDefault, glyphs.begin(), boundingRects.begin(), glyphs.size());
+    return notFound == boundingRects.findMatching([](auto& rect) {
+        return !CGRectIsEmpty(rect);
+    });
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm (263526 => 263527)


--- trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm	2020-06-25 20:37:34 UTC (rev 263527)
@@ -181,4 +181,11 @@
 
 #endif
 
+String FontPlatformData::familyName() const
+{
+    if (auto platformFont = font())
+        return adoptCF(CTFontCopyFamilyName(platformFont)).get();
+    return { };
+}
+
 } // namespace WebCore

Modified: trunk/Tools/ChangeLog (263526 => 263527)


--- trunk/Tools/ChangeLog	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Tools/ChangeLog	2020-06-25 20:37:34 UTC (rev 263527)
@@ -1,3 +1,19 @@
+2020-06-25  Wenson Hsieh  <[email protected]>
+
+        Text manipulation should exclude text rendered using icon-only fonts
+        https://bugs.webkit.org/show_bug.cgi?id=213446
+        <rdar://problem/63734298>
+
+        Reviewed by Myles Maxfield.
+
+        Add a new API test.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKitCocoa/Ahem.ttf: Added.
+        * TestWebKitAPI/Tests/WebKitCocoa/SpaceOnly.otf: Added.
+        * TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:
+        (TestWebKitAPI::TEST):
+
 2020-06-25  Aakash Jain  <[email protected]>
 
         [ews] Share more bots between EWS builder and testers

Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (263526 => 263527)


--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2020-06-25 20:37:34 UTC (rev 263527)
@@ -1130,6 +1130,8 @@
 		F4CD74C620FDACFA00DE3794 /* text-with-async-script.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4CD74C520FDACF500DE3794 /* text-with-async-script.html */; };
 		F4CD74C920FDB49600DE3794 /* TestURLSchemeHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4CD74C820FDB49600DE3794 /* TestURLSchemeHandler.mm */; };
 		F4CF32802366552200D3AD07 /* EnterKeyHintTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4CF327F2366552200D3AD07 /* EnterKeyHintTests.mm */; };
+		F4CFCDDA249FC9E400527482 /* SpaceOnly.otf in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4CFCDD8249FC9D900527482 /* SpaceOnly.otf */; };
+		F4CFCDDB249FC9E900527482 /* Ahem.ttf in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4CFCDD9249FC9D900527482 /* Ahem.ttf */; };
 		F4D2986E20FEE7370092D636 /* RunScriptAfterDocumentLoad.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4D2986D20FEE7370092D636 /* RunScriptAfterDocumentLoad.mm */; };
 		F4D4F3B61E4E2BCB00BB2767 /* DragAndDropSimulatorIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4D4F3B41E4E2BCB00BB2767 /* DragAndDropSimulatorIOS.mm */; };
 		F4D4F3B91E4E36E400BB2767 /* DragAndDropTestsIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4D4F3B71E4E36E400BB2767 /* DragAndDropTestsIOS.mm */; };
@@ -1234,6 +1236,7 @@
 				55A81800218102210004A39A /* 400x400-green.png in Copy Resources */,
 				379028B914FAC24C007E6B43 /* acceptsFirstMouse.html in Copy Resources */,
 				725C3EF322058A5B007C36FC /* AdditionalSupportedImageTypes.html in Copy Resources */,
+				F4CFCDDB249FC9E900527482 /* Ahem.ttf in Copy Resources */,
 				1C2B81871C8925A000A5529F /* Ahem.ttf in Copy Resources */,
 				1A63479F183D72A4005B1707 /* all-content-in-one-iframe.html in Copy Resources */,
 				C25CCA0D1E5141840026CB8A /* AllAhem.svg in Copy Resources */,
@@ -1547,6 +1550,7 @@
 				46AE5A3720F9066D00E0873E /* SimpleServiceWorkerRegistrations-4.sqlite3 in Copy Resources */,
 				F4F405BD1D4C0D1C007A9707 /* skinny-autoplaying-video-with-audio.html in Copy Resources */,
 				C01A23F21266156700C9ED55 /* spacebar-scrolling.html in Copy Resources */,
+				F4CFCDDA249FC9E400527482 /* SpaceOnly.otf in Copy Resources */,
 				E194E1BD177E53C7009C4D4E /* StopLoadingFromDidReceiveResponse.html in Copy Resources */,
 				515BE16F1D428BB100DD7C68 /* StoreBlobToBeDeleted.html in Copy Resources */,
 				9BD6D3A21F7B218300BD4962 /* sunset-in-cupertino-100px.tiff in Copy Resources */,
@@ -2815,6 +2819,8 @@
 		F4CD74C820FDB49600DE3794 /* TestURLSchemeHandler.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = TestURLSchemeHandler.mm; sourceTree = "<group>"; };
 		F4CDAB3322489FE10057A2D9 /* UserInterfaceSwizzler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserInterfaceSwizzler.h; sourceTree = "<group>"; };
 		F4CF327F2366552200D3AD07 /* EnterKeyHintTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = EnterKeyHintTests.mm; sourceTree = "<group>"; };
+		F4CFCDD8249FC9D900527482 /* SpaceOnly.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SpaceOnly.otf; sourceTree = "<group>"; };
+		F4CFCDD9249FC9D900527482 /* Ahem.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Ahem.ttf; sourceTree = "<group>"; };
 		F4D2986D20FEE7370092D636 /* RunScriptAfterDocumentLoad.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RunScriptAfterDocumentLoad.mm; sourceTree = "<group>"; };
 		F4D4F3B41E4E2BCB00BB2767 /* DragAndDropSimulatorIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DragAndDropSimulatorIOS.mm; sourceTree = "<group>"; };
 		F4D4F3B71E4E36E400BB2767 /* DragAndDropTestsIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DragAndDropTestsIOS.mm; sourceTree = "<group>"; };
@@ -3533,6 +3539,7 @@
 			children = (
 				55A817FE218101DF0004A39A /* 100x100-red.tga */,
 				55A817FD218101DF0004A39A /* 400x400-green.png */,
+				F4CFCDD9249FC9D900527482 /* Ahem.ttf */,
 				C25CCA0C1E5140E50026CB8A /* AllAhem.svg */,
 				F4A9202E1FEE34C800F59590 /* apple-data-url.html */,
 				A1798B8A2243611A000764BD /* apple-pay-active-session.html */,
@@ -3723,6 +3730,7 @@
 				C9B4AD291ECA6EA500F5FEA0 /* silence-long.m4a */,
 				4656A75720F9054F0002E21F /* SimpleServiceWorkerRegistrations-4.sqlite3 */,
 				F4F405BB1D4C0CF8007A9707 /* skinny-autoplaying-video-with-audio.html */,
+				F4CFCDD8249FC9D900527482 /* SpaceOnly.otf */,
 				515BE16E1D4288FF00DD7C68 /* StoreBlobToBeDeleted.html */,
 				9BD6D3A11F7B202100BD4962 /* sunset-in-cupertino-100px.tiff */,
 				9BD6D3A01F7B202000BD4962 /* sunset-in-cupertino-200px.png */,

Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Ahem.ttf (0 => 263527)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Ahem.ttf	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Ahem.ttf	2020-06-25 20:37:34 UTC (rev 263527)
@@ -0,0 +1,29 @@
+����������\x80����0OS/2xPJ\x8D����8������`cmap\xD6F����l����rgasp����	����0\xB0������glyfI\xB3t\xDA����\xE0����dhead֢N������\xBC������6hhea
+������\xF4������$hmtx\xB9 ��}����\x98����\xD4loca u'"����&D����\xECmaxp��\xF8��	���������� name~\x8C\xB8����(0����hpost\x8D\xD0\x8A����.\x98��������������BQg_<\xF5��	\xE8��������\xB3o_Y��������\xC0-\xABI����\xFF8\xE8 �������������������������� \xFF8����\xE8��������\xE8��������������������������������\xF5��������\xF5������������������������������������������������\xE8\x90������\xBC\x8A������\x8F\xBC\x8A����\xC5��2������	������������\x80����\xAF�� H����������������W3C����@�� \xF0 \xFF8���� ��\xC8 ��@������  ������ ����\xE8��}��������\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8���
 �\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����
 \xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8��
 ��\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\x
 E8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8����\xE8��������������������L��������������������&��
+����������������������������������������������������������������������������������������������������������������������������������������������	������
+������+�������������������������������������� ��!��"��#��$��%��&��'��(��)��*��+��,��-��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��S��T��U��V��W��X��Y��Z��[��\��]��^��_��`������a��b��c��d��e��f��g��h��i��j��k��l��m��n��o��p��q��r��s��t��u��v��w��x��y��z��{��|��}��~����\x80��\xDB��\x81��\x82��\x83��\x84��\xDD��\x85��\x86��\x87��\x88��\xE3��\x89��\x8A��\xEA��\x8B��\x8C��\xE8��\x8D��\xEB��\xEC��\x8E��\x8F��\xE4��\xE6��\xE5��\xD4��\xE9��\x90��\x91��\xD3��\x92��\x93��\x94��\x95��\x96��\xE7��\xD1��\xED��\xD2��\x97��\x98��\xDE����\x9A��\x9B��\x9C��\xCE��\xCF��\xD5��\xD6��\xD8��\xD9��\x9D��\x9E��\x9F��\xEE��\xA0��\xD0��\xE2��\xA1��\xE0��\xE1����������\xDC��\xA2��\xD7��\xDA��\xDF��\xA3��\xA4��\xA5��\xA6��\xA7��\xA8��\xA9��\xAA��\xAB��\xAC��\xAD������\xAE��\xAF��\xB0��\xB1��\xB2��\xB3��\xB4��\xB5��\xB6��\xB7��\xB8��\xB9��\xBA��\xBB��\xBC��&������N��@������&��~��\xFF1Sx\x92\
 xC7\xC9\xDD\x94\xA9\xBC\xC0     " & 0 : D!"!&"""""""+"H"`"e"\xF2%\xCA\xF0\xFF\xFF������ ��(��\xA01Rx\x92\xC6\xC9\xD8\x94\xA9\xBC\xC0
        & 0 9 D!"!&"""""""+"H"`"d"\xF2%\xCA\xF0��\xFF\xFF\xFF\xE3\xFF\xE2����\xFF\x81\xFF|\xFFX\xFF?����\xFD\xEC����\xFD>\xFD*\xFC\xD3\xFD\xDF\xFF\xE0\xC2����\xE0\xBC\xE0\xBB\xE0\xB8\xE0\xAF\xE0\xA7\xE0\x9E\xDF\xC1߭\xDE\xE2\xDE\xCC\xDE\xD6��������\xDE\xCA޾ޥފއ\xDD\xFB\xDB$\xEF������������J��������������������������������������������������\xFE����������������������������������������������\xEC��\xEE��������������������������������������\x99��\x95��\x82��\x83��\xA1��\x8E��\xBD��\x84��\x8A��\x88��\x90��\x97��\x96��\xC4��\x87��\xB5��\x81��\x8D��\xC7��\xC8��\x89��\x8F��\x85��\xA2��\xB9��\xC6��\x91��\x98��\xCA��\xC9��\xCB��\x94��\x9A��\xA5��\xA3��\x9B��a��b��\x8B��c��\xA7��d��\xA4��\xA6��\xAB��\xA8��\xA9��\xAA��\xBE��e��\xAE��\xAC��\xAD��\x9C��f��\xC5��\x8C��\xB1��\xAF��\xB0��g��\xC0��\xC2��\x86��i��h��j��l��k��m��\x92��n��p��o��q��r��t��s��u��v��\xBF��w��y��x��z��|��{��\x9F��\x93��~��}����\x80��\xC1�
 �\xC3��\xA0��\xB3��\xBC��\xB6��\xB7��\xB8��\xBB��\xB4��\xBA��\x9D��\x9E��\xD7��\xE6��\xC4��\xA2��\xE7��&������N��@������&��~��\xFF1Sx\x92\xC7\xC9\xDD\x94\xA9\xBC\xC0     " &am
 p; 0 : D!"!&"""""""+"H"`"e"\xF2%\xCA\xF0\xFF\xFF������ ��(��\xA01Rx\x92\xC6\xC9\xD8\x94\xA9\xBC\xC0       & 0 9 D!"!&"""""""+"H"`"d"\xF2%\xCA\xF0��\xFF\xFF\xFF\xE3\xFF\xE2����\xFF\x81\xFF|\xFFX\xFF?����\xFD\xEC����\xFD>\xFD*\xFC\xD3\xFD\xDF\xFF\xE0\xC2����\xE0\xBC\xE0\xBB\xE0\xB8\xE0\xAF\xE0\xA7\xE0\x9E\xDF\xC1߭\xDE\xE2\xDE\xCC\xDE\xD6��������\xDE\xCA޾ޥފއ\xDD\xFB\xDB$\xEF������������J��������������������������������������������������\xFE����������������������������������������������\xEC��\xEE��������������������������������������\x99��\x95��\x82��\x83��\xA1��\x8E��\xBD��\x84��\x8A��\x88��\x90��\x97��\x96��\xC4��\x87��\xB5��\x81��\x8D��\xC7��\xC8��\x89��\x8F��\x85��\xA2��\xB9��\xC6��\x91��\x98��\xCA��\xC9��\xCB��\x94��\x9A��\xA5��\xA3��\x9B��a��b��\x8B��c��\xA7��d��\xA4��\xA6��\xAB��\xA8��\xA9��\xAA��\xBE��e��\xAE
 ��\xAC��\xAD��\x9C��f��\xC5��\x8C��\xB1��\xAF��\xB0��g��\xC0��\xC2��\x86��i��h��j��l��k��m��\x92��n��p��o��q��r��t��s��u��v��\xBF��w��y��x��z��|��{��\x9F��\x93��~��}����\x80��\xC1��\xC3
 ��\xA0��\xB3��\xBC��\xB6��\xB7��\xB8��\xBB��\xB4��\xBA��\x9D��\x9E��\xD7��\xE6��\xC4��\xA2��\xE7��������}����k ��������3!%!!}\xEE\xFD\x8F\xF4\xFE \xFC\xE0}&������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\
 xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC
  \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE
 8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC
 ����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ����
 ��!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\x
 FF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8����������1!!\xE8\xFC\xC8��������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC
  \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ��
 ����!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC��������������\xE8 ������!!\xE8\xFC \xFC\xE0����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC�
 ���������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\
 xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\x
 FF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC
  \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8
  ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC��
 ��������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������
 !!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xF
 F8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xF
 C \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8
  ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC
 ����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!
 !\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC����������\xFF8\xE8 ������!!\xE8\xFC \xFC������������������"��0��>��L��Z��h��v��\x84��\x92��\xA0��\xAE��\xBC��\xCA��\xD8��\xE6��\xF4,:HVdr\x80\x8E\x9C\xAA\xB8\xC6\xD4\xE2\xF0\xFE(6DR`n|\x8A\x98\xA6\xB4\xC2\xD0\xDE\xEC\xFA$2@N\jx\x86\x94\xA2\xB0\xBE\xCC\xDA\xE8\xF6 .<JXdr\x80\x8E\x9C\xAA\xB8\xC6\xD4\xE2\xF0\xFE(6DR`n|\x8A\x98\xA6\xB4\xC2\xD0\
 xDE\xEC\xFA$2@N\jx\x86\x94\xA2\xB0\xBE\xCC\xDA\xE8\xF6 .<JXft\x82\x90\x9E
 \xAC\xBA\xC8\xD6\xE4\xF2��*88FTbp~\x8C\x9A\xA8\xB6\xC4\xD2\xE0\xEE\xFC	
+		&	4	B	P	^	l	z	\x88	\x96	\xA4	\xB2	\xC0	\xCE	\xDC	\xEA	\xF8
+
+
+"
+0
+>
+L
+Z
+h
+v
+\x84
+\x92
+\xA0
+\xAE
+\xBC
+\xCA
+\xD8
+\xE6
+\xF4,:HVdr\x80\x8E\x9C\xAA\xB8\xC6\xD4\xE2\xF0\xFE(6DR`n|\x8A\x98\xA6\xB4\xC2\xD0\xDE\xEC\xFA+++$+2������J����������������\x9E��������������������\x9E����������������\xA6���������������� \xB4����������������\xD4����������������\xDC����������������\xF2����������������\xCF\xFA��������������\xC9��������������\xCD��������������\xD4��������������\xE4��������������\xE8��������������\xF3��������������\xF7��������������\xFB������������������	����\x9E����	����\xA4����	����\xAC����	���� \xBA����	����\xDA����	����\xE2����	����\xF8����	����������	��������	������M��o��s��t�� ��c��h��a��r��a��c��t��e��r��s�� ��a��r��e�� ��t��h��e�� ��e��m�� ��s��q��u��a��r��e��,�� ��e��x��c��e��p��t�� ��&��E��A��c��u��t��e�� ��a��n��d�� ��"��p��"��,�� ��w��h��i��c��h�� ��s��h��o��w�� ��a��s��c��e��n��t��/��d��e��s��c��e��n��t�� ��f��r��o�
 �m�� ��t��h��e�� ��b��a��s��e��l��i��n��e��.�� ��U��s��e��f��u��l�� ��f��o��r�� ��t��e��s��t��i��n��g�� ��c��o��m��p��o��s��i��t��i��o��n�� ��s��y��s��t��e��m��s��.�� ��P��r��o��d��u��c��e��d�� ��b��y�� ��T��o��d��d�� ��F��a��h��r��n��e��r�� ��f��o��r�� ��t��h��e�� ��C��S��S�� ��S��a��m��u��r��a��i��'��s�� ��b��r��o��w��s��e��r�� ��t��e��s��t��i��n��g��.��A��h��e��m��R��e��g��u��l��a
 ��r��V��e��r��s��i��o��n�� ��1��.��1�� ��A��h��e��m��A��h��e��m��V��e��r��s��i��o��n�� ��1��.��1��A��h��e��mMost characters are the em square, except &EAcute and "p", which show ascent/descent from the baseline. Useful for testing composition systems. Produced by Todd Fahrner for the CSS Samurai's browser testing.AhemRegularVersion 1.1 AhemAhemVersion 1.1AhemAhemRegularAhem��M��o��s��t�� ��c��h��a��r��a��c��t��e��r��s�� ��a��r��e�� ��t��h��e�� ��e��m�� ��s��q��u��a��r��e��,�� ��e��x��c��e��p��t�� ��&��E��A��c��u��t��e�� ��a��n��d�� ��"��p��"��,�� ��w��h��i��c��h�� ��s��h��o��w�� ��a��s��c��e��n��t��/��d��e��s��c��e��n��t�� ��f��r��o��m�� ��t��h��e�� ��b��a��s��e��l��i��n��e��.�� ��U��s��e��f��u��l�� ��f��o��r�� ��t��e��s��t��i��n��g�� ��c��o��m��p��o��s��i��t��i��o��n�� ��s��y��s��t��e��m��s��.�� ��P��r��o��d��u��c��e��d�� ��b��y�� ��T��o��d��d�� ��F��a��h��r��n��e��r�� ��f��o��r�� ��t��h��e�� ��C��S��S�� ��S��a��m��u��r��a��i��'��s�� ��b��r��o��w��s��e��
 r�� ��t��e��s��t��i��n��g��.��A��h��e��m��R��e��g��u��l��a��r��V��e��r��s��i��o��n�� ��1��.��1�� ��A��h��e��m��A��h��e��m��V��e��r��s��i��o��n�� ��1��.��1��A��h��e��m��A��h��e��m��R��e��g��u��l��a��r��A��h��e��m��������������\xFF{������������������������������������������\xF5��������������������	������+��������������������������
 ������������ ��!��"��#��$��%��&��'��(��)��*��+��,��-��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��?��@��A��B��C��D��E��F��G��H��I��J��K��L��M��N��O��P��Q��R��S��T��U��V��W��X��Y��Z��[��\��]��^��_��`��a��b��c��d��e��f��g��h��i��j��k��l��m��n��o��p��q��r��s��t��u��v��w��x��y��z��{��|��}��~����\x80��\x81��\x83��\x84��\x85��\x86��\x88��\x89��\x8A��\x8B��\x8D��\x8E��\x90��\x91��\x93��\x96��\x97��\x9D��\x9E��\xA0��\xA1��\xA2��\xA3��\xA4��\xA9��\xAA��\xAC��\xAD��\xAE��\xAF��\xB6��\xB7��\xB8��\xBA��\xBD��\xC3��\xC7��\xC8��\xC9��\xCA��\xCB��\xCC��\xCD��\xCE��\xCF��\xD0��\xD1��\xD3��\xD4��\xD5��\xD6��\xD7��\xD8��\xD9��\xDA��\xDB��\xDC��\xDD��\xDE��\xDF��\xE0��\xE1��\xE8��\xE9��\xEA��\xEB��\xEC��\xED��\xEE��\xEF��\xF0��\xF1��\xF2��\xF3��\xF4��\xF5��\xF6����������\xB0��\xB1��\xBB��\xA6��\xA8��\x9F��\x9B��\xB2��\xB3��\xC4��\xB4��\xB5��\xC5��\x82��\xC2��\x87��\xAB��\xC6��\xBE��\xBF��\xBC��\x8C��\x98��\x9A��\x99��\xA5��\x92��\x9C��\x8F��\x94��\x95��\xA7��\xB9��\xD2��\xC
 0��\xC1��NULLHTDEL��������������\xFF\xFF��
\ No newline at end of file

Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpaceOnly.otf (0 => 263527)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpaceOnly.otf	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpaceOnly.otf	2020-06-25 20:37:34 UTC (rev 263527)
@@ -0,0 +1,5 @@
+OTTO����\x80����@CFF \xBCP\x8D����\x88������\xE9DSIG����������t������FFTMdYDN����|������OS/2U\xFF_\xDA����0������`PfEd\xD1\xCC{\xB3����\x98������,cmap��+\xC6����$����Bhead\xF9\xEE}������\xCC������6hhea|#����������$hmtx\xD0��������\xC4������maxp��P������(������name\xB0\xCB
+	����\x90����\x91post\xFF\x86��3����h������ ������������\xB9\x9DI_<\xF5��\xE8��������\xCDg\xECL��������\xCDg\xECL������������������������������������������ \xFF8��Z\xE8������������������������������������������������P����������\xE8\xF4������\x8A\xBC������\x8C\x8A\xBC����\xE0��1������	������������������������������������������PfEd��\xC0�� ��  \xFF8��Z�������������������������������� �� ����������\xAE����������������D��\x8A��������������	��\xE3����������������\xFB��������������%N��������������	\x88��������������\xB4��������������	\xD9����	������\x88��������	������\xCF����	������\xED����	����J����	����t����	���� \x92����	����\xC5��C��r��e��a��t��e��d�� ��b��y�� ��X��i��a��n��z��h��u�� ��W��a��n��g�� ��w��i��t��h�� ��F��o��n��t��F��o��r��g��e�� ��2��.��0�� ��(��h��t��t��p��:��/��/��f��o��n��t��f��o��r��g��e��.��s��f��.��n��e��t��)����Created by Xianzhu Wang with FontForge 2.0 (http://fontforge.s
 f.net)����U��n��t��i��t��l��e��d��1����Untitled1����M��e��d��i��u��m����Medium����F��o��n��t��F��o��r��g��e�� ��2��.��0�� ��:�� ��U��n��t��i��t��l��e��d��1�� ��:�� ��1��4��-��3��-��2��0��1��3����FontForge 2.0 : Untitled1 : 14-3-2013����U��n��t��i��t��l��e��d��1����Untitled1����V��e��r��s��i��o��n�� ��0��0��1��.��0��0��0�� ����Version 001.000 ����U��n��t��i��t��l��e��d��1����Untitled1����������������
 ����������������������<�������������� ���������������� \xFF\xFF������ \xFF\xFF\xFF\xE1����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\xFF\x83��2������������������������������������������
+Untitled1������+\xF8��\xF8\xF8\xF8\xF8\x8C\x8B\x8B\x8B\x8B��\xA6������\xA9����\xE1������E��N��WCreated by Xianzhu Wang with FontForge 2.0 (http://fontforge.sf.net)Untitled1Untitled1����������"3\x8B\xBD\xF8E\xBD\xBD\xBD\xF9\xB4\xBD\xBD\xFA\xF8\xA9\xFE\xBD\xFCw\xF8E\xF9\xB4\xFCE\xFFt\xFF\xFC\xF9a\xFF\xFEt��\xFC\xFE\xFA|\x8B\x8B
+����������������������������������ɉo1��������\xCDg\xE91��������\xCDg\xEB\xEB������������fcmt����������2013-3-14: Created.����������\xE8����\xE8����
\ No newline at end of file

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm (263526 => 263527)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm	2020-06-25 20:28:09 UTC (rev 263526)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm	2020-06-25 20:37:34 UTC (rev 263527)
@@ -1002,6 +1002,52 @@
     EXPECT_STREQ("five", items[1].tokens[1].content.UTF8String);
 }
 
+TEST(TextManipulation, StartTextManipulationExcludesTextRenderedAsIcons)
+{
+    auto delegate = adoptNS([[TextManipulationDelegate alloc] init]);
+    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 400, 400)]);
+    [webView _setTextManipulationDelegate:delegate.get()];
+    [webView synchronouslyLoadHTMLString:@"<!DOCTYPE html>"
+        "<head>"
+        "<style>"
+        "@font-face {"
+        "    font-family: Ahem;"
+        "    src: url(Ahem.ttf);"
+        "}"
+        "@font-face {"
+        "    font-family: SpaceOnly;"
+        "    src: url(SpaceOnly.otf);"
+        "}"
+        ".Ahem { font-family: Ahem; }"
+        ".SpaceOnly { font-family: SpaceOnly; }"
+        ".Missing { font-family: Missing; }"
+        ".SystemUI { font-family: system-ui; }"
+        "</style>"
+        "</head>"
+        "<body>"
+        "<span class='Ahem'>one</span><span class='SpaceOnly'>two</span><span class='Missing'>three</span><span class='SystemUI'>four</span>"
+        "</body>"];
+
+    done = false;
+    [webView _startTextManipulationsWithConfiguration:nil completion:^{
+        done = true;
+    }];
+    TestWebKitAPI::Util::run(&done);
+
+    auto items = [delegate items];
+    EXPECT_EQ(items.count, 1UL);
+    auto item = items.firstObject;
+    EXPECT_EQ(item.tokens.count, 4UL);
+    EXPECT_WK_STREQ(item.tokens[0].content, "one");
+    EXPECT_FALSE(item.tokens[0].isExcluded);
+    EXPECT_WK_STREQ(item.tokens[1].content, "two");
+    EXPECT_TRUE(item.tokens[1].isExcluded);
+    EXPECT_WK_STREQ(item.tokens[2].content, "three");
+    EXPECT_FALSE(item.tokens[2].isExcluded);
+    EXPECT_WK_STREQ(item.tokens[3].content, "four");
+    EXPECT_FALSE(item.tokens[3].isExcluded);
+}
+
 struct Token {
     NSString *identifier;
     NSString *content;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to