Hi Behdad,
I already implemented a solution and it seems to be working. This is
basically what I do:
1) Use fribidi to extract the v2l and dir tables (get_bidi_types).
2) Re-order the string using the v2l table:
For every character:
strOut[i] = strIn[v2l[i]]
((( Now strOut is ordered but not shaped )))
3) Split the string in direction runs using the criteria:
dir[ v2l[i] ] != dir[ v2l[i-1] ]
4) Shape each run separately telling harfbuzz everything is LTR.
5) For every glyph
g->cluster = v2l[g->cluster]
6) profit!
But I have two questions:
1) Splitting by BiDi type looks like a bad idea because the spaces are
WS while arabic and english text are AL and LTR respectively. So it is
forcing algorithm to shape every word separately, creating and
destroying the hb_buffer each time. Would it be a better idea to use the
BiDi levels as the split criteria?
2) Is there anything wrong with reordering arabic characters from LTR to
RTL and then shape them as if they were LTR?
Thanks!
El 30/10/2013 17:08, Behdad Esfahbod escribió:
You got it mostly right. I'll reply to you in detail next week.
Traveling right now.
On Oct 30, 2013 3:56 PM, "eduardo" <[email protected]
<mailto:[email protected]>> wrote:
BiDi/harfbuzz integration code samples are also welcome
On Mon, 28 Oct 2013 12:48:09 +0100, Eduardo Castineyra wrote:
Hi,
I have an unicode string with the bidi already solved, but I don't
know exactly how to feed harfbuzz with the result. There is a
list of
things I don't know and finally my guess on how this should be
solved:
1) Given the friBiDi already switched the order of the glyhs, do I
still need to set the buffer direction to RTL ?
2) Do I have to shape each unidirectional segment separately?
How do
I manage the clusters?
3) How do I combine the L_to_V output from friBiDi with the hb
clusters?
Could you please correct me if I got something wrong with this
algorithm?
from friBiDi, I'm using only the l2v, v2l and RTL props, and
completely discarding the glyhps:
1) friBiDi pass
2) Using the l2v list identify the direction of every character
3) Split the original text into monodirectional runs.
4) For each run, we save the lowest visual position (LVP) and the
lowest logical position (LLP)
5) Shape every segment separately (setting the appropriate
buffer direction).
6) Sort the segments based on their LVP
7) Add the LLP to the cluster of every glyph.
Isn't there an easier way to do this?
Thanks!
_______________________________________________
HarfBuzz mailing list
[email protected]
<mailto:[email protected]>
http://lists.freedesktop.org/mailman/listinfo/harfbuzz
_______________________________________________
HarfBuzz mailing list
[email protected] <mailto:[email protected]>
http://lists.freedesktop.org/mailman/listinfo/harfbuzz
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz