Apply default features for empty slice, not just nil. #1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes boxesandglue/boxesandglue#14
When callers pass an empty feature slice (e.g.,
make([]Feature, 0)or[]Feature{}), the default features includingccmpare not applied. This is because the checkfeatures == nilonly matches a nil slice, not an empty one.This causes issues when using textshape through boxesandglue, which initializes features with
make([]Feature, 0, ...). The result is that GSUB features likeccmp(glyph composition/decomposition) are skipped, leading to incorrect rendering of combining marks.For example, in Church Slavonic text, the letter И (U+0418) can have two combining diacritical marks: psili (U+0486) and oxia (U+0301). The font's
ccmpfeature substitutes these two marks into a single precomposed ligature glyph (uni04860301) that positions them correctly side-by-side. Withoutccmp, the marks are rendered separately usingmkmkpositioning, which in some fonts results in overlapping or incorrectly stacked marks.Before the fix:
After the fix: