Don't break required ligatures. |
||
Issue descriptionSome 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.
,
Oct 15
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"?
,
Oct 15
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.
,
Oct 21
As explained by behdad above this really isn't something we can do. |
||
►
Sign in to add a comment |
||
Comment 1 by behdad@google.com
, Oct 15