<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[213464] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/213464">213464</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2017-03-06 13:40:31 -0800 (Mon, 06 Mar 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Expand font-weight and font-stretch to take any number
https://bugs.webkit.org/show_bug.cgi?id=168889

Reviewed by Simon Fraser.

Source/WebCore:

This patch expands parsing support for font-weight and font-stretch so that they can accept
numbers in addition to the keyword values they accepted previously. Eventually, these numbers
will be used as inputs to select variation fonts; however, in this patch, the values are just
parsed and held in our internal data model. This means that this patch doesn't actually change
the general behavior of WebKit; instead, it parses new values, outputs them (via
getComputedStyle() and similar functions), and provides them as input to our preexisting font
selection algorithm.

This patch doesn't actually modify anything algorithmically, and therefore, it doesn't include
any additional tests for the font selection algorithm. Instead, it tests the parsing of the
newly accepted values (both input and output).

Because our internal data model needs to hold numbers now, this patch also completely eliminates
the FontWidth, FontItalic, and FontTraitsMask enum values in favor of FontSelectionValues (which
can hold numbers instead of individual enum values). Therefore, every place which we were using
these enum values is migrated in this patch to using FontSelectionValues instead.

Tests: fast/text/font-selection-font-face-parse.html
       fast/text/font-selection-font-loading-api-parse.html
       fast/text/font-style-parse.html
       fast/text/font-weight-parse.html

