Contextual substitution (calt) fails in Chrome when combined with Stylistic Sets (ssXX)

Hello,

I’m experiencing an issue in Chrome when applying a stylistic set (ss17/ss18) together with calt.

I have the following contextual substitution in calt:

“sub @Uppercase @Symbol@Lowercase by @CaseForSymbol;”

And the following substitutions in ss18:

“sub hyphen.case by hyphen.pc01.case;”

“sub hyphen by hyphen.pc01;”

The intended behavior is:

punctuation/symbols are normally aligned to uppercase height by default

when a symbol appears between an uppercase and lowercase letter, calt substitutes it with a lowercase-aligned version

This works correctly in:

Safari

Figma

However, in Chrome, once ss17/ss18 is applied, the contextual behavior appears to be lost and the symbol returns to the default uppercase alignment.

It seems like after the stylistic set substitution (hyphen → hyphen.pc01), Chrome/HarfBuzz no longer preserves or reevaluates the contextual calt behavior.

Has anyone experienced a similar issue with:

calt + ssXX

contextual substitutions after stylistic alternates

Chrome/HarfBuzz-specific behavior differences

First make sure your calt lookup are defined after ss18 lookups. If this does not work or if it is already the case, then calt is always applied before ssNN features (I’m not sure about Latin, but for Arabic at least this is true). You might need to use a feature tag with no fixed application order. I usually use rclt for that.

1 Like

Wow, that’s great! It worked instantly. Thanks a million!