[HarfBuzz] harfbuzz versus fribidi

eduardo eduardo at brainstorm.es
Sat Aug 22 07:27:54 PDT 2015


Hi Stephen,

AFAIK, harfbuzz is not a replacement for fribidi. They are different 
libraries that solve diferent problems.

(disclaimer: this information is probably very inaccurate but it ended 
up working for us)

Fribidi solves bidirectional text layout and Harfbuzz solves text 
shaping.



Bidirectional text layout is needed when you merge LTR and RTL segments 
in the same text because it is not always trivial to know what segment 
of text goes in what position. For instance (imagine the text I write 
backwards is some RTL language)

dias eH
"Hello, my name is
odraudE
"

In one line, it should look like this:

"Hello, my name odraudE" is dias eH

This is what fribidi solves. And it is based on an algorithm named "The 
unicode bidirectional algorithm".




Harfbuzz solves text shaping. In occidental alphabets there is (roughly) 
only one visual representation for each character, but not in other 
alphabets. For instance, in tamil you have:

ட + உ = டு

There is no unicode number for டு because it is not a character. It is 
the visual representation of two characters, also called "glyph". You 
can put your cursor on the right and press backspace to delete the 
latest one and you will see the first one.

Different sets of characters have different visual representations which 
not always have to do with what those characters look like when they are 
presented out of context (standalone presentation).

How to draw each set of characters, depends on the font. Opentype and 
truetype fonts have a set of tables the software can look up in order to 
know what glyph to use in what context.

That's basically what harfbuzz does. Harfbuzz can only work with 
paragraphs that use one single alphabet.

but....



FriBidi also does shaping for some languages and Harfbuzz also sorts the 
characters properly when the segment is RTL

FriBidi only does shaping for Arabic/Persian and Hebrew. That's 
basically because all the glyphs for those languages have a unicode 
number the shaping can be done without checking any font table. And also 
because Behdad is persian ^^ So if you are only worried about those 
languages, using only FriBidi is ok. However, it doesn't support 
diacritic accents which some user might demand.

Harbuzz inverts the segment of text if you tell harfbuzz that text is 
RTL. So it might also be ok to only use Harfbuzz if you are not going to 
write bidirectional paragraphs (either only english or only arabic).

But if you want both things, you have to send the text first to FriBidi, 
then to harfbuzz and always tell harfbuzz the text is LTR, because 
fribidi already put the arabic characters in their correct order and 
harfbuzz will invert them. So in this case, you have to lie to harfbuzz 
and tell him arabic is LTR.

As I said before, there are probably a lot of false claims, but this 
worked for us for a couple of years and our users (from Lebanon, Iran, 
India and Thailand) are happy, and so we are.

Hope this helps.

Edu.





On 21.08.2015 16:31, Stephen Burke wrote:
> I just put in support for bidi text using fribidi and the log2vis api.
>  There are numerous warnings about using this api saying it is
> deprecated but it is the most user friendly for a developer.
> 
> Can you describe the upgrade path to harfbuzz?  Why would I want to
> use that library and what's the difference between fribidi and
> harfbuzz?
> 
> Thanks.--
> 
> Steve
> www.stayathomedevs.com [1]
> 
> Game Data Editor Unity Plugin [2]
> 
> Links:
> ------
> [1] http://www.stayathomedevs.com
> [2] https://www.assetstore.unity3d.com/en/#!/content/18480
> 
> _______________________________________________
> HarfBuzz mailing list
> HarfBuzz at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/harfbuzz



More information about the HarfBuzz mailing list