diff --git a/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm b/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm index 4f8d5aa0703..1ff8c1f231a 100644 --- a/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm +++ b/packages/react-native/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTFontUtils.mm @@ -6,10 +6,12 @@ */ #import "RCTFontUtils.h" +#import #import #import #import +#import #import static RCTFontProperties RCTDefaultFontProperties() @@ -62,8 +64,51 @@ static RCTFontStyle RCTGetFontStyle(UIFont *font) static NSArray *RCTFontFeatures(RCTFontVariant fontVariant) { - // FIXME: - return @[]; + NSMutableArray *fontFeatures = [NSMutableArray array]; + static std::map mapping; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mapping = { + {RCTFontVariantSmallCaps, @{ + UIFontFeatureTypeIdentifierKey : @(kLowerCaseType), + UIFontFeatureSelectorIdentifierKey : @(kLowerCaseSmallCapsSelector), + }}, + {RCTFontVariantOldstyleNums, @{ + UIFontFeatureTypeIdentifierKey : @(kNumberCaseType), + UIFontFeatureSelectorIdentifierKey : @(kLowerCaseNumbersSelector), + }}, + {RCTFontVariantLiningNums, @{ + UIFontFeatureTypeIdentifierKey : @(kNumberCaseType), + UIFontFeatureSelectorIdentifierKey : @(kUpperCaseNumbersSelector), + }}, + {RCTFontVariantTabularNums, @{ + UIFontFeatureTypeIdentifierKey : @(kNumberSpacingType), + UIFontFeatureSelectorIdentifierKey : @(kMonospacedNumbersSelector), + }}, + {RCTFontVariantProportionalNums, @{ + UIFontFeatureTypeIdentifierKey : @(kNumberSpacingType), + UIFontFeatureSelectorIdentifierKey : @(kProportionalNumbersSelector), + }}, + }; + }); + + if (fontVariant & RCTFontVariantSmallCaps) { + [fontFeatures addObject:mapping[RCTFontVariantSmallCaps]]; + } + if (fontVariant & RCTFontVariantOldstyleNums) { + [fontFeatures addObject:mapping[RCTFontVariantOldstyleNums]]; + } + if (fontVariant & RCTFontVariantLiningNums) { + [fontFeatures addObject:mapping[RCTFontVariantLiningNums]]; + } + if (fontVariant & RCTFontVariantTabularNums) { + [fontFeatures addObject:mapping[RCTFontVariantTabularNums]]; + } + if (fontVariant & RCTFontVariantProportionalNums) { + [fontFeatures addObject:mapping[RCTFontVariantProportionalNums]]; + } + + return fontFeatures; } static UIFont *RCTDefaultFontWithFontProperties(RCTFontProperties fontProperties)