iOS : Opentype Font Features in Swift

Viewed 1104

I got the following snippet to test font features:

let font = UIFont(name: "MyFont", size: 18)
let features: NSArray = CTFontCopyFeatures(font!)!
print("properties = \(features)")

Use the features using an extension:

    extension UIFont {

        func propotionalNumbers() -> UIFont {

            let originalFontDescriptor = self.fontDescriptor

            let fontDescriptorFeatureSettings = [
                [ UIFontFeatureTypeIdentifierKey: 1,
                  UIFontFeatureSelectorIdentifierKey: 0],
                [ UIFontFeatureTypeIdentifierKey: 16,
                  UIFontFeatureSelectorIdentifierKey: 4]
            ]

            let fontDescriptorAttributes = [UIFontDescriptorFeatureSettingsAttribute: fontDescriptorFeatureSettings]
            let fontDescriptor = originalFontDescriptor.addingAttributes(fontDescriptorAttributes)
            let font = UIFont(descriptor: fontDescriptor, size: 0)

            return font
        }
}

Issue

Above has worked well with every font except this one particular font that list following:

OpenType TrueType

Opentype Features:

  • StyleSets
  • Fractions
  • Zero
  • Tabular
  • Sup/sub
  • Disc. ligatures

However this is what I get when above snippet is run:

properties = (
        {
        CTFeatureTypeIdentifier = 0;
        CTFeatureTypeName = "All Typographic Features";
        CTFeatureTypeNameID = 256;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorDefault = 1;
                CTFeatureSelectorIdentifier = 0;
                CTFeatureSelectorName = "All Type Features";
                CTFeatureSelectorNameID = 260;
            }
        );
    },
        {
        CTFeatureTypeIdentifier = 1;
        CTFeatureTypeName = Ligatures;
        CTFeatureTypeNameID = 257;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorIdentifier = 4;
                CTFeatureSelectorName = "Rare Ligatures";
                CTFeatureSelectorNameID = 261;
            }
        );
    },
        {
        CTFeatureTypeExclusive = 1;
        CTFeatureTypeIdentifier = 6;
        CTFeatureTypeName = "Number Spacing";
        CTFeatureTypeNameID = 258;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorDefault = 1;
                CTFeatureSelectorIdentifier = 0;
                CTFeatureSelectorName = "Monospaced Numbers";
                CTFeatureSelectorNameID = 262;
            }
        );
    },
        {
        CTFeatureTypeExclusive = 1;
        CTFeatureTypeIdentifier = 10;
        CTFeatureTypeName = "Vertical Position";
        CTFeatureTypeNameID = 259;
        CTFeatureTypeSelectors =         (
                        {
                CTFeatureSelectorDefault = 1;
                CTFeatureSelectorIdentifier = 0;
                CTFeatureSelectorName = "Normal Vertical Position";
                CTFeatureSelectorNameID = 263;
            },
                        {
                CTFeatureSelectorIdentifier = 1;
                CTFeatureSelectorName = Superiors;
                CTFeatureSelectorNameID = 264;
            },
                        {
                CTFeatureSelectorIdentifier = 2;
                CTFeatureSelectorName = Inferiors;
                CTFeatureSelectorNameID = 265;
            }
        );
    }
)

As you can see, most above listed features are missing.

How would check/use for above listed Opentype features?

0 Answers
Related