New issue
Advanced search Search tips

Issue 895594 link

Starred by 1 user

Issue metadata

Status: WontFix
Owner:
Closed: Oct 21
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug

Blocking:
issue 894954



Sign in to add a comment

Don't break required ligatures.

Project Member Reported by bunge...@chromium.org, Oct 15

Issue description

Some fonts may have required ligatures or required ligature like effects. These can be specified through 'rlig', 'ccmp', or (ab)use of requiredFeatureIndex. This is done when the font designer really intended to display the given combination of codepoints in a particular way. The issue is when these required ligatures cross a space, hyphenation point, or other potential line breaking opportunity at the codepoint level. In this case it is preferred not to break the ligature if at all possible. 

This might be doable with the shaper knowing the list of required features and then marking clusters which are tainted by required features as 'unbreakable'. Alternatively, the set of potential line breaks could be handed to the shaper, which could veto, move, or deprioritize as needed (which is approximately what graphite does). With this information users of the shaper can attempt to ignore line breaks in such clusters.

The current behavior of breaking required ligatures was observed with SansBullshitSans which sets requiredFeatureIndex to reference the feature tagged 'liga' (it could also have done this by using 'rlig'). While this is obviously a novelty font, it would seem quite useful to support required ligatures by not breaking them.
 
You mean don't do line-break in required ligatures?  I don't think that's a good idea in principle.
If not, then is there a way for a font designer to do something like this which doesn't violate any principles? This seems like a tension between codepoints and glyphs in line breaking. It seems unicode / OpenType want it to happen only at the codepoint level, but we actually break between glyphs (unless you're Firefox an wrap the glyphs!?). In this case the font designer may really want a specific glyph to represent a long run of codepoints, is there any other way to specify it? Is it generally acceptable to line break inside an 'rlig'? Does the required part of 'rlig' just mean "don't disable"?
Ligatures by definition only mean "use this form if these are rendered next to each other".  When there's a line-break, ligature just doesn't apply.

Yes, rlig means this is don't disable.

I see what you're requesting.  We don't have a way to distinguish between required and discretionary ligatures in the shaping output, no.
Status: WontFix (was: Untriaged)
As explained by behdad above this really isn't something we can do.

Sign in to add a comment