<div dir="ltr"><div><div><span style="font-family:arial,sans-serif;font-size:13px">Follow-up to an earlier discussion with Khaled:</span></div></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px">> You basically scan the text, itemize it into contagious script runs and</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">shape each one separately using HarfBuzz. If you are also doing BiDi</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">itemization, then both can interfere (you might end with runs</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">containing only characters with common script property after doing BiDi,</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">so they will be shaped with the default script which can be wrong), so</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">you need to do script itemization first, and BiDi itemization separately</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">then combine both to get runs of same a script and direction to be</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">shaped separately</span><br></div><div><br></div><div>This has been synthesized into:</div><a href="https://github.com/arielm/Unicode/tree/master/Projects/BIDI">https://github.com/arielm/Unicode/tree/master/Projects/BIDI</a><br>

<div><br></div><div>The relevant "action" is taking place here:</div><div><a href="https://github.com/arielm/Unicode/blob/master/Projects/BIDI/src/TextItemizer.cpp">https://github.com/arielm/Unicode/blob/master/Projects/BIDI/src/TextItemizer.cpp</a><br>

</div><div><br></div><div>HTH,</div><div>Ariel</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Dec 15, 2013 at 5:02 PM, Khaled Hosny <span dir="ltr"><<a href="mailto:khaledhosny@eglug.org" target="_blank">khaledhosny@eglug.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Sun, Dec 15, 2013 at 04:38:51PM +0200, Ariel Malka wrote:<br>
> I have rendered text successfully with a few different complex scripts<br>
> ("Hebr", "Arab", "Hang", "Hani", "Thai", etc.) and it looks like the<br>
> hb_buffer_set_language() is not affecting the result.<br>
><br>
> The first question I'm asking is therefore: what is the purpose<br>
> of hb_buffer_set_language()?<br>
> Or in other words: is there a combination which require both the language<br>
> and script values to be defined?<br>
<br>
</div>Many fonts have language-specific features, for example:<br>
<a href="https://bugs.webkit.org/show_bug.cgi?id=37984" target="_blank">https://bugs.webkit.org/show_bug.cgi?id=37984</a><br>
<br>
Without setting a language, HarfBuzz will use the ‘dflt’ language (AFIK)<br>
and the result can be wrong in such cases.<br>
<div class="im"><br>
> My second question is regarding mapping: is there a way to obtain a<br>
> hb_script_tag from a language-code string (e.g. "he" -> HB_SCRIPT_HEBREW)?<br>
<br>
</div>Many languages are written in different scripts, so there is not always<br>
a one to one language to script mapping. The proper way to get the<br>
script of a piece of text is by checking the script property of its<br>
characters, using the algorithm described by Unicode:<br>
<a href="http://www.unicode.org/reports/tr24/" target="_blank">http://www.unicode.org/reports/tr24/</a><br>
<br>
You basically scan the text, itemize it into contagious script runs and<br>
shape each one separately using HarfBuzz. If you are also doing BiDi<br>
itemization, then both can interfere (you might end with runs<br>
containing only characters with common script property after doing BiDi,<br>
so they will be shaped with the default script which can be wrong), so<br>
you need to do script itemization first, and BiDi itemization separately<br>
then combine both to get runs of same a script and direction to be<br>
shaped separately.<br>
<br>
I find this code an easy to grasp example:<br>
<a href="https://github.com/mapnik/mapnik/blob/master/src/text/itemizer.cpp" target="_blank">https://github.com/mapnik/mapnik/blob/master/src/text/itemizer.cpp</a><br>
<br>
Regards,<br>
Khaled<br>
</blockquote></div><br></div>