[XeTeX] diacritics stacking using anchor points

Antonis Tsolomitis antonis.tsolomitis at gmail.com
Sun Oct 24 08:38:12 CEST 2021



Thank you Jonathan so much.

I do not really care about the dialogs of ff since I can always edit the 
sfd file
for such simple things with vi.

Now that I know the difference even if I fail, I have something to take 
to the ff list 😁

best,

Antonis.




On 23/10/21 23:11, Jonathan Kew wrote:
> On 23/10/2021 16:48, Antonis Tsolomitis wrote:
>>
>> Thanks for the answer.
>>
>> Yes acute works. But where do you see the difference? I am looking 
>> the dialogs of
>> fontforge and can not locate the difference.
>>
>> I have more trouble with diacritics stacking especially when stacking 
>> above AND below.
>> x́ (x+ U+0301) works
>> x̖ (x + U+0316) works as well, but
>> x̖́ (x+ U+0301 + U+0316) fails.
>>
>>
>> I have been trying to resolve these issues for a long time but 
>> without luck. The fontforge
>> dialogs show correct stacking but xetex does not stack as expected an 
>> I have routinely failed
>> to find the reasons.
>>
>> So at which dialogs do you see the difference between U+0301 and 
>> U+0300 ?
>> And why simultaneous stack above and below fails?
>>
>
> I haven't looked at FontForge dialogs; I used TTX (from the FontTools 
> package) to look at an XML dump of the .otf file, and noticed that for 
> the uni0300 glyph, the mark-to-base lookup has an attachment point 
> with class=1:
>
>             <MarkRecord index="9">
>               <Class value="1"/>
>               <MarkAnchor Format="1">
>                 <XCoordinate value="218"/>
>                 <YCoordinate value="516"/>
>               </MarkAnchor>
>             </MarkRecord>
>
> whereas for uni0301 and other diacritics that should attach to the 
> "above" anchor of the base, the attachment has class=3:
>
>             <MarkRecord index="10">
>               <Class value="3"/>
>               <MarkAnchor Format="1">
>                 <XCoordinate value="284"/>
>                 <YCoordinate value="522"/>
>               </MarkAnchor>
>             </MarkRecord>
>
> In the associated BaseArray, glyphs like uni2C9B appear to have only 
> anchors 3 (above) and 4 (below) defined:
>
>             <BaseRecord index="876">
>               <BaseAnchor index="0" empty="1"/>
>               <BaseAnchor index="1" empty="1"/>
>               <BaseAnchor index="2" empty="1"/>
>               <BaseAnchor index="3" Format="1">
>                 <XCoordinate value="272"/>
>                 <YCoordinate value="453"/>
>               </BaseAnchor>
>               <BaseAnchor index="4" Format="1">
>                 <XCoordinate value="296"/>
>                 <YCoordinate value="-20"/>
>               </BaseAnchor>
>               <BaseAnchor index="5" empty="1"/>
>               <BaseAnchor index="6" empty="1"/>
>             </BaseRecord>
>
> so I'm assuming that's why uni0300 fails to attach.
>
> I don't know exactly how this is exposed in the FontForge interface, 
> sorry....
>
> As for combinations with above + below, you may need investigate mark 
> classes, and ensure that MarkToBase lookups for the "above" and 
> "below" classes are each set to ignore the other class of marks. So if 
> you have <x + U+0301 + U+0316>, the lookup that wants to handle <x + 
> uni0316> needs to *ignore* the uni0301 glyph that appears in between. 
> This is done using mark classes; see the documentation of the 
> MarkToBase lookup in 
> https://docs.microsoft.com/en-gb/typography/opentype/spec/gpos.
>
> Hope this helps -- sorry I don't know details of how to control all 
> this from FontForge, but I'm sure it has the capabilities somewhere...
>
> JK
>
>> Thanks for your help,
>>
>> Antonis.
>>
>>
>>
>>
>>
>> On 10/23/21 6:26 PM, Jonathan Kew wrote:
>>> On 23/10/2021 14:37, Antonis Tsolomitis wrote:
>>>>
>>>> It is a long time now that NewComputerModern has build-in 
>>>> information for diacritics stacking.
>>>> I have heard  that xetex supports this but I can not make it work. 
>>>> The font is developed
>>>> with fontforge and as you can see in the attached screenshot, 
>>>> fontforge shows stacking working.
>>>>
>>>> However xelatex just places, say the grave (uni0300) next and not 
>>>> above the character, say uni2C9B
>>>> (as in screenshot).
>>>>
>>>> So I guess I have something wrong in the font that xetex does not 
>>>> like(?)
>>>
>>>
>>> Do any other diacritics such as the acute (U+0301) or dieresis 
>>> (U+0308) work? From a quick look at the GPOS table in the font -- if 
>>> I'm reading it correctly -- it appears that uni0300 may have the 
>>> wrong attachment point class (whereas in uni0301 and uni0308, it 
>>> looks correct).
>>>
>>> JK
>>>
>>>
>>>
>>>>
>>>> The font currently develops the coptic block for academic needs 
>>>> this is why I use uni2C9B.
>>>>
>>>> A sample file is
>>>>
>>>> \documentclass{article}
>>>> \usepackage{fontspec}
>>>> \setmainfont{NewCM10-Regular.otf}
>>>> \begin{document}
>>>> ⲛ̀
>>>> \end{document}
>>>>
>>>> However the font that contains this character (since it is under 
>>>> development) is here:
>>>> https://myria.math.aegean.gr/~atsol/tmp/NewCM10-Regular.sfd 
>>>> <https://myria.math.aegean.gr/~atsol/tmp/NewCM10-Regular.sfd>
>>>> https://myria.math.aegean.gr/~atsol/tmp/NewCM10-Regular.otf 
>>>> <https://myria.math.aegean.gr/~atsol/tmp/NewCM10-Regular.otf>
>>>>
>>>> thanks for any help,
>>>>
>>>> Antonis.
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://tug.org/pipermail/xetex/attachments/20211024/8421b053/attachment-0001.html>


More information about the XeTeX mailing list.