<div dir="ltr"><div class="gmail_extra"><div><div class="gmail_signature"><br></div></div><div class="gmail_quote">2015-05-11 18:24 GMT+04:00 Louis Semprini <span dir="ltr"><<a href="mailto:lsemprini@hotmail.com" target="_blank">lsemprini@hotmail.com</a>></span>:<br><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 dir="ltr"><br><div><span class="">> Hi Louis,<br>> <br>> In my font engine I start by doing font selection depending on the presence of glyphs and encoding before call harfbuz to shape the string. The process is tedious but simple: break the text into text runs by trying to find changes in the properties of the text stream:<br>>    1. Split text into paragraphs (LayoutText)<br>>    2. Split text into fonts<br>>    3. Split paragraphs into ranges (LayoutParagraph)<br>>    4. Split ranges into possible fonts (I try to keep the number of fonts to a minimum)<br>>    5. Split ranges into lines / words if needed<br>> <br>> Then I shape each run with harfbuz. Each run can have a different font.<br>> I’m not saying it’s the perfect solution to the problem but it worked fine for me and for now I don’t think I have encountered cases where harfbuz was missing a glyph in the end. I think that having a "missing glyph” callback would not work for me as it would already be too late and that I would have to restart the text layout and font selection from the beginning.<br><br></span>Thanks Sebastian.  <br><br>I assume when you say "depending on the presence of glyphs" you mean that, at some point, you are making an individual call for each code point of the input text in order to check whether the proposed font has that code point or not, correct?<br><br>I can definitely understand the idea that a "missing glyph callback" would come too late for some layout engines, however I still think it's useful in some cases to know from the output of Harfbuzz whether there were any missing glyphs, especially if speed is important, the missing glyph case is rare, and one wants to avoid the extra, expensive per-code-point cmap lookup in the common case of no missing glyphs.<br><br>So I am hoping some of the Harfbuzz folks here can address the original question about whether glyph index 0 always means "missing", and whether glyph index 0 is the sole and only way that Harfbuzz indicates "missing."  Or if there is some other way to interpret the output of hb_shape() to look for missing glyphs.<br></div></div></div></blockquote><div><br></div><div>A short answer: glyph index 0 is assumed for glyphs not supported by the font.</div><div><br></div><div>The OT shaper returns just what you gave it via the font_get_glyph(..) callback -- FT basically returns 0 for missing glyph, however some implementations might use special values to indicate input/encoding errors (\sa Pango).</div><div>Other shapers (ones that do not use font_get_glyph(..) callback) could potentially return anything (i.e. CT could use the index'es high byte for its internal purpose; Uniscribe has an API to override the .notdef glyph's value), though HB expects them to return 0 for missing glyph(s) anyways.</div><div><br></div><div>Of course, it would be nice if hb_shape() can report the process'es additional status/info anyhow, so one can avoid doing an unnecessary post-shaping checks (for missing glyph(s) presence, cluster re-mappings, broken VS or RI sequence(s) presence, etc).</div><div><br></div><div>Regards,<br>Konstantin<br></div></div></div></div>