[Fribidi-discuss] BiDi WINE status and fribidi

Behdad Esfahbod behdad at bamdad.org
Sat Aug 24 04:13:02 EST 2002


On Sat, 24 Aug 2002, Shachar Shemesh wrote:
> Behdad Esfahbod wrote:
> >So finally  here is, the lord of all fribidi branches ;) (effects 
> >of reading "Just for Fun", by Linus Torvalds, these days).
> >
> >It seems that don't replying is a real good way of getting good 
> >comments and making other people think on fribidi :).
> >
> >More below:
> >
> >On Thu, 22 Aug 2002, Shachar Shemesh wrote:
> >[snip]
> >  
> >
> >>The main limitations we feel prevent Wine from using fribidi are:
> >>A. fribidi's use of UTF-32, vs. UTF-16 by Windows.
> >
> >I have decided to implement UTF-16 myself, no hard work, but of 
> >course, its a compile time option, like --enable-utf16, and I try 
> >to rename the output library to fribidi16 or something like that, 
> >to be able to have both 16 and 32 bit versions installed on a 
> >machine.
> The second part (having both installed simultaniously) is an extremely 
> important one.

Ofcourse.

> >>B. Lack of support for out of bounds overriding of character types (the 
> >>lpClass parameter of the GCP_RESULTS struct of GetCharacterPlacement. If 
> >>anyone is interested in the full details - 
> >>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_4l84.asp)
> >
> >If I understand you correctly, you need to be able to state that 
> >for example, the bidi type for character 'A' should be RTL, 
> >insteal of LTR.
>
> No, that's not it.
> 
> If the string "car in hebrew is said CAR" would normally get 
> "LLLNLLNLLLLLLNLLNLLLLNRRR", I want a user to be able to override, say, 
> the first word, saying "RRRdddddddddddddddddddddd" (where "d" means 
> "don't care"), resulting in fribidi treating the sentance as 
> "RRRNLLNLLLLLLNLLNLLLLNRRR". Notice that the character "a" appears in 
> both the first "car", and is being treated as "R", and in "said", and is 
> treated as "L" (because it was not overriden).

Ok, its the easiest request you can ever have.

> The interface must also allow the user to get back the final 
> classification (regardless of whether he overrided it or not).

Wait for it a few days.

> One last thing is that the user must be able to provide classification 
> to the character right before and right after the string (I have only 
> seen any reference to it in the 3.0 standard, but have not read the 3.2 
> standard yet. In 3.0 this affects, for example, W2).

You should insert two characters yourself.

> >  There are two solutions:
> >
> >	1. In the next generation interface of fribidi, there is 
> >a call that does bidi on given bidi types.  So you can get the 
> >bidi types of string from fribidi, override ones you want, and 
> >ask it to apply bidi with the given types.
>
> That would do it. Rember, I am very skeptic about the chances of anyone 
> actually using this feature, and so there is no need to change the 
> design (for example - un-RLE the string) just because of this 
> requirement. A seperate function should exist that does that, but that 
> function has to be neither memory nor CPU efficient, as it is not in the 
> main path of execution.
> 
> >	2. I'm thinking of a global overriding mechanism
> >(ofcourse through the fribidienv in the next generations), the 
> >idea is having a simple hash table of overrided character types.
> >Its easy to implement.
>
> Like I tried to explain - that won't do.

But I like it, it's powerful.

> >>Unless we create two distinct implementations of libfribidi, I fear that 
> >>the best approach for dealing with A is to create a WINE only fork of 
> >>fribidi.
> >
> >You can simply patch fribidi for your use, and still do not fork 
> >it, like the way Owen handles in pango, he has a (huge) patch, 
> >that he should update to apply on later versions of fribidi.  Its 
> >a little difficult, but is possible. (BTW, fribidi is more more 
> >stable now, and it makes future updates easy).
> >
> If we create a seperate utf-16 fribidi, that will not be necessary.

> >>B is just something to consider if you indeed want to revise 
> >>the fribidi interface 
> >>(http://sourceforge.net/mailarchive/forum.php?thread_id=790237&forum_id=3189).
> >>    
> >>
> >
> >Some points:
> >
> >	* I'm really busy for about 4 weeks.  It should be two 
> >long for you to wait, so please try implementing something that 
> >works, and then we will revise it together when I'm back (yes, I 
> >will be in a trip to India for TUG'2002).
> >
> I will start working on UTF-16 support (once that's in, UTF-8 shouldn't 
> be much of a problem, making conversions of any kind unnecessary. I'm 
> begining to think maybe packaging fribidi16 seperately is not such a 
> good idea after all, but that's up to the packgers). When you come back, 
> we'll see where I got to, and you can decide whether my code is worthy 
> of merging, or would you rather start from scratch yourself ;-)

Ok ;)

> >	* Another question is that should I implement B before 
> >1.0 or not?  I think I do it, as it's easy to do, and then 
> >changing the API for 1.0 is not hard.
>
> If it's easy, fine. Don't fuss too much over it, however, as even 
> Alexander accepts that this is not a high priority issue. He merely 
> states that he will not create dependancy on a library that will NEVER 
> solve all of our problems.

Ok, then I will solve the class problem first.
 
>                         Shachar

-- 
Behdad Esfahbod		2 Shahrivar 1381, 2002 Aug 24 
http://behdad.org/	[Finger for Geek Code]

#define is_persian_leap(y) ((((y)-474)%2820+2820)%2820*31%128<31)





More information about the FriBidi mailing list