Anchors in CLIG-subsituted glyphs assembled from components neglected in static fonts

Hello together,

I created a font which is assembled from components. Some components have marks which are nescessary for mark attachment.

For all glyphs, the mark attachment is working as it should.

However for glyphs which are substituted by the CLIG feature, the mark attachment is only working in the exported variable fonts, but it is not working in the exported static fonts.

This behaviour is the same across all software where I tried the font: FontGoggles, Pages, Illustrator, Word, so I assume it has something to do with the export?

The glyph ល has a miniture អ attached to its botton (BLWF) = ល្អ

	sub coeng-khmer qa-khmer by qa-khmer.below;

Bildschirm­foto 2022-11-09 um 20.42.32
Then, a ា is added and the ល and ា form a ligature to which the miniature អ should still be attached. (The original ា is replaced by a zerowidthspace)

		sub @Byanhjana' @ChoengBelow aaSign-khmer by @ByanhjanaLigAA;
		sub @ByanhjanaLigAA @ChoengBelow aaSign-khmer' by zerowidthspace;

This should look like this:
Bildschirm­foto 2022-11-09 um 20.46.23

And this works correctly in the variable export.

However in the static font export it consistently looks like this:
Bildschirm­foto 2022-11-09 um 20.48.13

Still, the attachment works correctly after the first substitution for both static and variable font:
Bildschirm­foto 2022-11-09 um 20.52.34
So has it something to do with the CLIG substituion?

Both, the ល and លា are assembled from the same components with the below anchor in the 3rd component:

Bildschirm­foto 2022-11-09 um 20.54.34

Again, it all works in the variable export, so I wonder where the error lies?

Any help would be appreciated!

Best regards,

Can you check the relevant feature code in the Temp folder? Is there a difference in the mark feature?

And what happens if you add the needed anchors to the full ligature. Maybe the anchor decomposition is not working?

Thanks, Georg, I checked the feature code in the temp folder with the effect that
marks are swallowed in the static exports. Contrary to what I described above, this does not happen with all ligatures with ា, but only with some. And the ones being swallowed do not consistently use the same component.

In the static font, the BLWM has 129 lines: (lo should follow ro, followed by vo)

In the variable font, the BLWM has 157 lines, here with the lo_aaSign-khmer:

So at least 28 marks went missing…

If I manually add the anchor in the ligature, it works as expected.

Can you send me that .glyphs file?

sent to you, thanks!

It works when you change the glyph subCategory to “Composite” (from “Ligature”). I’ll see if the default should be changed.

1 Like

thanks a lot!

I wonder what the reason is for this approach. It’s resulting in the coeng now being anchored onto your zero-width space, which isn’t where it should be.

Normally we’d just replace ស followed by ា with the សា ligature:

lookupflag IgnoreMarks;
sub sa-khmer aaSign-khmer by sa_aaSign-khmer;

That way we don’t end up with zero-width spaces interrupting the glyph sequence, which might also become the context of subsequent lookups.

Then it should just be a question of adding bottom _1 and/or bottom_2 anchors to the sa_aaSign-khmer ligature so the coengs end up in the right position. I’m not sure if the aaSign part of the ligature can take marks, or if things just sit on the consonant part. @sovichet could you confirm?

hey, no, the issue doesn’t relate to the implementation of this substitution rule. the substitution rule you point out applies when there is no ព្យញ្ជនៈជើង in the syllable. in this implementation, the zerowidthspace is nescessary for the correct placement of និគ្គហិត and it does not interfere with the ព្យញ្ជនៈជើង.

georg’s suggestion works well. thank you!