Changeset 213464 in webkit


Ignore:
Timestamp:
Mar 6, 2017, 1:40:31 PM (9 years ago)
Author:
mmaxfield@apple.com
Message:

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.
Location:
trunk
Files:
7 added
56 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r213462 r213464  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Expand font-weight and font-stretch to take any number
     4        https://bugs.webkit.org/show_bug.cgi?id=168889
     5
     6        Reviewed by Simon Fraser.
     7
     8        * fast/text/font-selection-font-face-parse-expected.txt: Added.
     9        * fast/text/font-selection-font-face-parse.html: Added.
     10        * fast/text/font-selection-font-loading-api-parse-expected.txt: Added.
     11        * fast/text/font-selection-font-loading-api-parse.html: Added.
     12        * fast/text/font-stretch-parse-expected.txt:
     13        * fast/text/font-stretch-parse.html:
     14        * fast/text/font-style-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
     15        * fast/text/font-style-parse.html: Added.
     16        * fast/text/font-weight-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
     17        * fast/text/font-weight-parse.html: Added.
     18
    1192017-03-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>
    220
  • trunk/LayoutTests/fast/text/font-stretch-parse-expected.txt

    r213267 r213464  
    2020PASS window.getComputedStyle(document.getElementById('test20')).fontStretch is "extra-expanded"
    2121PASS window.getComputedStyle(document.getElementById('test1')).font is "normal normal normal normal 16px/18px Times"
    22 PASS window.getComputedStyle(document.getElementById('test2')).font is "normal normal normal 1% 16px/18px Times"
    23 PASS window.getComputedStyle(document.getElementById('test3')).font is "normal normal normal 2% 16px/18px Times"
     22PASS window.getComputedStyle(document.getElementById('test2')).font is "16px/18px Times"
     23PASS window.getComputedStyle(document.getElementById('test3')).font is "16px/18px Times"
    2424PASS window.getComputedStyle(document.getElementById('test4')).font is "normal normal normal ultra-condensed 16px/18px Times"
    2525PASS window.getComputedStyle(document.getElementById('test5')).font is "normal normal normal extra-condensed 16px/18px Times"
     
    3333PASS window.getComputedStyle(document.getElementById('test13')).font is "normal normal normal normal 16px/18px Times"
    3434PASS window.getComputedStyle(document.getElementById('test14')).font is "normal normal normal normal 16px/18px Times"
    35 PASS window.getComputedStyle(document.getElementById('test15')).font is "normal normal normal 7% 16px/18px Times"
     35PASS window.getComputedStyle(document.getElementById('test15')).font is "16px/18px Times"
    3636PASS window.getComputedStyle(document.getElementById('test16')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
    3737PASS window.getComputedStyle(document.getElementById('test17')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
  • trunk/LayoutTests/fast/text/font-stretch-parse.html

    r213267 r213464  
    5050
    5151shouldBeEqualToString("window.getComputedStyle(document.getElementById('test1')).font", "normal normal normal normal 16px/18px Times");
    52 shouldBeEqualToString("window.getComputedStyle(document.getElementById('test2')).font", "normal normal normal 1% 16px/18px Times");
    53 shouldBeEqualToString("window.getComputedStyle(document.getElementById('test3')).font", "normal normal normal 2% 16px/18px Times");
     52shouldBeEqualToString("window.getComputedStyle(document.getElementById('test2')).font", "16px/18px Times");
     53shouldBeEqualToString("window.getComputedStyle(document.getElementById('test3')).font", "16px/18px Times");
    5454shouldBeEqualToString("window.getComputedStyle(document.getElementById('test4')).font", "normal normal normal ultra-condensed 16px/18px Times");
    5555shouldBeEqualToString("window.getComputedStyle(document.getElementById('test5')).font", "normal normal normal extra-condensed 16px/18px Times");
     
    6363shouldBeEqualToString("window.getComputedStyle(document.getElementById('test13')).font", "normal normal normal normal 16px/18px Times");
    6464shouldBeEqualToString("window.getComputedStyle(document.getElementById('test14')).font", "normal normal normal normal 16px/18px Times");
    65 shouldBeEqualToString("window.getComputedStyle(document.getElementById('test15')).font", "normal normal normal 7% 16px/18px Times");
     65shouldBeEqualToString("window.getComputedStyle(document.getElementById('test15')).font", "16px/18px Times");
    6666shouldBeEqualToString("window.getComputedStyle(document.getElementById('test16')).font", "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'");
    6767shouldBeEqualToString("window.getComputedStyle(document.getElementById('test17')).font", "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'");
  • trunk/LayoutTests/fast/text/font-style-parse-expected.txt

    r213463 r213464  
    1 PASS window.getComputedStyle(document.getElementById('test1')).fontStretch is "normal"
    2 PASS window.getComputedStyle(document.getElementById('test2')).fontStretch is "1%"
    3 PASS window.getComputedStyle(document.getElementById('test3')).fontStretch is "2%"
    4 PASS window.getComputedStyle(document.getElementById('test4')).fontStretch is "ultra-condensed"
    5 PASS window.getComputedStyle(document.getElementById('test5')).fontStretch is "extra-condensed"
    6 PASS window.getComputedStyle(document.getElementById('test6')).fontStretch is "condensed"
    7 PASS window.getComputedStyle(document.getElementById('test7')).fontStretch is "semi-condensed"
    8 PASS window.getComputedStyle(document.getElementById('test8')).fontStretch is "normal"
    9 PASS window.getComputedStyle(document.getElementById('test9')).fontStretch is "semi-expanded"
    10 PASS window.getComputedStyle(document.getElementById('test10')).fontStretch is "expanded"
    11 PASS window.getComputedStyle(document.getElementById('test11')).fontStretch is "extra-expanded"
    12 PASS window.getComputedStyle(document.getElementById('test12')).fontStretch is "ultra-expanded"
    13 PASS window.getComputedStyle(document.getElementById('test13')).fontStretch is "normal"
    14 PASS window.getComputedStyle(document.getElementById('test14')).fontStretch is "normal"
    15 PASS window.getComputedStyle(document.getElementById('test15')).fontStretch is "7%"
    16 PASS window.getComputedStyle(document.getElementById('test16')).fontStretch is "extra-condensed"
    17 PASS window.getComputedStyle(document.getElementById('test17')).fontStretch is "extra-condensed"
    18 PASS window.getComputedStyle(document.getElementById('test18')).fontStretch is "normal"
    19 PASS window.getComputedStyle(document.getElementById('test19')).fontStretch is "normal"
    20 PASS window.getComputedStyle(document.getElementById('test20')).fontStretch is "extra-expanded"
     1PASS window.getComputedStyle(document.getElementById('test1')).fontStyle is "normal"
     2PASS window.getComputedStyle(document.getElementById('test2')).fontStyle is "1deg"
     3PASS window.getComputedStyle(document.getElementById('test3')).fontStyle is "180deg"
     4PASS window.getComputedStyle(document.getElementById('test4')).fontStyle is "359.75deg"
     5PASS window.getComputedStyle(document.getElementById('test5')).fontStyle is "1440deg"
     6PASS window.getComputedStyle(document.getElementById('test6')).fontStyle is "5deg"
     7PASS window.getComputedStyle(document.getElementById('test7')).fontStyle is "italic"
     8PASS window.getComputedStyle(document.getElementById('test8')).fontStyle is "italic"
     9PASS window.getComputedStyle(document.getElementById('test9')).fontStyle is "italic"
     10PASS window.getComputedStyle(document.getElementById('test10')).fontStyle is "normal"
     11PASS window.getComputedStyle(document.getElementById('test11')).fontStyle is "normal"
     12PASS window.getComputedStyle(document.getElementById('test12')).fontStyle is "normal"
     13PASS window.getComputedStyle(document.getElementById('test13')).fontStyle is "7deg"
     14PASS window.getComputedStyle(document.getElementById('test14')).fontStyle is "1441deg"
     15PASS window.getComputedStyle(document.getElementById('test15')).fontStyle is "italic"
     16PASS window.getComputedStyle(document.getElementById('test16')).fontStyle is "italic"
     17PASS window.getComputedStyle(document.getElementById('test17')).fontStyle is "normal"
     18PASS window.getComputedStyle(document.getElementById('test18')).fontStyle is "italic"
     19PASS window.getComputedStyle(document.getElementById('test19')).fontStyle is "italic"
     20PASS window.getComputedStyle(document.getElementById('test20')).fontStyle is "normal"
    2121PASS window.getComputedStyle(document.getElementById('test1')).font is "normal normal normal normal 16px/18px Times"
    22 PASS window.getComputedStyle(document.getElementById('test2')).font is "normal normal normal 1% 16px/18px Times"
    23 PASS window.getComputedStyle(document.getElementById('test3')).font is "normal normal normal 2% 16px/18px Times"
    24 PASS window.getComputedStyle(document.getElementById('test4')).font is "normal normal normal ultra-condensed 16px/18px Times"
    25 PASS window.getComputedStyle(document.getElementById('test5')).font is "normal normal normal extra-condensed 16px/18px Times"
    26 PASS window.getComputedStyle(document.getElementById('test6')).font is "normal normal normal condensed 16px/18px Times"
    27 PASS window.getComputedStyle(document.getElementById('test7')).font is "normal normal normal semi-condensed 16px/18px Times"
    28 PASS window.getComputedStyle(document.getElementById('test8')).font is "normal normal normal normal 16px/18px Times"
    29 PASS window.getComputedStyle(document.getElementById('test9')).font is "normal normal normal semi-expanded 16px/18px Times"
    30 PASS window.getComputedStyle(document.getElementById('test10')).font is "normal normal normal expanded 16px/18px Times"
    31 PASS window.getComputedStyle(document.getElementById('test11')).font is "normal normal normal extra-expanded 16px/18px Times"
    32 PASS window.getComputedStyle(document.getElementById('test12')).font is "normal normal normal ultra-expanded 16px/18px Times"
    33 PASS window.getComputedStyle(document.getElementById('test13')).font is "normal normal normal normal 16px/18px Times"
    34 PASS window.getComputedStyle(document.getElementById('test14')).font is "normal normal normal normal 16px/18px Times"
    35 PASS window.getComputedStyle(document.getElementById('test15')).font is "normal normal normal 7% 16px/18px Times"
    36 PASS window.getComputedStyle(document.getElementById('test16')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
    37 PASS window.getComputedStyle(document.getElementById('test17')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
    38 PASS window.getComputedStyle(document.getElementById('test18')).font is "normal normal 100 normal 48px/49px 'Helvetica Neue'"
    39 PASS window.getComputedStyle(document.getElementById('test19')).font is "normal normal 100 normal 48px/49px 'Helvetica Neue'"
    40 PASS window.getComputedStyle(document.getElementById('test20')).font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     22PASS window.getComputedStyle(document.getElementById('test2')).font is "16px/18px Times"
     23PASS window.getComputedStyle(document.getElementById('test3')).font is "16px/18px Times"
     24PASS window.getComputedStyle(document.getElementById('test4')).font is "16px/18px Times"
     25PASS window.getComputedStyle(document.getElementById('test5')).font is "16px/18px Times"
     26PASS window.getComputedStyle(document.getElementById('test6')).font is "16px/18px Times"
     27PASS window.getComputedStyle(document.getElementById('test7')).font is "italic normal normal normal 16px/18px Times"
     28PASS window.getComputedStyle(document.getElementById('test8')).font is "italic normal normal normal 16px/18px Times"
     29PASS window.getComputedStyle(document.getElementById('test9')).font is "italic normal normal normal 16px/18px Times"
     30PASS window.getComputedStyle(document.getElementById('test10')).font is "normal normal normal normal 16px/18px Times"
     31PASS window.getComputedStyle(document.getElementById('test11')).font is "normal normal normal normal 16px/18px Times"
     32PASS window.getComputedStyle(document.getElementById('test12')).font is "normal normal normal normal 16px/18px Times"
     33PASS window.getComputedStyle(document.getElementById('test13')).font is "16px/18px Times"
     34PASS window.getComputedStyle(document.getElementById('test14')).font is "16px/18px Times"
     35PASS window.getComputedStyle(document.getElementById('test15')).font is "italic normal 100 normal 48px/49px 'Helvetica Neue'"
     36PASS window.getComputedStyle(document.getElementById('test16')).font is "italic normal 100 normal 48px/49px 'Helvetica Neue'"
     37PASS window.getComputedStyle(document.getElementById('test17')).font is "normal normal 100 normal 48px/49px 'Helvetica Neue'"
     38PASS window.getComputedStyle(document.getElementById('test18')).font is "italic normal normal normal 48px/49px 'Helvetica Neue'"
     39PASS window.getComputedStyle(document.getElementById('test19')).font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     40PASS window.getComputedStyle(document.getElementById('test20')).font is "normal normal normal normal 16px/18px Times"
    4141PASS document.getElementById('test1').style.font is ""
    42 PASS document.getElementById('test16').style.font is "100 extra-condensed 48px/49px 'Helvetica Neue'"
    43 PASS document.getElementById('test17').style.font is "100 extra-condensed 48px/49px 'Helvetica Neue'"
    44 PASS document.getElementById('test18').style.font is "100 48px/49px 'Helvetica Neue'"
    45 PASS document.getElementById('test19').style.font is "100 48px/49px 'Helvetica Neue'"
    46 PASS document.getElementById('test20').style.font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     42PASS document.getElementById('test15').style.font is "italic 100 48px/49px 'Helvetica Neue'"
     43PASS document.getElementById('test16').style.font is "italic 100 48px/49px 'Helvetica Neue'"
     44PASS document.getElementById('test17').style.font is "100 48px/49px 'Helvetica Neue'"
     45PASS document.getElementById('test18').style.font is "italic 48px/49px 'Helvetica Neue'"
     46PASS document.getElementById('test19').style.font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     47PASS document.getElementById('test20').style.font is ""
    4748PASS successfullyParsed is true
    4849
  • trunk/LayoutTests/fast/text/font-weight-parse-expected.txt

    r213463 r213464  
    1 PASS window.getComputedStyle(document.getElementById('test1')).fontStretch is "normal"
    2 PASS window.getComputedStyle(document.getElementById('test2')).fontStretch is "1%"
    3 PASS window.getComputedStyle(document.getElementById('test3')).fontStretch is "2%"
    4 PASS window.getComputedStyle(document.getElementById('test4')).fontStretch is "ultra-condensed"
    5 PASS window.getComputedStyle(document.getElementById('test5')).fontStretch is "extra-condensed"
    6 PASS window.getComputedStyle(document.getElementById('test6')).fontStretch is "condensed"
    7 PASS window.getComputedStyle(document.getElementById('test7')).fontStretch is "semi-condensed"
    8 PASS window.getComputedStyle(document.getElementById('test8')).fontStretch is "normal"
    9 PASS window.getComputedStyle(document.getElementById('test9')).fontStretch is "semi-expanded"
    10 PASS window.getComputedStyle(document.getElementById('test10')).fontStretch is "expanded"
    11 PASS window.getComputedStyle(document.getElementById('test11')).fontStretch is "extra-expanded"
    12 PASS window.getComputedStyle(document.getElementById('test12')).fontStretch is "ultra-expanded"
    13 PASS window.getComputedStyle(document.getElementById('test13')).fontStretch is "normal"
    14 PASS window.getComputedStyle(document.getElementById('test14')).fontStretch is "normal"
    15 PASS window.getComputedStyle(document.getElementById('test15')).fontStretch is "7%"
    16 PASS window.getComputedStyle(document.getElementById('test16')).fontStretch is "extra-condensed"
    17 PASS window.getComputedStyle(document.getElementById('test17')).fontStretch is "extra-condensed"
    18 PASS window.getComputedStyle(document.getElementById('test18')).fontStretch is "normal"
    19 PASS window.getComputedStyle(document.getElementById('test19')).fontStretch is "normal"
    20 PASS window.getComputedStyle(document.getElementById('test20')).fontStretch is "extra-expanded"
     1PASS window.getComputedStyle(document.getElementById('test1')).fontWeight is "normal"
     2PASS window.getComputedStyle(document.getElementById('test2')).fontWeight is "1"
     3PASS window.getComputedStyle(document.getElementById('test3')).fontWeight is "100"
     4PASS window.getComputedStyle(document.getElementById('test4')).fontWeight is "200"
     5PASS window.getComputedStyle(document.getElementById('test5')).fontWeight is "300"
     6PASS window.getComputedStyle(document.getElementById('test6')).fontWeight is "normal"
     7PASS window.getComputedStyle(document.getElementById('test7')).fontWeight is "normal"
     8PASS window.getComputedStyle(document.getElementById('test8')).fontWeight is "500"
     9PASS window.getComputedStyle(document.getElementById('test9')).fontWeight is "600"
     10PASS window.getComputedStyle(document.getElementById('test10')).fontWeight is "bold"
     11PASS window.getComputedStyle(document.getElementById('test11')).fontWeight is "bold"
     12PASS window.getComputedStyle(document.getElementById('test12')).fontWeight is "800"
     13PASS window.getComputedStyle(document.getElementById('test13')).fontWeight is "900"
     14PASS window.getComputedStyle(document.getElementById('test14')).fontWeight is "normal"
     15PASS window.getComputedStyle(document.getElementById('test15')).fontWeight is "normal"
     16PASS window.getComputedStyle(document.getElementById('test16')).fontWeight is "7"
     17PASS window.getComputedStyle(document.getElementById('test17')).fontWeight is "300"
     18PASS window.getComputedStyle(document.getElementById('test18')).fontWeight is "200"
     19PASS window.getComputedStyle(document.getElementById('test19')).fontWeight is "100"
     20PASS window.getComputedStyle(document.getElementById('test20')).fontWeight is "100"
     21PASS window.getComputedStyle(document.getElementById('test21')).fontWeight is "normal"
     22PASS window.getComputedStyle(document.getElementById('test22')).fontWeight is "100"
     23PASS window.getComputedStyle(document.getElementById('test23')).fontWeight is "100"
     24PASS window.getComputedStyle(document.getElementById('test24')).fontWeight is "normal"
    2125PASS window.getComputedStyle(document.getElementById('test1')).font is "normal normal normal normal 16px/18px Times"
    22 PASS window.getComputedStyle(document.getElementById('test2')).font is "normal normal normal 1% 16px/18px Times"
    23 PASS window.getComputedStyle(document.getElementById('test3')).font is "normal normal normal 2% 16px/18px Times"
    24 PASS window.getComputedStyle(document.getElementById('test4')).font is "normal normal normal ultra-condensed 16px/18px Times"
    25 PASS window.getComputedStyle(document.getElementById('test5')).font is "normal normal normal extra-condensed 16px/18px Times"
    26 PASS window.getComputedStyle(document.getElementById('test6')).font is "normal normal normal condensed 16px/18px Times"
    27 PASS window.getComputedStyle(document.getElementById('test7')).font is "normal normal normal semi-condensed 16px/18px Times"
    28 PASS window.getComputedStyle(document.getElementById('test8')).font is "normal normal normal normal 16px/18px Times"
    29 PASS window.getComputedStyle(document.getElementById('test9')).font is "normal normal normal semi-expanded 16px/18px Times"
    30 PASS window.getComputedStyle(document.getElementById('test10')).font is "normal normal normal expanded 16px/18px Times"
    31 PASS window.getComputedStyle(document.getElementById('test11')).font is "normal normal normal extra-expanded 16px/18px Times"
    32 PASS window.getComputedStyle(document.getElementById('test12')).font is "normal normal normal ultra-expanded 16px/18px Times"
    33 PASS window.getComputedStyle(document.getElementById('test13')).font is "normal normal normal normal 16px/18px Times"
     26PASS window.getComputedStyle(document.getElementById('test2')).font is "16px/18px Times"
     27PASS window.getComputedStyle(document.getElementById('test3')).font is "normal normal 100 normal 16px/18px Times"
     28PASS window.getComputedStyle(document.getElementById('test4')).font is "normal normal 200 normal 16px/18px Times"
     29PASS window.getComputedStyle(document.getElementById('test5')).font is "normal normal 300 normal 16px/18px Times"
     30PASS window.getComputedStyle(document.getElementById('test6')).font is "normal normal normal normal 16px/18px Times"
     31PASS window.getComputedStyle(document.getElementById('test7')).font is "normal normal normal normal 16px/18px Times"
     32PASS window.getComputedStyle(document.getElementById('test8')).font is "normal normal 500 normal 16px/18px Times"
     33PASS window.getComputedStyle(document.getElementById('test9')).font is "normal normal 600 normal 16px/18px Times"
     34PASS window.getComputedStyle(document.getElementById('test10')).font is "normal normal bold normal 16px/18px Times"
     35PASS window.getComputedStyle(document.getElementById('test11')).font is "normal normal bold normal 16px/18px Times"
     36PASS window.getComputedStyle(document.getElementById('test12')).font is "normal normal 800 normal 16px/18px Times"
     37PASS window.getComputedStyle(document.getElementById('test13')).font is "normal normal 900 normal 16px/18px Times"
    3438PASS window.getComputedStyle(document.getElementById('test14')).font is "normal normal normal normal 16px/18px Times"
    35 PASS window.getComputedStyle(document.getElementById('test15')).font is "normal normal normal 7% 16px/18px Times"
    36 PASS window.getComputedStyle(document.getElementById('test16')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
    37 PASS window.getComputedStyle(document.getElementById('test17')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
    38 PASS window.getComputedStyle(document.getElementById('test18')).font is "normal normal 100 normal 48px/49px 'Helvetica Neue'"
    39 PASS window.getComputedStyle(document.getElementById('test19')).font is "normal normal 100 normal 48px/49px 'Helvetica Neue'"
    40 PASS window.getComputedStyle(document.getElementById('test20')).font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     39PASS window.getComputedStyle(document.getElementById('test15')).font is "normal normal normal normal 16px/18px Times"
     40PASS window.getComputedStyle(document.getElementById('test16')).font is "16px/18px Times"
     41PASS window.getComputedStyle(document.getElementById('test17')).font is "normal normal 300 normal 16px/18px Times"
     42PASS window.getComputedStyle(document.getElementById('test18')).font is "normal normal 200 normal 16px/18px Times"
     43PASS window.getComputedStyle(document.getElementById('test19')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
     44PASS window.getComputedStyle(document.getElementById('test20')).font is "normal normal 100 extra-condensed 48px/49px 'Helvetica Neue'"
     45PASS window.getComputedStyle(document.getElementById('test21')).font is "normal normal normal extra-condensed 48px/49px 'Helvetica Neue'"
     46PASS window.getComputedStyle(document.getElementById('test22')).font is "normal normal 100 normal 48px/49px 'Helvetica Neue'"
     47PASS window.getComputedStyle(document.getElementById('test23')).font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     48PASS window.getComputedStyle(document.getElementById('test24')).font is "italic small-caps normal extra-expanded 48px/49px 'Helvetica Neue'"
    4149PASS document.getElementById('test1').style.font is ""
    42 PASS document.getElementById('test16').style.font is "100 extra-condensed 48px/49px 'Helvetica Neue'"
    43 PASS document.getElementById('test17').style.font is "100 extra-condensed 48px/49px 'Helvetica Neue'"
    44 PASS document.getElementById('test18').style.font is "100 48px/49px 'Helvetica Neue'"
    45 PASS document.getElementById('test19').style.font is "100 48px/49px 'Helvetica Neue'"
    46 PASS document.getElementById('test20').style.font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     50PASS document.getElementById('test19').style.font is "100 extra-condensed 48px/49px 'Helvetica Neue'"
     51PASS document.getElementById('test20').style.font is "100 extra-condensed 48px/49px 'Helvetica Neue'"
     52PASS document.getElementById('test21').style.font is "extra-condensed 48px/49px 'Helvetica Neue'"
     53PASS document.getElementById('test22').style.font is "100 48px/49px 'Helvetica Neue'"
     54PASS document.getElementById('test23').style.font is "italic small-caps 100 extra-expanded 48px/49px 'Helvetica Neue'"
     55PASS document.getElementById('test24').style.font is "italic small-caps extra-expanded 48px/49px 'Helvetica Neue'"
    4756PASS successfullyParsed is true
    4857
  • trunk/Source/WebCore/ChangeLog

    r213460 r213464  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Expand font-weight and font-stretch to take any number
     4        https://bugs.webkit.org/show_bug.cgi?id=168889
     5
     6        Reviewed by Simon Fraser.
     7
     8        This patch expands parsing support for font-weight and font-stretch so that they can accept
     9        numbers in addition to the keyword values they accepted previously. Eventually, these numbers
     10        will be used as inputs to select variation fonts; however, in this patch, the values are just
     11        parsed and held in our internal data model. This means that this patch doesn't actually change
     12        the general behavior of WebKit; instead, it parses new values, outputs them (via
     13        getComputedStyle() and similar functions), and provides them as input to our preexisting font
     14        selection algorithm.
     15
     16        This patch doesn't actually modify anything algorithmically, and therefore, it doesn't include
     17        any additional tests for the font selection algorithm. Instead, it tests the parsing of the
     18        newly accepted values (both input and output).
     19
     20        Because our internal data model needs to hold numbers now, this patch also completely eliminates
     21        the FontWidth, FontItalic, and FontTraitsMask enum values in favor of FontSelectionValues (which
     22        can hold numbers instead of individual enum values). Therefore, every place which we were using
     23        these enum values is migrated in this patch to using FontSelectionValues instead.
     24
     25        Tests: fast/text/font-selection-font-face-parse.html
     26               fast/text/font-selection-font-loading-api-parse.html
     27               fast/text/font-style-parse.html
     28               fast/text/font-weight-parse.html
     29
     30        * accessibility/AccessibilityRenderObject.cpp: Migrate off of old enum types.
     31        (WebCore::AccessibilityRenderObject::hasBoldFont):
     32        (WebCore::AccessibilityRenderObject::hasItalicFont):
     33        (WebCore::AccessibilityRenderObject::hasPlainText):
     34        * accessibility/atk/WebKitAccessibleInterfaceText.cpp: Ditto.
     35        (getAttributeSetForAccessibilityObject):
     36        * css/CSSComputedStyleDeclaration.cpp: Output newly parsed values.
     37        (WebCore::fontWeightFromStyle):
     38        (WebCore::fontStretchFromStyle):
     39        (WebCore::fontStyleFromStyle):
     40        (WebCore::fontShorthandValueForSelectionProperties):
     41        (WebCore::ComputedStyleExtractor::propertyValue):
     42        * css/CSSFontFace.cpp: Migrate off old enum types.
     43        (WebCore::calculateWeightRange):
     44        (WebCore::CSSFontFace::setWeight):
     45        (WebCore::calculateStretchRange):
     46        (WebCore::CSSFontFace::setStretch):
     47        (WebCore::calculateStyleRange):
     48        (WebCore::CSSFontFace::setStyle):
     49        (WebCore::CSSFontFace::calculateStyleMask): Deleted.
     50        (WebCore::CSSFontFace::calculateWeightMask): Deleted.
     51        (WebCore::CSSFontFace::calculateStretch): Deleted.
     52        * css/CSSFontFace.h:
     53        * css/CSSFontFaceSet.cpp: Migrate off old enum types.
     54        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
     55        (WebCore::calculateWeightValue):
     56        (WebCore::calculateStretchValue):
     57        (WebCore::calculateStyleValue):
     58        (WebCore::computeFontSelectionRequest):
     59        (WebCore::CSSFontFaceSet::matchingFaces):
     60        (WebCore::CSSFontFaceSet::fontFace):
     61        (WebCore::computeFontTraitsMask): Deleted.
     62        (WebCore::computeFontStretch): Deleted.
     63        * css/CSSFontFaceSet.h:
     64        * css/CSSFontSelector.cpp: Migrate off old enum types.
     65        (WebCore::CSSFontSelector::fontRangesForFamily):
     66        * css/CSSPrimitiveValueMappings.h: font-weight and font-style are no longer
     67        keyword properties.
     68        (WebCore::CSSPrimitiveValue::operator FontWeight): Deleted.
     69        (WebCore::CSSPrimitiveValue::operator FontItalic): Deleted.
     70        * css/CSSProperties.json: Use the same infrastructure for all three of the
     71        font selection properties.
     72        * css/CSSSegmentedFontFace.cpp: Migrate off old enum types.
     73        (WebCore::CSSSegmentedFontFace::fontRanges):
     74        * css/CSSValueKeywords.in: The 100-based font-weight values are now represented
     75        as real numbers.
     76        * css/FontFace.cpp: Update the string output functions for the new values.
     77        (WebCore::rangeIsSingleValue):
     78        (WebCore::FontFace::style):
     79        (WebCore::FontFace::weight):
     80        (WebCore::FontFace::stretch):
     81        * css/StyleBuilderConverter.h: Use CSSValue conversion functions to convert
     82        to our new data model.
     83        (WebCore::StyleBuilderConverter::convertFontWeight):
     84        (WebCore::StyleBuilderConverter::convertFontStretch):
     85        (WebCore::StyleBuilderConverter::convertFontStyle):
     86        * css/StyleBuilderCustom.h: font-weight is no longer a completely custom
     87        property.
     88        (WebCore::StyleBuilderCustom::applyInitialFontWeight): Deleted.
     89        (WebCore::StyleBuilderCustom::applyInheritFontWeight): Deleted.
     90        (WebCore::StyleBuilderCustom::applyValueFontWeight): Deleted.
     91        * css/parser/CSSParserFastPaths.cpp: font-style is no longer a keyword property.
     92        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
     93        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
     94        * css/parser/CSSPropertyParser.cpp: Parse the new values in the font selection
     95        properties.
     96        (WebCore::consumeFontWeightKeywordValue):
     97        (WebCore::consumeFontWeightCSS21):
     98        (WebCore::consumeFontWeight):
     99        (WebCore::consumeFontStyleKeywordValue):
     100        (WebCore::consumeFontStyle):
     101        (WebCore::CSSPropertyParser::parseSingleValue):
     102        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
     103        (WebCore::CSSPropertyParser::consumeSystemFont):
     104        (WebCore::CSSPropertyParser::consumeFont):
     105        * editing/EditingStyle.cpp: Migrate off old enum types.
     106        (WebCore::fontWeightIsBold):
     107        * editing/mac/EditorMac.mm: Ditto.
     108        (WebCore::Editor::applyFontStyles):
     109        * platform/graphics/FontCache.h: Unify our font selection values into
     110        their enclosing struct, FontSelectionCapabilities. Also, clean up utility
     111        functions.
     112        * platform/graphics/FontCascade.cpp: Migrate off old enum types.
     113        (WebCore::FontCascade::FontCascade):
     114        * platform/graphics/FontCascade.h: Ditto.
     115        (WebCore::FontCascade::italic):
     116        (WebCore::FontCascade::weight):
     117        * platform/graphics/FontDescription.cpp: Ditto.
     118        (WebCore::FontDescription::FontDescription):
     119        (WebCore::FontCascadeDescription::lighterWeight):
     120        (WebCore::FontCascadeDescription::bolderWeight):
     121        (WebCore::FontDescription::traitsMask): Deleted.
     122        * platform/graphics/FontDescription.h: Migrate off old enum types.
     123        (WebCore::FontDescription::italic):
     124        (WebCore::FontDescription::stretch):
     125        (WebCore::FontDescription::weight):
     126        (WebCore::FontDescription::fontSelectionRequest):
     127        (WebCore::FontDescription::computedPixelSize):
     128        (WebCore::FontDescription::setItalic):
     129        (WebCore::FontDescription::setStretch):
     130        (WebCore::FontDescription::setIsItalic):
     131        (WebCore::FontDescription::setWeight):
     132        (WebCore::FontDescription::operator==):
     133        (WebCore::FontCascadeDescription::lighterWeight):
     134        (WebCore::FontCascadeDescription::bolderWeight):
     135        (WebCore::FontCascadeDescription::initialItalic):
     136        (WebCore::FontCascadeDescription::initialWeight):
     137        (WebCore::FontCascadeDescription::initialStretch):
     138        * platform/graphics/FontSelectionAlgorithm.cpp: Delete code which was only
     139        present to convert from the old enum types to the new FontSelectionRequest
     140        type.
     141        (WebCore::fontSelectionRequestForTraitsMask): Deleted.
     142        (WebCore::initialFontSelectionCapabilitiesForTraitsMask): Deleted.
     143        (WebCore::fontSelectionCapabilitiesForTraitsMask): Deleted.
     144        * platform/graphics/FontSelectionAlgorithm.h: Migrate to new named functions
     145        for special values.
     146        (WebCore::isItalic):
     147        (WebCore::boldWeightValue):
     148        (WebCore::normalWeightValue):
     149        (WebCore::isFontWeightBold):
     150        (WebCore::normalStretchValue):
     151        (WebCore::FontSelectionRequest::FontSelectionRequest):
     152        * platform/graphics/cocoa/FontCacheCoreText.cpp: Migrate all platforms which
     153        compile this file to know about FontDatabase. This simplifies the interaction
     154        between @font-face fonts and installed fonts. Also, migrate off old enum types.
     155        (WebCore::stretchFromCoreTextTraits):
     156        (WebCore::fontWeightFromCoreText):
     157        (WebCore::capabilitiesForFontDescriptor):
     158        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
     159        (WebCore::platformFontLookupWithFamily):
     160        (WebCore::invalidateFontCache):
     161        (WebCore::fontWithFamily):
     162        (WebCore::FontCache::createFontPlatformData):
     163        (WebCore::lookupFallbackFont):
     164        (WebCore::toTraitsMask): Deleted.
     165        (WebCore::isFontWeightBold): Deleted.
     166        (WebCore::toCoreTextFontWeight): Deleted.
     167        (): Deleted.
     168        (WebCore::FontDatabase::capabilitiesForFontDescriptor): Deleted.
     169        (WebCore::calculateFontSelectionRequest): Deleted.
     170        * platform/graphics/freetype/FontCacheFreeType.cpp: Migrate off old enum types.
     171        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
     172        (WebCore::fontWeightToFontconfigWeight):
     173        (): Deleted.
     174        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Ditto.
     175        (WebCore::FontPlatformData::FontPlatformData):
     176        * platform/graphics/ios/FontCacheIOS.mm: Ditto.
     177        (WebCore::baseSystemFontDescriptor):
     178        (WebCore::systemFontModificationAttributes):
     179        (WebCore::systemFontDescriptor):
     180        (WebCore::platformFontWithFamilySpecialCase):
     181        (WebCore::FontCache::weightOfCTFont): Deleted.
     182        * platform/graphics/mac/FontCacheMac.mm: Ditto.
     183        (WebCore::toNSFontWeight):
     184        (WebCore::platformFontWithFamilySpecialCase):
     185        * platform/graphics/win/FontCacheWin.cpp: Ditto.
     186        (WebCore::toGDIFontWeight):
     187        (WebCore::traitsInFamilyEnumProc):
     188        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
     189        (): Deleted.
     190        * platform/mock/MockRealtimeVideoSource.cpp: Ditto.
     191        (WebCore::MockRealtimeVideoSource::applySize):
     192        * platform/text/TextFlags.h: Delete old enum types.
     193        * platform/win/DragImageWin.cpp: Migrate off old enum types.
     194        (WebCore::dragLabelFont):
     195        * rendering/RenderEmbeddedObject.cpp: Ditto.
     196        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
     197        * rendering/RenderThemeGtk.cpp: Ditto.
     198        (WebCore::RenderThemeGtk::updateCachedSystemFontDescription):
     199        * rendering/RenderThemeIOS.mm: Ditto.
     200        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
     201        * rendering/RenderThemeMac.mm: Ditto.
     202        (WebCore::toFontWeight):
     203        * rendering/RenderThemeWin.cpp: Ditto.
     204        (WebCore::fillFontDescription):
     205
    12062017-03-06  Chris Dumez  <cdumez@apple.com>
    2207
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r213455 r213464  
    1387413874                C2AB0AF41E6B3C6C001348C5 /* FontSelectionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontSelectionAlgorithm.cpp; sourceTree = "<group>"; };
    1387513875                C2AB0AF51E6B3C6C001348C5 /* FontSelectionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontSelectionAlgorithm.h; sourceTree = "<group>"; };
     13876                C2AB0B021E6DE32B001348C5 /* FontSelectionKeywordValues.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontSelectionKeywordValues.h; sourceTree = "<group>"; };
     13877                C2AB0B031E6DE92C001348C5 /* FontSelectionValueInlines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontSelectionValueInlines.h; sourceTree = "<group>"; };
    1387613878                C2F4E7881E45AEDF006D7105 /* ComplexTextController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComplexTextController.cpp; sourceTree = "<group>"; };
    1387713879                C2F4E7891E45AEDF006D7105 /* ComplexTextController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComplexTextController.h; sourceTree = "<group>"; };
     
    2237222374                                C2AB0AF41E6B3C6C001348C5 /* FontSelectionAlgorithm.cpp */,
    2237322375                                C2AB0AF51E6B3C6C001348C5 /* FontSelectionAlgorithm.h */,
     22376                                C2AB0B021E6DE32B001348C5 /* FontSelectionKeywordValues.h */,
    2237422377                        );
    2237522378                        path = graphics;
     
    2421824221                                3F2B33E3165ABD3500E3987C /* WebKitCSSViewportRule.idl */,
    2421924222                                31055BB81E4FE18900EB604E /* WebKitFontFamilyNames.in */,
     24223                                C2AB0B031E6DE92C001348C5 /* FontSelectionValueInlines.h */,
    2422024224                        );
    2422124225                        path = css;
  • trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp

    r213455 r213464  
    35013501        return false;
    35023502   
    3503     return m_renderer->style().fontDescription().weight() >= FontWeightBold;
     3503    return isFontWeightBold(m_renderer->style().fontDescription().weight());
    35043504}
    35053505
     
    35093509        return false;
    35103510   
    3511     return m_renderer->style().fontDescription().italic() == FontItalicOn;
     3511    return isItalic(m_renderer->style().fontDescription().italic());
    35123512}
    35133513
     
    35193519    const RenderStyle& style = m_renderer->style();
    35203520   
    3521     return style.fontDescription().weight() == FontWeightNormal
    3522         && style.fontDescription().italic() == FontItalicOff
     3521    return style.fontDescription().weight() == normalWeightValue()
     3522        && style.fontDescription().italic() == normalItalicValue()
    35233523        && style.textDecorationsInEffect() == TextDecorationNone;
    35243524}
  • trunk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp

    r213355 r213464  
    137137    result = addToAtkAttributeSet(result, atk_text_attribute_get_name(ATK_TEXT_ATTR_FAMILY_NAME), fontFamilyName.utf8().data());
    138138
    139     int fontWeight = -1;
    140     switch (style->fontCascade().weight()) {
    141     case FontWeight100:
    142         fontWeight = 100;
    143         break;
    144     case FontWeight200:
    145         fontWeight = 200;
    146         break;
    147     case FontWeight300:
    148         fontWeight = 300;
    149         break;
    150     case FontWeight400:
    151         fontWeight = 400;
    152         break;
    153     case FontWeight500:
    154         fontWeight = 500;
    155         break;
    156     case FontWeight600:
    157         fontWeight = 600;
    158         break;
    159     case FontWeight700:
    160         fontWeight = 700;
    161         break;
    162     case FontWeight800:
    163         fontWeight = 800;
    164         break;
    165     case FontWeight900:
    166         fontWeight = 900;
    167     }
     139    int fontWeight = static_cast<float>(style->fontCascade().weight());
    168140    if (fontWeight > 0) {
    169141        buffer.reset(g_strdup_printf("%i", fontWeight));
  • trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp

    r213341 r213464  
    5757#include "Document.h"
    5858#include "ExceptionCode.h"
     59#include "FontSelectionValueInlines.h"
    5960#include "FontTaggedSettings.h"
    6061#include "HTMLFrameOwnerElement.h"
     
    19131914}
    19141915
     1916static Ref<CSSPrimitiveValue> fontWeightFromStyle(const RenderStyle& style)
     1917{
     1918    auto weight = style.fontDescription().weight();
     1919    if (auto value = fontWeightKeyword(weight))
     1920        return CSSValuePool::singleton().createIdentifierValue(value.value());
     1921    return CSSValuePool::singleton().createValue(static_cast<float>(weight), CSSPrimitiveValue::CSS_NUMBER);
     1922}
     1923
     1924static Ref<CSSPrimitiveValue> fontStretchFromStyle(const RenderStyle& style)
     1925{
     1926    auto stretch = style.fontDescription().stretch();
     1927    if (auto keyword = fontStretchKeyword(stretch))
     1928        return CSSValuePool::singleton().createIdentifierValue(keyword.value());
     1929    return CSSValuePool::singleton().createValue(static_cast<float>(stretch), CSSPrimitiveValue::CSS_PERCENTAGE);
     1930}
     1931
    19151932static Ref<CSSPrimitiveValue> fontStyleFromStyle(const RenderStyle& style)
    19161933{
    1917     if (style.fontDescription().italic())
    1918         return CSSValuePool::singleton().createIdentifierValue(CSSValueItalic);
    1919     return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
    1920 }
    1921 
    1922 static Ref<CSSPrimitiveValue> fontStretchFromStyle(const RenderStyle& style)
    1923 {
    1924     auto stretch = style.fontDescription().stretch();
    1925     if (stretch == FontSelectionValue(50))
    1926         return CSSValuePool::singleton().createIdentifierValue(CSSValueUltraCondensed);
    1927     if (stretch == FontSelectionValue(62.5f))
    1928         return CSSValuePool::singleton().createIdentifierValue(CSSValueExtraCondensed);
    1929     if (stretch == FontSelectionValue(75))
    1930         return CSSValuePool::singleton().createIdentifierValue(CSSValueCondensed);
    1931     if (stretch == FontSelectionValue(87.5f))
    1932         return CSSValuePool::singleton().createIdentifierValue(CSSValueSemiCondensed);
    1933     if (stretch == FontSelectionValue(100))
    1934         return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
    1935     if (stretch == FontSelectionValue(112.5f))
    1936         return CSSValuePool::singleton().createIdentifierValue(CSSValueSemiExpanded);
    1937     if (stretch == FontSelectionValue(125))
    1938         return CSSValuePool::singleton().createIdentifierValue(CSSValueExpanded);
    1939     if (stretch == FontSelectionValue(150))
    1940         return CSSValuePool::singleton().createIdentifierValue(CSSValueExtraExpanded);
    1941     if (stretch == FontSelectionValue(200))
    1942         return CSSValuePool::singleton().createIdentifierValue(CSSValueUltraExpanded);
    1943     return CSSValuePool::singleton().createValue(static_cast<float>(stretch), CSSPrimitiveValue::CSS_PERCENTAGE);
     1934    auto italic = style.fontDescription().italic();
     1935    if (auto italicValue = fontStyleKeyword(italic))
     1936        return CSSValuePool::singleton().createIdentifierValue(italicValue.value());
     1937    return CSSValuePool::singleton().createValue(static_cast<float>(italic), CSSPrimitiveValue::CSS_DEG);
    19441938}
    19451939
     
    21292123
    21302124    return WTFMove(list);
    2131 }
    2132 
    2133 static Ref<CSSPrimitiveValue> fontWeightFromStyle(const RenderStyle& style)
    2134 {
    2135     switch (style.fontDescription().weight()) {
    2136     case FontWeight100:
    2137         return CSSValuePool::singleton().createIdentifierValue(CSSValue100);
    2138     case FontWeight200:
    2139         return CSSValuePool::singleton().createIdentifierValue(CSSValue200);
    2140     case FontWeight300:
    2141         return CSSValuePool::singleton().createIdentifierValue(CSSValue300);
    2142     case FontWeightNormal:
    2143         return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
    2144     case FontWeight500:
    2145         return CSSValuePool::singleton().createIdentifierValue(CSSValue500);
    2146     case FontWeight600:
    2147         return CSSValuePool::singleton().createIdentifierValue(CSSValue600);
    2148     case FontWeightBold:
    2149         return CSSValuePool::singleton().createIdentifierValue(CSSValueBold);
    2150     case FontWeight800:
    2151         return CSSValuePool::singleton().createIdentifierValue(CSSValue800);
    2152     case FontWeight900:
    2153         return CSSValuePool::singleton().createIdentifierValue(CSSValue900);
    2154     }
    2155     ASSERT_NOT_REACHED();
    2156     return CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
    21572125}
    21582126
     
    25552523    RefPtr<CSSValue> propertyValue = customPropertyValue(propertyName);
    25562524    return propertyValue ? propertyValue->cssText() : emptyString();
     2525}
     2526
     2527static Ref<CSSFontValue> fontShorthandValueForSelectionProperties(const FontDescription& fontDescription)
     2528{
     2529    auto computedFont = CSSFontValue::create();
     2530
     2531    auto variantCaps = fontDescription.variantCaps();
     2532    if (variantCaps == FontVariantCaps::Small)
     2533        computedFont->variant = CSSValuePool::singleton().createIdentifierValue(CSSValueSmallCaps);
     2534    else if (variantCaps == FontVariantCaps::Normal)
     2535        computedFont->variant = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
     2536    else
     2537        return CSSFontValue::create();
     2538
     2539    auto weight = fontDescription.weight();
     2540    if (auto value = fontWeightKeyword(weight))
     2541        computedFont->weight = CSSValuePool::singleton().createIdentifierValue(value.value());
     2542    else if (isCSS21Weight(weight))
     2543        computedFont->weight = CSSValuePool::singleton().createValue(static_cast<float>(weight), CSSPrimitiveValue::CSS_NUMBER);
     2544    else
     2545        return CSSFontValue::create();
     2546
     2547    if (auto keyword = fontStretchKeyword(fontDescription.stretch()))
     2548        computedFont->stretch = CSSValuePool::singleton().createIdentifierValue(keyword.value());
     2549    else
     2550        return CSSFontValue::create();
     2551
     2552    if (auto italic = fontStyleKeyword(fontDescription.italic()))
     2553        computedFont->style = CSSValuePool::singleton().createIdentifierValue(italic.value());
     2554    else
     2555        return CSSFontValue::create();
     2556
     2557    return computedFont;
    25572558}
    25582559
     
    29072908            return cssValuePool.createValue(style->floating());
    29082909        case CSSPropertyFont: {
    2909             auto computedFont = CSSFontValue::create();
    2910             computedFont->style = fontStyleFromStyle(*style);
    2911             if (style->fontDescription().variantCaps() == FontVariantCaps::Small)
    2912                 computedFont->variant = CSSValuePool::singleton().createIdentifierValue(CSSValueSmallCaps);
    2913             else
    2914                 computedFont->variant = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
    2915             computedFont->weight = fontWeightFromStyle(*style);
    2916             computedFont->stretch = fontStretchFromStyle(*style);
     2910            auto computedFont = fontShorthandValueForSelectionProperties(style->fontDescription());
    29172911            computedFont->size = fontSizeFromStyle(*style);
    29182912            computedFont->lineHeight = lineHeightFromStyle(*style);
  • trunk/Source/WebCore/css/CSSFontFace.cpp

    r213436 r213464  
    125125}
    126126
    127 std::optional<FontTraitsMask> CSSFontFace::calculateStyleMask(CSSValue& style)
    128 {
    129     if (!is<CSSPrimitiveValue>(style))
    130         return std::nullopt;
    131 
    132     switch (downcast<CSSPrimitiveValue>(style).valueID()) {
    133     case CSSValueNormal:
    134         return FontStyleNormalMask;
    135     case CSSValueItalic:
    136     case CSSValueOblique:
    137         return FontStyleItalicMask;
    138     default:
    139         return FontStyleNormalMask;
    140     }
    141 
    142     return FontStyleNormalMask;
    143 }
    144 
    145 bool CSSFontFace::setStyle(CSSValue& style)
    146 {
    147     if (auto mask = calculateStyleMask(style)) {
    148         m_traitsMask = static_cast<FontTraitsMask>((static_cast<unsigned>(m_traitsMask) & (~FontStyleMask)) | mask.value());
    149 
    150         if (m_cssConnection)
    151             m_cssConnection->mutableProperties().setProperty(CSSPropertyFontStyle, &style);
    152 
    153         iterateClients(m_clients, [&](Client& client) {
    154             client.fontPropertyChanged(*this);
    155         });
    156 
    157         return true;
    158     }
    159     return false;
    160 }
    161 
    162 std::optional<FontTraitsMask> CSSFontFace::calculateWeightMask(CSSValue& weight)
    163 {
    164     if (!is<CSSPrimitiveValue>(weight))
    165         return std::nullopt;
    166 
    167     switch (downcast<CSSPrimitiveValue>(weight).valueID()) {
    168     case CSSValueBold:
    169     case CSSValueBolder:
    170     case CSSValue700:
    171         return FontWeight700Mask;
    172     case CSSValueNormal:
    173     case CSSValue400:
    174         return FontWeight400Mask;
    175     case CSSValue900:
    176         return FontWeight900Mask;
    177     case CSSValue800:
    178         return FontWeight800Mask;
    179     case CSSValue600:
    180         return FontWeight600Mask;
    181     case CSSValue500:
    182         return FontWeight500Mask;
    183     case CSSValue300:
    184         return FontWeight300Mask;
    185     case CSSValueLighter:
    186     case CSSValue200:
    187         return FontWeight200Mask;
    188     case CSSValue100:
    189         return FontWeight100Mask;
    190     default:
    191         return FontWeight400Mask;
    192     }
    193 
    194     return FontWeight400Mask;
    195 }
    196 
    197 std::optional<FontSelectionValue> CSSFontFace::calculateStretch(CSSValue& stretch)
    198 {
    199     if (!is<CSSPrimitiveValue>(stretch))
    200         return std::nullopt;
    201 
    202     const auto& primitiveValue = downcast<CSSPrimitiveValue>(stretch);
     127static FontSelectionRange calculateWeightRange(CSSValue& value)
     128{
     129    // FIXME: Parse range-based values.
     130    ASSERT(is<CSSPrimitiveValue>(value));
     131    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     132
     133    FontSelectionValue result;
     134    if (primitiveValue.isNumber()) {
     135        result = FontSelectionValue::clampFloat(primitiveValue.floatValue());
     136        return { result, result };
     137    }
     138
     139    ASSERT(primitiveValue.isValueID());
     140    if (auto value = fontWeightValue(primitiveValue.valueID()))
     141        result = value.value();
     142    else {
     143        ASSERT_NOT_REACHED();
     144        result = normalWeightValue();
     145    }
     146
     147    return { result, result };
     148}
     149
     150void CSSFontFace::setWeight(CSSValue& weight)
     151{
     152    auto range = calculateWeightRange(weight);
     153    setWeight(range);
     154
     155    if (m_cssConnection)
     156        m_cssConnection->mutableProperties().setProperty(CSSPropertyFontWeight, &weight);
     157
     158    iterateClients(m_clients, [&](Client& client) {
     159        client.fontPropertyChanged(*this);
     160    });
     161}
     162
     163static FontSelectionRange calculateStretchRange(CSSValue& value)
     164{
     165    // FIXME: Parse range-based values.
     166    ASSERT(is<CSSPrimitiveValue>(value));
     167    const auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     168
     169    FontSelectionValue result;
    203170    if (primitiveValue.isPercentage() || primitiveValue.isNumber()) {
    204         auto value = primitiveValue.floatValue();
    205         if (value < static_cast<float>(FontSelectionValue::minimumValue()))
    206             return FontSelectionValue::minimumValue();
    207         if (value > static_cast<float>(FontSelectionValue::maximumValue()))
    208             return FontSelectionValue::maximumValue();
    209         return FontSelectionValue(value);
    210     }
    211 
    212     switch (primitiveValue.valueID()) {
    213     case CSSValueUltraCondensed:
    214         return FontSelectionValue(50);
    215     case CSSValueExtraCondensed:
    216         return FontSelectionValue(62.5f);
    217     case CSSValueCondensed:
    218         return FontSelectionValue(75);
    219     case CSSValueSemiCondensed:
    220         return FontSelectionValue(87.5f);
    221     case CSSValueNormal:
    222         return FontSelectionValue(100);
    223     case CSSValueSemiExpanded:
    224         return FontSelectionValue(112.5f);
    225     case CSSValueExpanded:
    226         return FontSelectionValue(125);
    227     case CSSValueExtraExpanded:
    228         return FontSelectionValue(150);
    229     case CSSValueUltraExpanded:
    230         return FontSelectionValue(200);
    231     default:
     171        result = FontSelectionValue::clampFloat(primitiveValue.floatValue());
     172        return { result, result };
     173    }
     174
     175    ASSERT(primitiveValue.isValueID());
     176    if (auto value = fontStretchValue(primitiveValue.valueID()))
     177        result = value.value();
     178    else {
    232179        ASSERT_NOT_REACHED();
    233         return std::nullopt;
    234     }
    235 }
    236 
    237 bool CSSFontFace::setWeight(CSSValue& weight)
    238 {
    239     if (auto mask = calculateWeightMask(weight)) {
    240         m_traitsMask = static_cast<FontTraitsMask>((static_cast<unsigned>(m_traitsMask) & (~FontWeightMask)) | mask.value());
    241 
    242         if (m_cssConnection)
    243             m_cssConnection->mutableProperties().setProperty(CSSPropertyFontWeight, &weight);
    244 
    245         iterateClients(m_clients, [&](Client& client) {
    246             client.fontPropertyChanged(*this);
    247         });
    248 
    249         return true;
    250     }
    251 
    252     return false;
    253 }
    254 
    255 bool CSSFontFace::setStretch(CSSValue& stretch)
    256 {
    257     if (auto parsedStretch = calculateStretch(stretch)) {
    258         m_stretch = FontSelectionRange(parsedStretch.value(), parsedStretch.value());
    259 
    260         if (m_cssConnection)
    261             m_cssConnection->mutableProperties().setProperty(CSSPropertyFontStretch, &stretch);
    262 
    263         iterateClients(m_clients, [&](Client& client) {
    264             client.fontPropertyChanged(*this);
    265         });
    266 
    267         return true;
    268     }
    269 
    270     return false;
     180        result = normalStretchValue();
     181    }
     182
     183    return { result, result };
     184}
     185
     186void CSSFontFace::setStretch(CSSValue& style)
     187{
     188    auto range = calculateStretchRange(style);
     189    setStretch(range);
     190
     191    if (m_cssConnection)
     192        m_cssConnection->mutableProperties().setProperty(CSSPropertyFontStretch, &style);
     193
     194    iterateClients(m_clients, [&](Client& client) {
     195        client.fontPropertyChanged(*this);
     196    });
     197}
     198
     199static FontSelectionRange calculateItalicRange(CSSValue& value)
     200{
     201    // FIXME: Parse range-based values.
     202    ASSERT(is<CSSPrimitiveValue>(value));
     203    const auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     204
     205    FontSelectionValue result;
     206    if (primitiveValue.isAngle() || primitiveValue.isNumber() || primitiveValue.isCalculated()) {
     207        result = FontSelectionValue::clampFloat(primitiveValue.floatValue(CSSPrimitiveValue::CSS_DEG));
     208        return { result, result };
     209    }
     210
     211    ASSERT(primitiveValue.isValueID());
     212    if (auto value = fontStyleValue(primitiveValue.valueID()))
     213        result = value.value();
     214    else {
     215        ASSERT_NOT_REACHED();
     216        result = normalItalicValue();
     217    }
     218    return { result, result };
     219}
     220
     221void CSSFontFace::setStyle(CSSValue& style)
     222{
     223    auto range = calculateItalicRange(style);
     224    setStyle(range);
     225
     226    if (m_cssConnection)
     227        m_cssConnection->mutableProperties().setProperty(CSSPropertyFontStyle, &style);
     228
     229    iterateClients(m_clients, [&](Client& client) {
     230        client.fontPropertyChanged(*this);
     231    });
    271232}
    272233
  • trunk/Source/WebCore/css/CSSFontFace.h

    r213436 r213464  
    2828#include "CSSFontFaceRule.h"
    2929#include "FontSelectionAlgorithm.h"
     30#include "FontSelectionValueInlines.h"
    3031#include "FontTaggedSettings.h"
    3132#include "TextFlags.h"
     
    6566    // Callers only call this with known-valid CSS values.
    6667    bool setFamilies(CSSValue&);
    67     bool setStyle(CSSValue&);
    68     bool setWeight(CSSValue&);
    69     bool setStretch(CSSValue&);
     68    void setStyle(CSSValue&);
     69    void setWeight(CSSValue&);
     70    void setStretch(CSSValue&);
    7071    bool setUnicodeRange(CSSValue&);
    7172    bool setVariantLigatures(CSSValue&);
     
    8081    struct UnicodeRange;
    8182    const CSSValueList* families() const { return m_families.get(); }
    82     FontTraitsMask traitsMask() const { return m_traitsMask; }
    83     FontSelectionRange stretch() const { return m_stretch; }
     83    FontSelectionRange weight() const { return m_fontSelectionCapabilities.weight; }
     84    FontSelectionRange stretch() const { return m_fontSelectionCapabilities.width; }
     85    FontSelectionRange italic() const { return m_fontSelectionCapabilities.slope; }
     86    FontSelectionCapabilities fontSelectionCapabilities() const { return m_fontSelectionCapabilities; }
    8487    const Vector<UnicodeRange>& ranges() const { return m_ranges; }
    8588    const FontFeatureSettings& featureSettings() const { return m_featureSettings; }
    8689    const FontVariantSettings& variantSettings() const { return m_variantSettings; }
    8790    void setVariantSettings(const FontVariantSettings& variantSettings) { m_variantSettings = variantSettings; }
    88     void setTraitsMask(FontTraitsMask traitsMask) { m_traitsMask = traitsMask; }
    89     void setStretch(FontSelectionRange stretch) { m_stretch = stretch; }
     91    void setWeight(FontSelectionRange weight) { m_fontSelectionCapabilities.weight = weight; }
     92    void setStretch(FontSelectionRange stretch) { m_fontSelectionCapabilities.width = stretch; }
     93    void setStyle(FontSelectionRange italic) { m_fontSelectionCapabilities.slope = italic; }
     94    void setFontSelectionCapabilities(FontSelectionCapabilities capabilities) { m_fontSelectionCapabilities = capabilities; }
    9095    bool isLocalFallback() const { return m_isLocalFallback; }
    9196    Status status() const { return m_status; }
    9297    StyleRuleFontFace* cssConnection() const { return m_cssConnection.get(); }
    93     FontSelectionCapabilities fontSelectionCapabilities() const { return fontSelectionCapabilitiesForTraitsMask(m_traitsMask, m_stretch); }
    94 
    95     static std::optional<FontTraitsMask> calculateStyleMask(CSSValue& style);
    96     static std::optional<FontTraitsMask> calculateWeightMask(CSSValue& weight);
    97     static std::optional<FontSelectionValue> calculateStretch(CSSValue& stretch);
    9898
    9999    class Client;
     
    169169
    170170    RefPtr<CSSValueList> m_families;
    171     FontTraitsMask m_traitsMask { static_cast<FontTraitsMask>(FontStyleNormalMask | FontWeight400Mask) };
    172171    Vector<UnicodeRange> m_ranges;
    173172    FontFeatureSettings m_featureSettings;
     
    179178    HashSet<Client*> m_clients;
    180179    WeakPtr<FontFace> m_wrapper;
     180    FontSelectionCapabilities m_fontSelectionCapabilities;
    181181    Status m_status { Status::Pending };
    182     FontSelectionRange m_stretch { FontSelectionValue(100), FontSelectionValue(100) };
    183182    bool m_isLocalFallback { false };
    184183    bool m_sourcesPopulated { false };
  • trunk/Source/WebCore/css/CSSFontFaceSet.cpp

    r213436 r213464  
    102102        return;
    103103
    104     Vector<FontCache::TraitsAndStretch> traitsAndStretch = FontCache::singleton().getTraitsAndStretchInFamily(familyName);
    105     if (traitsAndStretch.isEmpty())
     104    Vector<FontSelectionCapabilities> capabilities = FontCache::singleton().getFontSelectionCapabilitiesInFamily(familyName);
     105    if (capabilities.isEmpty())
    106106        return;
    107107
    108108    Vector<Ref<CSSFontFace>> faces;
    109     for (auto item : traitsAndStretch) {
     109    for (auto item : capabilities) {
    110110        Ref<CSSFontFace> face = CSSFontFace::create(nullptr, nullptr, nullptr, true);
    111111       
     
    113113        familyList->append(CSSValuePool::singleton().createFontFamilyValue(familyName));
    114114        face->setFamilies(familyList.get());
    115         face->setTraitsMask(item.traits);
    116         face->setStretch(item.stretch);
     115        face->setFontSelectionCapabilities(item);
    117116        face->adoptSource(std::make_unique<CSSFontFaceSource>(face.get(), familyName));
    118117        ASSERT(!face->allSourcesFailed());
     
    288287}
    289288
    290 static std::optional<FontTraitsMask> computeFontTraitsMask(MutableStyleProperties& style)
    291 {
     289static std::optional<FontSelectionValue> calculateWeightValue(CSSValue& weight)
     290{
     291    if (!is<CSSPrimitiveValue>(weight))
     292        return std::nullopt;
     293
     294    auto& primitiveWeight = downcast<CSSPrimitiveValue>(weight);
     295    if (primitiveWeight.isNumber())
     296        return FontSelectionValue::clampFloat(primitiveWeight.floatValue());
     297
     298    if (!primitiveWeight.isValueID())
     299        return std::nullopt;
     300
     301    if (auto value = fontWeightValue(primitiveWeight.valueID()))
     302        return value.value();
     303    ASSERT_NOT_REACHED();
     304    return normalWeightValue();
     305}
     306
     307static std::optional<FontSelectionValue> calculateStretchValue(CSSValue& style)
     308{
     309    if (!is<CSSPrimitiveValue>(style))
     310        return std::nullopt;
     311
     312    auto& primitiveStretch = downcast<CSSPrimitiveValue>(style);
     313    if (primitiveStretch.isNumber() || primitiveStretch.isPercentage())
     314        return FontSelectionValue::clampFloat(primitiveStretch.floatValue());
     315
     316    if (!primitiveStretch.isValueID())
     317        return std::nullopt;
     318
     319    if (auto value = fontStretchValue(primitiveStretch.valueID()))
     320        return value.value();
     321    return normalStretchValue();
     322}
     323
     324static std::optional<FontSelectionValue> calculateStyleValue(CSSValue& style)
     325{
     326    if (!is<CSSPrimitiveValue>(style))
     327        return std::nullopt;
     328
     329    auto& primitiveSlant = downcast<CSSPrimitiveValue>(style);
     330    if (primitiveSlant.isNumber() || primitiveSlant.isAngle())
     331        return FontSelectionValue::clampFloat(primitiveSlant.floatValue());
     332
     333    if (!primitiveSlant.isValueID())
     334        return std::nullopt;
     335
     336    if (auto value = fontStyleValue(downcast<CSSPrimitiveValue>(style).valueID()))
     337        return value.value();
     338    return normalItalicValue();
     339}
     340
     341static std::optional<FontSelectionRequest> computeFontSelectionRequest(MutableStyleProperties& style)
     342{
     343    RefPtr<CSSValue> weightValue = style.getPropertyCSSValue(CSSPropertyFontWeight).get();
     344    if (!weightValue)
     345        weightValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
     346
     347    FontSelectionValue weightSelectionValue;
     348    if (auto weightOptional = calculateWeightValue(*weightValue))
     349        weightSelectionValue = weightOptional.value();
     350    else
     351        return std::nullopt;
     352
     353    RefPtr<CSSValue> stretchValue = style.getPropertyCSSValue(CSSPropertyFontStretch).get();
     354    if (!stretchValue)
     355        stretchValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
     356
     357    FontSelectionValue stretchSelectionValue;
     358    if (auto stretchOptional = calculateStretchValue(*weightValue))
     359        stretchSelectionValue = stretchOptional.value();
     360    else
     361        return std::nullopt;
     362
    292363    RefPtr<CSSValue> styleValue = style.getPropertyCSSValue(CSSPropertyFontStyle).get();
    293364    if (!styleValue)
    294365        styleValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
    295366
    296     FontTraitsMask styleMask;
    297     if (auto styleMaskOptional = CSSFontFace::calculateStyleMask(*styleValue))
    298         styleMask = styleMaskOptional.value();
     367    FontSelectionValue styleSelectionValue;
     368    if (auto styleOptional = calculateStyleValue(*styleValue))
     369        styleSelectionValue = styleOptional.value();
    299370    else
    300371        return std::nullopt;
    301372
    302     RefPtr<CSSValue> weightValue = style.getPropertyCSSValue(CSSPropertyFontWeight).get();
    303     if (!weightValue)
    304         weightValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
    305 
    306     FontTraitsMask weightMask;
    307     if (auto weightMaskOptional = CSSFontFace::calculateWeightMask(*weightValue))
    308         weightMask = weightMaskOptional.value();
    309     else
    310         return std::nullopt;
    311 
    312     return static_cast<FontTraitsMask>(static_cast<unsigned>(styleMask) | static_cast<unsigned>(weightMask));
    313 }
    314 
    315 static std::optional<FontSelectionValue> computeFontStretch(MutableStyleProperties& style)
    316 {
    317     RefPtr<CSSValue> stretchValue = style.getPropertyCSSValue(CSSPropertyFontStretch).get();
    318     if (!stretchValue)
    319         stretchValue = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal).ptr();
    320 
    321     if (auto stretchOptional = CSSFontFace::calculateStretch(*stretchValue))
    322         return stretchOptional.value();
    323     return std::nullopt;
     373    return {{ weightSelectionValue, stretchSelectionValue, styleSelectionValue }};
    324374}
    325375
     
    347397        return Exception { SYNTAX_ERR };
    348398
    349     FontTraitsMask fontTraitsMask;
    350     if (auto maskOptional = computeFontTraitsMask(style.get()))
    351         fontTraitsMask = maskOptional.value();
    352     else
    353         return Exception { SYNTAX_ERR };
    354 
    355     FontSelectionValue stretch;
    356     if (auto stretchOptional = computeFontStretch(style.get()))
    357         stretch = stretchOptional.value();
     399    FontSelectionRequest request;
     400    if (auto fontSelectionRequestOptional = computeFontSelectionRequest(style.get()))
     401        request = fontSelectionRequestOptional.value();
    358402    else
    359403        return Exception { SYNTAX_ERR };
     
    378422        bool found = false;
    379423        for (auto& family : familyOrder) {
    380             auto* faces = fontFace(fontTraitsMask, stretch, family);
     424            auto* faces = fontFace(request, family);
    381425            if (!faces)
    382426                continue;
     
    413457}
    414458
    415 CSSSegmentedFontFace* CSSFontFaceSet::fontFace(FontTraitsMask traitsMask, FontSelectionValue stretch, const AtomicString& family)
     459CSSSegmentedFontFace* CSSFontFaceSet::fontFace(FontSelectionRequest request, const AtomicString& family)
    416460{
    417461    auto iterator = m_facesLookupTable.find(family);
     
    420464    auto& familyFontFaces = iterator->value;
    421465
    422     auto& segmentedFontFaceCache = m_cache.add(family, HashMap<unsigned, RefPtr<CSSSegmentedFontFace>>()).iterator->value;
    423 
    424     auto& face = segmentedFontFaceCache.add(traitsMask, nullptr).iterator->value;
     466    auto& segmentedFontFaceCache = m_cache.add(family, FontSelectionHashMap()).iterator->value;
     467
     468    auto& face = segmentedFontFaceCache.add(request, nullptr).iterator->value;
    425469    if (face)
    426470        return face.get();
     
    431475    for (int i = familyFontFaces.size() - 1; i >= 0; --i) {
    432476        CSSFontFace& candidate = familyFontFaces[i];
    433         unsigned candidateTraitsMask = candidate.traitsMask();
    434         if ((traitsMask & FontStyleNormalMask) && !(candidateTraitsMask & FontStyleNormalMask))
     477        auto capabilities = candidate.fontSelectionCapabilities();
     478        if (!isItalic(request.slope) && isItalic(capabilities.slope.minimum))
    435479            continue;
    436480        candidateFontFaces.append(candidate);
     
    440484    if (localIterator != m_locallyInstalledFacesLookupTable.end()) {
    441485        for (auto& candidate : localIterator->value) {
    442             unsigned candidateTraitsMask = candidate->traitsMask();
    443             if ((traitsMask & FontStyleNormalMask) && !(candidateTraitsMask & FontStyleNormalMask))
     486            auto capabilities = candidate->fontSelectionCapabilities();
     487            if (!isItalic(request.slope) && isItalic(capabilities.slope.minimum))
    444488                continue;
    445489            candidateFontFaces.append(candidate);
     
    452496        for (auto& face : candidateFontFaces)
    453497            capabilities.uncheckedAppend(face.get().fontSelectionCapabilities());
    454         FontSelectionAlgorithm fontSelectionAlgorithm(fontSelectionRequestForTraitsMask(traitsMask, stretch), capabilities);
     498        FontSelectionAlgorithm fontSelectionAlgorithm(request, capabilities);
    455499        std::stable_sort(candidateFontFaces.begin(), candidateFontFaces.end(), [&fontSelectionAlgorithm](const CSSFontFace& first, const CSSFontFace& second) {
    456500            auto firstCapabilities = first.fontSelectionCapabilities();
  • trunk/Source/WebCore/css/CSSFontFaceSet.h

    r213436 r213464  
    6868    ExceptionOr<bool> check(const String& font, const String& text);
    6969
    70     CSSSegmentedFontFace* fontFace(FontTraitsMask, FontSelectionValue stretch, const AtomicString& family);
     70    CSSSegmentedFontFace* fontFace(FontSelectionRequest, const AtomicString& family);
    7171
    7272    enum class Status { Loading, Loaded };
     
    9999    HashMap<String, Vector<Ref<CSSFontFace>>, ASCIICaseInsensitiveHash> m_facesLookupTable;
    100100    HashMap<String, Vector<Ref<CSSFontFace>>, ASCIICaseInsensitiveHash> m_locallyInstalledFacesLookupTable;
    101     HashMap<String, HashMap<unsigned, RefPtr<CSSSegmentedFontFace>>, ASCIICaseInsensitiveHash> m_cache;
     101    typedef HashMap<FontSelectionRequestKey, RefPtr<CSSSegmentedFontFace>, FontSelectionRequestKeyHash, WTF::SimpleClassHashTraits<FontSelectionRequestKey>> FontSelectionHashMap;
     102    HashMap<String, FontSelectionHashMap, ASCIICaseInsensitiveHash> m_cache;
    102103    HashMap<StyleRuleFontFace*, CSSFontFace*> m_constituentCSSConnections;
    103104    size_t m_facesPartitionIndex { 0 }; // All entries in m_faces before this index are CSS-connected.
  • trunk/Source/WebCore/css/CSSFontSelector.cpp

    r213436 r213464  
    183183    if (!fontFace->setFamilies(*fontFamily))
    184184        return;
    185     if (!fontFace->setStyle(*fontStyle))
    186         return;
    187     if (!fontFace->setWeight(*fontWeight))
    188         return;
    189     if (!fontFace->setStretch(*fontStretch))
    190         return;
     185    fontFace->setStyle(*fontStyle);
     186    fontFace->setWeight(*fontWeight);
     187    fontFace->setStretch(*fontStretch);
    191188    if (rangeList && !fontFace->setUnicodeRange(*rangeList))
    192189        return;
     
    302299
    303300    AtomicString familyForLookup = resolveGenericFamilyFirst ? resolveGenericFamily(m_document, fontDescription, familyName) : familyName;
    304     auto* face = m_cssFontFaceSet->fontFace(fontDescription.traitsMask(), fontDescription.stretch(), familyForLookup);
     301    auto* face = m_cssFontFaceSet->fontFace(fontDescription.fontSelectionRequest(), familyForLookup);
    305302    if (!face) {
    306303        if (!resolveGenericFamilyFirst)
  • trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h

    r212629 r213464  
    36783678    ASSERT_NOT_REACHED();
    36793679    return AutoSmoothing;
    3680 }
    3681 
    3682 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontWeight weight)
    3683     : CSSValue(PrimitiveClass)
    3684 {
    3685     m_primitiveUnitType = CSS_VALUE_ID;
    3686     switch (weight) {
    3687     case FontWeight900:
    3688         m_value.valueID = CSSValue900;
    3689         return;
    3690     case FontWeight800:
    3691         m_value.valueID = CSSValue800;
    3692         return;
    3693     case FontWeight700:
    3694         m_value.valueID = CSSValue700;
    3695         return;
    3696     case FontWeight600:
    3697         m_value.valueID = CSSValue600;
    3698         return;
    3699     case FontWeight500:
    3700         m_value.valueID = CSSValue500;
    3701         return;
    3702     case FontWeight400:
    3703         m_value.valueID = CSSValue400;
    3704         return;
    3705     case FontWeight300:
    3706         m_value.valueID = CSSValue300;
    3707         return;
    3708     case FontWeight200:
    3709         m_value.valueID = CSSValue200;
    3710         return;
    3711     case FontWeight100:
    3712         m_value.valueID = CSSValue100;
    3713         return;
    3714     }
    3715 
    3716     ASSERT_NOT_REACHED();
    3717     m_value.valueID = CSSValueNormal;
    3718 }
    3719 
    3720 template<> inline CSSPrimitiveValue::operator FontWeight() const
    3721 {
    3722     ASSERT(isValueID());
    3723 
    3724     switch (m_value.valueID) {
    3725     case CSSValueBold:
    3726         return FontWeightBold;
    3727     case CSSValueNormal:
    3728         return FontWeightNormal;
    3729     case CSSValue900:
    3730         return FontWeight900;
    3731     case CSSValue800:
    3732         return FontWeight800;
    3733     case CSSValue700:
    3734         return FontWeight700;
    3735     case CSSValue600:
    3736         return FontWeight600;
    3737     case CSSValue500:
    3738         return FontWeight500;
    3739     case CSSValue400:
    3740         return FontWeight400;
    3741     case CSSValue300:
    3742         return FontWeight300;
    3743     case CSSValue200:
    3744         return FontWeight200;
    3745     case CSSValue100:
    3746         return FontWeight100;
    3747     default:
    3748         break;
    3749     }
    3750 
    3751     ASSERT_NOT_REACHED();
    3752     return FontWeightNormal;
    3753 }
    3754 
    3755 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontItalic italic)
    3756     : CSSValue(PrimitiveClass)
    3757 {
    3758     m_primitiveUnitType = CSS_VALUE_ID;
    3759     switch (italic) {
    3760     case FontItalicOff:
    3761         m_value.valueID = CSSValueNormal;
    3762         return;
    3763     case FontItalicOn:
    3764         m_value.valueID = CSSValueItalic;
    3765         return;
    3766     }
    3767 
    3768     ASSERT_NOT_REACHED();
    3769     m_value.valueID = CSSValueNormal;
    3770 }
    3771 
    3772 template<> inline CSSPrimitiveValue::operator FontItalic() const
    3773 {
    3774     ASSERT(isValueID());
    3775 
    3776     switch (m_value.valueID) {
    3777     case CSSValueOblique:
    3778     // FIXME: oblique is the same as italic for the moment...
    3779     case CSSValueItalic:
    3780         return FontItalicOn;
    3781     case CSSValueNormal:
    3782         return FontItalicOff;
    3783     default:
    3784         break;
    3785     }
    3786     ASSERT_NOT_REACHED();
    3787     return FontItalicOff;
    37883680}
    37893681
  • trunk/Source/WebCore/css/CSSProperties.json

    r213267 r213464  
    298298                "name-for-methods": "Italic",
    299299                "font-property": true,
    300                 "high-priority": true
     300                "high-priority": true,
     301                "converter": "FontStyle"
    301302            },
    302303            "specification": {
     
    308309            "inherited": true,
    309310            "codegen-properties": {
    310                 "custom": "All",
    311                 "high-priority": true
     311                "name-for-methods": "Weight",
     312                "font-property": true,
     313                "high-priority": true,
     314                "converter": "FontWeight"
    312315            },
    313316            "specification": {
  • trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp

    r212513 r213464  
    108108FontRanges CSSSegmentedFontFace::fontRanges(const FontDescription& fontDescription)
    109109{
    110     FontTraitsMask desiredTraitsMask = fontDescription.traitsMask();
     110    auto desiredRequest = fontDescription.fontSelectionRequest();
    111111
    112112    auto addResult = m_cache.add(FontDescriptionKey(fontDescription), FontRanges());
     
    118118                continue;
    119119
    120             FontTraitsMask traitsMask = face->traitsMask();
    121             bool syntheticBold = (fontDescription.fontSynthesis() & FontSynthesisWeight) && !(traitsMask & (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask)) && (desiredTraitsMask & (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask));
    122             bool syntheticItalic = (fontDescription.fontSynthesis() & FontSynthesisStyle) && !(traitsMask & FontStyleItalicMask) && (desiredTraitsMask & FontStyleItalicMask);
     120            auto selectionCapabilities = face->fontSelectionCapabilities();
     121            bool syntheticBold = (fontDescription.fontSynthesis() & FontSynthesisWeight) && !isFontWeightBold(selectionCapabilities.weight.maximum) && isFontWeightBold(desiredRequest.weight);
     122            bool syntheticItalic = (fontDescription.fontSynthesis() & FontSynthesisStyle) && !isItalic(selectionCapabilities.slope.maximum) && isItalic(desiredRequest.slope);
    123123
    124124            // This doesn't trigger an unnecessary download because every element styled with this family will need font metrics in order to run layout.
  • trunk/Source/WebCore/css/CSSValueKeywords.in

    r212985 r213464  
    126126bolder
    127127lighter
    128 100
    129 200
    130 300
    131 400
    132 500
    133 600
    134 700
    135 800
    136 900
     128
    137129//
    138130// CSS_PROP_FONT_SIZE:
  • trunk/Source/WebCore/css/FontFace.cpp

    r213436 r213464  
    164164        return Exception { SYNTAX_ERR };
    165165
    166     bool success = false;
    167     if (auto value = parseString(style, CSSPropertyFontStyle))
    168         success = m_backing->setStyle(*value);
    169     if (!success)
    170         return Exception { SYNTAX_ERR };
    171     return { };
     166    if (auto value = parseString(style, CSSPropertyFontStyle)) {
     167        m_backing->setStyle(*value);
     168        return { };
     169    }
     170    return Exception { SYNTAX_ERR };
    172171}
    173172
     
    177176        return Exception { SYNTAX_ERR };
    178177
    179     bool success = false;
    180     if (auto value = parseString(weight, CSSPropertyFontWeight))
    181         success = m_backing->setWeight(*value);
    182     if (!success)
    183         return Exception { SYNTAX_ERR };
    184     return { };
     178    if (auto value = parseString(weight, CSSPropertyFontWeight)) {
     179        m_backing->setWeight(*value);
     180        return { };
     181    }
     182    return Exception { SYNTAX_ERR };
    185183}
    186184
     
    190188        return Exception { SYNTAX_ERR };
    191189
    192     bool success = false;
    193     if (auto value = parseString(stretch, CSSPropertyFontStretch))
    194         success = m_backing->setStretch(*value);
    195     if (!success)
    196         return Exception { SYNTAX_ERR };
    197     return { };
     190    if (auto value = parseString(stretch, CSSPropertyFontStretch)) {
     191        m_backing->setStretch(*value);
     192        return { };
     193    }
     194    return Exception { SYNTAX_ERR };
    198195}
    199196
     
    284281}
    285282
     283static inline bool rangeIsSingleValue(FontSelectionRange range, FontSelectionValue value)
     284{
     285    return range.minimum == value && range.maximum == value;
     286};
     287
    286288String FontFace::style() const
    287289{
    288290    m_backing->updateStyleIfNeeded();
    289     switch (m_backing->traitsMask() & FontStyleMask) {
    290     case FontStyleNormalMask:
    291         return String("normal", String::ConstructFromLiteral);
    292     case FontStyleItalicMask:
    293         return String("italic", String::ConstructFromLiteral);
    294     }
    295     ASSERT_NOT_REACHED();
    296     return String("normal", String::ConstructFromLiteral);
     291    auto style = m_backing->italic();
     292
     293    if (rangeIsSingleValue(style, italicValue()))
     294        return ASCIILiteral("italic");
     295    if (rangeIsSingleValue(style, normalItalicValue()))
     296        return ASCIILiteral("normal");
     297
     298    if (style.minimum == style.maximum) {
     299        auto value = static_cast<float>(style.minimum);
     300        if (value >= 0) {
     301            auto floored = std::floor(value);
     302            if (floored == value)
     303                return String::format("oblique %ddeg", static_cast<int>(floored));
     304        }
     305        return String::format("oblique %fdeg", static_cast<float>(style.minimum));
     306    }
     307
     308    return String::format("oblique %fdeg-%fdeg", static_cast<float>(style.minimum), static_cast<float>(style.maximum));
    297309}
    298310
     
    300312{
    301313    m_backing->updateStyleIfNeeded();
    302     switch (m_backing->traitsMask() & FontWeightMask) {
    303     case FontWeight100Mask:
    304         return String("100", String::ConstructFromLiteral);
    305     case FontWeight200Mask:
    306         return String("200", String::ConstructFromLiteral);
    307     case FontWeight300Mask:
    308         return String("300", String::ConstructFromLiteral);
    309     case FontWeight400Mask:
    310         return String("normal", String::ConstructFromLiteral);
    311     case FontWeight500Mask:
    312         return String("500", String::ConstructFromLiteral);
    313     case FontWeight600Mask:
    314         return String("600", String::ConstructFromLiteral);
    315     case FontWeight700Mask:
    316         return String("bold", String::ConstructFromLiteral);
    317     case FontWeight800Mask:
    318         return String("800", String::ConstructFromLiteral);
    319     case FontWeight900Mask:
    320         return String("900", String::ConstructFromLiteral);
    321     }
    322     ASSERT_NOT_REACHED();
    323     return String("normal", String::ConstructFromLiteral);
     314    auto weight = m_backing->weight();
     315
     316    if (rangeIsSingleValue(weight, normalWeightValue()))
     317        return ASCIILiteral("normal");
     318    if (rangeIsSingleValue(weight, boldWeightValue()))
     319        return ASCIILiteral("bold");
     320
     321    if (weight.minimum == weight.maximum) {
     322        auto value = static_cast<float>(weight.minimum);
     323        if (value >= 0) {
     324            auto floored = std::floor(value);
     325            if (floored == value)
     326                return String::format("%d", static_cast<int>(floored));
     327        }
     328        return String::format("%f", static_cast<float>(weight.minimum));
     329    }
     330
     331    return String::format("%f-%f", static_cast<float>(weight.minimum), static_cast<float>(weight.maximum));
    324332}
    325333
     
    329337    auto stretch = m_backing->stretch();
    330338
    331     auto rangeIsSingleValue = [](FontSelectionRange range, FontSelectionValue value) -> bool {
    332         return range.minimum == value && range.maximum == value;
    333     };
    334 
    335     if (rangeIsSingleValue(stretch, FontSelectionValue(50)))
     339    if (rangeIsSingleValue(stretch, ultraCondensedStretchValue()))
    336340        return ASCIILiteral("ultra-condensed");
    337     if (rangeIsSingleValue(stretch, FontSelectionValue(62.5f)))
     341    if (rangeIsSingleValue(stretch, extraCondensedStretchValue()))
    338342        return ASCIILiteral("extra-condensed");
    339     if (rangeIsSingleValue(stretch, FontSelectionValue(75)))
     343    if (rangeIsSingleValue(stretch, condensedStretchValue()))
    340344        return ASCIILiteral("condensed");
    341     if (rangeIsSingleValue(stretch, FontSelectionValue(87.5f)))
     345    if (rangeIsSingleValue(stretch, semiCondensedStretchValue()))
    342346        return ASCIILiteral("semi-condensed");
    343     if (rangeIsSingleValue(stretch, FontSelectionValue(100)))
     347    if (rangeIsSingleValue(stretch, normalStretchValue()))
    344348        return ASCIILiteral("normal");
    345     if (rangeIsSingleValue(stretch, FontSelectionValue(112.5f)))
     349    if (rangeIsSingleValue(stretch, semiExpandedStretchValue()))
    346350        return ASCIILiteral("semi-expanded");
    347     if (rangeIsSingleValue(stretch, FontSelectionValue(125)))
     351    if (rangeIsSingleValue(stretch, expandedStretchValue()))
    348352        return ASCIILiteral("expanded");
    349     if (rangeIsSingleValue(stretch, FontSelectionValue(150)))
     353    if (rangeIsSingleValue(stretch, extraExpandedStretchValue()))
    350354        return ASCIILiteral("extra-expanded");
    351     if (rangeIsSingleValue(stretch, FontSelectionValue(200)))
     355    if (rangeIsSingleValue(stretch, ultraExpandedStretchValue()))
    352356        return ASCIILiteral("ultra-expanded");
    353357
    354     return String::format("%f-%f", static_cast<float>(stretch.minimum), static_cast<float>(stretch.maximum));
     358    if (stretch.minimum == stretch.maximum) {
     359        auto value = static_cast<float>(stretch.minimum);
     360        if (value >= 0) {
     361            auto floored = std::floor(value);
     362            if (floored == value)
     363                return String::format("%d%%", static_cast<int>(floored));
     364        }
     365        return String::format("%f%%", static_cast<float>(stretch.minimum));
     366    }
     367
     368    return String::format("%f%%-%f%%", static_cast<float>(stretch.minimum), static_cast<float>(stretch.maximum));
    355369}
    356370
  • trunk/Source/WebCore/css/StyleBuilderConverter.h

    r213341 r213464  
    4141#include "CSSPrimitiveValue.h"
    4242#include "CSSReflectValue.h"
     43#include "FontSelectionValueInlines.h"
    4344#include "Frame.h"
    4445#include "LayoutUnit.h"
     
    115116#endif
    116117    static FontFeatureSettings convertFontFeatureSettings(StyleResolver&, const CSSValue&);
     118    static FontSelectionValue convertFontWeight(StyleResolver&, const CSSValue&);
    117119    static FontSelectionValue convertFontStretch(StyleResolver&, const CSSValue&);
     120    static FontSelectionValue convertFontStyle(StyleResolver&, const CSSValue&);
    118121#if ENABLE(VARIATION_FONTS)
    119122    static FontVariationSettings convertFontVariationSettings(StyleResolver&, const CSSValue&);
     
    11551158}
    11561159
     1160inline FontSelectionValue StyleBuilderConverter::convertFontWeight(StyleResolver& styleResolver, const CSSValue& value)
     1161{
     1162    ASSERT(is<CSSPrimitiveValue>(value));
     1163    auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1164
     1165    if (primitiveValue.isNumber())
     1166        return FontSelectionValue::clampFloat(primitiveValue.floatValue());
     1167
     1168    ASSERT(primitiveValue.isValueID());
     1169    switch (primitiveValue.valueID()) {
     1170    case CSSValueNormal:
     1171        return normalWeightValue();
     1172    case CSSValueBold:
     1173        return boldWeightValue();
     1174    case CSSValueBolder:
     1175        return FontCascadeDescription::bolderWeight(styleResolver.parentStyle()->fontDescription().weight());
     1176    case CSSValueLighter:
     1177        return FontCascadeDescription::lighterWeight(styleResolver.parentStyle()->fontDescription().weight());
     1178    default:
     1179        ASSERT_NOT_REACHED();
     1180        return normalWeightValue();
     1181    }
     1182}
     1183
    11571184inline FontSelectionValue StyleBuilderConverter::convertFontStretch(StyleResolver&, const CSSValue& value)
    11581185{
    11591186    ASSERT(is<CSSPrimitiveValue>(value));
    11601187    const auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
    1161     if (primitiveValue.isPercentage() || primitiveValue.isNumber()) {
    1162         auto value = primitiveValue.floatValue();
    1163         if (value <= static_cast<float>(FontSelectionValue::maximumValue())
    1164             && value >= static_cast<float>(FontSelectionValue::minimumValue()))
    1165             return FontSelectionValue(value);
    1166         if (value < static_cast<float>(FontSelectionValue::minimumValue()))
    1167             return FontSelectionValue::minimumValue();
    1168         ASSERT(value > static_cast<float>(FontSelectionValue::maximumValue()));
    1169         return FontSelectionValue::maximumValue();
    1170     }
    1171 
    1172     switch (primitiveValue.valueID()) {
    1173     case CSSValueUltraCondensed:
    1174         return FontSelectionValue(50);
    1175     case CSSValueExtraCondensed:
    1176         return FontSelectionValue(62.5f);
    1177     case CSSValueCondensed:
    1178         return FontSelectionValue(75);
    1179     case CSSValueSemiCondensed:
    1180         return FontSelectionValue(87.5f);
    1181     case CSSValueNormal:
    1182         return FontSelectionValue(100);
    1183     case CSSValueSemiExpanded:
    1184         return FontSelectionValue(112.5f);
    1185     case CSSValueExpanded:
    1186         return FontSelectionValue(125);
    1187     case CSSValueExtraExpanded:
    1188         return FontSelectionValue(150);
    1189     case CSSValueUltraExpanded:
    1190         return FontSelectionValue(200);
    1191     default:
    1192         ASSERT_NOT_REACHED();
    1193         return FontSelectionValue(100);
    1194     }
     1188
     1189    if (primitiveValue.isPercentage() || primitiveValue.isNumber())
     1190        return FontSelectionValue::clampFloat(primitiveValue.floatValue());
     1191
     1192    ASSERT(primitiveValue.isValueID());
     1193    if (auto value = fontStretchValue(primitiveValue.valueID()))
     1194        return value.value();
     1195    ASSERT_NOT_REACHED();
     1196    return normalStretchValue();
     1197}
     1198
     1199inline FontSelectionValue StyleBuilderConverter::convertFontStyle(StyleResolver&, const CSSValue& value)
     1200{
     1201    ASSERT(is<CSSPrimitiveValue>(value));
     1202    const auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     1203
     1204    if (primitiveValue.isAngle() || primitiveValue.isNumber() || primitiveValue.isCalculated())
     1205        return FontSelectionValue::clampFloat(primitiveValue.floatValue(CSSPrimitiveValue::CSS_DEG));
     1206
     1207    ASSERT(primitiveValue.isValueID());
     1208    if (auto value = fontStyleValue(primitiveValue.valueID()))
     1209        return value.value();
     1210    ASSERT_NOT_REACHED();
     1211    return normalItalicValue();
    11951212}
    11961213
  • trunk/Source/WebCore/css/StyleBuilderCustom.h

    r212985 r213464  
    8282    DECLARE_PROPERTY_CUSTOM_HANDLERS(FontFamily);
    8383    DECLARE_PROPERTY_CUSTOM_HANDLERS(FontSize);
    84     DECLARE_PROPERTY_CUSTOM_HANDLERS(FontWeight);
    8584#if ENABLE(CSS_IMAGE_RESOLUTION)
    8685    DECLARE_PROPERTY_CUSTOM_HANDLERS(ImageResolution);
     
    12941293
    12951294    svgStyle.setShadow(std::make_unique<ShadowData>(location, blur, 0, Normal, false, color.isValid() ? color : Color::transparent));
    1296 }
    1297 
    1298 inline void StyleBuilderCustom::applyInitialFontWeight(StyleResolver& styleResolver)
    1299 {
    1300     auto fontDescription = styleResolver.fontDescription();
    1301     fontDescription.setWeight(FontWeightNormal);
    1302     styleResolver.setFontDescription(fontDescription);
    1303 }
    1304 
    1305 inline void StyleBuilderCustom::applyInheritFontWeight(StyleResolver& styleResolver)
    1306 {
    1307     auto fontDescription = styleResolver.fontDescription();
    1308     fontDescription.setWeight(styleResolver.parentFontDescription().weight());
    1309     styleResolver.setFontDescription(fontDescription);
    1310 }
    1311 
    1312 inline void StyleBuilderCustom::applyValueFontWeight(StyleResolver& styleResolver, CSSValue& value)
    1313 {
    1314     auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
    1315     auto fontDescription = styleResolver.fontDescription();
    1316     switch (primitiveValue.valueID()) {
    1317     case CSSValueInvalid:
    1318         ASSERT_NOT_REACHED();
    1319         break;
    1320     case CSSValueBolder:
    1321         fontDescription.setWeight(styleResolver.parentStyle()->fontDescription().weight());
    1322         fontDescription.setWeight(fontDescription.bolderWeight());
    1323         break;
    1324     case CSSValueLighter:
    1325         fontDescription.setWeight(styleResolver.parentStyle()->fontDescription().weight());
    1326         fontDescription.setWeight(fontDescription.lighterWeight());
    1327         break;
    1328     default:
    1329         fontDescription.setWeight(primitiveValue);
    1330     }
    1331     styleResolver.setFontDescription(fontDescription);
    13321295}
    13331296
  • trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp

    r213267 r213464  
    560560    case CSSPropertyFloat: // left | right | none
    561561        return valueID == CSSValueLeft || valueID == CSSValueRight || valueID == CSSValueNone;
    562     case CSSPropertyFontStyle: // normal | italic | oblique
    563         return valueID == CSSValueNormal || valueID == CSSValueItalic || valueID == CSSValueOblique;
    564562    case CSSPropertyImageRendering: // auto | optimizeContrast | pixelated | optimizeSpeed | crispEdges | optimizeQuality | webkit-crispEdges
    565563        return valueID == CSSValueAuto || valueID == CSSValueOptimizeSpeed || valueID == CSSValueOptimizeQuality || valueID == CSSValueWebkitCrispEdges || valueID == CSSValueWebkitOptimizeContrast || valueID == CSSValueCrispEdges || valueID == CSSValuePixelated;
     
    832830    case CSSPropertyFlexWrap:
    833831    case CSSPropertyFloat:
    834     case CSSPropertyFontStyle:
    835832    case CSSPropertyFontVariantAlternates:
    836833    case CSSPropertyFontVariantCaps:
  • trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp

    r213436 r213464  
    865865}
    866866
    867 static RefPtr<CSSPrimitiveValue> consumeFontWeight(CSSParserTokenRange& range)
    868 {
    869     const CSSParserToken& token = range.peek();
    870     if (token.id() >= CSSValueNormal && token.id() <= CSSValueLighter)
    871         return consumeIdent(range);
     867static RefPtr<CSSPrimitiveValue> consumeFontWeightKeywordValue(CSSParserTokenRange& range)
     868{
     869    return consumeIdent<CSSValueNormal, CSSValueBold, CSSValueBolder, CSSValueLighter>(range);
     870}
     871
     872static RefPtr<CSSPrimitiveValue> consumeFontWeightCSS21(CSSParserTokenRange& range)
     873{
     874    if (auto result = consumeFontWeightKeywordValue(range))
     875        return result;
    872876    int weight;
    873877    if (!consumePositiveIntegerRaw(range, weight))
    874878        return nullptr;
    875     if ((weight % 100) || weight < 100 || weight > 900)
    876         return nullptr;
    877     return CSSValuePool::singleton().createIdentifierValue(static_cast<CSSValueID>(CSSValue100 + weight / 100 - 1));
     879    if (!isCSS21Weight(weight))
     880        return nullptr;
     881    return CSSValuePool::singleton().createValue(weight, CSSPrimitiveValue::CSS_NUMBER);
     882}
     883
     884static RefPtr<CSSPrimitiveValue> consumeFontWeight(CSSParserTokenRange& range)
     885{
     886    if (auto result = consumeFontWeightKeywordValue(range))
     887        return result;
     888    return consumeNumber(range, ValueRangeAll);
    878889}
    879890
     
    890901        return percent;
    891902    return consumeNumber(range, ValueRangeAll);
     903}
     904
     905static RefPtr<CSSPrimitiveValue> consumeFontStyleKeywordValue(CSSParserTokenRange& range)
     906{
     907    return consumeIdent<CSSValueNormal, CSSValueItalic, CSSValueOblique>(range);
     908}
     909
     910static RefPtr<CSSPrimitiveValue> consumeFontStyle(CSSParserTokenRange& range, CSSParserMode cssParserMode)
     911{
     912    if (auto result = consumeFontStyleKeywordValue(range)) {
     913        if (result->valueID() == CSSValueOblique) {
     914            if (range.atEnd())
     915                return result;
     916            if (auto angle = consumeAngle(range, cssParserMode))
     917                return angle;
     918            if (auto number = consumeNumber(range, ValueRangeAll))
     919                return number;
     920            return nullptr;
     921        }
     922        return result;
     923    }
     924    return nullptr;
    892925}
    893926
     
    36673700    case CSSPropertyFontStretch:
    36683701        return consumeFontStretch(m_range);
     3702    case CSSPropertyFontStyle:
     3703        return consumeFontStyle(m_range, m_context.mode);
    36693704    case CSSPropertyFontSynthesis:
    36703705        return consumeFontSynthesis(m_range);
     
    41854220        parsedValue = consumeFontFaceUnicodeRange(m_range);
    41864221        break;
     4222    case CSSPropertyFontWeight:
     4223        // FIXME: Parse range-based values.
     4224        parsedValue = consumeFontWeight(m_range);
     4225        break;
    41874226    case CSSPropertyFontStretch:
     4227        // FIXME: Parse range-based values.
    41884228        parsedValue = consumeFontStretch(m_range);
    41894229        break;
    4190     case CSSPropertyFontStyle: {
    4191         CSSValueID id = m_range.consumeIncludingWhitespace().id();
    4192         if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(propId, id, m_context.mode))
    4193             return false;
    4194         parsedValue = CSSValuePool::singleton().createIdentifierValue(id);
     4230    case CSSPropertyFontStyle:
     4231        // FIXME: Parse range-based values.
     4232        parsedValue = consumeFontStyle(m_range, m_context.mode);
    41954233        break;
    4196     }
    41974234    case CSSPropertyFontVariantCaps:
    41984235        parsedValue = consumeFontVariantCaps(m_range);
     
    42154252    case CSSPropertyFontVariant:
    42164253        return consumeFontVariantShorthand(false);
    4217     case CSSPropertyFontWeight:
    4218         parsedValue = consumeFontWeight(m_range);
    4219         break;
    42204254    case CSSPropertyFontFeatureSettings:
    42214255        parsedValue = consumeFontFeatureSettings(m_range);
     
    42444278        return false;
    42454279   
    4246     addProperty(CSSPropertyFontStyle, CSSPropertyFont, CSSValuePool::singleton().createIdentifierValue(fontDescription.italic() == FontItalicOn ? CSSValueItalic : CSSValueNormal), important);
    4247     addProperty(CSSPropertyFontWeight, CSSPropertyFont, CSSValuePool::singleton().createValue(fontDescription.weight()), important);
     4280    addProperty(CSSPropertyFontStyle, CSSPropertyFont, CSSValuePool::singleton().createIdentifierValue(isItalic(fontDescription.italic()) ? CSSValueItalic : CSSValueNormal), important);
     4281    addProperty(CSSPropertyFontWeight, CSSPropertyFont, CSSValuePool::singleton().createValue(static_cast<float>(fontDescription.weight())), important);
    42484282    addProperty(CSSPropertyFontSize, CSSPropertyFont, CSSValuePool::singleton().createValue(fontDescription.specifiedSize(), CSSPrimitiveValue::CSS_PX), important);
    42494283    Ref<CSSValueList> fontFamilyList = CSSValueList::createCommaSeparated();
     
    42754309    while (!m_range.atEnd()) {
    42764310        CSSValueID id = m_range.peek().id();
    4277         if (!fontStyle && CSSParserFastPaths::isValidKeywordPropertyAndValue(CSSPropertyFontStyle, id, m_context.mode)) {
    4278             fontStyle = consumeIdent(m_range);
    4279             continue;
     4311        if (!fontStyle) {
     4312            fontStyle = consumeFontStyleKeywordValue(m_range);
     4313            if (fontStyle)
     4314                continue;
    42804315        }
    42814316        if (!fontVariantCaps && (id == CSSValueNormal || id == CSSValueSmallCaps)) {
     
    42874322        }
    42884323        if (!fontWeight) {
    4289             fontWeight = consumeFontWeight(m_range);
     4324            fontWeight = consumeFontWeightCSS21(m_range);
    42904325            if (fontWeight)
    42914326                continue;
  • trunk/Source/WebCore/editing/EditingStyle.cpp

    r213355 r213464  
    17391739        return false;
    17401740
    1741     // Because b tag can only bold text, there are only two states in plain html: bold and not bold.
    1742     // Collapse all other values to either one of these two states for editing purposes.
    1743     switch (downcast<CSSPrimitiveValue>(fontWeight).valueID()) {
    1744         case CSSValue100:
    1745         case CSSValue200:
    1746         case CSSValue300:
    1747         case CSSValue400:
    1748         case CSSValue500:
     1741    auto& primitiveValue = downcast<CSSPrimitiveValue>(fontWeight);
     1742    switch (primitiveValue.valueID()) {
    17491743        case CSSValueNormal:
    17501744            return false;
    17511745        case CSSValueBold:
    1752         case CSSValue600:
    1753         case CSSValue700:
    1754         case CSSValue800:
    1755         case CSSValue900:
    17561746            return true;
    17571747        default:
     
    17591749    }
    17601750
    1761     ASSERT_NOT_REACHED(); // For CSSValueBolder and CSSValueLighter
    1762     return false;
     1751    ASSERT(primitiveValue.isNumber());
     1752    return primitiveValue.floatValue() >= static_cast<float>(boldThreshold());
    17631753}
    17641754
  • trunk/Source/WebCore/editing/mac/EditorMac.mm

    r213355 r213464  
    493493    style->setProperty(CSSPropertyFontFamily, cssValuePool.createFontFamilyValue(fontFamily));
    494494    style->setProperty(CSSPropertyFontStyle, (fontTraits & NSFontItalicTrait) ? CSSValueItalic : CSSValueNormal);
    495     style->setProperty(CSSPropertyFontWeight, cssValuePool.createValue(fontTraits & NSFontBoldTrait ? FontWeightBold : FontWeightNormal));
     495    style->setProperty(CSSPropertyFontWeight, (fontTraits & NSFontBoldTrait) ? CSSValueBold : CSSValueNormal);
    496496    style->setProperty(CSSPropertyFontSize, cssValuePool.createValue(fontSize, CSSPrimitiveValue::CSS_PX));
    497497    applyStyleToSelection(style.ptr(), EditActionSetFont);
  • trunk/Source/WebCore/platform/graphics/FontCache.h

    r213436 r213464  
    189189    void platformInit();
    190190
    191 #if PLATFORM(IOS)
    192     static float weightOfCTFont(CTFontRef);
    193 #endif
    194191#if PLATFORM(COCOA)
    195192    WEBCORE_EXPORT static void setFontWhitelist(const Vector<String>&);
     
    204201    // This function exists so CSSFontSelector can have a unified notion of preinstalled fonts and @font-face.
    205202    // It comes into play when you create an @font-face which shares a family name as a preinstalled font.
    206     struct TraitsAndStretch {
    207         FontTraitsMask traits;
    208         FontSelectionRange stretch;
    209     };
    210     Vector<TraitsAndStretch> getTraitsAndStretchInFamily(const AtomicString&);
     203    Vector<FontSelectionCapabilities> getFontSelectionCapabilitiesInFamily(const AtomicString&);
    211204
    212205    WEBCORE_EXPORT RefPtr<Font> fontForFamily(const FontDescription&, const AtomicString&, const FontFeatureSettings* fontFaceFeatures = nullptr, const FontVariantSettings* fontFaceVariantSettings = nullptr, bool checkingAlternateName = false);
     
    287280
    288281RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, const FontVariationSettings&);
    289 FontWeight fontWeightFromCoreText(CGFloat weight);
    290 uint16_t toCoreTextFontWeight(FontWeight);
    291 bool isFontWeightBold(FontWeight);
    292282SynthesisPair computeNecessarySynthesis(CTFontRef, const FontDescription&, bool isPlatformFont = false);
    293 RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontWeight, CTFontSymbolicTraits, float size);
    294 RetainPtr<CTFontRef> platformFontWithFamily(const AtomicString& family, CTFontSymbolicTraits, FontWeight, TextRenderingMode, float size);
     283RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest, float size);
     284RetainPtr<CTFontRef> platformFontWithFamily(const AtomicString& family, FontSelectionRequest, TextRenderingMode, float size);
    295285bool requiresCustomFallbackFont(UChar32 character);
     286FontSelectionCapabilities capabilitiesForFontDescriptor(CTFontDescriptorRef);
    296287
    297288#else
  • trunk/Source/WebCore/platform/graphics/FontCascade.cpp

    r213008 r213464  
    122122    m_fontDescription.setComputedSize(CTFontGetSize(fontData.font()));
    123123    m_fontDescription.setIsItalic(CTFontGetSymbolicTraits(fontData.font()) & kCTFontTraitItalic);
    124     m_fontDescription.setWeight((CTFontGetSymbolicTraits(fontData.font()) & kCTFontTraitBold) ? FontWeightBold : FontWeightNormal);
     124    m_fontDescription.setWeight((CTFontGetSymbolicTraits(fontData.font()) & kCTFontTraitBold) ? boldWeightValue() : normalWeightValue());
    125125#endif
    126126}
  • trunk/Source/WebCore/platform/graphics/FontCascade.h

    r211836 r213464  
    165165    const AtomicString& familyAt(unsigned i) const { return m_fontDescription.familyAt(i); }
    166166
    167     FontItalic italic() const { return m_fontDescription.italic(); }
    168     FontWeight weight() const { return m_fontDescription.weight(); }
     167    FontSelectionValue italic() const { return m_fontDescription.italic(); }
     168    FontSelectionValue weight() const { return m_fontDescription.weight(); }
    169169    FontWidthVariant widthVariant() const { return m_fontDescription.widthVariant(); }
    170170
  • trunk/Source/WebCore/platform/graphics/FontDescription.cpp

    r213267 r213464  
    4343#endif
    4444    AtomicString string;
    45     float size[2];
     45    int16_t fontSelectionRequest[3];
     46    float size;
    4647    unsigned bitfields1;
    4748    unsigned bitfields2 : 22;
     
    5455
    5556FontDescription::FontDescription()
    56     : m_orientation(Horizontal)
     57    : m_fontSelectionRequest(FontCascadeDescription::initialWeight(), FontCascadeDescription::initialStretch(), FontCascadeDescription::initialItalic())
     58    , m_orientation(Horizontal)
    5759    , m_nonCJKGlyphOrientation(static_cast<unsigned>(NonCJKGlyphOrientation::Mixed))
    5860    , m_widthVariant(RegularWidth)
    59     , m_italic(FontItalicOff)
    60     , m_weight(FontWeightNormal)
    6161    , m_renderingMode(static_cast<unsigned>(FontRenderingMode::Normal))
    6262    , m_textRendering(AutoTextRendering)
     
    8181}
    8282
    83 FontTraitsMask FontDescription::traitsMask() const
    84 {
    85     return static_cast<FontTraitsMask>((m_italic ? FontStyleItalicMask : FontStyleNormalMask)
    86         | (FontWeight100Mask << (m_weight - FontWeight100)));
    87    
    88 }
    89 
    9083void FontDescription::setLocale(const AtomicString& locale)
    9184{
     
    10396}
    10497
    105 FontWeight FontCascadeDescription::lighterWeight(void) const
     98FontSelectionValue FontCascadeDescription::lighterWeight(FontSelectionValue weight)
    10699{
    107     switch (weight()) {
    108     case FontWeight100:
    109     case FontWeight200:
    110     case FontWeight300:
    111     case FontWeight400:
    112     case FontWeight500:
    113         return FontWeight100;
    114 
    115     case FontWeight600:
    116     case FontWeight700:
    117         return FontWeight400;
    118 
    119     case FontWeight800:
    120     case FontWeight900:
    121         return FontWeight700;
    122     }
    123     ASSERT_NOT_REACHED();
    124     return FontWeightNormal;
     100    if (weight < FontSelectionValue(100))
     101        return weight;
     102    if (weight < FontSelectionValue(550))
     103        return FontSelectionValue(100);
     104    if (weight < FontSelectionValue(750))
     105        return FontSelectionValue(400);
     106    return FontSelectionValue(700);
    125107}
    126108
    127 FontWeight FontCascadeDescription::bolderWeight(void) const
     109FontSelectionValue FontCascadeDescription::bolderWeight(FontSelectionValue weight)
    128110{
    129     switch (weight()) {
    130     case FontWeight100:
    131     case FontWeight200:
    132     case FontWeight300:
    133         return FontWeight400;
    134 
    135     case FontWeight400:
    136     case FontWeight500:
    137         return FontWeight700;
    138 
    139     case FontWeight600:
    140     case FontWeight700:
    141     case FontWeight800:
    142     case FontWeight900:
    143         return FontWeight900;
    144     }
    145     ASSERT_NOT_REACHED();
    146     return FontWeightNormal;
     111    if (weight < FontSelectionValue(350))
     112        return FontSelectionValue(400);
     113    if (weight < FontSelectionValue(550))
     114        return FontSelectionValue(700);
     115    if (weight < FontSelectionValue(900))
     116        return FontSelectionValue(900);
     117    return weight;
    147118}
    148119
  • trunk/Source/WebCore/platform/graphics/FontDescription.h

    r213436 r213464  
    4747
    4848    float computedSize() const { return m_computedSize; }
    49     FontItalic italic() const { return static_cast<FontItalic>(m_italic); }
    50     FontSelectionValue stretch() const { return m_stretch; }
     49    FontSelectionValue italic() const { return m_fontSelectionRequest.slope; }
     50    FontSelectionValue stretch() const { return m_fontSelectionRequest.width; }
     51    FontSelectionValue weight() const { return m_fontSelectionRequest.weight; }
     52    FontSelectionRequest fontSelectionRequest() const { return m_fontSelectionRequest; }
    5153    int computedPixelSize() const { return int(m_computedSize + 0.5f); }
    52     FontWeight weight() const { return static_cast<FontWeight>(m_weight); }
    53     FontWeight lighterWeight() const;
    54     FontWeight bolderWeight() const;
    5554    FontRenderingMode renderingMode() const { return static_cast<FontRenderingMode>(m_renderingMode); }
    5655    TextRenderingMode textRenderingMode() const { return static_cast<TextRenderingMode>(m_textRendering); }
     
    9998
    10099    void setComputedSize(float s) { m_computedSize = clampToFloat(s); }
    101     void setItalic(FontItalic i) { m_italic = i; }
    102     void setStretch(FontSelectionValue stretch) { m_stretch = stretch; }
    103     void setIsItalic(bool i) { setItalic(i ? FontItalicOn : FontItalicOff); }
    104     void setWeight(FontWeight w) { m_weight = w; }
     100    void setItalic(FontSelectionValue italic) { m_fontSelectionRequest.slope = italic; }
     101    void setStretch(FontSelectionValue stretch) { m_fontSelectionRequest.width = stretch; }
     102    void setIsItalic(bool i) { setItalic(i ? italicValue() : normalItalicValue()); }
     103    void setWeight(FontSelectionValue weight) { m_fontSelectionRequest.weight = weight; }
    105104    void setRenderingMode(FontRenderingMode mode) { m_renderingMode = static_cast<unsigned>(mode); }
    106105    void setTextRenderingMode(TextRenderingMode rendering) { m_textRendering = rendering; }
     
    130129    void setVariantEastAsianRuby(FontVariantEastAsianRuby variant) { m_variantEastAsianRuby = static_cast<unsigned>(variant); }
    131130
    132     FontTraitsMask traitsMask() const;
    133 
    134131private:
    135132    // FIXME: Investigate moving these into their own object on the heap (to save memory).
     
    138135    AtomicString m_locale;
    139136
     137    FontSelectionRequest m_fontSelectionRequest;
    140138    float m_computedSize { 0 }; // Computed size adjusted for the minimum font size and the zoom factor.
    141     FontSelectionValue m_stretch { 100 }; // Stretch, or "width," of the font
    142139    unsigned m_orientation : 1; // FontOrientation - Whether the font is rendering on a horizontal line or a vertical line.
    143140    unsigned m_nonCJKGlyphOrientation : 1; // NonCJKGlyphOrientation - Only used by vertical text. Determines the default orientation for non-ideograph glyphs.
    144141    unsigned m_widthVariant : 2; // FontWidthVariant
    145     unsigned m_italic : 1; // FontItalic
    146     unsigned m_weight : 8; // FontWeight
    147142    unsigned m_renderingMode : 1; // Used to switch between CG and GDI text on Windows.
    148143    unsigned m_textRendering : 2; // TextRenderingMode
     
    169164{
    170165    return m_computedSize == other.m_computedSize
    171         && m_stretch == other.m_stretch
    172         && m_italic == other.m_italic
    173         && m_weight == other.m_weight
     166        && m_fontSelectionRequest == other.m_fontSelectionRequest
    174167        && m_renderingMode == other.m_renderingMode
    175168        && m_textRendering == other.m_textRendering
     
    215208    float specifiedSize() const { return m_specifiedSize; }
    216209    bool isAbsoluteSize() const { return m_isAbsoluteSize; }
    217     FontWeight lighterWeight() const;
    218     FontWeight bolderWeight() const;
     210    FontSelectionValue lighterWeight() const { return lighterWeight(weight()); }
     211    FontSelectionValue bolderWeight() const { return bolderWeight(weight()); }
     212    static FontSelectionValue lighterWeight(FontSelectionValue);
     213    static FontSelectionValue bolderWeight(FontSelectionValue);
    219214
    220215    // only use fixed default size when there is only one font family, and that family is "monospace"
     
    266261
    267262    // Initial values for font properties.
    268     static FontItalic initialItalic() { return FontItalicOff; }
    269     static FontSelectionValue initialStretch() { return FontSelectionValue(100); }
     263    static FontSelectionValue initialItalic() { return normalItalicValue(); }
     264    static FontSelectionValue initialWeight() { return normalWeightValue(); }
     265    static FontSelectionValue initialStretch() { return normalStretchValue(); }
    270266    static FontSmallCaps initialSmallCaps() { return FontSmallCapsOff; }
    271267    static Kerning initialKerning() { return Kerning::Auto; }
  • trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.cpp

    r213436 r213464  
    3636        return { FontSelectionValue(), m_request.width };
    3737
    38     if (m_request.width >= FontSelectionValue(100)) {
     38    if (m_request.width >= normalStretchValue()) {
    3939        if (width.minimum > m_request.width)
    4040            return { width.minimum - m_request.width, width.minimum };
     
    153153}
    154154
    155 FontSelectionRequest fontSelectionRequestForTraitsMask(FontTraitsMask traitsMask, FontSelectionValue stretch)
    156 {
    157     FontSelectionRequest result;
    158     if (traitsMask & FontWeight100Mask)
    159         result.weight = FontSelectionValue(100);
    160     else if (traitsMask & FontWeight200Mask)
    161         result.weight = FontSelectionValue(200);
    162     else if (traitsMask & FontWeight300Mask)
    163         result.weight = FontSelectionValue(300);
    164     else if (traitsMask & FontWeight400Mask)
    165         result.weight = FontSelectionValue(400);
    166     else if (traitsMask & FontWeight500Mask)
    167         result.weight = FontSelectionValue(500);
    168     else if (traitsMask & FontWeight600Mask)
    169         result.weight = FontSelectionValue(600);
    170     else if (traitsMask & FontWeight700Mask)
    171         result.weight = FontSelectionValue(700);
    172     else if (traitsMask & FontWeight800Mask)
    173         result.weight = FontSelectionValue(800);
    174     else {
    175         ASSERT(traitsMask & FontWeight900Mask);
    176         result.weight = FontSelectionValue(900);
    177     }
    178 
    179     result.width = stretch;
    180 
    181     if (traitsMask & FontStyleNormalMask)
    182         result.slope = FontSelectionValue();
    183     else {
    184         ASSERT(traitsMask & FontStyleItalicMask);
    185         result.slope = italicThreshold();
    186     }
    187 
    188     return result;
    189155}
    190 
    191 static FontSelectionCapabilities initialFontSelectionCapabilitiesForTraitsMask(FontTraitsMask traitsMask)
    192 {
    193     FontSelectionCapabilities result;
    194     if (traitsMask & FontWeight100Mask)
    195         result.weight = { FontSelectionValue(100), FontSelectionValue(100) };
    196     else if (traitsMask & FontWeight200Mask)
    197         result.weight = { FontSelectionValue(200), FontSelectionValue(200) };
    198     else if (traitsMask & FontWeight300Mask)
    199         result.weight = { FontSelectionValue(300), FontSelectionValue(300) };
    200     else if (traitsMask & FontWeight400Mask)
    201         result.weight = { FontSelectionValue(400), FontSelectionValue(400) };
    202     else if (traitsMask & FontWeight500Mask)
    203         result.weight = { FontSelectionValue(500), FontSelectionValue(500) };
    204     else if (traitsMask & FontWeight600Mask)
    205         result.weight = { FontSelectionValue(600), FontSelectionValue(600) };
    206     else if (traitsMask & FontWeight700Mask)
    207         result.weight = { FontSelectionValue(700), FontSelectionValue(700) };
    208     else if (traitsMask & FontWeight800Mask)
    209         result.weight = { FontSelectionValue(800), FontSelectionValue(800) };
    210     else {
    211         ASSERT(traitsMask & FontWeight900Mask);
    212         result.weight = { FontSelectionValue(900), FontSelectionValue(900) };
    213     }
    214 
    215     if (traitsMask & FontStyleNormalMask)
    216         result.slope = { FontSelectionValue(), FontSelectionValue() };
    217     else {
    218         ASSERT(traitsMask & FontStyleItalicMask);
    219         result.slope = { italicThreshold(), italicThreshold() };
    220     }
    221 
    222     return result;
    223 }
    224 
    225 FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask traitsMask, FontSelectionValue stretch)
    226 {
    227     FontSelectionCapabilities result = initialFontSelectionCapabilitiesForTraitsMask(traitsMask);
    228     result.width = { stretch, stretch };
    229     return result;
    230 }
    231 
    232 FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask traitsMask, FontSelectionRange stretch)
    233 {
    234     FontSelectionCapabilities result = initialFontSelectionCapabilitiesForTraitsMask(traitsMask);
    235     result.width = stretch;
    236     return result;
    237 }
    238 
    239 }
  • trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h

    r213436 r213464  
    8989    }
    9090
     91    static FontSelectionValue clampFloat(float value)
     92    {
     93        if (value < static_cast<float>(FontSelectionValue::minimumValue()))
     94            return FontSelectionValue::minimumValue();
     95        if (value > static_cast<float>(FontSelectionValue::maximumValue()))
     96            return FontSelectionValue::maximumValue();
     97        return FontSelectionValue(value);
     98    }
     99
    91100private:
    92101    enum class RawTag { RawTag };
     
    162171}
    163172
     173static inline bool isItalic(FontSelectionValue fontWeight)
     174{
     175    return fontWeight >= italicThreshold();
     176}
     177
     178static inline FontSelectionValue normalItalicValue()
     179{
     180    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue();
     181    return result.get();
     182}
     183
     184static inline FontSelectionValue italicValue()
     185{
     186    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(20);
     187    return result.get();
     188}
     189
    164190static inline FontSelectionValue boldThreshold()
    165191{
     
    168194}
    169195
     196static inline FontSelectionValue boldWeightValue()
     197{
     198    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(700);
     199    return result.get();
     200}
     201
     202static inline FontSelectionValue normalWeightValue()
     203{
     204    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(400);
     205    return result.get();
     206}
     207
     208static inline FontSelectionValue lightWeightValue()
     209{
     210    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(200);
     211    return result.get();
     212}
     213
     214static inline bool isFontWeightBold(FontSelectionValue fontWeight)
     215{
     216    return fontWeight >= boldThreshold();
     217}
     218
    170219static inline FontSelectionValue weightSearchThreshold()
    171220{
    172221    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(500);
     222    return result.get();
     223}
     224
     225static inline FontSelectionValue ultraCondensedStretchValue()
     226{
     227    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(50);
     228    return result.get();
     229}
     230
     231static inline FontSelectionValue extraCondensedStretchValue()
     232{
     233    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(62.5f);
     234    return result.get();
     235}
     236
     237static inline FontSelectionValue condensedStretchValue()
     238{
     239    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(75);
     240    return result.get();
     241}
     242
     243static inline FontSelectionValue semiCondensedStretchValue()
     244{
     245    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(87.5f);
     246    return result.get();
     247}
     248
     249static inline FontSelectionValue normalStretchValue()
     250{
     251    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(100);
     252    return result.get();
     253}
     254
     255static inline FontSelectionValue semiExpandedStretchValue()
     256{
     257    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(112.5f);
     258    return result.get();
     259}
     260
     261static inline FontSelectionValue expandedStretchValue()
     262{
     263    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(125);
     264    return result.get();
     265}
     266
     267static inline FontSelectionValue extraExpandedStretchValue()
     268{
     269    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(150);
     270    return result.get();
     271}
     272
     273static inline FontSelectionValue ultraExpandedStretchValue()
     274{
     275    static NeverDestroyed<FontSelectionValue> result = FontSelectionValue(200);
    173276    return result.get();
    174277}
     
    215318
    216319struct FontSelectionRequest {
     320    FontSelectionRequest() = default;
     321
     322    FontSelectionRequest(FontSelectionValue weight, FontSelectionValue width, FontSelectionValue slope)
     323        : weight(weight)
     324        , width(width)
     325        , slope(slope)
     326    {
     327    }
     328
    217329    bool operator==(const FontSelectionRequest& other) const
    218330    {
     
    290402    }
    291403
    292     FontSelectionRange weight { FontSelectionValue(400), FontSelectionValue(400) };
    293     FontSelectionRange width { FontSelectionValue(100), FontSelectionValue(100) };
    294     FontSelectionRange slope { FontSelectionValue(), FontSelectionValue() };
     404    FontSelectionRange weight { normalWeightValue(), normalWeightValue() };
     405    FontSelectionRange width { normalStretchValue(), normalStretchValue() };
     406    FontSelectionRange slope { normalItalicValue(), normalItalicValue() };
    295407};
    296408
     
    359471};
    360472
    361 FontSelectionRequest fontSelectionRequestForTraitsMask(FontTraitsMask, FontSelectionValue stretch);
    362 FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask, FontSelectionValue stretch);
    363 FontSelectionCapabilities fontSelectionCapabilitiesForTraitsMask(FontTraitsMask, FontSelectionRange stretch);
    364 
    365 }
     473}
  • trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp

    r213436 r213464  
    552552}
    553553
    554 FontWeight fontWeightFromCoreText(CGFloat weight)
    555 {
    556     if (weight < -0.6)
    557         return FontWeight100;
    558     if (weight < -0.365)
    559         return FontWeight200;
    560     if (weight < -0.115)
    561         return FontWeight300;
    562     if (weight <  0.130)
    563         return FontWeight400;
    564     if (weight <  0.235)
    565         return FontWeight500;
    566     if (weight <  0.350)
    567         return FontWeight600;
    568     if (weight <  0.500)
    569         return FontWeight700;
    570     if (weight <  0.700)
    571         return FontWeight800;
    572     return FontWeight900;
    573 }
    574 
    575 static inline FontTraitsMask toTraitsMask(CTFontSymbolicTraits ctFontTraits, CGFloat weight)
    576 {
    577     FontTraitsMask weightMask;
    578     switch (fontWeightFromCoreText(weight)) {
    579     case FontWeight100:
    580         weightMask = FontWeight100Mask;
    581         break;
    582     case FontWeight200:
    583         weightMask = FontWeight200Mask;
    584         break;
    585     case FontWeight300:
    586         weightMask = FontWeight300Mask;
    587         break;
    588     case FontWeight400:
    589         weightMask = FontWeight400Mask;
    590         break;
    591     case FontWeight500:
    592         weightMask = FontWeight500Mask;
    593         break;
    594     case FontWeight600:
    595         weightMask = FontWeight600Mask;
    596         break;
    597     case FontWeight700:
    598         weightMask = FontWeight700Mask;
    599         break;
    600     case FontWeight800:
    601         weightMask = FontWeight800Mask;
    602         break;
    603     case FontWeight900:
    604         weightMask = FontWeight900Mask;
    605         break;
    606     }
    607     return static_cast<FontTraitsMask>(((ctFontTraits & kCTFontTraitItalic) ? FontStyleItalicMask : FontStyleNormalMask) | weightMask);
    608 }
    609 
    610 bool isFontWeightBold(FontWeight fontWeight)
    611 {
    612     return fontWeight >= FontWeight600;
    613 }
    614 
    615 uint16_t toCoreTextFontWeight(FontWeight fontWeight)
    616 {
    617     static const int coreTextFontWeights[] = {
    618         100, // FontWeight100
    619         200, // FontWeight200
    620         300, // FontWeight300
    621         400, // FontWeight400
    622         500, // FontWeight500
    623         600, // FontWeight600
    624         700, // FontWeight700
    625         800, // FontWeight800
    626         900, // FontWeight900
    627     };
    628     return coreTextFontWeights[fontWeight];
    629 }
    630 
    631554RefPtr<Font> FontCache::similarFont(const FontDescription& description, const AtomicString& family)
    632555{
     
    673596        return FontSelectionValue(ctWidth < 0.5 ? ctWidth * 50 + 100 : ctWidth * 150 + 50);
    674597    }
    675     return FontSelectionValue(100);
    676 }
    677 
    678 auto FontCache::getTraitsAndStretchInFamily(const AtomicString& familyName) -> Vector<TraitsAndStretch>
    679 {
    680     auto familyNameStr = familyName.string().createCFString();
    681     CFTypeRef keys[] = { kCTFontFamilyNameAttribute };
    682     CFTypeRef values[] = { familyNameStr.get() };
    683     auto attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
    684     auto fontDescriptor = adoptCF(CTFontDescriptorCreateWithAttributes(attributes.get()));
    685     auto matchedDescriptors = adoptCF(CTFontDescriptorCreateMatchingFontDescriptors(fontDescriptor.get(), nullptr));
    686     if (!matchedDescriptors)
    687         return { };
    688 
    689     CFIndex numMatches = CFArrayGetCount(matchedDescriptors.get());
    690     if (!numMatches)
    691         return { };
    692 
    693     Vector<TraitsAndStretch> result;
    694     result.reserveInitialCapacity(numMatches);
    695     for (CFIndex i = 0; i < numMatches; ++i) {
    696         auto traits = adoptCF((CFDictionaryRef)CTFontDescriptorCopyAttribute((CTFontDescriptorRef)CFArrayGetValueAtIndex(matchedDescriptors.get(), i), kCTFontTraitsAttribute));
    697         CFNumberRef resultRef = (CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait);
    698         CFNumberRef weightRef = (CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontWeightTrait);
    699         if (resultRef && weightRef) {
    700             CTFontSymbolicTraits symbolicTraits;
    701             CFNumberGetValue(resultRef, kCFNumberIntType, &symbolicTraits);
    702             CGFloat weight = 0;
    703             CFNumberGetValue(weightRef, kCFNumberCGFloatType, &weight);
    704             auto stretch = stretchFromCoreTextTraits(traits.get());
    705             result.uncheckedAppend({ toTraitsMask(symbolicTraits, weight), { stretch, stretch } });
    706         }
    707     }
    708     return result;
     598    return normalStretchValue();
    709599}
    710600
     
    802692}
    803693
    804 #if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
     694#if SHOULD_USE_CORE_TEXT_FONT_LOOKUP
     695static FontSelectionValue fontWeightFromCoreText(CGFloat weight)
     696{
     697    if (weight < -0.6)
     698        return FontSelectionValue(100);
     699    if (weight < -0.365)
     700        return FontSelectionValue(200);
     701    if (weight < -0.115)
     702        return FontSelectionValue(300);
     703    if (weight <  0.130)
     704        return FontSelectionValue(400);
     705    if (weight <  0.235)
     706        return FontSelectionValue(500);
     707    if (weight <  0.350)
     708        return FontSelectionValue(600);
     709    if (weight <  0.500)
     710        return FontSelectionValue(700);
     711    if (weight <  0.700)
     712        return FontSelectionValue(800);
     713    return FontSelectionValue(900);
     714}
     715#endif
    805716
    806717class FontDatabase {
     
    900811    }
    901812
    902     static FontSelectionCapabilities capabilitiesForFontDescriptor(CTFontDescriptorRef fontDescriptor)
    903     {
    904         if (!fontDescriptor)
    905             return { };
    906 
    907         auto traits = adoptCF(static_cast<CFDictionaryRef>(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontTraitsAttribute)));
    908         FontSelectionValue width;
    909         FontSelectionValue slant;
    910         FontSelectionValue weight;
    911         if (traits) {
    912             width = stretchFromCoreTextTraits(traits.get());
    913 
    914             auto symbolicTraitsNumber = static_cast<CFNumberRef>(CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait));
    915             if (symbolicTraitsNumber) {
    916                 int32_t symbolicTraits;
    917                 auto success = CFNumberGetValue(symbolicTraitsNumber, kCFNumberSInt32Type, &symbolicTraits);
    918                 ASSERT_UNUSED(success, success);
    919                 slant = symbolicTraits & kCTFontTraitItalic ? italicThreshold() : FontSelectionValue();
    920             }
    921         }
    922 
    923         auto weightNumber = adoptCF(static_cast<CFNumberRef>(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontCSSWeightAttribute)));
    924         if (weightNumber) {
    925             float cssWeight;
    926             auto success = CFNumberGetValue(weightNumber.get(), kCFNumberFloatType, &cssWeight);
    927             ASSERT_UNUSED(success, success);
    928             weight = FontSelectionValue(cssWeight);
    929         }
    930 
    931         // FIXME: Educate this function about font variations.
    932 
    933         return { { weight, weight }, { width, width }, { slant, slant } };
    934     }
    935 
    936813private:
    937814    friend class NeverDestroyed<FontDatabase>;
     
    943820};
    944821
     822FontSelectionCapabilities capabilitiesForFontDescriptor(CTFontDescriptorRef fontDescriptor)
     823{
     824    if (!fontDescriptor)
     825        return { };
     826
     827    auto traits = adoptCF(static_cast<CFDictionaryRef>(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontTraitsAttribute)));
     828    FontSelectionValue width;
     829    FontSelectionValue slant;
     830    FontSelectionValue weight;
     831    if (traits) {
     832        width = stretchFromCoreTextTraits(traits.get());
     833
     834        auto symbolicTraitsNumber = static_cast<CFNumberRef>(CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait));
     835        if (symbolicTraitsNumber) {
     836            int32_t symbolicTraits;
     837            auto success = CFNumberGetValue(symbolicTraitsNumber, kCFNumberSInt32Type, &symbolicTraits);
     838            ASSERT_UNUSED(success, success);
     839            slant = symbolicTraits & kCTFontTraitItalic ? italicValue() : normalItalicValue();
     840        }
     841
     842#if SHOULD_USE_CORE_TEXT_FONT_LOOKUP
     843        auto weightNumber = static_cast<CFNumberRef>(CFDictionaryGetValue(traits.get(), kCTFontWeightTrait));
     844        if (weightNumber) {
     845            CGFloat ctWeight;
     846            auto success = CFNumberGetValue(weightNumber, kCFNumberCGFloatType, &ctWeight);
     847            ASSERT_UNUSED(success, success);
     848            weight = fontWeightFromCoreText(ctWeight);
     849        }
     850#endif
     851    }
     852
     853#if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
     854    auto weightNumber = adoptCF(static_cast<CFNumberRef>(CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontCSSWeightAttribute)));
     855    if (weightNumber) {
     856        float cssWeight;
     857        auto success = CFNumberGetValue(weightNumber.get(), kCFNumberFloatType, &cssWeight);
     858        ASSERT_UNUSED(success, success);
     859        weight = FontSelectionValue(cssWeight);
     860    }
     861#endif
     862
     863    // FIXME: Educate this function about font variations.
     864
     865    return { { weight, weight }, { width, width }, { slant, slant } };
     866}
     867
     868#if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
    945869static const FontDatabase::InstalledFont* findClosestFont(const FontDatabase::InstalledFontFamily& familyFonts, FontSelectionRequest fontSelectionRequest)
    946870{
     
    952876    return &familyFonts.installedFonts[fontSelectionAlgorithm.indexOfBestCapabilities()];
    953877}
    954 
    955 static FontSelectionRequest calculateFontSelectionRequest(CTFontSymbolicTraits requestedTraits, FontWeight weight, FontSelectionValue stretch)
    956 {
    957     FontSelectionRequest result;
    958     switch (weight) {
    959     case FontWeight100:
    960         result.weight = FontSelectionValue(100);
    961         break;
    962     case FontWeight200:
    963         result.weight = FontSelectionValue(200);
    964         break;
    965     case FontWeight300:
    966         result.weight = FontSelectionValue(300);
    967         break;
    968     case FontWeight400:
    969         result.weight = FontSelectionValue(400);
    970         break;
    971     case FontWeight500:
    972         result.weight = FontSelectionValue(500);
    973         break;
    974     case FontWeight600:
    975         result.weight = FontSelectionValue(600);
    976         break;
    977     case FontWeight700:
    978         result.weight = FontSelectionValue(700);
    979         break;
    980     case FontWeight800:
    981         result.weight = FontSelectionValue(800);
    982         break;
    983     case FontWeight900:
    984         result.weight = FontSelectionValue(900);
    985         break;
    986     default:
    987         ASSERT_NOT_REACHED();
    988         result.weight = FontSelectionValue(400);
    989         break;
    990     }
    991 
    992     result.width = stretch;
    993 
    994     if (requestedTraits & kCTFontTraitItalic)
    995         result.slope = italicThreshold();
    996     else
    997         result.slope = FontSelectionValue();
    998 
     878#endif
     879
     880Vector<FontSelectionCapabilities> FontCache::getFontSelectionCapabilitiesInFamily(const AtomicString& familyName)
     881{
     882    const auto& fonts = FontDatabase::singleton().collectionForFamily(familyName.string());
     883    if (fonts.isEmpty())
     884        return { };
     885
     886    Vector<FontSelectionCapabilities> result;
     887    result.reserveInitialCapacity(fonts.size());
     888    for (const auto& font : fonts.installedFonts)
     889        result.uncheckedAppend(font.capabilities);
    999890    return result;
    1000891}
    1001892
    1002 #endif // !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
    1003 
    1004 static RetainPtr<CTFontRef> platformFontLookupWithFamily(const AtomicString& family, CTFontSymbolicTraits requestedTraits, FontWeight weight, FontSelectionValue stretch, float size)
     893static RetainPtr<CTFontRef> platformFontLookupWithFamily(const AtomicString& family, FontSelectionRequest request, float size)
    1005894{
    1006895    const auto& whitelist = fontWhitelist();
     
    1009898
    1010899#if SHOULD_USE_CORE_TEXT_FONT_LOOKUP
    1011     UNUSED_PARAM(stretch);
    1012     return adoptCF(CTFontCreateForCSS(family.string().createCFString().get(), toCoreTextFontWeight(weight), requestedTraits, size));
     900    CTFontSymbolicTraits traits = (isFontWeightBold(request.weight) ? kCTFontTraitBold : 0) | (isItalic(request.slope) ? kCTFontTraitItalic : 0);
     901    return adoptCF(CTFontCreateForCSS(family.string().createCFString().get(), static_cast<float>(request.weight), traits, size));
    1013902#else
    1014903    const auto& familyFonts = FontDatabase::singleton().collectionForFamily(family.string());
     
    1024913        if (!postScriptFont.fontDescriptor)
    1025914            return nullptr;
    1026         if (((requestedTraits & kCTFontTraitItalic) && postScriptFont.capabilities.slope.maximum < italicThreshold())
    1027             || (weight >= FontWeight600 && postScriptFont.capabilities.weight.maximum < boldThreshold())) {
     915        if ((isItalic(request.slope) && !isItalic(postScriptFont.capabilities.slope.maximum))
     916            || (isFontWeightBold(request.weight) && !isFontWeightBold(postScriptFont.capabilities.weight.maximum))) {
    1028917            auto postScriptFamilyName = adoptCF(static_cast<CFStringRef>(CTFontDescriptorCopyAttribute(postScriptFont.fontDescriptor.get(), kCTFontFamilyNameAttribute)));
    1029918            if (!postScriptFamilyName)
     
    1032921            if (familyFonts.isEmpty())
    1033922                return nullptr;
    1034             if (const auto* installedFont = findClosestFont(familyFonts, calculateFontSelectionRequest(requestedTraits, weight, stretch))) {
     923            if (const auto* installedFont = findClosestFont(familyFonts, request)) {
    1035924                if (!installedFont->fontDescriptor)
    1036925                    return nullptr;
     
    1042931    }
    1043932
    1044     if (const auto* installedFont = findClosestFont(familyFonts, calculateFontSelectionRequest(requestedTraits, weight, stretch)))
     933    if (const auto* installedFont = findClosestFont(familyFonts, request))
    1045934        return adoptCF(CTFontCreateWithFontDescriptor(installedFont->fontDescriptor.get(), size, nullptr));
    1046935
     
    1058947    }
    1059948
    1060 #if !SHOULD_USE_CORE_TEXT_FONT_LOOKUP
    1061949    FontDatabase::singleton().clear();
    1062 #endif
    1063950
    1064951    FontCache::singleton().invalidate();
    1065952}
    1066953
    1067 static RetainPtr<CTFontRef> fontWithFamily(const AtomicString& family, CTFontSymbolicTraits desiredTraits, FontWeight weight, FontSelectionValue stretch, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontVariationSettings& variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode& textRenderingMode, float size)
     954static RetainPtr<CTFontRef> fontWithFamily(const AtomicString& family, FontSelectionRequest request, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontVariationSettings& variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode& textRenderingMode, float size)
    1068955{
    1069956    if (family.isEmpty())
    1070957        return nullptr;
    1071958
    1072     auto foundFont = platformFontWithFamilySpecialCase(family, weight, desiredTraits, size);
     959    auto foundFont = platformFontWithFamilySpecialCase(family, request, size);
    1073960    if (!foundFont)
    1074         foundFont = platformFontLookupWithFamily(family, desiredTraits, weight, stretch, size);
     961        foundFont = platformFontLookupWithFamily(family, request, size);
    1075962    return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, featureSettings, variantSettings, variationSettings);
    1076963}
     
    1110997std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings)
    1111998{
    1112     CTFontSymbolicTraits traits = computeTraits(fontDescription);
    1113999    float size = fontDescription.computedPixelSize();
    11141000
    1115     auto font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.stretch(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
     1001    auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
    11161002
    11171003#if PLATFORM(MAC)
     
    11241010        autoActivateFont(family.string(), size);
    11251011
    1126         font = fontWithFamily(family, traits, fontDescription.weight(), fontDescription.stretch(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
     1012        font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
    11271013    }
    11281014#endif
     
    11621048#endif
    11631049
    1164 static RetainPtr<CTFontRef> lookupFallbackFont(CTFontRef font, FontWeight fontWeight, const AtomicString& locale, const UChar* characters, unsigned length)
     1050static RetainPtr<CTFontRef> lookupFallbackFont(CTFontRef font, FontSelectionValue fontWeight, const AtomicString& locale, const UChar* characters, unsigned length)
    11651051{
    11661052    ASSERT(length > 0);
  • trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp

    r213436 r213464  
    139139}
    140140
    141 auto FontCache::getTraitsAndStretchInFamily(const AtomicString& familyName) -> Vector<TraitsAndStretch>
     141Vector<FontSelectionCapabilities> FontCache::getFontSelectionCapabilitiesInFamily(const AtomicString& familyName)
    142142{
    143143    return { };
     
    164164}
    165165
    166 static int fontWeightToFontconfigWeight(FontWeight weight)
    167 {
    168     switch (weight) {
    169     case FontWeight100:
     166static int fontWeightToFontconfigWeight(FontSelectionValue weight)
     167{
     168    if (weight < FontSelectionValue(150))
    170169        return FC_WEIGHT_THIN;
    171     case FontWeight200:
     170    if (weight < FontSelectionValue(250))
    172171        return FC_WEIGHT_ULTRALIGHT;
    173     case FontWeight300:
     172    if (weight < FontSelectionValue(350))
    174173        return FC_WEIGHT_LIGHT;
    175     case FontWeight400:
     174    if (weight < FontSelectionValue(450))
    176175        return FC_WEIGHT_REGULAR;
    177     case FontWeight500:
     176    if (weight < FontSelectionValue(550))
    178177        return FC_WEIGHT_MEDIUM;
    179     case FontWeight600:
     178    if (weight < FontSelectionValue(650))
    180179        return FC_WEIGHT_SEMIBOLD;
    181     case FontWeight700:
     180    if (weight < FontSelectionValue(750))
    182181        return FC_WEIGHT_BOLD;
    183     case FontWeight800:
     182    if (weight < FontSelectionValue(850))
    184183        return FC_WEIGHT_EXTRABOLD;
    185     case FontWeight900:
    186         return FC_WEIGHT_ULTRABLACK;
    187     default:
    188         ASSERT_NOT_REACHED();
    189         return FC_WEIGHT_REGULAR;
    190     }
     184    return FC_WEIGHT_ULTRABLACK;
    191185}
    192186
  • trunk/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp

    r211029 r213464  
    150150
    151151    bool descriptionAllowsSyntheticBold = fontDescription.fontSynthesis() & FontSynthesisWeight;
    152     if (descriptionAllowsSyntheticBold && fontDescription.weight() >= FontWeightBold) {
     152    if (descriptionAllowsSyntheticBold && isFontWeightBold(fontDescription.weight())) {
    153153        // The FC_EMBOLDEN property instructs us to fake the boldness of the font.
    154154        FcBool fontConfigEmbolden = FcFalse;
  • trunk/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm

    r213163 r213464  
    8080}
    8181
    82 float FontCache::weightOfCTFont(CTFontRef font)
    83 {
    84     RetainPtr<CFDictionaryRef> traits = adoptCF(CTFontCopyTraits(font));
    85 
    86     CFNumberRef resultRef = (CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontWeightTrait);
    87     float result = 0;
    88     CFNumberGetValue(resultRef, kCFNumberFloatType, &result);
    89 
    90     return result;
    91 }
    92 
    93 static RetainPtr<CTFontDescriptorRef> baseSystemFontDescriptor(FontWeight weight, bool bold, float size)
     82static RetainPtr<CTFontDescriptorRef> baseSystemFontDescriptor(FontSelectionValue weight, bool bold, float size)
    9483{
    9584    CTFontUIFontType fontType = kCTFontUIFontSystem;
    96     if (weight > FontWeight300) {
     85    if (weight >= FontSelectionValue(350)) {
    9786        if (bold)
    9887            fontType = kCTFontUIFontEmphasizedSystem;
    99     } else if (weight > FontWeight200)
     88    } else if (weight >= FontSelectionValue(250))
    10089        fontType = static_cast<CTFontUIFontType>(kCTFontUIFontSystemLight);
    101     else if (weight > FontWeight100)
     90    else if (weight >= FontSelectionValue(150))
    10291        fontType = static_cast<CTFontUIFontType>(kCTFontUIFontSystemThin);
    10392    else
     
    10796
    10897#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000
    109 static RetainPtr<NSDictionary> systemFontModificationAttributes(FontWeight weight, bool italic)
     98static RetainPtr<NSDictionary> systemFontModificationAttributes(FontSelectionValue weight, bool italic)
    11099{
    111100    RetainPtr<NSMutableDictionary> traitsDictionary = adoptNS([[NSMutableDictionary alloc] init]);
    112101
    113     ASSERT(weight >= FontWeight100 && weight <= FontWeight900);
    114     float ctWeights[] = {
    115         static_cast<float>(kCTFontWeightUltraLight),
    116         static_cast<float>(kCTFontWeightThin),
    117         static_cast<float>(kCTFontWeightLight),
    118         static_cast<float>(kCTFontWeightRegular),
    119         static_cast<float>(kCTFontWeightMedium),
    120         static_cast<float>(kCTFontWeightSemibold),
    121         static_cast<float>(kCTFontWeightBold),
    122         static_cast<float>(kCTFontWeightHeavy),
    123         static_cast<float>(kCTFontWeightBlack)
    124     };
    125     [traitsDictionary setObject:[NSNumber numberWithFloat:ctWeights[weight]] forKey:static_cast<NSString *>(kCTFontWeightTrait)];
     102    float ctWeight = kCTFontWeightRegular;
     103    if (weight < FontSelectionValue(150))
     104        ctWeight = kCTFontWeightUltraLight;
     105    else if (weight < FontSelectionValue(250))
     106        ctWeight = kCTFontWeightThin;
     107    else if (weight < FontSelectionValue(350))
     108        ctWeight = kCTFontWeightLight;
     109    else if (weight < FontSelectionValue(450))
     110        ctWeight = kCTFontWeightRegular;
     111    else if (weight < FontSelectionValue(550))
     112        ctWeight = kCTFontWeightMedium;
     113    else if (weight < FontSelectionValue(650))
     114        ctWeight = kCTFontWeightSemibold;
     115    else if (weight < FontSelectionValue(750))
     116        ctWeight = kCTFontWeightBold;
     117    else if (weight < FontSelectionValue(850))
     118        ctWeight = kCTFontWeightHeavy;
     119    else
     120        ctWeight = kCTFontWeightBlack;
     121    [traitsDictionary setObject:[NSNumber numberWithFloat:ctWeight] forKey:static_cast<NSString *>(kCTFontWeightTrait)];
    126122
    127123    [traitsDictionary setObject:@YES forKey:static_cast<NSString *>(kCTFontUIFontDesignTrait)];
     
    134130#endif
    135131
    136 static RetainPtr<CTFontDescriptorRef> systemFontDescriptor(FontWeight weight, bool bold, bool italic, float size)
     132static RetainPtr<CTFontDescriptorRef> systemFontDescriptor(FontSelectionValue weight, bool bold, bool italic, float size)
    137133{
    138134    RetainPtr<CTFontDescriptorRef> fontDescriptor = baseSystemFontDescriptor(weight, bold, size);
     
    147143}
    148144
    149 RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontWeight weight, CTFontSymbolicTraits traits, float size)
     145RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest request, float size)
    150146{
    151147    if (family.startsWith("UICTFontTextStyle")) {
    152         traits &= (kCTFontBoldTrait | kCTFontItalicTrait);
     148        CTFontSymbolicTraits traits = (isFontWeightBold(request.weight) ? kCTFontTraitBold : 0) | (isItalic(request.slope) ? kCTFontTraitItalic : 0);
    153149        RetainPtr<CFStringRef> familyNameStr = family.string().createCFString();
    154150        RetainPtr<CTFontDescriptorRef> fontDescriptor = adoptCF(CTFontDescriptorCreateWithTextStyle(familyNameStr.get(), RenderThemeIOS::contentSizeCategory(), nullptr));
     
    160156
    161157    if (equalLettersIgnoringASCIICase(family, "-webkit-system-font") || equalLettersIgnoringASCIICase(family, "-apple-system") || equalLettersIgnoringASCIICase(family, "-apple-system-font") || equalLettersIgnoringASCIICase(family, "system-ui")) {
    162         return adoptCF(CTFontCreateWithFontDescriptor(systemFontDescriptor(weight, traits & kCTFontTraitBold, traits & kCTFontTraitItalic, size).get(), size, nullptr));
     158        return adoptCF(CTFontCreateWithFontDescriptor(systemFontDescriptor(request.weight, isFontWeightBold(request.weight), isItalic(request.slope), size).get(), size, nullptr));
    163159    }
    164160
  • trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm

    r213163 r213464  
    5353#if PLATFORM(MAC)
    5454
    55 static CGFloat toNSFontWeight(FontWeight fontWeight)
     55static CGFloat toNSFontWeight(FontSelectionValue fontWeight)
    5656{
    57     static const CGFloat nsFontWeights[] = {
    58         NSFontWeightUltraLight,
    59         NSFontWeightThin,
    60         NSFontWeightLight,
    61         NSFontWeightRegular,
    62         NSFontWeightMedium,
    63         NSFontWeightSemibold,
    64         NSFontWeightBold,
    65         NSFontWeightHeavy,
    66         NSFontWeightBlack
    67     };
    68     ASSERT(fontWeight >= 0 && fontWeight <= 8);
    69     return nsFontWeights[fontWeight];
     57    if (fontWeight < FontSelectionValue(150))
     58        return NSFontWeightUltraLight;
     59    if (fontWeight < FontSelectionValue(250))
     60        return NSFontWeightThin;
     61    if (fontWeight < FontSelectionValue(350))
     62        return NSFontWeightLight;
     63    if (fontWeight < FontSelectionValue(450))
     64        return NSFontWeightRegular;
     65    if (fontWeight < FontSelectionValue(550))
     66        return NSFontWeightMedium;
     67    if (fontWeight < FontSelectionValue(650))
     68        return NSFontWeightSemibold;
     69    if (fontWeight < FontSelectionValue(750))
     70        return NSFontWeightBold;
     71    if (fontWeight < FontSelectionValue(850))
     72        return NSFontWeightHeavy;
     73    return NSFontWeightBlack;
    7074}
    7175
    72 RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontWeight weight, CTFontSymbolicTraits desiredTraits, float size)
     76RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest request, float size)
    7377{
    7478    if (equalLettersIgnoringASCIICase(family, "-webkit-system-font") || equalLettersIgnoringASCIICase(family, "-apple-system") || equalLettersIgnoringASCIICase(family, "-apple-system-font") || equalLettersIgnoringASCIICase(family, "system-ui")) {
    75         RetainPtr<CTFontRef> result = toCTFont([NSFont systemFontOfSize:size weight:toNSFontWeight(weight)]);
    76         if (desiredTraits & kCTFontItalicTrait) {
     79        RetainPtr<CTFontRef> result = toCTFont([NSFont systemFontOfSize:size weight:toNSFontWeight(request.weight)]);
     80        if (isItalic(request.slope)) {
     81            CTFontSymbolicTraits desiredTraits = kCTFontItalicTrait;
     82            if (isFontWeightBold(request.weight))
     83                desiredTraits |= kCTFontBoldTrait;
    7784            if (auto italicizedFont = adoptCF(CTFontCreateCopyWithSymbolicTraits(result.get(), size, nullptr, desiredTraits, desiredTraits)))
    7885                result = italicizedFont;
  • trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp

    r213436 r213464  
    399399}
    400400
    401 static LONG toGDIFontWeight(FontWeight fontWeight)
    402 {
    403     static LONG gdiFontWeights[] = {
    404         FW_THIN,        // FontWeight100
    405         FW_EXTRALIGHT,  // FontWeight200
    406         FW_LIGHT,       // FontWeight300
    407         FW_NORMAL,      // FontWeight400
    408         FW_MEDIUM,      // FontWeight500
    409         FW_SEMIBOLD,    // FontWeight600
    410         FW_BOLD,        // FontWeight700
    411         FW_EXTRABOLD,   // FontWeight800
    412         FW_HEAVY        // FontWeight900
    413     };
    414     return gdiFontWeights[fontWeight];
     401static LONG toGDIFontWeight(FontSelectionValue fontWeight)
     402{
     403    if (fontWeight < FontSelectionValue(150))
     404        return FW_THIN;
     405    if (fontWeight < FontSelectionValue(250))
     406        return FW_EXTRALIGHT;
     407    if (fontWeight < FontSelectionValue(350))
     408        return FW_LIGHT;
     409    if (fontWeight < FontSelectionValue(450))
     410        return FW_NORMAL;
     411    if (fontWeight < FontSelectionValue(550))
     412        return FW_MEDIUM;
     413    if (fontWeight < FontSelectionValue(650))
     414        return FW_SEMIBOLD;
     415    if (fontWeight < FontSelectionValue(750))
     416        return FW_BOLD;
     417    if (fontWeight < FontSelectionValue(850))
     418        return FW_EXTRABOLD;
     419    return FW_HEAVY;
    415420}
    416421
     
    537542
    538543    const AtomicString& m_familyName;
    539     HashSet<unsigned> m_traitsMasks;
     544    Vector<FontSelectionCapabilities> m_capabilities;
    540545};
    541546
     
    544549    TraitsInFamilyProcData* procData = reinterpret_cast<TraitsInFamilyProcData*>(lParam);
    545550
    546     unsigned traitsMask = 0;
    547     traitsMask |= logFont->lfItalic ? FontStyleItalicMask : FontStyleNormalMask;
    548     LONG weight = adjustedGDIFontWeight(logFont->lfWeight, procData->m_familyName);
    549     traitsMask |= weight == FW_THIN ? FontWeight100Mask :
    550         weight == FW_EXTRALIGHT ? FontWeight200Mask :
    551         weight == FW_LIGHT ? FontWeight300Mask :
    552         weight == FW_NORMAL ? FontWeight400Mask :
    553         weight == FW_MEDIUM ? FontWeight500Mask :
    554         weight == FW_SEMIBOLD ? FontWeight600Mask :
    555         weight == FW_BOLD ? FontWeight700Mask :
    556         weight == FW_EXTRABOLD ? FontWeight800Mask :
    557                                  FontWeight900Mask;
    558     procData->m_traitsMasks.add(traitsMask);
     551    FontSelectionValue italic = logFont->lfItalic ? italicThreshold() : FontSelectionValue();
     552
     553    FontSelectionValue weight;
     554    switch (adjustedGDIFontWeight(logFont->lfWeight, procData->m_familyName)) {
     555    case FW_THIN:
     556        weight = FontSelectionValue(100);
     557        break;
     558    case FW_EXTRALIGHT:
     559        weight = FontSelectionValue(200);
     560        break;
     561    case FW_LIGHT:
     562        weight = FontSelectionValue(300);
     563        break;
     564    case FW_NORMAL:
     565        weight = FontSelectionValue(400);
     566        break;
     567    case FW_MEDIUM:
     568        weight = FontSelectionValue(500);
     569        break;
     570    case FW_SEMIBOLD:
     571        weight = FontSelectionValue(600);
     572        break;
     573    case FW_BOLD:
     574        weight = FontSelectionValue(700);
     575        break;
     576    case FW_EXTRABOLD:
     577        weight = FontSelectionValue(800);
     578        break;
     579    default:
     580        weight = FontSelectionValue(900);
     581        break;
     582    }
     583
     584    FontSelectionValue stretch = normalStretchValue();
     585
     586    FontSelectionCapabilities result;
     587    result.weight = FontSelectionRange(weight, weight);
     588    result.width = FontSelectionRange(stretch, stretch);
     589    result.slope = FontSelectionRange(italic, italic);
     590    procData->m_capabilities.append(WTFMove(result));
    559591    return 1;
    560592}
    561593
    562 auto FontCache::getTraitsAndStretchInFamily(const AtomicString& familyName) -> Vector<TraitsAndStretch>
     594Vector<FontSelectionCapabilities> FontCache::getFontSelectionCapabilitiesInFamily(const AtomicString& familyName)
    563595{
    564596    HWndDC hdc(0);
     
    573605    TraitsInFamilyProcData procData(familyName);
    574606    EnumFontFamiliesEx(hdc, &logFont, traitsInFamilyEnumProc, reinterpret_cast<LPARAM>(&procData), 0);
    575     Vector<TraitsAndStretch> result;
    576     result.reserveInitialCapacity(procData.m_traitsMasks.size());
    577     for (unsigned mask : procData.m_traitsMasks)
    578         result.uncheckedAppend({ static_cast<FontTraitsMask>(mask), FontSelectionRange(FontSelectionValue(), FontSelectionValue()) });
     607    Vector<FontSelectionCapabilities> result;
     608    result.reserveInitialCapacity(procData.m_capabilities.size());
     609    for (auto capabilities : procData.m_capabilities)
     610        result.uncheckedAppend(capabilities);
    579611    return result;
    580612}
  • trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp

    r212399 r213464  
    150150    fontDescription.setSpecifiedSize(m_baseFontSize);
    151151    fontDescription.setComputedSize(m_baseFontSize);
    152     fontDescription.setWeight(FontWeight500);
     152    fontDescription.setWeight(FontSelectionValue(500));
    153153
    154154    m_timeFont = FontCascade(fontDescription, 0, 0);
  • trunk/Source/WebCore/platform/text/TextFlags.h

    r213436 r213464  
    341341COMPILE_ASSERT(!(LastFontWidthVariant >> FontWidthVariantWidth), FontWidthVariantWidth_is_correct);
    342342
    343 enum FontWeight {
    344     FontWeight100,
    345     FontWeight200,
    346     FontWeight300,
    347     FontWeight400,
    348     FontWeight500,
    349     FontWeight600,
    350     FontWeight700,
    351     FontWeight800,
    352     FontWeight900,
    353     FontWeightNormal = FontWeight400,
    354     FontWeightBold = FontWeight700
    355 };
    356 
    357 enum FontItalic {
    358     FontItalicOff = 0,
    359     FontItalicOn = 1
    360 };
    361 
    362343enum FontSmallCaps {
    363344    FontSmallCapsOff = 0,
     
    365346};
    366347
    367 enum {
    368     FontStyleNormalBit = 0,
    369     FontStyleItalicBit,
    370     FontWeight100Bit,
    371     FontWeight200Bit,
    372     FontWeight300Bit,
    373     FontWeight400Bit,
    374     FontWeight500Bit,
    375     FontWeight600Bit,
    376     FontWeight700Bit,
    377     FontWeight800Bit,
    378     FontWeight900Bit,
    379     FontTraitsMaskWidth
    380 };
    381 
    382 enum FontTraitsMask {
    383     FontStyleNormalMask = 1 << FontStyleNormalBit,
    384     FontStyleItalicMask = 1 << FontStyleItalicBit,
    385     FontStyleMask = FontStyleNormalMask | FontStyleItalicMask,
    386 
    387     FontWeight100Mask = 1 << FontWeight100Bit,
    388     FontWeight200Mask = 1 << FontWeight200Bit,
    389     FontWeight300Mask = 1 << FontWeight300Bit,
    390     FontWeight400Mask = 1 << FontWeight400Bit,
    391     FontWeight500Mask = 1 << FontWeight500Bit,
    392     FontWeight600Mask = 1 << FontWeight600Bit,
    393     FontWeight700Mask = 1 << FontWeight700Bit,
    394     FontWeight800Mask = 1 << FontWeight800Bit,
    395     FontWeight900Mask = 1 << FontWeight900Bit,
    396     FontWeightMask = FontWeight100Mask | FontWeight200Mask | FontWeight300Mask | FontWeight400Mask | FontWeight500Mask | FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask
    397 };
    398 
    399348enum class Kerning {
    400349    Auto,
  • trunk/Source/WebCore/platform/win/DragImageWin.cpp

    r212669 r213464  
    112112
    113113    FontCascadeDescription description;
    114     description.setWeight(bold ? FontWeightBold : FontWeightNormal);
     114    description.setWeight(bold ? boldWeightValue() : normalWeightValue());
    115115    description.setOneFamily(metrics.lfSmCaptionFont.lfFaceName);
    116116    description.setSpecifiedSize((float)size);
  • trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp

    r211033 r213464  
    353353    FontCascadeDescription fontDescription;
    354354    RenderTheme::defaultTheme()->systemFont(CSSValueWebkitSmallControl, fontDescription);
    355     fontDescription.setWeight(FontWeightBold);
     355    fontDescription.setWeight(boldWeightValue());
    356356    fontDescription.setRenderingMode(settings().fontRenderingMode());
    357357    fontDescription.setComputedSize(12);
  • trunk/Source/WebCore/rendering/RenderThemeGtk.cpp

    r210758 r213464  
    111111    fontDescription.setSpecifiedSize(size);
    112112    fontDescription.setIsAbsoluteSize(true);
    113     fontDescription.setWeight(FontWeightNormal);
    114     fontDescription.setItalic(FontItalicOff);
     113    fontDescription.setWeight(normalWeightValue());
     114    fontDescription.setItalic(FontSelectionValue());
    115115    pango_font_description_free(pangoDescription);
    116116}
  • trunk/Source/WebCore/rendering/RenderThemeIOS.mm

    r210959 r213464  
    12741274    ASSERT(fontDescriptor);
    12751275    RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), 0, nullptr));
    1276     font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), nullptr, nullptr, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings());
    12771276    fontDescription.setIsAbsoluteSize(true);
    12781277    fontDescription.setOneFamily(textStyle);
    12791278    fontDescription.setSpecifiedSize(CTFontGetSize(font.get()));
    1280     fontDescription.setWeight(fontWeightFromCoreText(FontCache::weightOfCTFont(font.get())));
    1281     fontDescription.setItalic(FontItalicOff);
     1279    auto capabilities = capabilitiesForFontDescriptor(adoptCF(CTFontCopyFontDescriptor(font.get())).get());
     1280    fontDescription.setWeight(capabilities.weight.minimum);
     1281    fontDescription.setItalic(normalItalicValue());
    12821282}
    12831283
  • trunk/Source/WebCore/rendering/RenderThemeMac.mm

    r212985 r213464  
    358358}
    359359
    360 static FontWeight toFontWeight(NSInteger appKitFontWeight)
     360static FontSelectionValue toFontWeight(NSInteger appKitFontWeight)
    361361{
    362362    ASSERT(appKitFontWeight > 0 && appKitFontWeight < 15);
     
    366366        appKitFontWeight = 1;
    367367
    368     static const FontWeight fontWeights[] = {
    369         FontWeight100,
    370         FontWeight100,
    371         FontWeight200,
    372         FontWeight300,
    373         FontWeight400,
    374         FontWeight500,
    375         FontWeight600,
    376         FontWeight600,
    377         FontWeight700,
    378         FontWeight800,
    379         FontWeight800,
    380         FontWeight900,
    381         FontWeight900,
    382         FontWeight900
     368    static const FontSelectionValue fontWeights[] = {
     369        FontSelectionValue(100),
     370        FontSelectionValue(100),
     371        FontSelectionValue(200),
     372        FontSelectionValue(300),
     373        FontSelectionValue(400),
     374        FontSelectionValue(500),
     375        FontSelectionValue(600),
     376        FontSelectionValue(600),
     377        FontSelectionValue(700),
     378        FontSelectionValue(800),
     379        FontSelectionValue(800),
     380        FontSelectionValue(900),
     381        FontSelectionValue(900),
     382        FontSelectionValue(900)
    383383    };
    384384    return fontWeights[appKitFontWeight - 1];
  • trunk/Source/WebCore/rendering/RenderThemeWin.cpp

    r207814 r213464  
    325325    fontDescription.setOneFamily(String(logFont.lfFaceName));
    326326    fontDescription.setSpecifiedSize(fontSize);
    327     fontDescription.setWeight(logFont.lfWeight >= 700 ? FontWeightBold : FontWeightNormal); // FIXME: Use real weight.
     327    fontDescription.setWeight(logFont.lfWeight >= 700 ? boldWeightValue() : normalWeightValue()); // FIXME: Use real weight.
    328328    fontDescription.setIsItalic(logFont.lfItalic);
    329329}
  • trunk/Source/WebKit/mac/ChangeLog

    r213410 r213464  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Expand font-weight and font-stretch to take any number
     4        https://bugs.webkit.org/show_bug.cgi?id=168889
     5
     6        Reviewed by Simon Fraser.
     7
     8        Migrate off old enum types.
     9
     10        * WebCoreSupport/PopupMenuMac.mm:
     11        (PopupMenuMac::populate):
     12        * WebView/WebHTMLView.mm:
     13        (fontNameForDescription):
     14        * WebView/WebView.mm:
     15        (-[WebView updateTextTouchBar]):
     16
    1172017-03-03  Dean Jackson  <dino@apple.com>
    218
  • trunk/Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm

    r208455 r213464  
    8585            if (!font) {
    8686                CGFloat size = style.font().primaryFont().platformData().size();
    87                 font = adoptCF(CTFontCreateUIFontForLanguage(style.font().weight() < FontWeightBold ? kCTFontUIFontSystem : kCTFontUIFontEmphasizedSystem, size, nullptr));
     87                font = adoptCF(CTFontCreateUIFontForLanguage(isFontWeightBold(style.font().weight()) ? kCTFontUIFontEmphasizedSystem : kCTFontUIFontSystem, size, nullptr));
    8888            }
    8989            [attributes setObject:toNSFont(font.get()) forKey:NSFontAttributeName];
  • trunk/Source/WebKit/mac/WebView/WebHTMLView.mm

    r212697 r213464  
    56305630    FontDescription fontDescription;
    56315631    fontDescription.setIsItalic(italic);
    5632     fontDescription.setWeight(bold ? FontWeight900 : FontWeight500);
     5632    fontDescription.setWeight(bold ? FontSelectionValue(900) : FontSelectionValue(500));
    56335633    RefPtr<Font> font = FontCache::singleton().fontForFamily(fontDescription, familyName);
    56345634    return adoptCF(CTFontCopyPostScriptName(font->getCTFont()));
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r213410 r213464  
    96199619            Node* nodeToRemove;
    96209620            if (auto* style = Editor::styleForSelectionStart(coreFrame, nodeToRemove)) {
    9621                 [_private->_textTouchBarItemController setTextIsBold:(style->fontCascade().weight() >= FontWeightBold)];
    9622                 [_private->_textTouchBarItemController setTextIsItalic:(style->fontCascade().italic() == FontItalicOn)];
     9621                [_private->_textTouchBarItemController setTextIsBold:isFontWeightBold(style->fontCascade().weight())];
     9622                [_private->_textTouchBarItemController setTextIsItalic:isItalic(style->fontCascade().italic())];
    96239623
    96249624                RefPtr<EditingStyle> typingStyle = coreFrame->selection().typingStyle();
  • trunk/Source/WebKit/win/ChangeLog

    r213355 r213464  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Expand font-weight and font-stretch to take any number
     4        https://bugs.webkit.org/show_bug.cgi?id=168889
     5
     6        Reviewed by Simon Fraser.
     7
     8        Migrate off old enum types.
     9
     10        * WebKitGraphics.cpp:
     11        (makeFont):
     12
    1132017-03-02  Sam Weinig  <sam@webkit.org>
    214
  • trunk/Source/WebKit/win/DOMCoreClasses.cpp

    r208603 r213464  
    12951295    webFontDescription->familyLength = family.length();
    12961296    webFontDescription->size = fontDescription.computedSize();
    1297     webFontDescription->bold = fontDescription.weight() >= WebCore::FontWeight600;
     1297    webFontDescription->bold = isFontWeightBold(fontDescription.weight());
    12981298    webFontDescription->italic = fontDescription.italic();
    12991299
  • trunk/Source/WebKit/win/WebKitGraphics.cpp

    r195180 r213464  
    5858    f.setComputedSize(description.size);
    5959    f.setIsItalic(description.italic);
    60     f.setWeight(description.bold ? FontWeightBold : FontWeightNormal);
     60    f.setWeight(description.bold ? boldWeightValue() : normalWeightValue());
    6161    f.setIsAbsoluteSize(true);
    6262
  • trunk/Source/WebKit2/ChangeLog

    r213444 r213464  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Expand font-weight and font-stretch to take any number
     4        https://bugs.webkit.org/show_bug.cgi?id=168889
     5
     6        Reviewed by Simon Fraser.
     7
     8        Migrate off old enum types.
     9
     10        * WebProcess/WebPage/WebPage.cpp:
     11        (WebKit::WebPage::editorState):
     12
    1132017-03-06  Andreas Kling  <akling@apple.com>
    214
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r213410 r213464  
    832832            Node* nodeToRemove;
    833833            if (auto* style = Editor::styleForSelectionStart(&frame, nodeToRemove)) {
    834                 if (style->fontCascade().weight() >= FontWeightBold)
     834                if (isFontWeightBold(style->fontCascade().weight()))
    835835                    postLayoutData.typingAttributes |= AttributeBold;
    836                 if (style->fontCascade().italic() == FontItalicOn)
     836                if (isItalic(style->fontCascade().italic()))
    837837                    postLayoutData.typingAttributes |= AttributeItalics;
    838838
  • trunk/Tools/ChangeLog

    r213450 r213464  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Expand font-weight and font-stretch to take any number
     4        https://bugs.webkit.org/show_bug.cgi?id=168889
     5
     6        Reviewed by Simon Fraser.
     7
     8        Migrate off old enum types.
     9
     10        * TestWebKitAPI/Tests/WebCore/FontCache.cpp:
     11        (TestWebKitAPI::createPlatformFont):
     12        (TestWebKitAPI::compareFonts):
     13        (TestWebKitAPI::TEST_F):
     14
    1152017-03-06  Yusuke Suzuki  <utatane.tea@gmail.com>
    216
  • trunk/Tools/TestWebKitAPI/Tests/WebCore/FontCache.cpp

    r213341 r213464  
    5050};
    5151
    52 static std::unique_ptr<FontPlatformData> createPlatformFont(const char* familyName, FontWeight weight, FontItalic italic, float stretch, float size)
     52static std::unique_ptr<FontPlatformData> createPlatformFont(const char* familyName, float weight, float italic, float stretch, float size)
    5353{
    5454    AtomicString familyNameString(familyName);
    5555    FontCascadeDescription description;
    5656    description.setOneFamily(familyNameString);
    57     description.setWeight(weight);
    58     description.setItalic(italic);
     57    description.setWeight(FontSelectionValue(weight));
     58    description.setItalic(FontSelectionValue(italic));
    5959    description.setStretch(FontSelectionValue(stretch));
    6060    description.setComputedSize(size);
     
    6464}
    6565
    66 static bool compareFonts(const char* familyName, FontWeight weight, FontItalic italic, float stretch, CFStringRef expectedPostScriptName)
     66static bool compareFonts(const char* familyName, float weight, float italic, float stretch, CFStringRef expectedPostScriptName)
    6767{
    6868    float size = 80;
     
    7474TEST_F(FontCacheTest, FontLookupFromFamilyName)
    7575{
    76     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Thin")));
    77     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    78     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    79     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    80     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Light")));
    81     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    82     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Regular")));
    83     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    84     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Medium")));
    85     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    86     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    87     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    88     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    89     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    90     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    91     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    92     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    93     EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    94     EXPECT_TRUE(compareFonts("Arial", FontWeight100, FontItalicOff, 100, CFSTR("ArialMT")));
    95     EXPECT_TRUE(compareFonts("Arial", FontWeight100, FontItalicOn , 100, CFSTR("Arial-ItalicMT")));
    96     EXPECT_TRUE(compareFonts("Arial", FontWeight200, FontItalicOff, 100, CFSTR("ArialMT")));
    97     EXPECT_TRUE(compareFonts("Arial", FontWeight200, FontItalicOn , 100, CFSTR("Arial-ItalicMT")));
    98     EXPECT_TRUE(compareFonts("Arial", FontWeight300, FontItalicOff, 100, CFSTR("ArialMT")));
    99     EXPECT_TRUE(compareFonts("Arial", FontWeight300, FontItalicOn , 100, CFSTR("Arial-ItalicMT")));
    100     EXPECT_TRUE(compareFonts("Arial", FontWeight400, FontItalicOff, 100, CFSTR("ArialMT")));
    101     EXPECT_TRUE(compareFonts("Arial", FontWeight400, FontItalicOn , 100, CFSTR("Arial-ItalicMT")));
    102     EXPECT_TRUE(compareFonts("Arial", FontWeight500, FontItalicOff, 100, CFSTR("ArialMT")));
    103     EXPECT_TRUE(compareFonts("Arial", FontWeight500, FontItalicOn , 100, CFSTR("Arial-ItalicMT")));
    104     EXPECT_TRUE(compareFonts("Arial", FontWeight600, FontItalicOff, 100, CFSTR("Arial-BoldMT")));
    105     EXPECT_TRUE(compareFonts("Arial", FontWeight600, FontItalicOn , 100, CFSTR("Arial-BoldItalicMT")));
    106     EXPECT_TRUE(compareFonts("Arial", FontWeight700, FontItalicOff, 100, CFSTR("Arial-BoldMT")));
    107     EXPECT_TRUE(compareFonts("Arial", FontWeight700, FontItalicOn , 100, CFSTR("Arial-BoldItalicMT")));
    108     EXPECT_TRUE(compareFonts("Arial", FontWeight800, FontItalicOff, 100, CFSTR("Arial-BoldMT")));
    109     EXPECT_TRUE(compareFonts("Arial", FontWeight800, FontItalicOn , 100, CFSTR("Arial-BoldItalicMT")));
    110     EXPECT_TRUE(compareFonts("Arial", FontWeight900, FontItalicOff, 100, CFSTR("Arial-BoldMT")));
    111     EXPECT_TRUE(compareFonts("Arial", FontWeight900, FontItalicOn , 100, CFSTR("Arial-BoldItalicMT")));
    112     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    113     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    114     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    115     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    116     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    117     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    118     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-Regular")));
    119     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    120     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-Medium")));
    121     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    122     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    123     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    124     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    125     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    126     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    127     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    128     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    129     EXPECT_TRUE(compareFonts("Avenir Next", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    130     EXPECT_TRUE(compareFonts("Avenir", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Light")));
    131     EXPECT_TRUE(compareFonts("Avenir", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    132     EXPECT_TRUE(compareFonts("Avenir", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Light")));
    133     EXPECT_TRUE(compareFonts("Avenir", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    134     EXPECT_TRUE(compareFonts("Avenir", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Light")));
    135     EXPECT_TRUE(compareFonts("Avenir", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    136     EXPECT_TRUE(compareFonts("Avenir", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Book")));
    137     EXPECT_TRUE(compareFonts("Avenir", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    138     EXPECT_TRUE(compareFonts("Avenir", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Medium")));
    139     EXPECT_TRUE(compareFonts("Avenir", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    140     EXPECT_TRUE(compareFonts("Avenir", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    141     EXPECT_TRUE(compareFonts("Avenir", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    142     EXPECT_TRUE(compareFonts("Avenir", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    143     EXPECT_TRUE(compareFonts("Avenir", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    144     EXPECT_TRUE(compareFonts("Avenir", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    145     EXPECT_TRUE(compareFonts("Avenir", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    146     EXPECT_TRUE(compareFonts("Avenir", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    147     EXPECT_TRUE(compareFonts("Avenir", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    148     EXPECT_TRUE(compareFonts("Baskerville", FontWeight100, FontItalicOff, 100, CFSTR("Baskerville")));
    149     EXPECT_TRUE(compareFonts("Baskerville", FontWeight100, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    150     EXPECT_TRUE(compareFonts("Baskerville", FontWeight200, FontItalicOff, 100, CFSTR("Baskerville")));
    151     EXPECT_TRUE(compareFonts("Baskerville", FontWeight200, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    152     EXPECT_TRUE(compareFonts("Baskerville", FontWeight300, FontItalicOff, 100, CFSTR("Baskerville")));
    153     EXPECT_TRUE(compareFonts("Baskerville", FontWeight300, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    154     EXPECT_TRUE(compareFonts("Baskerville", FontWeight400, FontItalicOff, 100, CFSTR("Baskerville")));
    155     EXPECT_TRUE(compareFonts("Baskerville", FontWeight400, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    156     EXPECT_TRUE(compareFonts("Baskerville", FontWeight500, FontItalicOff, 100, CFSTR("Baskerville")));
    157     EXPECT_TRUE(compareFonts("Baskerville", FontWeight500, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    158     EXPECT_TRUE(compareFonts("Baskerville", FontWeight600, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    159     EXPECT_TRUE(compareFonts("Baskerville", FontWeight600, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    160     EXPECT_TRUE(compareFonts("Baskerville", FontWeight700, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    161     EXPECT_TRUE(compareFonts("Baskerville", FontWeight700, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    162     EXPECT_TRUE(compareFonts("Baskerville", FontWeight800, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    163     EXPECT_TRUE(compareFonts("Baskerville", FontWeight800, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    164     EXPECT_TRUE(compareFonts("Baskerville", FontWeight900, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    165     EXPECT_TRUE(compareFonts("Baskerville", FontWeight900, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    166     EXPECT_TRUE(compareFonts("Didot", FontWeight100, FontItalicOff, 100, CFSTR("Didot")));
    167     EXPECT_TRUE(compareFonts("Didot", FontWeight100, FontItalicOn , 100, CFSTR("Didot-Italic")));
    168     EXPECT_TRUE(compareFonts("Didot", FontWeight200, FontItalicOff, 100, CFSTR("Didot")));
    169     EXPECT_TRUE(compareFonts("Didot", FontWeight200, FontItalicOn , 100, CFSTR("Didot-Italic")));
    170     EXPECT_TRUE(compareFonts("Didot", FontWeight300, FontItalicOff, 100, CFSTR("Didot")));
    171     EXPECT_TRUE(compareFonts("Didot", FontWeight300, FontItalicOn , 100, CFSTR("Didot-Italic")));
    172     EXPECT_TRUE(compareFonts("Didot", FontWeight400, FontItalicOff, 100, CFSTR("Didot")));
    173     EXPECT_TRUE(compareFonts("Didot", FontWeight400, FontItalicOn , 100, CFSTR("Didot-Italic")));
    174     EXPECT_TRUE(compareFonts("Didot", FontWeight500, FontItalicOff, 100, CFSTR("Didot")));
    175     EXPECT_TRUE(compareFonts("Didot", FontWeight500, FontItalicOn , 100, CFSTR("Didot-Italic")));
    176     EXPECT_TRUE(compareFonts("Didot", FontWeight600, FontItalicOff, 100, CFSTR("Didot-Bold")));
    177     EXPECT_TRUE(compareFonts("Didot", FontWeight600, FontItalicOn , 100, CFSTR("Didot-Italic")));
    178     EXPECT_TRUE(compareFonts("Didot", FontWeight700, FontItalicOff, 100, CFSTR("Didot-Bold")));
    179     EXPECT_TRUE(compareFonts("Didot", FontWeight700, FontItalicOn , 100, CFSTR("Didot-Italic")));
    180     EXPECT_TRUE(compareFonts("Didot", FontWeight800, FontItalicOff, 100, CFSTR("Didot-Bold")));
    181     EXPECT_TRUE(compareFonts("Didot", FontWeight800, FontItalicOn , 100, CFSTR("Didot-Italic")));
    182     EXPECT_TRUE(compareFonts("Didot", FontWeight900, FontItalicOff, 100, CFSTR("Didot-Bold")));
    183     EXPECT_TRUE(compareFonts("Didot", FontWeight900, FontItalicOn , 100, CFSTR("Didot-Italic")));
    184     EXPECT_TRUE(compareFonts("Futura", FontWeight100, FontItalicOff, 100, CFSTR("Futura-Medium")));
    185     EXPECT_TRUE(compareFonts("Futura", FontWeight100, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    186     EXPECT_TRUE(compareFonts("Futura", FontWeight200, FontItalicOff, 100, CFSTR("Futura-Medium")));
    187     EXPECT_TRUE(compareFonts("Futura", FontWeight200, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    188     EXPECT_TRUE(compareFonts("Futura", FontWeight300, FontItalicOff, 100, CFSTR("Futura-Medium")));
    189     EXPECT_TRUE(compareFonts("Futura", FontWeight300, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    190     EXPECT_TRUE(compareFonts("Futura", FontWeight400, FontItalicOff, 100, CFSTR("Futura-Medium")));
    191     EXPECT_TRUE(compareFonts("Futura", FontWeight400, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    192     EXPECT_TRUE(compareFonts("Futura", FontWeight500, FontItalicOff, 100, CFSTR("Futura-Medium")));
    193     EXPECT_TRUE(compareFonts("Futura", FontWeight500, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    194     EXPECT_TRUE(compareFonts("Futura", FontWeight600, FontItalicOff, 100, CFSTR("Futura-Bold")));
    195     EXPECT_TRUE(compareFonts("Futura", FontWeight600, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    196     EXPECT_TRUE(compareFonts("Futura", FontWeight700, FontItalicOff, 100, CFSTR("Futura-Bold")));
    197     EXPECT_TRUE(compareFonts("Futura", FontWeight700, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    198     EXPECT_TRUE(compareFonts("Futura", FontWeight800, FontItalicOff, 100, CFSTR("Futura-Bold")));
    199     EXPECT_TRUE(compareFonts("Futura", FontWeight800, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    200     EXPECT_TRUE(compareFonts("Futura", FontWeight900, FontItalicOff, 100, CFSTR("Futura-Bold")));
    201     EXPECT_TRUE(compareFonts("Futura", FontWeight900, FontItalicOn , 100, CFSTR("Futura-MediumItalic")));
    202     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight100, FontItalicOff, 100, CFSTR("HelveticaNeue-UltraLight")));
    203     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight100, FontItalicOn , 100, CFSTR("HelveticaNeue-UltraLightItalic")));
    204     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight200, FontItalicOff, 100, CFSTR("HelveticaNeue-Thin")));
    205     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight200, FontItalicOn , 100, CFSTR("HelveticaNeue-ThinItalic")));
    206     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight300, FontItalicOff, 100, CFSTR("HelveticaNeue-Light")));
    207     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight300, FontItalicOn , 100, CFSTR("HelveticaNeue-LightItalic")));
    208     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight400, FontItalicOff, 100, CFSTR("HelveticaNeue")));
    209     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight400, FontItalicOn , 100, CFSTR("HelveticaNeue-Italic")));
    210     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight500, FontItalicOff, 100, CFSTR("HelveticaNeue-Medium")));
    211     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight500, FontItalicOn , 100, CFSTR("HelveticaNeue-MediumItalic")));
    212     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight600, FontItalicOff, 100, CFSTR("HelveticaNeue-Bold")));
    213     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight600, FontItalicOn , 100, CFSTR("HelveticaNeue-BoldItalic")));
    214     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight700, FontItalicOff, 100, CFSTR("HelveticaNeue-Bold")));
    215     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight700, FontItalicOn , 100, CFSTR("HelveticaNeue-BoldItalic")));
    216     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight800, FontItalicOff, 100, CFSTR("HelveticaNeue-Bold")));
    217     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight800, FontItalicOn , 100, CFSTR("HelveticaNeue-BoldItalic")));
    218     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight900, FontItalicOff, 100, CFSTR("HelveticaNeue-Bold")));
    219     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight900, FontItalicOn , 100, CFSTR("HelveticaNeue-BoldItalic")));
    220     EXPECT_TRUE(compareFonts("Helvetica", FontWeight100, FontItalicOff, 100, CFSTR("Helvetica-Light")));
    221     EXPECT_TRUE(compareFonts("Helvetica", FontWeight100, FontItalicOn , 100, CFSTR("Helvetica-LightOblique")));
    222     EXPECT_TRUE(compareFonts("Helvetica", FontWeight200, FontItalicOff, 100, CFSTR("Helvetica-Light")));
    223     EXPECT_TRUE(compareFonts("Helvetica", FontWeight200, FontItalicOn , 100, CFSTR("Helvetica-LightOblique")));
    224     EXPECT_TRUE(compareFonts("Helvetica", FontWeight300, FontItalicOff, 100, CFSTR("Helvetica-Light")));
    225     EXPECT_TRUE(compareFonts("Helvetica", FontWeight300, FontItalicOn , 100, CFSTR("Helvetica-LightOblique")));
    226     EXPECT_TRUE(compareFonts("Helvetica", FontWeight400, FontItalicOff, 100, CFSTR("Helvetica")));
    227     EXPECT_TRUE(compareFonts("Helvetica", FontWeight400, FontItalicOn , 100, CFSTR("Helvetica-Oblique")));
    228     EXPECT_TRUE(compareFonts("Helvetica", FontWeight500, FontItalicOff, 100, CFSTR("Helvetica")));
    229     EXPECT_TRUE(compareFonts("Helvetica", FontWeight500, FontItalicOn , 100, CFSTR("Helvetica-Oblique")));
    230     EXPECT_TRUE(compareFonts("Helvetica", FontWeight600, FontItalicOff, 100, CFSTR("Helvetica-Bold")));
    231     EXPECT_TRUE(compareFonts("Helvetica", FontWeight600, FontItalicOn , 100, CFSTR("Helvetica-BoldOblique")));
    232     EXPECT_TRUE(compareFonts("Helvetica", FontWeight700, FontItalicOff, 100, CFSTR("Helvetica-Bold")));
    233     EXPECT_TRUE(compareFonts("Helvetica", FontWeight700, FontItalicOn , 100, CFSTR("Helvetica-BoldOblique")));
    234     EXPECT_TRUE(compareFonts("Helvetica", FontWeight800, FontItalicOff, 100, CFSTR("Helvetica-Bold")));
    235     EXPECT_TRUE(compareFonts("Helvetica", FontWeight800, FontItalicOn , 100, CFSTR("Helvetica-BoldOblique")));
    236     EXPECT_TRUE(compareFonts("Helvetica", FontWeight900, FontItalicOff, 100, CFSTR("Helvetica-Bold")));
    237     EXPECT_TRUE(compareFonts("Helvetica", FontWeight900, FontItalicOn , 100, CFSTR("Helvetica-BoldOblique")));
    238     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight100, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    239     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight100, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    240     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight200, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    241     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight200, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    242     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight300, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    243     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight300, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    244     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight400, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    245     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight400, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    246     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight500, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    247     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight500, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    248     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight600, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    249     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight600, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    250     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight700, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    251     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight700, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    252     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight800, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    253     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight800, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    254     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight900, FontItalicOff, 100, CFSTR("HiraKakuStdN-W8")));
    255     EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", FontWeight900, FontItalicOn , 100, CFSTR("HiraKakuStdN-W8")));
    256     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight100, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    257     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight100, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    258     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight200, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    259     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight200, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    260     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight300, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    261     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight300, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    262     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight400, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    263     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight400, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    264     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight500, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    265     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight500, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    266     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight600, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    267     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight600, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    268     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight700, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    269     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight700, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    270     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight800, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    271     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight800, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    272     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight900, FontItalicOff, 100, CFSTR("HiraMaruProN-W4")));
    273     EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", FontWeight900, FontItalicOn , 100, CFSTR("HiraMaruProN-W4")));
    274     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight100, FontItalicOff, 100, CFSTR("HiraMinProN-W3")));
    275     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight100, FontItalicOn , 100, CFSTR("HiraMinProN-W3")));
    276     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight200, FontItalicOff, 100, CFSTR("HiraMinProN-W3")));
    277     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight200, FontItalicOn , 100, CFSTR("HiraMinProN-W3")));
    278     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight300, FontItalicOff, 100, CFSTR("HiraMinProN-W3")));
    279     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight300, FontItalicOn , 100, CFSTR("HiraMinProN-W3")));
    280     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight400, FontItalicOff, 100, CFSTR("HiraMinProN-W3")));
    281     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight400, FontItalicOn , 100, CFSTR("HiraMinProN-W3")));
    282     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight500, FontItalicOff, 100, CFSTR("HiraMinProN-W3")));
    283     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight500, FontItalicOn , 100, CFSTR("HiraMinProN-W3")));
    284     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight600, FontItalicOff, 100, CFSTR("HiraMinProN-W6")));
    285     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight600, FontItalicOn , 100, CFSTR("HiraMinProN-W6")));
    286     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight700, FontItalicOff, 100, CFSTR("HiraMinProN-W6")));
    287     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight700, FontItalicOn , 100, CFSTR("HiraMinProN-W6")));
    288     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight800, FontItalicOff, 100, CFSTR("HiraMinProN-W6")));
    289     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight800, FontItalicOn , 100, CFSTR("HiraMinProN-W6")));
    290     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight900, FontItalicOff, 100, CFSTR("HiraMinProN-W6")));
    291     EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", FontWeight900, FontItalicOn , 100, CFSTR("HiraMinProN-W6")));
    292     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight100, FontItalicOff, 100, CFSTR("HiraginoSansGB-W3")));
    293     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight100, FontItalicOn , 100, CFSTR("HiraginoSansGB-W3")));
    294     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight200, FontItalicOff, 100, CFSTR("HiraginoSansGB-W3")));
    295     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight200, FontItalicOn , 100, CFSTR("HiraginoSansGB-W3")));
    296     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight300, FontItalicOff, 100, CFSTR("HiraginoSansGB-W3")));
    297     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight300, FontItalicOn , 100, CFSTR("HiraginoSansGB-W3")));
    298     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight400, FontItalicOff, 100, CFSTR("HiraginoSansGB-W3")));
    299     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight400, FontItalicOn , 100, CFSTR("HiraginoSansGB-W3")));
    300     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight500, FontItalicOff, 100, CFSTR("HiraginoSansGB-W3")));
    301     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight500, FontItalicOn , 100, CFSTR("HiraginoSansGB-W3")));
    302     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight600, FontItalicOff, 100, CFSTR("HiraginoSansGB-W6")));
    303     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight600, FontItalicOn , 100, CFSTR("HiraginoSansGB-W6")));
    304     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight700, FontItalicOff, 100, CFSTR("HiraginoSansGB-W6")));
    305     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight700, FontItalicOn , 100, CFSTR("HiraginoSansGB-W6")));
    306     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight800, FontItalicOff, 100, CFSTR("HiraginoSansGB-W6")));
    307     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight800, FontItalicOn , 100, CFSTR("HiraginoSansGB-W6")));
    308     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight900, FontItalicOff, 100, CFSTR("HiraginoSansGB-W6")));
    309     EXPECT_TRUE(compareFonts("Hiragino Sans GB", FontWeight900, FontItalicOn , 100, CFSTR("HiraginoSansGB-W6")));
    310     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight100, FontItalicOff, 100, CFSTR("HiraginoSans-W0")));
    311     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight100, FontItalicOn , 100, CFSTR("HiraginoSans-W0")));
    312     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight200, FontItalicOff, 100, CFSTR("HiraginoSans-W1")));
    313     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight200, FontItalicOn , 100, CFSTR("HiraginoSans-W1")));
    314     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight300, FontItalicOff, 100, CFSTR("HiraginoSans-W3")));
    315     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight300, FontItalicOn , 100, CFSTR("HiraginoSans-W3")));
    316     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight400, FontItalicOff, 100, CFSTR("HiraginoSans-W4")));
    317     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight400, FontItalicOn , 100, CFSTR("HiraginoSans-W4")));
    318     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight500, FontItalicOff, 100, CFSTR("HiraginoSans-W5")));
    319     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight500, FontItalicOn , 100, CFSTR("HiraginoSans-W5")));
    320     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight600, FontItalicOff, 100, CFSTR("HiraginoSans-W6")));
    321     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight600, FontItalicOn , 100, CFSTR("HiraginoSans-W6")));
    322     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight700, FontItalicOff, 100, CFSTR("HiraginoSans-W7")));
    323     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight700, FontItalicOn , 100, CFSTR("HiraginoSans-W7")));
    324     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight800, FontItalicOff, 100, CFSTR("HiraginoSans-W8")));
    325     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight800, FontItalicOn , 100, CFSTR("HiraginoSans-W8")));
    326     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight900, FontItalicOff, 100, CFSTR("HiraginoSans-W9")));
    327     EXPECT_TRUE(compareFonts("Hiragino Sans", FontWeight900, FontItalicOn , 100, CFSTR("HiraginoSans-W9")));
    328     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight100, FontItalicOff, 100, CFSTR("HoeflerText-Regular")));
    329     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight100, FontItalicOn , 100, CFSTR("HoeflerText-Italic")));
    330     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight200, FontItalicOff, 100, CFSTR("HoeflerText-Regular")));
    331     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight200, FontItalicOn , 100, CFSTR("HoeflerText-Italic")));
    332     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight300, FontItalicOff, 100, CFSTR("HoeflerText-Regular")));
    333     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight300, FontItalicOn , 100, CFSTR("HoeflerText-Italic")));
    334     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight400, FontItalicOff, 100, CFSTR("HoeflerText-Regular")));
    335     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight400, FontItalicOn , 100, CFSTR("HoeflerText-Italic")));
    336     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight500, FontItalicOff, 100, CFSTR("HoeflerText-Regular")));
    337     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight500, FontItalicOn , 100, CFSTR("HoeflerText-Italic")));
    338     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight600, FontItalicOff, 100, CFSTR("HoeflerText-Black")));
    339     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight600, FontItalicOn , 100, CFSTR("HoeflerText-BlackItalic")));
    340     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight700, FontItalicOff, 100, CFSTR("HoeflerText-Black")));
    341     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight700, FontItalicOn , 100, CFSTR("HoeflerText-BlackItalic")));
    342     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight800, FontItalicOff, 100, CFSTR("HoeflerText-Black")));
    343     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight800, FontItalicOn , 100, CFSTR("HoeflerText-BlackItalic")));
    344     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight900, FontItalicOff, 100, CFSTR("HoeflerText-Black")));
    345     EXPECT_TRUE(compareFonts("Hoefler Text", FontWeight900, FontItalicOn , 100, CFSTR("HoeflerText-BlackItalic")));
    346     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight100, FontItalicOff, 100, CFSTR("LucidaGrande")));
    347     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight100, FontItalicOn , 100, CFSTR("LucidaGrande")));
    348     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight200, FontItalicOff, 100, CFSTR("LucidaGrande")));
    349     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight200, FontItalicOn , 100, CFSTR("LucidaGrande")));
    350     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight300, FontItalicOff, 100, CFSTR("LucidaGrande")));
    351     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight300, FontItalicOn , 100, CFSTR("LucidaGrande")));
    352     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight400, FontItalicOff, 100, CFSTR("LucidaGrande")));
    353     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight400, FontItalicOn , 100, CFSTR("LucidaGrande")));
    354     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight500, FontItalicOff, 100, CFSTR("LucidaGrande")));
    355     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight500, FontItalicOn , 100, CFSTR("LucidaGrande")));
    356     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight600, FontItalicOff, 100, CFSTR("LucidaGrande-Bold")));
    357     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight600, FontItalicOn , 100, CFSTR("LucidaGrande-Bold")));
    358     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight700, FontItalicOff, 100, CFSTR("LucidaGrande-Bold")));
    359     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight700, FontItalicOn , 100, CFSTR("LucidaGrande-Bold")));
    360     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight800, FontItalicOff, 100, CFSTR("LucidaGrande-Bold")));
    361     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight800, FontItalicOn , 100, CFSTR("LucidaGrande-Bold")));
    362     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight900, FontItalicOff, 100, CFSTR("LucidaGrande-Bold")));
    363     EXPECT_TRUE(compareFonts("Lucida Grande", FontWeight900, FontItalicOn , 100, CFSTR("LucidaGrande-Bold")));
    364     EXPECT_TRUE(compareFonts("Optima", FontWeight100, FontItalicOff, 100, CFSTR("Optima-Regular")));
    365     EXPECT_TRUE(compareFonts("Optima", FontWeight100, FontItalicOn , 100, CFSTR("Optima-Italic")));
    366     EXPECT_TRUE(compareFonts("Optima", FontWeight200, FontItalicOff, 100, CFSTR("Optima-Regular")));
    367     EXPECT_TRUE(compareFonts("Optima", FontWeight200, FontItalicOn , 100, CFSTR("Optima-Italic")));
    368     EXPECT_TRUE(compareFonts("Optima", FontWeight300, FontItalicOff, 100, CFSTR("Optima-Regular")));
    369     EXPECT_TRUE(compareFonts("Optima", FontWeight300, FontItalicOn , 100, CFSTR("Optima-Italic")));
    370     EXPECT_TRUE(compareFonts("Optima", FontWeight400, FontItalicOff, 100, CFSTR("Optima-Regular")));
    371     EXPECT_TRUE(compareFonts("Optima", FontWeight400, FontItalicOn , 100, CFSTR("Optima-Italic")));
    372     EXPECT_TRUE(compareFonts("Optima", FontWeight500, FontItalicOff, 100, CFSTR("Optima-Regular")));
    373     EXPECT_TRUE(compareFonts("Optima", FontWeight500, FontItalicOn , 100, CFSTR("Optima-Italic")));
    374     EXPECT_TRUE(compareFonts("Optima", FontWeight600, FontItalicOff, 100, CFSTR("Optima-Bold")));
    375     EXPECT_TRUE(compareFonts("Optima", FontWeight600, FontItalicOn , 100, CFSTR("Optima-BoldItalic")));
    376     EXPECT_TRUE(compareFonts("Optima", FontWeight700, FontItalicOff, 100, CFSTR("Optima-Bold")));
    377     EXPECT_TRUE(compareFonts("Optima", FontWeight700, FontItalicOn , 100, CFSTR("Optima-BoldItalic")));
    378     EXPECT_TRUE(compareFonts("Optima", FontWeight800, FontItalicOff, 100, CFSTR("Optima-ExtraBlack")));
    379     EXPECT_TRUE(compareFonts("Optima", FontWeight800, FontItalicOn , 100, CFSTR("Optima-BoldItalic")));
    380     EXPECT_TRUE(compareFonts("Optima", FontWeight900, FontItalicOff, 100, CFSTR("Optima-ExtraBlack")));
    381     EXPECT_TRUE(compareFonts("Optima", FontWeight900, FontItalicOn , 100, CFSTR("Optima-BoldItalic")));
    382     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight100, FontItalicOff, 100, CFSTR("PingFangHK-Ultralight")));
    383     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight100, FontItalicOn , 100, CFSTR("PingFangHK-Ultralight")));
    384     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight200, FontItalicOff, 100, CFSTR("PingFangHK-Thin")));
    385     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight200, FontItalicOn , 100, CFSTR("PingFangHK-Thin")));
    386     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight300, FontItalicOff, 100, CFSTR("PingFangHK-Light")));
    387     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight300, FontItalicOn , 100, CFSTR("PingFangHK-Light")));
    388     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight400, FontItalicOff, 100, CFSTR("PingFangHK-Regular")));
    389     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight400, FontItalicOn , 100, CFSTR("PingFangHK-Regular")));
    390     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight500, FontItalicOff, 100, CFSTR("PingFangHK-Medium")));
    391     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight500, FontItalicOn , 100, CFSTR("PingFangHK-Medium")));
    392     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight600, FontItalicOff, 100, CFSTR("PingFangHK-Semibold")));
    393     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight600, FontItalicOn , 100, CFSTR("PingFangHK-Semibold")));
    394     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight700, FontItalicOff, 100, CFSTR("PingFangHK-Semibold")));
    395     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight700, FontItalicOn , 100, CFSTR("PingFangHK-Semibold")));
    396     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight800, FontItalicOff, 100, CFSTR("PingFangHK-Semibold")));
    397     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight800, FontItalicOn , 100, CFSTR("PingFangHK-Semibold")));
    398     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight900, FontItalicOff, 100, CFSTR("PingFangHK-Semibold")));
    399     EXPECT_TRUE(compareFonts("PingFang HK", FontWeight900, FontItalicOn , 100, CFSTR("PingFangHK-Semibold")));
    400     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight100, FontItalicOff, 100, CFSTR("PingFangSC-Ultralight")));
    401     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight100, FontItalicOn , 100, CFSTR("PingFangSC-Ultralight")));
    402     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight200, FontItalicOff, 100, CFSTR("PingFangSC-Thin")));
    403     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight200, FontItalicOn , 100, CFSTR("PingFangSC-Thin")));
    404     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight300, FontItalicOff, 100, CFSTR("PingFangSC-Light")));
    405     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight300, FontItalicOn , 100, CFSTR("PingFangSC-Light")));
    406     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight400, FontItalicOff, 100, CFSTR("PingFangSC-Regular")));
    407     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight400, FontItalicOn , 100, CFSTR("PingFangSC-Regular")));
    408     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight500, FontItalicOff, 100, CFSTR("PingFangSC-Medium")));
    409     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight500, FontItalicOn , 100, CFSTR("PingFangSC-Medium")));
    410     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight600, FontItalicOff, 100, CFSTR("PingFangSC-Semibold")));
    411     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight600, FontItalicOn , 100, CFSTR("PingFangSC-Semibold")));
    412     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight700, FontItalicOff, 100, CFSTR("PingFangSC-Semibold")));
    413     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight700, FontItalicOn , 100, CFSTR("PingFangSC-Semibold")));
    414     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight800, FontItalicOff, 100, CFSTR("PingFangSC-Semibold")));
    415     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight800, FontItalicOn , 100, CFSTR("PingFangSC-Semibold")));
    416     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight900, FontItalicOff, 100, CFSTR("PingFangSC-Semibold")));
    417     EXPECT_TRUE(compareFonts("PingFang SC", FontWeight900, FontItalicOn , 100, CFSTR("PingFangSC-Semibold")));
    418     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight100, FontItalicOff, 100, CFSTR("PingFangTC-Ultralight")));
    419     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight100, FontItalicOn , 100, CFSTR("PingFangTC-Ultralight")));
    420     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight200, FontItalicOff, 100, CFSTR("PingFangTC-Thin")));
    421     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight200, FontItalicOn , 100, CFSTR("PingFangTC-Thin")));
    422     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight300, FontItalicOff, 100, CFSTR("PingFangTC-Light")));
    423     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight300, FontItalicOn , 100, CFSTR("PingFangTC-Light")));
    424     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight400, FontItalicOff, 100, CFSTR("PingFangTC-Regular")));
    425     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight400, FontItalicOn , 100, CFSTR("PingFangTC-Regular")));
    426     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight500, FontItalicOff, 100, CFSTR("PingFangTC-Medium")));
    427     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight500, FontItalicOn , 100, CFSTR("PingFangTC-Medium")));
    428     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight600, FontItalicOff, 100, CFSTR("PingFangTC-Semibold")));
    429     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight600, FontItalicOn , 100, CFSTR("PingFangTC-Semibold")));
    430     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight700, FontItalicOff, 100, CFSTR("PingFangTC-Semibold")));
    431     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight700, FontItalicOn , 100, CFSTR("PingFangTC-Semibold")));
    432     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight800, FontItalicOff, 100, CFSTR("PingFangTC-Semibold")));
    433     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight800, FontItalicOn , 100, CFSTR("PingFangTC-Semibold")));
    434     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight900, FontItalicOff, 100, CFSTR("PingFangTC-Semibold")));
    435     EXPECT_TRUE(compareFonts("PingFang TC", FontWeight900, FontItalicOn , 100, CFSTR("PingFangTC-Semibold")));
    436     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight100, FontItalicOff, 100, CFSTR("TimesNewRomanPSMT")));
    437     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight100, FontItalicOn , 100, CFSTR("TimesNewRomanPS-ItalicMT")));
    438     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight200, FontItalicOff, 100, CFSTR("TimesNewRomanPSMT")));
    439     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight200, FontItalicOn , 100, CFSTR("TimesNewRomanPS-ItalicMT")));
    440     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight300, FontItalicOff, 100, CFSTR("TimesNewRomanPSMT")));
    441     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight300, FontItalicOn , 100, CFSTR("TimesNewRomanPS-ItalicMT")));
    442     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight400, FontItalicOff, 100, CFSTR("TimesNewRomanPSMT")));
    443     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight400, FontItalicOn , 100, CFSTR("TimesNewRomanPS-ItalicMT")));
    444     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight500, FontItalicOff, 100, CFSTR("TimesNewRomanPSMT")));
    445     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight500, FontItalicOn , 100, CFSTR("TimesNewRomanPS-ItalicMT")));
    446     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight600, FontItalicOff, 100, CFSTR("TimesNewRomanPS-BoldMT")));
    447     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight600, FontItalicOn , 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
    448     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight700, FontItalicOff, 100, CFSTR("TimesNewRomanPS-BoldMT")));
    449     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight700, FontItalicOn , 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
    450     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight800, FontItalicOff, 100, CFSTR("TimesNewRomanPS-BoldMT")));
    451     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight800, FontItalicOn , 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
    452     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight900, FontItalicOff, 100, CFSTR("TimesNewRomanPS-BoldMT")));
    453     EXPECT_TRUE(compareFonts("Times New Roman", FontWeight900, FontItalicOn , 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
    454     EXPECT_TRUE(compareFonts("Times", FontWeight100, FontItalicOff, 100, CFSTR("Times-Roman")));
    455     EXPECT_TRUE(compareFonts("Times", FontWeight100, FontItalicOn , 100, CFSTR("Times-Italic")));
    456     EXPECT_TRUE(compareFonts("Times", FontWeight200, FontItalicOff, 100, CFSTR("Times-Roman")));
    457     EXPECT_TRUE(compareFonts("Times", FontWeight200, FontItalicOn , 100, CFSTR("Times-Italic")));
    458     EXPECT_TRUE(compareFonts("Times", FontWeight300, FontItalicOff, 100, CFSTR("Times-Roman")));
    459     EXPECT_TRUE(compareFonts("Times", FontWeight300, FontItalicOn , 100, CFSTR("Times-Italic")));
    460     EXPECT_TRUE(compareFonts("Times", FontWeight400, FontItalicOff, 100, CFSTR("Times-Roman")));
    461     EXPECT_TRUE(compareFonts("Times", FontWeight400, FontItalicOn , 100, CFSTR("Times-Italic")));
    462     EXPECT_TRUE(compareFonts("Times", FontWeight500, FontItalicOff, 100, CFSTR("Times-Roman")));
    463     EXPECT_TRUE(compareFonts("Times", FontWeight500, FontItalicOn , 100, CFSTR("Times-Italic")));
    464     EXPECT_TRUE(compareFonts("Times", FontWeight600, FontItalicOff, 100, CFSTR("Times-Bold")));
    465     EXPECT_TRUE(compareFonts("Times", FontWeight600, FontItalicOn , 100, CFSTR("Times-BoldItalic")));
    466     EXPECT_TRUE(compareFonts("Times", FontWeight700, FontItalicOff, 100, CFSTR("Times-Bold")));
    467     EXPECT_TRUE(compareFonts("Times", FontWeight700, FontItalicOn , 100, CFSTR("Times-BoldItalic")));
    468     EXPECT_TRUE(compareFonts("Times", FontWeight800, FontItalicOff, 100, CFSTR("Times-Bold")));
    469     EXPECT_TRUE(compareFonts("Times", FontWeight800, FontItalicOn , 100, CFSTR("Times-BoldItalic")));
    470     EXPECT_TRUE(compareFonts("Times", FontWeight900, FontItalicOff, 100, CFSTR("Times-Bold")));
    471     EXPECT_TRUE(compareFonts("Times", FontWeight900, FontItalicOn , 100, CFSTR("Times-BoldItalic")));
    472     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight700, FontItalicOff, 87.5, CFSTR("HelveticaNeue-CondensedBold")));
    473     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight800, FontItalicOff, 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
    474     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight900, FontItalicOff, 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
    475     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight700, FontItalicOff, 75, CFSTR("HelveticaNeue-CondensedBold")));
    476     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight800, FontItalicOff, 75, CFSTR("HelveticaNeue-CondensedBlack")));
    477     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight900, FontItalicOff, 75, CFSTR("HelveticaNeue-CondensedBlack")));
    478     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight700, FontItalicOn , 87.5, CFSTR("HelveticaNeue-CondensedBold")));
    479     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight800, FontItalicOn , 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
    480     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight900, FontItalicOn , 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
    481     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight700, FontItalicOn , 75, CFSTR("HelveticaNeue-CondensedBold")));
    482     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight800, FontItalicOn , 75, CFSTR("HelveticaNeue-CondensedBlack")));
    483     EXPECT_TRUE(compareFonts("Helvetica Neue", FontWeight900, FontItalicOn , 75, CFSTR("HelveticaNeue-CondensedBlack")));
    484     EXPECT_TRUE(compareFonts("Futura", FontWeight500, FontItalicOff, 87.5, CFSTR("Futura-CondensedMedium")));
    485     EXPECT_TRUE(compareFonts("Futura", FontWeight500, FontItalicOn , 87.5, CFSTR("Futura-CondensedMedium")));
    486     EXPECT_TRUE(compareFonts("Futura", FontWeight600, FontItalicOff, 87.5, CFSTR("Futura-CondensedExtraBold")));
    487     EXPECT_TRUE(compareFonts("Futura", FontWeight600, FontItalicOn , 87.5, CFSTR("Futura-CondensedExtraBold")));
    488     EXPECT_TRUE(compareFonts("Futura", FontWeight700, FontItalicOff, 87.5, CFSTR("Futura-CondensedExtraBold")));
    489     EXPECT_TRUE(compareFonts("Futura", FontWeight700, FontItalicOn , 87.5, CFSTR("Futura-CondensedExtraBold")));
    490     EXPECT_TRUE(compareFonts("Futura", FontWeight800, FontItalicOff, 87.5, CFSTR("Futura-CondensedExtraBold")));
    491     EXPECT_TRUE(compareFonts("Futura", FontWeight800, FontItalicOn , 87.5, CFSTR("Futura-CondensedExtraBold")));
    492     EXPECT_TRUE(compareFonts("Futura", FontWeight900, FontItalicOff, 87.5, CFSTR("Futura-CondensedExtraBold")));
    493     EXPECT_TRUE(compareFonts("Futura", FontWeight900, FontItalicOn , 87.5, CFSTR("Futura-CondensedExtraBold")));
     76    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 100, 0 , 100, CFSTR("AppleSDGothicNeo-Thin")));
     77    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     78    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 200, 0 , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     79    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     80    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 300, 0 , 100, CFSTR("AppleSDGothicNeo-Light")));
     81    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     82    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 400, 0 , 100, CFSTR("AppleSDGothicNeo-Regular")));
     83    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     84    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 500, 0 , 100, CFSTR("AppleSDGothicNeo-Medium")));
     85    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     86    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 600, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     87    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     88    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     89    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     90    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 800, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     91    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     92    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     93    EXPECT_TRUE(compareFonts("Apple SD Gothic Neo", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     94    EXPECT_TRUE(compareFonts("Arial", 100, 0 , 100, CFSTR("ArialMT")));
     95    EXPECT_TRUE(compareFonts("Arial", 100, 20, 100, CFSTR("Arial-ItalicMT")));
     96    EXPECT_TRUE(compareFonts("Arial", 200, 0 , 100, CFSTR("ArialMT")));
     97    EXPECT_TRUE(compareFonts("Arial", 200, 20, 100, CFSTR("Arial-ItalicMT")));
     98    EXPECT_TRUE(compareFonts("Arial", 300, 0 , 100, CFSTR("ArialMT")));
     99    EXPECT_TRUE(compareFonts("Arial", 300, 20, 100, CFSTR("Arial-ItalicMT")));
     100    EXPECT_TRUE(compareFonts("Arial", 400, 0 , 100, CFSTR("ArialMT")));
     101    EXPECT_TRUE(compareFonts("Arial", 400, 20, 100, CFSTR("Arial-ItalicMT")));
     102    EXPECT_TRUE(compareFonts("Arial", 500, 0 , 100, CFSTR("ArialMT")));
     103    EXPECT_TRUE(compareFonts("Arial", 500, 20, 100, CFSTR("Arial-ItalicMT")));
     104    EXPECT_TRUE(compareFonts("Arial", 600, 0 , 100, CFSTR("Arial-BoldMT")));
     105    EXPECT_TRUE(compareFonts("Arial", 600, 20, 100, CFSTR("Arial-BoldItalicMT")));
     106    EXPECT_TRUE(compareFonts("Arial", 700, 0 , 100, CFSTR("Arial-BoldMT")));
     107    EXPECT_TRUE(compareFonts("Arial", 700, 20, 100, CFSTR("Arial-BoldItalicMT")));
     108    EXPECT_TRUE(compareFonts("Arial", 800, 0 , 100, CFSTR("Arial-BoldMT")));
     109    EXPECT_TRUE(compareFonts("Arial", 800, 20, 100, CFSTR("Arial-BoldItalicMT")));
     110    EXPECT_TRUE(compareFonts("Arial", 900, 0 , 100, CFSTR("Arial-BoldMT")));
     111    EXPECT_TRUE(compareFonts("Arial", 900, 20, 100, CFSTR("Arial-BoldItalicMT")));
     112    EXPECT_TRUE(compareFonts("Avenir Next", 100, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     113    EXPECT_TRUE(compareFonts("Avenir Next", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     114    EXPECT_TRUE(compareFonts("Avenir Next", 200, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     115    EXPECT_TRUE(compareFonts("Avenir Next", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     116    EXPECT_TRUE(compareFonts("Avenir Next", 300, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     117    EXPECT_TRUE(compareFonts("Avenir Next", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     118    EXPECT_TRUE(compareFonts("Avenir Next", 400, 0 , 100, CFSTR("AvenirNext-Regular")));
     119    EXPECT_TRUE(compareFonts("Avenir Next", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     120    EXPECT_TRUE(compareFonts("Avenir Next", 500, 0 , 100, CFSTR("AvenirNext-Medium")));
     121    EXPECT_TRUE(compareFonts("Avenir Next", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     122    EXPECT_TRUE(compareFonts("Avenir Next", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     123    EXPECT_TRUE(compareFonts("Avenir Next", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     124    EXPECT_TRUE(compareFonts("Avenir Next", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     125    EXPECT_TRUE(compareFonts("Avenir Next", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     126    EXPECT_TRUE(compareFonts("Avenir Next", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     127    EXPECT_TRUE(compareFonts("Avenir Next", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     128    EXPECT_TRUE(compareFonts("Avenir Next", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     129    EXPECT_TRUE(compareFonts("Avenir Next", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     130    EXPECT_TRUE(compareFonts("Avenir", 100, 0 , 100, CFSTR("Avenir-Light")));
     131    EXPECT_TRUE(compareFonts("Avenir", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     132    EXPECT_TRUE(compareFonts("Avenir", 200, 0 , 100, CFSTR("Avenir-Light")));
     133    EXPECT_TRUE(compareFonts("Avenir", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     134    EXPECT_TRUE(compareFonts("Avenir", 300, 0 , 100, CFSTR("Avenir-Light")));
     135    EXPECT_TRUE(compareFonts("Avenir", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     136    EXPECT_TRUE(compareFonts("Avenir", 400, 0 , 100, CFSTR("Avenir-Book")));
     137    EXPECT_TRUE(compareFonts("Avenir", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     138    EXPECT_TRUE(compareFonts("Avenir", 500, 0 , 100, CFSTR("Avenir-Medium")));
     139    EXPECT_TRUE(compareFonts("Avenir", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     140    EXPECT_TRUE(compareFonts("Avenir", 600, 0 , 100, CFSTR("Avenir-Black")));
     141    EXPECT_TRUE(compareFonts("Avenir", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     142    EXPECT_TRUE(compareFonts("Avenir", 700, 0 , 100, CFSTR("Avenir-Black")));
     143    EXPECT_TRUE(compareFonts("Avenir", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     144    EXPECT_TRUE(compareFonts("Avenir", 800, 0 , 100, CFSTR("Avenir-Black")));
     145    EXPECT_TRUE(compareFonts("Avenir", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     146    EXPECT_TRUE(compareFonts("Avenir", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     147    EXPECT_TRUE(compareFonts("Avenir", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     148    EXPECT_TRUE(compareFonts("Baskerville", 100, 0 , 100, CFSTR("Baskerville")));
     149    EXPECT_TRUE(compareFonts("Baskerville", 100, 20, 100, CFSTR("Baskerville-Italic")));
     150    EXPECT_TRUE(compareFonts("Baskerville", 200, 0 , 100, CFSTR("Baskerville")));
     151    EXPECT_TRUE(compareFonts("Baskerville", 200, 20, 100, CFSTR("Baskerville-Italic")));
     152    EXPECT_TRUE(compareFonts("Baskerville", 300, 0 , 100, CFSTR("Baskerville")));
     153    EXPECT_TRUE(compareFonts("Baskerville", 300, 20, 100, CFSTR("Baskerville-Italic")));
     154    EXPECT_TRUE(compareFonts("Baskerville", 400, 0 , 100, CFSTR("Baskerville")));
     155    EXPECT_TRUE(compareFonts("Baskerville", 400, 20, 100, CFSTR("Baskerville-Italic")));
     156    EXPECT_TRUE(compareFonts("Baskerville", 500, 0 , 100, CFSTR("Baskerville")));
     157    EXPECT_TRUE(compareFonts("Baskerville", 500, 20, 100, CFSTR("Baskerville-Italic")));
     158    EXPECT_TRUE(compareFonts("Baskerville", 600, 0 , 100, CFSTR("Baskerville-SemiBold")));
     159    EXPECT_TRUE(compareFonts("Baskerville", 600, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     160    EXPECT_TRUE(compareFonts("Baskerville", 700, 0 , 100, CFSTR("Baskerville-Bold")));
     161    EXPECT_TRUE(compareFonts("Baskerville", 700, 20, 100, CFSTR("Baskerville-BoldItalic")));
     162    EXPECT_TRUE(compareFonts("Baskerville", 800, 0 , 100, CFSTR("Baskerville-Bold")));
     163    EXPECT_TRUE(compareFonts("Baskerville", 800, 20, 100, CFSTR("Baskerville-BoldItalic")));
     164    EXPECT_TRUE(compareFonts("Baskerville", 900, 0 , 100, CFSTR("Baskerville-Bold")));
     165    EXPECT_TRUE(compareFonts("Baskerville", 900, 20, 100, CFSTR("Baskerville-BoldItalic")));
     166    EXPECT_TRUE(compareFonts("Didot", 100, 0 , 100, CFSTR("Didot")));
     167    EXPECT_TRUE(compareFonts("Didot", 100, 20, 100, CFSTR("Didot-Italic")));
     168    EXPECT_TRUE(compareFonts("Didot", 200, 0 , 100, CFSTR("Didot")));
     169    EXPECT_TRUE(compareFonts("Didot", 200, 20, 100, CFSTR("Didot-Italic")));
     170    EXPECT_TRUE(compareFonts("Didot", 300, 0 , 100, CFSTR("Didot")));
     171    EXPECT_TRUE(compareFonts("Didot", 300, 20, 100, CFSTR("Didot-Italic")));
     172    EXPECT_TRUE(compareFonts("Didot", 400, 0 , 100, CFSTR("Didot")));
     173    EXPECT_TRUE(compareFonts("Didot", 400, 20, 100, CFSTR("Didot-Italic")));
     174    EXPECT_TRUE(compareFonts("Didot", 500, 0 , 100, CFSTR("Didot")));
     175    EXPECT_TRUE(compareFonts("Didot", 500, 20, 100, CFSTR("Didot-Italic")));
     176    EXPECT_TRUE(compareFonts("Didot", 600, 0 , 100, CFSTR("Didot-Bold")));
     177    EXPECT_TRUE(compareFonts("Didot", 600, 20, 100, CFSTR("Didot-Italic")));
     178    EXPECT_TRUE(compareFonts("Didot", 700, 0 , 100, CFSTR("Didot-Bold")));
     179    EXPECT_TRUE(compareFonts("Didot", 700, 20, 100, CFSTR("Didot-Italic")));
     180    EXPECT_TRUE(compareFonts("Didot", 800, 0 , 100, CFSTR("Didot-Bold")));
     181    EXPECT_TRUE(compareFonts("Didot", 800, 20, 100, CFSTR("Didot-Italic")));
     182    EXPECT_TRUE(compareFonts("Didot", 900, 0 , 100, CFSTR("Didot-Bold")));
     183    EXPECT_TRUE(compareFonts("Didot", 900, 20, 100, CFSTR("Didot-Italic")));
     184    EXPECT_TRUE(compareFonts("Futura", 100, 0 , 100, CFSTR("Futura-Medium")));
     185    EXPECT_TRUE(compareFonts("Futura", 100, 20, 100, CFSTR("Futura-MediumItalic")));
     186    EXPECT_TRUE(compareFonts("Futura", 200, 0 , 100, CFSTR("Futura-Medium")));
     187    EXPECT_TRUE(compareFonts("Futura", 200, 20, 100, CFSTR("Futura-MediumItalic")));
     188    EXPECT_TRUE(compareFonts("Futura", 300, 0 , 100, CFSTR("Futura-Medium")));
     189    EXPECT_TRUE(compareFonts("Futura", 300, 20, 100, CFSTR("Futura-MediumItalic")));
     190    EXPECT_TRUE(compareFonts("Futura", 400, 0 , 100, CFSTR("Futura-Medium")));
     191    EXPECT_TRUE(compareFonts("Futura", 400, 20, 100, CFSTR("Futura-MediumItalic")));
     192    EXPECT_TRUE(compareFonts("Futura", 500, 0 , 100, CFSTR("Futura-Medium")));
     193    EXPECT_TRUE(compareFonts("Futura", 500, 20, 100, CFSTR("Futura-MediumItalic")));
     194    EXPECT_TRUE(compareFonts("Futura", 600, 0 , 100, CFSTR("Futura-Bold")));
     195    EXPECT_TRUE(compareFonts("Futura", 600, 20, 100, CFSTR("Futura-MediumItalic")));
     196    EXPECT_TRUE(compareFonts("Futura", 700, 0 , 100, CFSTR("Futura-Bold")));
     197    EXPECT_TRUE(compareFonts("Futura", 700, 20, 100, CFSTR("Futura-MediumItalic")));
     198    EXPECT_TRUE(compareFonts("Futura", 800, 0 , 100, CFSTR("Futura-Bold")));
     199    EXPECT_TRUE(compareFonts("Futura", 800, 20, 100, CFSTR("Futura-MediumItalic")));
     200    EXPECT_TRUE(compareFonts("Futura", 900, 0 , 100, CFSTR("Futura-Bold")));
     201    EXPECT_TRUE(compareFonts("Futura", 900, 20, 100, CFSTR("Futura-MediumItalic")));
     202    EXPECT_TRUE(compareFonts("Helvetica Neue", 100, 0 , 100, CFSTR("HelveticaNeue-UltraLight")));
     203    EXPECT_TRUE(compareFonts("Helvetica Neue", 100, 20, 100, CFSTR("HelveticaNeue-UltraLightItalic")));
     204    EXPECT_TRUE(compareFonts("Helvetica Neue", 200, 0 , 100, CFSTR("HelveticaNeue-Thin")));
     205    EXPECT_TRUE(compareFonts("Helvetica Neue", 200, 20, 100, CFSTR("HelveticaNeue-ThinItalic")));
     206    EXPECT_TRUE(compareFonts("Helvetica Neue", 300, 0 , 100, CFSTR("HelveticaNeue-Light")));
     207    EXPECT_TRUE(compareFonts("Helvetica Neue", 300, 20, 100, CFSTR("HelveticaNeue-LightItalic")));
     208    EXPECT_TRUE(compareFonts("Helvetica Neue", 400, 0 , 100, CFSTR("HelveticaNeue")));
     209    EXPECT_TRUE(compareFonts("Helvetica Neue", 400, 20, 100, CFSTR("HelveticaNeue-Italic")));
     210    EXPECT_TRUE(compareFonts("Helvetica Neue", 500, 0 , 100, CFSTR("HelveticaNeue-Medium")));
     211    EXPECT_TRUE(compareFonts("Helvetica Neue", 500, 20, 100, CFSTR("HelveticaNeue-MediumItalic")));
     212    EXPECT_TRUE(compareFonts("Helvetica Neue", 600, 0 , 100, CFSTR("HelveticaNeue-Bold")));
     213    EXPECT_TRUE(compareFonts("Helvetica Neue", 600, 20, 100, CFSTR("HelveticaNeue-BoldItalic")));
     214    EXPECT_TRUE(compareFonts("Helvetica Neue", 700, 0 , 100, CFSTR("HelveticaNeue-Bold")));
     215    EXPECT_TRUE(compareFonts("Helvetica Neue", 700, 20, 100, CFSTR("HelveticaNeue-BoldItalic")));
     216    EXPECT_TRUE(compareFonts("Helvetica Neue", 800, 0 , 100, CFSTR("HelveticaNeue-Bold")));
     217    EXPECT_TRUE(compareFonts("Helvetica Neue", 800, 20, 100, CFSTR("HelveticaNeue-BoldItalic")));
     218    EXPECT_TRUE(compareFonts("Helvetica Neue", 900, 0 , 100, CFSTR("HelveticaNeue-Bold")));
     219    EXPECT_TRUE(compareFonts("Helvetica Neue", 900, 20, 100, CFSTR("HelveticaNeue-BoldItalic")));
     220    EXPECT_TRUE(compareFonts("Helvetica", 100, 0 , 100, CFSTR("Helvetica-Light")));
     221    EXPECT_TRUE(compareFonts("Helvetica", 100, 20, 100, CFSTR("Helvetica-LightOblique")));
     222    EXPECT_TRUE(compareFonts("Helvetica", 200, 0 , 100, CFSTR("Helvetica-Light")));
     223    EXPECT_TRUE(compareFonts("Helvetica", 200, 20, 100, CFSTR("Helvetica-LightOblique")));
     224    EXPECT_TRUE(compareFonts("Helvetica", 300, 0 , 100, CFSTR("Helvetica-Light")));
     225    EXPECT_TRUE(compareFonts("Helvetica", 300, 20, 100, CFSTR("Helvetica-LightOblique")));
     226    EXPECT_TRUE(compareFonts("Helvetica", 400, 0 , 100, CFSTR("Helvetica")));
     227    EXPECT_TRUE(compareFonts("Helvetica", 400, 20, 100, CFSTR("Helvetica-Oblique")));
     228    EXPECT_TRUE(compareFonts("Helvetica", 500, 0 , 100, CFSTR("Helvetica")));
     229    EXPECT_TRUE(compareFonts("Helvetica", 500, 20, 100, CFSTR("Helvetica-Oblique")));
     230    EXPECT_TRUE(compareFonts("Helvetica", 600, 0 , 100, CFSTR("Helvetica-Bold")));
     231    EXPECT_TRUE(compareFonts("Helvetica", 600, 20, 100, CFSTR("Helvetica-BoldOblique")));
     232    EXPECT_TRUE(compareFonts("Helvetica", 700, 0 , 100, CFSTR("Helvetica-Bold")));
     233    EXPECT_TRUE(compareFonts("Helvetica", 700, 20, 100, CFSTR("Helvetica-BoldOblique")));
     234    EXPECT_TRUE(compareFonts("Helvetica", 800, 0 , 100, CFSTR("Helvetica-Bold")));
     235    EXPECT_TRUE(compareFonts("Helvetica", 800, 20, 100, CFSTR("Helvetica-BoldOblique")));
     236    EXPECT_TRUE(compareFonts("Helvetica", 900, 0 , 100, CFSTR("Helvetica-Bold")));
     237    EXPECT_TRUE(compareFonts("Helvetica", 900, 20, 100, CFSTR("Helvetica-BoldOblique")));
     238    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 100, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     239    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 100, 20, 100, CFSTR("HiraKakuStdN-W8")));
     240    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 200, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     241    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 200, 20, 100, CFSTR("HiraKakuStdN-W8")));
     242    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 300, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     243    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 300, 20, 100, CFSTR("HiraKakuStdN-W8")));
     244    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 400, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     245    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 400, 20, 100, CFSTR("HiraKakuStdN-W8")));
     246    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 500, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     247    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 500, 20, 100, CFSTR("HiraKakuStdN-W8")));
     248    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 600, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     249    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 600, 20, 100, CFSTR("HiraKakuStdN-W8")));
     250    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 700, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     251    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 700, 20, 100, CFSTR("HiraKakuStdN-W8")));
     252    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 800, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     253    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 800, 20, 100, CFSTR("HiraKakuStdN-W8")));
     254    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 900, 0 , 100, CFSTR("HiraKakuStdN-W8")));
     255    EXPECT_TRUE(compareFonts("Hiragino Kaku Gothic StdN", 900, 20, 100, CFSTR("HiraKakuStdN-W8")));
     256    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 100, 0 , 100, CFSTR("HiraMaruProN-W4")));
     257    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 100, 20, 100, CFSTR("HiraMaruProN-W4")));
     258    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 200, 0 , 100, CFSTR("HiraMaruProN-W4")));
     259    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 200, 20, 100, CFSTR("HiraMaruProN-W4")));
     260    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 300, 0 , 100, CFSTR("HiraMaruProN-W4")));
     261    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 300, 20, 100, CFSTR("HiraMaruProN-W4")));
     262    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 400, 0 , 100, CFSTR("HiraMaruProN-W4")));
     263    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 400, 20, 100, CFSTR("HiraMaruProN-W4")));
     264    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 500, 0 , 100, CFSTR("HiraMaruProN-W4")));
     265    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 500, 20, 100, CFSTR("HiraMaruProN-W4")));
     266    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 600, 0 , 100, CFSTR("HiraMaruProN-W4")));
     267    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 600, 20, 100, CFSTR("HiraMaruProN-W4")));
     268    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 700, 0 , 100, CFSTR("HiraMaruProN-W4")));
     269    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 700, 20, 100, CFSTR("HiraMaruProN-W4")));
     270    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 800, 0 , 100, CFSTR("HiraMaruProN-W4")));
     271    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 800, 20, 100, CFSTR("HiraMaruProN-W4")));
     272    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 900, 0 , 100, CFSTR("HiraMaruProN-W4")));
     273    EXPECT_TRUE(compareFonts("Hiragino Maru Gothic ProN", 900, 20, 100, CFSTR("HiraMaruProN-W4")));
     274    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 100, 0 , 100, CFSTR("HiraMinProN-W3")));
     275    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 100, 20, 100, CFSTR("HiraMinProN-W3")));
     276    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 200, 0 , 100, CFSTR("HiraMinProN-W3")));
     277    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 200, 20, 100, CFSTR("HiraMinProN-W3")));
     278    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 300, 0 , 100, CFSTR("HiraMinProN-W3")));
     279    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 300, 20, 100, CFSTR("HiraMinProN-W3")));
     280    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 400, 0 , 100, CFSTR("HiraMinProN-W3")));
     281    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 400, 20, 100, CFSTR("HiraMinProN-W3")));
     282    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 500, 0 , 100, CFSTR("HiraMinProN-W3")));
     283    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 500, 20, 100, CFSTR("HiraMinProN-W3")));
     284    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 600, 0 , 100, CFSTR("HiraMinProN-W6")));
     285    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 600, 20, 100, CFSTR("HiraMinProN-W6")));
     286    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 700, 0 , 100, CFSTR("HiraMinProN-W6")));
     287    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 700, 20, 100, CFSTR("HiraMinProN-W6")));
     288    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 800, 0 , 100, CFSTR("HiraMinProN-W6")));
     289    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 800, 20, 100, CFSTR("HiraMinProN-W6")));
     290    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 900, 0 , 100, CFSTR("HiraMinProN-W6")));
     291    EXPECT_TRUE(compareFonts("Hiragino Mincho ProN", 900, 20, 100, CFSTR("HiraMinProN-W6")));
     292    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 100, 0 , 100, CFSTR("HiraginoSansGB-W3")));
     293    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 100, 20, 100, CFSTR("HiraginoSansGB-W3")));
     294    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 200, 0 , 100, CFSTR("HiraginoSansGB-W3")));
     295    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 200, 20, 100, CFSTR("HiraginoSansGB-W3")));
     296    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 300, 0 , 100, CFSTR("HiraginoSansGB-W3")));
     297    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 300, 20, 100, CFSTR("HiraginoSansGB-W3")));
     298    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 400, 0 , 100, CFSTR("HiraginoSansGB-W3")));
     299    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 400, 20, 100, CFSTR("HiraginoSansGB-W3")));
     300    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 500, 0 , 100, CFSTR("HiraginoSansGB-W3")));
     301    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 500, 20, 100, CFSTR("HiraginoSansGB-W3")));
     302    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 600, 0 , 100, CFSTR("HiraginoSansGB-W6")));
     303    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 600, 20, 100, CFSTR("HiraginoSansGB-W6")));
     304    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 700, 0 , 100, CFSTR("HiraginoSansGB-W6")));
     305    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 700, 20, 100, CFSTR("HiraginoSansGB-W6")));
     306    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 800, 0 , 100, CFSTR("HiraginoSansGB-W6")));
     307    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 800, 20, 100, CFSTR("HiraginoSansGB-W6")));
     308    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 900, 0 , 100, CFSTR("HiraginoSansGB-W6")));
     309    EXPECT_TRUE(compareFonts("Hiragino Sans GB", 900, 20, 100, CFSTR("HiraginoSansGB-W6")));
     310    EXPECT_TRUE(compareFonts("Hiragino Sans", 100, 0 , 100, CFSTR("HiraginoSans-W0")));
     311    EXPECT_TRUE(compareFonts("Hiragino Sans", 100, 20, 100, CFSTR("HiraginoSans-W0")));
     312    EXPECT_TRUE(compareFonts("Hiragino Sans", 200, 0 , 100, CFSTR("HiraginoSans-W1")));
     313    EXPECT_TRUE(compareFonts("Hiragino Sans", 200, 20, 100, CFSTR("HiraginoSans-W1")));
     314    EXPECT_TRUE(compareFonts("Hiragino Sans", 300, 0 , 100, CFSTR("HiraginoSans-W3")));
     315    EXPECT_TRUE(compareFonts("Hiragino Sans", 300, 20, 100, CFSTR("HiraginoSans-W3")));
     316    EXPECT_TRUE(compareFonts("Hiragino Sans", 400, 0 , 100, CFSTR("HiraginoSans-W4")));
     317    EXPECT_TRUE(compareFonts("Hiragino Sans", 400, 20, 100, CFSTR("HiraginoSans-W4")));
     318    EXPECT_TRUE(compareFonts("Hiragino Sans", 500, 0 , 100, CFSTR("HiraginoSans-W5")));
     319    EXPECT_TRUE(compareFonts("Hiragino Sans", 500, 20, 100, CFSTR("HiraginoSans-W5")));
     320    EXPECT_TRUE(compareFonts("Hiragino Sans", 600, 0 , 100, CFSTR("HiraginoSans-W6")));
     321    EXPECT_TRUE(compareFonts("Hiragino Sans", 600, 20, 100, CFSTR("HiraginoSans-W6")));
     322    EXPECT_TRUE(compareFonts("Hiragino Sans", 700, 0 , 100, CFSTR("HiraginoSans-W7")));
     323    EXPECT_TRUE(compareFonts("Hiragino Sans", 700, 20, 100, CFSTR("HiraginoSans-W7")));
     324    EXPECT_TRUE(compareFonts("Hiragino Sans", 800, 0 , 100, CFSTR("HiraginoSans-W8")));
     325    EXPECT_TRUE(compareFonts("Hiragino Sans", 800, 20, 100, CFSTR("HiraginoSans-W8")));
     326    EXPECT_TRUE(compareFonts("Hiragino Sans", 900, 0 , 100, CFSTR("HiraginoSans-W9")));
     327    EXPECT_TRUE(compareFonts("Hiragino Sans", 900, 20, 100, CFSTR("HiraginoSans-W9")));
     328    EXPECT_TRUE(compareFonts("Hoefler Text", 100, 0 , 100, CFSTR("HoeflerText-Regular")));
     329    EXPECT_TRUE(compareFonts("Hoefler Text", 100, 20, 100, CFSTR("HoeflerText-Italic")));
     330    EXPECT_TRUE(compareFonts("Hoefler Text", 200, 0 , 100, CFSTR("HoeflerText-Regular")));
     331    EXPECT_TRUE(compareFonts("Hoefler Text", 200, 20, 100, CFSTR("HoeflerText-Italic")));
     332    EXPECT_TRUE(compareFonts("Hoefler Text", 300, 0 , 100, CFSTR("HoeflerText-Regular")));
     333    EXPECT_TRUE(compareFonts("Hoefler Text", 300, 20, 100, CFSTR("HoeflerText-Italic")));
     334    EXPECT_TRUE(compareFonts("Hoefler Text", 400, 0 , 100, CFSTR("HoeflerText-Regular")));
     335    EXPECT_TRUE(compareFonts("Hoefler Text", 400, 20, 100, CFSTR("HoeflerText-Italic")));
     336    EXPECT_TRUE(compareFonts("Hoefler Text", 500, 0 , 100, CFSTR("HoeflerText-Regular")));
     337    EXPECT_TRUE(compareFonts("Hoefler Text", 500, 20, 100, CFSTR("HoeflerText-Italic")));
     338    EXPECT_TRUE(compareFonts("Hoefler Text", 600, 0 , 100, CFSTR("HoeflerText-Black")));
     339    EXPECT_TRUE(compareFonts("Hoefler Text", 600, 20, 100, CFSTR("HoeflerText-BlackItalic")));
     340    EXPECT_TRUE(compareFonts("Hoefler Text", 700, 0 , 100, CFSTR("HoeflerText-Black")));
     341    EXPECT_TRUE(compareFonts("Hoefler Text", 700, 20, 100, CFSTR("HoeflerText-BlackItalic")));
     342    EXPECT_TRUE(compareFonts("Hoefler Text", 800, 0 , 100, CFSTR("HoeflerText-Black")));
     343    EXPECT_TRUE(compareFonts("Hoefler Text", 800, 20, 100, CFSTR("HoeflerText-BlackItalic")));
     344    EXPECT_TRUE(compareFonts("Hoefler Text", 900, 0 , 100, CFSTR("HoeflerText-Black")));
     345    EXPECT_TRUE(compareFonts("Hoefler Text", 900, 20, 100, CFSTR("HoeflerText-BlackItalic")));
     346    EXPECT_TRUE(compareFonts("Lucida Grande", 100, 0 , 100, CFSTR("LucidaGrande")));
     347    EXPECT_TRUE(compareFonts("Lucida Grande", 100, 20, 100, CFSTR("LucidaGrande")));
     348    EXPECT_TRUE(compareFonts("Lucida Grande", 200, 0 , 100, CFSTR("LucidaGrande")));
     349    EXPECT_TRUE(compareFonts("Lucida Grande", 200, 20, 100, CFSTR("LucidaGrande")));
     350    EXPECT_TRUE(compareFonts("Lucida Grande", 300, 0 , 100, CFSTR("LucidaGrande")));
     351    EXPECT_TRUE(compareFonts("Lucida Grande", 300, 20, 100, CFSTR("LucidaGrande")));
     352    EXPECT_TRUE(compareFonts("Lucida Grande", 400, 0 , 100, CFSTR("LucidaGrande")));
     353    EXPECT_TRUE(compareFonts("Lucida Grande", 400, 20, 100, CFSTR("LucidaGrande")));
     354    EXPECT_TRUE(compareFonts("Lucida Grande", 500, 0 , 100, CFSTR("LucidaGrande")));
     355    EXPECT_TRUE(compareFonts("Lucida Grande", 500, 20, 100, CFSTR("LucidaGrande")));
     356    EXPECT_TRUE(compareFonts("Lucida Grande", 600, 0 , 100, CFSTR("LucidaGrande-Bold")));
     357    EXPECT_TRUE(compareFonts("Lucida Grande", 600, 20, 100, CFSTR("LucidaGrande-Bold")));
     358    EXPECT_TRUE(compareFonts("Lucida Grande", 700, 0 , 100, CFSTR("LucidaGrande-Bold")));
     359    EXPECT_TRUE(compareFonts("Lucida Grande", 700, 20, 100, CFSTR("LucidaGrande-Bold")));
     360    EXPECT_TRUE(compareFonts("Lucida Grande", 800, 0 , 100, CFSTR("LucidaGrande-Bold")));
     361    EXPECT_TRUE(compareFonts("Lucida Grande", 800, 20, 100, CFSTR("LucidaGrande-Bold")));
     362    EXPECT_TRUE(compareFonts("Lucida Grande", 900, 0 , 100, CFSTR("LucidaGrande-Bold")));
     363    EXPECT_TRUE(compareFonts("Lucida Grande", 900, 20, 100, CFSTR("LucidaGrande-Bold")));
     364    EXPECT_TRUE(compareFonts("Optima", 100, 0 , 100, CFSTR("Optima-Regular")));
     365    EXPECT_TRUE(compareFonts("Optima", 100, 20, 100, CFSTR("Optima-Italic")));
     366    EXPECT_TRUE(compareFonts("Optima", 200, 0 , 100, CFSTR("Optima-Regular")));
     367    EXPECT_TRUE(compareFonts("Optima", 200, 20, 100, CFSTR("Optima-Italic")));
     368    EXPECT_TRUE(compareFonts("Optima", 300, 0 , 100, CFSTR("Optima-Regular")));
     369    EXPECT_TRUE(compareFonts("Optima", 300, 20, 100, CFSTR("Optima-Italic")));
     370    EXPECT_TRUE(compareFonts("Optima", 400, 0 , 100, CFSTR("Optima-Regular")));
     371    EXPECT_TRUE(compareFonts("Optima", 400, 20, 100, CFSTR("Optima-Italic")));
     372    EXPECT_TRUE(compareFonts("Optima", 500, 0 , 100, CFSTR("Optima-Regular")));
     373    EXPECT_TRUE(compareFonts("Optima", 500, 20, 100, CFSTR("Optima-Italic")));
     374    EXPECT_TRUE(compareFonts("Optima", 600, 0 , 100, CFSTR("Optima-Bold")));
     375    EXPECT_TRUE(compareFonts("Optima", 600, 20, 100, CFSTR("Optima-BoldItalic")));
     376    EXPECT_TRUE(compareFonts("Optima", 700, 0 , 100, CFSTR("Optima-Bold")));
     377    EXPECT_TRUE(compareFonts("Optima", 700, 20, 100, CFSTR("Optima-BoldItalic")));
     378    EXPECT_TRUE(compareFonts("Optima", 800, 0 , 100, CFSTR("Optima-ExtraBlack")));
     379    EXPECT_TRUE(compareFonts("Optima", 800, 20, 100, CFSTR("Optima-BoldItalic")));
     380    EXPECT_TRUE(compareFonts("Optima", 900, 0 , 100, CFSTR("Optima-ExtraBlack")));
     381    EXPECT_TRUE(compareFonts("Optima", 900, 20, 100, CFSTR("Optima-BoldItalic")));
     382    EXPECT_TRUE(compareFonts("PingFang HK", 100, 0 , 100, CFSTR("PingFangHK-Ultralight")));
     383    EXPECT_TRUE(compareFonts("PingFang HK", 100, 20, 100, CFSTR("PingFangHK-Ultralight")));
     384    EXPECT_TRUE(compareFonts("PingFang HK", 200, 0 , 100, CFSTR("PingFangHK-Thin")));
     385    EXPECT_TRUE(compareFonts("PingFang HK", 200, 20, 100, CFSTR("PingFangHK-Thin")));
     386    EXPECT_TRUE(compareFonts("PingFang HK", 300, 0 , 100, CFSTR("PingFangHK-Light")));
     387    EXPECT_TRUE(compareFonts("PingFang HK", 300, 20, 100, CFSTR("PingFangHK-Light")));
     388    EXPECT_TRUE(compareFonts("PingFang HK", 400, 0 , 100, CFSTR("PingFangHK-Regular")));
     389    EXPECT_TRUE(compareFonts("PingFang HK", 400, 20, 100, CFSTR("PingFangHK-Regular")));
     390    EXPECT_TRUE(compareFonts("PingFang HK", 500, 0 , 100, CFSTR("PingFangHK-Medium")));
     391    EXPECT_TRUE(compareFonts("PingFang HK", 500, 20, 100, CFSTR("PingFangHK-Medium")));
     392    EXPECT_TRUE(compareFonts("PingFang HK", 600, 0 , 100, CFSTR("PingFangHK-Semibold")));
     393    EXPECT_TRUE(compareFonts("PingFang HK", 600, 20, 100, CFSTR("PingFangHK-Semibold")));
     394    EXPECT_TRUE(compareFonts("PingFang HK", 700, 0 , 100, CFSTR("PingFangHK-Semibold")));
     395    EXPECT_TRUE(compareFonts("PingFang HK", 700, 20, 100, CFSTR("PingFangHK-Semibold")));
     396    EXPECT_TRUE(compareFonts("PingFang HK", 800, 0 , 100, CFSTR("PingFangHK-Semibold")));
     397    EXPECT_TRUE(compareFonts("PingFang HK", 800, 20, 100, CFSTR("PingFangHK-Semibold")));
     398    EXPECT_TRUE(compareFonts("PingFang HK", 900, 0 , 100, CFSTR("PingFangHK-Semibold")));
     399    EXPECT_TRUE(compareFonts("PingFang HK", 900, 20, 100, CFSTR("PingFangHK-Semibold")));
     400    EXPECT_TRUE(compareFonts("PingFang SC", 100, 0 , 100, CFSTR("PingFangSC-Ultralight")));
     401    EXPECT_TRUE(compareFonts("PingFang SC", 100, 20, 100, CFSTR("PingFangSC-Ultralight")));
     402    EXPECT_TRUE(compareFonts("PingFang SC", 200, 0 , 100, CFSTR("PingFangSC-Thin")));
     403    EXPECT_TRUE(compareFonts("PingFang SC", 200, 20, 100, CFSTR("PingFangSC-Thin")));
     404    EXPECT_TRUE(compareFonts("PingFang SC", 300, 0 , 100, CFSTR("PingFangSC-Light")));
     405    EXPECT_TRUE(compareFonts("PingFang SC", 300, 20, 100, CFSTR("PingFangSC-Light")));
     406    EXPECT_TRUE(compareFonts("PingFang SC", 400, 0 , 100, CFSTR("PingFangSC-Regular")));
     407    EXPECT_TRUE(compareFonts("PingFang SC", 400, 20, 100, CFSTR("PingFangSC-Regular")));
     408    EXPECT_TRUE(compareFonts("PingFang SC", 500, 0 , 100, CFSTR("PingFangSC-Medium")));
     409    EXPECT_TRUE(compareFonts("PingFang SC", 500, 20, 100, CFSTR("PingFangSC-Medium")));
     410    EXPECT_TRUE(compareFonts("PingFang SC", 600, 0 , 100, CFSTR("PingFangSC-Semibold")));
     411    EXPECT_TRUE(compareFonts("PingFang SC", 600, 20, 100, CFSTR("PingFangSC-Semibold")));
     412    EXPECT_TRUE(compareFonts("PingFang SC", 700, 0 , 100, CFSTR("PingFangSC-Semibold")));
     413    EXPECT_TRUE(compareFonts("PingFang SC", 700, 20, 100, CFSTR("PingFangSC-Semibold")));
     414    EXPECT_TRUE(compareFonts("PingFang SC", 800, 0 , 100, CFSTR("PingFangSC-Semibold")));
     415    EXPECT_TRUE(compareFonts("PingFang SC", 800, 20, 100, CFSTR("PingFangSC-Semibold")));
     416    EXPECT_TRUE(compareFonts("PingFang SC", 900, 0 , 100, CFSTR("PingFangSC-Semibold")));
     417    EXPECT_TRUE(compareFonts("PingFang SC", 900, 20, 100, CFSTR("PingFangSC-Semibold")));
     418    EXPECT_TRUE(compareFonts("PingFang TC", 100, 0 , 100, CFSTR("PingFangTC-Ultralight")));
     419    EXPECT_TRUE(compareFonts("PingFang TC", 100, 20, 100, CFSTR("PingFangTC-Ultralight")));
     420    EXPECT_TRUE(compareFonts("PingFang TC", 200, 0 , 100, CFSTR("PingFangTC-Thin")));
     421    EXPECT_TRUE(compareFonts("PingFang TC", 200, 20, 100, CFSTR("PingFangTC-Thin")));
     422    EXPECT_TRUE(compareFonts("PingFang TC", 300, 0 , 100, CFSTR("PingFangTC-Light")));
     423    EXPECT_TRUE(compareFonts("PingFang TC", 300, 20, 100, CFSTR("PingFangTC-Light")));
     424    EXPECT_TRUE(compareFonts("PingFang TC", 400, 0 , 100, CFSTR("PingFangTC-Regular")));
     425    EXPECT_TRUE(compareFonts("PingFang TC", 400, 20, 100, CFSTR("PingFangTC-Regular")));
     426    EXPECT_TRUE(compareFonts("PingFang TC", 500, 0 , 100, CFSTR("PingFangTC-Medium")));
     427    EXPECT_TRUE(compareFonts("PingFang TC", 500, 20, 100, CFSTR("PingFangTC-Medium")));
     428    EXPECT_TRUE(compareFonts("PingFang TC", 600, 0 , 100, CFSTR("PingFangTC-Semibold")));
     429    EXPECT_TRUE(compareFonts("PingFang TC", 600, 20, 100, CFSTR("PingFangTC-Semibold")));
     430    EXPECT_TRUE(compareFonts("PingFang TC", 700, 0 , 100, CFSTR("PingFangTC-Semibold")));
     431    EXPECT_TRUE(compareFonts("PingFang TC", 700, 20, 100, CFSTR("PingFangTC-Semibold")));
     432    EXPECT_TRUE(compareFonts("PingFang TC", 800, 0 , 100, CFSTR("PingFangTC-Semibold")));
     433    EXPECT_TRUE(compareFonts("PingFang TC", 800, 20, 100, CFSTR("PingFangTC-Semibold")));
     434    EXPECT_TRUE(compareFonts("PingFang TC", 900, 0 , 100, CFSTR("PingFangTC-Semibold")));
     435    EXPECT_TRUE(compareFonts("PingFang TC", 900, 20, 100, CFSTR("PingFangTC-Semibold")));
     436    EXPECT_TRUE(compareFonts("Times New Roman", 100, 0 , 100, CFSTR("TimesNewRomanPSMT")));
     437    EXPECT_TRUE(compareFonts("Times New Roman", 100, 20, 100, CFSTR("TimesNewRomanPS-ItalicMT")));
     438    EXPECT_TRUE(compareFonts("Times New Roman", 200, 0 , 100, CFSTR("TimesNewRomanPSMT")));
     439    EXPECT_TRUE(compareFonts("Times New Roman", 200, 20, 100, CFSTR("TimesNewRomanPS-ItalicMT")));
     440    EXPECT_TRUE(compareFonts("Times New Roman", 300, 0 , 100, CFSTR("TimesNewRomanPSMT")));
     441    EXPECT_TRUE(compareFonts("Times New Roman", 300, 20, 100, CFSTR("TimesNewRomanPS-ItalicMT")));
     442    EXPECT_TRUE(compareFonts("Times New Roman", 400, 0 , 100, CFSTR("TimesNewRomanPSMT")));
     443    EXPECT_TRUE(compareFonts("Times New Roman", 400, 20, 100, CFSTR("TimesNewRomanPS-ItalicMT")));
     444    EXPECT_TRUE(compareFonts("Times New Roman", 500, 0 , 100, CFSTR("TimesNewRomanPSMT")));
     445    EXPECT_TRUE(compareFonts("Times New Roman", 500, 20, 100, CFSTR("TimesNewRomanPS-ItalicMT")));
     446    EXPECT_TRUE(compareFonts("Times New Roman", 600, 0 , 100, CFSTR("TimesNewRomanPS-BoldMT")));
     447    EXPECT_TRUE(compareFonts("Times New Roman", 600, 20, 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
     448    EXPECT_TRUE(compareFonts("Times New Roman", 700, 0 , 100, CFSTR("TimesNewRomanPS-BoldMT")));
     449    EXPECT_TRUE(compareFonts("Times New Roman", 700, 20, 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
     450    EXPECT_TRUE(compareFonts("Times New Roman", 800, 0 , 100, CFSTR("TimesNewRomanPS-BoldMT")));
     451    EXPECT_TRUE(compareFonts("Times New Roman", 800, 20, 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
     452    EXPECT_TRUE(compareFonts("Times New Roman", 900, 0 , 100, CFSTR("TimesNewRomanPS-BoldMT")));
     453    EXPECT_TRUE(compareFonts("Times New Roman", 900, 20, 100, CFSTR("TimesNewRomanPS-BoldItalicMT")));
     454    EXPECT_TRUE(compareFonts("Times", 100, 0 , 100, CFSTR("Times-Roman")));
     455    EXPECT_TRUE(compareFonts("Times", 100, 20, 100, CFSTR("Times-Italic")));
     456    EXPECT_TRUE(compareFonts("Times", 200, 0 , 100, CFSTR("Times-Roman")));
     457    EXPECT_TRUE(compareFonts("Times", 200, 20, 100, CFSTR("Times-Italic")));
     458    EXPECT_TRUE(compareFonts("Times", 300, 0 , 100, CFSTR("Times-Roman")));
     459    EXPECT_TRUE(compareFonts("Times", 300, 20, 100, CFSTR("Times-Italic")));
     460    EXPECT_TRUE(compareFonts("Times", 400, 0 , 100, CFSTR("Times-Roman")));
     461    EXPECT_TRUE(compareFonts("Times", 400, 20, 100, CFSTR("Times-Italic")));
     462    EXPECT_TRUE(compareFonts("Times", 500, 0 , 100, CFSTR("Times-Roman")));
     463    EXPECT_TRUE(compareFonts("Times", 500, 20, 100, CFSTR("Times-Italic")));
     464    EXPECT_TRUE(compareFonts("Times", 600, 0 , 100, CFSTR("Times-Bold")));
     465    EXPECT_TRUE(compareFonts("Times", 600, 20, 100, CFSTR("Times-BoldItalic")));
     466    EXPECT_TRUE(compareFonts("Times", 700, 0 , 100, CFSTR("Times-Bold")));
     467    EXPECT_TRUE(compareFonts("Times", 700, 20, 100, CFSTR("Times-BoldItalic")));
     468    EXPECT_TRUE(compareFonts("Times", 800, 0 , 100, CFSTR("Times-Bold")));
     469    EXPECT_TRUE(compareFonts("Times", 800, 20, 100, CFSTR("Times-BoldItalic")));
     470    EXPECT_TRUE(compareFonts("Times", 900, 0 , 100, CFSTR("Times-Bold")));
     471    EXPECT_TRUE(compareFonts("Times", 900, 20, 100, CFSTR("Times-BoldItalic")));
     472    EXPECT_TRUE(compareFonts("Helvetica Neue", 700, 0 , 87.5, CFSTR("HelveticaNeue-CondensedBold")));
     473    EXPECT_TRUE(compareFonts("Helvetica Neue", 800, 0 , 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
     474    EXPECT_TRUE(compareFonts("Helvetica Neue", 900, 0 , 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
     475    EXPECT_TRUE(compareFonts("Helvetica Neue", 700, 0 , 75, CFSTR("HelveticaNeue-CondensedBold")));
     476    EXPECT_TRUE(compareFonts("Helvetica Neue", 800, 0 , 75, CFSTR("HelveticaNeue-CondensedBlack")));
     477    EXPECT_TRUE(compareFonts("Helvetica Neue", 900, 0 , 75, CFSTR("HelveticaNeue-CondensedBlack")));
     478    EXPECT_TRUE(compareFonts("Helvetica Neue", 700, 20, 87.5, CFSTR("HelveticaNeue-CondensedBold")));
     479    EXPECT_TRUE(compareFonts("Helvetica Neue", 800, 20, 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
     480    EXPECT_TRUE(compareFonts("Helvetica Neue", 900, 20, 87.5, CFSTR("HelveticaNeue-CondensedBlack")));
     481    EXPECT_TRUE(compareFonts("Helvetica Neue", 700, 20, 75, CFSTR("HelveticaNeue-CondensedBold")));
     482    EXPECT_TRUE(compareFonts("Helvetica Neue", 800, 20, 75, CFSTR("HelveticaNeue-CondensedBlack")));
     483    EXPECT_TRUE(compareFonts("Helvetica Neue", 900, 20, 75, CFSTR("HelveticaNeue-CondensedBlack")));
     484    EXPECT_TRUE(compareFonts("Futura", 500, 0 , 87.5, CFSTR("Futura-CondensedMedium")));
     485    EXPECT_TRUE(compareFonts("Futura", 500, 20, 87.5, CFSTR("Futura-CondensedMedium")));
     486    EXPECT_TRUE(compareFonts("Futura", 600, 0 , 87.5, CFSTR("Futura-CondensedExtraBold")));
     487    EXPECT_TRUE(compareFonts("Futura", 600, 20, 87.5, CFSTR("Futura-CondensedExtraBold")));
     488    EXPECT_TRUE(compareFonts("Futura", 700, 0 , 87.5, CFSTR("Futura-CondensedExtraBold")));
     489    EXPECT_TRUE(compareFonts("Futura", 700, 20, 87.5, CFSTR("Futura-CondensedExtraBold")));
     490    EXPECT_TRUE(compareFonts("Futura", 800, 0 , 87.5, CFSTR("Futura-CondensedExtraBold")));
     491    EXPECT_TRUE(compareFonts("Futura", 800, 20, 87.5, CFSTR("Futura-CondensedExtraBold")));
     492    EXPECT_TRUE(compareFonts("Futura", 900, 0 , 87.5, CFSTR("Futura-CondensedExtraBold")));
     493    EXPECT_TRUE(compareFonts("Futura", 900, 20, 87.5, CFSTR("Futura-CondensedExtraBold")));
    494494}
    495495
    496496TEST_F(FontCacheTest, FontLookupFromPostScriptName)
    497497{
    498     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    499     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    500     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    501     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    502     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    503     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    504     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    505     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    506     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    507     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    508     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    509     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    510     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    511     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    512     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    513     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    514     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    515     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    516     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    517     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    518     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    519     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    520     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    521     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    522     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    523     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    524     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    525     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    526     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    527     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    528     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    529     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    530     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    531     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    532     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    533     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    534     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    535     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    536     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    537     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    538     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    539     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    540     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    541     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    542     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    543     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    544     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    545     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    546     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    547     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    548     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    549     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    550     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    551     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    552     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Light")));
    553     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    554     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Light")));
    555     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    556     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Light")));
    557     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    558     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Light")));
    559     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    560     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Light")));
    561     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    562     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    563     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    564     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    565     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    566     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    567     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    568     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    569     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    570     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Medium")));
    571     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    572     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Medium")));
    573     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    574     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Medium")));
    575     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    576     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Medium")));
    577     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    578     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Medium")));
    579     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    580     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    581     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    582     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    583     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    584     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    585     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    586     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    587     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    588     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Regular")));
    589     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    590     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Regular")));
    591     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    592     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Regular")));
    593     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    594     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Regular")));
    595     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    596     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Regular")));
    597     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    598     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    599     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    600     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    601     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    602     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    603     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    604     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    605     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    606     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    607     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    608     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    609     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    610     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    611     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    612     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    613     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    614     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    615     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    616     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    617     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    618     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    619     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    620     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    621     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    622     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    623     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    624     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Thin")));
    625     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    626     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Thin")));
    627     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    628     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Thin")));
    629     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    630     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Thin")));
    631     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    632     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Thin")));
    633     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    634     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    635     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    636     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    637     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    638     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    639     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    640     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    641     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    642     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight100, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    643     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight100, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Thin")));
    644     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight200, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    645     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight200, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    646     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight300, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    647     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight300, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Light")));
    648     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight400, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    649     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight400, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Regular")));
    650     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight500, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
    651     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight500, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Medium")));
    652     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight600, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    653     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight600, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
    654     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight700, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Bold")));
    655     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight700, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Bold")));
    656     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight800, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    657     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight800, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
    658     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight900, FontItalicOff, 100, CFSTR("AppleSDGothicNeo-Heavy")));
    659     EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", FontWeight900, FontItalicOn , 100, CFSTR("AppleSDGothicNeo-Heavy")));
    660     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Black")));
    661     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    662     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Black")));
    663     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    664     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Black")));
    665     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    666     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Black")));
    667     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    668     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Black")));
    669     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    670     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    671     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    672     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    673     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    674     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    675     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    676     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Black")));
    677     EXPECT_TRUE(compareFonts("Avenir-Black", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    678     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    679     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    680     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    681     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    682     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    683     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    684     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    685     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    686     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    687     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    688     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    689     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    690     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    691     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    692     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    693     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    694     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-BlackOblique")));
    695     EXPECT_TRUE(compareFonts("Avenir-BlackOblique", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    696     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Book")));
    697     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    698     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Book")));
    699     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    700     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Book")));
    701     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    702     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Book")));
    703     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    704     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Book")));
    705     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    706     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    707     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    708     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    709     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    710     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    711     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    712     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    713     EXPECT_TRUE(compareFonts("Avenir-Book", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    714     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-BookOblique")));
    715     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    716     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-BookOblique")));
    717     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    718     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-BookOblique")));
    719     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    720     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-BookOblique")));
    721     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    722     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-BookOblique")));
    723     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    724     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    725     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    726     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    727     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    728     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    729     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    730     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    731     EXPECT_TRUE(compareFonts("Avenir-BookOblique", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    732     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    733     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    734     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    735     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    736     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    737     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    738     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    739     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    740     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    741     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    742     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    743     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    744     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    745     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    746     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    747     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    748     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    749     EXPECT_TRUE(compareFonts("Avenir-Heavy", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    750     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    751     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    752     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    753     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    754     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    755     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    756     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    757     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    758     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    759     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    760     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    761     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    762     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    763     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    764     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    765     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    766     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-HeavyOblique")));
    767     EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    768     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Light")));
    769     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    770     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Light")));
    771     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    772     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Light")));
    773     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    774     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Light")));
    775     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    776     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Light")));
    777     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    778     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    779     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    780     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    781     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    782     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    783     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    784     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    785     EXPECT_TRUE(compareFonts("Avenir-Light", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    786     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-LightOblique")));
    787     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    788     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-LightOblique")));
    789     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    790     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-LightOblique")));
    791     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    792     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-LightOblique")));
    793     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    794     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-LightOblique")));
    795     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    796     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    797     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    798     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    799     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    800     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    801     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    802     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    803     EXPECT_TRUE(compareFonts("Avenir-LightOblique", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    804     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Medium")));
    805     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    806     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Medium")));
    807     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    808     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Medium")));
    809     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    810     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Medium")));
    811     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    812     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Medium")));
    813     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    814     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    815     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    816     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    817     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    818     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    819     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    820     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    821     EXPECT_TRUE(compareFonts("Avenir-Medium", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    822     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-MediumOblique")));
    823     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    824     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-MediumOblique")));
    825     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    826     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-MediumOblique")));
    827     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    828     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-MediumOblique")));
    829     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    830     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-MediumOblique")));
    831     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    832     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    833     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    834     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    835     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    836     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    837     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    838     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    839     EXPECT_TRUE(compareFonts("Avenir-MediumOblique", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    840     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Oblique")));
    841     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-Oblique")));
    842     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Oblique")));
    843     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-Oblique")));
    844     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Oblique")));
    845     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-Oblique")));
    846     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Oblique")));
    847     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-Oblique")));
    848     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Oblique")));
    849     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-Oblique")));
    850     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    851     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    852     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    853     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    854     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    855     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    856     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    857     EXPECT_TRUE(compareFonts("Avenir-Oblique", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    858     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight100, FontItalicOff, 100, CFSTR("Avenir-Roman")));
    859     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight100, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    860     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight200, FontItalicOff, 100, CFSTR("Avenir-Roman")));
    861     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight200, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    862     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight300, FontItalicOff, 100, CFSTR("Avenir-Roman")));
    863     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight300, FontItalicOn , 100, CFSTR("Avenir-LightOblique")));
    864     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight400, FontItalicOff, 100, CFSTR("Avenir-Roman")));
    865     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight400, FontItalicOn , 100, CFSTR("Avenir-BookOblique")));
    866     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight500, FontItalicOff, 100, CFSTR("Avenir-Roman")));
    867     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight500, FontItalicOn , 100, CFSTR("Avenir-MediumOblique")));
    868     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight600, FontItalicOff, 100, CFSTR("Avenir-Black")));
    869     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight600, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    870     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight700, FontItalicOff, 100, CFSTR("Avenir-Black")));
    871     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight700, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    872     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight800, FontItalicOff, 100, CFSTR("Avenir-Black")));
    873     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight800, FontItalicOn , 100, CFSTR("Avenir-BlackOblique")));
    874     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight900, FontItalicOff, 100, CFSTR("Avenir-Heavy")));
    875     EXPECT_TRUE(compareFonts("Avenir-Roman", FontWeight900, FontItalicOn , 100, CFSTR("Avenir-HeavyOblique")));
    876     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    877     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    878     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    879     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    880     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    881     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    882     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    883     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    884     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    885     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    886     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    887     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    888     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    889     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    890     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    891     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    892     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    893     EXPECT_TRUE(compareFonts("AvenirNext-Bold", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    894     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    895     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    896     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    897     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    898     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    899     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    900     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    901     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    902     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    903     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    904     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    905     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    906     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    907     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    908     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    909     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    910     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-BoldItalic")));
    911     EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    912     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    913     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    914     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    915     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    916     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    917     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    918     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    919     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    920     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    921     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    922     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    923     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    924     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    925     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    926     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    927     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    928     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    929     EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    930     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    931     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    932     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    933     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    934     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    935     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    936     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    937     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    938     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    939     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    940     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    941     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    942     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    943     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    944     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    945     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    946     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-DemiBoldItalic")));
    947     EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    948     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    949     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    950     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    951     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    952     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    953     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    954     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    955     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    956     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    957     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    958     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    959     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    960     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    961     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    962     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    963     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    964     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    965     EXPECT_TRUE(compareFonts("AvenirNext-Heavy", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    966     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    967     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    968     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    969     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    970     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    971     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    972     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    973     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    974     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    975     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    976     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    977     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    978     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    979     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    980     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    981     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    982     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-HeavyItalic")));
    983     EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    984     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-Italic")));
    985     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    986     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-Italic")));
    987     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    988     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-Italic")));
    989     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    990     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-Italic")));
    991     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    992     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-Italic")));
    993     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    994     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    995     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    996     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    997     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    998     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    999     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1000     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1001     EXPECT_TRUE(compareFonts("AvenirNext-Italic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1002     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-Medium")));
    1003     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1004     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-Medium")));
    1005     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1006     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-Medium")));
    1007     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1008     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-Medium")));
    1009     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    1010     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-Medium")));
    1011     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1012     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    1013     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    1014     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    1015     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    1016     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1017     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1018     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1019     EXPECT_TRUE(compareFonts("AvenirNext-Medium", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1020     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-MediumItalic")));
    1021     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1022     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-MediumItalic")));
    1023     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1024     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-MediumItalic")));
    1025     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1026     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-MediumItalic")));
    1027     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1028     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-MediumItalic")));
    1029     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1030     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    1031     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    1032     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    1033     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    1034     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1035     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1036     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1037     EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1038     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-Regular")));
    1039     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1040     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-Regular")));
    1041     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1042     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-Regular")));
    1043     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1044     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-Regular")));
    1045     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    1046     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-Regular")));
    1047     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1048     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    1049     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    1050     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    1051     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    1052     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1053     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1054     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1055     EXPECT_TRUE(compareFonts("AvenirNext-Regular", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1056     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    1057     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1058     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    1059     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1060     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    1061     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1062     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    1063     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-Italic")));
    1064     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-UltraLight")));
    1065     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-MediumItalic")));
    1066     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    1067     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    1068     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    1069     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    1070     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1071     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1072     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1073     EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1074     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNext-UltraLightItalic")));
    1075     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1076     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNext-UltraLightItalic")));
    1077     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1078     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNext-UltraLightItalic")));
    1079     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1080     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNext-UltraLightItalic")));
    1081     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1082     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNext-UltraLightItalic")));
    1083     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNext-UltraLightItalic")));
    1084     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNext-DemiBold")));
    1085     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNext-DemiBoldItalic")));
    1086     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNext-Bold")));
    1087     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNext-BoldItalic")));
    1088     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1089     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1090     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNext-Heavy")));
    1091     EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNext-HeavyItalic")));
    1092     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1093     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1094     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1095     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1096     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1097     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1098     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1099     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1100     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1101     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1102     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1103     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1104     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1105     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1106     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1107     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1108     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1109     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1110     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1111     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1112     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1113     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1114     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1115     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1116     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1117     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1118     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1119     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1120     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1121     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1122     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1123     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1124     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1125     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1126     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1127     EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1128     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1129     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1130     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1131     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1132     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1133     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1134     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1135     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1136     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1137     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1138     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1139     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1140     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1141     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1142     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1143     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1144     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1145     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1146     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1147     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1148     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1149     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1150     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1151     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1152     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1153     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1154     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1155     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1156     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1157     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1158     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1159     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1160     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1161     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1162     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1163     EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1164     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1165     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1166     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1167     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1168     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1169     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1170     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1171     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1172     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1173     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1174     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1175     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1176     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1177     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1178     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1179     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1180     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1181     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1182     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1183     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1184     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1185     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1186     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1187     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1188     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1189     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1190     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1191     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1192     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1193     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1194     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1195     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1196     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1197     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1198     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1199     EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1200     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Italic")));
    1201     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1202     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Italic")));
    1203     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1204     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Italic")));
    1205     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1206     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Italic")));
    1207     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1208     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Italic")));
    1209     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1210     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1211     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1212     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1213     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1214     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1215     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1216     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1217     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1218     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Medium")));
    1219     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1220     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Medium")));
    1221     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1222     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Medium")));
    1223     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1224     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Medium")));
    1225     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1226     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Medium")));
    1227     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1228     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1229     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1230     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1231     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1232     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1233     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1234     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1235     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1236     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1237     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1238     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1239     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1240     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1241     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1242     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1243     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1244     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1245     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1246     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1247     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1248     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1249     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1250     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1251     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1252     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1253     EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1254     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Regular")));
    1255     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1256     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Regular")));
    1257     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1258     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Regular")));
    1259     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1260     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Regular")));
    1261     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1262     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Regular")));
    1263     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1264     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1265     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1266     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1267     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1268     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1269     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1270     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1271     EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1272     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLight")));
    1273     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1274     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLight")));
    1275     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1276     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLight")));
    1277     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1278     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLight")));
    1279     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-Italic")));
    1280     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLight")));
    1281     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
    1282     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1283     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1284     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1285     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1286     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1287     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1288     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1289     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1290     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight100, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1291     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight100, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1292     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight200, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1293     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight200, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1294     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight300, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1295     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight300, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1296     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight400, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1297     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight400, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1298     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight500, FontItalicOff, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1299     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight500, FontItalicOn , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
    1300     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight600, FontItalicOff, 100, CFSTR("AvenirNextCondensed-DemiBold")));
    1301     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight600, FontItalicOn , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
    1302     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight700, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Bold")));
    1303     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight700, FontItalicOn , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
    1304     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight800, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1305     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight800, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1306     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight900, FontItalicOff, 100, CFSTR("AvenirNextCondensed-Heavy")));
    1307     EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", FontWeight900, FontItalicOn , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
    1308     EXPECT_TRUE(compareFonts("Baskerville", FontWeight100, FontItalicOff, 100, CFSTR("Baskerville")));
    1309     EXPECT_TRUE(compareFonts("Baskerville", FontWeight100, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1310     EXPECT_TRUE(compareFonts("Baskerville", FontWeight200, FontItalicOff, 100, CFSTR("Baskerville")));
    1311     EXPECT_TRUE(compareFonts("Baskerville", FontWeight200, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1312     EXPECT_TRUE(compareFonts("Baskerville", FontWeight300, FontItalicOff, 100, CFSTR("Baskerville")));
    1313     EXPECT_TRUE(compareFonts("Baskerville", FontWeight300, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1314     EXPECT_TRUE(compareFonts("Baskerville", FontWeight400, FontItalicOff, 100, CFSTR("Baskerville")));
    1315     EXPECT_TRUE(compareFonts("Baskerville", FontWeight400, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1316     EXPECT_TRUE(compareFonts("Baskerville", FontWeight500, FontItalicOff, 100, CFSTR("Baskerville")));
    1317     EXPECT_TRUE(compareFonts("Baskerville", FontWeight500, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1318     EXPECT_TRUE(compareFonts("Baskerville", FontWeight600, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1319     EXPECT_TRUE(compareFonts("Baskerville", FontWeight600, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1320     EXPECT_TRUE(compareFonts("Baskerville", FontWeight700, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1321     EXPECT_TRUE(compareFonts("Baskerville", FontWeight700, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1322     EXPECT_TRUE(compareFonts("Baskerville", FontWeight800, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1323     EXPECT_TRUE(compareFonts("Baskerville", FontWeight800, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1324     EXPECT_TRUE(compareFonts("Baskerville", FontWeight900, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1325     EXPECT_TRUE(compareFonts("Baskerville", FontWeight900, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1326     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight100, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1327     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight100, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1328     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight200, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1329     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight200, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1330     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight300, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1331     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight300, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1332     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight400, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1333     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight400, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1334     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight500, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1335     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight500, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1336     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight600, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1337     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight600, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1338     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight700, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1339     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight700, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1340     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight800, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1341     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight800, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1342     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight900, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1343     EXPECT_TRUE(compareFonts("Baskerville-Bold", FontWeight900, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1344     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight100, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1345     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight100, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1346     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight200, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1347     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight200, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1348     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight300, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1349     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight300, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1350     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight400, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1351     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight400, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1352     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight500, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1353     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight500, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1354     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight600, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1355     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight600, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1356     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight700, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1357     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight700, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1358     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight800, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1359     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight800, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1360     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight900, FontItalicOff, 100, CFSTR("Baskerville-BoldItalic")));
    1361     EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", FontWeight900, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1362     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight100, FontItalicOff, 100, CFSTR("Baskerville-Italic")));
    1363     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight100, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1364     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight200, FontItalicOff, 100, CFSTR("Baskerville-Italic")));
    1365     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight200, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1366     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight300, FontItalicOff, 100, CFSTR("Baskerville-Italic")));
    1367     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight300, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1368     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight400, FontItalicOff, 100, CFSTR("Baskerville-Italic")));
    1369     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight400, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1370     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight500, FontItalicOff, 100, CFSTR("Baskerville-Italic")));
    1371     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight500, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1372     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight600, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1373     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight600, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1374     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight700, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1375     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight700, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1376     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight800, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1377     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight800, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1378     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight900, FontItalicOff, 100, CFSTR("Baskerville-Bold")));
    1379     EXPECT_TRUE(compareFonts("Baskerville-Italic", FontWeight900, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1380     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight100, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1381     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight100, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1382     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight200, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1383     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight200, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1384     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight300, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1385     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight300, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1386     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight400, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1387     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight400, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1388     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight500, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1389     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight500, FontItalicOn , 100, CFSTR("Baskerville-Italic")));
    1390     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight600, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1391     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight600, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1392     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight700, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1393     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight700, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1394     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight800, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1395     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight800, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1396     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight900, FontItalicOff, 100, CFSTR("Baskerville-SemiBold")));
    1397     EXPECT_TRUE(compareFonts("Baskerville-SemiBold", FontWeight900, FontItalicOn , 100, CFSTR("Baskerville-BoldItalic")));
    1398     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight100, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1399     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight100, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1400     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight200, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1401     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight200, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1402     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight300, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1403     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight300, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1404     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight400, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1405     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight400, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1406     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight500, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1407     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight500, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1408     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight600, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1409     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight600, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1410     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight700, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1411     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight700, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1412     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight800, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1413     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight800, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
    1414     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight900, FontItalicOff, 100, CFSTR("Baskerville-SemiBoldItalic")));
    1415     EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", FontWeight900, FontItalicOn , 100, CFSTR("Baskerville-SemiBoldItalic")));
     498    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 100, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     499    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     500    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 200, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     501    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     502    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 300, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     503    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     504    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 400, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     505    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     506    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 500, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     507    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     508    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 600, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     509    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     510    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     511    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     512    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 800, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     513    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     514    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     515    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Bold", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     516    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 100, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     517    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     518    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 200, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     519    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     520    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 300, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     521    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     522    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 400, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     523    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     524    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 500, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     525    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     526    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 600, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     527    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     528    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 700, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     529    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     530    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 800, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     531    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     532    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 900, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     533    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-ExtraBold", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     534    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 100, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     535    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     536    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 200, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     537    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     538    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 300, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     539    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     540    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 400, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     541    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     542    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 500, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     543    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     544    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 600, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     545    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     546    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     547    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     548    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 800, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     549    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     550    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     551    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Heavy", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     552    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 100, 0 , 100, CFSTR("AppleSDGothicNeo-Light")));
     553    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     554    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 200, 0 , 100, CFSTR("AppleSDGothicNeo-Light")));
     555    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     556    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 300, 0 , 100, CFSTR("AppleSDGothicNeo-Light")));
     557    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     558    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 400, 0 , 100, CFSTR("AppleSDGothicNeo-Light")));
     559    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     560    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 500, 0 , 100, CFSTR("AppleSDGothicNeo-Light")));
     561    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     562    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 600, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     563    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     564    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     565    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     566    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 800, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     567    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     568    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     569    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Light", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     570    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 100, 0 , 100, CFSTR("AppleSDGothicNeo-Medium")));
     571    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     572    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 200, 0 , 100, CFSTR("AppleSDGothicNeo-Medium")));
     573    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     574    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 300, 0 , 100, CFSTR("AppleSDGothicNeo-Medium")));
     575    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     576    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 400, 0 , 100, CFSTR("AppleSDGothicNeo-Medium")));
     577    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     578    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 500, 0 , 100, CFSTR("AppleSDGothicNeo-Medium")));
     579    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     580    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 600, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     581    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     582    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     583    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     584    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 800, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     585    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     586    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     587    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Medium", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     588    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 100, 0 , 100, CFSTR("AppleSDGothicNeo-Regular")));
     589    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     590    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 200, 0 , 100, CFSTR("AppleSDGothicNeo-Regular")));
     591    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     592    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 300, 0 , 100, CFSTR("AppleSDGothicNeo-Regular")));
     593    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     594    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 400, 0 , 100, CFSTR("AppleSDGothicNeo-Regular")));
     595    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     596    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 500, 0 , 100, CFSTR("AppleSDGothicNeo-Regular")));
     597    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     598    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 600, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     599    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     600    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     601    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     602    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 800, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     603    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     604    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     605    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Regular", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     606    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 100, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     607    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     608    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 200, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     609    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     610    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 300, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     611    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     612    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 400, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     613    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     614    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 500, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     615    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     616    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 600, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     617    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     618    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 700, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     619    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     620    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 800, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     621    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     622    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 900, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     623    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-SemiBold", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     624    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 100, 0 , 100, CFSTR("AppleSDGothicNeo-Thin")));
     625    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     626    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 200, 0 , 100, CFSTR("AppleSDGothicNeo-Thin")));
     627    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     628    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 300, 0 , 100, CFSTR("AppleSDGothicNeo-Thin")));
     629    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     630    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 400, 0 , 100, CFSTR("AppleSDGothicNeo-Thin")));
     631    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     632    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 500, 0 , 100, CFSTR("AppleSDGothicNeo-Thin")));
     633    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     634    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 600, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     635    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     636    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     637    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     638    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 800, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     639    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     640    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     641    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-Thin", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     642    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 100, 0 , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     643    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 100, 20, 100, CFSTR("AppleSDGothicNeo-Thin")));
     644    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 200, 0 , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     645    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 200, 20, 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     646    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 300, 0 , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     647    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 300, 20, 100, CFSTR("AppleSDGothicNeo-Light")));
     648    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 400, 0 , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     649    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 400, 20, 100, CFSTR("AppleSDGothicNeo-Regular")));
     650    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 500, 0 , 100, CFSTR("AppleSDGothicNeo-UltraLight")));
     651    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 500, 20, 100, CFSTR("AppleSDGothicNeo-Medium")));
     652    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 600, 0 , 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     653    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 600, 20, 100, CFSTR("AppleSDGothicNeo-SemiBold")));
     654    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 700, 0 , 100, CFSTR("AppleSDGothicNeo-Bold")));
     655    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 700, 20, 100, CFSTR("AppleSDGothicNeo-Bold")));
     656    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 800, 0 , 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     657    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 800, 20, 100, CFSTR("AppleSDGothicNeo-ExtraBold")));
     658    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 900, 0 , 100, CFSTR("AppleSDGothicNeo-Heavy")));
     659    EXPECT_TRUE(compareFonts("AppleSDGothicNeo-UltraLight", 900, 20, 100, CFSTR("AppleSDGothicNeo-Heavy")));
     660    EXPECT_TRUE(compareFonts("Avenir-Black", 100, 0 , 100, CFSTR("Avenir-Black")));
     661    EXPECT_TRUE(compareFonts("Avenir-Black", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     662    EXPECT_TRUE(compareFonts("Avenir-Black", 200, 0 , 100, CFSTR("Avenir-Black")));
     663    EXPECT_TRUE(compareFonts("Avenir-Black", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     664    EXPECT_TRUE(compareFonts("Avenir-Black", 300, 0 , 100, CFSTR("Avenir-Black")));
     665    EXPECT_TRUE(compareFonts("Avenir-Black", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     666    EXPECT_TRUE(compareFonts("Avenir-Black", 400, 0 , 100, CFSTR("Avenir-Black")));
     667    EXPECT_TRUE(compareFonts("Avenir-Black", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     668    EXPECT_TRUE(compareFonts("Avenir-Black", 500, 0 , 100, CFSTR("Avenir-Black")));
     669    EXPECT_TRUE(compareFonts("Avenir-Black", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     670    EXPECT_TRUE(compareFonts("Avenir-Black", 600, 0 , 100, CFSTR("Avenir-Black")));
     671    EXPECT_TRUE(compareFonts("Avenir-Black", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     672    EXPECT_TRUE(compareFonts("Avenir-Black", 700, 0 , 100, CFSTR("Avenir-Black")));
     673    EXPECT_TRUE(compareFonts("Avenir-Black", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     674    EXPECT_TRUE(compareFonts("Avenir-Black", 800, 0 , 100, CFSTR("Avenir-Black")));
     675    EXPECT_TRUE(compareFonts("Avenir-Black", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     676    EXPECT_TRUE(compareFonts("Avenir-Black", 900, 0 , 100, CFSTR("Avenir-Black")));
     677    EXPECT_TRUE(compareFonts("Avenir-Black", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     678    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 100, 0 , 100, CFSTR("Avenir-BlackOblique")));
     679    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 100, 20, 100, CFSTR("Avenir-BlackOblique")));
     680    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 200, 0 , 100, CFSTR("Avenir-BlackOblique")));
     681    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 200, 20, 100, CFSTR("Avenir-BlackOblique")));
     682    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 300, 0 , 100, CFSTR("Avenir-BlackOblique")));
     683    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 300, 20, 100, CFSTR("Avenir-BlackOblique")));
     684    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 400, 0 , 100, CFSTR("Avenir-BlackOblique")));
     685    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 400, 20, 100, CFSTR("Avenir-BlackOblique")));
     686    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 500, 0 , 100, CFSTR("Avenir-BlackOblique")));
     687    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 500, 20, 100, CFSTR("Avenir-BlackOblique")));
     688    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 600, 0 , 100, CFSTR("Avenir-BlackOblique")));
     689    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     690    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 700, 0 , 100, CFSTR("Avenir-BlackOblique")));
     691    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     692    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 800, 0 , 100, CFSTR("Avenir-BlackOblique")));
     693    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     694    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 900, 0 , 100, CFSTR("Avenir-BlackOblique")));
     695    EXPECT_TRUE(compareFonts("Avenir-BlackOblique", 900, 20, 100, CFSTR("Avenir-BlackOblique")));
     696    EXPECT_TRUE(compareFonts("Avenir-Book", 100, 0 , 100, CFSTR("Avenir-Book")));
     697    EXPECT_TRUE(compareFonts("Avenir-Book", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     698    EXPECT_TRUE(compareFonts("Avenir-Book", 200, 0 , 100, CFSTR("Avenir-Book")));
     699    EXPECT_TRUE(compareFonts("Avenir-Book", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     700    EXPECT_TRUE(compareFonts("Avenir-Book", 300, 0 , 100, CFSTR("Avenir-Book")));
     701    EXPECT_TRUE(compareFonts("Avenir-Book", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     702    EXPECT_TRUE(compareFonts("Avenir-Book", 400, 0 , 100, CFSTR("Avenir-Book")));
     703    EXPECT_TRUE(compareFonts("Avenir-Book", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     704    EXPECT_TRUE(compareFonts("Avenir-Book", 500, 0 , 100, CFSTR("Avenir-Book")));
     705    EXPECT_TRUE(compareFonts("Avenir-Book", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     706    EXPECT_TRUE(compareFonts("Avenir-Book", 600, 0 , 100, CFSTR("Avenir-Black")));
     707    EXPECT_TRUE(compareFonts("Avenir-Book", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     708    EXPECT_TRUE(compareFonts("Avenir-Book", 700, 0 , 100, CFSTR("Avenir-Black")));
     709    EXPECT_TRUE(compareFonts("Avenir-Book", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     710    EXPECT_TRUE(compareFonts("Avenir-Book", 800, 0 , 100, CFSTR("Avenir-Black")));
     711    EXPECT_TRUE(compareFonts("Avenir-Book", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     712    EXPECT_TRUE(compareFonts("Avenir-Book", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     713    EXPECT_TRUE(compareFonts("Avenir-Book", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     714    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 100, 0 , 100, CFSTR("Avenir-BookOblique")));
     715    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 100, 20, 100, CFSTR("Avenir-BookOblique")));
     716    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 200, 0 , 100, CFSTR("Avenir-BookOblique")));
     717    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 200, 20, 100, CFSTR("Avenir-BookOblique")));
     718    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 300, 0 , 100, CFSTR("Avenir-BookOblique")));
     719    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 300, 20, 100, CFSTR("Avenir-BookOblique")));
     720    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 400, 0 , 100, CFSTR("Avenir-BookOblique")));
     721    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     722    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 500, 0 , 100, CFSTR("Avenir-BookOblique")));
     723    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 500, 20, 100, CFSTR("Avenir-BookOblique")));
     724    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 600, 0 , 100, CFSTR("Avenir-Black")));
     725    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     726    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 700, 0 , 100, CFSTR("Avenir-Black")));
     727    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     728    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 800, 0 , 100, CFSTR("Avenir-Black")));
     729    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     730    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     731    EXPECT_TRUE(compareFonts("Avenir-BookOblique", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     732    EXPECT_TRUE(compareFonts("Avenir-Heavy", 100, 0 , 100, CFSTR("Avenir-Heavy")));
     733    EXPECT_TRUE(compareFonts("Avenir-Heavy", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     734    EXPECT_TRUE(compareFonts("Avenir-Heavy", 200, 0 , 100, CFSTR("Avenir-Heavy")));
     735    EXPECT_TRUE(compareFonts("Avenir-Heavy", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     736    EXPECT_TRUE(compareFonts("Avenir-Heavy", 300, 0 , 100, CFSTR("Avenir-Heavy")));
     737    EXPECT_TRUE(compareFonts("Avenir-Heavy", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     738    EXPECT_TRUE(compareFonts("Avenir-Heavy", 400, 0 , 100, CFSTR("Avenir-Heavy")));
     739    EXPECT_TRUE(compareFonts("Avenir-Heavy", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     740    EXPECT_TRUE(compareFonts("Avenir-Heavy", 500, 0 , 100, CFSTR("Avenir-Heavy")));
     741    EXPECT_TRUE(compareFonts("Avenir-Heavy", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     742    EXPECT_TRUE(compareFonts("Avenir-Heavy", 600, 0 , 100, CFSTR("Avenir-Heavy")));
     743    EXPECT_TRUE(compareFonts("Avenir-Heavy", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     744    EXPECT_TRUE(compareFonts("Avenir-Heavy", 700, 0 , 100, CFSTR("Avenir-Heavy")));
     745    EXPECT_TRUE(compareFonts("Avenir-Heavy", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     746    EXPECT_TRUE(compareFonts("Avenir-Heavy", 800, 0 , 100, CFSTR("Avenir-Heavy")));
     747    EXPECT_TRUE(compareFonts("Avenir-Heavy", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     748    EXPECT_TRUE(compareFonts("Avenir-Heavy", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     749    EXPECT_TRUE(compareFonts("Avenir-Heavy", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     750    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 100, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     751    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 100, 20, 100, CFSTR("Avenir-HeavyOblique")));
     752    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 200, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     753    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 200, 20, 100, CFSTR("Avenir-HeavyOblique")));
     754    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 300, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     755    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 300, 20, 100, CFSTR("Avenir-HeavyOblique")));
     756    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 400, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     757    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 400, 20, 100, CFSTR("Avenir-HeavyOblique")));
     758    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 500, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     759    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 500, 20, 100, CFSTR("Avenir-HeavyOblique")));
     760    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 600, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     761    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 600, 20, 100, CFSTR("Avenir-HeavyOblique")));
     762    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 700, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     763    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 700, 20, 100, CFSTR("Avenir-HeavyOblique")));
     764    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 800, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     765    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 800, 20, 100, CFSTR("Avenir-HeavyOblique")));
     766    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 900, 0 , 100, CFSTR("Avenir-HeavyOblique")));
     767    EXPECT_TRUE(compareFonts("Avenir-HeavyOblique", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     768    EXPECT_TRUE(compareFonts("Avenir-Light", 100, 0 , 100, CFSTR("Avenir-Light")));
     769    EXPECT_TRUE(compareFonts("Avenir-Light", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     770    EXPECT_TRUE(compareFonts("Avenir-Light", 200, 0 , 100, CFSTR("Avenir-Light")));
     771    EXPECT_TRUE(compareFonts("Avenir-Light", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     772    EXPECT_TRUE(compareFonts("Avenir-Light", 300, 0 , 100, CFSTR("Avenir-Light")));
     773    EXPECT_TRUE(compareFonts("Avenir-Light", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     774    EXPECT_TRUE(compareFonts("Avenir-Light", 400, 0 , 100, CFSTR("Avenir-Light")));
     775    EXPECT_TRUE(compareFonts("Avenir-Light", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     776    EXPECT_TRUE(compareFonts("Avenir-Light", 500, 0 , 100, CFSTR("Avenir-Light")));
     777    EXPECT_TRUE(compareFonts("Avenir-Light", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     778    EXPECT_TRUE(compareFonts("Avenir-Light", 600, 0 , 100, CFSTR("Avenir-Black")));
     779    EXPECT_TRUE(compareFonts("Avenir-Light", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     780    EXPECT_TRUE(compareFonts("Avenir-Light", 700, 0 , 100, CFSTR("Avenir-Black")));
     781    EXPECT_TRUE(compareFonts("Avenir-Light", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     782    EXPECT_TRUE(compareFonts("Avenir-Light", 800, 0 , 100, CFSTR("Avenir-Black")));
     783    EXPECT_TRUE(compareFonts("Avenir-Light", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     784    EXPECT_TRUE(compareFonts("Avenir-Light", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     785    EXPECT_TRUE(compareFonts("Avenir-Light", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     786    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 100, 0 , 100, CFSTR("Avenir-LightOblique")));
     787    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     788    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 200, 0 , 100, CFSTR("Avenir-LightOblique")));
     789    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     790    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 300, 0 , 100, CFSTR("Avenir-LightOblique")));
     791    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     792    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 400, 0 , 100, CFSTR("Avenir-LightOblique")));
     793    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 400, 20, 100, CFSTR("Avenir-LightOblique")));
     794    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 500, 0 , 100, CFSTR("Avenir-LightOblique")));
     795    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 500, 20, 100, CFSTR("Avenir-LightOblique")));
     796    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 600, 0 , 100, CFSTR("Avenir-Black")));
     797    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     798    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 700, 0 , 100, CFSTR("Avenir-Black")));
     799    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     800    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 800, 0 , 100, CFSTR("Avenir-Black")));
     801    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     802    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     803    EXPECT_TRUE(compareFonts("Avenir-LightOblique", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     804    EXPECT_TRUE(compareFonts("Avenir-Medium", 100, 0 , 100, CFSTR("Avenir-Medium")));
     805    EXPECT_TRUE(compareFonts("Avenir-Medium", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     806    EXPECT_TRUE(compareFonts("Avenir-Medium", 200, 0 , 100, CFSTR("Avenir-Medium")));
     807    EXPECT_TRUE(compareFonts("Avenir-Medium", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     808    EXPECT_TRUE(compareFonts("Avenir-Medium", 300, 0 , 100, CFSTR("Avenir-Medium")));
     809    EXPECT_TRUE(compareFonts("Avenir-Medium", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     810    EXPECT_TRUE(compareFonts("Avenir-Medium", 400, 0 , 100, CFSTR("Avenir-Medium")));
     811    EXPECT_TRUE(compareFonts("Avenir-Medium", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     812    EXPECT_TRUE(compareFonts("Avenir-Medium", 500, 0 , 100, CFSTR("Avenir-Medium")));
     813    EXPECT_TRUE(compareFonts("Avenir-Medium", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     814    EXPECT_TRUE(compareFonts("Avenir-Medium", 600, 0 , 100, CFSTR("Avenir-Black")));
     815    EXPECT_TRUE(compareFonts("Avenir-Medium", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     816    EXPECT_TRUE(compareFonts("Avenir-Medium", 700, 0 , 100, CFSTR("Avenir-Black")));
     817    EXPECT_TRUE(compareFonts("Avenir-Medium", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     818    EXPECT_TRUE(compareFonts("Avenir-Medium", 800, 0 , 100, CFSTR("Avenir-Black")));
     819    EXPECT_TRUE(compareFonts("Avenir-Medium", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     820    EXPECT_TRUE(compareFonts("Avenir-Medium", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     821    EXPECT_TRUE(compareFonts("Avenir-Medium", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     822    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 100, 0 , 100, CFSTR("Avenir-MediumOblique")));
     823    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 100, 20, 100, CFSTR("Avenir-MediumOblique")));
     824    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 200, 0 , 100, CFSTR("Avenir-MediumOblique")));
     825    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 200, 20, 100, CFSTR("Avenir-MediumOblique")));
     826    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 300, 0 , 100, CFSTR("Avenir-MediumOblique")));
     827    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 300, 20, 100, CFSTR("Avenir-MediumOblique")));
     828    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 400, 0 , 100, CFSTR("Avenir-MediumOblique")));
     829    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 400, 20, 100, CFSTR("Avenir-MediumOblique")));
     830    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 500, 0 , 100, CFSTR("Avenir-MediumOblique")));
     831    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     832    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 600, 0 , 100, CFSTR("Avenir-Black")));
     833    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     834    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 700, 0 , 100, CFSTR("Avenir-Black")));
     835    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     836    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 800, 0 , 100, CFSTR("Avenir-Black")));
     837    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     838    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     839    EXPECT_TRUE(compareFonts("Avenir-MediumOblique", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     840    EXPECT_TRUE(compareFonts("Avenir-Oblique", 100, 0 , 100, CFSTR("Avenir-Oblique")));
     841    EXPECT_TRUE(compareFonts("Avenir-Oblique", 100, 20, 100, CFSTR("Avenir-Oblique")));
     842    EXPECT_TRUE(compareFonts("Avenir-Oblique", 200, 0 , 100, CFSTR("Avenir-Oblique")));
     843    EXPECT_TRUE(compareFonts("Avenir-Oblique", 200, 20, 100, CFSTR("Avenir-Oblique")));
     844    EXPECT_TRUE(compareFonts("Avenir-Oblique", 300, 0 , 100, CFSTR("Avenir-Oblique")));
     845    EXPECT_TRUE(compareFonts("Avenir-Oblique", 300, 20, 100, CFSTR("Avenir-Oblique")));
     846    EXPECT_TRUE(compareFonts("Avenir-Oblique", 400, 0 , 100, CFSTR("Avenir-Oblique")));
     847    EXPECT_TRUE(compareFonts("Avenir-Oblique", 400, 20, 100, CFSTR("Avenir-Oblique")));
     848    EXPECT_TRUE(compareFonts("Avenir-Oblique", 500, 0 , 100, CFSTR("Avenir-Oblique")));
     849    EXPECT_TRUE(compareFonts("Avenir-Oblique", 500, 20, 100, CFSTR("Avenir-Oblique")));
     850    EXPECT_TRUE(compareFonts("Avenir-Oblique", 600, 0 , 100, CFSTR("Avenir-Black")));
     851    EXPECT_TRUE(compareFonts("Avenir-Oblique", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     852    EXPECT_TRUE(compareFonts("Avenir-Oblique", 700, 0 , 100, CFSTR("Avenir-Black")));
     853    EXPECT_TRUE(compareFonts("Avenir-Oblique", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     854    EXPECT_TRUE(compareFonts("Avenir-Oblique", 800, 0 , 100, CFSTR("Avenir-Black")));
     855    EXPECT_TRUE(compareFonts("Avenir-Oblique", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     856    EXPECT_TRUE(compareFonts("Avenir-Oblique", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     857    EXPECT_TRUE(compareFonts("Avenir-Oblique", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     858    EXPECT_TRUE(compareFonts("Avenir-Roman", 100, 0 , 100, CFSTR("Avenir-Roman")));
     859    EXPECT_TRUE(compareFonts("Avenir-Roman", 100, 20, 100, CFSTR("Avenir-LightOblique")));
     860    EXPECT_TRUE(compareFonts("Avenir-Roman", 200, 0 , 100, CFSTR("Avenir-Roman")));
     861    EXPECT_TRUE(compareFonts("Avenir-Roman", 200, 20, 100, CFSTR("Avenir-LightOblique")));
     862    EXPECT_TRUE(compareFonts("Avenir-Roman", 300, 0 , 100, CFSTR("Avenir-Roman")));
     863    EXPECT_TRUE(compareFonts("Avenir-Roman", 300, 20, 100, CFSTR("Avenir-LightOblique")));
     864    EXPECT_TRUE(compareFonts("Avenir-Roman", 400, 0 , 100, CFSTR("Avenir-Roman")));
     865    EXPECT_TRUE(compareFonts("Avenir-Roman", 400, 20, 100, CFSTR("Avenir-BookOblique")));
     866    EXPECT_TRUE(compareFonts("Avenir-Roman", 500, 0 , 100, CFSTR("Avenir-Roman")));
     867    EXPECT_TRUE(compareFonts("Avenir-Roman", 500, 20, 100, CFSTR("Avenir-MediumOblique")));
     868    EXPECT_TRUE(compareFonts("Avenir-Roman", 600, 0 , 100, CFSTR("Avenir-Black")));
     869    EXPECT_TRUE(compareFonts("Avenir-Roman", 600, 20, 100, CFSTR("Avenir-BlackOblique")));
     870    EXPECT_TRUE(compareFonts("Avenir-Roman", 700, 0 , 100, CFSTR("Avenir-Black")));
     871    EXPECT_TRUE(compareFonts("Avenir-Roman", 700, 20, 100, CFSTR("Avenir-BlackOblique")));
     872    EXPECT_TRUE(compareFonts("Avenir-Roman", 800, 0 , 100, CFSTR("Avenir-Black")));
     873    EXPECT_TRUE(compareFonts("Avenir-Roman", 800, 20, 100, CFSTR("Avenir-BlackOblique")));
     874    EXPECT_TRUE(compareFonts("Avenir-Roman", 900, 0 , 100, CFSTR("Avenir-Heavy")));
     875    EXPECT_TRUE(compareFonts("Avenir-Roman", 900, 20, 100, CFSTR("Avenir-HeavyOblique")));
     876    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 100, 0 , 100, CFSTR("AvenirNext-Bold")));
     877    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     878    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 200, 0 , 100, CFSTR("AvenirNext-Bold")));
     879    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     880    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 300, 0 , 100, CFSTR("AvenirNext-Bold")));
     881    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     882    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 400, 0 , 100, CFSTR("AvenirNext-Bold")));
     883    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     884    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 500, 0 , 100, CFSTR("AvenirNext-Bold")));
     885    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     886    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 600, 0 , 100, CFSTR("AvenirNext-Bold")));
     887    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     888    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     889    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     890    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 800, 0 , 100, CFSTR("AvenirNext-Bold")));
     891    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     892    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 900, 0 , 100, CFSTR("AvenirNext-Bold")));
     893    EXPECT_TRUE(compareFonts("AvenirNext-Bold", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     894    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 100, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     895    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 100, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     896    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 200, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     897    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 200, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     898    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 300, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     899    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 300, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     900    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 400, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     901    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 400, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     902    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 500, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     903    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 500, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     904    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 600, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     905    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 600, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     906    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 700, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     907    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     908    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 800, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     909    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 800, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     910    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 900, 0 , 100, CFSTR("AvenirNext-BoldItalic")));
     911    EXPECT_TRUE(compareFonts("AvenirNext-BoldItalic", 900, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     912    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 100, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     913    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     914    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 200, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     915    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     916    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 300, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     917    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     918    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 400, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     919    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     920    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 500, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     921    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     922    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     923    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     924    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 700, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     925    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     926    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 800, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     927    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     928    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 900, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     929    EXPECT_TRUE(compareFonts("AvenirNext-DemiBold", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     930    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 100, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     931    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 100, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     932    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 200, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     933    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 200, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     934    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 300, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     935    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 300, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     936    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 400, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     937    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 400, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     938    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 500, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     939    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 500, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     940    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 600, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     941    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     942    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 700, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     943    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 700, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     944    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 800, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     945    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 800, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     946    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 900, 0 , 100, CFSTR("AvenirNext-DemiBoldItalic")));
     947    EXPECT_TRUE(compareFonts("AvenirNext-DemiBoldItalic", 900, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     948    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 100, 0 , 100, CFSTR("AvenirNext-Heavy")));
     949    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     950    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 200, 0 , 100, CFSTR("AvenirNext-Heavy")));
     951    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     952    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 300, 0 , 100, CFSTR("AvenirNext-Heavy")));
     953    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     954    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 400, 0 , 100, CFSTR("AvenirNext-Heavy")));
     955    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     956    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 500, 0 , 100, CFSTR("AvenirNext-Heavy")));
     957    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     958    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 600, 0 , 100, CFSTR("AvenirNext-Heavy")));
     959    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     960    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 700, 0 , 100, CFSTR("AvenirNext-Heavy")));
     961    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     962    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     963    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     964    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     965    EXPECT_TRUE(compareFonts("AvenirNext-Heavy", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     966    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 100, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     967    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 100, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     968    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 200, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     969    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 200, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     970    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 300, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     971    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 300, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     972    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 400, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     973    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 400, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     974    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 500, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     975    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 500, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     976    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 600, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     977    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 600, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     978    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 700, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     979    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 700, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     980    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 800, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     981    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     982    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 900, 0 , 100, CFSTR("AvenirNext-HeavyItalic")));
     983    EXPECT_TRUE(compareFonts("AvenirNext-HeavyItalic", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     984    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 100, 0 , 100, CFSTR("AvenirNext-Italic")));
     985    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 100, 20, 100, CFSTR("AvenirNext-Italic")));
     986    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 200, 0 , 100, CFSTR("AvenirNext-Italic")));
     987    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 200, 20, 100, CFSTR("AvenirNext-Italic")));
     988    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 300, 0 , 100, CFSTR("AvenirNext-Italic")));
     989    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 300, 20, 100, CFSTR("AvenirNext-Italic")));
     990    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 400, 0 , 100, CFSTR("AvenirNext-Italic")));
     991    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     992    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 500, 0 , 100, CFSTR("AvenirNext-Italic")));
     993    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 500, 20, 100, CFSTR("AvenirNext-Italic")));
     994    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     995    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     996    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     997    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     998    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     999    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1000    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1001    EXPECT_TRUE(compareFonts("AvenirNext-Italic", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1002    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 100, 0 , 100, CFSTR("AvenirNext-Medium")));
     1003    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1004    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 200, 0 , 100, CFSTR("AvenirNext-Medium")));
     1005    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1006    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 300, 0 , 100, CFSTR("AvenirNext-Medium")));
     1007    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1008    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 400, 0 , 100, CFSTR("AvenirNext-Medium")));
     1009    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     1010    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 500, 0 , 100, CFSTR("AvenirNext-Medium")));
     1011    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1012    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     1013    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     1014    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     1015    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     1016    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1017    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1018    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1019    EXPECT_TRUE(compareFonts("AvenirNext-Medium", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1020    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 100, 0 , 100, CFSTR("AvenirNext-MediumItalic")));
     1021    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 100, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1022    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 200, 0 , 100, CFSTR("AvenirNext-MediumItalic")));
     1023    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 200, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1024    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 300, 0 , 100, CFSTR("AvenirNext-MediumItalic")));
     1025    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 300, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1026    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 400, 0 , 100, CFSTR("AvenirNext-MediumItalic")));
     1027    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 400, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1028    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 500, 0 , 100, CFSTR("AvenirNext-MediumItalic")));
     1029    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1030    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     1031    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     1032    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     1033    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     1034    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1035    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1036    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1037    EXPECT_TRUE(compareFonts("AvenirNext-MediumItalic", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1038    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 100, 0 , 100, CFSTR("AvenirNext-Regular")));
     1039    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1040    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 200, 0 , 100, CFSTR("AvenirNext-Regular")));
     1041    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1042    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 300, 0 , 100, CFSTR("AvenirNext-Regular")));
     1043    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1044    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 400, 0 , 100, CFSTR("AvenirNext-Regular")));
     1045    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     1046    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 500, 0 , 100, CFSTR("AvenirNext-Regular")));
     1047    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1048    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     1049    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     1050    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     1051    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     1052    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1053    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1054    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1055    EXPECT_TRUE(compareFonts("AvenirNext-Regular", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1056    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 100, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     1057    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1058    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 200, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     1059    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1060    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 300, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     1061    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1062    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 400, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     1063    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 400, 20, 100, CFSTR("AvenirNext-Italic")));
     1064    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 500, 0 , 100, CFSTR("AvenirNext-UltraLight")));
     1065    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 500, 20, 100, CFSTR("AvenirNext-MediumItalic")));
     1066    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     1067    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     1068    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     1069    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     1070    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1071    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1072    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1073    EXPECT_TRUE(compareFonts("AvenirNext-UltraLight", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1074    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 100, 0 , 100, CFSTR("AvenirNext-UltraLightItalic")));
     1075    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 100, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1076    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 200, 0 , 100, CFSTR("AvenirNext-UltraLightItalic")));
     1077    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 200, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1078    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 300, 0 , 100, CFSTR("AvenirNext-UltraLightItalic")));
     1079    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 300, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1080    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 400, 0 , 100, CFSTR("AvenirNext-UltraLightItalic")));
     1081    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 400, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1082    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 500, 0 , 100, CFSTR("AvenirNext-UltraLightItalic")));
     1083    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 500, 20, 100, CFSTR("AvenirNext-UltraLightItalic")));
     1084    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 600, 0 , 100, CFSTR("AvenirNext-DemiBold")));
     1085    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 600, 20, 100, CFSTR("AvenirNext-DemiBoldItalic")));
     1086    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 700, 0 , 100, CFSTR("AvenirNext-Bold")));
     1087    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 700, 20, 100, CFSTR("AvenirNext-BoldItalic")));
     1088    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 800, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1089    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 800, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1090    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 900, 0 , 100, CFSTR("AvenirNext-Heavy")));
     1091    EXPECT_TRUE(compareFonts("AvenirNext-UltraLightItalic", 900, 20, 100, CFSTR("AvenirNext-HeavyItalic")));
     1092    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 100, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1093    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 100, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1094    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 200, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1095    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 200, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1096    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 300, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1097    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 300, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1098    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 400, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1099    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 400, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1100    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 500, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1101    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 500, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1102    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 600, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1103    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1104    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 700, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1105    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1106    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 800, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1107    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1108    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 900, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1109    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Bold", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1110    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 100, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1111    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 100, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1112    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 200, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1113    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 200, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1114    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 300, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1115    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 300, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1116    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 400, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1117    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 400, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1118    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 500, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1119    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 500, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1120    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 600, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1121    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 600, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1122    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 700, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1123    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1124    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 800, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1125    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 800, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1126    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 900, 0 , 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1127    EXPECT_TRUE(compareFonts("AvenirNextCondensed-BoldItalic", 900, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1128    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 100, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1129    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 100, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1130    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 200, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1131    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 200, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1132    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 300, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1133    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 300, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1134    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 400, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1135    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 400, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1136    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 500, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1137    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 500, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1138    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1139    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1140    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 700, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1141    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1142    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 800, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1143    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1144    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 900, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1145    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBold", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1146    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 100, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1147    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 100, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1148    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 200, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1149    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 200, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1150    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 300, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1151    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 300, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1152    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 400, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1153    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 400, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1154    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 500, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1155    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 500, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1156    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1157    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1158    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 700, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1159    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 700, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1160    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 800, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1161    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 800, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1162    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 900, 0 , 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1163    EXPECT_TRUE(compareFonts("AvenirNextCondensed-DemiBoldItalic", 900, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1164    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 100, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1165    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 100, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1166    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 200, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1167    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 200, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1168    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 300, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1169    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 300, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1170    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 400, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1171    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 400, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1172    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 500, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1173    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 500, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1174    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 600, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1175    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1176    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 700, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1177    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1178    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 800, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1179    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1180    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 900, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1181    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Heavy", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1182    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 100, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1183    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 100, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1184    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 200, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1185    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 200, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1186    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 300, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1187    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 300, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1188    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 400, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1189    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 400, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1190    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 500, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1191    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 500, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1192    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 600, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1193    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 600, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1194    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 700, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1195    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 700, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1196    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 800, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1197    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1198    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 900, 0 , 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1199    EXPECT_TRUE(compareFonts("AvenirNextCondensed-HeavyItalic", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1200    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 100, 0 , 100, CFSTR("AvenirNextCondensed-Italic")));
     1201    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 100, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1202    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 200, 0 , 100, CFSTR("AvenirNextCondensed-Italic")));
     1203    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 200, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1204    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 300, 0 , 100, CFSTR("AvenirNextCondensed-Italic")));
     1205    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 300, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1206    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 400, 0 , 100, CFSTR("AvenirNextCondensed-Italic")));
     1207    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 400, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1208    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 500, 0 , 100, CFSTR("AvenirNextCondensed-Italic")));
     1209    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 500, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1210    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1211    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1212    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 700, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1213    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1214    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 800, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1215    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1216    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 900, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1217    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Italic", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1218    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 100, 0 , 100, CFSTR("AvenirNextCondensed-Medium")));
     1219    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 100, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1220    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 200, 0 , 100, CFSTR("AvenirNextCondensed-Medium")));
     1221    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 200, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1222    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 300, 0 , 100, CFSTR("AvenirNextCondensed-Medium")));
     1223    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 300, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1224    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 400, 0 , 100, CFSTR("AvenirNextCondensed-Medium")));
     1225    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 400, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1226    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 500, 0 , 100, CFSTR("AvenirNextCondensed-Medium")));
     1227    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 500, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1228    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1229    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1230    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 700, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1231    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1232    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 800, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1233    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1234    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 900, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1235    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Medium", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1236    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 100, 0 , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1237    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 100, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1238    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 200, 0 , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1239    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 200, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1240    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 300, 0 , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1241    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 300, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1242    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 400, 0 , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1243    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 400, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1244    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 500, 0 , 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1245    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 500, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1246    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1247    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1248    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 700, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1249    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1250    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 800, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1251    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1252    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 900, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1253    EXPECT_TRUE(compareFonts("AvenirNextCondensed-MediumItalic", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1254    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 100, 0 , 100, CFSTR("AvenirNextCondensed-Regular")));
     1255    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 100, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1256    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 200, 0 , 100, CFSTR("AvenirNextCondensed-Regular")));
     1257    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 200, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1258    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 300, 0 , 100, CFSTR("AvenirNextCondensed-Regular")));
     1259    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 300, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1260    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 400, 0 , 100, CFSTR("AvenirNextCondensed-Regular")));
     1261    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 400, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1262    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 500, 0 , 100, CFSTR("AvenirNextCondensed-Regular")));
     1263    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 500, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1264    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1265    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1266    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 700, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1267    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1268    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 800, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1269    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1270    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 900, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1271    EXPECT_TRUE(compareFonts("AvenirNextCondensed-Regular", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1272    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 100, 0 , 100, CFSTR("AvenirNextCondensed-UltraLight")));
     1273    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 100, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1274    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 200, 0 , 100, CFSTR("AvenirNextCondensed-UltraLight")));
     1275    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 200, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1276    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 300, 0 , 100, CFSTR("AvenirNextCondensed-UltraLight")));
     1277    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 300, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1278    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 400, 0 , 100, CFSTR("AvenirNextCondensed-UltraLight")));
     1279    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 400, 20, 100, CFSTR("AvenirNextCondensed-Italic")));
     1280    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 500, 0 , 100, CFSTR("AvenirNextCondensed-UltraLight")));
     1281    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 500, 20, 100, CFSTR("AvenirNextCondensed-MediumItalic")));
     1282    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1283    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1284    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 700, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1285    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1286    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 800, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1287    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1288    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 900, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1289    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLight", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1290    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 100, 0 , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1291    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 100, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1292    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 200, 0 , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1293    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 200, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1294    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 300, 0 , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1295    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 300, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1296    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 400, 0 , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1297    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 400, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1298    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 500, 0 , 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1299    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 500, 20, 100, CFSTR("AvenirNextCondensed-UltraLightItalic")));
     1300    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 600, 0 , 100, CFSTR("AvenirNextCondensed-DemiBold")));
     1301    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 600, 20, 100, CFSTR("AvenirNextCondensed-DemiBoldItalic")));
     1302    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 700, 0 , 100, CFSTR("AvenirNextCondensed-Bold")));
     1303    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 700, 20, 100, CFSTR("AvenirNextCondensed-BoldItalic")));
     1304    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 800, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1305    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 800, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1306    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 900, 0 , 100, CFSTR("AvenirNextCondensed-Heavy")));
     1307    EXPECT_TRUE(compareFonts("AvenirNextCondensed-UltraLightItalic", 900, 20, 100, CFSTR("AvenirNextCondensed-HeavyItalic")));
     1308    EXPECT_TRUE(compareFonts("Baskerville", 100, 0 , 100, CFSTR("Baskerville")));
     1309    EXPECT_TRUE(compareFonts("Baskerville", 100, 20, 100, CFSTR("Baskerville-Italic")));
     1310    EXPECT_TRUE(compareFonts("Baskerville", 200, 0 , 100, CFSTR("Baskerville")));
     1311    EXPECT_TRUE(compareFonts("Baskerville", 200, 20, 100, CFSTR("Baskerville-Italic")));
     1312    EXPECT_TRUE(compareFonts("Baskerville", 300, 0 , 100, CFSTR("Baskerville")));
     1313    EXPECT_TRUE(compareFonts("Baskerville", 300, 20, 100, CFSTR("Baskerville-Italic")));
     1314    EXPECT_TRUE(compareFonts("Baskerville", 400, 0 , 100, CFSTR("Baskerville")));
     1315    EXPECT_TRUE(compareFonts("Baskerville", 400, 20, 100, CFSTR("Baskerville-Italic")));
     1316    EXPECT_TRUE(compareFonts("Baskerville", 500, 0 , 100, CFSTR("Baskerville")));
     1317    EXPECT_TRUE(compareFonts("Baskerville", 500, 20, 100, CFSTR("Baskerville-Italic")));
     1318    EXPECT_TRUE(compareFonts("Baskerville", 600, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1319    EXPECT_TRUE(compareFonts("Baskerville", 600, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1320    EXPECT_TRUE(compareFonts("Baskerville", 700, 0 , 100, CFSTR("Baskerville-Bold")));
     1321    EXPECT_TRUE(compareFonts("Baskerville", 700, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1322    EXPECT_TRUE(compareFonts("Baskerville", 800, 0 , 100, CFSTR("Baskerville-Bold")));
     1323    EXPECT_TRUE(compareFonts("Baskerville", 800, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1324    EXPECT_TRUE(compareFonts("Baskerville", 900, 0 , 100, CFSTR("Baskerville-Bold")));
     1325    EXPECT_TRUE(compareFonts("Baskerville", 900, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1326    EXPECT_TRUE(compareFonts("Baskerville-Bold", 100, 0 , 100, CFSTR("Baskerville-Bold")));
     1327    EXPECT_TRUE(compareFonts("Baskerville-Bold", 100, 20, 100, CFSTR("Baskerville-Italic")));
     1328    EXPECT_TRUE(compareFonts("Baskerville-Bold", 200, 0 , 100, CFSTR("Baskerville-Bold")));
     1329    EXPECT_TRUE(compareFonts("Baskerville-Bold", 200, 20, 100, CFSTR("Baskerville-Italic")));
     1330    EXPECT_TRUE(compareFonts("Baskerville-Bold", 300, 0 , 100, CFSTR("Baskerville-Bold")));
     1331    EXPECT_TRUE(compareFonts("Baskerville-Bold", 300, 20, 100, CFSTR("Baskerville-Italic")));
     1332    EXPECT_TRUE(compareFonts("Baskerville-Bold", 400, 0 , 100, CFSTR("Baskerville-Bold")));
     1333    EXPECT_TRUE(compareFonts("Baskerville-Bold", 400, 20, 100, CFSTR("Baskerville-Italic")));
     1334    EXPECT_TRUE(compareFonts("Baskerville-Bold", 500, 0 , 100, CFSTR("Baskerville-Bold")));
     1335    EXPECT_TRUE(compareFonts("Baskerville-Bold", 500, 20, 100, CFSTR("Baskerville-Italic")));
     1336    EXPECT_TRUE(compareFonts("Baskerville-Bold", 600, 0 , 100, CFSTR("Baskerville-Bold")));
     1337    EXPECT_TRUE(compareFonts("Baskerville-Bold", 600, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1338    EXPECT_TRUE(compareFonts("Baskerville-Bold", 700, 0 , 100, CFSTR("Baskerville-Bold")));
     1339    EXPECT_TRUE(compareFonts("Baskerville-Bold", 700, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1340    EXPECT_TRUE(compareFonts("Baskerville-Bold", 800, 0 , 100, CFSTR("Baskerville-Bold")));
     1341    EXPECT_TRUE(compareFonts("Baskerville-Bold", 800, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1342    EXPECT_TRUE(compareFonts("Baskerville-Bold", 900, 0 , 100, CFSTR("Baskerville-Bold")));
     1343    EXPECT_TRUE(compareFonts("Baskerville-Bold", 900, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1344    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 100, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1345    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 100, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1346    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 200, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1347    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 200, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1348    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 300, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1349    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 300, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1350    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 400, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1351    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 400, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1352    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 500, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1353    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 500, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1354    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 600, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1355    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 600, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1356    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 700, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1357    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 700, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1358    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 800, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1359    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 800, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1360    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 900, 0 , 100, CFSTR("Baskerville-BoldItalic")));
     1361    EXPECT_TRUE(compareFonts("Baskerville-BoldItalic", 900, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1362    EXPECT_TRUE(compareFonts("Baskerville-Italic", 100, 0 , 100, CFSTR("Baskerville-Italic")));
     1363    EXPECT_TRUE(compareFonts("Baskerville-Italic", 100, 20, 100, CFSTR("Baskerville-Italic")));
     1364    EXPECT_TRUE(compareFonts("Baskerville-Italic", 200, 0 , 100, CFSTR("Baskerville-Italic")));
     1365    EXPECT_TRUE(compareFonts("Baskerville-Italic", 200, 20, 100, CFSTR("Baskerville-Italic")));
     1366    EXPECT_TRUE(compareFonts("Baskerville-Italic", 300, 0 , 100, CFSTR("Baskerville-Italic")));
     1367    EXPECT_TRUE(compareFonts("Baskerville-Italic", 300, 20, 100, CFSTR("Baskerville-Italic")));
     1368    EXPECT_TRUE(compareFonts("Baskerville-Italic", 400, 0 , 100, CFSTR("Baskerville-Italic")));
     1369    EXPECT_TRUE(compareFonts("Baskerville-Italic", 400, 20, 100, CFSTR("Baskerville-Italic")));
     1370    EXPECT_TRUE(compareFonts("Baskerville-Italic", 500, 0 , 100, CFSTR("Baskerville-Italic")));
     1371    EXPECT_TRUE(compareFonts("Baskerville-Italic", 500, 20, 100, CFSTR("Baskerville-Italic")));
     1372    EXPECT_TRUE(compareFonts("Baskerville-Italic", 600, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1373    EXPECT_TRUE(compareFonts("Baskerville-Italic", 600, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1374    EXPECT_TRUE(compareFonts("Baskerville-Italic", 700, 0 , 100, CFSTR("Baskerville-Bold")));
     1375    EXPECT_TRUE(compareFonts("Baskerville-Italic", 700, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1376    EXPECT_TRUE(compareFonts("Baskerville-Italic", 800, 0 , 100, CFSTR("Baskerville-Bold")));
     1377    EXPECT_TRUE(compareFonts("Baskerville-Italic", 800, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1378    EXPECT_TRUE(compareFonts("Baskerville-Italic", 900, 0 , 100, CFSTR("Baskerville-Bold")));
     1379    EXPECT_TRUE(compareFonts("Baskerville-Italic", 900, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1380    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 100, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1381    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 100, 20, 100, CFSTR("Baskerville-Italic")));
     1382    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 200, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1383    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 200, 20, 100, CFSTR("Baskerville-Italic")));
     1384    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 300, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1385    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 300, 20, 100, CFSTR("Baskerville-Italic")));
     1386    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 400, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1387    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 400, 20, 100, CFSTR("Baskerville-Italic")));
     1388    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 500, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1389    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 500, 20, 100, CFSTR("Baskerville-Italic")));
     1390    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 600, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1391    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 600, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1392    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 700, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1393    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 700, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1394    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 800, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1395    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 800, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1396    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 900, 0 , 100, CFSTR("Baskerville-SemiBold")));
     1397    EXPECT_TRUE(compareFonts("Baskerville-SemiBold", 900, 20, 100, CFSTR("Baskerville-BoldItalic")));
     1398    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 100, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1399    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 100, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1400    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 200, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1401    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 200, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1402    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 300, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1403    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 300, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1404    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 400, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1405    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 400, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1406    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 500, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1407    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 500, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1408    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 600, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1409    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 600, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1410    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 700, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1411    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 700, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1412    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 800, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1413    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 800, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
     1414    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 900, 0 , 100, CFSTR("Baskerville-SemiBoldItalic")));
     1415    EXPECT_TRUE(compareFonts("Baskerville-SemiBoldItalic", 900, 20, 100, CFSTR("Baskerville-SemiBoldItalic")));
    14161416}
    14171417
Note: See TracChangeset for help on using the changeset viewer.