<div dir="ltr"><div class="gmail_default" style="font-size:small">Well, there appears to have been no kerning problem, I only needed to add HB's offset to FT's bearing and everything comes out right.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">I was thinking of HB as a drop-in layer on top of FT as regards glyph metrics, so this may just have been an error in my mental model. Though I am not sure how one is supposed to form the proper mental model in an efficient way... ... ... </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 23, 2015 at 2:37 PM, Jonathan Blow <span dir="ltr"><<a href="mailto:jon@number-none.com" target="_blank">jon@number-none.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div><br>
<br>
</div></div>FreeType does not give you any offsets. Unless you mean the side<br>
bearings, but they are very different things and shouldn’t be used for<br>
glyph placement at all. You are getting 0 offsets because either the<br>
font does not do any special positioning here (not uncommon for old<br>
Chinese fonts), or something is wrong in the way the text is shaped.<br></blockquote><div><br></div></span><div><div class="gmail_default" style="font-size:small;display:inline">​Okay, this is confusing. Maybe this has to do with different cultural assumptions or different ideas about what the software looks like, but bearings are just offsets to me. When I look at this diagram from the FreeType documentation:</div></div><div><div class="gmail_default" style="font-size:small;display:inline"><br></div></div><div><div class="gmail_default" style="font-size:small;display:inline"><a href="http://www.freetype.org/freetype2/docs/tutorial/step2.html" target="_blank">http://www.freetype.org/freetype2/docs/tutorial/step2.html</a></div></div><div><div class="gmail_default" style="font-size:small;display:inline"><br></div></div><div><div class="gmail_default" style="font-size:small;display:inline">It says that wherever the cursor is, add bearingX as an offset and draw the thing in the box. And in fact this is how I draw things when they show up in the proper places. So I am not sure what you mean here; my guess is that you are thinking of there being a little bit of a software stack living below you that itself adds bearingX to draw the thing in the box, so that it would be incorrect for you to do so?</div></div><div><div class="gmail_default" style="font-size:small;display:inline"><br></div></div><div><div class="gmail_default" style="font-size:small;display:inline">So then my interpretation is that the 'offsets' from HB are additional and are not meant to include bearings, and are only for kerning or for like things, and I should actually add both offsets together I guess. </div></div><span class=""><div><div class="gmail_default" style="font-size:small;display:inline"><br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>
<br>
</span>For Arabic, it looks like you are applying the kerning on the wrong<br>
direction, see how the ا in لطراز is moving closer to the ز instead of<br>
the ر as I’d expect it.<br></blockquote><div><br></div></span><div><div class="gmail_default" style="font-size:small;display:inline">​That's quite possible, I will investigate. My old code, pre-HB, would switch to drawing glyphs right-to-left for RTL languages, but upon starting to use HB I was pretty confused because it looks to me like HB is always giving me glyphs in left-to-right order, even for RTL languages (if there is a setting that changes this, I have no idea). So at some point I just simplified all the rendering code to always be LTR, though it is possible I made a mistake or else for some reason kerning is RTL while everything else is LTR which would be really weird??</div></div><div><div class="gmail_default" style="font-size:small;display:inline"><br></div></div><div><div class="gmail_default" style="font-size:small;display:inline">Oh wait ... I remember something about kerning in otf/ttf always having to do with the logical order of glyphs and not the display order; does HB keep this convention? I had interpreted offsets as being screen positions, not deltas in some abstract kerning space, so that could be the source of the issue.</div></div><span class=""><div><div class="gmail_default" style="font-size:small;display:inline"> ​</div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>
<br>
</span>If you are not setting the correct text script, then you are unlikely to<br>
get correct output. You need to analyse the text and pass the correct<br>
script to HarfBuzz (resolving characters with common and inhere tied<br>
script properties, etc).<br></blockquote><div><br></div></span><div><div class="gmail_default" style="font-size:small;display:inline">​In this case we have a fixed set of languages (currently 15) that we are just swapping in and out, so I can set this stuff on a per-language basis, so I guess for each one I need to know:</div></div><div><div class="gmail_default" style="font-size:small;display:inline"><br></div></div><div><div class="gmail_default" style="font-size:small;display:inline">* what to pass to hb_buffer_set_script​</div> </div><div><div class="gmail_default" style="font-size:small">​* what to pass to hb_buffer_set_language (I am not sure how this latter affects results in different ways than the former)</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">... Anything else?​</div><br></div></div><br></div></div>
</blockquote></div><br></div>