Log Message
Make FontWithFeatures test font pass OTS https://bugs.webkit.org/show_bug.cgi?id=169788
Reviewed by Tim Horton. Tools: OTS, or the OpenType Sanitizer, is a check which tells if fonts are properly formed. Previously, our FontWithFeatures test font did not pass this check. This patch updates the font to pass the checks. Now, we can use this font on other platforms, and contribute the font to the W3C for testing the CSS Fonts level 3 spec. * FontWithFeatures/FontWithFeatures/FontCreator.cpp: (Generator::appendCFFTable): (Generator::Feature::operator<): (Generator::appendGSUBTable): (Generator::appendOS2Table): (Generator::appendFormat4CMAPTable): (Generator::appendHEADTable): (Generator::appendHHEATable): (Generator::NameRecord::operator<): (Generator::appendNameSubtable): (Generator::appendNAMETable): LayoutTests: Updated font to the one which passes the tests. * css3/resources/FontWithFeatures.otf:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (215080 => 215081)
--- trunk/LayoutTests/ChangeLog 2017-04-07 00:53:31 UTC (rev 215080)
+++ trunk/LayoutTests/ChangeLog 2017-04-07 00:59:57 UTC (rev 215081)
@@ -1,3 +1,14 @@
+2017-04-06 Myles C. Maxfield <mmaxfi...@apple.com>
+
+ Make FontWithFeatures test font pass OTS
+ https://bugs.webkit.org/show_bug.cgi?id=169788
+
+ Reviewed by Tim Horton.
+
+ Updated font to the one which passes the tests.
+
+ * css3/resources/FontWithFeatures.otf:
+
2017-04-06 Jiewen Tan <jiewen_...@apple.com>
LayoutTest crypto/subtle/aes-ctr-encrypt-malformed-parameters.html is a flaky failure
Modified: trunk/LayoutTests/css3/resources/FontWithFeatures.otf (215080 => 215081)
--- trunk/LayoutTests/css3/resources/FontWithFeatures.otf 2017-04-07 00:53:31 UTC (rev 215080)
+++ trunk/LayoutTests/css3/resources/FontWithFeatures.otf 2017-04-07 00:59:57 UTC (rev 215081)
@@ -1,5 +1,5 @@
OTTO
-\x80 CFF Vy\xD6\xEB\xAC"OGSUBä»…."\xFC\xBAOS/2H\xE0Yb'\xB8dcmap\xD5\xAF(jheadeD\xF9(\x886hheag7(\xC0$hmtx\xD4\x86(\xE4\xD4maxpk)\xB8 name\xD9u/\xEA)\xD8|post8T FontWithFeaturesOTF9\x87\x87\x85\xEEFontWithFeaturesOTF
+\x80 CFF Vy\xD6\xEA\xAC"OGSUB45\xE9"\xFC\xBAOS/2H\xE0Y`'\xB8dcmap\xD5\xB1(lheadeD\xF8(\x886hheah5(\xC0$hmtx\xD4\x86(\xE4\xD4maxpk)\xB8 name\xD7\xF0/w)\xD8|post8T FontWithFeaturesOTF9\x87\x87\xFF\xFF\xFF\xFF\x85\xEEFontWithFeaturesOTF
!"#$%&'()*+,-./012345I\xA7G\xE7\x87'\xC7g\xA7G\xE7\x87'\xC7 g
@@ -8,18 +8,18 @@
\xC7g\xA7G\xE7\x87'\xC7g\xA7G\xE7\x87'\xC7g\xA7G\xE7\x87'\xC7g\xA7G\xE7 \x87\xFF\xFF\xFF\xFF\xC8\xFF\xC8\xFF\xFFX\xFFX\xFF\xFF\xFF\xFD\xA8\xFF\xFD\xA8\xFF\xFF\xFF\xFF\xFF\xC8\xFF\xF4\xFF2\xFF2\xFF\xFA\xFF\xFF\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFE>\xFF\xFE>\xFF\xFE\xD4\xFF,\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE
\xFF\xF
F\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xF
F\xFEp
\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90
\xFF\xF
Ep\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xF
Ep\xF
F\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE
\xFF2
\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90
\xFF\x
90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\x
FEp\xF
F\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\x
FF2\x
FF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF
\x90\
xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp
\xFF
\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\x
FF\
xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\
xFF&
;\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x
90\xFF
\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xF
F2\xF
F\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE
\xFF\xF
Ep\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xF
Ep\xF
F\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp\xFF\xFF\xFF\xFF\xF4\xFF&\xFF\x90\xFF\x90\xFF2\xFF\xFF\xCE\xFF\xFEp\xFF\xFEp\xFF\x90\xF
F\xFEp
\xFF\xFF\xCE\xFF\xFF\xCE\xFF\xFEp\xFF\x90\xFF\xFEp\xFF\xFEp\xFF\xFF\xCE\xFF2\xFF\x90\xFF\x90\xFF\xFEp\xFF\x90\xFF2\xFF2\xFF\x90\xFF\xFEp
Z\xD0DFLT\xFF\xFF
-liga\xBCclig\xC2dlig\xC8hlig\xCEcalt\xD4subs\xDAsups\xE0smcp\xE6c2sc\xECpcap\xF2c2pc\xF8unic\xFEtitllnum
-onumpnumtnumfrac"afrc(ordn.zero4hist:jp78@jp83Fjp90Ljp04RsmplXtrad^fwiddpwidjrubyp
+afrc\xBCc2pc\xC2c2sc\xC8calt\xCEclig\xD4dlig\xDAfrac\xE0fwid\xE6hist\xEChlig\xF2jp04\xF8jp78\xFEjp83jp90
+ligalnumonumordn"pcap(pnum.pwid4ruby:smcp@smplFsubsLsupsRtitlXtnum^traddunicjzerop
@HPX`hpx\x80\x88\x90\x98\xA0\xA8\xB0\xB8\xC0\xC8\xD0\xD8\xE0\xE8\xF0\xF8 (0\xF8\xFE
-"(.4:@FLRX^djpv|\x82\x88\x8E\x94\x9A\xA0\xA6\xAC
-
- !\xF4TKBW\xFF\xFFf\xFF\xFC\xFF\xFF \xFF\xFFD
-(AZaz&Zz\xFF\xFFAa\xFF\xFF\xFF\xDA\xFF\xA0^\xF7w`_<\xF5f5\xC8\xC82222222222222222222222222222222222222222222222222225\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF5B&&&&L&r\x98&\x9E\xC44\xE0<6P>\x860\xC42\xF4<& >b.<\xA0
-2\xDC>@L
-*\x8C*\xB6$\xE0$+"(J*f6\x908\xC6\xFE*6D8z\xB2*\xD0\xFA"\xFE* (Jr *\x90!2\xBA"2\xEC#$$*B%8l&4\xA4'\xD8(*\xF4)4*4R,,\x86-,\xB2/&\xDE0* 14 .24 b34 \x9644 \xCA5: \xFE6<
+"(.4:@FLRX^djpv|\x82\x88\x8E\x94\x9A\xA0\xA6\xAC
+ !
+ \xF4TKBW\xFF\xFF\xFF\xFFf\xFF\xFC\xFF\xFF \xFF\xFFD
+(AZaz(Zz\xFF\xFFAa\xFF\xFF\xFF\xDA\xFF\xA0\xC3t\xD6_<\xF5\xFF\xFF\xFF\xFFf5\xC8\xC82222222222222222222222222222222222222222222222222225\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF5B&&&&L&r\x98&\x9E\xC44\xE0<6P>\x860\xC42\xF4<& >b
+2\xA0>\xD2@
+*P*z$\xA4$\xC8\xEC*2*N6x6\xAE8\xE48T*r\x9C"\xA0*\xC2(\xEC *2!2\"2\x8E#$\xC0$*\xE4%8&4F'z(*\x96)4\xC0*4\xF4+"(,,J-,v.<\xA2/&\xDE0* 14 .24 b34 \x9644 \xCA5: \xFE6<
87
t8*
\x949.
\xBE:2
-\xEC;<&8FontWithFeaturesOTFFontWithFeaturesOTFFontWithFeaturesOTFFontWithFeaturesOTF1.0FontWithFeaturesOTFkLigaturesTypekCommonLigaturesOnSelectorkContextualLigaturesOnSelectorkCommonLigaturesOffSelectorkContextualLigaturesOffSelectorkRareLigaturesOnSelectorkRareLigaturesOffSelectorkHistoricalLigaturesOnSelectorkHistoricalLigaturesOffSelectorkHistoricalLigaturesOnSelectorkContextualAlternatesTypekContextualAlternatesOnSelectorkContextualAlternatesOffSelectorkVerticalPosition
Type
defaultUnusedSelectorkInferiorsSelectorkSuperiorsSelectorkOrdinalsSelectorkLowerCaseTypedefaultUnusedSelectorkLowerCaseSmallCapsSelectorkLowerCasePetiteCapsSelectorkUpperCaseTypedefaultUnusedSelectorkUpperCaseSmallCapsSelectorkUpperCasePetiteCapsSelectorkLetterCaseTypedefaultUnusedSelector14kStyleOptionsTypedefaultUnusedSelectorkTitlingCapsSelectorkNumberCaseTypedefaultUnusedSelectorkUpperCaseNumbersSelectorkLowerCaseNumbersSelectorkNumberSpacingTypedefaultUnusedSelectorkProportionalNumber
sSel
ectorkMonospacedNumbersSelectorkFractionsTypedefaultUnusedSelectorkDiagonalFractionsSelectorkVerticalFractionsSelectorkTypographicExtrasTypekSlashedZeroOnSelectorkCharacterShapeTypedefaultUnusedSelectorkJIS1978CharactersSelectorkJIS1983CharactersSelectorkJIS1990CharactersSelectorkJIS2004CharactersSelectorkSimplifiedCharactersSelectorkTraditionalCharactersSelectorkTextSpacingTypedefaultUnusedSelectorkMonospacedTextSelectorkProportionalTextSelectorkRubyKanaTypekRubyKanaOnSelector
\ No newline at end of file
+\xEC;<&8FontWithFeaturesOTFFontWithFeaturesOTFFontWithFeaturesOTFFontWithFeaturesOTF1.0FontWithFeaturesOTFkLigaturesTypekCommonLigaturesOnSelectorkContextualLigaturesOnSelectorkCommonLigaturesOffSelectorkContextualLigaturesOffSelectorkRareLigaturesOnSelectorkRareLigaturesOffSelectorkHistoricalLigaturesOnSelectorkHistoricalLigaturesOffSelectorkContextualAlternatesTypekContextualAlternatesOnSelectorkContextualAlternatesOffSelectorkVerticalPositionTypedefaultUnusedSelectorkInfe
rior
sSelectorkSuperiorsSelectorkLowerCaseTypedefaultUnusedSelectorkUpperCaseTypedefaultUnusedSelectorkLowerCaseSmallCapsSelectorkUpperCaseSmallCapsSelectorkLowerCasePetiteCapsSelectorkUpperCasePetiteCapsSelectorkLetterCaseTypedefaultUnusedSelector14kStyleOptionsTypedefaultUnusedSelectorkTitlingCapsSelectorkNumberCaseTypedefaultUnusedSelectorkUpperCaseNumbersSelectorkLowerCaseNumbersSelectorkNumberSpacingTypedefaultUnusedSelectorkProportionalNumbersSelectorkMonospacedNumbersSelectorkFractionsTy
pede
faultUnusedSelectorkDiagonalFractionsSelectorkVerticalFractionsSelectorkOrdinalsSelectorkTypographicExtrasTypekSlashedZeroOnSelectorkHistoricalLigaturesOnSelectorkCharacterShapeTypedefaultUnusedSelectorkJIS1978CharactersSelectorkJIS1983CharactersSelectorkJIS1990CharactersSelectorkJIS2004CharactersSelectorkSimplifiedCharactersSelectorkTraditionalCharactersSelectorkTextSpacingTypedefaultUnusedSelectorkMonospacedTextSelectorkProportionalTextSelectorkRubyKanaTypekRubyKanaOnSelector
\ No newline at end of file
Modified: trunk/Tools/ChangeLog (215080 => 215081)
--- trunk/Tools/ChangeLog 2017-04-07 00:53:31 UTC (rev 215080)
+++ trunk/Tools/ChangeLog 2017-04-07 00:59:57 UTC (rev 215081)
@@ -1,3 +1,27 @@
+2017-04-06 Myles C. Maxfield <mmaxfi...@apple.com>
+
+ Make FontWithFeatures test font pass OTS
+ https://bugs.webkit.org/show_bug.cgi?id=169788
+
+ Reviewed by Tim Horton.
+
+ OTS, or the OpenType Sanitizer, is a check which tells if fonts are properly formed.
+ Previously, our FontWithFeatures test font did not pass this check. This patch updates
+ the font to pass the checks. Now, we can use this font on other platforms, and
+ contribute the font to the W3C for testing the CSS Fonts level 3 spec.
+
+ * FontWithFeatures/FontWithFeatures/FontCreator.cpp:
+ (Generator::appendCFFTable):
+ (Generator::Feature::operator<):
+ (Generator::appendGSUBTable):
+ (Generator::appendOS2Table):
+ (Generator::appendFormat4CMAPTable):
+ (Generator::appendHEADTable):
+ (Generator::appendHHEATable):
+ (Generator::NameRecord::operator<):
+ (Generator::appendNameSubtable):
+ (Generator::appendNAMETable):
+
2017-04-06 Alexey Proskuryakov <a...@apple.com>
Disable flaky WebKit2.ResizeWithHiddenContentDoesNotHang
Modified: trunk/Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp (215080 => 215081)
--- trunk/Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp 2017-04-07 00:53:31 UTC (rev 215080)
+++ trunk/Tools/FontWithFeatures/FontWithFeatures/FontCreator.cpp 2017-04-07 00:59:57 UTC (rev 215081)
@@ -612,7 +612,7 @@
result.push_back(operand32Bit);
append32(clampTo<int32_t>(0)); // Bounding box x
result.push_back(operand32Bit);
- append32(clampTo<int32_t>(0)); // Bounding box y
+ append32(clampTo<int32_t>(-1)); // Bounding box y
result.push_back(operand32Bit);
append32(clampTo<int32_t>(unitsPerEm)); // Bounding box max x
result.push_back(operand32Bit);
@@ -821,9 +821,20 @@
append16(i); // Features indices
}
+ struct Feature {
+ bool operator<(const Feature& o) const
+ {
+ return tag < o.tag;
+ }
+
+ std::array<char, 5> tag;
+ uint16_t glyphToReplace;
+ };
+
void appendGSUBTable()
{
- std::vector<std::array<char, 5>> features {{"liga"}, {"clig"}, {"dlig"}, {"hlig"}, {"calt"}, {"subs"}, {"sups"}, {"smcp"}, {"c2sc"}, {"pcap"}, {"c2pc"}, {"unic"}, {"titl"}, {"lnum"}, {"onum"}, {"pnum"}, {"tnum"}, {"frac"}, {"afrc"}, {"ordn"}, {"zero"}, {"hist"}, {"jp78"}, {"jp83"}, {"jp90"}, {"jp04"}, {"smpl"}, {"trad"}, {"fwid"}, {"pwid"}, {"ruby"}};
+ std::vector<Feature> features {{{"liga"}, 3}, {{"clig"}, 4}, {{"dlig"}, 5}, {{"hlig"}, 6}, {{"calt"}, 7}, {{"subs"}, 8}, {{"sups"}, 9}, {{"smcp"}, 10}, {{"c2sc"}, 11}, {{"pcap"}, 12}, {{"c2pc"}, 13}, {{"unic"}, 14}, {{"titl"}, 15}, {{"lnum"}, 16}, {{"onum"}, 17}, {{"pnum"}, 18}, {{"tnum"}, 19}, {{"frac"}, 20}, {{"afrc"}, 21}, {{"ordn"}, 22}, {{"zero"}, 23}, {{"hist"}, 24}, {{"jp78"}, 25}, {{"jp83"}, 26}, {{"jp90"}, 27}, {{"jp04"}, 28}, {{"smpl"}, 29}, {{"trad"}, 30}, {{"fwid"}, 31}, {{"pwid"}, 32}, {{"ruby"}, 33}};
+ std::sort(features.begin(), features.end());
auto tableLocation = result.size();
auto headerSize = 10;
@@ -850,7 +861,7 @@
append16(features.size()); // FeatureCount
for (unsigned i = 0; i < features.size(); ++i) {
auto& code = features[i];
- append32BitCode(code.data()); // Feature name
+ append32BitCode(code.tag.data()); // Feature name
append16(featureListSize + featureTableSize * i); // Offset of feature table, relative to beginning of FeatureList table
}
assert(featureListLocation + featureListSize == result.size());
@@ -880,7 +891,7 @@
}
for (unsigned i = 0; i < features.size(); ++i)
- appendSubstitutionSubtable(subtableRecordLocations[i], 3 + i, 1);
+ appendSubstitutionSubtable(subtableRecordLocations[i], features[i].glyphToReplace, 1);
}
void appendOS2Table()
@@ -913,10 +924,10 @@
append16(0); // First unicode index
append16(0xFFFF); // Last unicode index
append16(clampTo<int16_t>(unitsPerEm)); // Typographical ascender
- append16(clampTo<int16_t>(1)); // Typographical descender
+ append16(clampTo<int16_t>(-1)); // Typographical descender
append16(clampTo<int16_t>(unitsPerEm / 10)); // Typographical line gap
append16(clampTo<uint16_t>(unitsPerEm)); // Windows-specific ascent
- append16(clampTo<uint16_t>(1)); // Windows-specific descent
+ append16(clampTo<uint16_t>(0)); // Windows-specific descent
append32(0xFF10FC07); // Bitmask for supported codepages (Part 1). Report all pages as supported.
append32(0x0000FFFF); // Bitmask for supported codepages (Part 2). Report all pages as supported.
append16(clampTo<int16_t>(unitsPerEm / 2)); // x-height
@@ -979,6 +990,7 @@
// idRangeOffset
append16(0); // idRangeOffset
append16(0);
+ append16(0);
// Fonts strive to hold 2^16 glyphs, but with the current encoding scheme, we write 8 bytes per codepoint into this subtable.
// Because the size of this subtable must be represented as a 16-bit number, we are limiting the number of glyphs we support to 2^13.
@@ -1024,7 +1036,7 @@
append32(0); // First half of modification date
append32(0); // Last half of modification date
append16(clampTo<int16_t>(0)); // bounding box x
- append16(clampTo<int16_t>(0)); // bounding box y
+ append16(clampTo<int16_t>(-1)); // bounding box y
append16(clampTo<int16_t>(unitsPerEm)); // bounding box max x
append16(clampTo<int16_t>(unitsPerEm)); // bounding box max y
append16(0); // Traits
@@ -1038,7 +1050,7 @@
{
append32(0x00010000); // Version
append16(clampTo<int16_t>(unitsPerEm)); // ascent
- append16(clampTo<int16_t>(1)); // descent
+ append16(clampTo<int16_t>(-1)); // descent
// WebKit SVG font rendering has hard coded the line gap to be 1/10th of the font size since 2008 (see r29719).
append16(clampTo<int16_t>(unitsPerEm / 10)); // line gap
append16(clampTo<uint16_t>(unitsPerEm)); // advance width max
@@ -1082,15 +1094,25 @@
append16(0); // No compound glyphs
}
- void appendNameSubtable(const std::string& s, uint16_t nameIdentifier)
+ struct NameRecord {
+ bool operator<(const NameRecord& o) const
+ {
+ return nameIdentifier < o.nameIdentifier;
+ }
+
+ uint16_t nameIdentifier;
+ std::string value;
+ };
+
+ void appendNameSubtable(const NameRecord& nameRecord)
{
append16(0); // Unicode
append16(3); // Unicode version 2.0 or later
append16(0); // Language
- append16(nameIdentifier); // Name identifier
- append16(s.length() * 2); // Code units get 2 bytes each
+ append16(nameRecord.nameIdentifier); // Name identifier
+ append16(nameRecord.value.length() * 2); // Code units get 2 bytes each
append16(m_nameOffset); // Offset into name data
- m_nameOffset += s.size() * 2; // Code units get 2 bytes each
+ m_nameOffset += nameRecord.value.size() * 2; // Code units get 2 bytes each
}
void append2ByteASCIIString(std::string& s)
@@ -1109,29 +1131,19 @@
append16(numberOfRecords); // Number of name records in table
append16(6 + 12 * numberOfRecords); // Offset in bytes to the beginning of name character strings
- appendNameSubtable(familyName, 1); // 1: Font Family.
- appendNameSubtable(familyName, 2); // 2: Font Subfamily.
- appendNameSubtable(familyName, 3); // 3: Unique subfamily identification.
- appendNameSubtable(familyName, 4); // 4: Full name of the font.
- appendNameSubtable(version, 5); // 5: Version of the name table.
- appendNameSubtable(familyName, 6); // 6: PostScript name of the font.
+ std::vector<NameRecord> nameRecords = { { 1, familyName }, { 2, familyName }, { 3, familyName }, { 4, familyName }, { 5, version }, { 6, familyName } };
for (FeatureType& type : featureDescription) {
- appendNameSubtable(type.name, m_baseStringIndex + type.stringIndex);
+ nameRecords.push_back({ static_cast<uint16_t>(m_baseStringIndex + type.stringIndex), type.name });
for (FeatureSelector& selector : type.selectors)
- appendNameSubtable(selector.name, m_baseStringIndex + selector.stringIndex);
+ nameRecords.push_back({ static_cast<uint16_t>(m_baseStringIndex + selector.stringIndex), selector.name });
}
+ std::sort(nameRecords.begin(), nameRecords.end());
- append2ByteASCIIString(familyName);
- append2ByteASCIIString(familyName);
- append2ByteASCIIString(familyName);
- append2ByteASCIIString(familyName);
- append2ByteASCIIString(version);
- append2ByteASCIIString(familyName);
- for (FeatureType& type : featureDescription) {
- append2ByteASCIIString(type.name);
- for (FeatureSelector& selector : type.selectors)
- append2ByteASCIIString(selector.name);
- }
+ for (auto& nameRecord : nameRecords)
+ appendNameSubtable(nameRecord);
+
+ for (auto& nameRecord : nameRecords)
+ append2ByteASCIIString(nameRecord.value);
}
void appendPOSTTable()
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes