http://bugs.winehq.org/show_bug.cgi?id=7150
--- Comment #14 from alsadi alsadi@ojuba.org 2009-10-26 12:17:48 ---
articles written by me
Shachar! why haven't you implemented your docs ?
according to me the proper BiDi handling is :-) - Bidi level calculations - Line breaking - Reodering - Shaping
my code is very optimized, so if you just want to move things for optimization purpose just forget it, you won't get a better performance, that would be near impossible.
why did I made it the last step of BiDi process ? because shaping changes the characters which would interfere the Reodering process
for example a Reodering routine might know that U+639 is RTL but it may/may not know that U+FECC is RTL too (many Reodering routines in many project don't handle this case, I don't know about wine)
notes: U+0639 ARABIC LETTER AIN U+FECC ARABIC LETTER AIN MEDIAL FORM
and since I don't want to change any other function, I made it after Reodering.
the case where Shaping should be done before reodering is when the char length of U+0639 is less that shaped U+FECC but this is not the case in wine (UTF-16) so the positions calculated by your reordering are granted to be valid as my function is 1-1.
the right thing to do is to use HarfBuzz which is in its way as a standalone library. http://fedoraproject.org/wiki/Features/Harfbuzz
but since this is a decision to be made in winehq, this is the only thing I can do.