* accessibility/AccessibilityRenderObject.cpp: Migrate off of old enum types.
(WebCore::AccessibilityRenderObject::hasBoldFont):
(WebCore::AccessibilityRenderObject::hasItalicFont):
(WebCore::AccessibilityRenderObject::hasPlainText):
* accessibility/atk/WebKitAccessibleInterfaceText.cpp: Ditto.
(getAttributeSetForAccessibilityObject):
* css/CSSComputedStyleDeclaration.cpp: Output newly parsed values.
(WebCore::fontWeightFromStyle):
(WebCore::fontStretchFromStyle):
(WebCore::fontStyleFromStyle):
(WebCore::fontShorthandValueForSelectionProperties):
(WebCore::ComputedStyleExtractor::propertyValue):
* css/CSSFontFace.cpp: Migrate off old enum types.
(WebCore::calculateWeightRange):
(WebCore::CSSFontFace::setWeight):
(WebCore::calculateStretchRange):
(WebCore::CSSFontFace::setStretch):
(WebCore::calculateStyleRange):
(WebCore::CSSFontFace::setStyle):
(WebCore::CSSFontFace::calculateStyleMask): Deleted.
(WebCore::CSSFontFace::calculateWeightMask): Deleted.
(WebCore::CSSFontFace::calculateStretch): Deleted.
* css/CSSFontFace.h:
* css/CSSFontFaceSet.cpp: Migrate off old enum types.
(WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
(WebCore::calculateWeightValue):
(WebCore::calculateStretchValue):
(WebCore::calculateStyleValue):
(WebCore::computeFontSelectionRequest):
(WebCore::CSSFontFaceSet::matchingFaces):
(WebCore::CSSFontFaceSet::fontFace):
(WebCore::computeFontTraitsMask): Deleted.
(WebCore::computeFontStretch): Deleted.
* css/CSSFontFaceSet.h:
* css/CSSFontSelector.cpp: Migrate off old enum types.
(WebCore::CSSFontSelector::fontRangesForFamily):
* css/CSSPrimitiveValueMappings.h: font-weight and font-style are no longer
keyword properties.
(WebCore::CSSPrimitiveValue::operator FontWeight): Deleted.
(WebCore::CSSPrimitiveValue::operator FontItalic): Deleted.
* css/CSSProperties.json: Use the same infrastructure for all three of the
font selection properties.
* css/CSSSegmentedFontFace.cpp: Migrate off old enum types.
(WebCore::CSSSegmentedFontFace::fontRanges):
* css/CSSValueKeywords.in: The 100-based font-weight values are now represented
as real numbers.
* css/FontFace.cpp: Update the string output functions for the new values.
(WebCore::rangeIsSingleValue):
(WebCore::FontFace::style):
(WebCore::FontFace::weight):
(WebCore::FontFace::stretch):
* css/StyleBuilderConverter.h: Use CSSValue conversion functions to convert
to our new data model.
(WebCore::StyleBuilderConverter::convertFontWeight):
(WebCore::StyleBuilderConverter::convertFontStretch):
(WebCore::StyleBuilderConverter::convertFontStyle):
* css/StyleBuilderCustom.h: font-weight is no longer a completely custom
property.
(WebCore::StyleBuilderCustom::applyInitialFontWeight): Deleted.
(WebCore::StyleBuilderCustom::applyInheritFontWeight): Deleted.
(WebCore::StyleBuilderCustom::applyValueFontWeight): Deleted.
* css/parser/CSSParserFastPaths.cpp: font-style is no longer a keyword property.
(WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
(WebCore::CSSParserFastPaths::isKeywordPropertyID):
* css/parser/CSSPropertyParser.cpp: Parse the new values in the font selection
properties.
(WebCore::consumeFontWeightKeywordValue):
(WebCore::consumeFontWeightCSS21):
(WebCore::consumeFontWeight):
(WebCore::consumeFontStyleKeywordValue):
(WebCore::consumeFontStyle):
(WebCore::CSSPropertyParser::parseSingleValue):
(WebCore::CSSPropertyParser::parseFontFaceDescriptor):
(WebCore::CSSPropertyParser::consumeSystemFont):
(WebCore::CSSPropertyParser::consumeFont):
* editing/EditingStyle.cpp: Migrate off old enum types.
(WebCore::fontWeightIsBold):
* editing/mac/EditorMac.mm: Ditto.
(WebCore::Editor::applyFontStyles):
* platform/graphics/FontCache.h: Unify our font selection values into
their enclosing struct, FontSelectionCapabilities. Also, clean up utility
functions.
* platform/graphics/FontCascade.cpp: Migrate off old enum types.
(WebCore::FontCascade::FontCascade):
* platform/graphics/FontCascade.h: Ditto.
(WebCore::FontCascade::italic):
(WebCore::FontCascade::weight):
* platform/graphics/FontDescription.cpp: Ditto.
(WebCore::FontDescription::FontDescription):
(WebCore::FontCascadeDescription::lighterWeight):
(WebCore::FontCascadeDescription::bolderWeight):
(WebCore::FontDescription::traitsMask): Deleted.
* platform/graphics/FontDescription.h: Migrate off old enum types.
(WebCore::FontDescription::italic):
(WebCore::FontDescription::stretch):
(WebCore::FontDescription::weight):
(WebCore::FontDescription::fontSelectionRequest):
(WebCore::FontDescription::computedPixelSize):
(WebCore::FontDescription::setItalic):
(WebCore::FontDescription::setStretch):
(WebCore::FontDescription::setIsItalic):
(WebCore::FontDescription::setWeight):
(WebCore::FontDescription::operator==):
(WebCore::FontCascadeDescription::lighterWeight):
(WebCore::FontCascadeDescription::bolderWeight):
(WebCore::FontCascadeDescription::initialItalic):
(WebCore::FontCascadeDescription::initialWeight):
(WebCore::FontCascadeDescription::initialStretch):
* platform/graphics/FontSelectionAlgorithm.cpp: Delete code which was only
present to convert from the old enum types to the new FontSelectionRequest
type.
(WebCore::fontSelectionRequestForTraitsMask): Deleted.
(WebCore::initialFontSelectionCapabilitiesForTraitsMask): Deleted.
(WebCore::fontSelectionCapabilitiesForTraitsMask): Deleted.
* platform/graphics/FontSelectionAlgorithm.h: Migrate to new named functions
for special values.
(WebCore::isItalic):
(WebCore::boldWeightValue):
(WebCore::normalWeightValue):
(WebCore::isFontWeightBold):
(WebCore::normalStretchValue):
(WebCore::FontSelectionRequest::FontSelectionRequest):
* platform/graphics/cocoa/FontCacheCoreText.cpp: Migrate all platforms which
compile this file to know about FontDatabase. This simplifies the interaction
between @font-face fonts and installed fonts. Also, migrate off old enum types.
(WebCore::stretchFromCoreTextTraits):
(WebCore::fontWeightFromCoreText):
(WebCore::capabilitiesForFontDescriptor):
(WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
(WebCore::platformFontLookupWithFamily):
(WebCore::invalidateFontCache):
(WebCore::fontWithFamily):
(WebCore::FontCache::createFontPlatformData):
(WebCore::lookupFallbackFont):
(WebCore::toTraitsMask): Deleted.
(WebCore::isFontWeightBold): Deleted.
(WebCore::toCoreTextFontWeight): Deleted.
(): Deleted.
(WebCore::FontDatabase::capabilitiesForFontDescriptor): Deleted.
(WebCore::calculateFontSelectionRequest): Deleted.
* platform/graphics/freetype/FontCacheFreeType.cpp: Migrate off old enum types.
(WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
(WebCore::fontWeightToFontconfigWeight):
(): Deleted.
* platform/graphics/freetype/FontPlatformDataFreeType.cpp: Ditto.
(WebCore::FontPlatformData::FontPlatformData):
* platform/graphics/ios/FontCacheIOS.mm: Ditto.
(WebCore::baseSystemFontDescriptor):
(WebCore::systemFontModificationAttributes):
(WebCore::systemFontDescriptor):
(WebCore::platformFontWithFamilySpecialCase):
(WebCore::FontCache::weightOfCTFont): Deleted.
* platform/graphics/mac/FontCacheMac.mm: Ditto.
(WebCore::toNSFontWeight):
(WebCore::platformFontWithFamilySpecialCase):
* platform/graphics/win/FontCacheWin.cpp: Ditto.
(WebCore::toGDIFontWeight):
(WebCore::traitsInFamilyEnumProc):
(WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
(): Deleted.
* platform/mock/MockRealtimeVideoSource.cpp: Ditto.
(WebCore::MockRealtimeVideoSource::applySize):
* platform/text/TextFlags.h: Delete old enum types.
* platform/win/DragImageWin.cpp: Migrate off old enum types.
(WebCore::dragLabelFont):
* rendering/RenderEmbeddedObject.cpp: Ditto.
(WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
* rendering/RenderThemeGtk.cpp: Ditto.
(WebCore::RenderThemeGtk::updateCachedSystemFontDescription):
* rendering/RenderThemeIOS.mm: Ditto.
(WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
* rendering/RenderThemeMac.mm: Ditto.
(WebCore::toFontWeight):
* rendering/RenderThemeWin.cpp: Ditto.
(WebCore::fillFontDescription):

Source/WebKit/mac:

Migrate off old enum types.

* WebCoreSupport/PopupMenuMac.mm:
(PopupMenuMac::populate):
* WebView/WebHTMLView.mm:
(fontNameForDescription):
* WebView/WebView.mm:
(-[WebView updateTextTouchBar]):

Source/WebKit/win:

Migrate off old enum types.

* WebKitGraphics.cpp:
(makeFont):

Source/WebKit2:

Migrate off old enum types.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::editorState):

Tools:

Migrate off old enum types.

* TestWebKitAPI/Tests/WebCore/FontCache.cpp:
(TestWebKitAPI::createPlatformFont):
(TestWebKitAPI::compareFonts):
(TestWebKitAPI::TEST_F):

LayoutTests:

* fast/text/font-selection-font-face-parse-expected.txt: Added.
* fast/text/font-selection-font-face-parse.html: Added.
* fast/text/font-selection-font-loading-api-parse-expected.txt: Added.
* fast/text/font-selection-font-loading-api-parse.html: Added.
* fast/text/font-stretch-parse-expected.txt:
* fast/text/font-stretch-parse.html:
* fast/text/font-style-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
* fast/text/font-style-parse.html: Added.
* fast/text/font-weight-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
* fast/text/font-weight-parse.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfasttextfontstretchparseexpectedtxt">trunk/LayoutTests/fast/text/font-stretch-parse-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasttextfontstretchparsehtml">trunk/LayoutTests/fast/text/font-stretch-parse.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreaccessibilityAccessibilityRenderObjectcpp">trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp</a></li>
<li><a href="#trunkSourceWebCoreaccessibilityatkWebKitAccessibleInterfaceTextcpp">trunk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFacecpp">trunk/Source/WebCore/css/CSSFontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFaceh">trunk/Source/WebCore/css/CSSFontFace.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFaceSetcpp">trunk/Source/WebCore/css/CSSFontFaceSet.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontFaceSeth">trunk/Source/WebCore/css/CSSFontFaceSet.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontSelectorcpp">trunk/Source/WebCore/css/CSSFontSelector.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSPrimitiveValueMappingsh">trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertiesjson">trunk/Source/WebCore/css/CSSProperties.json</a></li>
<li><a href="#trunkSourceWebCorecssCSSSegmentedFontFacecpp">trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSValueKeywordsin">trunk/Source/WebCore/css/CSSValueKeywords.in</a></li>
<li><a href="#trunkSourceWebCorecssFontFacecpp">trunk/Source/WebCore/css/FontFace.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderCustomh">trunk/Source/WebCore/css/StyleBuilderCustom.h</a></li>
<li><a href="#trunkSourceWebCorecssparserCSSParserFastPathscpp">trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp</a></li>
<li><a href="#trunkSourceWebCorecssparserCSSPropertyParsercpp">trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingEditingStylecpp">trunk/Source/WebCore/editing/EditingStyle.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingmacEditorMacmm">trunk/Source/WebCore/editing/mac/EditorMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCacheh">trunk/Source/WebCore/platform/graphics/FontCache.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCascadecpp">trunk/Source/WebCore/platform/graphics/FontCascade.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCascadeh">trunk/Source/WebCore/platform/graphics/FontCascade.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontDescriptioncpp">trunk/Source/WebCore/platform/graphics/FontDescription.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontDescriptionh">trunk/Source/WebCore/platform/graphics/FontDescription.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontSelectionAlgorithmcpp">trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontSelectionAlgorithmh">trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontCacheCoreTextcpp">trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfreetypeFontCacheFreeTypecpp">trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfreetypeFontPlatformDataFreeTypecpp">trunk/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsiosFontCacheIOSmm">trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacFontCacheMacmm">trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicswinFontCacheWincpp">trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockMockRealtimeVideoSourcecpp">trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformtextTextFlagsh">trunk/Source/WebCore/platform/text/TextFlags.h</a></li>
<li><a href="#trunkSourceWebCoreplatformwinDragImageWincpp">trunk/Source/WebCore/platform/win/DragImageWin.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderEmbeddedObjectcpp">trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeGtkcpp">trunk/Source/WebCore/rendering/RenderThemeGtk.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeIOSmm">trunk/Source/WebCore/rendering/RenderThemeIOS.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeMacmm">trunk/Source/WebCore/rendering/RenderThemeMac.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeWincpp">trunk/Source/WebCore/rendering/RenderThemeWin.cpp</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportPopupMenuMacmm">trunk/Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebHTMLViewmm">trunk/Source/WebKit/mac/WebView/WebHTMLView.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKitwinChangeLog">trunk/Source/WebKit/win/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitwinDOMCoreClassescpp">trunk/Source/WebKit/win/DOMCoreClasses.cpp</a></li>
<li><a href="#trunkSourceWebKitwinWebKitGraphicscpp">trunk/Source/WebKit/win/WebKitGraphics.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebCoreFontCachecpp">trunk/Tools/TestWebKitAPI/Tests/WebCore/FontCache.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfasttextfontselectionfontfaceparseexpectedtxt">trunk/LayoutTests/fast/text/font-selection-font-face-parse-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasttextfontselectionfontfaceparsehtml">trunk/LayoutTests/fast/text/font-selection-font-face-parse.html</a></li>
<li><a href="#trunkLayoutTestsfasttextfontselectionfontloadingapiparseexpectedtxt">trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasttextfontselectionfontloadingapiparsehtml">trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse.html</a></li>
<li><a href="#trunkLayoutTestsfasttextfontstyleparseexpectedtxt">trunk/LayoutTests/fast/text/font-style-parse-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasttextfontstyleparsehtml">trunk/LayoutTests/fast/text/font-style-parse.html</a></li>
<li><a href="#trunkLayoutTestsfasttextfontweightparseexpectedtxt">trunk/LayoutTests/fast/text/font-weight-parse-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfasttextfontweightparsehtml">trunk/LayoutTests/fast/text/font-weight-parse.html</a></li>
<li><a href="#trunkSourceWebCorecssFontSelectionValueInlinesh">trunk/Source/WebCore/css/FontSelectionValueInlines.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/LayoutTests/ChangeLog        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2017-03-06  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Expand font-weight and font-stretch to take any number
+        https://bugs.webkit.org/show_bug.cgi?id=168889
+
+        Reviewed by Simon Fraser.
+
+        * fast/text/font-selection-font-face-parse-expected.txt: Added.
+        * fast/text/font-selection-font-face-parse.html: Added.
+        * fast/text/font-selection-font-loading-api-parse-expected.txt: Added.
+        * fast/text/font-selection-font-loading-api-parse.html: Added.
+        * fast/text/font-stretch-parse-expected.txt:
+        * fast/text/font-stretch-parse.html:
+        * fast/text/font-style-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
+        * fast/text/font-style-parse.html: Added.
+        * fast/text/font-weight-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
+        * fast/text/font-weight-parse.html: Added.
+
</ins><span class="cx"> 2017-03-06  Carlos Alberto Lopez Perez  &lt;clopez@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Mark fast/parser/adoption-agency-unload-iframe-4.html as timing out on platform GTK.
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextfontselectionfontfaceparseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/font-selection-font-face-parse-expected.txt (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-selection-font-face-parse-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-selection-font-face-parse-expected.txt        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,49 @@
</span><ins>+PASS weightTestSheet.cssRules[0].style.fontWeight is &quot;1&quot;
+PASS weightTestSheet.cssRules[1].style.fontWeight is &quot;100&quot;
+PASS weightTestSheet.cssRules[2].style.fontWeight is &quot;200&quot;
+PASS weightTestSheet.cssRules[3].style.fontWeight is &quot;300&quot;
+PASS weightTestSheet.cssRules[4].style.fontWeight is &quot;400&quot;
+PASS weightTestSheet.cssRules[5].style.fontWeight is &quot;normal&quot;
+PASS weightTestSheet.cssRules[6].style.fontWeight is &quot;500&quot;
+PASS weightTestSheet.cssRules[7].style.fontWeight is &quot;600&quot;
+PASS weightTestSheet.cssRules[8].style.fontWeight is &quot;700&quot;
+PASS weightTestSheet.cssRules[9].style.fontWeight is &quot;bold&quot;
+PASS weightTestSheet.cssRules[10].style.fontWeight is &quot;800&quot;
+PASS weightTestSheet.cssRules[11].style.fontWeight is &quot;900&quot;
+PASS weightTestSheet.cssRules[12].style.fontWeight is &quot;&quot;
+PASS weightTestSheet.cssRules[13].style.fontWeight is &quot;&quot;
+PASS weightTestSheet.cssRules[14].style.fontWeight is &quot;&quot;
+PASS weightTestSheet.cssRules[15].style.fontWeight is &quot;7&quot;
+PASS weightTestSheet.cssRules[16].style.fontWeight is &quot;300&quot;
+PASS weightTestSheet.cssRules[17].style.fontWeight is &quot;200&quot;
+PASS stretchTestSheet.cssRules[0].style.fontStretch is &quot;1%&quot;
+PASS stretchTestSheet.cssRules[1].style.fontStretch is &quot;2&quot;
+PASS stretchTestSheet.cssRules[2].style.fontStretch is &quot;ultra-condensed&quot;
+PASS stretchTestSheet.cssRules[3].style.fontStretch is &quot;extra-condensed&quot;
+PASS stretchTestSheet.cssRules[4].style.fontStretch is &quot;condensed&quot;
+PASS stretchTestSheet.cssRules[5].style.fontStretch is &quot;semi-condensed&quot;
+PASS stretchTestSheet.cssRules[6].style.fontStretch is &quot;normal&quot;
+PASS stretchTestSheet.cssRules[7].style.fontStretch is &quot;semi-expanded&quot;
+PASS stretchTestSheet.cssRules[8].style.fontStretch is &quot;expanded&quot;
+PASS stretchTestSheet.cssRules[9].style.fontStretch is &quot;extra-expanded&quot;
+PASS stretchTestSheet.cssRules[10].style.fontStretch is &quot;ultra-expanded&quot;
+PASS stretchTestSheet.cssRules[11].style.fontStretch is &quot;&quot;
+PASS stretchTestSheet.cssRules[12].style.fontStretch is &quot;&quot;
+PASS stretchTestSheet.cssRules[13].style.fontStretch is &quot;7&quot;
+PASS styleTestSheet.cssRules[0].style.fontStyle is &quot;1deg&quot;
+PASS styleTestSheet.cssRules[1].style.fontStyle is &quot;200grad&quot;
+PASS styleTestSheet.cssRules[2].style.fontStyle is &quot;6.28318rad&quot;
+PASS styleTestSheet.cssRules[3].style.fontStyle is &quot;4turn&quot;
+PASS styleTestSheet.cssRules[4].style.fontStyle is &quot;5&quot;
+PASS styleTestSheet.cssRules[5].style.fontStyle is &quot;20&quot;
+PASS styleTestSheet.cssRules[6].style.fontStyle is &quot;italic&quot;
+PASS styleTestSheet.cssRules[7].style.fontStyle is &quot;oblique&quot;
+PASS styleTestSheet.cssRules[8].style.fontStyle is &quot;normal&quot;
+PASS styleTestSheet.cssRules[9].style.fontStyle is &quot;&quot;
+PASS styleTestSheet.cssRules[10].style.fontStyle is &quot;&quot;
+PASS styleTestSheet.cssRules[11].style.fontStyle is &quot;7&quot;
+PASS styleTestSheet.cssRules[12].style.fontStyle is &quot;calc(1441deg)&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextfontselectionfontfaceparsehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/font-selection-font-face-parse.html (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-selection-font-face-parse.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-selection-font-face-parse.html        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,203 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;style id=&quot;weightTest&quot;&gt;
+@font-face {
+    font-weight: 1;
+}
+@font-face {
+    font-weight: 100;
+}
+@font-face {
+    font-weight: 200;
+}
+@font-face {
+    font-weight: 300;
+}
+@font-face {
+    font-weight: 400;
+}
+@font-face {
+    font-weight: normal;
+}
+@font-face {
+    font-weight: 500;
+}
+@font-face {
+    font-weight: 600;
+}
+@font-face {
+    font-weight: 700;
+}
+@font-face {
+    font-weight: bold;
+}
+@font-face {
+    font-weight: 800;
+}
+@font-face {
+    font-weight: 900;
+}
+@font-face {
+    font-weight: garbage;
+}
+@font-face {
+    font-weight: initial;
+}
+@font-face {
+}
+@font-face {
+    font-weight: calc(3 + 4);
+}
+@font-face {
+    font-weight: calc(100 + 200);
+}
+@font-face {
+    font-weight: calc(150 + 50);
+}
+&lt;/style&gt;
+
+&lt;style id=&quot;stretchTest&quot;&gt;
+@font-face {
+    font-stretch: 1%;
+}
+@font-face {
+    font-stretch: 2;
+}
+@font-face {
+    font-stretch: ultra-condensed;
+}
+@font-face {
+    font-stretch: extra-condensed;
+}
+@font-face {
+    font-stretch: condensed;
+}
+@font-face {
+    font-stretch: semi-condensed;
+}
+@font-face {
+    font-stretch: normal;
+}
+@font-face {
+    font-stretch: semi-expanded;
+}
+@font-face {
+    font-stretch: expanded;
+}
+@font-face {
+    font-stretch: extra-expanded;
+}
+@font-face {
+    font-stretch: ultra-expanded;
+}
+@font-face {
+    font-stretch: garbage;
+}
+@font-face {
+    font-stretch: initial;
+}
+@font-face {
+    font-stretch: calc(3 + 4);
+}
+&lt;/style&gt;
+
+&lt;style id=&quot;styleTest&quot;&gt;
+@font-face {
+    font-style: oblique 1deg;
+}
+@font-face {
+    font-style: oblique 200grad;
+}
+@font-face {
+    font-style: oblique 6.28318rad;
+}
+@font-face {
+    font-style: oblique 4turn;
+}
+@font-face {
+    font-style: oblique 5;
+}
+@font-face {
+    font-style: oblique 20;
+}
+@font-face {
+    font-style: italic;
+}
+@font-face {
+    font-style: oblique;
+}
+@font-face {
+    font-style: normal;
+}
+@font-face {
+    font-style: garbage;
+}
+@font-face {
+    font-style: initial;
+}
+@font-face {
+    font-style: oblique calc(3 + 4);
+}
+@font-face {
+    font-style: oblique calc(4turn + 1deg);
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script&gt;
+var weightTestSheet = document.getElementById(&quot;weightTest&quot;).sheet;
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[0].style.fontWeight&quot;, &quot;1&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[1].style.fontWeight&quot;, &quot;100&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[2].style.fontWeight&quot;, &quot;200&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[3].style.fontWeight&quot;, &quot;300&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[4].style.fontWeight&quot;, &quot;400&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[5].style.fontWeight&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[6].style.fontWeight&quot;, &quot;500&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[7].style.fontWeight&quot;, &quot;600&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[8].style.fontWeight&quot;, &quot;700&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[9].style.fontWeight&quot;, &quot;bold&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[10].style.fontWeight&quot;, &quot;800&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[11].style.fontWeight&quot;, &quot;900&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[12].style.fontWeight&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[13].style.fontWeight&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[14].style.fontWeight&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[15].style.fontWeight&quot;, &quot;7&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[16].style.fontWeight&quot;, &quot;300&quot;);
+shouldBeEqualToString(&quot;weightTestSheet.cssRules[17].style.fontWeight&quot;, &quot;200&quot;);
+
+var stretchTestSheet = document.getElementById(&quot;stretchTest&quot;).sheet;
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[0].style.fontStretch&quot;, &quot;1%&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[1].style.fontStretch&quot;, &quot;2&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[2].style.fontStretch&quot;, &quot;ultra-condensed&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[3].style.fontStretch&quot;, &quot;extra-condensed&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[4].style.fontStretch&quot;, &quot;condensed&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[5].style.fontStretch&quot;, &quot;semi-condensed&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[6].style.fontStretch&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[7].style.fontStretch&quot;, &quot;semi-expanded&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[8].style.fontStretch&quot;, &quot;expanded&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[9].style.fontStretch&quot;, &quot;extra-expanded&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[10].style.fontStretch&quot;, &quot;ultra-expanded&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[11].style.fontStretch&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[12].style.fontStretch&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;stretchTestSheet.cssRules[13].style.fontStretch&quot;, &quot;7&quot;);
+
+var styleTestSheet = document.getElementById(&quot;styleTest&quot;).sheet;
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[0].style.fontStyle&quot;, &quot;1deg&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[1].style.fontStyle&quot;, &quot;200grad&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[2].style.fontStyle&quot;, &quot;6.28318rad&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[3].style.fontStyle&quot;, &quot;4turn&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[4].style.fontStyle&quot;, &quot;5&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[5].style.fontStyle&quot;, &quot;20&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[6].style.fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[7].style.fontStyle&quot;, &quot;oblique&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[8].style.fontStyle&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[9].style.fontStyle&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[10].style.fontStyle&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[11].style.fontStyle&quot;, &quot;7&quot;);
+shouldBeEqualToString(&quot;styleTestSheet.cssRules[12].style.fontStyle&quot;, &quot;calc(1441deg)&quot;);
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextfontselectionfontloadingapiparseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse-expected.txt (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse-expected.txt        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+PASS setFontFaceWeight(fontFace, '1') is &quot;1&quot;
+PASS setFontFaceWeight(fontFace, '100') is &quot;100&quot;
+PASS setFontFaceWeight(fontFace, '200') is &quot;200&quot;
+PASS setFontFaceWeight(fontFace, '300') is &quot;300&quot;
+PASS setFontFaceWeight(fontFace, '400') is &quot;normal&quot;
+PASS setFontFaceWeight(fontFace, 'normal') is &quot;normal&quot;
+PASS setFontFaceWeight(fontFace, '500') is &quot;500&quot;
+PASS setFontFaceWeight(fontFace, '600') is &quot;600&quot;
+PASS setFontFaceWeight(fontFace, '700') is &quot;bold&quot;
+PASS setFontFaceWeight(fontFace, 'bold') is &quot;bold&quot;
+PASS setFontFaceWeight(fontFace, '800') is &quot;800&quot;
+PASS setFontFaceWeight(fontFace, '900') is &quot;900&quot;
+PASS setFontFaceWeight(fontFace, 'garbage') threw exception SyntaxError (DOM Exception 12): The string did not match the expected pattern..
+PASS setFontFaceWeight(fontFace, 'initial') threw exception SyntaxError (DOM Exception 12): The string did not match the expected pattern..
+PASS setFontFaceWeight(fontFace, 'calc(3 + 4)') is &quot;7&quot;
+PASS setFontFaceWeight(fontFace, 'calc(100 + 200)') is &quot;300&quot;
+PASS setFontFaceWeight(fontFace, 'calc(150 + 50)') is &quot;200&quot;
+PASS setFontFaceStretch(fontFace, '1%') is &quot;1%&quot;
+PASS setFontFaceStretch(fontFace, '2') is &quot;2%&quot;
+PASS setFontFaceStretch(fontFace, 'ultra-condensed') is &quot;ultra-condensed&quot;
+PASS setFontFaceStretch(fontFace, 'extra-condensed') is &quot;extra-condensed&quot;
+PASS setFontFaceStretch(fontFace, 'condensed') is &quot;condensed&quot;
+PASS setFontFaceStretch(fontFace, 'semi-condensed') is &quot;semi-condensed&quot;
+PASS setFontFaceStretch(fontFace, 'normal') is &quot;normal&quot;
+PASS setFontFaceStretch(fontFace, 'semi-expanded') is &quot;semi-expanded&quot;
+PASS setFontFaceStretch(fontFace, 'expanded') is &quot;expanded&quot;
+PASS setFontFaceStretch(fontFace, 'extra-expanded') is &quot;extra-expanded&quot;
+PASS setFontFaceStretch(fontFace, 'ultra-expanded') is &quot;ultra-expanded&quot;
+PASS setFontFaceStretch(fontFace, 'garbage') threw exception SyntaxError (DOM Exception 12): The string did not match the expected pattern..
+PASS setFontFaceStretch(fontFace, 'initial') threw exception SyntaxError (DOM Exception 12): The string did not match the expected pattern..
+PASS setFontFaceStretch(fontFace, 'calc(3 + 4)') is &quot;7%&quot;
+PASS setFontFaceStyle(fontFace, 'oblique 1deg') is &quot;oblique 1deg&quot;
+PASS setFontFaceStyle(fontFace, 'oblique 200grad') is &quot;oblique 180deg&quot;
+PASS setFontFaceStyle(fontFace, 'oblique 6.28318rad') is &quot;oblique 359.750000deg&quot;
+PASS setFontFaceStyle(fontFace, 'oblique 4turn') is &quot;oblique 1440deg&quot;
+PASS setFontFaceStyle(fontFace, 'oblique 5') is &quot;oblique 5deg&quot;
+PASS setFontFaceStyle(fontFace, 'oblique 20') is &quot;italic&quot;
+PASS setFontFaceStyle(fontFace, 'italic') is &quot;italic&quot;
+PASS setFontFaceStyle(fontFace, 'oblique') is &quot;italic&quot;
+PASS setFontFaceStyle(fontFace, 'normal') is &quot;normal&quot;
+PASS setFontFaceStyle(fontFace, 'garbage') threw exception SyntaxError (DOM Exception 12): The string did not match the expected pattern..
+PASS setFontFaceStyle(fontFace, 'initial') threw exception SyntaxError (DOM Exception 12): The string did not match the expected pattern..
+PASS setFontFaceStyle(fontFace, 'oblique calc(3 + 4)') is &quot;oblique 7deg&quot;
+PASS setFontFaceStyle(fontFace, 'oblique calc(4turn + 1deg)') is &quot;oblique 1441deg&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextfontselectionfontloadingapiparsehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse.html (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-selection-font-loading-api-parse.html        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script&gt;
+function setFontFaceWeight(fontFace, weight) {
+    fontFace.weight = weight;
+    return fontFace.weight;
+}
+
+function setFontFaceStretch(fontFace, stretch) {
+    fontFace.stretch = stretch;
+    return fontFace.stretch;
+}
+
+function setFontFaceStyle(fontFace, style) {
+    fontFace.style = style;
+    return fontFace.style;
+}
+
+var fontFace = new FontFace(&quot;asdf&quot;, &quot;url('notreal')&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '1')&quot;, &quot;1&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '100')&quot;, &quot;100&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '200')&quot;, &quot;200&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '300')&quot;, &quot;300&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '400')&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, 'normal')&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '500')&quot;, &quot;500&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '600')&quot;, &quot;600&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '700')&quot;, &quot;bold&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, 'bold')&quot;, &quot;bold&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '800')&quot;, &quot;800&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, '900')&quot;, &quot;900&quot;);
+shouldThrow(&quot;setFontFaceWeight(fontFace, 'garbage')&quot;);
+shouldThrow(&quot;setFontFaceWeight(fontFace, 'initial')&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, 'calc(3 + 4)')&quot;, &quot;7&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, 'calc(100 + 200)')&quot;, &quot;300&quot;);
+shouldBeEqualToString(&quot;setFontFaceWeight(fontFace, 'calc(150 + 50)')&quot;, &quot;200&quot;);
+
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, '1%')&quot;, &quot;1%&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, '2')&quot;, &quot;2%&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'ultra-condensed')&quot;, &quot;ultra-condensed&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'extra-condensed')&quot;, &quot;extra-condensed&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'condensed')&quot;, &quot;condensed&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'semi-condensed')&quot;, &quot;semi-condensed&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'normal')&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'semi-expanded')&quot;, &quot;semi-expanded&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'expanded')&quot;, &quot;expanded&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'extra-expanded')&quot;, &quot;extra-expanded&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'ultra-expanded')&quot;, &quot;ultra-expanded&quot;);
+shouldThrow(&quot;setFontFaceStretch(fontFace, 'garbage')&quot;);
+shouldThrow(&quot;setFontFaceStretch(fontFace, 'initial')&quot;);
+shouldBeEqualToString(&quot;setFontFaceStretch(fontFace, 'calc(3 + 4)')&quot;, &quot;7%&quot;);
+
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique 1deg')&quot;, &quot;oblique 1deg&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique 200grad')&quot;, &quot;oblique 180deg&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique 6.28318rad')&quot;, &quot;oblique 359.750000deg&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique 4turn')&quot;, &quot;oblique 1440deg&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique 5')&quot;, &quot;oblique 5deg&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique 20')&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'italic')&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique')&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'normal')&quot;, &quot;normal&quot;);
+shouldThrow(&quot;setFontFaceStyle(fontFace, 'garbage')&quot;);
+shouldThrow(&quot;setFontFaceStyle(fontFace, 'initial')&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique calc(3 + 4)')&quot;, &quot;oblique 7deg&quot;);
+shouldBeEqualToString(&quot;setFontFaceStyle(fontFace, 'oblique calc(4turn + 1deg)')&quot;, &quot;oblique 1441deg&quot;);
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextfontstretchparseexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/text/font-stretch-parse-expected.txt (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-stretch-parse-expected.txt        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/LayoutTests/fast/text/font-stretch-parse-expected.txt        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -19,8 +19,8 @@
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test19')).fontStretch is &quot;normal&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test20')).fontStretch is &quot;extra-expanded&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test1')).font is &quot;normal normal normal normal 16px/18px Times&quot;
</span><del>-PASS window.getComputedStyle(document.getElementById('test2')).font is &quot;normal normal normal 1% 16px/18px Times&quot;
-PASS window.getComputedStyle(document.getElementById('test3')).font is &quot;normal normal normal 2% 16px/18px Times&quot;
</del><ins>+PASS window.getComputedStyle(document.getElementById('test2')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test3')).font is &quot;16px/18px Times&quot;
</ins><span class="cx"> PASS window.getComputedStyle(document.getElementById('test4')).font is &quot;normal normal normal ultra-condensed 16px/18px Times&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test5')).font is &quot;normal normal normal extra-condensed 16px/18px Times&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test6')).font is &quot;normal normal normal condensed 16px/18px Times&quot;
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test12')).font is &quot;normal normal normal ultra-expanded 16px/18px Times&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test13')).font is &quot;normal normal normal normal 16px/18px Times&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test14')).font is &quot;normal normal normal normal 16px/18px Times&quot;
</span><del>-PASS window.getComputedStyle(document.getElementById('test15')).font is &quot;normal normal normal 7% 16px/18px Times&quot;
</del><ins>+PASS window.getComputedStyle(document.getElementById('test15')).font is &quot;16px/18px Times&quot;
</ins><span class="cx"> PASS window.getComputedStyle(document.getElementById('test16')).font is &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test17')).font is &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;
</span><span class="cx"> PASS window.getComputedStyle(document.getElementById('test18')).font is &quot;normal normal 100 normal 48px/49px 'Helvetica Neue'&quot;
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextfontstretchparsehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/text/font-stretch-parse.html (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-stretch-parse.html        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/LayoutTests/fast/text/font-stretch-parse.html        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -49,8 +49,8 @@
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test20')).fontStretch&quot;, &quot;extra-expanded&quot;);
</span><span class="cx"> 
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test1')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
</span><del>-shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test2')).font&quot;, &quot;normal normal normal 1% 16px/18px Times&quot;);
-shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test3')).font&quot;, &quot;normal normal normal 2% 16px/18px Times&quot;);
</del><ins>+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test2')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test3')).font&quot;, &quot;16px/18px Times&quot;);
</ins><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test4')).font&quot;, &quot;normal normal normal ultra-condensed 16px/18px Times&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test5')).font&quot;, &quot;normal normal normal extra-condensed 16px/18px Times&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test6')).font&quot;, &quot;normal normal normal condensed 16px/18px Times&quot;);
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test12')).font&quot;, &quot;normal normal normal ultra-expanded 16px/18px Times&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test13')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test14')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
</span><del>-shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test15')).font&quot;, &quot;normal normal normal 7% 16px/18px Times&quot;);
</del><ins>+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test15')).font&quot;, &quot;16px/18px Times&quot;);
</ins><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test16')).font&quot;, &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test17')).font&quot;, &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test18')).font&quot;, &quot;normal normal 100 normal 48px/49px 'Helvetica Neue'&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextfontstyleparseexpectedtxtfromrev213463trunkLayoutTestsfasttextfontstretchparseexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/fast/text/font-style-parse-expected.txt (from rev 213463, trunk/LayoutTests/fast/text/font-stretch-parse-expected.txt) (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-style-parse-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-style-parse-expected.txt        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+PASS window.getComputedStyle(document.getElementById('test1')).fontStyle is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test2')).fontStyle is &quot;1deg&quot;
+PASS window.getComputedStyle(document.getElementById('test3')).fontStyle is &quot;180deg&quot;
+PASS window.getComputedStyle(document.getElementById('test4')).fontStyle is &quot;359.75deg&quot;
+PASS window.getComputedStyle(document.getElementById('test5')).fontStyle is &quot;1440deg&quot;
+PASS window.getComputedStyle(document.getElementById('test6')).fontStyle is &quot;5deg&quot;
+PASS window.getComputedStyle(document.getElementById('test7')).fontStyle is &quot;italic&quot;
+PASS window.getComputedStyle(document.getElementById('test8')).fontStyle is &quot;italic&quot;
+PASS window.getComputedStyle(document.getElementById('test9')).fontStyle is &quot;italic&quot;
+PASS window.getComputedStyle(document.getElementById('test10')).fontStyle is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test11')).fontStyle is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test12')).fontStyle is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test13')).fontStyle is &quot;7deg&quot;
+PASS window.getComputedStyle(document.getElementById('test14')).fontStyle is &quot;1441deg&quot;
+PASS window.getComputedStyle(document.getElementById('test15')).fontStyle is &quot;italic&quot;
+PASS window.getComputedStyle(document.getElementById('test16')).fontStyle is &quot;italic&quot;
+PASS window.getComputedStyle(document.getElementById('test17')).fontStyle is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test18')).fontStyle is &quot;italic&quot;
+PASS window.getComputedStyle(document.getElementById('test19')).fontStyle is &quot;italic&quot;
+PASS window.getComputedStyle(document.getElementById('test20')).fontStyle is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test1')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test2')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test3')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test4')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test5')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test6')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test7')).font is &quot;italic normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test8')).font is &quot;italic normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test9')).font is &quot;italic normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test10')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test11')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test12')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test13')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test14')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test15')).font is &quot;italic normal 100 normal 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test16')).font is &quot;italic normal 100 normal 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test17')).font is &quot;normal normal 100 normal 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test18')).font is &quot;italic normal normal normal 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test19')).font is &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test20')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS document.getElementById('test1').style.font is &quot;&quot;
+PASS document.getElementById('test15').style.font is &quot;italic 100 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test16').style.font is &quot;italic 100 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test17').style.font is &quot;100 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test18').style.font is &quot;italic 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test19').style.font is &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test20').style.font is &quot;&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextfontstyleparsehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/font-style-parse.html (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-style-parse.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-style-parse.html        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,82 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div style=&quot;font: 16px/18px 'Times';&quot;&gt;
+&lt;div id=&quot;test1&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test2&quot; style=&quot;font-style: oblique 1deg;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test3&quot; style=&quot;font-style: oblique 200grad;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test4&quot; style=&quot;font-style: oblique 6.28318rad;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test5&quot; style=&quot;font-style: oblique 4turn;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test6&quot; style=&quot;font-style: oblique 5;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test7&quot; style=&quot;font-style: oblique 20;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test8&quot; style=&quot;font-style: italic;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test9&quot; style=&quot;font-style: oblique;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test10&quot; style=&quot;font-style: normal;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test11&quot; style=&quot;font-style: garbage;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test12&quot; style=&quot;font-style: initial;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test13&quot; style=&quot;font-style: oblique calc(3 + 4);&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test14&quot; style=&quot;font-style: oblique calc(4turn + 1deg);&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test15&quot; style=&quot;font: 100 italic 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test16&quot; style=&quot;font: italic 100 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test17&quot; style=&quot;font: 100 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div style=&quot;font-stretch: normal;&quot;&gt;&lt;div id=&quot;test18&quot; style=&quot;font: italic 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;&lt;/div&gt;
+&lt;div id=&quot;test19&quot; style=&quot;font: italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test20&quot; style=&quot;font: 13deg small-caps 123 extra-expanded 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;script&gt;
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test1')).fontStyle&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test2')).fontStyle&quot;, &quot;1deg&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test3')).fontStyle&quot;, &quot;180deg&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test4')).fontStyle&quot;, &quot;359.75deg&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test5')).fontStyle&quot;, &quot;1440deg&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test6')).fontStyle&quot;, &quot;5deg&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test7')).fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test8')).fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test9')).fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test10')).fontStyle&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test11')).fontStyle&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test12')).fontStyle&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test13')).fontStyle&quot;, &quot;7deg&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test14')).fontStyle&quot;, &quot;1441deg&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test15')).fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test16')).fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test17')).fontStyle&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test18')).fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test19')).fontStyle&quot;, &quot;italic&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test20')).fontStyle&quot;, &quot;normal&quot;);
+
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test1')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test2')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test3')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test4')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test5')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test6')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test7')).font&quot;, &quot;italic normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test8')).font&quot;, &quot;italic normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test9')).font&quot;, &quot;italic normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test10')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test11')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test12')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test13')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test14')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test15')).font&quot;, &quot;italic normal 100 normal 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test16')).font&quot;, &quot;italic normal 100 normal 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test17')).font&quot;, &quot;normal normal 100 normal 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test18')).font&quot;, &quot;italic normal normal normal 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test19')).font&quot;, &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test20')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+
+shouldBeEqualToString(&quot;document.getElementById('test1').style.font&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test15').style.font&quot;, &quot;italic 100 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test16').style.font&quot;, &quot;italic 100 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test17').style.font&quot;, &quot;100 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test18').style.font&quot;, &quot;italic 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test19').style.font&quot;, &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test20').style.font&quot;, &quot;&quot;);
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextfontweightparseexpectedtxtfromrev213463trunkLayoutTestsfasttextfontstretchparseexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/fast/text/font-weight-parse-expected.txt (from rev 213463, trunk/LayoutTests/fast/text/font-stretch-parse-expected.txt) (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-weight-parse-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-weight-parse-expected.txt        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+PASS window.getComputedStyle(document.getElementById('test1')).fontWeight is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test2')).fontWeight is &quot;1&quot;
+PASS window.getComputedStyle(document.getElementById('test3')).fontWeight is &quot;100&quot;
+PASS window.getComputedStyle(document.getElementById('test4')).fontWeight is &quot;200&quot;
+PASS window.getComputedStyle(document.getElementById('test5')).fontWeight is &quot;300&quot;
+PASS window.getComputedStyle(document.getElementById('test6')).fontWeight is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test7')).fontWeight is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test8')).fontWeight is &quot;500&quot;
+PASS window.getComputedStyle(document.getElementById('test9')).fontWeight is &quot;600&quot;
+PASS window.getComputedStyle(document.getElementById('test10')).fontWeight is &quot;bold&quot;
+PASS window.getComputedStyle(document.getElementById('test11')).fontWeight is &quot;bold&quot;
+PASS window.getComputedStyle(document.getElementById('test12')).fontWeight is &quot;800&quot;
+PASS window.getComputedStyle(document.getElementById('test13')).fontWeight is &quot;900&quot;
+PASS window.getComputedStyle(document.getElementById('test14')).fontWeight is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test15')).fontWeight is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test16')).fontWeight is &quot;7&quot;
+PASS window.getComputedStyle(document.getElementById('test17')).fontWeight is &quot;300&quot;
+PASS window.getComputedStyle(document.getElementById('test18')).fontWeight is &quot;200&quot;
+PASS window.getComputedStyle(document.getElementById('test19')).fontWeight is &quot;100&quot;
+PASS window.getComputedStyle(document.getElementById('test20')).fontWeight is &quot;100&quot;
+PASS window.getComputedStyle(document.getElementById('test21')).fontWeight is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test22')).fontWeight is &quot;100&quot;
+PASS window.getComputedStyle(document.getElementById('test23')).fontWeight is &quot;100&quot;
+PASS window.getComputedStyle(document.getElementById('test24')).fontWeight is &quot;normal&quot;
+PASS window.getComputedStyle(document.getElementById('test1')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test2')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test3')).font is &quot;normal normal 100 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test4')).font is &quot;normal normal 200 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test5')).font is &quot;normal normal 300 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test6')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test7')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test8')).font is &quot;normal normal 500 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test9')).font is &quot;normal normal 600 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test10')).font is &quot;normal normal bold normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test11')).font is &quot;normal normal bold normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test12')).font is &quot;normal normal 800 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test13')).font is &quot;normal normal 900 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test14')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test15')).font is &quot;normal normal normal normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test16')).font is &quot;16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test17')).font is &quot;normal normal 300 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test18')).font is &quot;normal normal 200 normal 16px/18px Times&quot;
+PASS window.getComputedStyle(document.getElementById('test19')).font is &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test20')).font is &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test21')).font is &quot;normal normal normal extra-condensed 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test22')).font is &quot;normal normal 100 normal 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test23')).font is &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;
+PASS window.getComputedStyle(document.getElementById('test24')).font is &quot;italic small-caps normal extra-expanded 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test1').style.font is &quot;&quot;
+PASS document.getElementById('test19').style.font is &quot;100 extra-condensed 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test20').style.font is &quot;100 extra-condensed 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test21').style.font is &quot;extra-condensed 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test22').style.font is &quot;100 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test23').style.font is &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;
+PASS document.getElementById('test24').style.font is &quot;italic small-caps extra-expanded 48px/49px 'Helvetica Neue'&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextfontweightparsehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/font-weight-parse.html (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/font-weight-parse.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/font-weight-parse.html        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,94 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div style=&quot;font: 16px/18px 'Times';&quot;&gt;
+&lt;div id=&quot;test1&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test2&quot; style=&quot;font-weight: 1;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test3&quot; style=&quot;font-weight: 100;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test4&quot; style=&quot;font-weight: 200;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test5&quot; style=&quot;font-weight: 300;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test6&quot; style=&quot;font-weight: 400;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test7&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test8&quot; style=&quot;font-weight: 500;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test9&quot; style=&quot;font-weight: 600;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test10&quot; style=&quot;font-weight: 700;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test11&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test12&quot; style=&quot;font-weight: 800;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test13&quot; style=&quot;font-weight: 900;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test14&quot; style=&quot;font-weight: garbage;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test15&quot; style=&quot;font-weight: initial;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test16&quot; style=&quot;font-weight: calc(3 + 4);&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test17&quot; style=&quot;font-weight: calc(100 + 200);&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test18&quot; style=&quot;font-weight: calc(50 + 150);&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test19&quot; style=&quot;font: 100 extra-condensed 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test20&quot; style=&quot;font: extra-condensed 100 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test21&quot; style=&quot;font: extra-condensed 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div style=&quot;font-weight: 275;&quot;&gt;&lt;div id=&quot;test22&quot; style=&quot;font: 100 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;&lt;/div&gt;
+&lt;div id=&quot;test23&quot; style=&quot;font: italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;test24&quot; style=&quot;font: italic small-caps 123 extra-expanded 48px/49px 'Helvetica Neue';&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;script&gt;
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test1')).fontWeight&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test2')).fontWeight&quot;, &quot;1&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test3')).fontWeight&quot;, &quot;100&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test4')).fontWeight&quot;, &quot;200&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test5')).fontWeight&quot;, &quot;300&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test6')).fontWeight&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test7')).fontWeight&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test8')).fontWeight&quot;, &quot;500&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test9')).fontWeight&quot;, &quot;600&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test10')).fontWeight&quot;, &quot;bold&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test11')).fontWeight&quot;, &quot;bold&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test12')).fontWeight&quot;, &quot;800&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test13')).fontWeight&quot;, &quot;900&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test14')).fontWeight&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test15')).fontWeight&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test16')).fontWeight&quot;, &quot;7&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test17')).fontWeight&quot;, &quot;300&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test18')).fontWeight&quot;, &quot;200&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test19')).fontWeight&quot;, &quot;100&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test20')).fontWeight&quot;, &quot;100&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test21')).fontWeight&quot;, &quot;normal&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test22')).fontWeight&quot;, &quot;100&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test23')).fontWeight&quot;, &quot;100&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test24')).fontWeight&quot;, &quot;normal&quot;);
+
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test1')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test2')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test3')).font&quot;, &quot;normal normal 100 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test4')).font&quot;, &quot;normal normal 200 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test5')).font&quot;, &quot;normal normal 300 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test6')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test7')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test8')).font&quot;, &quot;normal normal 500 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test9')).font&quot;, &quot;normal normal 600 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test10')).font&quot;, &quot;normal normal bold normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test11')).font&quot;, &quot;normal normal bold normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test12')).font&quot;, &quot;normal normal 800 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test13')).font&quot;, &quot;normal normal 900 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test14')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test15')).font&quot;, &quot;normal normal normal normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test16')).font&quot;, &quot;16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test17')).font&quot;, &quot;normal normal 300 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test18')).font&quot;, &quot;normal normal 200 normal 16px/18px Times&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test19')).font&quot;, &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test20')).font&quot;, &quot;normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test21')).font&quot;, &quot;normal normal normal extra-condensed 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test22')).font&quot;, &quot;normal normal 100 normal 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test23')).font&quot;, &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;window.getComputedStyle(document.getElementById('test24')).font&quot;, &quot;italic small-caps normal extra-expanded 48px/49px 'Helvetica Neue'&quot;);
+
+shouldBeEqualToString(&quot;document.getElementById('test1').style.font&quot;, &quot;&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test19').style.font&quot;, &quot;100 extra-condensed 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test20').style.font&quot;, &quot;100 extra-condensed 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test21').style.font&quot;, &quot;extra-condensed 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test22').style.font&quot;, &quot;100 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test23').style.font&quot;, &quot;italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'&quot;);
+shouldBeEqualToString(&quot;document.getElementById('test24').style.font&quot;, &quot;italic small-caps extra-expanded 48px/49px 'Helvetica Neue'&quot;);
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/ChangeLog        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1,3 +1,208 @@
</span><ins>+2017-03-06  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Expand font-weight and font-stretch to take any number
+        https://bugs.webkit.org/show_bug.cgi?id=168889
+
+        Reviewed by Simon Fraser.
+
+        This patch expands parsing support for font-weight and font-stretch so that they can accept
+        numbers in addition to the keyword values they accepted previously. Eventually, these numbers
+        will be used as inputs to select variation fonts; however, in this patch, the values are just
+        parsed and held in our internal data model. This means that this patch doesn't actually change
+        the general behavior of WebKit; instead, it parses new values, outputs them (via
+        getComputedStyle() and similar functions), and provides them as input to our preexisting font
+        selection algorithm. 
+
+        This patch doesn't actually modify anything algorithmically, and therefore, it doesn't include
+        any additional tests for the font selection algorithm. Instead, it tests the parsing of the
+        newly accepted values (both input and output).
+
+        Because our internal data model needs to hold numbers now, this patch also completely eliminates
+        the FontWidth, FontItalic, and FontTraitsMask enum values in favor of FontSelectionValues (which
+        can hold numbers instead of individual enum values). Therefore, every place which we were using
+        these enum values is migrated in this patch to using FontSelectionValues instead.
+
+        Tests: fast/text/font-selection-font-face-parse.html
+               fast/text/font-selection-font-loading-api-parse.html
+               fast/text/font-style-parse.html
+               fast/text/font-weight-parse.html
+
+        * accessibility/AccessibilityRenderObject.cpp: Migrate off of old enum types.
+        (WebCore::AccessibilityRenderObject::hasBoldFont):
+        (WebCore::AccessibilityRenderObject::hasItalicFont):
+        (WebCore::AccessibilityRenderObject::hasPlainText):
+        * accessibility/atk/WebKitAccessibleInterfaceText.cpp: Ditto.
+        (getAttributeSetForAccessibilityObject):
+        * css/CSSComputedStyleDeclaration.cpp: Output newly parsed values.
+        (WebCore::fontWeightFromStyle):
+        (WebCore::fontStretchFromStyle):
+        (WebCore::fontStyleFromStyle):
+        (WebCore::fontShorthandValueForSelectionProperties):
+        (WebCore::ComputedStyleExtractor::propertyValue):
+        * css/CSSFontFace.cpp: Migrate off old enum types.
+        (WebCore::calculateWeightRange):
+        (WebCore::CSSFontFace::setWeight):
+        (WebCore::calculateStretchRange):
+        (WebCore::CSSFontFace::setStretch):
+        (WebCore::calculateStyleRange):
+        (WebCore::CSSFontFace::setStyle):
+        (WebCore::CSSFontFace::calculateStyleMask): Deleted.
+        (WebCore::CSSFontFace::calculateWeightMask): Deleted.
+        (WebCore::CSSFontFace::calculateStretch): Deleted.
+        * css/CSSFontFace.h:
+        * css/CSSFontFaceSet.cpp: Migrate off old enum types.
+        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
+        (WebCore::calculateWeightValue):
+        (WebCore::calculateStretchValue):
+        (WebCore::calculateStyleValue):
+        (WebCore::computeFontSelectionRequest):
+        (WebCore::CSSFontFaceSet::matchingFaces):
+        (WebCore::CSSFontFaceSet::fontFace):
+        (WebCore::computeFontTraitsMask): Deleted.
+        (WebCore::computeFontStretch): Deleted.
+        * css/CSSFontFaceSet.h:
+        * css/CSSFontSelector.cpp: Migrate off old enum types.
+        (WebCore::CSSFontSelector::fontRangesForFamily):
+        * css/CSSPrimitiveValueMappings.h: font-weight and font-style are no longer
+        keyword properties.
+        (WebCore::CSSPrimitiveValue::operator FontWeight): Deleted.
+        (WebCore::CSSPrimitiveValue::operator FontItalic): Deleted.
+        * css/CSSProperties.json: Use the same infrastructure for all three of the
+        font selection properties.
+        * css/CSSSegmentedFontFace.cpp: Migrate off old enum types.
+        (WebCore::CSSSegmentedFontFace::fontRanges):
+        * css/CSSValueKeywords.in: The 100-based font-weight values are now represented
+        as real numbers.
+        * css/FontFace.cpp: Update the string output functions for the new values.
+        (WebCore::rangeIsSingleValue):
+        (WebCore::FontFace::style):
+        (WebCore::FontFace::weight):
+        (WebCore::FontFace::stretch):
+        * css/StyleBuilderConverter.h: Use CSSValue conversion functions to convert
+        to our new data model.
+        (WebCore::StyleBuilderConverter::convertFontWeight):
+        (WebCore::StyleBuilderConverter::convertFontStretch):
+        (WebCore::StyleBuilderConverter::convertFontStyle):
+        * css/StyleBuilderCustom.h: font-weight is no longer a completely custom
+        property.
+        (WebCore::StyleBuilderCustom::applyInitialFontWeight): Deleted.
+        (WebCore::StyleBuilderCustom::applyInheritFontWeight): Deleted.
+        (WebCore::StyleBuilderCustom::applyValueFontWeight): Deleted.
+        * css/parser/CSSParserFastPaths.cpp: font-style is no longer a keyword property.
+        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
+        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
+        * css/parser/CSSPropertyParser.cpp: Parse the new values in the font selection
+        properties.
+        (WebCore::consumeFontWeightKeywordValue):
+        (WebCore::consumeFontWeightCSS21):
+        (WebCore::consumeFontWeight):
+        (WebCore::consumeFontStyleKeywordValue):
+        (WebCore::consumeFontStyle):
+        (WebCore::CSSPropertyParser::parseSingleValue):
+        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
+        (WebCore::CSSPropertyParser::consumeSystemFont):
+        (WebCore::CSSPropertyParser::consumeFont):
+        * editing/EditingStyle.cpp: Migrate off old enum types.
+        (WebCore::fontWeightIsBold):
+        * editing/mac/EditorMac.mm: Ditto.
+        (WebCore::Editor::applyFontStyles):
+        * platform/graphics/FontCache.h: Unify our font selection values into
+        their enclosing struct, FontSelectionCapabilities. Also, clean up utility
+        functions.
+        * platform/graphics/FontCascade.cpp: Migrate off old enum types.
+        (WebCore::FontCascade::FontCascade):
+        * platform/graphics/FontCascade.h: Ditto.
+        (WebCore::FontCascade::italic):
+        (WebCore::FontCascade::weight):
+        * platform/graphics/FontDescription.cpp: Ditto.
+        (WebCore::FontDescription::FontDescription):
+        (WebCore::FontCascadeDescription::lighterWeight):
+        (WebCore::FontCascadeDescription::bolderWeight):
+        (WebCore::FontDescription::traitsMask): Deleted.
+        * platform/graphics/FontDescription.h: Migrate off old enum types.
+        (WebCore::FontDescription::italic):
+        (WebCore::FontDescription::stretch):
+        (WebCore::FontDescription::weight):
+        (WebCore::FontDescription::fontSelectionRequest):
+        (WebCore::FontDescription::computedPixelSize):
+        (WebCore::FontDescription::setItalic):
+        (WebCore::FontDescription::setStretch):
+        (WebCore::FontDescription::setIsItalic):
+        (WebCore::FontDescription::setWeight):
+        (WebCore::FontDescription::operator==):
+        (WebCore::FontCascadeDescription::lighterWeight):
+        (WebCore::FontCascadeDescription::bolderWeight):
+        (WebCore::FontCascadeDescription::initialItalic):
+        (WebCore::FontCascadeDescription::initialWeight):
+        (WebCore::FontCascadeDescription::initialStretch):
+        * platform/graphics/FontSelectionAlgorithm.cpp: Delete code which was only
+        present to convert from the old enum types to the new FontSelectionRequest
+        type.
+        (WebCore::fontSelectionRequestForTraitsMask): Deleted.
+        (WebCore::initialFontSelectionCapabilitiesForTraitsMask): Deleted.
+        (WebCore::fontSelectionCapabilitiesForTraitsMask): Deleted.
+        * platform/graphics/FontSelectionAlgorithm.h: Migrate to new named functions
+        for special values.
+        (WebCore::isItalic):
+        (WebCore::boldWeightValue):
+        (WebCore::normalWeightValue):
+        (WebCore::isFontWeightBold):
+        (WebCore::normalStretchValue):
+        (WebCore::FontSelectionRequest::FontSelectionRequest):
+        * platform/graphics/cocoa/FontCacheCoreText.cpp: Migrate all platforms which
+        compile this file to know about FontDatabase. This simplifies the interaction
+        between @font-face fonts and installed fonts. Also, migrate off old enum types.
+        (WebCore::stretchFromCoreTextTraits):
+        (WebCore::fontWeightFromCoreText):
+        (WebCore::capabilitiesForFontDescriptor):
+        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
+        (WebCore::platformFontLookupWithFamily):
+        (WebCore::invalidateFontCache):
+        (WebCore::fontWithFamily):
+        (WebCore::FontCache::createFontPlatformData):
+        (WebCore::lookupFallbackFont):
+        (WebCore::toTraitsMask): Deleted.
+        (WebCore::isFontWeightBold): Deleted.
+        (WebCore::toCoreTextFontWeight): Deleted.
+        (): Deleted.
+        (WebCore::FontDatabase::capabilitiesForFontDescriptor): Deleted.
+        (WebCore::calculateFontSelectionRequest): Deleted.
+        * platform/graphics/freetype/FontCacheFreeType.cpp: Migrate off old enum types.
+        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
+        (WebCore::fontWeightToFontconfigWeight):
+        (): Deleted.
+        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Ditto.
+        (WebCore::FontPlatformData::FontPlatformData):
+        * platform/graphics/ios/FontCacheIOS.mm: Ditto.
+        (WebCore::baseSystemFontDescriptor):
+        (WebCore::systemFontModificationAttributes):
+        (WebCore::systemFontDescriptor):
+        (WebCore::platformFontWithFamilySpecialCase):
+        (WebCore::FontCache::weightOfCTFont): Deleted.
+        * platform/graphics/mac/FontCacheMac.mm: Ditto.
+        (WebCore::toNSFontWeight):
+        (WebCore::platformFontWithFamilySpecialCase):
+        * platform/graphics/win/FontCacheWin.cpp: Ditto.
+        (WebCore::toGDIFontWeight):
+        (WebCore::traitsInFamilyEnumProc):
+        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
+        (): Deleted.
+        * platform/mock/MockRealtimeVideoSource.cpp: Ditto.
+        (WebCore::MockRealtimeVideoSource::applySize):
+        * platform/text/TextFlags.h: Delete old enum types.
+        * platform/win/DragImageWin.cpp: Migrate off old enum types.
+        (WebCore::dragLabelFont):
+        * rendering/RenderEmbeddedObject.cpp: Ditto.
+        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
+        * rendering/RenderThemeGtk.cpp: Ditto.
+        (WebCore::RenderThemeGtk::updateCachedSystemFontDescription):
+        * rendering/RenderThemeIOS.mm: Ditto.
+        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
+        * rendering/RenderThemeMac.mm: Ditto.
+        (WebCore::toFontWeight):
+        * rendering/RenderThemeWin.cpp: Ditto.
+        (WebCore::fillFontDescription):
+
</ins><span class="cx"> 2017-03-06  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] Disable autoplay of silent videos in low power mode
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -13873,6 +13873,8 @@
</span><span class="cx">                 C28083411C6DC96A001451B6 /* JSFontFaceCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFontFaceCustom.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C2AB0AF41E6B3C6C001348C5 /* FontSelectionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontSelectionAlgorithm.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C2AB0AF51E6B3C6C001348C5 /* FontSelectionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontSelectionAlgorithm.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                C2AB0B021E6DE32B001348C5 /* FontSelectionKeywordValues.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontSelectionKeywordValues.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                C2AB0B031E6DE92C001348C5 /* FontSelectionValueInlines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontSelectionValueInlines.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 C2F4E7881E45AEDF006D7105 /* ComplexTextController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComplexTextController.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C2F4E7891E45AEDF006D7105 /* ComplexTextController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComplexTextController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 C330A22113EC196B0000B45B /* ColorChooser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorChooser.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -22371,6 +22373,7 @@
</span><span class="cx">                                 379919951200DDF400EA041C /* WOFFFileFormat.h */,
</span><span class="cx">                                 C2AB0AF41E6B3C6C001348C5 /* FontSelectionAlgorithm.cpp */,
</span><span class="cx">                                 C2AB0AF51E6B3C6C001348C5 /* FontSelectionAlgorithm.h */,
</span><ins>+                                C2AB0B021E6DE32B001348C5 /* FontSelectionKeywordValues.h */,
</ins><span class="cx">                         );
</span><span class="cx">                         path = graphics;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -24217,6 +24220,7 @@
</span><span class="cx">                                 3FFFF9A7159D9A550020BBD5 /* WebKitCSSViewportRule.h */,
</span><span class="cx">                                 3F2B33E3165ABD3500E3987C /* WebKitCSSViewportRule.idl */,
</span><span class="cx">                                 31055BB81E4FE18900EB604E /* WebKitFontFamilyNames.in */,
</span><ins>+                                C2AB0B031E6DE92C001348C5 /* FontSelectionValueInlines.h */,
</ins><span class="cx">                         );
</span><span class="cx">                         path = css;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityAccessibilityRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -3500,7 +3500,7 @@
</span><span class="cx">     if (!m_renderer)
</span><span class="cx">         return false;
</span><span class="cx">     
</span><del>-    return m_renderer-&gt;style().fontDescription().weight() &gt;= FontWeightBold;
</del><ins>+    return isFontWeightBold(m_renderer-&gt;style().fontDescription().weight());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool AccessibilityRenderObject::hasItalicFont() const
</span><span class="lines">@@ -3508,7 +3508,7 @@
</span><span class="cx">     if (!m_renderer)
</span><span class="cx">         return false;
</span><span class="cx">     
</span><del>-    return m_renderer-&gt;style().fontDescription().italic() == FontItalicOn;
</del><ins>+    return isItalic(m_renderer-&gt;style().fontDescription().italic());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool AccessibilityRenderObject::hasPlainText() const
</span><span class="lines">@@ -3518,8 +3518,8 @@
</span><span class="cx">     
</span><span class="cx">     const RenderStyle&amp; style = m_renderer-&gt;style();
</span><span class="cx">     
</span><del>-    return style.fontDescription().weight() == FontWeightNormal
-        &amp;&amp; style.fontDescription().italic() == FontItalicOff
</del><ins>+    return style.fontDescription().weight() == normalWeightValue()
+        &amp;&amp; style.fontDescription().italic() == normalItalicValue()
</ins><span class="cx">         &amp;&amp; style.textDecorationsInEffect() == TextDecorationNone;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityatkWebKitAccessibleInterfaceTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -136,35 +136,7 @@
</span><span class="cx"> 
</span><span class="cx">     result = addToAtkAttributeSet(result, atk_text_attribute_get_name(ATK_TEXT_ATTR_FAMILY_NAME), fontFamilyName.utf8().data());
</span><span class="cx"> 
</span><del>-    int fontWeight = -1;
-    switch (style-&gt;fontCascade().weight()) {
-    case FontWeight100:
-        fontWeight = 100;
-        break;
-    case FontWeight200:
-        fontWeight = 200;
-        break;
-    case FontWeight300:
-        fontWeight = 300;
-        break;
-    case FontWeight400:
-        fontWeight = 400;
-        break;
-    case FontWeight500:
-        fontWeight = 500;
-        break;
-    case FontWeight600:
-        fontWeight = 600;
-        break;
-    case FontWeight700:
-        fontWeight = 700;
-        break;
-    case FontWeight800:
-        fontWeight = 800;
-        break;
-    case FontWeight900:
-        fontWeight = 900;
-    }
</del><ins>+    int fontWeight = static_cast&lt;float&gt;(style-&gt;fontCascade().weight());
</ins><span class="cx">     if (fontWeight &gt; 0) {
</span><span class="cx">         buffer.reset(g_strdup_printf(&quot;%i&quot;, fontWeight));
</span><span class="cx">         result = addToAtkAttributeSet(result, atk_text_attribute_get_name(ATK_TEXT_ATTR_WEIGHT), buffer.get());
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -56,6 +56,7 @@
</span><span class="cx"> #include &quot;DeprecatedCSSOMValue.h&quot;
</span><span class="cx"> #include &quot;Document.h&quot;
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><ins>+#include &quot;FontSelectionValueInlines.h&quot;
</ins><span class="cx"> #include &quot;FontTaggedSettings.h&quot;
</span><span class="cx"> #include &quot;HTMLFrameOwnerElement.h&quot;
</span><span class="cx"> #include &quot;NodeRenderStyle.h&quot;
</span><span class="lines">@@ -1912,37 +1913,30 @@
</span><span class="cx">     return zoomAdjustedPixelValue(style.fontDescription().computedSize(), style);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static Ref&lt;CSSPrimitiveValue&gt; fontStyleFromStyle(const RenderStyle&amp; style)
</del><ins>+static Ref&lt;CSSPrimitiveValue&gt; fontWeightFromStyle(const RenderStyle&amp; style)
</ins><span class="cx"> {
</span><del>-    if (style.fontDescription().italic())
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueItalic);
-    return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
</del><ins>+    auto weight = style.fontDescription().weight();
+    if (auto value = fontWeightKeyword(weight))
+        return CSSValuePool::singleton().createIdentifierValue(value.value());
+    return CSSValuePool::singleton().createValue(static_cast&lt;float&gt;(weight), CSSPrimitiveValue::CSS_NUMBER);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static Ref&lt;CSSPrimitiveValue&gt; fontStretchFromStyle(const RenderStyle&amp; style)
</span><span class="cx"> {
</span><span class="cx">     auto stretch = style.fontDescription().stretch();
</span><del>-    if (stretch == FontSelectionValue(50))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueUltraCondensed);
-    if (stretch == FontSelectionValue(62.5f))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueExtraCondensed);
-    if (stretch == FontSelectionValue(75))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueCondensed);
-    if (stretch == FontSelectionValue(87.5f))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueSemiCondensed);
-    if (stretch == FontSelectionValue(100))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
-    if (stretch == FontSelectionValue(112.5f))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueSemiExpanded);
-    if (stretch == FontSelectionValue(125))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueExpanded);
-    if (stretch == FontSelectionValue(150))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueExtraExpanded);
-    if (stretch == FontSelectionValue(200))
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueUltraExpanded);
</del><ins>+    if (auto keyword = fontStretchKeyword(stretch))
+        return CSSValuePool::singleton().createIdentifierValue(keyword.value());
</ins><span class="cx">     return CSSValuePool::singleton().createValue(static_cast&lt;float&gt;(stretch), CSSPrimitiveValue::CSS_PERCENTAGE);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static Ref&lt;CSSPrimitiveValue&gt; fontStyleFromStyle(const RenderStyle&amp; style)
+{
+    auto italic = style.fontDescription().italic();
+    if (auto italicValue = fontStyleKeyword(italic))
+        return CSSValuePool::singleton().createIdentifierValue(italicValue.value());
+    return CSSValuePool::singleton().createValue(static_cast&lt;float&gt;(italic), CSSPrimitiveValue::CSS_DEG);
+}
+
</ins><span class="cx"> static Ref&lt;CSSValue&gt; fontVariantFromStyle(const RenderStyle&amp; style)
</span><span class="cx"> {
</span><span class="cx">     if (style.fontDescription().variantSettings().isAllNormal())
</span><span class="lines">@@ -2130,32 +2124,6 @@
</span><span class="cx">     return WTFMove(list);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static Ref&lt;CSSPrimitiveValue&gt; fontWeightFromStyle(const RenderStyle&amp; style)
-{
-    switch (style.fontDescription().weight()) {
-    case FontWeight100:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValue100);
-    case FontWeight200:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValue200);
-    case FontWeight300:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValue300);
-    case FontWeightNormal:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
-    case FontWeight500:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValue500);
-    case FontWeight600:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValue600);
-    case FontWeightBold:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueBold);
-    case FontWeight800:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValue800);
-    case FontWeight900:
-        return CSSValuePool::singleton().createIdentifierValue(CSSValue900);
-    }
-    ASSERT_NOT_REACHED();
-    return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
-}
-
</del><span class="cx"> static Ref&lt;CSSValue&gt; fontSynthesisFromStyle(const RenderStyle&amp; style)
</span><span class="cx"> {
</span><span class="cx">     if (style.fontDescription().fontSynthesis() == FontSynthesisNone)
</span><span class="lines">@@ -2556,6 +2524,39 @@
</span><span class="cx">     return propertyValue ? propertyValue-&gt;cssText() : emptyString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static Ref&lt;CSSFontValue&gt; fontShorthandValueForSelectionProperties(const FontDescription&amp; fontDescription)
+{
+    auto computedFont = CSSFontValue::create();
+
+    auto variantCaps = fontDescription.variantCaps();
+    if (variantCaps == FontVariantCaps::Small)
+        computedFont-&gt;variant = CSSValuePool::singleton().createIdentifierValue(CSSValueSmallCaps);
+    else if (variantCaps == FontVariantCaps::Normal)
+        computedFont-&gt;variant = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
+    else
+        return CSSFontValue::create();
+
+    auto weight = fontDescription.weight();
+    if (auto value = fontWeightKeyword(weight))
+        computedFont-&gt;weight = CSSValuePool::singleton().createIdentifierValue(value.value());
+    else if (isCSS21Weight(weight))
+        computedFont-&gt;weight = CSSValuePool::singleton().createValue(static_cast&lt;float&gt;(weight), CSSPrimitiveValue::CSS_NUMBER);
+    else
+        return CSSFontValue::create();
+
+    if (auto keyword = fontStretchKeyword(fontDescription.stretch()))
+        computedFont-&gt;stretch = CSSValuePool::singleton().createIdentifierValue(keyword.value());
+    else
+        return CSSFontValue::create();
+
+    if (auto italic = fontStyleKeyword(fontDescription.italic()))
+        computedFont-&gt;style = CSSValuePool::singleton().createIdentifierValue(italic.value());
+    else
+        return CSSFontValue::create();
+
+    return computedFont;
+}
+
</ins><span class="cx"> RefPtr&lt;CSSValue&gt; ComputedStyleExtractor::propertyValue(CSSPropertyID propertyID, EUpdateLayout updateLayout)
</span><span class="cx"> {
</span><span class="cx">     auto* styledElement = this-&gt;styledElement();
</span><span class="lines">@@ -2906,14 +2907,7 @@
</span><span class="cx">                 return cssValuePool.createIdentifierValue(CSSValueNone);
</span><span class="cx">             return cssValuePool.createValue(style-&gt;floating());
</span><span class="cx">         case CSSPropertyFont: {
</span><del>-            auto computedFont = CSSFontValue::create();
-            computedFont-&gt;style = fontStyleFromStyle(*style);
-            if (style-&gt;fontDescription().variantCaps() == FontVariantCaps::Small)
-                computedFont-&gt;variant = CSSValuePool::singleton().createIdentifierValue(CSSValueSmallCaps);
-            else
-                computedFont-&gt;variant = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
-            computedFont-&gt;weight = fontWeightFromStyle(*style);
-            computedFont-&gt;stretch = fontStretchFromStyle(*style);
</del><ins>+            auto computedFont = fontShorthandValueForSelectionProperties(style-&gt;fontDescription());
</ins><span class="cx">             computedFont-&gt;size = fontSizeFromStyle(*style);
</span><span class="cx">             computedFont-&gt;lineHeight = lineHeightFromStyle(*style);
</span><span class="cx">             computedFont-&gt;family = fontFamilyListFromStyle(*style);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFace.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFace.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSFontFace.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -124,150 +124,111 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-std::optional&lt;FontTraitsMask&gt; CSSFontFace::calculateStyleMask(CSSValue&amp; style)
</del><ins>+static FontSelectionRange calculateWeightRange(CSSValue&amp; value)
</ins><span class="cx"> {
</span><del>-    if (!is&lt;CSSPrimitiveValue&gt;(style))
-        return std::nullopt;
</del><ins>+    // FIXME: Parse range-based values.
+    ASSERT(is&lt;CSSPrimitiveValue&gt;(value));
+    auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
</ins><span class="cx"> 
</span><del>-    switch (downcast&lt;CSSPrimitiveValue&gt;(style).valueID()) {
-    case CSSValueNormal:
-        return FontStyleNormalMask;
-    case CSSValueItalic:
-    case CSSValueOblique:
-        return FontStyleItalicMask;
-    default:
-        return FontStyleNormalMask;
</del><ins>+    FontSelectionValue result;
+    if (primitiveValue.isNumber()) {
+        result = FontSelectionValue::clampFloat(primitiveValue.floatValue());
+        return { result, result };
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return FontStyleNormalMask;
-}
</del><ins>+    ASSERT(primitiveValue.isValueID());
+    if (auto value = fontWeightValue(primitiveValue.valueID()))
+        result = value.value();
+    else {
+        ASSERT_NOT_REACHED();
+        result = normalWeightValue();
+    }
</ins><span class="cx"> 
</span><del>-bool CSSFontFace::setStyle(CSSValue&amp; style)
-{
-    if (auto mask = calculateStyleMask(style)) {
-        m_traitsMask = static_cast&lt;FontTraitsMask&gt;((static_cast&lt;unsigned&gt;(m_traitsMask) &amp; (~FontStyleMask)) | mask.value());
-
-        if (m_cssConnection)
-            m_cssConnection-&gt;mutableProperties().setProperty(CSSPropertyFontStyle, &amp;style);
-
-        iterateClients(m_clients, [&amp;](Client&amp; client) {
-            client.fontPropertyChanged(*this);
-        });
-
-        return true;
-    }
-    return false;
</del><ins>+    return { result, result };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-std::optional&lt;FontTraitsMask&gt; CSSFontFace::calculateWeightMask(CSSValue&amp; weight)
</del><ins>+void CSSFontFace::setWeight(CSSValue&amp; weight)
</ins><span class="cx"> {
</span><del>-    if (!is&lt;CSSPrimitiveValue&gt;(weight))
-        return std::nullopt;
</del><ins>+    auto range = calculateWeightRange(weight);
+    setWeight(range);
</ins><span class="cx"> 
</span><del>-    switch (downcast&lt;CSSPrimitiveValue&gt;(weight).valueID()) {
-    case CSSValueBold:
-    case CSSValueBolder:
-    case CSSValue700:
-        return FontWeight700Mask;
-    case CSSValueNormal:
-    case CSSValue400:
-        return FontWeight400Mask;
-    case CSSValue900:
-        return FontWeight900Mask;
-    case CSSValue800:
-        return FontWeight800Mask;
-    case CSSValue600:
-        return FontWeight600Mask;
-    case CSSValue500:
-        return FontWeight500Mask;
-    case CSSValue300:
-        return FontWeight300Mask;
-    case CSSValueLighter:
-    case CSSValue200:
-        return FontWeight200Mask;
-    case CSSValue100:
-        return FontWeight100Mask;
-    default:
-        return FontWeight400Mask;
-    }
</del><ins>+    if (m_cssConnection)
+        m_cssConnection-&gt;mutableProperties().setProperty(CSSPropertyFontWeight, &amp;weight);
</ins><span class="cx"> 
</span><del>-    return FontWeight400Mask;
</del><ins>+    iterateClients(m_clients, [&amp;](Client&amp; client) {
+        client.fontPropertyChanged(*this);
+    });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-std::optional&lt;FontSelectionValue&gt; CSSFontFace::calculateStretch(CSSValue&amp; stretch)
</del><ins>+static FontSelectionRange calculateStretchRange(CSSValue&amp; value)
</ins><span class="cx"> {
</span><del>-    if (!is&lt;CSSPrimitiveValue&gt;(stretch))
-        return std::nullopt;
</del><ins>+    // FIXME: Parse range-based values.
+    ASSERT(is&lt;CSSPrimitiveValue&gt;(value));
+    const auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
</ins><span class="cx"> 
</span><del>-    const auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(stretch);
</del><ins>+    FontSelectionValue result;
</ins><span class="cx">     if (primitiveValue.isPercentage() || primitiveValue.isNumber()) {
</span><del>-        auto value = primitiveValue.floatValue();
-        if (value &lt; static_cast&lt;float&gt;(FontSelectionValue::minimumValue()))
-            return FontSelectionValue::minimumValue();
-        if (value &gt; static_cast&lt;float&gt;(FontSelectionValue::maximumValue()))
-            return FontSelectionValue::maximumValue();
-        return FontSelectionValue(value);
</del><ins>+        result = FontSelectionValue::clampFloat(primitiveValue.floatValue());
+        return { result, result };
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    switch (primitiveValue.valueID()) {
-    case CSSValueUltraCondensed:
-        return FontSelectionValue(50);
-    case CSSValueExtraCondensed:
-        return FontSelectionValue(62.5f);
-    case CSSValueCondensed:
-        return FontSelectionValue(75);
-    case CSSValueSemiCondensed:
-        return FontSelectionValue(87.5f);
-    case CSSValueNormal:
-        return FontSelectionValue(100);
-    case CSSValueSemiExpanded:
-        return FontSelectionValue(112.5f);
-    case CSSValueExpanded:
-        return FontSelectionValue(125);
-    case CSSValueExtraExpanded:
-        return FontSelectionValue(150);
-    case CSSValueUltraExpanded:
-        return FontSelectionValue(200);
-    default:
</del><ins>+    ASSERT(primitiveValue.isValueID());
+    if (auto value = fontStretchValue(primitiveValue.valueID()))
+        result = value.value();
+    else {
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><del>-        return std::nullopt;
</del><ins>+        result = normalStretchValue();
</ins><span class="cx">     }
</span><ins>+
+    return { result, result };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool CSSFontFace::setWeight(CSSValue&amp; weight)
</del><ins>+void CSSFontFace::setStretch(CSSValue&amp; style)
</ins><span class="cx"> {
</span><del>-    if (auto mask = calculateWeightMask(weight)) {
-        m_traitsMask = static_cast&lt;FontTraitsMask&gt;((static_cast&lt;unsigned&gt;(m_traitsMask) &amp; (~FontWeightMask)) | mask.value());
</del><ins>+    auto range = calculateStretchRange(style);
+    setStretch(range);
</ins><span class="cx"> 
</span><del>-        if (m_cssConnection)
-            m_cssConnection-&gt;mutableProperties().setProperty(CSSPropertyFontWeight, &amp;weight);
</del><ins>+    if (m_cssConnection)
+        m_cssConnection-&gt;mutableProperties().setProperty(CSSPropertyFontStretch, &amp;style);
</ins><span class="cx"> 
</span><del>-        iterateClients(m_clients, [&amp;](Client&amp; client) {
-            client.fontPropertyChanged(*this);
-        });
</del><ins>+    iterateClients(m_clients, [&amp;](Client&amp; client) {
+        client.fontPropertyChanged(*this);
+    });
+}
</ins><span class="cx"> 
</span><del>-        return true;
</del><ins>+static FontSelectionRange calculateItalicRange(CSSValue&amp; value)
+{
+    // FIXME: Parse range-based values.
+    ASSERT(is&lt;CSSPrimitiveValue&gt;(value));
+    const auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
+
+    FontSelectionValue result;
+    if (primitiveValue.isAngle() || primitiveValue.isNumber() || primitiveValue.isCalculated()) {
+        result = FontSelectionValue::clampFloat(primitiveValue.floatValue(CSSPrimitiveValue::CSS_DEG));
+        return { result, result };
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return false;
</del><ins>+    ASSERT(primitiveValue.isValueID());
+    if (auto value = fontStyleValue(primitiveValue.valueID()))
+        result = value.value();
+    else {
+        ASSERT_NOT_REACHED();
+        result = normalItalicValue();
+    }
+    return { result, result };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool CSSFontFace::setStretch(CSSValue&amp; stretch)
</del><ins>+void CSSFontFace::setStyle(CSSValue&amp; style)
</ins><span class="cx"> {
</span><del>-    if (auto parsedStretch = calculateStretch(stretch)) {
-        m_stretch = FontSelectionRange(parsedStretch.value(), parsedStretch.value());
</del><ins>+    auto range = calculateItalicRange(style);
+    setStyle(range);
</ins><span class="cx"> 
</span><del>-        if (m_cssConnection)
-            m_cssConnection-&gt;mutableProperties().setProperty(CSSPropertyFontStretch, &amp;stretch);
</del><ins>+    if (m_cssConnection)
+        m_cssConnection-&gt;mutableProperties().setProperty(CSSPropertyFontStyle, &amp;style);
</ins><span class="cx"> 
</span><del>-        iterateClients(m_clients, [&amp;](Client&amp; client) {
-            client.fontPropertyChanged(*this);
-        });
-
-        return true;
-    }
-
-    return false;
</del><ins>+    iterateClients(m_clients, [&amp;](Client&amp; client) {
+        client.fontPropertyChanged(*this);
+    });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool CSSFontFace::setUnicodeRange(CSSValue&amp; unicodeRange)
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFace.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFace.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSFontFace.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CSSFontFaceRule.h&quot;
</span><span class="cx"> #include &quot;FontSelectionAlgorithm.h&quot;
</span><ins>+#include &quot;FontSelectionValueInlines.h&quot;
</ins><span class="cx"> #include &quot;FontTaggedSettings.h&quot;
</span><span class="cx"> #include &quot;TextFlags.h&quot;
</span><span class="cx"> #include &quot;Timer.h&quot;
</span><span class="lines">@@ -64,9 +65,9 @@
</span><span class="cx">     // FIXME: These functions don't need to have boolean return values.
</span><span class="cx">     // Callers only call this with known-valid CSS values.
</span><span class="cx">     bool setFamilies(CSSValue&amp;);
</span><del>-    bool setStyle(CSSValue&amp;);
-    bool setWeight(CSSValue&amp;);
-    bool setStretch(CSSValue&amp;);
</del><ins>+    void setStyle(CSSValue&amp;);
+    void setWeight(CSSValue&amp;);
+    void setStretch(CSSValue&amp;);
</ins><span class="cx">     bool setUnicodeRange(CSSValue&amp;);
</span><span class="cx">     bool setVariantLigatures(CSSValue&amp;);
</span><span class="cx">     bool setVariantPosition(CSSValue&amp;);
</span><span class="lines">@@ -79,23 +80,22 @@
</span><span class="cx">     enum class Status;
</span><span class="cx">     struct UnicodeRange;
</span><span class="cx">     const CSSValueList* families() const { return m_families.get(); }
</span><del>-    FontTraitsMask traitsMask() const { return m_traitsMask; }
-    FontSelectionRange stretch() const { return m_stretch; }
</del><ins>+    FontSelectionRange weight() const { return m_fontSelectionCapabilities.weight; }
+    FontSelectionRange stretch() const { return m_fontSelectionCapabilities.width; }
+    FontSelectionRange italic() const { return m_fontSelectionCapabilities.slope; }
+    FontSelectionCapabilities fontSelectionCapabilities() const { return m_fontSelectionCapabilities; }
</ins><span class="cx">     const Vector&lt;UnicodeRange&gt;&amp; ranges() const { return m_ranges; }
</span><span class="cx">     const FontFeatureSettings&amp; featureSettings() const { return m_featureSettings; }
</span><span class="cx">     const FontVariantSettings&amp; variantSettings() const { return m_variantSettings; }
</span><span class="cx">     void setVariantSettings(const FontVariantSettings&amp; variantSettings) { m_variantSettings = variantSettings; }
</span><del>-    void setTraitsMask(FontTraitsMask traitsMask) { m_traitsMask = traitsMask; }
-    void setStretch(FontSelectionRange stretch) { m_stretch = stretch; }
</del><ins>+    void setWeight(FontSelectionRange weight) { m_fontSelectionCapabilities.weight = weight; }
+    void setStretch(FontSelectionRange stretch) { m_fontSelectionCapabilities.width = stretch; }
+    void setStyle(FontSelectionRange italic) { m_fontSelectionCapabilities.slope = italic; }
+    void setFontSelectionCapabilities(FontSelectionCapabilities capabilities) { m_fontSelectionCapabilities = capabilities; }
</ins><span class="cx">     bool isLocalFallback() const { return m_isLocalFallback; }
</span><span class="cx">     Status status() const { return m_status; }
</span><span class="cx">     StyleRuleFontFace* cssConnection() const { return m_cssConnection.get(); }
</span><del>-    FontSelectionCapabilities fontSelectionCapabilities() const { return fontSelectionCapabilitiesForTraitsMask(m_traitsMask, m_stretch); }
</del><span class="cx"> 
</span><del>-    static std::optional&lt;FontTraitsMask&gt; calculateStyleMask(CSSValue&amp; style);
-    static std::optional&lt;FontTraitsMask&gt; calculateWeightMask(CSSValue&amp; weight);
-    static std::optional&lt;FontSelectionValue&gt; calculateStretch(CSSValue&amp; stretch);
-
</del><span class="cx">     class Client;
</span><span class="cx">     void addClient(Client&amp;);
</span><span class="cx">     void removeClient(Client&amp;);
</span><span class="lines">@@ -168,7 +168,6 @@
</span><span class="cx">     void timeoutFired();
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;CSSValueList&gt; m_families;
</span><del>-    FontTraitsMask m_traitsMask { static_cast&lt;FontTraitsMask&gt;(FontStyleNormalMask | FontWeight400Mask) };
</del><span class="cx">     Vector&lt;UnicodeRange&gt; m_ranges;
</span><span class="cx">     FontFeatureSettings m_featureSettings;
</span><span class="cx">     FontVariantSettings m_variantSettings;
</span><span class="lines">@@ -178,8 +177,8 @@
</span><span class="cx">     RefPtr&lt;StyleRuleFontFace&gt; m_cssConnection;
</span><span class="cx">     HashSet&lt;Client*&gt; m_clients;
</span><span class="cx">     WeakPtr&lt;FontFace&gt; m_wrapper;
</span><ins>+    FontSelectionCapabilities m_fontSelectionCapabilities;
</ins><span class="cx">     Status m_status { Status::Pending };
</span><del>-    FontSelectionRange m_stretch { FontSelectionValue(100), FontSelectionValue(100) };
</del><span class="cx">     bool m_isLocalFallback { false };
</span><span class="cx">     bool m_sourcesPopulated { false };
</span><span class="cx">     bool m_mayBePurged { true };
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFaceSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFaceSet.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFaceSet.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSFontFaceSet.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -101,19 +101,18 @@
</span><span class="cx">     if (m_locallyInstalledFacesLookupTable.contains(familyName))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    Vector&lt;FontCache::TraitsAndStretch&gt; traitsAndStretch = FontCache::singleton().getTraitsAndStretchInFamily(familyName);
-    if (traitsAndStretch.isEmpty())
</del><ins>+    Vector&lt;FontSelectionCapabilities&gt; capabilities = FontCache::singleton().getFontSelectionCapabilitiesInFamily(familyName);
+    if (capabilities.isEmpty())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;Ref&lt;CSSFontFace&gt;&gt; faces;
</span><del>-    for (auto item : traitsAndStretch) {
</del><ins>+    for (auto item : capabilities) {
</ins><span class="cx">         Ref&lt;CSSFontFace&gt; face = CSSFontFace::create(nullptr, nullptr, nullptr, true);
</span><span class="cx">         
</span><span class="cx">         Ref&lt;CSSValueList&gt; familyList = CSSValueList::createCommaSeparated();
</span><span class="cx">         familyList-&gt;append(CSSValuePool::singleton().createFontFamilyValue(familyName));
</span><span class="cx">         face-&gt;setFamilies(familyList.get());
</span><del>-        face-&gt;setTraitsMask(item.traits);
-        face-&gt;setStretch(item.stretch);
</del><ins>+        face-&gt;setFontSelectionCapabilities(item);
</ins><span class="cx">         face-&gt;adoptSource(std::make_unique&lt;CSSFontFaceSource&gt;(face.get(), familyName));
</span><span class="cx">         ASSERT(!face-&gt;allSourcesFailed());
</span><span class="cx">         faces.append(WTFMove(face));
</span><span class="lines">@@ -287,40 +286,91 @@
</span><span class="cx">     return m_faces[i];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static std::optional&lt;FontTraitsMask&gt; computeFontTraitsMask(MutableStyleProperties&amp; style)
</del><ins>+static std::optional&lt;FontSelectionValue&gt; calculateWeightValue(CSSValue&amp; weight)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;CSSValue&gt; styleValue = style.getPropertyCSSValue(CSSPropertyFontStyle).get();
-    if (!styleValue)
-        styleValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
</del><ins>+    if (!is&lt;CSSPrimitiveValue&gt;(weight))
+        return std::nullopt;
</ins><span class="cx"> 
</span><del>-    FontTraitsMask styleMask;
-    if (auto styleMaskOptional = CSSFontFace::calculateStyleMask(*styleValue))
-        styleMask = styleMaskOptional.value();
-    else
</del><ins>+    auto&amp; primitiveWeight = downcast&lt;CSSPrimitiveValue&gt;(weight);
+    if (primitiveWeight.isNumber())
+        return FontSelectionValue::clampFloat(primitiveWeight.floatValue());
+
+    if (!primitiveWeight.isValueID())
</ins><span class="cx">         return std::nullopt;
</span><span class="cx"> 
</span><ins>+    if (auto value = fontWeightValue(primitiveWeight.valueID()))
+        return value.value();
+    ASSERT_NOT_REACHED();
+    return normalWeightValue();
+}
+
+static std::optional&lt;FontSelectionValue&gt; calculateStretchValue(CSSValue&amp; style)
+{
+    if (!is&lt;CSSPrimitiveValue&gt;(style))
+        return std::nullopt;
+
+    auto&amp; primitiveStretch = downcast&lt;CSSPrimitiveValue&gt;(style);
+    if (primitiveStretch.isNumber() || primitiveStretch.isPercentage())
+        return FontSelectionValue::clampFloat(primitiveStretch.floatValue());
+
+    if (!primitiveStretch.isValueID())
+        return std::nullopt;
+
+    if (auto value = fontStretchValue(primitiveStretch.valueID()))
+        return value.value();
+    return normalStretchValue();
+}
+
+static std::optional&lt;FontSelectionValue&gt; calculateStyleValue(CSSValue&amp; style)
+{
+    if (!is&lt;CSSPrimitiveValue&gt;(style))
+        return std::nullopt;
+
+    auto&amp; primitiveSlant = downcast&lt;CSSPrimitiveValue&gt;(style);
+    if (primitiveSlant.isNumber() || primitiveSlant.isAngle())
+        return FontSelectionValue::clampFloat(primitiveSlant.floatValue());
+
+    if (!primitiveSlant.isValueID())
+        return std::nullopt;
+
+    if (auto value = fontStyleValue(downcast&lt;CSSPrimitiveValue&gt;(style).valueID()))
+        return value.value();
+    return normalItalicValue();
+}
+
+static std::optional&lt;FontSelectionRequest&gt; computeFontSelectionRequest(MutableStyleProperties&amp; style)
+{
</ins><span class="cx">     RefPtr&lt;CSSValue&gt; weightValue = style.getPropertyCSSValue(CSSPropertyFontWeight).get();
</span><span class="cx">     if (!weightValue)
</span><span class="cx">         weightValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
</span><span class="cx"> 
</span><del>-    FontTraitsMask weightMask;
-    if (auto weightMaskOptional = CSSFontFace::calculateWeightMask(*weightValue))
-        weightMask = weightMaskOptional.value();
</del><ins>+    FontSelectionValue weightSelectionValue;
+    if (auto weightOptional = calculateWeightValue(*weightValue))
+        weightSelectionValue = weightOptional.value();
</ins><span class="cx">     else
</span><span class="cx">         return std::nullopt;
</span><span class="cx"> 
</span><del>-    return static_cast&lt;FontTraitsMask&gt;(static_cast&lt;unsigned&gt;(styleMask) | static_cast&lt;unsigned&gt;(weightMask));
-}
-
-static std::optional&lt;FontSelectionValue&gt; computeFontStretch(MutableStyleProperties&amp; style)
-{
</del><span class="cx">     RefPtr&lt;CSSValue&gt; stretchValue = style.getPropertyCSSValue(CSSPropertyFontStretch).get();
</span><span class="cx">     if (!stretchValue)
</span><span class="cx">         stretchValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
</span><span class="cx"> 
</span><del>-    if (auto stretchOptional = CSSFontFace::calculateStretch(*stretchValue))
-        return stretchOptional.value();
-    return std::nullopt;
</del><ins>+    FontSelectionValue stretchSelectionValue;
+    if (auto stretchOptional = calculateStretchValue(*weightValue))
+        stretchSelectionValue = stretchOptional.value();
+    else
+        return std::nullopt;
+
+    RefPtr&lt;CSSValue&gt; styleValue = style.getPropertyCSSValue(CSSPropertyFontStyle).get();
+    if (!styleValue)
+        styleValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
+
+    FontSelectionValue styleSelectionValue;
+    if (auto styleOptional = calculateStyleValue(*styleValue))
+        styleSelectionValue = styleOptional.value();
+    else
+        return std::nullopt;
+
+    return {{ weightSelectionValue, stretchSelectionValue, styleSelectionValue }};
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static HashSet&lt;UChar32&gt; codePointsFromString(StringView stringView)
</span><span class="lines">@@ -346,18 +396,12 @@
</span><span class="cx">     if (parseResult == CSSParser::ParseResult::Error)
</span><span class="cx">         return Exception { SYNTAX_ERR };
</span><span class="cx"> 
</span><del>-    FontTraitsMask fontTraitsMask;
-    if (auto maskOptional = computeFontTraitsMask(style.get()))
-        fontTraitsMask = maskOptional.value();
</del><ins>+    FontSelectionRequest request;
+    if (auto fontSelectionRequestOptional = computeFontSelectionRequest(style.get()))
+        request = fontSelectionRequestOptional.value();
</ins><span class="cx">     else
</span><span class="cx">         return Exception { SYNTAX_ERR };
</span><span class="cx"> 
</span><del>-    FontSelectionValue stretch;
-    if (auto stretchOptional = computeFontStretch(style.get()))
-        stretch = stretchOptional.value();
-    else
-        return Exception { SYNTAX_ERR };
-
</del><span class="cx">     auto family = style-&gt;getPropertyCSSValue(CSSPropertyFontFamily);
</span><span class="cx">     if (!is&lt;CSSValueList&gt;(family.get()))
</span><span class="cx">         return Exception { SYNTAX_ERR };
</span><span class="lines">@@ -377,7 +421,7 @@
</span><span class="cx">     for (auto codePoint : codePointsFromString(string)) {
</span><span class="cx">         bool found = false;
</span><span class="cx">         for (auto&amp; family : familyOrder) {
</span><del>-            auto* faces = fontFace(fontTraitsMask, stretch, family);
</del><ins>+            auto* faces = fontFace(request, family);
</ins><span class="cx">             if (!faces)
</span><span class="cx">                 continue;
</span><span class="cx">             for (auto&amp; constituentFace : faces-&gt;constituentFaces()) {
</span><span class="lines">@@ -412,7 +456,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-CSSSegmentedFontFace* CSSFontFaceSet::fontFace(FontTraitsMask traitsMask, FontSelectionValue stretch, const AtomicString&amp; family)
</del><ins>+CSSSegmentedFontFace* CSSFontFaceSet::fontFace(FontSelectionRequest request, const AtomicString&amp; family)
</ins><span class="cx"> {
</span><span class="cx">     auto iterator = m_facesLookupTable.find(family);
</span><span class="cx">     if (iterator == m_facesLookupTable.end())
</span><span class="lines">@@ -419,9 +463,9 @@
</span><span class="cx">         return nullptr;
</span><span class="cx">     auto&amp; familyFontFaces = iterator-&gt;value;
</span><span class="cx"> 
</span><del>-    auto&amp; segmentedFontFaceCache = m_cache.add(family, HashMap&lt;unsigned, RefPtr&lt;CSSSegmentedFontFace&gt;&gt;()).iterator-&gt;value;
</del><ins>+    auto&amp; segmentedFontFaceCache = m_cache.add(family, FontSelectionHashMap()).iterator-&gt;value;
</ins><span class="cx"> 
</span><del>-    auto&amp; face = segmentedFontFaceCache.add(traitsMask, nullptr).iterator-&gt;value;
</del><ins>+    auto&amp; face = segmentedFontFaceCache.add(request, nullptr).iterator-&gt;value;
</ins><span class="cx">     if (face)
</span><span class="cx">         return face.get();
</span><span class="cx"> 
</span><span class="lines">@@ -430,8 +474,8 @@
</span><span class="cx">     Vector&lt;std::reference_wrapper&lt;CSSFontFace&gt;, 32&gt; candidateFontFaces;
</span><span class="cx">     for (int i = familyFontFaces.size() - 1; i &gt;= 0; --i) {
</span><span class="cx">         CSSFontFace&amp; candidate = familyFontFaces[i];
</span><del>-        unsigned candidateTraitsMask = candidate.traitsMask();
-        if ((traitsMask &amp; FontStyleNormalMask) &amp;&amp; !(candidateTraitsMask &amp; FontStyleNormalMask))
</del><ins>+        auto capabilities = candidate.fontSelectionCapabilities();
+        if (!isItalic(request.slope) &amp;&amp; isItalic(capabilities.slope.minimum))
</ins><span class="cx">             continue;
</span><span class="cx">         candidateFontFaces.append(candidate);
</span><span class="cx">     }
</span><span class="lines">@@ -439,8 +483,8 @@
</span><span class="cx">     auto localIterator = m_locallyInstalledFacesLookupTable.find(family);
</span><span class="cx">     if (localIterator != m_locallyInstalledFacesLookupTable.end()) {
</span><span class="cx">         for (auto&amp; candidate : localIterator-&gt;value) {
</span><del>-            unsigned candidateTraitsMask = candidate-&gt;traitsMask();
-            if ((traitsMask &amp; FontStyleNormalMask) &amp;&amp; !(candidateTraitsMask &amp; FontStyleNormalMask))
</del><ins>+            auto capabilities = candidate-&gt;fontSelectionCapabilities();
+            if (!isItalic(request.slope) &amp;&amp; isItalic(capabilities.slope.minimum))
</ins><span class="cx">                 continue;
</span><span class="cx">             candidateFontFaces.append(candidate);
</span><span class="cx">         }
</span><span class="lines">@@ -451,7 +495,7 @@
</span><span class="cx">         capabilities.reserveInitialCapacity(candidateFontFaces.size());
</span><span class="cx">         for (auto&amp; face : candidateFontFaces)
</span><span class="cx">             capabilities.uncheckedAppend(face.get().fontSelectionCapabilities());
</span><del>-        FontSelectionAlgorithm fontSelectionAlgorithm(fontSelectionRequestForTraitsMask(traitsMask, stretch), capabilities);
</del><ins>+        FontSelectionAlgorithm fontSelectionAlgorithm(request, capabilities);
</ins><span class="cx">         std::stable_sort(candidateFontFaces.begin(), candidateFontFaces.end(), [&amp;fontSelectionAlgorithm](const CSSFontFace&amp; first, const CSSFontFace&amp; second) {
</span><span class="cx">             auto firstCapabilities = first.fontSelectionCapabilities();
</span><span class="cx">             auto secondCapabilities = second.fontSelectionCapabilities();
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontFaceSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontFaceSet.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontFaceSet.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSFontFaceSet.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> 
</span><span class="cx">     ExceptionOr&lt;bool&gt; check(const String&amp; font, const String&amp; text);
</span><span class="cx"> 
</span><del>-    CSSSegmentedFontFace* fontFace(FontTraitsMask, FontSelectionValue stretch, const AtomicString&amp; family);
</del><ins>+    CSSSegmentedFontFace* fontFace(FontSelectionRequest, const AtomicString&amp; family);
</ins><span class="cx"> 
</span><span class="cx">     enum class Status { Loading, Loaded };
</span><span class="cx">     Status status() const { return m_status; }
</span><span class="lines">@@ -98,7 +98,8 @@
</span><span class="cx">     Vector&lt;Ref&lt;CSSFontFace&gt;&gt; m_faces; // We should investigate moving m_faces to FontFaceSet and making it reference FontFaces. This may clean up the font loading design.
</span><span class="cx">     HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, ASCIICaseInsensitiveHash&gt; m_facesLookupTable;
</span><span class="cx">     HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, ASCIICaseInsensitiveHash&gt; m_locallyInstalledFacesLookupTable;
</span><del>-    HashMap&lt;String, HashMap&lt;unsigned, RefPtr&lt;CSSSegmentedFontFace&gt;&gt;, ASCIICaseInsensitiveHash&gt; m_cache;
</del><ins>+    typedef HashMap&lt;FontSelectionRequestKey, RefPtr&lt;CSSSegmentedFontFace&gt;, FontSelectionRequestKeyHash, WTF::SimpleClassHashTraits&lt;FontSelectionRequestKey&gt;&gt; FontSelectionHashMap;
+    HashMap&lt;String, FontSelectionHashMap, ASCIICaseInsensitiveHash&gt; m_cache;
</ins><span class="cx">     HashMap&lt;StyleRuleFontFace*, CSSFontFace*&gt; m_constituentCSSConnections;
</span><span class="cx">     size_t m_facesPartitionIndex { 0 }; // All entries in m_faces before this index are CSS-connected.
</span><span class="cx">     Status m_status { Status::Loaded };
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontSelector.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontSelector.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSFontSelector.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -182,12 +182,9 @@
</span><span class="cx"> 
</span><span class="cx">     if (!fontFace-&gt;setFamilies(*fontFamily))
</span><span class="cx">         return;
</span><del>-    if (!fontFace-&gt;setStyle(*fontStyle))
-        return;
-    if (!fontFace-&gt;setWeight(*fontWeight))
-        return;
-    if (!fontFace-&gt;setStretch(*fontStretch))
-        return;
</del><ins>+    fontFace-&gt;setStyle(*fontStyle);
+    fontFace-&gt;setWeight(*fontWeight);
+    fontFace-&gt;setStretch(*fontStretch);
</ins><span class="cx">     if (rangeList &amp;&amp; !fontFace-&gt;setUnicodeRange(*rangeList))
</span><span class="cx">         return;
</span><span class="cx">     if (variantLigatures &amp;&amp; !fontFace-&gt;setVariantLigatures(*variantLigatures))
</span><span class="lines">@@ -301,7 +298,7 @@
</span><span class="cx">     bool resolveGenericFamilyFirst = familyName == standardFamily;
</span><span class="cx"> 
</span><span class="cx">     AtomicString familyForLookup = resolveGenericFamilyFirst ? resolveGenericFamily(m_document, fontDescription, familyName) : familyName;
</span><del>-    auto* face = m_cssFontFaceSet-&gt;fontFace(fontDescription.traitsMask(), fontDescription.stretch(), familyForLookup);
</del><ins>+    auto* face = m_cssFontFaceSet-&gt;fontFace(fontDescription.fontSelectionRequest(), familyForLookup);
</ins><span class="cx">     if (!face) {
</span><span class="cx">         if (!resolveGenericFamilyFirst)
</span><span class="cx">             familyForLookup = resolveGenericFamily(m_document, fontDescription, familyName);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPrimitiveValueMappingsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -3679,114 +3679,6 @@
</span><span class="cx">     return AutoSmoothing;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; inline CSSPrimitiveValue::CSSPrimitiveValue(FontWeight weight)
-    : CSSValue(PrimitiveClass)
-{
-    m_primitiveUnitType = CSS_VALUE_ID;
-    switch (weight) {
-    case FontWeight900:
-        m_value.valueID = CSSValue900;
-        return;
-    case FontWeight800:
-        m_value.valueID = CSSValue800;
-        return;
-    case FontWeight700:
-        m_value.valueID = CSSValue700;
-        return;
-    case FontWeight600:
-        m_value.valueID = CSSValue600;
-        return;
-    case FontWeight500:
-        m_value.valueID = CSSValue500;
-        return;
-    case FontWeight400:
-        m_value.valueID = CSSValue400;
-        return;
-    case FontWeight300:
-        m_value.valueID = CSSValue300;
-        return;
-    case FontWeight200:
-        m_value.valueID = CSSValue200;
-        return;
-    case FontWeight100:
-        m_value.valueID = CSSValue100;
-        return;
-    }
-
-    ASSERT_NOT_REACHED();
-    m_value.valueID = CSSValueNormal;
-}
-
-template&lt;&gt; inline CSSPrimitiveValue::operator FontWeight() const
-{
-    ASSERT(isValueID());
-
-    switch (m_value.valueID) {
-    case CSSValueBold:
-        return FontWeightBold;
-    case CSSValueNormal:
-        return FontWeightNormal;
-    case CSSValue900:
-        return FontWeight900;
-    case CSSValue800:
-        return FontWeight800;
-    case CSSValue700:
-        return FontWeight700;
-    case CSSValue600:
-        return FontWeight600;
-    case CSSValue500:
-        return FontWeight500;
-    case CSSValue400:
-        return FontWeight400;
-    case CSSValue300:
-        return FontWeight300;
-    case CSSValue200:
-        return FontWeight200;
-    case CSSValue100:
-        return FontWeight100;
-    default:
-        break;
-    }
-
-    ASSERT_NOT_REACHED();
-    return FontWeightNormal;
-}
-
-template&lt;&gt; inline CSSPrimitiveValue::CSSPrimitiveValue(FontItalic italic)
-    : CSSValue(PrimitiveClass)
-{
-    m_primitiveUnitType = CSS_VALUE_ID;
-    switch (italic) {
-    case FontItalicOff:
-        m_value.valueID = CSSValueNormal;
-        return;
-    case FontItalicOn:
-        m_value.valueID = CSSValueItalic;
-        return;
-    }
-
-    ASSERT_NOT_REACHED();
-    m_value.valueID = CSSValueNormal;
-}
-
-template&lt;&gt; inline CSSPrimitiveValue::operator FontItalic() const
-{
-    ASSERT(isValueID());
-
-    switch (m_value.valueID) {
-    case CSSValueOblique:
-    // FIXME: oblique is the same as italic for the moment...
-    case CSSValueItalic:
-        return FontItalicOn;
-    case CSSValueNormal:
-        return FontItalicOff;
-    default:
-        break;
-    }
-    ASSERT_NOT_REACHED();
-    return FontItalicOff;
-}
-
</del><span class="cx"> template&lt;&gt; inline CSSPrimitiveValue::CSSPrimitiveValue(FontSmallCaps smallCaps)
</span><span class="cx">     : CSSValue(PrimitiveClass)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertiesjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSProperties.json (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSProperties.json        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSProperties.json        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -297,7 +297,8 @@
</span><span class="cx">             &quot;codegen-properties&quot;: {
</span><span class="cx">                 &quot;name-for-methods&quot;: &quot;Italic&quot;,
</span><span class="cx">                 &quot;font-property&quot;: true,
</span><del>-                &quot;high-priority&quot;: true
</del><ins>+                &quot;high-priority&quot;: true,
+                &quot;converter&quot;: &quot;FontStyle&quot;
</ins><span class="cx">             },
</span><span class="cx">             &quot;specification&quot;: {
</span><span class="cx">                 &quot;category&quot;: &quot;css-fonts&quot;,
</span><span class="lines">@@ -307,8 +308,10 @@
</span><span class="cx">         &quot;font-weight&quot;: {
</span><span class="cx">             &quot;inherited&quot;: true,
</span><span class="cx">             &quot;codegen-properties&quot;: {
</span><del>-                &quot;custom&quot;: &quot;All&quot;,
-                &quot;high-priority&quot;: true
</del><ins>+                &quot;name-for-methods&quot;: &quot;Weight&quot;,
+                &quot;font-property&quot;: true,
+                &quot;high-priority&quot;: true,
+                &quot;converter&quot;: &quot;FontWeight&quot;
</ins><span class="cx">             },
</span><span class="cx">             &quot;specification&quot;: {
</span><span class="cx">                 &quot;category&quot;: &quot;css-fonts&quot;,
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSSegmentedFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> 
</span><span class="cx"> FontRanges CSSSegmentedFontFace::fontRanges(const FontDescription&amp; fontDescription)
</span><span class="cx"> {
</span><del>-    FontTraitsMask desiredTraitsMask = fontDescription.traitsMask();
</del><ins>+    auto desiredRequest = fontDescription.fontSelectionRequest();
</ins><span class="cx"> 
</span><span class="cx">     auto addResult = m_cache.add(FontDescriptionKey(fontDescription), FontRanges());
</span><span class="cx">     auto&amp; result = addResult.iterator-&gt;value;
</span><span class="lines">@@ -117,9 +117,9 @@
</span><span class="cx">             if (face-&gt;allSourcesFailed())
</span><span class="cx">                 continue;
</span><span class="cx"> 
</span><del>-            FontTraitsMask traitsMask = face-&gt;traitsMask();
-            bool syntheticBold = (fontDescription.fontSynthesis() &amp; FontSynthesisWeight) &amp;&amp; !(traitsMask &amp; (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask)) &amp;&amp; (desiredTraitsMask &amp; (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask));
-            bool syntheticItalic = (fontDescription.fontSynthesis() &amp; FontSynthesisStyle) &amp;&amp; !(traitsMask &amp; FontStyleItalicMask) &amp;&amp; (desiredTraitsMask &amp; FontStyleItalicMask);
</del><ins>+            auto selectionCapabilities = face-&gt;fontSelectionCapabilities();
+            bool syntheticBold = (fontDescription.fontSynthesis() &amp; FontSynthesisWeight) &amp;&amp; !isFontWeightBold(selectionCapabilities.weight.maximum) &amp;&amp; isFontWeightBold(desiredRequest.weight);
+            bool syntheticItalic = (fontDescription.fontSynthesis() &amp; FontSynthesisStyle) &amp;&amp; !isItalic(selectionCapabilities.slope.maximum) &amp;&amp; isItalic(desiredRequest.slope);
</ins><span class="cx"> 
</span><span class="cx">             // This doesn't trigger an unnecessary download because every element styled with this family will need font metrics in order to run layout.
</span><span class="cx">             // Metrics used for layout come from FontRanges::fontForFirstRange(), which assumes that the first font is non-null.
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValueKeywordsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValueKeywords.in        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -125,15 +125,7 @@
</span><span class="cx"> bold
</span><span class="cx"> bolder
</span><span class="cx"> lighter
</span><del>-100
-200
-300
-400
-500
-600
-700
-800
-900
</del><ins>+
</ins><span class="cx"> //
</span><span class="cx"> // CSS_PROP_FONT_SIZE:
</span><span class="cx"> //
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontFacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/FontFace.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontFace.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/FontFace.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -163,12 +163,11 @@
</span><span class="cx">     if (style.isEmpty())
</span><span class="cx">         return Exception { SYNTAX_ERR };
</span><span class="cx"> 
</span><del>-    bool success = false;
-    if (auto value = parseString(style, CSSPropertyFontStyle))
-        success = m_backing-&gt;setStyle(*value);
-    if (!success)
-        return Exception { SYNTAX_ERR };
-    return { };
</del><ins>+    if (auto value = parseString(style, CSSPropertyFontStyle)) {
+        m_backing-&gt;setStyle(*value);
+        return { };
+    }
+    return Exception { SYNTAX_ERR };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr&lt;void&gt; FontFace::setWeight(const String&amp; weight)
</span><span class="lines">@@ -176,12 +175,11 @@
</span><span class="cx">     if (weight.isEmpty())
</span><span class="cx">         return Exception { SYNTAX_ERR };
</span><span class="cx"> 
</span><del>-    bool success = false;
-    if (auto value = parseString(weight, CSSPropertyFontWeight))
-        success = m_backing-&gt;setWeight(*value);
-    if (!success)
-        return Exception { SYNTAX_ERR };
-    return { };
</del><ins>+    if (auto value = parseString(weight, CSSPropertyFontWeight)) {
+        m_backing-&gt;setWeight(*value);
+        return { };
+    }
+    return Exception { SYNTAX_ERR };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr&lt;void&gt; FontFace::setStretch(const String&amp; stretch)
</span><span class="lines">@@ -189,12 +187,11 @@
</span><span class="cx">     if (stretch.isEmpty())
</span><span class="cx">         return Exception { SYNTAX_ERR };
</span><span class="cx"> 
</span><del>-    bool success = false;
-    if (auto value = parseString(stretch, CSSPropertyFontStretch))
-        success = m_backing-&gt;setStretch(*value);
-    if (!success)
-        return Exception { SYNTAX_ERR };
-    return { };
</del><ins>+    if (auto value = parseString(stretch, CSSPropertyFontStretch)) {
+        m_backing-&gt;setStretch(*value);
+        return { };
+    }
+    return Exception { SYNTAX_ERR };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr&lt;void&gt; FontFace::setUnicodeRange(const String&amp; unicodeRange)
</span><span class="lines">@@ -283,44 +280,55 @@
</span><span class="cx">     return m_backing-&gt;families()-&gt;cssText();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool rangeIsSingleValue(FontSelectionRange range, FontSelectionValue value)
+{
+    return range.minimum == value &amp;&amp; range.maximum == value;
+};
+
</ins><span class="cx"> String FontFace::style() const
</span><span class="cx"> {
</span><span class="cx">     m_backing-&gt;updateStyleIfNeeded();
</span><del>-    switch (m_backing-&gt;traitsMask() &amp; FontStyleMask) {
-    case FontStyleNormalMask:
-        return String(&quot;normal&quot;, String::ConstructFromLiteral);
-    case FontStyleItalicMask:
-        return String(&quot;italic&quot;, String::ConstructFromLiteral);
</del><ins>+    auto style = m_backing-&gt;italic();
+
+    if (rangeIsSingleValue(style, italicValue()))
+        return ASCIILiteral(&quot;italic&quot;);
+    if (rangeIsSingleValue(style, normalItalicValue()))
+        return ASCIILiteral(&quot;normal&quot;);
+
+    if (style.minimum == style.maximum) {
+        auto value = static_cast&lt;float&gt;(style.minimum);
+        if (value &gt;= 0) {
+            auto floored = std::floor(value);
+            if (floored == value)
+                return String::format(&quot;oblique %ddeg&quot;, static_cast&lt;int&gt;(floored));
+        }
+        return String::format(&quot;oblique %fdeg&quot;, static_cast&lt;float&gt;(style.minimum));
</ins><span class="cx">     }
</span><del>-    ASSERT_NOT_REACHED();
-    return String(&quot;normal&quot;, String::ConstructFromLiteral);
</del><ins>+
+    return String::format(&quot;oblique %fdeg-%fdeg&quot;, static_cast&lt;float&gt;(style.minimum), static_cast&lt;float&gt;(style.maximum));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String FontFace::weight() const
</span><span class="cx"> {
</span><span class="cx">     m_backing-&gt;updateStyleIfNeeded();
</span><del>-    switch (m_backing-&gt;traitsMask() &amp; FontWeightMask) {
-    case FontWeight100Mask:
-        return String(&quot;100&quot;, String::ConstructFromLiteral);
-    case FontWeight200Mask:
-        return String(&quot;200&quot;, String::ConstructFromLiteral);
-    case FontWeight300Mask:
-        return String(&quot;300&quot;, String::ConstructFromLiteral);
-    case FontWeight400Mask:
-        return String(&quot;normal&quot;, String::ConstructFromLiteral);
-    case FontWeight500Mask:
-        return String(&quot;500&quot;, String::ConstructFromLiteral);
-    case FontWeight600Mask:
-        return String(&quot;600&quot;, String::ConstructFromLiteral);
-    case FontWeight700Mask:
-        return String(&quot;bold&quot;, String::ConstructFromLiteral);
-    case FontWeight800Mask:
-        return String(&quot;800&quot;, String::ConstructFromLiteral);
-    case FontWeight900Mask:
-        return String(&quot;900&quot;, String::ConstructFromLiteral);
</del><ins>+    auto weight = m_backing-&gt;weight();
+
+    if (rangeIsSingleValue(weight, normalWeightValue()))
+        return ASCIILiteral(&quot;normal&quot;);
+    if (rangeIsSingleValue(weight, boldWeightValue()))
+        return ASCIILiteral(&quot;bold&quot;);
+
+    if (weight.minimum == weight.maximum) {
+        auto value = static_cast&lt;float&gt;(weight.minimum);
+        if (value &gt;= 0) {
+            auto floored = std::floor(value);
+            if (floored == value)
+                return String::format(&quot;%d&quot;, static_cast&lt;int&gt;(floored));
+        }
+        return String::format(&quot;%f&quot;, static_cast&lt;float&gt;(weight.minimum));
</ins><span class="cx">     }
</span><del>-    ASSERT_NOT_REACHED();
-    return String(&quot;normal&quot;, String::ConstructFromLiteral);
</del><ins>+
+    return String::format(&quot;%f-%f&quot;, static_cast&lt;float&gt;(weight.minimum), static_cast&lt;float&gt;(weight.maximum));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String FontFace::stretch() const
</span><span class="lines">@@ -328,30 +336,36 @@
</span><span class="cx">     m_backing-&gt;updateStyleIfNeeded();
</span><span class="cx">     auto stretch = m_backing-&gt;stretch();
</span><span class="cx"> 
</span><del>-    auto rangeIsSingleValue = [](FontSelectionRange range, FontSelectionValue value) -&gt; bool {
-        return range.minimum == value &amp;&amp; range.maximum == value;
-    };
-
-    if (rangeIsSingleValue(stretch, FontSelectionValue(50)))
</del><ins>+    if (rangeIsSingleValue(stretch, ultraCondensedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;ultra-condensed&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(62.5f)))
</del><ins>+    if (rangeIsSingleValue(stretch, extraCondensedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;extra-condensed&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(75)))
</del><ins>+    if (rangeIsSingleValue(stretch, condensedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;condensed&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(87.5f)))
</del><ins>+    if (rangeIsSingleValue(stretch, semiCondensedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;semi-condensed&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(100)))
</del><ins>+    if (rangeIsSingleValue(stretch, normalStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;normal&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(112.5f)))
</del><ins>+    if (rangeIsSingleValue(stretch, semiExpandedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;semi-expanded&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(125)))
</del><ins>+    if (rangeIsSingleValue(stretch, expandedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;expanded&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(150)))
</del><ins>+    if (rangeIsSingleValue(stretch, extraExpandedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;extra-expanded&quot;);
</span><del>-    if (rangeIsSingleValue(stretch, FontSelectionValue(200)))
</del><ins>+    if (rangeIsSingleValue(stretch, ultraExpandedStretchValue()))
</ins><span class="cx">         return ASCIILiteral(&quot;ultra-expanded&quot;);
</span><span class="cx"> 
</span><del>-    return String::format(&quot;%f-%f&quot;, static_cast&lt;float&gt;(stretch.minimum), static_cast&lt;float&gt;(stretch.maximum));
</del><ins>+    if (stretch.minimum == stretch.maximum) {
+        auto value = static_cast&lt;float&gt;(stretch.minimum);
+        if (value &gt;= 0) {
+            auto floored = std::floor(value);
+            if (floored == value)
+                return String::format(&quot;%d%%&quot;, static_cast&lt;int&gt;(floored));
+        }
+        return String::format(&quot;%f%%&quot;, static_cast&lt;float&gt;(stretch.minimum));
+    }
+
+    return String::format(&quot;%f%%-%f%%&quot;, static_cast&lt;float&gt;(stretch.minimum), static_cast&lt;float&gt;(stretch.maximum));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String FontFace::unicodeRange() const
</span></span></pre></div>
<a id="trunkSourceWebCorecssFontSelectionValueInlinesh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/css/FontSelectionValueInlines.h (0 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/FontSelectionValueInlines.h                                (rev 0)
+++ trunk/Source/WebCore/css/FontSelectionValueInlines.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -0,0 +1,146 @@
</span><ins>+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &quot;CSSValueKeywords.h&quot;
+#include &quot;FontSelectionAlgorithm.h&quot;
+
+namespace WebCore {
+
+inline bool isCSS21Weight(FontSelectionValue weight)
+{
+    return weight == FontSelectionValue(100)
+        || weight == FontSelectionValue(200)
+        || weight == FontSelectionValue(300)
+        || weight == FontSelectionValue(400)
+        || weight == FontSelectionValue(500)
+        || weight == FontSelectionValue(600)
+        || weight == FontSelectionValue(700)
+        || weight == FontSelectionValue(800)
+        || weight == FontSelectionValue(900);
+}
+
+inline bool isCSS21Weight(int weight)
+{
+    return !((weight % 100) || weight &lt; 100 || weight &gt; 900);
+}
+
+inline std::optional&lt;CSSValueID&gt; fontWeightKeyword(FontSelectionValue weight)
+{
+    if (weight == normalWeightValue())
+        return CSSValueNormal;
+    if (weight == boldWeightValue())
+        return CSSValueBold;
+    return std::nullopt;
+}
+
+inline std::optional&lt;FontSelectionValue&gt; fontWeightValue(CSSValueID value)
+{
+    switch (value) {
+    case CSSValueNormal:
+        return normalWeightValue();
+    case CSSValueBold:
+    case CSSValueBolder:
+        return boldWeightValue();
+    case CSSValueLighter:
+        return lightWeightValue();
+    default:
+        return std::nullopt;
+    }
+}
+
+inline std::optional&lt;CSSValueID&gt; fontStretchKeyword(FontSelectionValue stretch)
+{
+    if (stretch == ultraCondensedStretchValue())
+        return CSSValueUltraCondensed;
+    if (stretch == extraCondensedStretchValue())
+        return CSSValueExtraCondensed;
+    if (stretch == condensedStretchValue())
+        return CSSValueCondensed;
+    if (stretch == semiCondensedStretchValue())
+        return CSSValueSemiCondensed;
+    if (stretch == normalStretchValue())
+        return CSSValueNormal;
+    if (stretch == semiExpandedStretchValue())
+        return CSSValueSemiExpanded;
+    if (stretch == expandedStretchValue())
+        return CSSValueExpanded;
+    if (stretch == extraExpandedStretchValue())
+        return CSSValueExtraExpanded;
+    if (stretch == ultraExpandedStretchValue())
+        return CSSValueUltraExpanded;
+    return std::nullopt;
+}
+
+inline std::optional&lt;FontSelectionValue&gt; fontStretchValue(CSSValueID value)
+{
+    switch (value) {
+    case CSSValueUltraCondensed:
+        return ultraCondensedStretchValue();
+    case CSSValueExtraCondensed:
+        return extraCondensedStretchValue();
+    case CSSValueCondensed:
+        return condensedStretchValue();
+    case CSSValueSemiCondensed:
+        return semiCondensedStretchValue();
+    case CSSValueNormal:
+        return normalStretchValue();
+    case CSSValueSemiExpanded:
+        return semiExpandedStretchValue();
+    case CSSValueExpanded:
+        return expandedStretchValue();
+    case CSSValueExtraExpanded:
+        return extraExpandedStretchValue();
+    case CSSValueUltraExpanded:
+        return ultraExpandedStretchValue();
+    default:
+        return std::nullopt;
+    }
+}
+
+inline std::optional&lt;CSSValueID&gt; fontStyleKeyword(FontSelectionValue style)
+{
+    if (style == normalItalicValue())
+        return CSSValueNormal;
+    if (style == italicValue())
+        return CSSValueItalic;
+    return std::nullopt;
+}
+
+inline std::optional&lt;FontSelectionValue&gt; fontStyleValue(CSSValueID value)
+{
+    switch (value) {
+    case CSSValueNormal:
+        return normalItalicValue();
+    case CSSValueOblique:
+    case CSSValueItalic:
+        return italicValue();
+    default:
+        return std::nullopt;
+    }
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> #include &quot;CSSImageValue.h&quot;
</span><span class="cx"> #include &quot;CSSPrimitiveValue.h&quot;
</span><span class="cx"> #include &quot;CSSReflectValue.h&quot;
</span><ins>+#include &quot;FontSelectionValueInlines.h&quot;
</ins><span class="cx"> #include &quot;Frame.h&quot;
</span><span class="cx"> #include &quot;LayoutUnit.h&quot;
</span><span class="cx"> #include &quot;Length.h&quot;
</span><span class="lines">@@ -114,7 +115,9 @@
</span><span class="cx">     static bool convertOverflowScrolling(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx"> #endif
</span><span class="cx">     static FontFeatureSettings convertFontFeatureSettings(StyleResolver&amp;, const CSSValue&amp;);
</span><ins>+    static FontSelectionValue convertFontWeight(StyleResolver&amp;, const CSSValue&amp;);
</ins><span class="cx">     static FontSelectionValue convertFontStretch(StyleResolver&amp;, const CSSValue&amp;);
</span><ins>+    static FontSelectionValue convertFontStyle(StyleResolver&amp;, const CSSValue&amp;);
</ins><span class="cx"> #if ENABLE(VARIATION_FONTS)
</span><span class="cx">     static FontVariationSettings convertFontVariationSettings(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx"> #endif
</span><span class="lines">@@ -1154,46 +1157,60 @@
</span><span class="cx">     return settings;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline FontSelectionValue StyleBuilderConverter::convertFontStretch(StyleResolver&amp;, const CSSValue&amp; value)
</del><ins>+inline FontSelectionValue StyleBuilderConverter::convertFontWeight(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(is&lt;CSSPrimitiveValue&gt;(value));
</span><del>-    const auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
-    if (primitiveValue.isPercentage() || primitiveValue.isNumber()) {
-        auto value = primitiveValue.floatValue();
-        if (value &lt;= static_cast&lt;float&gt;(FontSelectionValue::maximumValue())
-            &amp;&amp; value &gt;= static_cast&lt;float&gt;(FontSelectionValue::minimumValue()))
-            return FontSelectionValue(value);
-        if (value &lt; static_cast&lt;float&gt;(FontSelectionValue::minimumValue()))
-            return FontSelectionValue::minimumValue();
-        ASSERT(value &gt; static_cast&lt;float&gt;(FontSelectionValue::maximumValue()));
-        return FontSelectionValue::maximumValue();
-    }
</del><ins>+    auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
</ins><span class="cx"> 
</span><ins>+    if (primitiveValue.isNumber())
+        return FontSelectionValue::clampFloat(primitiveValue.floatValue());
+
+    ASSERT(primitiveValue.isValueID());
</ins><span class="cx">     switch (primitiveValue.valueID()) {
</span><del>-    case CSSValueUltraCondensed:
-        return FontSelectionValue(50);
-    case CSSValueExtraCondensed:
-        return FontSelectionValue(62.5f);
-    case CSSValueCondensed:
-        return FontSelectionValue(75);
-    case CSSValueSemiCondensed:
-        return FontSelectionValue(87.5f);
</del><span class="cx">     case CSSValueNormal:
</span><del>-        return FontSelectionValue(100);
-    case CSSValueSemiExpanded:
-        return FontSelectionValue(112.5f);
-    case CSSValueExpanded:
-        return FontSelectionValue(125);
-    case CSSValueExtraExpanded:
-        return FontSelectionValue(150);
-    case CSSValueUltraExpanded:
-        return FontSelectionValue(200);
</del><ins>+        return normalWeightValue();
+    case CSSValueBold:
+        return boldWeightValue();
+    case CSSValueBolder:
+        return FontCascadeDescription::bolderWeight(styleResolver.parentStyle()-&gt;fontDescription().weight());
+    case CSSValueLighter:
+        return FontCascadeDescription::lighterWeight(styleResolver.parentStyle()-&gt;fontDescription().weight());
</ins><span class="cx">     default:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><del>-        return FontSelectionValue(100);
</del><ins>+        return normalWeightValue();
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline FontSelectionValue StyleBuilderConverter::convertFontStretch(StyleResolver&amp;, const CSSValue&amp; value)
+{
+    ASSERT(is&lt;CSSPrimitiveValue&gt;(value));
+    const auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
+
+    if (primitiveValue.isPercentage() || primitiveValue.isNumber())
+        return FontSelectionValue::clampFloat(primitiveValue.floatValue());
+
+    ASSERT(primitiveValue.isValueID());
+    if (auto value = fontStretchValue(primitiveValue.valueID()))
+        return value.value();
+    ASSERT_NOT_REACHED();
+    return normalStretchValue();
+}
+
+inline FontSelectionValue StyleBuilderConverter::convertFontStyle(StyleResolver&amp;, const CSSValue&amp; value)
+{
+    ASSERT(is&lt;CSSPrimitiveValue&gt;(value));
+    const auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
+
+    if (primitiveValue.isAngle() || primitiveValue.isNumber() || primitiveValue.isCalculated())
+        return FontSelectionValue::clampFloat(primitiveValue.floatValue(CSSPrimitiveValue::CSS_DEG));
+
+    ASSERT(primitiveValue.isValueID());
+    if (auto value = fontStyleValue(primitiveValue.valueID()))
+        return value.value();
+    ASSERT_NOT_REACHED();
+    return normalItalicValue();
+}
+
</ins><span class="cx"> #if ENABLE(VARIATION_FONTS)
</span><span class="cx"> inline FontVariationSettings StyleBuilderConverter::convertFontVariationSettings(StyleResolver&amp;, const CSSValue&amp; value)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderCustom.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderCustom.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/StyleBuilderCustom.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -81,7 +81,6 @@
</span><span class="cx">     DECLARE_PROPERTY_CUSTOM_HANDLERS(Fill);
</span><span class="cx">     DECLARE_PROPERTY_CUSTOM_HANDLERS(FontFamily);
</span><span class="cx">     DECLARE_PROPERTY_CUSTOM_HANDLERS(FontSize);
</span><del>-    DECLARE_PROPERTY_CUSTOM_HANDLERS(FontWeight);
</del><span class="cx"> #if ENABLE(CSS_IMAGE_RESOLUTION)
</span><span class="cx">     DECLARE_PROPERTY_CUSTOM_HANDLERS(ImageResolution);
</span><span class="cx"> #endif
</span><span class="lines">@@ -1295,42 +1294,6 @@
</span><span class="cx">     svgStyle.setShadow(std::make_unique&lt;ShadowData&gt;(location, blur, 0, Normal, false, color.isValid() ? color : Color::transparent));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void StyleBuilderCustom::applyInitialFontWeight(StyleResolver&amp; styleResolver)
-{
-    auto fontDescription = styleResolver.fontDescription();
-    fontDescription.setWeight(FontWeightNormal);
-    styleResolver.setFontDescription(fontDescription);
-}
-
-inline void StyleBuilderCustom::applyInheritFontWeight(StyleResolver&amp; styleResolver)
-{
-    auto fontDescription = styleResolver.fontDescription();
-    fontDescription.setWeight(styleResolver.parentFontDescription().weight());
-    styleResolver.setFontDescription(fontDescription);
-}
-
-inline void StyleBuilderCustom::applyValueFontWeight(StyleResolver&amp; styleResolver, CSSValue&amp; value)
-{
-    auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(value);
-    auto fontDescription = styleResolver.fontDescription();
-    switch (primitiveValue.valueID()) {
-    case CSSValueInvalid:
-        ASSERT_NOT_REACHED();
-        break;
-    case CSSValueBolder:
-        fontDescription.setWeight(styleResolver.parentStyle()-&gt;fontDescription().weight());
-        fontDescription.setWeight(fontDescription.bolderWeight());
-        break;
-    case CSSValueLighter:
-        fontDescription.setWeight(styleResolver.parentStyle()-&gt;fontDescription().weight());
-        fontDescription.setWeight(fontDescription.lighterWeight());
-        break;
-    default:
-        fontDescription.setWeight(primitiveValue);
-    }
-    styleResolver.setFontDescription(fontDescription);
-}
-
</del><span class="cx"> inline void StyleBuilderCustom::applyInitialColumnGap(StyleResolver&amp; styleResolver)
</span><span class="cx"> {
</span><span class="cx">     styleResolver.style()-&gt;setHasNormalColumnGap();
</span></span></pre></div>
<a id="trunkSourceWebCorecssparserCSSParserFastPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -559,8 +559,6 @@
</span><span class="cx">         return valueID == CSSValueShow || valueID == CSSValueHide;
</span><span class="cx">     case CSSPropertyFloat: // left | right | none
</span><span class="cx">         return valueID == CSSValueLeft || valueID == CSSValueRight || valueID == CSSValueNone;
</span><del>-    case CSSPropertyFontStyle: // normal | italic | oblique
-        return valueID == CSSValueNormal || valueID == CSSValueItalic || valueID == CSSValueOblique;
</del><span class="cx">     case CSSPropertyImageRendering: // auto | optimizeContrast | pixelated | optimizeSpeed | crispEdges | optimizeQuality | webkit-crispEdges
</span><span class="cx">         return valueID == CSSValueAuto || valueID == CSSValueOptimizeSpeed || valueID == CSSValueOptimizeQuality || valueID == CSSValueWebkitCrispEdges || valueID == CSSValueWebkitOptimizeContrast || valueID == CSSValueCrispEdges || valueID == CSSValuePixelated;
</span><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="lines">@@ -831,7 +829,6 @@
</span><span class="cx">     case CSSPropertyFlexDirection:
</span><span class="cx">     case CSSPropertyFlexWrap:
</span><span class="cx">     case CSSPropertyFloat:
</span><del>-    case CSSPropertyFontStyle:
</del><span class="cx">     case CSSPropertyFontVariantAlternates:
</span><span class="cx">     case CSSPropertyFontVariantCaps:
</span><span class="cx">     case CSSPropertyFontVariantPosition:
</span></span></pre></div>
<a id="trunkSourceWebCorecssparserCSSPropertyParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -864,19 +864,30 @@
</span><span class="cx">     return consumeIdent&lt;CSSValueNormal, CSSValueSmallCaps&gt;(range);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontWeight(CSSParserTokenRange&amp; range)
</del><ins>+static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontWeightKeywordValue(CSSParserTokenRange&amp; range)
</ins><span class="cx"> {
</span><del>-    const CSSParserToken&amp; token = range.peek();
-    if (token.id() &gt;= CSSValueNormal &amp;&amp; token.id() &lt;= CSSValueLighter)
-        return consumeIdent(range);
</del><ins>+    return consumeIdent&lt;CSSValueNormal, CSSValueBold, CSSValueBolder, CSSValueLighter&gt;(range);
+}
+
+static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontWeightCSS21(CSSParserTokenRange&amp; range)
+{
+    if (auto result = consumeFontWeightKeywordValue(range))
+        return result;
</ins><span class="cx">     int weight;
</span><span class="cx">     if (!consumePositiveIntegerRaw(range, weight))
</span><span class="cx">         return nullptr;
</span><del>-    if ((weight % 100) || weight &lt; 100 || weight &gt; 900)
</del><ins>+    if (!isCSS21Weight(weight))
</ins><span class="cx">         return nullptr;
</span><del>-    return CSSValuePool::singleton().createIdentifierValue(static_cast&lt;CSSValueID&gt;(CSSValue100 + weight / 100 - 1));
</del><ins>+    return CSSValuePool::singleton().createValue(weight, CSSPrimitiveValue::CSS_NUMBER);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontWeight(CSSParserTokenRange&amp; range)
+{
+    if (auto result = consumeFontWeightKeywordValue(range))
+        return result;
+    return consumeNumber(range, ValueRangeAll);
+}
+
</ins><span class="cx"> static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontStretchKeywordValue(CSSParserTokenRange&amp; range)
</span><span class="cx"> {
</span><span class="cx">     return consumeIdent&lt;CSSValueUltraCondensed, CSSValueExtraCondensed, CSSValueCondensed, CSSValueSemiCondensed, CSSValueNormal, CSSValueSemiExpanded, CSSValueExpanded, CSSValueExtraExpanded, CSSValueUltraExpanded&gt;(range);
</span><span class="lines">@@ -891,6 +902,28 @@
</span><span class="cx">     return consumeNumber(range, ValueRangeAll);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontStyleKeywordValue(CSSParserTokenRange&amp; range)
+{
+    return consumeIdent&lt;CSSValueNormal, CSSValueItalic, CSSValueOblique&gt;(range);
+}
+
+static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontStyle(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode)
+{
+    if (auto result = consumeFontStyleKeywordValue(range)) {
+        if (result-&gt;valueID() == CSSValueOblique) {
+            if (range.atEnd())
+                return result;
+            if (auto angle = consumeAngle(range, cssParserMode))
+                return angle;
+            if (auto number = consumeNumber(range, ValueRangeAll))
+                return number;
+            return nullptr;
+        }
+        return result;
+    }
+    return nullptr;
+}
+
</ins><span class="cx"> static String concatenateFamilyName(CSSParserTokenRange&amp; range)
</span><span class="cx"> {
</span><span class="cx">     StringBuilder builder;
</span><span class="lines">@@ -3666,6 +3699,8 @@
</span><span class="cx">         return consumeFontWeight(m_range);
</span><span class="cx">     case CSSPropertyFontStretch:
</span><span class="cx">         return consumeFontStretch(m_range);
</span><ins>+    case CSSPropertyFontStyle:
+        return consumeFontStyle(m_range, m_context.mode);
</ins><span class="cx">     case CSSPropertyFontSynthesis:
</span><span class="cx">         return consumeFontSynthesis(m_range);
</span><span class="cx"> #if ENABLE(VARIATION_FONTS)
</span><span class="lines">@@ -4184,16 +4219,18 @@
</span><span class="cx">     case CSSPropertyUnicodeRange:
</span><span class="cx">         parsedValue = consumeFontFaceUnicodeRange(m_range);
</span><span class="cx">         break;
</span><ins>+    case CSSPropertyFontWeight:
+        // FIXME: Parse range-based values.
+        parsedValue = consumeFontWeight(m_range);
+        break;
</ins><span class="cx">     case CSSPropertyFontStretch:
</span><ins>+        // FIXME: Parse range-based values.
</ins><span class="cx">         parsedValue = consumeFontStretch(m_range);
</span><span class="cx">         break;
</span><del>-    case CSSPropertyFontStyle: {
-        CSSValueID id = m_range.consumeIncludingWhitespace().id();
-        if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(propId, id, m_context.mode))
-            return false;
-        parsedValue = CSSValuePool::singleton().createIdentifierValue(id);
</del><ins>+    case CSSPropertyFontStyle:
+        // FIXME: Parse range-based values.
+        parsedValue = consumeFontStyle(m_range, m_context.mode);
</ins><span class="cx">         break;
</span><del>-    }
</del><span class="cx">     case CSSPropertyFontVariantCaps:
</span><span class="cx">         parsedValue = consumeFontVariantCaps(m_range);
</span><span class="cx">         break;
</span><span class="lines">@@ -4214,9 +4251,6 @@
</span><span class="cx">         break;
</span><span class="cx">     case CSSPropertyFontVariant:
</span><span class="cx">         return consumeFontVariantShorthand(false);
</span><del>-    case CSSPropertyFontWeight:
-        parsedValue = consumeFontWeight(m_range);
-        break;
</del><span class="cx">     case CSSPropertyFontFeatureSettings:
</span><span class="cx">         parsedValue = consumeFontFeatureSettings(m_range);
</span><span class="cx">         break;
</span><span class="lines">@@ -4243,8 +4277,8 @@
</span><span class="cx">     if (!fontDescription.isAbsoluteSize())
</span><span class="cx">         return false;
</span><span class="cx">     
</span><del>-    addProperty(CSSPropertyFontStyle, CSSPropertyFont, CSSValuePool::singleton().createIdentifierValue(fontDescription.italic() == FontItalicOn ? CSSValueItalic : CSSValueNormal), important);
-    addProperty(CSSPropertyFontWeight, CSSPropertyFont, CSSValuePool::singleton().createValue(fontDescription.weight()), important);
</del><ins>+    addProperty(CSSPropertyFontStyle, CSSPropertyFont, CSSValuePool::singleton().createIdentifierValue(isItalic(fontDescription.italic()) ? CSSValueItalic : CSSValueNormal), important);
+    addProperty(CSSPropertyFontWeight, CSSPropertyFont, CSSValuePool::singleton().createValue(static_cast&lt;float&gt;(fontDescription.weight())), important);
</ins><span class="cx">     addProperty(CSSPropertyFontSize, CSSPropertyFont, CSSValuePool::singleton().createValue(fontDescription.specifiedSize(), CSSPrimitiveValue::CSS_PX), important);
</span><span class="cx">     Ref&lt;CSSValueList&gt; fontFamilyList = CSSValueList::createCommaSeparated();
</span><span class="cx">     fontFamilyList-&gt;append(CSSValuePool::singleton().createFontFamilyValue(fontDescription.familyAt(0), FromSystemFontID::Yes));
</span><span class="lines">@@ -4274,9 +4308,10 @@
</span><span class="cx"> 
</span><span class="cx">     while (!m_range.atEnd()) {
</span><span class="cx">         CSSValueID id = m_range.peek().id();
</span><del>-        if (!fontStyle &amp;&amp; CSSParserFastPaths::isValidKeywordPropertyAndValue(CSSPropertyFontStyle, id, m_context.mode)) {
-            fontStyle = consumeIdent(m_range);
-            continue;
</del><ins>+        if (!fontStyle) {
+            fontStyle = consumeFontStyleKeywordValue(m_range);
+            if (fontStyle)
+                continue;
</ins><span class="cx">         }
</span><span class="cx">         if (!fontVariantCaps &amp;&amp; (id == CSSValueNormal || id == CSSValueSmallCaps)) {
</span><span class="cx">             // Font variant in the shorthand is particular, it only accepts normal or small-caps.
</span><span class="lines">@@ -4286,7 +4321,7 @@
</span><span class="cx">                 continue;
</span><span class="cx">         }
</span><span class="cx">         if (!fontWeight) {
</span><del>-            fontWeight = consumeFontWeight(m_range);
</del><ins>+            fontWeight = consumeFontWeightCSS21(m_range);
</ins><span class="cx">             if (fontWeight)
</span><span class="cx">                 continue;
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingEditingStylecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/EditingStyle.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/EditingStyle.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/editing/EditingStyle.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1738,28 +1738,18 @@
</span><span class="cx">     if (!is&lt;CSSPrimitiveValue&gt;(fontWeight))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    // Because b tag can only bold text, there are only two states in plain html: bold and not bold.
-    // Collapse all other values to either one of these two states for editing purposes.
-    switch (downcast&lt;CSSPrimitiveValue&gt;(fontWeight).valueID()) {
-        case CSSValue100:
-        case CSSValue200:
-        case CSSValue300:
-        case CSSValue400:
-        case CSSValue500:
</del><ins>+    auto&amp; primitiveValue = downcast&lt;CSSPrimitiveValue&gt;(fontWeight);
+    switch (primitiveValue.valueID()) {
</ins><span class="cx">         case CSSValueNormal:
</span><span class="cx">             return false;
</span><span class="cx">         case CSSValueBold:
</span><del>-        case CSSValue600:
-        case CSSValue700:
-        case CSSValue800:
-        case CSSValue900:
</del><span class="cx">             return true;
</span><span class="cx">         default:
</span><span class="cx">             break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ASSERT_NOT_REACHED(); // For CSSValueBolder and CSSValueLighter
-    return false;
</del><ins>+    ASSERT(primitiveValue.isNumber());
+    return primitiveValue.floatValue() &gt;= static_cast&lt;float&gt;(boldThreshold());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename T&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingmacEditorMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/mac/EditorMac.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/mac/EditorMac.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/editing/mac/EditorMac.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -492,7 +492,7 @@
</span><span class="cx">     Ref&lt;MutableStyleProperties&gt; style = MutableStyleProperties::create();
</span><span class="cx">     style-&gt;setProperty(CSSPropertyFontFamily, cssValuePool.createFontFamilyValue(fontFamily));
</span><span class="cx">     style-&gt;setProperty(CSSPropertyFontStyle, (fontTraits &amp; NSFontItalicTrait) ? CSSValueItalic : CSSValueNormal);
</span><del>-    style-&gt;setProperty(CSSPropertyFontWeight, cssValuePool.createValue(fontTraits &amp; NSFontBoldTrait ? FontWeightBold : FontWeightNormal));
</del><ins>+    style-&gt;setProperty(CSSPropertyFontWeight, (fontTraits &amp; NSFontBoldTrait) ? CSSValueBold : CSSValueNormal);
</ins><span class="cx">     style-&gt;setProperty(CSSPropertyFontSize, cssValuePool.createValue(fontSize, CSSPrimitiveValue::CSS_PX));
</span><span class="cx">     applyStyleToSelection(style.ptr(), EditActionSetFont);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCache.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCache.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/FontCache.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -188,9 +188,6 @@
</span><span class="cx">     Vector&lt;String&gt; systemFontFamilies();
</span><span class="cx">     void platformInit();
</span><span class="cx"> 
</span><del>-#if PLATFORM(IOS)
-    static float weightOfCTFont(CTFontRef);
-#endif
</del><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     WEBCORE_EXPORT static void setFontWhitelist(const Vector&lt;String&gt;&amp;);
</span><span class="cx"> #endif
</span><span class="lines">@@ -203,11 +200,7 @@
</span><span class="cx"> 
</span><span class="cx">     // This function exists so CSSFontSelector can have a unified notion of preinstalled fonts and @font-face.
</span><span class="cx">     // It comes into play when you create an @font-face which shares a family name as a preinstalled font.
</span><del>-    struct TraitsAndStretch {
-        FontTraitsMask traits;
-        FontSelectionRange stretch;
-    };
-    Vector&lt;TraitsAndStretch&gt; getTraitsAndStretchInFamily(const AtomicString&amp;);
</del><ins>+    Vector&lt;FontSelectionCapabilities&gt; getFontSelectionCapabilitiesInFamily(const AtomicString&amp;);
</ins><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT RefPtr&lt;Font&gt; fontForFamily(const FontDescription&amp;, const AtomicString&amp;, const FontFeatureSettings* fontFaceFeatures = nullptr, const FontVariantSettings* fontFaceVariantSettings = nullptr, bool checkingAlternateName = false);
</span><span class="cx">     WEBCORE_EXPORT Ref&lt;Font&gt; lastResortFallbackFont(const FontDescription&amp;);
</span><span class="lines">@@ -286,13 +279,11 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> RetainPtr&lt;CTFontRef&gt; preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings&amp; features, const FontVariantSettings&amp;, const FontVariationSettings&amp;);
</span><del>-FontWeight fontWeightFromCoreText(CGFloat weight);
-uint16_t toCoreTextFontWeight(FontWeight);
-bool isFontWeightBold(FontWeight);
</del><span class="cx"> SynthesisPair computeNecessarySynthesis(CTFontRef, const FontDescription&amp;, bool isPlatformFont = false);
</span><del>-RetainPtr&lt;CTFontRef&gt; platformFontWithFamilySpecialCase(const AtomicString&amp; family, FontWeight, CTFontSymbolicTraits, float size);
-RetainPtr&lt;CTFontRef&gt; platformFontWithFamily(const AtomicString&amp; family, CTFontSymbolicTraits, FontWeight, TextRenderingMode, float size);
</del><ins>+RetainPtr&lt;CTFontRef&gt; platformFontWithFamilySpecialCase(const AtomicString&amp; family, FontSelectionRequest, float size);
+RetainPtr&lt;CTFontRef&gt; platformFontWithFamily(const AtomicString&amp; family, FontSelectionRequest, TextRenderingMode, float size);
</ins><span class="cx"> bool requiresCustomFallbackFont(UChar32 character);
</span><ins>+FontSelectionCapabilities capabilitiesForFontDescriptor(CTFontDescriptorRef);
</ins><span class="cx"> 
</span><span class="cx"> #else
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCascadecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCascade.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCascade.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/FontCascade.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx">     m_fontDescription.setSpecifiedSize(CTFontGetSize(fontData.font()));
</span><span class="cx">     m_fontDescription.setComputedSize(CTFontGetSize(fontData.font()));
</span><span class="cx">     m_fontDescription.setIsItalic(CTFontGetSymbolicTraits(fontData.font()) &amp; kCTFontTraitItalic);
</span><del>-    m_fontDescription.setWeight((CTFontGetSymbolicTraits(fontData.font()) &amp; kCTFontTraitBold) ? FontWeightBold : FontWeightNormal);
</del><ins>+    m_fontDescription.setWeight((CTFontGetSymbolicTraits(fontData.font()) &amp; kCTFontTraitBold) ? boldWeightValue() : normalWeightValue());
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCascadeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCascade.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCascade.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/FontCascade.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -164,8 +164,8 @@
</span><span class="cx">     unsigned familyCount() const { return m_fontDescription.familyCount(); }
</span><span class="cx">     const AtomicString&amp; familyAt(unsigned i) const { return m_fontDescription.familyAt(i); }
</span><span class="cx"> 
</span><del>-    FontItalic italic() const { return m_fontDescription.italic(); }
-    FontWeight weight() const { return m_fontDescription.weight(); }
</del><ins>+    FontSelectionValue italic() const { return m_fontDescription.italic(); }
+    FontSelectionValue weight() const { return m_fontDescription.weight(); }
</ins><span class="cx">     FontWidthVariant widthVariant() const { return m_fontDescription.widthVariant(); }
</span><span class="cx"> 
</span><span class="cx">     bool isPlatformFont() const { return m_fonts-&gt;isForPlatformFont(); }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontDescriptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontDescription.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontDescription.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/FontDescription.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -42,7 +42,8 @@
</span><span class="cx">     char c;
</span><span class="cx"> #endif
</span><span class="cx">     AtomicString string;
</span><del>-    float size[2];
</del><ins>+    int16_t fontSelectionRequest[3];
+    float size;
</ins><span class="cx">     unsigned bitfields1;
</span><span class="cx">     unsigned bitfields2 : 22;
</span><span class="cx">     void* array;
</span><span class="lines">@@ -53,11 +54,10 @@
</span><span class="cx"> COMPILE_ASSERT(sizeof(FontCascadeDescription) == sizeof(SameSizeAsFontCascadeDescription), FontCascadeDescription_should_stay_small);
</span><span class="cx"> 
</span><span class="cx"> FontDescription::FontDescription()
</span><del>-    : m_orientation(Horizontal)
</del><ins>+    : m_fontSelectionRequest(FontCascadeDescription::initialWeight(), FontCascadeDescription::initialStretch(), FontCascadeDescription::initialItalic())
+    , m_orientation(Horizontal)
</ins><span class="cx">     , m_nonCJKGlyphOrientation(static_cast&lt;unsigned&gt;(NonCJKGlyphOrientation::Mixed))
</span><span class="cx">     , m_widthVariant(RegularWidth)
</span><del>-    , m_italic(FontItalicOff)
-    , m_weight(FontWeightNormal)
</del><span class="cx">     , m_renderingMode(static_cast&lt;unsigned&gt;(FontRenderingMode::Normal))
</span><span class="cx">     , m_textRendering(AutoTextRendering)
</span><span class="cx">     , m_script(USCRIPT_COMMON)
</span><span class="lines">@@ -80,13 +80,6 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FontTraitsMask FontDescription::traitsMask() const
-{
-    return static_cast&lt;FontTraitsMask&gt;((m_italic ? FontStyleItalicMask : FontStyleNormalMask)
-        | (FontWeight100Mask &lt;&lt; (m_weight - FontWeight100)));
-    
-}
-
</del><span class="cx"> void FontDescription::setLocale(const AtomicString&amp; locale)
</span><span class="cx"> {
</span><span class="cx">     m_locale = locale;
</span><span class="lines">@@ -102,48 +95,26 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FontWeight FontCascadeDescription::lighterWeight(void) const
</del><ins>+FontSelectionValue FontCascadeDescription::lighterWeight(FontSelectionValue weight)
</ins><span class="cx"> {
</span><del>-    switch (weight()) {
-    case FontWeight100:
-    case FontWeight200:
-    case FontWeight300:
-    case FontWeight400:
-    case FontWeight500:
-        return FontWeight100;
-
-    case FontWeight600:
-    case FontWeight700:
-        return FontWeight400;
-
-    case FontWeight800:
-    case FontWeight900:
-        return FontWeight700;
-    }
-    ASSERT_NOT_REACHED();
-    return FontWeightNormal;
</del><ins>+    if (weight &lt; FontSelectionValue(100))
+        return weight;
+    if (weight &lt; FontSelectionValue(550))
+        return FontSelectionValue(100);
+    if (weight &lt; FontSelectionValue(750))
+        return FontSelectionValue(400);
+    return FontSelectionValue(700);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-FontWeight FontCascadeDescription::bolderWeight(void) const
</del><ins>+FontSelectionValue FontCascadeDescription::bolderWeight(FontSelectionValue weight)
</ins><span class="cx"> {
</span><del>-    switch (weight()) {
-    case FontWeight100:
-    case FontWeight200:
-    case FontWeight300:
-        return FontWeight400;
-
-    case FontWeight400:
-    case FontWeight500:
-        return FontWeight700;
-
-    case FontWeight600:
-    case FontWeight700:
-    case FontWeight800:
-    case FontWeight900:
-        return FontWeight900;
-    }
-    ASSERT_NOT_REACHED();
-    return FontWeightNormal;
</del><ins>+    if (weight &lt; FontSelectionValue(350))
+        return FontSelectionValue(400);
+    if (weight &lt; FontSelectionValue(550))
+        return FontSelectionValue(700);
+    if (weight &lt; FontSelectionValue(900))
+        return FontSelectionValue(900);
+    return weight;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEXT_AUTOSIZING)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontDescriptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontDescription.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontDescription.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/FontDescription.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -46,12 +46,11 @@
</span><span class="cx">     bool operator!=(const FontDescription&amp; other) const { return !(*this == other); }
</span><span class="cx"> 
</span><span class="cx">     float computedSize() const { return m_computedSize; }
</span><del>-    FontItalic italic() const { return static_cast&lt;FontItalic&gt;(m_italic); }
-    FontSelectionValue stretch() const { return m_stretch; }
</del><ins>+    FontSelectionValue italic() const { return m_fontSelectionRequest.slope; }
+    FontSelectionValue stretch() const { return m_fontSelectionRequest.width; }
+    FontSelectionValue weight() const { return m_fontSelectionRequest.weight; }
+    FontSelectionRequest fontSelectionRequest() const { return m_fontSelectionRequest; }
</ins><span class="cx">     int computedPixelSize() const { return int(m_computedSize + 0.5f); }
</span><del>-    FontWeight weight() const { return static_cast&lt;FontWeight&gt;(m_weight); }
-    FontWeight lighterWeight() const;
-    FontWeight bolderWeight() const;
</del><span class="cx">     FontRenderingMode renderingMode() const { return static_cast&lt;FontRenderingMode&gt;(m_renderingMode); }
</span><span class="cx">     TextRenderingMode textRenderingMode() const { return static_cast&lt;TextRenderingMode&gt;(m_textRendering); }
</span><span class="cx">     UScriptCode script() const { return static_cast&lt;UScriptCode&gt;(m_script); }
</span><span class="lines">@@ -98,10 +97,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void setComputedSize(float s) { m_computedSize = clampToFloat(s); }
</span><del>-    void setItalic(FontItalic i) { m_italic = i; }
-    void setStretch(FontSelectionValue stretch) { m_stretch = stretch; }
-    void setIsItalic(bool i) { setItalic(i ? FontItalicOn : FontItalicOff); }
-    void setWeight(FontWeight w) { m_weight = w; }
</del><ins>+    void setItalic(FontSelectionValue italic) { m_fontSelectionRequest.slope = italic; }
+    void setStretch(FontSelectionValue stretch) { m_fontSelectionRequest.width = stretch; }
+    void setIsItalic(bool i) { setItalic(i ? italicValue() : normalItalicValue()); }
+    void setWeight(FontSelectionValue weight) { m_fontSelectionRequest.weight = weight; }
</ins><span class="cx">     void setRenderingMode(FontRenderingMode mode) { m_renderingMode = static_cast&lt;unsigned&gt;(mode); }
</span><span class="cx">     void setTextRenderingMode(TextRenderingMode rendering) { m_textRendering = rendering; }
</span><span class="cx">     void setOrientation(FontOrientation orientation) { m_orientation = orientation; }
</span><span class="lines">@@ -129,8 +128,6 @@
</span><span class="cx">     void setVariantEastAsianWidth(FontVariantEastAsianWidth variant) { m_variantEastAsianWidth = static_cast&lt;unsigned&gt;(variant); }
</span><span class="cx">     void setVariantEastAsianRuby(FontVariantEastAsianRuby variant) { m_variantEastAsianRuby = static_cast&lt;unsigned&gt;(variant); }
</span><span class="cx"> 
</span><del>-    FontTraitsMask traitsMask() const;
-
</del><span class="cx"> private:
</span><span class="cx">     // FIXME: Investigate moving these into their own object on the heap (to save memory).
</span><span class="cx">     FontFeatureSettings m_featureSettings;
</span><span class="lines">@@ -137,13 +134,11 @@
</span><span class="cx">     FontVariationSettings m_variationSettings;
</span><span class="cx">     AtomicString m_locale;
</span><span class="cx"> 
</span><ins>+    FontSelectionRequest m_fontSelectionRequest;
</ins><span class="cx">     float m_computedSize { 0 }; // Computed size adjusted for the minimum font size and the zoom factor.
</span><del>-    FontSelectionValue m_stretch { 100 }; // Stretch, or &quot;width,&quot; of the font
</del><span class="cx">     unsigned m_orientation : 1; // FontOrientation - Whether the font is rendering on a horizontal line or a vertical line.
</span><span class="cx">     unsigned m_nonCJKGlyphOrientation : 1; // NonCJKGlyphOrientation - Only used by vertical text. Determines the default orientation for non-ideograph glyphs.
</span><span class="cx">     unsigned m_widthVariant : 2; // FontWidthVariant
</span><del>-    unsigned m_italic : 1; // FontItalic
-    unsigned m_weight : 8; // FontWeight
</del><span class="cx">     unsigned m_renderingMode : 1; // Used to switch between CG and GDI text on Windows.
</span><span class="cx">     unsigned m_textRendering : 2; // TextRenderingMode
</span><span class="cx">     unsigned m_script : 7; // Used to help choose an appropriate font for generic font families.
</span><span class="lines">@@ -168,9 +163,7 @@
</span><span class="cx"> inline bool FontDescription::operator==(const FontDescription&amp; other) const
</span><span class="cx"> {
</span><span class="cx">     return m_computedSize == other.m_computedSize
</span><del>-        &amp;&amp; m_stretch == other.m_stretch
-        &amp;&amp; m_italic == other.m_italic
-        &amp;&amp; m_weight == other.m_weight
</del><ins>+        &amp;&amp; m_fontSelectionRequest == other.m_fontSelectionRequest
</ins><span class="cx">         &amp;&amp; m_renderingMode == other.m_renderingMode
</span><span class="cx">         &amp;&amp; m_textRendering == other.m_textRendering
</span><span class="cx">         &amp;&amp; m_orientation == other.m_orientation
</span><span class="lines">@@ -214,8 +207,10 @@
</span><span class="cx"> 
</span><span class="cx">     float specifiedSize() const { return m_specifiedSize; }
</span><span class="cx">     bool isAbsoluteSize() const { return m_isAbsoluteSize; }
</span><del>-    FontWeight lighterWeight() const;
-    FontWeight bolderWeight() const;
</del><ins>+    FontSelectionValue lighterWeight() const { return lighterWeight(weight()); }
+    FontSelectionValue bolderWeight() const { return bolderWeight(weight()); }
+    static FontSelectionValue lighterWeight(FontSelectionValue);
+    static FontSelectionValue bolderWeight(FontSelectionValue);
</ins><span class="cx"> 
</span><span class="cx">     // only use fixed default size when there is only one font family, and that family is &quot;monospace&quot;
</span><span class="cx">     bool useFixedDefaultSize() const { return familyCount() == 1 &amp;&amp; firstFamily() == monospaceFamily; }
</span><span class="lines">@@ -265,8 +260,9 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     // Initial values for font properties.
</span><del>-    static FontItalic initialItalic() { return FontItalicOff; }
-    static FontSelectionValue initialStretch() { return FontSelectionValue(100); }
</del><ins>+    static FontSelectionValue initialItalic() { return normalItalicValue(); }
+    static FontSelectionValue initialWeight() { return normalWeightValue(); }
+    static FontSelectionValue initialStretch() { return normalStretchValue(); }
</ins><span class="cx">     static FontSmallCaps initialSmallCaps() { return FontSmallCapsOff; }
</span><span class="cx">     static Kerning initialKerning() { return Kerning::Auto; }
</span><span class="cx">     static FontSmoothingMode initialFontSmoothing() { return AutoSmoothing; }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontSelectionAlgorithmcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx">     if (width.includes(m_request.width))
</span><span class="cx">         return { FontSelectionValue(), m_request.width };
</span><span class="cx"> 
</span><del>-    if (m_request.width &gt;= FontSelectionValue(100)) {
</del><ins>+    if (m_request.width &gt;= normalStretchValue()) {
</ins><span class="cx">         if (width.minimum &gt; m_request.width)
</span><span class="cx">             return { width.minimum - m_request.width, width.minimum };
</span><span class="cx">         ASSERT(width.maximum &lt; m_request.width);
</span><span class="lines">@@ -152,88 +152,4 @@
</span><span class="cx">     return result.value_or(0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FontSelectionRequest fontSelectionRequestForTraitsMask(FontTraitsMask traitsMask, FontSelectionValue stretch)
-{
-    FontSelectionRequest result;
-    if (traitsMask &amp; FontWeight100Mask)
-        result.weight = FontSelectionValue(100);
-    else if (traitsMask &amp; FontWeight200Mask)
-        result.weight = FontSelectionValue(200);
-    else if (traitsMask &amp; FontWeight300Mask)
-        result.weight = FontSelectionValue(300);
-    else if (traitsMask &amp; FontWeight400Mask)
-        result.weight = FontSelectionValue(400);
-    else if (traitsMask &amp; FontWeight500Mask)
-        result.weight = FontSelectionValue(500);
-    else if (traitsMask &amp; FontWeight600Mask)
-        result.weight = FontSelectionValue(600);
-    else if (traitsMask &amp; FontWeight700Mask)
-        result.weight = FontSelectionValue(700);
-    else if (traitsMask &amp; FontWeight800Mask)
-        result.weight = FontSelectionValue(800);
-    else {
-        ASSERT(traitsMask &amp; FontWeight900Mask);
-        result.weight = FontSelectionValue(900);
-    }
-
-    result.width = stretch;
-
-    if (traitsMask &amp; FontStyleNormalMask)
-        result.slope = FontSelectionValue();
-    else {
-        ASSERT(traitsMask &amp; FontStyleItalicMask);
-        result.slope = italicThreshold();
-    }
-
-    return result;
</del><span class="cx"> }
</span><del>-
-static FontSelectionCapabilities initialFontSelectionCapabilitiesForTraitsMask(FontTraitsMask traitsMask)
-{
-    FontSelectionCapabilities result;
-    if (traitsMask &amp; FontWeight100Mask)
-        result.weight = { FontSelectionValue(100), FontSelectionValue(100) };
-    else if (traitsMask &amp; FontWeight200Mask)
-        result.weight = { FontSelectionValue(200), FontSelectionValue(200) };
-    else if (traitsMask &amp; FontWeight300Mask)
-        result.weight = { FontSelectionValue(300), FontSelectionValue(300) };
-    else if (traitsMask &amp; FontWeight400Mask)
-        result.weight = { FontSelectionValue(400), FontSelectionValue(400) };
-    else if (traitsMask &amp; FontWeight500Mask)
-        result.weight = { FontSelectionValue(500), FontSelectionValue(500) };
-    else if (traitsMask &amp; FontWeight600Mask)
-        result.weight = { FontSelectionValue(600), FontSelectionValue(600) };
-    else if (traitsMask &amp; FontWeight700Mask)
-        result.weight = { FontSelectionValue(700), FontSelectionValue(700) };
-    else if (traitsMask &amp; FontWeight800Mask)
-        result.weight = { FontSelectionValue(800), FontSelectionValue(800) };
-    else {
-        ASSERT(traitsMask &amp; FontWeight900Mask);
-        result.weight = { FontSelectionValue(900), FontSelectionValue(900) };
-    }
-
-    if (traitsMask &amp; FontStyleNormalMask)
-        result.slope = { FontSelectionValue(), FontSelectionValue() };
-    else {
-        ASSERT(traitsMask &amp; FontStyleItalicMask);
-        result.slope = { italicThreshold(), italicThreshold() };
-    }
-
-    return result;
-}
-
-FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask traitsMask, FontSelectionValue stretch)
-{
-    FontSelectionCapabilities result = initialFontSelectionCapabilitiesForTraitsMask(traitsMask);
-    result.width = { stretch, stretch };
-    return result;
-}
-
-FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask traitsMask, FontSelectionRange stretch)
-{
-    FontSelectionCapabilities result = initialFontSelectionCapabilitiesForTraitsMask(traitsMask);
-    result.width = stretch;
-    return result;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontSelectionAlgorithmh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -88,6 +88,15 @@
</span><span class="cx">         return result.get();
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static FontSelectionValue clampFloat(float value)
+    {
+        if (value &lt; static_cast&lt;float&gt;(FontSelectionValue::minimumValue()))
+            return FontSelectionValue::minimumValue();
+        if (value &gt; static_cast&lt;float&gt;(FontSelectionValue::maximumValue()))
+            return FontSelectionValue::maximumValue();
+        return FontSelectionValue(value);
+    }
+
</ins><span class="cx"> private:
</span><span class="cx">     enum class RawTag { RawTag };
</span><span class="cx"> 
</span><span class="lines">@@ -161,6 +170,23 @@
</span><span class="cx">     return result.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool isItalic(FontSelectionValue fontWeight)
+{
+    return fontWeight &gt;= italicThreshold();
+}
+
+static inline FontSelectionValue normalItalicValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue();
+    return result.get();
+}
+
+static inline FontSelectionValue italicValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(20);
+    return result.get();
+}
+
</ins><span class="cx"> static inline FontSelectionValue boldThreshold()
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(600);
</span><span class="lines">@@ -167,6 +193,29 @@
</span><span class="cx">     return result.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline FontSelectionValue boldWeightValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(700);
+    return result.get();
+}
+
+static inline FontSelectionValue normalWeightValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(400);
+    return result.get();
+}
+
+static inline FontSelectionValue lightWeightValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(200);
+    return result.get();
+}
+
+static inline bool isFontWeightBold(FontSelectionValue fontWeight)
+{
+    return fontWeight &gt;= boldThreshold();
+}
+
</ins><span class="cx"> static inline FontSelectionValue weightSearchThreshold()
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(500);
</span><span class="lines">@@ -173,6 +222,60 @@
</span><span class="cx">     return result.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline FontSelectionValue ultraCondensedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(50);
+    return result.get();
+}
+
+static inline FontSelectionValue extraCondensedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(62.5f);
+    return result.get();
+}
+
+static inline FontSelectionValue condensedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(75);
+    return result.get();
+}
+
+static inline FontSelectionValue semiCondensedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(87.5f);
+    return result.get();
+}
+
+static inline FontSelectionValue normalStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(100);
+    return result.get();
+}
+
+static inline FontSelectionValue semiExpandedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(112.5f);
+    return result.get();
+}
+
+static inline FontSelectionValue expandedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(125);
+    return result.get();
+}
+
+static inline FontSelectionValue extraExpandedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(150);
+    return result.get();
+}
+
+static inline FontSelectionValue ultraExpandedStretchValue()
+{
+    static NeverDestroyed&lt;FontSelectionValue&gt; result = FontSelectionValue(200);
+    return result.get();
+}
+
</ins><span class="cx"> // [Inclusive, Inclusive]
</span><span class="cx"> struct FontSelectionRange {
</span><span class="cx">     FontSelectionRange(FontSelectionValue minimum, FontSelectionValue maximum)
</span><span class="lines">@@ -214,6 +317,15 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> struct FontSelectionRequest {
</span><ins>+    FontSelectionRequest() = default;
+
+    FontSelectionRequest(FontSelectionValue weight, FontSelectionValue width, FontSelectionValue slope)
+        : weight(weight)
+        , width(width)
+        , slope(slope)
+    {
+    }
+
</ins><span class="cx">     bool operator==(const FontSelectionRequest&amp; other) const
</span><span class="cx">     {
</span><span class="cx">         return weight == other.weight
</span><span class="lines">@@ -289,9 +401,9 @@
</span><span class="cx">         slope.expand(capabilities.slope);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    FontSelectionRange weight { FontSelectionValue(400), FontSelectionValue(400) };
-    FontSelectionRange width { FontSelectionValue(100), FontSelectionValue(100) };
-    FontSelectionRange slope { FontSelectionValue(), FontSelectionValue() };
</del><ins>+    FontSelectionRange weight { normalWeightValue(), normalWeightValue() };
+    FontSelectionRange width { normalStretchValue(), normalStretchValue() };
+    FontSelectionRange slope { normalItalicValue(), normalItalicValue() };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> class FontSelectionAlgorithm {
</span><span class="lines">@@ -358,8 +470,4 @@
</span><span class="cx">     std::unique_ptr&lt;bool[]&gt; m_filter;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-FontSelectionRequest fontSelectionRequestForTraitsMask(FontTraitsMask, FontSelectionValue stretch);
-FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask, FontSelectionValue stretch);
-FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask, FontSelectionRange stretch);
-
</del><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontCacheCoreTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -551,83 +551,6 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FontWeight fontWeightFromCoreText(CGFloat weight)
-{
-    if (weight &lt; -0.6)
-        return FontWeight100;
-    if (weight &lt; -0.365)
-        return FontWeight200;
-    if (weight &lt; -0.115)
-        return FontWeight300;
-    if (weight &lt;  0.130)
-        return FontWeight400;
-    if (weight &lt;  0.235)
-        return FontWeight500;
-    if (weight &lt;  0.350)
-        return FontWeight600;
-    if (weight &lt;  0.500)
-        return FontWeight700;
-    if (weight &lt;  0.700)
-        return FontWeight800;
-    return FontWeight900;
-}
-
-static inline FontTraitsMask toTraitsMask(CTFontSymbolicTraits ctFontTraits, CGFloat weight)
-{
-    FontTraitsMask weightMask;
-    switch (fontWeightFromCoreText(weight)) {
-    case FontWeight100:
-        weightMask = FontWeight100Mask;
-        break;
-    case FontWeight200:
-        weightMask = FontWeight200Mask;
-        break;
-    case FontWeight300:
-        weightMask = FontWeight300Mask;
-        break;
-    case FontWeight400:
-        weightMask = FontWeight400Mask;
-        break;
-    case FontWeight500:
-        weightMask = FontWeight500Mask;
-        break;
-    case FontWeight600:
-        weightMask = FontWeight600Mask;
-        break;
-    case FontWeight700:
-        weightMask = FontWeight700Mask;
-        break;
-    case FontWeight800:
-        weightMask = FontWeight800Mask;
-        break;
-    case FontWeight900:
-        weightMask = FontWeight900Mask;
-        break;
-    }
-    return static_cast&lt;FontTraitsMask&gt;(((ctFontTraits &amp; kCTFontTraitItalic) ? FontStyleItalicMask : FontStyleNormalMask) | weightMask);
-}
-
-bool isFontWeightBold(FontWeight fontWeight)
-{
-    return fontWeight &gt;= FontWeight600;
-}
-
-uint16_t toCoreTextFontWeight(FontWeight fontWeight)
-{
-    static const int coreTextFontWeights[] = {
-        100, // FontWeight100
-        200, // FontWeight200
-        300, // FontWeight300
-        400, // FontWeight400
-        500, // FontWeight500
-        600, // FontWeight600
-        700, // FontWeight700
-        800, // FontWeight800
-        900, // FontWeight900
-    };
-    return coreTextFontWeights[fontWeight];
-}
-
</del><span class="cx"> RefPtr&lt;Font&gt; FontCache::similarFont(const FontDescription&amp; description, const AtomicString&amp; family)
</span><span class="cx"> {
</span><span class="cx">     // Attempt to find an appropriate font using a match based on the presence of keywords in
</span><span class="lines">@@ -672,42 +595,9 @@
</span><span class="cx">         ASSERT_UNUSED(success, success);
</span><span class="cx">         return FontSelectionValue(ctWidth &lt; 0.5 ? ctWidth * 50 + 100 : ctWidth * 150 + 50);
</span><span class="cx">     }
</span><del>-    return FontSelectionValue(100);
</del><ins>+    return normalStretchValue();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-auto FontCache::getTraitsAndStretchInFamily(const AtomicString&amp; familyName) -&gt; Vector&lt;TraitsAndStretch&gt;
-{
-    auto familyNameStr = familyName.string().createCFString();
-    CFTypeRef keys[] = { kCTFontFamilyNameAttribute };
-    CFTypeRef values[] = { familyNameStr.get() };
-    auto attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
-    auto fontDescriptor = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
-    auto matchedDescriptors = adoptCF(CTFontDescriptorCreateMatchingFontDescriptors(fontDescriptor.get(), nullptr));
-    if (!matchedDescriptors)
-        return { };
-
-    CFIndex numMatches = CFArrayGetCount(matchedDescriptors.get());
-    if (!numMatches)
-        return { };
-
-    Vector&lt;TraitsAndStretch&gt; result;
-    result.reserveInitialCapacity(numMatches);
-    for (CFIndex i = 0; i &lt; numMatches; ++i) {
-        auto traits = adoptCF((CFDictionaryRef)CTFontDescriptorCopyAttribute((CTFontDescriptorRef)CFArrayGetValueAtIndex(matchedDescriptors.get(), i), kCTFontTraitsAttribute));
-        CFNumberRef resultRef = (CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait);
-        CFNumberRef weightRef = (CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontWeightTrait);
-        if (resultRef &amp;&amp; weightRef) {
-            CTFontSymbolicTraits symbolicTraits;
-            CFNumberGetValue(resultRef, kCFNumberIntType, &amp;symbolicTraits);
-            CGFloat weight = 0;
-            CFNumberGetValue(weightRef, kCFNumberCGFloatType, &amp;weight);
-            auto stretch = stretchFromCoreTextTraits(traits.get());
-            result.uncheckedAppend({ toTraitsMask(symbolicTraits, weight), { stretch, stretch } });
-        }
-    }
-    return result;
-}
-
</del><span class="cx"> static void invalidateFontCache();
</span><span class="cx"> 
</span><span class="cx"> static void fontCacheRegisteredFontsChangedNotificationCallback(CFNotificationCenterRef, void* observer, CFStringRef name, const void *, CFDictionaryRef)
</span><span class="lines">@@ -801,7 +691,28 @@
</span><span class="cx">     return family[0] == '.';
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
</del><ins>+#if SHOULD_USE_CORE_TEXT_FONT_LOOKUP
+static FontSelectionValue fontWeightFromCoreText(CGFloat weight)
+{
+    if (weight &lt; -0.6)
+        return FontSelectionValue(100);
+    if (weight &lt; -0.365)
+        return FontSelectionValue(200);
+    if (weight &lt; -0.115)
+        return FontSelectionValue(300);
+    if (weight &lt;  0.130)
+        return FontSelectionValue(400);
+    if (weight &lt;  0.235)
+        return FontSelectionValue(500);
+    if (weight &lt;  0.350)
+        return FontSelectionValue(600);
+    if (weight &lt;  0.500)
+        return FontSelectionValue(700);
+    if (weight &lt;  0.700)
+        return FontSelectionValue(800);
+    return FontSelectionValue(900);
+}
+#endif
</ins><span class="cx"> 
</span><span class="cx"> class FontDatabase {
</span><span class="cx"> public:
</span><span class="lines">@@ -899,49 +810,62 @@
</span><span class="cx">         m_postScriptNameToFontDescriptors.clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static FontSelectionCapabilities capabilitiesForFontDescriptor(CTFontDescriptorRef fontDescriptor)
-    {
-        if (!fontDescriptor)
-            return { };
</del><ins>+private:
+    friend class NeverDestroyed&lt;FontDatabase&gt;;
</ins><span class="cx"> 
</span><del>-        auto traits = adoptCF(static_cast&lt;CFDictionaryRef&gt;(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontTraitsAttribute)));
-        FontSelectionValue width;
-        FontSelectionValue slant;
-        FontSelectionValue weight;
-        if (traits) {
-            width = stretchFromCoreTextTraits(traits.get());
</del><ins>+    FontDatabase() = default;
</ins><span class="cx"> 
</span><del>-            auto symbolicTraitsNumber = static_cast&lt;CFNumberRef&gt;(CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait));
-            if (symbolicTraitsNumber) {
-                int32_t symbolicTraits;
-                auto success = CFNumberGetValue(symbolicTraitsNumber, kCFNumberSInt32Type, &amp;symbolicTraits);
-                ASSERT_UNUSED(success, success);
-                slant = symbolicTraits &amp; kCTFontTraitItalic ? italicThreshold() : FontSelectionValue();
-            }
</del><ins>+    HashMap&lt;String, InstalledFontFamily&gt; m_familyNameToFontDescriptors;
+    HashMap&lt;String, InstalledFont&gt; m_postScriptNameToFontDescriptors;
+};
+
+FontSelectionCapabilities capabilitiesForFontDescriptor(CTFontDescriptorRef fontDescriptor)
+{
+    if (!fontDescriptor)
+        return { };
+
+    auto traits = adoptCF(static_cast&lt;CFDictionaryRef&gt;(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontTraitsAttribute)));
+    FontSelectionValue width;
+    FontSelectionValue slant;
+    FontSelectionValue weight;
+    if (traits) {
+        width = stretchFromCoreTextTraits(traits.get());
+
+        auto symbolicTraitsNumber = static_cast&lt;CFNumberRef&gt;(CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait));
+        if (symbolicTraitsNumber) {
+            int32_t symbolicTraits;
+            auto success = CFNumberGetValue(symbolicTraitsNumber, kCFNumberSInt32Type, &amp;symbolicTraits);
+            ASSERT_UNUSED(success, success);
+            slant = symbolicTraits &amp; kCTFontTraitItalic ? italicValue() : normalItalicValue();
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        auto weightNumber = adoptCF(static_cast&lt;CFNumberRef&gt;(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontCSSWeightAttribute)));
</del><ins>+#if SHOULD_USE_CORE_TEXT_FONT_LOOKUP
+        auto weightNumber = static_cast&lt;CFNumberRef&gt;(CFDictionaryGetValue(traits.get(), kCTFontWeightTrait));
</ins><span class="cx">         if (weightNumber) {
</span><del>-            float cssWeight;
-            auto success = CFNumberGetValue(weightNumber.get(), kCFNumberFloatType, &amp;cssWeight);
</del><ins>+            CGFloat ctWeight;
+            auto success = CFNumberGetValue(weightNumber, kCFNumberCGFloatType, &amp;ctWeight);
</ins><span class="cx">             ASSERT_UNUSED(success, success);
</span><del>-            weight = FontSelectionValue(cssWeight);
</del><ins>+            weight = fontWeightFromCoreText(ctWeight);
</ins><span class="cx">         }
</span><ins>+#endif
+    }
</ins><span class="cx"> 
</span><del>-        // FIXME: Educate this function about font variations.
-
-        return { { weight, weight }, { width, width }, { slant, slant } };
</del><ins>+#if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
+    auto weightNumber = adoptCF(static_cast&lt;CFNumberRef&gt;(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontCSSWeightAttribute)));
+    if (weightNumber) {
+        float cssWeight;
+        auto success = CFNumberGetValue(weightNumber.get(), kCFNumberFloatType, &amp;cssWeight);
+        ASSERT_UNUSED(success, success);
+        weight = FontSelectionValue(cssWeight);
</ins><span class="cx">     }
</span><ins>+#endif
</ins><span class="cx"> 
</span><del>-private:
-    friend class NeverDestroyed&lt;FontDatabase&gt;;
</del><ins>+    // FIXME: Educate this function about font variations.
</ins><span class="cx"> 
</span><del>-    FontDatabase() = default;
</del><ins>+    return { { weight, weight }, { width, width }, { slant, slant } };
+}
</ins><span class="cx"> 
</span><del>-    HashMap&lt;String, InstalledFontFamily&gt; m_familyNameToFontDescriptors;
-    HashMap&lt;String, InstalledFont&gt; m_postScriptNameToFontDescriptors;
-};
-
</del><ins>+#if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
</ins><span class="cx"> static const FontDatabase::InstalledFont* findClosestFont(const FontDatabase::InstalledFontFamily&amp; familyFonts, FontSelectionRequest fontSelectionRequest)
</span><span class="cx"> {
</span><span class="cx">     Vector&lt;FontSelectionCapabilities&gt; capabilities;
</span><span class="lines">@@ -951,57 +875,22 @@
</span><span class="cx">     FontSelectionAlgorithm fontSelectionAlgorithm(fontSelectionRequest, capabilities, familyFonts.capabilities);
</span><span class="cx">     return &amp;familyFonts.installedFonts[fontSelectionAlgorithm.indexOfBestCapabilities()];
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><del>-static FontSelectionRequest calculateFontSelectionRequest(CTFontSymbolicTraits requestedTraits, FontWeight weight, FontSelectionValue stretch)
</del><ins>+Vector&lt;FontSelectionCapabilities&gt; FontCache::getFontSelectionCapabilitiesInFamily(const AtomicString&amp; familyName)
</ins><span class="cx"> {
</span><del>-    FontSelectionRequest result;
-    switch (weight) {
-    case FontWeight100:
-        result.weight = FontSelectionValue(100);
-        break;
-    case FontWeight200:
-        result.weight = FontSelectionValue(200);
-        break;
-    case FontWeight300:
-        result.weight = FontSelectionValue(300);
-        break;
-    case FontWeight400:
-        result.weight = FontSelectionValue(400);
-        break;
-    case FontWeight500:
-        result.weight = FontSelectionValue(500);
-        break;
-    case FontWeight600:
-        result.weight = FontSelectionValue(600);
-        break;
-    case FontWeight700:
-        result.weight = FontSelectionValue(700);
-        break;
-    case FontWeight800:
-        result.weight = FontSelectionValue(800);
-        break;
-    case FontWeight900:
-        result.weight = FontSelectionValue(900);
-        break;
-    default:
-        ASSERT_NOT_REACHED();
-        result.weight = FontSelectionValue(400);
-        break;
-    }
</del><ins>+    const auto&amp; fonts = FontDatabase::singleton().collectionForFamily(familyName.string());
+    if (fonts.isEmpty())
+        return { };
</ins><span class="cx"> 
</span><del>-    result.width = stretch;
-
-    if (requestedTraits &amp; kCTFontTraitItalic)
-        result.slope = italicThreshold();
-    else
-        result.slope = FontSelectionValue();
-
</del><ins>+    Vector&lt;FontSelectionCapabilities&gt; result;
+    result.reserveInitialCapacity(fonts.size());
+    for (const auto&amp; font : fonts.installedFonts)
+        result.uncheckedAppend(font.capabilities);
</ins><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#endif // !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
-
-static RetainPtr&lt;CTFontRef&gt; platformFontLookupWithFamily(const AtomicString&amp; family, CTFontSymbolicTraits requestedTraits, FontWeight weight, FontSelectionValue stretch, float size)
</del><ins>+static RetainPtr&lt;CTFontRef&gt; platformFontLookupWithFamily(const AtomicString&amp; family, FontSelectionRequest request, float size)
</ins><span class="cx"> {
</span><span class="cx">     const auto&amp; whitelist = fontWhitelist();
</span><span class="cx">     if (!isSystemFont(family) &amp;&amp; whitelist.size() &amp;&amp; !whitelist.contains(family))
</span><span class="lines">@@ -1008,8 +897,8 @@
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx"> #if SHOULD_USE_CORE_TEXT_FONT_LOOKUP
</span><del>-    UNUSED_PARAM(stretch);
-    return adoptCF(CTFontCreateForCSS(family.string().createCFString().get(), toCoreTextFontWeight(weight), requestedTraits, size));
</del><ins>+    CTFontSymbolicTraits traits = (isFontWeightBold(request.weight) ? kCTFontTraitBold : 0) | (isItalic(request.slope) ? kCTFontTraitItalic : 0);
+    return adoptCF(CTFontCreateForCSS(family.string().createCFString().get(), static_cast&lt;float&gt;(request.weight), traits, size));
</ins><span class="cx"> #else
</span><span class="cx">     const auto&amp; familyFonts = FontDatabase::singleton().collectionForFamily(family.string());
</span><span class="cx">     if (familyFonts.isEmpty()) {
</span><span class="lines">@@ -1023,8 +912,8 @@
</span><span class="cx">         const auto&amp; postScriptFont = FontDatabase::singleton().fontForPostScriptName(family);
</span><span class="cx">         if (!postScriptFont.fontDescriptor)
</span><span class="cx">             return nullptr;
</span><del>-        if (((requestedTraits &amp; kCTFontTraitItalic) &amp;&amp; postScriptFont.capabilities.slope.maximum &lt; italicThreshold())
-            || (weight &gt;= FontWeight600 &amp;&amp; postScriptFont.capabilities.weight.maximum &lt; boldThreshold())) {
</del><ins>+        if ((isItalic(request.slope) &amp;&amp; !isItalic(postScriptFont.capabilities.slope.maximum))
+            || (isFontWeightBold(request.weight) &amp;&amp; !isFontWeightBold(postScriptFont.capabilities.weight.maximum))) {
</ins><span class="cx">             auto postScriptFamilyName = adoptCF(static_cast&lt;CFStringRef&gt;(CTFontDescriptorCopyAttribute(postScriptFont.fontDescriptor.get(), kCTFontFamilyNameAttribute)));
</span><span class="cx">             if (!postScriptFamilyName)
</span><span class="cx">                 return nullptr;
</span><span class="lines">@@ -1031,7 +920,7 @@
</span><span class="cx">             const auto&amp; familyFonts = FontDatabase::singleton().collectionForFamily(String(postScriptFamilyName.get()));
</span><span class="cx">             if (familyFonts.isEmpty())
</span><span class="cx">                 return nullptr;
</span><del>-            if (const auto* installedFont = findClosestFont(familyFonts, calculateFontSelectionRequest(requestedTraits, weight, stretch))) {
</del><ins>+            if (const auto* installedFont = findClosestFont(familyFonts, request)) {
</ins><span class="cx">                 if (!installedFont-&gt;fontDescriptor)
</span><span class="cx">                     return nullptr;
</span><span class="cx">                 return adoptCF(CTFontCreateWithFontDescriptor(installedFont-&gt;fontDescriptor.get(), size, nullptr));
</span><span class="lines">@@ -1041,7 +930,7 @@
</span><span class="cx">         return adoptCF(CTFontCreateWithFontDescriptor(postScriptFont.fontDescriptor.get(), size, nullptr));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (const auto* installedFont = findClosestFont(familyFonts, calculateFontSelectionRequest(requestedTraits, weight, stretch)))
</del><ins>+    if (const auto* installedFont = findClosestFont(familyFonts, request))
</ins><span class="cx">         return adoptCF(CTFontCreateWithFontDescriptor(installedFont-&gt;fontDescriptor.get(), size, nullptr));
</span><span class="cx"> 
</span><span class="cx">     return nullptr;
</span><span class="lines">@@ -1057,21 +946,19 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-#if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
</del><span class="cx">     FontDatabase::singleton().clear();
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     FontCache::singleton().invalidate();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static RetainPtr&lt;CTFontRef&gt; fontWithFamily(const AtomicString&amp; family, CTFontSymbolicTraits desiredTraits, FontWeight weight, FontSelectionValue stretch, const FontFeatureSettings&amp; featureSettings, const FontVariantSettings&amp; variantSettings, const FontVariationSettings&amp; variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode&amp; textRenderingMode, float size)
</del><ins>+static RetainPtr&lt;CTFontRef&gt; fontWithFamily(const AtomicString&amp; family, FontSelectionRequest request, const FontFeatureSettings&amp; featureSettings, const FontVariantSettings&amp; variantSettings, const FontVariationSettings&amp; variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode&amp; textRenderingMode, float size)
</ins><span class="cx"> {
</span><span class="cx">     if (family.isEmpty())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    auto foundFont = platformFontWithFamilySpecialCase(family, weight, desiredTraits, size);
</del><ins>+    auto foundFont = platformFontWithFamilySpecialCase(family, request, size);
</ins><span class="cx">     if (!foundFont)
</span><del>-        foundFont = platformFontLookupWithFamily(family, desiredTraits, weight, stretch, size);
</del><ins>+        foundFont = platformFontLookupWithFamily(family, request, size);
</ins><span class="cx">     return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, featureSettings, variantSettings, variationSettings);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1109,10 +996,9 @@
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr&lt;FontPlatformData&gt; FontCache::createFontPlatformData(const FontDescription&amp; fontDescription, const AtomicString&amp; family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings)
</span><span class="cx"> {
</span><del>-    CTFontSymbolicTraits traits = computeTraits(fontDescription);
</del><span class="cx">     float size = fontDescription.computedPixelSize();
</span><span class="cx"> 
</span><del>-    auto font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.stretch(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
</del><ins>+    auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">     if (!font) {
</span><span class="lines">@@ -1123,7 +1009,7 @@
</span><span class="cx">         // Ignore the result because we want to use our own algorithm to actually find the font.
</span><span class="cx">         autoActivateFont(family.string(), size);
</span><span class="cx"> 
</span><del>-        font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.stretch(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
</del><ins>+        font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -1161,7 +1047,7 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-static RetainPtr&lt;CTFontRef&gt; lookupFallbackFont(CTFontRef font, FontWeight fontWeight, const AtomicString&amp; locale, const UChar* characters, unsigned length)
</del><ins>+static RetainPtr&lt;CTFontRef&gt; lookupFallbackFont(CTFontRef font, FontSelectionValue fontWeight, const AtomicString&amp; locale, const UChar* characters, unsigned length)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(length &gt; 0);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfreetypeFontCacheFreeTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">     RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-auto FontCache::getTraitsAndStretchInFamily(const AtomicString&amp; familyName) -&gt; Vector&lt;TraitsAndStretch&gt;
</del><ins>+Vector&lt;FontSelectionCapabilities&gt; FontCache::getFontSelectionCapabilitiesInFamily(const AtomicString&amp; familyName)
</ins><span class="cx"> {
</span><span class="cx">     return { };
</span><span class="cx"> }
</span><span class="lines">@@ -163,31 +163,25 @@
</span><span class="cx">     return &quot;&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static int fontWeightToFontconfigWeight(FontWeight weight)
</del><ins>+static int fontWeightToFontconfigWeight(FontSelectionValue weight)
</ins><span class="cx"> {
</span><del>-    switch (weight) {
-    case FontWeight100:
</del><ins>+    if (weight &lt; FontSelectionValue(150))
</ins><span class="cx">         return FC_WEIGHT_THIN;
</span><del>-    case FontWeight200:
</del><ins>+    if (weight &lt; FontSelectionValue(250))
</ins><span class="cx">         return FC_WEIGHT_ULTRALIGHT;
</span><del>-    case FontWeight300:
</del><ins>+    if (weight &lt; FontSelectionValue(350))
</ins><span class="cx">         return FC_WEIGHT_LIGHT;
</span><del>-    case FontWeight400:
</del><ins>+    if (weight &lt; FontSelectionValue(450))
</ins><span class="cx">         return FC_WEIGHT_REGULAR;
</span><del>-    case FontWeight500:
</del><ins>+    if (weight &lt; FontSelectionValue(550))
</ins><span class="cx">         return FC_WEIGHT_MEDIUM;
</span><del>-    case FontWeight600:
</del><ins>+    if (weight &lt; FontSelectionValue(650))
</ins><span class="cx">         return FC_WEIGHT_SEMIBOLD;
</span><del>-    case FontWeight700:
</del><ins>+    if (weight &lt; FontSelectionValue(750))
</ins><span class="cx">         return FC_WEIGHT_BOLD;
</span><del>-    case FontWeight800:
</del><ins>+    if (weight &lt; FontSelectionValue(850))
</ins><span class="cx">         return FC_WEIGHT_EXTRABOLD;
</span><del>-    case FontWeight900:
-        return FC_WEIGHT_ULTRABLACK;
-    default:
-        ASSERT_NOT_REACHED();
-        return FC_WEIGHT_REGULAR;
-    }
</del><ins>+    return FC_WEIGHT_ULTRABLACK;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // This is based on Chromium BSD code from Skia (src/ports/SkFontMgr_fontconfig.cpp). It is a
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfreetypeFontPlatformDataFreeTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx">         m_fixedWidth = true;
</span><span class="cx"> 
</span><span class="cx">     bool descriptionAllowsSyntheticBold = fontDescription.fontSynthesis() &amp; FontSynthesisWeight;
</span><del>-    if (descriptionAllowsSyntheticBold &amp;&amp; fontDescription.weight() &gt;= FontWeightBold) {
</del><ins>+    if (descriptionAllowsSyntheticBold &amp;&amp; isFontWeightBold(fontDescription.weight())) {
</ins><span class="cx">         // The FC_EMBOLDEN property instructs us to fake the boldness of the font.
</span><span class="cx">         FcBool fontConfigEmbolden = FcFalse;
</span><span class="cx">         if (FcPatternGetBool(pattern, FC_EMBOLDEN, 0, &amp;fontConfigEmbolden) == FcResultMatch)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsiosFontCacheIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -79,26 +79,15 @@
</span><span class="cx">     return *fontForFamily(fontDescription, AtomicString(&quot;.PhoneFallback&quot;, AtomicString::ConstructFromLiteral));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-float FontCache::weightOfCTFont(CTFontRef font)
</del><ins>+static RetainPtr&lt;CTFontDescriptorRef&gt; baseSystemFontDescriptor(FontSelectionValue weight, bool bold, float size)
</ins><span class="cx"> {
</span><del>-    RetainPtr&lt;CFDictionaryRef&gt; traits = adoptCF(CTFontCopyTraits(font));
-
-    CFNumberRef resultRef = (CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontWeightTrait);
-    float result = 0;
-    CFNumberGetValue(resultRef, kCFNumberFloatType, &amp;result);
-
-    return result;
-}
-
-static RetainPtr&lt;CTFontDescriptorRef&gt; baseSystemFontDescriptor(FontWeight weight, bool bold, float size)
-{
</del><span class="cx">     CTFontUIFontType fontType = kCTFontUIFontSystem;
</span><del>-    if (weight &gt; FontWeight300) {
</del><ins>+    if (weight &gt;= FontSelectionValue(350)) {
</ins><span class="cx">         if (bold)
</span><span class="cx">             fontType = kCTFontUIFontEmphasizedSystem;
</span><del>-    } else if (weight &gt; FontWeight200)
</del><ins>+    } else if (weight &gt;= FontSelectionValue(250))
</ins><span class="cx">         fontType = static_cast&lt;CTFontUIFontType&gt;(kCTFontUIFontSystemLight);
</span><del>-    else if (weight &gt; FontWeight100)
</del><ins>+    else if (weight &gt;= FontSelectionValue(150))
</ins><span class="cx">         fontType = static_cast&lt;CTFontUIFontType&gt;(kCTFontUIFontSystemThin);
</span><span class="cx">     else
</span><span class="cx">         fontType = static_cast&lt;CTFontUIFontType&gt;(kCTFontUIFontSystemUltraLight);
</span><span class="lines">@@ -106,23 +95,30 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000
</span><del>-static RetainPtr&lt;NSDictionary&gt; systemFontModificationAttributes(FontWeight weight, bool italic)
</del><ins>+static RetainPtr&lt;NSDictionary&gt; systemFontModificationAttributes(FontSelectionValue weight, bool italic)
</ins><span class="cx"> {
</span><span class="cx">     RetainPtr&lt;NSMutableDictionary&gt; traitsDictionary = adoptNS([[NSMutableDictionary alloc] init]);
</span><span class="cx"> 
</span><del>-    ASSERT(weight &gt;= FontWeight100 &amp;&amp; weight &lt;= FontWeight900);
-    float ctWeights[] = {
-        static_cast&lt;float&gt;(kCTFontWeightUltraLight),
-        static_cast&lt;float&gt;(kCTFontWeightThin),
-        static_cast&lt;float&gt;(kCTFontWeightLight),
-        static_cast&lt;float&gt;(kCTFontWeightRegular),
-        static_cast&lt;float&gt;(kCTFontWeightMedium),
-        static_cast&lt;float&gt;(kCTFontWeightSemibold),
-        static_cast&lt;float&gt;(kCTFontWeightBold),
-        static_cast&lt;float&gt;(kCTFontWeightHeavy),
-        static_cast&lt;float&gt;(kCTFontWeightBlack)
-    };
-    [traitsDictionary setObject:[NSNumber numberWithFloat:ctWeights[weight]] forKey:static_cast&lt;NSString *&gt;(kCTFontWeightTrait)];
</del><ins>+    float ctWeight = kCTFontWeightRegular;
+    if (weight &lt; FontSelectionValue(150))
+        ctWeight = kCTFontWeightUltraLight;
+    else if (weight &lt; FontSelectionValue(250))
+        ctWeight = kCTFontWeightThin;
+    else if (weight &lt; FontSelectionValue(350))
+        ctWeight = kCTFontWeightLight;
+    else if (weight &lt; FontSelectionValue(450))
+        ctWeight = kCTFontWeightRegular;
+    else if (weight &lt; FontSelectionValue(550))
+        ctWeight = kCTFontWeightMedium;
+    else if (weight &lt; FontSelectionValue(650))
+        ctWeight = kCTFontWeightSemibold;
+    else if (weight &lt; FontSelectionValue(750))
+        ctWeight = kCTFontWeightBold;
+    else if (weight &lt; FontSelectionValue(850))
+        ctWeight = kCTFontWeightHeavy;
+    else
+        ctWeight = kCTFontWeightBlack;
+    [traitsDictionary setObject:[NSNumber numberWithFloat:ctWeight] forKey:static_cast&lt;NSString *&gt;(kCTFontWeightTrait)];
</ins><span class="cx"> 
</span><span class="cx">     [traitsDictionary setObject:@YES forKey:static_cast&lt;NSString *&gt;(kCTFontUIFontDesignTrait)];
</span><span class="cx"> 
</span><span class="lines">@@ -133,7 +129,7 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-static RetainPtr&lt;CTFontDescriptorRef&gt; systemFontDescriptor(FontWeight weight, bool bold, bool italic, float size)
</del><ins>+static RetainPtr&lt;CTFontDescriptorRef&gt; systemFontDescriptor(FontSelectionValue weight, bool bold, bool italic, float size)
</ins><span class="cx"> {
</span><span class="cx">     RetainPtr&lt;CTFontDescriptorRef&gt; fontDescriptor = baseSystemFontDescriptor(weight, bold, size);
</span><span class="cx"> #if __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000
</span><span class="lines">@@ -146,10 +142,10 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RetainPtr&lt;CTFontRef&gt; platformFontWithFamilySpecialCase(const AtomicString&amp; family, FontWeight weight, CTFontSymbolicTraits traits, float size)
</del><ins>+RetainPtr&lt;CTFontRef&gt; platformFontWithFamilySpecialCase(const AtomicString&amp; family, FontSelectionRequest request, float size)
</ins><span class="cx"> {
</span><span class="cx">     if (family.startsWith(&quot;UICTFontTextStyle&quot;)) {
</span><del>-        traits &amp;= (kCTFontBoldTrait | kCTFontItalicTrait);
</del><ins>+        CTFontSymbolicTraits traits = (isFontWeightBold(request.weight) ? kCTFontTraitBold : 0) | (isItalic(request.slope) ? kCTFontTraitItalic : 0);
</ins><span class="cx">         RetainPtr&lt;CFStringRef&gt; familyNameStr = family.string().createCFString();
</span><span class="cx">         RetainPtr&lt;CTFontDescriptorRef&gt; fontDescriptor = adoptCF(CTFontDescriptorCreateWithTextStyle(familyNameStr.get(), RenderThemeIOS::contentSizeCategory(), nullptr));
</span><span class="cx">         if (traits)
</span><span class="lines">@@ -159,7 +155,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (equalLettersIgnoringASCIICase(family, &quot;-webkit-system-font&quot;) || equalLettersIgnoringASCIICase(family, &quot;-apple-system&quot;) || equalLettersIgnoringASCIICase(family, &quot;-apple-system-font&quot;) || equalLettersIgnoringASCIICase(family, &quot;system-ui&quot;)) {
</span><del>-        return adoptCF(CTFontCreateWithFontDescriptor(systemFontDescriptor(weight, traits &amp; kCTFontTraitBold, traits &amp; kCTFontTraitItalic, size).get(), size, nullptr));
</del><ins>+        return adoptCF(CTFontCreateWithFontDescriptor(systemFontDescriptor(request.weight, isFontWeightBold(request.weight), isItalic(request.slope), size).get(), size, nullptr));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (equalLettersIgnoringASCIICase(family, &quot;-apple-system-monospaced-numbers&quot;)) {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacFontCacheMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -52,28 +52,35 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx"> 
</span><del>-static CGFloat toNSFontWeight(FontWeight fontWeight)
</del><ins>+static CGFloat toNSFontWeight(FontSelectionValue fontWeight)
</ins><span class="cx"> {
</span><del>-    static const CGFloat nsFontWeights[] = {
-        NSFontWeightUltraLight,
-        NSFontWeightThin,
-        NSFontWeightLight,
-        NSFontWeightRegular,
-        NSFontWeightMedium,
-        NSFontWeightSemibold,
-        NSFontWeightBold,
-        NSFontWeightHeavy,
-        NSFontWeightBlack
-    };
-    ASSERT(fontWeight &gt;= 0 &amp;&amp; fontWeight &lt;= 8);
-    return nsFontWeights[fontWeight];
</del><ins>+    if (fontWeight &lt; FontSelectionValue(150))
+        return NSFontWeightUltraLight;
+    if (fontWeight &lt; FontSelectionValue(250))
+        return NSFontWeightThin;
+    if (fontWeight &lt; FontSelectionValue(350))
+        return NSFontWeightLight;
+    if (fontWeight &lt; FontSelectionValue(450))
+        return NSFontWeightRegular;
+    if (fontWeight &lt; FontSelectionValue(550))
+        return NSFontWeightMedium;
+    if (fontWeight &lt; FontSelectionValue(650))
+        return NSFontWeightSemibold;
+    if (fontWeight &lt; FontSelectionValue(750))
+        return NSFontWeightBold;
+    if (fontWeight &lt; FontSelectionValue(850))
+        return NSFontWeightHeavy;
+    return NSFontWeightBlack;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RetainPtr&lt;CTFontRef&gt; platformFontWithFamilySpecialCase(const AtomicString&amp; family, FontWeight weight, CTFontSymbolicTraits desiredTraits, float size)
</del><ins>+RetainPtr&lt;CTFontRef&gt; platformFontWithFamilySpecialCase(const AtomicString&amp; family, FontSelectionRequest request, float size)
</ins><span class="cx"> {
</span><span class="cx">     if (equalLettersIgnoringASCIICase(family, &quot;-webkit-system-font&quot;) || equalLettersIgnoringASCIICase(family, &quot;-apple-system&quot;) || equalLettersIgnoringASCIICase(family, &quot;-apple-system-font&quot;) || equalLettersIgnoringASCIICase(family, &quot;system-ui&quot;)) {
</span><del>-        RetainPtr&lt;CTFontRef&gt; result = toCTFont([NSFont systemFontOfSize:size weight:toNSFontWeight(weight)]);
-        if (desiredTraits &amp; kCTFontItalicTrait) {
</del><ins>+        RetainPtr&lt;CTFontRef&gt; result = toCTFont([NSFont systemFontOfSize:size weight:toNSFontWeight(request.weight)]);
+        if (isItalic(request.slope)) {
+            CTFontSymbolicTraits desiredTraits = kCTFontItalicTrait;
+            if (isFontWeightBold(request.weight))
+                desiredTraits |= kCTFontBoldTrait;
</ins><span class="cx">             if (auto italicizedFont = adoptCF(CTFontCreateCopyWithSymbolicTraits(result.get(), size, nullptr, desiredTraits, desiredTraits)))
</span><span class="cx">                 result = italicizedFont;
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicswinFontCacheWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -398,20 +398,25 @@
</span><span class="cx">     return *simpleFont;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static LONG toGDIFontWeight(FontWeight fontWeight)
</del><ins>+static LONG toGDIFontWeight(FontSelectionValue fontWeight)
</ins><span class="cx"> {
</span><del>-    static LONG gdiFontWeights[] = {
-        FW_THIN,        // FontWeight100
-        FW_EXTRALIGHT,  // FontWeight200
-        FW_LIGHT,       // FontWeight300
-        FW_NORMAL,      // FontWeight400
-        FW_MEDIUM,      // FontWeight500
-        FW_SEMIBOLD,    // FontWeight600
-        FW_BOLD,        // FontWeight700
-        FW_EXTRABOLD,   // FontWeight800
-        FW_HEAVY        // FontWeight900
-    };
-    return gdiFontWeights[fontWeight];
</del><ins>+    if (fontWeight &lt; FontSelectionValue(150))
+        return FW_THIN;
+    if (fontWeight &lt; FontSelectionValue(250))
+        return FW_EXTRALIGHT;
+    if (fontWeight &lt; FontSelectionValue(350))
+        return FW_LIGHT;
+    if (fontWeight &lt; FontSelectionValue(450))
+        return FW_NORMAL;
+    if (fontWeight &lt; FontSelectionValue(550))
+        return FW_MEDIUM;
+    if (fontWeight &lt; FontSelectionValue(650))
+        return FW_SEMIBOLD;
+    if (fontWeight &lt; FontSelectionValue(750))
+        return FW_BOLD;
+    if (fontWeight &lt; FontSelectionValue(850))
+        return FW_EXTRABOLD;
+    return FW_HEAVY;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline bool isGDIFontWeightBold(LONG gdiFontWeight)
</span><span class="lines">@@ -536,7 +541,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     const AtomicString&amp; m_familyName;
</span><del>-    HashSet&lt;unsigned&gt; m_traitsMasks;
</del><ins>+    Vector&lt;FontSelectionCapabilities&gt; m_capabilities;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static int CALLBACK traitsInFamilyEnumProc(CONST LOGFONT* logFont, CONST TEXTMETRIC* metrics, DWORD fontType, LPARAM lParam)
</span><span class="lines">@@ -543,23 +548,50 @@
</span><span class="cx"> {
</span><span class="cx">     TraitsInFamilyProcData* procData = reinterpret_cast&lt;TraitsInFamilyProcData*&gt;(lParam);
</span><span class="cx"> 
</span><del>-    unsigned traitsMask = 0;
-    traitsMask |= logFont-&gt;lfItalic ? FontStyleItalicMask : FontStyleNormalMask;
-    LONG weight = adjustedGDIFontWeight(logFont-&gt;lfWeight, procData-&gt;m_familyName);
-    traitsMask |= weight == FW_THIN ? FontWeight100Mask :
-        weight == FW_EXTRALIGHT ? FontWeight200Mask :
-        weight == FW_LIGHT ? FontWeight300Mask :
-        weight == FW_NORMAL ? FontWeight400Mask :
-        weight == FW_MEDIUM ? FontWeight500Mask :
-        weight == FW_SEMIBOLD ? FontWeight600Mask :
-        weight == FW_BOLD ? FontWeight700Mask :
-        weight == FW_EXTRABOLD ? FontWeight800Mask :
-                                 FontWeight900Mask;
-    procData-&gt;m_traitsMasks.add(traitsMask);
</del><ins>+    FontSelectionValue italic = logFont-&gt;lfItalic ? italicThreshold() : FontSelectionValue();
+
+    FontSelectionValue weight;
+    switch (adjustedGDIFontWeight(logFont-&gt;lfWeight, procData-&gt;m_familyName)) {
+    case FW_THIN:
+        weight = FontSelectionValue(100);
+        break;
+    case FW_EXTRALIGHT:
+        weight = FontSelectionValue(200);
+        break;
+    case FW_LIGHT:
+        weight = FontSelectionValue(300);
+        break;
+    case FW_NORMAL:
+        weight = FontSelectionValue(400);
+        break;
+    case FW_MEDIUM:
+        weight = FontSelectionValue(500);
+        break;
+    case FW_SEMIBOLD:
+        weight = FontSelectionValue(600);
+        break;
+    case FW_BOLD:
+        weight = FontSelectionValue(700);
+        break;
+    case FW_EXTRABOLD:
+        weight = FontSelectionValue(800);
+        break;
+    default:
+        weight = FontSelectionValue(900);
+        break;
+    }
+
+    FontSelectionValue stretch = normalStretchValue();
+
+    FontSelectionCapabilities result;
+    result.weight = FontSelectionRange(weight, weight);
+    result.width = FontSelectionRange(stretch, stretch);
+    result.slope = FontSelectionRange(italic, italic);
+    procData-&gt;m_capabilities.append(WTFMove(result));
</ins><span class="cx">     return 1;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-auto FontCache::getTraitsAndStretchInFamily(const AtomicString&amp; familyName) -&gt; Vector&lt;TraitsAndStretch&gt;
</del><ins>+Vector&lt;FontSelectionCapabilities&gt; FontCache::getFontSelectionCapabilitiesInFamily(const AtomicString&amp; familyName)
</ins><span class="cx"> {
</span><span class="cx">     HWndDC hdc(0);
</span><span class="cx"> 
</span><span class="lines">@@ -572,10 +604,10 @@
</span><span class="cx"> 
</span><span class="cx">     TraitsInFamilyProcData procData(familyName);
</span><span class="cx">     EnumFontFamiliesEx(hdc, &amp;logFont, traitsInFamilyEnumProc, reinterpret_cast&lt;LPARAM&gt;(&amp;procData), 0);
</span><del>-    Vector&lt;TraitsAndStretch&gt; result;
-    result.reserveInitialCapacity(procData.m_traitsMasks.size());
-    for (unsigned mask : procData.m_traitsMasks)
-        result.uncheckedAppend({ static_cast&lt;FontTraitsMask&gt;(mask), FontSelectionRange(FontSelectionValue(), FontSelectionValue()) });
</del><ins>+    Vector&lt;FontSelectionCapabilities&gt; result;
+    result.reserveInitialCapacity(procData.m_capabilities.size());
+    for (auto capabilities : procData.m_capabilities)
+        result.uncheckedAppend(capabilities);
</ins><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockMockRealtimeVideoSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx">     fontDescription.setOneFamily(&quot;Courier&quot;);
</span><span class="cx">     fontDescription.setSpecifiedSize(m_baseFontSize);
</span><span class="cx">     fontDescription.setComputedSize(m_baseFontSize);
</span><del>-    fontDescription.setWeight(FontWeight500);
</del><ins>+    fontDescription.setWeight(FontSelectionValue(500));
</ins><span class="cx"> 
</span><span class="cx">     m_timeFont = FontCascade(fontDescription, 0, 0);
</span><span class="cx">     m_timeFont.update(nullptr);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformtextTextFlagsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/text/TextFlags.h (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/text/TextFlags.h        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/text/TextFlags.h        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -340,62 +340,11 @@
</span><span class="cx"> 
</span><span class="cx"> COMPILE_ASSERT(!(LastFontWidthVariant &gt;&gt; FontWidthVariantWidth), FontWidthVariantWidth_is_correct);
</span><span class="cx"> 
</span><del>-enum FontWeight {
-    FontWeight100,
-    FontWeight200,
-    FontWeight300,
-    FontWeight400,
-    FontWeight500,
-    FontWeight600,
-    FontWeight700,
-    FontWeight800,
-    FontWeight900,
-    FontWeightNormal = FontWeight400,
-    FontWeightBold = FontWeight700
-};
-
-enum FontItalic {
-    FontItalicOff = 0,
-    FontItalicOn = 1
-};
-
</del><span class="cx"> enum FontSmallCaps {
</span><span class="cx">     FontSmallCapsOff = 0,
</span><span class="cx">     FontSmallCapsOn = 1
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-enum {
-    FontStyleNormalBit = 0,
-    FontStyleItalicBit,
-    FontWeight100Bit,
-    FontWeight200Bit,
-    FontWeight300Bit,
-    FontWeight400Bit,
-    FontWeight500Bit,
-    FontWeight600Bit,
-    FontWeight700Bit,
-    FontWeight800Bit,
-    FontWeight900Bit,
-    FontTraitsMaskWidth
-};
-
-enum FontTraitsMask {
-    FontStyleNormalMask = 1 &lt;&lt; FontStyleNormalBit,
-    FontStyleItalicMask = 1 &lt;&lt; FontStyleItalicBit,
-    FontStyleMask = FontStyleNormalMask | FontStyleItalicMask,
-
-    FontWeight100Mask = 1 &lt;&lt; FontWeight100Bit,
-    FontWeight200Mask = 1 &lt;&lt; FontWeight200Bit,
-    FontWeight300Mask = 1 &lt;&lt; FontWeight300Bit,
-    FontWeight400Mask = 1 &lt;&lt; FontWeight400Bit,
-    FontWeight500Mask = 1 &lt;&lt; FontWeight500Bit,
-    FontWeight600Mask = 1 &lt;&lt; FontWeight600Bit,
-    FontWeight700Mask = 1 &lt;&lt; FontWeight700Bit,
-    FontWeight800Mask = 1 &lt;&lt; FontWeight800Bit,
-    FontWeight900Mask = 1 &lt;&lt; FontWeight900Bit,
-    FontWeightMask = FontWeight100Mask | FontWeight200Mask | FontWeight300Mask | FontWeight400Mask | FontWeight500Mask | FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask
-};
-
</del><span class="cx"> enum class Kerning {
</span><span class="cx">     Auto,
</span><span class="cx">     Normal,
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformwinDragImageWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/win/DragImageWin.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/win/DragImageWin.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/platform/win/DragImageWin.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -111,7 +111,7 @@
</span><span class="cx">     SystemParametersInfo(SPI_GETNONCLIENTMETRICS, metrics.cbSize, &amp;metrics, 0);
</span><span class="cx"> 
</span><span class="cx">     FontCascadeDescription description;
</span><del>-    description.setWeight(bold ? FontWeightBold : FontWeightNormal);
</del><ins>+    description.setWeight(bold ? boldWeightValue() : normalWeightValue());
</ins><span class="cx">     description.setOneFamily(metrics.lfSmCaptionFont.lfFaceName);
</span><span class="cx">     description.setSpecifiedSize((float)size);
</span><span class="cx">     description.setComputedSize((float)size);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderEmbeddedObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -352,7 +352,7 @@
</span><span class="cx"> 
</span><span class="cx">     FontCascadeDescription fontDescription;
</span><span class="cx">     RenderTheme::defaultTheme()-&gt;systemFont(CSSValueWebkitSmallControl, fontDescription);
</span><del>-    fontDescription.setWeight(FontWeightBold);
</del><ins>+    fontDescription.setWeight(boldWeightValue());
</ins><span class="cx">     fontDescription.setRenderingMode(settings().fontRenderingMode());
</span><span class="cx">     fontDescription.setComputedSize(12);
</span><span class="cx">     font = FontCascade(fontDescription, 0, 0);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeGtk.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeGtk.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/rendering/RenderThemeGtk.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -110,8 +110,8 @@
</span><span class="cx"> 
</span><span class="cx">     fontDescription.setSpecifiedSize(size);
</span><span class="cx">     fontDescription.setIsAbsoluteSize(true);
</span><del>-    fontDescription.setWeight(FontWeightNormal);
-    fontDescription.setItalic(FontItalicOff);
</del><ins>+    fontDescription.setWeight(normalWeightValue());
+    fontDescription.setItalic(FontSelectionValue());
</ins><span class="cx">     pango_font_description_free(pangoDescription);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeIOS.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeIOS.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/rendering/RenderThemeIOS.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1273,12 +1273,12 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(fontDescriptor);
</span><span class="cx">     RetainPtr&lt;CTFontRef&gt; font = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), 0, nullptr));
</span><del>-    font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), nullptr, nullptr, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings());
</del><span class="cx">     fontDescription.setIsAbsoluteSize(true);
</span><span class="cx">     fontDescription.setOneFamily(textStyle);
</span><span class="cx">     fontDescription.setSpecifiedSize(CTFontGetSize(font.get()));
</span><del>-    fontDescription.setWeight(fontWeightFromCoreText(FontCache::weightOfCTFont(font.get())));
-    fontDescription.setItalic(FontItalicOff);
</del><ins>+    auto capabilities = capabilitiesForFontDescriptor(adoptCF(CTFontCopyFontDescriptor(font.get())).get());
+    fontDescription.setWeight(capabilities.weight.minimum);
+    fontDescription.setItalic(normalItalicValue());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(VIDEO)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeMac.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeMac.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/rendering/RenderThemeMac.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -357,7 +357,7 @@
</span><span class="cx">     return platformInactiveSelectionBackgroundColor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static FontWeight toFontWeight(NSInteger appKitFontWeight)
</del><ins>+static FontSelectionValue toFontWeight(NSInteger appKitFontWeight)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(appKitFontWeight &gt; 0 &amp;&amp; appKitFontWeight &lt; 15);
</span><span class="cx">     if (appKitFontWeight &gt; 14)
</span><span class="lines">@@ -365,21 +365,21 @@
</span><span class="cx">     else if (appKitFontWeight &lt; 1)
</span><span class="cx">         appKitFontWeight = 1;
</span><span class="cx"> 
</span><del>-    static const FontWeight fontWeights[] = {
-        FontWeight100,
-        FontWeight100,
-        FontWeight200,
-        FontWeight300,
-        FontWeight400,
-        FontWeight500,
-        FontWeight600,
-        FontWeight600,
-        FontWeight700,
-        FontWeight800,
-        FontWeight800,
-        FontWeight900,
-        FontWeight900,
-        FontWeight900
</del><ins>+    static const FontSelectionValue fontWeights[] = {
+        FontSelectionValue(100),
+        FontSelectionValue(100),
+        FontSelectionValue(200),
+        FontSelectionValue(300),
+        FontSelectionValue(400),
+        FontSelectionValue(500),
+        FontSelectionValue(600),
+        FontSelectionValue(600),
+        FontSelectionValue(700),
+        FontSelectionValue(800),
+        FontSelectionValue(800),
+        FontSelectionValue(900),
+        FontSelectionValue(900),
+        FontSelectionValue(900)
</ins><span class="cx">     };
</span><span class="cx">     return fontWeights[appKitFontWeight - 1];
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeWin.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeWin.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebCore/rendering/RenderThemeWin.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -324,7 +324,7 @@
</span><span class="cx">     fontDescription.setIsAbsoluteSize(true);
</span><span class="cx">     fontDescription.setOneFamily(String(logFont.lfFaceName));
</span><span class="cx">     fontDescription.setSpecifiedSize(fontSize);
</span><del>-    fontDescription.setWeight(logFont.lfWeight &gt;= 700 ? FontWeightBold : FontWeightNormal); // FIXME: Use real weight.
</del><ins>+    fontDescription.setWeight(logFont.lfWeight &gt;= 700 ? boldWeightValue() : normalWeightValue()); // FIXME: Use real weight.
</ins><span class="cx">     fontDescription.setIsItalic(logFont.lfItalic);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit/mac/ChangeLog        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2017-03-06  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Expand font-weight and font-stretch to take any number
+        https://bugs.webkit.org/show_bug.cgi?id=168889
+
+        Reviewed by Simon Fraser.
+
+        Migrate off old enum types.
+
+        * WebCoreSupport/PopupMenuMac.mm:
+        (PopupMenuMac::populate):
+        * WebView/WebHTMLView.mm:
+        (fontNameForDescription):
+        * WebView/WebView.mm:
+        (-[WebView updateTextTouchBar]):
+
</ins><span class="cx"> 2017-03-03  Dean Jackson  &lt;dino@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add WebGPU compile flag and experimental feature flag
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportPopupMenuMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">             RetainPtr&lt;CTFontRef&gt; font = style.font().primaryFont().getCTFont();
</span><span class="cx">             if (!font) {
</span><span class="cx">                 CGFloat size = style.font().primaryFont().platformData().size();
</span><del>-                font = adoptCF(CTFontCreateUIFontForLanguage(style.font().weight() &lt; FontWeightBold ? kCTFontUIFontSystem : kCTFontUIFontEmphasizedSystem, size, nullptr));
</del><ins>+                font = adoptCF(CTFontCreateUIFontForLanguage(isFontWeightBold(style.font().weight()) ? kCTFontUIFontEmphasizedSystem : kCTFontUIFontSystem, size, nullptr));
</ins><span class="cx">             }
</span><span class="cx">             [attributes setObject:toNSFont(font.get()) forKey:NSFontAttributeName];
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebHTMLViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebHTMLView.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebHTMLView.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit/mac/WebView/WebHTMLView.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -5629,7 +5629,7 @@
</span><span class="cx">     // Find the font the same way the rendering code would later if it encountered this CSS.
</span><span class="cx">     FontDescription fontDescription;
</span><span class="cx">     fontDescription.setIsItalic(italic);
</span><del>-    fontDescription.setWeight(bold ? FontWeight900 : FontWeight500);
</del><ins>+    fontDescription.setWeight(bold ? FontSelectionValue(900) : FontSelectionValue(500));
</ins><span class="cx">     RefPtr&lt;Font&gt; font = FontCache::singleton().fontForFamily(fontDescription, familyName);
</span><span class="cx">     return adoptCF(CTFontCopyPostScriptName(font-&gt;getCTFont()));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -9618,8 +9618,8 @@
</span><span class="cx">         if (!selection.isNone()) {
</span><span class="cx">             Node* nodeToRemove;
</span><span class="cx">             if (auto* style = Editor::styleForSelectionStart(coreFrame, nodeToRemove)) {
</span><del>-                [_private-&gt;_textTouchBarItemController setTextIsBold:(style-&gt;fontCascade().weight() &gt;= FontWeightBold)];
-                [_private-&gt;_textTouchBarItemController setTextIsItalic:(style-&gt;fontCascade().italic() == FontItalicOn)];
</del><ins>+                [_private-&gt;_textTouchBarItemController setTextIsBold:isFontWeightBold(style-&gt;fontCascade().weight())];
+                [_private-&gt;_textTouchBarItemController setTextIsItalic:isItalic(style-&gt;fontCascade().italic())];
</ins><span class="cx"> 
</span><span class="cx">                 RefPtr&lt;EditingStyle&gt; typingStyle = coreFrame-&gt;selection().typingStyle();
</span><span class="cx">                 if (typingStyle &amp;&amp; typingStyle-&gt;style()) {
</span></span></pre></div>
<a id="trunkSourceWebKitwinChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/ChangeLog (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/ChangeLog        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit/win/ChangeLog        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2017-03-06  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Expand font-weight and font-stretch to take any number
+        https://bugs.webkit.org/show_bug.cgi?id=168889
+
+        Reviewed by Simon Fraser.
+
+        Migrate off old enum types.
+
+        * WebKitGraphics.cpp:
+        (makeFont):
+
</ins><span class="cx"> 2017-03-02  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Rename htmlediting.h/cpp to Editing.h/cpp
</span></span></pre></div>
<a id="trunkSourceWebKitwinDOMCoreClassescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/DOMCoreClasses.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/DOMCoreClasses.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit/win/DOMCoreClasses.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1294,7 +1294,7 @@
</span><span class="cx">     webFontDescription-&gt;family = familyCharactersBuffer;
</span><span class="cx">     webFontDescription-&gt;familyLength = family.length();
</span><span class="cx">     webFontDescription-&gt;size = fontDescription.computedSize();
</span><del>-    webFontDescription-&gt;bold = fontDescription.weight() &gt;= WebCore::FontWeight600;
</del><ins>+    webFontDescription-&gt;bold = isFontWeightBold(fontDescription.weight());
</ins><span class="cx">     webFontDescription-&gt;italic = fontDescription.italic();
</span><span class="cx"> 
</span><span class="cx">     return S_OK;
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebKitGraphicscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebKitGraphics.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebKitGraphics.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit/win/WebKitGraphics.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">     f.setSpecifiedSize(description.size);
</span><span class="cx">     f.setComputedSize(description.size);
</span><span class="cx">     f.setIsItalic(description.italic);
</span><del>-    f.setWeight(description.bold ? FontWeightBold : FontWeightNormal);
</del><ins>+    f.setWeight(description.bold ? boldWeightValue() : normalWeightValue());
</ins><span class="cx">     f.setIsAbsoluteSize(true);
</span><span class="cx"> 
</span><span class="cx">     FontSmoothingType smoothingType;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit2/ChangeLog        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2017-03-06  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Expand font-weight and font-stretch to take any number
+        https://bugs.webkit.org/show_bug.cgi?id=168889
+
+        Reviewed by Simon Fraser.
+
+        Migrate off old enum types.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::editorState):
+
</ins><span class="cx"> 2017-03-06  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] Report domains crashing under memory pressure via enhanced privacy logging.
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -831,9 +831,9 @@
</span><span class="cx">         if (!selection.isNone()) {
</span><span class="cx">             Node* nodeToRemove;
</span><span class="cx">             if (auto* style = Editor::styleForSelectionStart(&amp;frame, nodeToRemove)) {
</span><del>-                if (style-&gt;fontCascade().weight() &gt;= FontWeightBold)
</del><ins>+                if (isFontWeightBold(style-&gt;fontCascade().weight()))
</ins><span class="cx">                     postLayoutData.typingAttributes |= AttributeBold;
</span><del>-                if (style-&gt;fontCascade().italic() == FontItalicOn)
</del><ins>+                if (isItalic(style-&gt;fontCascade().italic()))
</ins><span class="cx">                     postLayoutData.typingAttributes |= AttributeItalics;
</span><span class="cx"> 
</span><span class="cx">                 RefPtr&lt;EditingStyle&gt; typingStyle = frame.selection().typingStyle();
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Tools/ChangeLog        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2017-03-06  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Expand font-weight and font-stretch to take any number
+        https://bugs.webkit.org/show_bug.cgi?id=168889
+
+        Reviewed by Simon Fraser.
+
+        Migrate off old enum types.
+
+        * TestWebKitAPI/Tests/WebCore/FontCache.cpp:
+        (TestWebKitAPI::createPlatformFont):
+        (TestWebKitAPI::compareFonts):
+        (TestWebKitAPI::TEST_F):
+
</ins><span class="cx"> 2017-03-06  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK][JSCOnly] Enable WebAssembly on Linux environment
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebCoreFontCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/FontCache.cpp (213463 => 213464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebCore/FontCache.cpp        2017-03-06 21:14:31 UTC (rev 213463)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/FontCache.cpp        2017-03-06 21:40:31 UTC (rev 213464)
</span><span class="lines">@@ -49,13 +49,13 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static std::unique_ptr&lt;FontPlatformData&gt; createPlatformFont(const char* familyName, FontWeight weight, FontItalic italic, float stretch, float size)
</del><ins>+static std::unique_ptr&lt;FontPlatformData&gt; createPlatformFont(const char* familyName, float weight, float italic, float stretch, float size)
</ins><span class="cx"> {
</span><span class="cx">     AtomicString familyNameString(familyName);
</span><span class="cx">     FontCascadeDescription description;
</span><span class="cx">     description.setOneFamily(familyNameString);
</span><del>-    description.setWeight(weight);
-    description.setItalic(italic);
</del><ins>+    description.setWeight(FontSelectionValue(weight));
+    description.setItalic(FontSelectionValue(italic));
</ins><span class="cx">     description.setStretch(FontSelectionValue(stretch));
</span><span class="cx">     description.setComputedSize(size);
</span><span class="cx"> 
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx">     return fontCache.createFontPlatformDataForTesting(description, familyNameString);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool compareFonts(const char* familyName, FontWeight weight, FontItalic italic, float stretch, CFStringRef expectedPostScriptName)
</del><ins>+static bool compareFonts(const char* familyName, float weight, float italic, float stretch, CFStringRef expectedPostScriptName)
</ins><span class="cx"> {
</span><span class="cx">     float size = 80;
</span><span class="cx">     auto platformFont = createPlatformFont(familyName, weight, italic, stretch, size);
</span><span class="lines">@@ -73,1346 +73,1346 @@
</span><span class="cx"> 
</span><span class="cx"> TEST_F(FontCacheTest, FontLookupFromFamilyName)
</span><span class="cx"> {
</span><del>-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;ArialMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;ArialMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;ArialMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;ArialMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;ArialMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Arial-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Arial-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Arial-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Arial-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Book&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Didot&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Didot&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Didot&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Didot&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Didot&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Didot-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Didot-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Didot-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Didot-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Didot-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Futura-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Futura-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Futura-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Futura-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Futura-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Futura-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Futura-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Futura-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Futura-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-ThinItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-LightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Helvetica-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Helvetica-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Helvetica-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Helvetica-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Helvetica-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Helvetica-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Helvetica&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Helvetica-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Helvetica&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Helvetica-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Helvetica-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Helvetica-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Helvetica-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Helvetica-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W0&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W0&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W1&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W1&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W3&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W4&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W5&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W5&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W6&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W7&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W7&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W8&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;HiraginoSans-W9&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;HiraginoSans-W9&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;HoeflerText-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;LucidaGrande&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Optima-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Optima-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Optima-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Optima-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Optima-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Optima-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Optima-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Optima-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Optima-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Optima-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Optima-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Optima-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Optima-ExtraBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Optima-ExtraBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Ultralight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Ultralight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Ultralight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Ultralight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Ultralight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Ultralight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Times-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Times-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Times-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Times-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Times-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Times-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Times-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Times-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Times-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Times-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Times-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Times-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Times-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Times-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Times-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Times-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Times-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Times&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Times-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight700, FontItalicOff, 87.5, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight800, FontItalicOff, 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight900, FontItalicOff, 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight700, FontItalicOff, 75, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight800, FontItalicOff, 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight900, FontItalicOff, 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight700, FontItalicOn , 87.5, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight800, FontItalicOn , 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight900, FontItalicOn , 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight700, FontItalicOn , 75, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight800, FontItalicOn , 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, FontWeight900, FontItalicOn , 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight500, FontItalicOff, 87.5, CFSTR(&quot;Futura-CondensedMedium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight500, FontItalicOn , 87.5, CFSTR(&quot;Futura-CondensedMedium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight600, FontItalicOff, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight600, FontItalicOn , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight700, FontItalicOff, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight700, FontItalicOn , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight800, FontItalicOff, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight800, FontItalicOn , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight900, FontItalicOff, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, FontWeight900, FontItalicOn , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
</del><ins>+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Apple SD Gothic Neo&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 100, 0 , 100, CFSTR(&quot;ArialMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 100, 20, 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 200, 0 , 100, CFSTR(&quot;ArialMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 200, 20, 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 300, 0 , 100, CFSTR(&quot;ArialMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 300, 20, 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 400, 0 , 100, CFSTR(&quot;ArialMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 400, 20, 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 500, 0 , 100, CFSTR(&quot;ArialMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 500, 20, 100, CFSTR(&quot;Arial-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 600, 0 , 100, CFSTR(&quot;Arial-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 600, 20, 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 700, 0 , 100, CFSTR(&quot;Arial-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 700, 20, 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 800, 0 , 100, CFSTR(&quot;Arial-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 800, 20, 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 900, 0 , 100, CFSTR(&quot;Arial-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Arial&quot;, 900, 20, 100, CFSTR(&quot;Arial-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir Next&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Book&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 100, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 100, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 200, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 200, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 300, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 300, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 400, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 400, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 500, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 500, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 600, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 600, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 700, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 700, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 800, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 800, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 900, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 900, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 100, 0 , 100, CFSTR(&quot;Didot&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 100, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 200, 0 , 100, CFSTR(&quot;Didot&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 200, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 300, 0 , 100, CFSTR(&quot;Didot&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 300, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 400, 0 , 100, CFSTR(&quot;Didot&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 400, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 500, 0 , 100, CFSTR(&quot;Didot&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 500, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 600, 0 , 100, CFSTR(&quot;Didot-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 600, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 700, 0 , 100, CFSTR(&quot;Didot-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 700, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 800, 0 , 100, CFSTR(&quot;Didot-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 800, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 900, 0 , 100, CFSTR(&quot;Didot-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Didot&quot;, 900, 20, 100, CFSTR(&quot;Didot-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 100, 0 , 100, CFSTR(&quot;Futura-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 100, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 200, 0 , 100, CFSTR(&quot;Futura-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 200, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 300, 0 , 100, CFSTR(&quot;Futura-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 300, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 400, 0 , 100, CFSTR(&quot;Futura-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 400, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 500, 0 , 100, CFSTR(&quot;Futura-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 500, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 600, 0 , 100, CFSTR(&quot;Futura-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 600, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 700, 0 , 100, CFSTR(&quot;Futura-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 700, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 800, 0 , 100, CFSTR(&quot;Futura-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 800, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 900, 0 , 100, CFSTR(&quot;Futura-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 900, 20, 100, CFSTR(&quot;Futura-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 100, 0 , 100, CFSTR(&quot;HelveticaNeue-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 100, 20, 100, CFSTR(&quot;HelveticaNeue-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 200, 0 , 100, CFSTR(&quot;HelveticaNeue-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 200, 20, 100, CFSTR(&quot;HelveticaNeue-ThinItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 300, 0 , 100, CFSTR(&quot;HelveticaNeue-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 300, 20, 100, CFSTR(&quot;HelveticaNeue-LightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 400, 0 , 100, CFSTR(&quot;HelveticaNeue&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 400, 20, 100, CFSTR(&quot;HelveticaNeue-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 500, 0 , 100, CFSTR(&quot;HelveticaNeue-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 500, 20, 100, CFSTR(&quot;HelveticaNeue-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 600, 0 , 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 600, 20, 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 700, 0 , 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 700, 20, 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 800, 0 , 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 800, 20, 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 900, 0 , 100, CFSTR(&quot;HelveticaNeue-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 900, 20, 100, CFSTR(&quot;HelveticaNeue-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 100, 0 , 100, CFSTR(&quot;Helvetica-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 100, 20, 100, CFSTR(&quot;Helvetica-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 200, 0 , 100, CFSTR(&quot;Helvetica-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 200, 20, 100, CFSTR(&quot;Helvetica-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 300, 0 , 100, CFSTR(&quot;Helvetica-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 300, 20, 100, CFSTR(&quot;Helvetica-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 400, 0 , 100, CFSTR(&quot;Helvetica&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 400, 20, 100, CFSTR(&quot;Helvetica-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 500, 0 , 100, CFSTR(&quot;Helvetica&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 500, 20, 100, CFSTR(&quot;Helvetica-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 600, 0 , 100, CFSTR(&quot;Helvetica-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 600, 20, 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 700, 0 , 100, CFSTR(&quot;Helvetica-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 700, 20, 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 800, 0 , 100, CFSTR(&quot;Helvetica-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 800, 20, 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 900, 0 , 100, CFSTR(&quot;Helvetica-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica&quot;, 900, 20, 100, CFSTR(&quot;Helvetica-BoldOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 100, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 100, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 200, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 200, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 300, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 300, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 400, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 400, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 500, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 500, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 600, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 600, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 700, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 700, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 800, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 800, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 900, 0 , 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Kaku Gothic StdN&quot;, 900, 20, 100, CFSTR(&quot;HiraKakuStdN-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 100, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 100, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 200, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 200, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 300, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 300, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 400, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 400, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 500, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 500, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 600, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 600, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 700, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 700, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 800, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 800, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 900, 0 , 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Maru Gothic ProN&quot;, 900, 20, 100, CFSTR(&quot;HiraMaruProN-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 100, 0 , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 100, 20, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 200, 0 , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 200, 20, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 300, 0 , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 300, 20, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 400, 0 , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 400, 20, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 500, 0 , 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 500, 20, 100, CFSTR(&quot;HiraMinProN-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 600, 0 , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 600, 20, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 700, 0 , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 700, 20, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 800, 0 , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 800, 20, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 900, 0 , 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Mincho ProN&quot;, 900, 20, 100, CFSTR(&quot;HiraMinProN-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 100, 0 , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 100, 20, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 200, 0 , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 200, 20, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 300, 0 , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 300, 20, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 400, 0 , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 400, 20, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 500, 0 , 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 500, 20, 100, CFSTR(&quot;HiraginoSansGB-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 600, 0 , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 600, 20, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 700, 0 , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 700, 20, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 800, 0 , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 800, 20, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 900, 0 , 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans GB&quot;, 900, 20, 100, CFSTR(&quot;HiraginoSansGB-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 100, 0 , 100, CFSTR(&quot;HiraginoSans-W0&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 100, 20, 100, CFSTR(&quot;HiraginoSans-W0&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 200, 0 , 100, CFSTR(&quot;HiraginoSans-W1&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 200, 20, 100, CFSTR(&quot;HiraginoSans-W1&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 300, 0 , 100, CFSTR(&quot;HiraginoSans-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 300, 20, 100, CFSTR(&quot;HiraginoSans-W3&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 400, 0 , 100, CFSTR(&quot;HiraginoSans-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 400, 20, 100, CFSTR(&quot;HiraginoSans-W4&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 500, 0 , 100, CFSTR(&quot;HiraginoSans-W5&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 500, 20, 100, CFSTR(&quot;HiraginoSans-W5&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 600, 0 , 100, CFSTR(&quot;HiraginoSans-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 600, 20, 100, CFSTR(&quot;HiraginoSans-W6&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 700, 0 , 100, CFSTR(&quot;HiraginoSans-W7&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 700, 20, 100, CFSTR(&quot;HiraginoSans-W7&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 800, 0 , 100, CFSTR(&quot;HiraginoSans-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 800, 20, 100, CFSTR(&quot;HiraginoSans-W8&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 900, 0 , 100, CFSTR(&quot;HiraginoSans-W9&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hiragino Sans&quot;, 900, 20, 100, CFSTR(&quot;HiraginoSans-W9&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 100, 0 , 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 100, 20, 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 200, 0 , 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 200, 20, 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 300, 0 , 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 300, 20, 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 400, 0 , 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 400, 20, 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 500, 0 , 100, CFSTR(&quot;HoeflerText-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 500, 20, 100, CFSTR(&quot;HoeflerText-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 600, 0 , 100, CFSTR(&quot;HoeflerText-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 600, 20, 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 700, 0 , 100, CFSTR(&quot;HoeflerText-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 700, 20, 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 800, 0 , 100, CFSTR(&quot;HoeflerText-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 800, 20, 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 900, 0 , 100, CFSTR(&quot;HoeflerText-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Hoefler Text&quot;, 900, 20, 100, CFSTR(&quot;HoeflerText-BlackItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 100, 0 , 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 100, 20, 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 200, 0 , 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 200, 20, 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 300, 0 , 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 300, 20, 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 400, 0 , 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 400, 20, 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 500, 0 , 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 500, 20, 100, CFSTR(&quot;LucidaGrande&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 600, 0 , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 600, 20, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 700, 0 , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 700, 20, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 800, 0 , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 800, 20, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 900, 0 , 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Lucida Grande&quot;, 900, 20, 100, CFSTR(&quot;LucidaGrande-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 100, 0 , 100, CFSTR(&quot;Optima-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 100, 20, 100, CFSTR(&quot;Optima-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 200, 0 , 100, CFSTR(&quot;Optima-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 200, 20, 100, CFSTR(&quot;Optima-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 300, 0 , 100, CFSTR(&quot;Optima-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 300, 20, 100, CFSTR(&quot;Optima-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 400, 0 , 100, CFSTR(&quot;Optima-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 400, 20, 100, CFSTR(&quot;Optima-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 500, 0 , 100, CFSTR(&quot;Optima-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 500, 20, 100, CFSTR(&quot;Optima-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 600, 0 , 100, CFSTR(&quot;Optima-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 600, 20, 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 700, 0 , 100, CFSTR(&quot;Optima-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 700, 20, 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 800, 0 , 100, CFSTR(&quot;Optima-ExtraBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 800, 20, 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 900, 0 , 100, CFSTR(&quot;Optima-ExtraBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Optima&quot;, 900, 20, 100, CFSTR(&quot;Optima-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 100, 0 , 100, CFSTR(&quot;PingFangHK-Ultralight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 100, 20, 100, CFSTR(&quot;PingFangHK-Ultralight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 200, 0 , 100, CFSTR(&quot;PingFangHK-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 200, 20, 100, CFSTR(&quot;PingFangHK-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 300, 0 , 100, CFSTR(&quot;PingFangHK-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 300, 20, 100, CFSTR(&quot;PingFangHK-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 400, 0 , 100, CFSTR(&quot;PingFangHK-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 400, 20, 100, CFSTR(&quot;PingFangHK-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 500, 0 , 100, CFSTR(&quot;PingFangHK-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 500, 20, 100, CFSTR(&quot;PingFangHK-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 600, 0 , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 600, 20, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 700, 0 , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 700, 20, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 800, 0 , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 800, 20, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 900, 0 , 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang HK&quot;, 900, 20, 100, CFSTR(&quot;PingFangHK-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 100, 0 , 100, CFSTR(&quot;PingFangSC-Ultralight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 100, 20, 100, CFSTR(&quot;PingFangSC-Ultralight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 200, 0 , 100, CFSTR(&quot;PingFangSC-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 200, 20, 100, CFSTR(&quot;PingFangSC-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 300, 0 , 100, CFSTR(&quot;PingFangSC-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 300, 20, 100, CFSTR(&quot;PingFangSC-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 400, 0 , 100, CFSTR(&quot;PingFangSC-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 400, 20, 100, CFSTR(&quot;PingFangSC-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 500, 0 , 100, CFSTR(&quot;PingFangSC-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 500, 20, 100, CFSTR(&quot;PingFangSC-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 600, 0 , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 600, 20, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 700, 0 , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 700, 20, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 800, 0 , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 800, 20, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 900, 0 , 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang SC&quot;, 900, 20, 100, CFSTR(&quot;PingFangSC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 100, 0 , 100, CFSTR(&quot;PingFangTC-Ultralight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 100, 20, 100, CFSTR(&quot;PingFangTC-Ultralight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 200, 0 , 100, CFSTR(&quot;PingFangTC-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 200, 20, 100, CFSTR(&quot;PingFangTC-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 300, 0 , 100, CFSTR(&quot;PingFangTC-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 300, 20, 100, CFSTR(&quot;PingFangTC-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 400, 0 , 100, CFSTR(&quot;PingFangTC-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 400, 20, 100, CFSTR(&quot;PingFangTC-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 500, 0 , 100, CFSTR(&quot;PingFangTC-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 500, 20, 100, CFSTR(&quot;PingFangTC-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 600, 0 , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 600, 20, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 700, 0 , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 700, 20, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 800, 0 , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 800, 20, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 900, 0 , 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;PingFang TC&quot;, 900, 20, 100, CFSTR(&quot;PingFangTC-Semibold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 100, 0 , 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 100, 20, 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 200, 0 , 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 200, 20, 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 300, 0 , 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 300, 20, 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 400, 0 , 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 400, 20, 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 500, 0 , 100, CFSTR(&quot;TimesNewRomanPSMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 500, 20, 100, CFSTR(&quot;TimesNewRomanPS-ItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 600, 0 , 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 600, 20, 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 700, 0 , 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 700, 20, 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 800, 0 , 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 800, 20, 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 900, 0 , 100, CFSTR(&quot;TimesNewRomanPS-BoldMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times New Roman&quot;, 900, 20, 100, CFSTR(&quot;TimesNewRomanPS-BoldItalicMT&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 100, 0 , 100, CFSTR(&quot;Times-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 100, 20, 100, CFSTR(&quot;Times-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 200, 0 , 100, CFSTR(&quot;Times-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 200, 20, 100, CFSTR(&quot;Times-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 300, 0 , 100, CFSTR(&quot;Times-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 300, 20, 100, CFSTR(&quot;Times-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 400, 0 , 100, CFSTR(&quot;Times-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 400, 20, 100, CFSTR(&quot;Times-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 500, 0 , 100, CFSTR(&quot;Times-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 500, 20, 100, CFSTR(&quot;Times-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 600, 0 , 100, CFSTR(&quot;Times-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 600, 20, 100, CFSTR(&quot;Times-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 700, 0 , 100, CFSTR(&quot;Times-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 700, 20, 100, CFSTR(&quot;Times-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 800, 0 , 100, CFSTR(&quot;Times-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 800, 20, 100, CFSTR(&quot;Times-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 900, 0 , 100, CFSTR(&quot;Times-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Times&quot;, 900, 20, 100, CFSTR(&quot;Times-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 700, 0 , 87.5, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 800, 0 , 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 900, 0 , 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 700, 0 , 75, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 800, 0 , 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 900, 0 , 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 700, 20, 87.5, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 800, 20, 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 900, 20, 87.5, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 700, 20, 75, CFSTR(&quot;HelveticaNeue-CondensedBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 800, 20, 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Helvetica Neue&quot;, 900, 20, 75, CFSTR(&quot;HelveticaNeue-CondensedBlack&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 500, 0 , 87.5, CFSTR(&quot;Futura-CondensedMedium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 500, 20, 87.5, CFSTR(&quot;Futura-CondensedMedium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 600, 0 , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 600, 20, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 700, 0 , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 700, 20, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 800, 0 , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 800, 20, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 900, 0 , 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Futura&quot;, 900, 20, 87.5, CFSTR(&quot;Futura-CondensedExtraBold&quot;)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> TEST_F(FontCacheTest, FontLookupFromPostScriptName)
</span><span class="cx"> {
</span><del>-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Book&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Book&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Book&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Book&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Book&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Light&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Avenir-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Avenir-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Avenir-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Avenir-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Avenir-Roman&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Avenir-Black&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Avenir-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Baskerville&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Baskerville-Bold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight100, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight100, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight200, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight200, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight300, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight300, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight400, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight400, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight500, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight500, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight600, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight600, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight700, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight700, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight800, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight800, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight900, FontItalicOff, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
-    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, FontWeight900, FontItalicOn , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
</del><ins>+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Bold&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-ExtraBold&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Heavy&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Light&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Medium&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Regular&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-SemiBold&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-Thin&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 100, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 100, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Thin&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 200, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 200, 20, 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 300, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 300, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 400, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 400, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 500, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 500, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 600, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 600, 20, 100, CFSTR(&quot;AppleSDGothicNeo-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 700, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 700, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 800, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 800, 20, 100, CFSTR(&quot;AppleSDGothicNeo-ExtraBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 900, 0 , 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AppleSDGothicNeo-UltraLight&quot;, 900, 20, 100, CFSTR(&quot;AppleSDGothicNeo-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Black&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 100, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 200, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 300, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 500, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BlackOblique&quot;, 900, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Book&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Book&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Book&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Book&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Book&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Book&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 100, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 200, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 300, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 500, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-BookOblique&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Heavy&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 100, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 200, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 300, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 400, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 500, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 600, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 700, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 800, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-HeavyOblique&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Light&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Light&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 400, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 500, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-LightOblique&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Medium&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 100, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 200, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 300, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 400, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-MediumOblique&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 100, 20, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 200, 20, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 300, 20, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 400, 20, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 500, 20, 100, CFSTR(&quot;Avenir-Oblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Oblique&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 100, 0 , 100, CFSTR(&quot;Avenir-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 100, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 200, 0 , 100, CFSTR(&quot;Avenir-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 200, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 300, 0 , 100, CFSTR(&quot;Avenir-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 300, 20, 100, CFSTR(&quot;Avenir-LightOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 400, 0 , 100, CFSTR(&quot;Avenir-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 400, 20, 100, CFSTR(&quot;Avenir-BookOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 500, 0 , 100, CFSTR(&quot;Avenir-Roman&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 500, 20, 100, CFSTR(&quot;Avenir-MediumOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 600, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 600, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 700, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 700, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 800, 0 , 100, CFSTR(&quot;Avenir-Black&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 800, 20, 100, CFSTR(&quot;Avenir-BlackOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 900, 0 , 100, CFSTR(&quot;Avenir-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Avenir-Roman&quot;, 900, 20, 100, CFSTR(&quot;Avenir-HeavyOblique&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Bold&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-BoldItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBold&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-DemiBoldItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Heavy&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-HeavyItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Italic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Medium&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-MediumItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-Regular&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLight&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNext-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNext-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNext-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNext-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNext-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNext-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNext-UltraLightItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNext-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Bold&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-BoldItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBold&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-DemiBoldItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Heavy&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-HeavyItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Italic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Medium&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Medium&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-MediumItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Regular&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-Regular&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLight&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-MediumItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLight&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 100, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 100, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 200, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 200, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 300, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 300, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 400, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 400, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 500, 0 , 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 500, 20, 100, CFSTR(&quot;AvenirNextCondensed-UltraLightItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 600, 0 , 100, CFSTR(&quot;AvenirNextCondensed-DemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 600, 20, 100, CFSTR(&quot;AvenirNextCondensed-DemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 700, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 700, 20, 100, CFSTR(&quot;AvenirNextCondensed-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 800, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 800, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 900, 0 , 100, CFSTR(&quot;AvenirNextCondensed-Heavy&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;AvenirNextCondensed-UltraLightItalic&quot;, 900, 20, 100, CFSTR(&quot;AvenirNextCondensed-HeavyItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 100, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 100, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 200, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 200, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 300, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 300, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 400, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 400, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 500, 0 , 100, CFSTR(&quot;Baskerville&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 500, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 600, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 600, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 700, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 700, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 800, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 800, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 900, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville&quot;, 900, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 100, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 100, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 200, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 200, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 300, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 300, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 400, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 400, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 500, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 500, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 600, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 600, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 700, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 700, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 800, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 800, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 900, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Bold&quot;, 900, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 100, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 100, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 200, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 200, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 300, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 300, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 400, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 400, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 500, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 500, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 600, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 600, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 700, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 700, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 800, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 800, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 900, 0 , 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-BoldItalic&quot;, 900, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 100, 0 , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 100, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 200, 0 , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 200, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 300, 0 , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 300, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 400, 0 , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 400, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 500, 0 , 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 500, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 600, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 600, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 700, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 700, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 800, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 800, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 900, 0 , 100, CFSTR(&quot;Baskerville-Bold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-Italic&quot;, 900, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 100, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 100, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 200, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 200, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 300, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 300, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 400, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 400, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 500, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 500, 20, 100, CFSTR(&quot;Baskerville-Italic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 600, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 600, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 700, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 700, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 800, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 800, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 900, 0 , 100, CFSTR(&quot;Baskerville-SemiBold&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBold&quot;, 900, 20, 100, CFSTR(&quot;Baskerville-BoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 100, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 100, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 200, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 200, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 300, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 300, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 400, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 400, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 500, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 500, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 600, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 600, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 700, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 700, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 800, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 800, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 900, 0 , 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
+    EXPECT_TRUE(compareFonts(&quot;Baskerville-SemiBoldItalic&quot;, 900, 20, 100, CFSTR(&quot;Baskerville-SemiBoldItalic&quot;)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre>
</div>
</div>

</body>
</html>