From f5879b3425f39d6d6a442642bcd66986b6554487 Mon Sep 17 00:00:00 2001 From: Stewart Connor Date: Fri, 21 Mar 2025 18:24:32 +1100 Subject: [PATCH] add contextual alternatives --- src/attrs.rs | 3 +++ src/shape.rs | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/attrs.rs b/src/attrs.rs index c9ca70e..c13642e 100644 --- a/src/attrs.rs +++ b/src/attrs.rs @@ -134,6 +134,8 @@ pub struct FontFeatures { pub standard_ligatures: bool, /// Contextual ligatures (context-dependent ligatures) pub contextual_ligatures: bool, + /// Contextual alternates (glyph substitutions based on context) + pub contextual_alternates: bool, /// Discretionary ligatures (optional stylistic ligatures) pub discretionary_ligatures: bool, } @@ -145,6 +147,7 @@ impl FontFeatures { kerning: true, standard_ligatures: true, contextual_ligatures: true, + contextual_alternates: true, discretionary_ligatures: true, } } diff --git a/src/shape.rs b/src/shape.rs index 21752cb..a6c400d 100644 --- a/src/shape.rs +++ b/src/shape.rs @@ -158,6 +158,11 @@ fn shape_fallback( attrs.font_features.contextual_ligatures as u32, 0..usize::MAX, )); + features.push(rustybuzz::Feature::new( + rustybuzz::ttf_parser::Tag::from_bytes(b"calt"), + attrs.font_features.contextual_alternates as u32, + 0..usize::MAX, + )); features.push(rustybuzz::Feature::new( rustybuzz::ttf_parser::Tag::from_bytes(b"dlig"), attrs.font_features.discretionary_ligatures as u32,