diff --git a/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.d.ts b/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.d.ts index 300877f65e8271..df6b5c4afdaf86 100644 --- a/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.d.ts +++ b/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.d.ts @@ -292,7 +292,15 @@ export type FontVariant = | 'oldstyle-nums' | 'lining-nums' | 'tabular-nums' - | 'proportional-nums'; + | 'proportional-nums' + | 'common-ligatures' + | 'no-common-ligatures' + | 'discretionary-ligatures' + | 'no-discretionary-ligatures' + | 'historical-ligatures' + | 'no-historical-ligatures' + | 'contextual' + | 'no-contextual'; export interface TextStyleIOS extends ViewStyle { fontVariant?: FontVariant[] | undefined; textDecorationColor?: ColorValue | undefined; diff --git a/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.js b/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.js index 5d9b56c3f4ea6c..405f9e101659d2 100644 --- a/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.js +++ b/packages/react-native/Libraries/StyleSheet/StyleSheetTypes.js @@ -788,6 +788,14 @@ export type ____FontVariantArray_Internal = $ReadOnlyArray< | 'oldstyle-nums' | 'lining-nums' | 'tabular-nums' + | 'common-ligatures' + | 'no-common-ligatures' + | 'discretionary-ligatures' + | 'no-discretionary-ligatures' + | 'historical-ligatures' + | 'no-historical-ligatures' + | 'contextual' + | 'no-contextual' | 'proportional-nums' | 'stylistic-one' | 'stylistic-two' diff --git a/packages/react-native/React/Views/RCTFont.mm b/packages/react-native/React/Views/RCTFont.mm index 9cbb2013ea474a..bfc273bdf43d79 100644 --- a/packages/react-native/React/Views/RCTFont.mm +++ b/packages/react-native/React/Views/RCTFont.mm @@ -248,6 +248,38 @@ + (RCTFontVariantDescriptor *)RCTFontVariantDescriptor:(id)json UIFontFeatureTypeIdentifierKey : @(kNumberSpacingType), UIFontFeatureSelectorIdentifierKey : @(kProportionalNumbersSelector), }, + @"common-ligatures" : @{ + UIFontFeatureTypeIdentifierKey : @(kLigaturesType), + UIFontFeatureSelectorIdentifierKey : @(kCommonLigaturesOnSelector), + }, + @"no-common-ligatures" : @{ + UIFontFeatureTypeIdentifierKey : @(kLigaturesType), + UIFontFeatureSelectorIdentifierKey : @(kCommonLigaturesOffSelector), + }, + @"discretionary-ligatures" : @{ + UIFontFeatureTypeIdentifierKey : @(kLigaturesType), + UIFontFeatureSelectorIdentifierKey : @(kRareLigaturesOnSelector), + }, + @"no-discretionary-ligatures" : @{ + UIFontFeatureTypeIdentifierKey : @(kLigaturesType), + UIFontFeatureSelectorIdentifierKey : @(kRareLigaturesOffSelector), + }, + @"historical-ligatures" : @{ + UIFontFeatureTypeIdentifierKey : @(kLigaturesType), + UIFontFeatureSelectorIdentifierKey : @(kHistoricalLigaturesOnSelector), + }, + @"no-historical-ligatures" : @{ + UIFontFeatureTypeIdentifierKey : @(kLigaturesType), + UIFontFeatureSelectorIdentifierKey : @(kHistoricalLigaturesOffSelector), + }, + @"contextual" : @{ + UIFontFeatureTypeIdentifierKey : @(kContextualAlternatesType), + UIFontFeatureSelectorIdentifierKey : @(kContextualAlternatesOnSelector), + }, + @"no-contextual" : @{ + UIFontFeatureTypeIdentifierKey : @(kContextualAlternatesType), + UIFontFeatureSelectorIdentifierKey : @(kContextualAlternatesOffSelector), + }, @"stylistic-one" : @{ UIFontFeatureTypeIdentifierKey : @(kStylisticAlternativesType), UIFontFeatureSelectorIdentifierKey : @(kStylisticAltOneOnSelector), diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.java index 6ca731ef4ff1aa..d71cbdea942626 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.java @@ -85,6 +85,32 @@ public static int parseFontStyle(@Nullable String fontStyleString) { case "proportional-nums": features.add("'pnum'"); break; + case "common-ligatures": + features.add("'liga'"); + features.add("'clig'"); + break; + case "no-common-ligatures": + features.add("'liga' off"); + features.add("'clig' off"); + break; + case "discretionary-ligatures": + features.add("'dlig'"); + break; + case "no-discretionary-ligatures": + features.add("'dlig' off"); + break; + case "historical-ligatures": + features.add("'hlig'"); + break; + case "no-historical-ligatures": + features.add("'hlig' off"); + break; + case "contextual": + features.add("'calt'"); + break; + case "no-contextual": + features.add("'calt' off"); + break; case "stylistic-one": features.add("'ss01'"); break;