[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Adding Bidi to Fvwm ?



On Thu, Feb 21, 2002 at 11:02:33PM +0000, Mikhael Goikhman wrote:
> On 21 Feb 2002 12:08:45 -0800, Nadim Shaikli wrote:
> > 
> > With the recent work on multibyte support in Fvwm2 - has any thought been
> > given to those languages that are right-to-left oriented (Arabic, Farsi,
> > Hebrew, etc...) ?  In other words, have any considerations been given to
> > the addition of Bidi (Bi-directionality) ?
> > 
> >   http://www.unicode.org/unicode/reports/tr9/
> > 
> > May I suggest a compile-time option of including Fribidi (open source Bidi
> > library),
> > 
> >   http://fribidi.sourceforge.net
> > 
> > I'd be interested in adding Arabic support to Fvwm but that is very much
> > hinged on the inclusion of Bidi (its a first-order requirement).  It would
> > greatly simply life for me (and others I'm sure) if there was an option
> > to include and enable Bidi without having to resort to hacks.
> > 
> > For what its worth - the inclusion of Bidi will certainly increase Fvwm's
> > user base, since it would be one of the few window-managers with FULL
> > multibyte support; a BIG deal to those that are right-to-left'ies :-)
> > 
> > Any takers ? Olivier ;-) ?
> 
> I don't know whether I will add bidi support, but I may try to start it.
> At least I understand what this means. It is not trivial to immediately
> understand why this is needed and even less trivial to understand that
> it's all heuristics, there may be possible conflicts in any algorithms.
> Examples of logical input / visual output.
> 
>   % echo "SHALOM, fvwm (SHALOM is hi in IVRIT!)." | fribidi -C CapRTL
>                                  .(!IVRIT is hi in MOLAHS) fvwm ,MOLAHS
>   % echo "hi 1-2 (english) is SHALOM 1-2 (IVRIT)." | fribidi -C CapRTL
>   hi 1-2 (english) is IVRIT) 2-1 MOLAHS).
>   # the second example seems like a bug in my fribidi, but maybe not
> 
> Actually, bidi is orthogonal to unicode and to aligment, i.e. it may be
> applied to a normal 256-symbol charset, and, I think, we may assume it
> only affects an order of symbols inside the string, not its alignment.
> 
> So, what I may do is to add --with-fribidi-{library,includes}, and try to
> figure out where this bidi filter should be added. But I am not sure yet
> what exact parameters should be used in all cases (MULTIBYTE or not) and
> what are the conditions when bidi should be applied at all.
>

As you say fribidi works with simple bit charset so I think
that if libfribidi is detected we can try to use it
(HAVE_FRIBIDI).

The main problem to start is to detect the used encoding
of the string we display (window/icon title or menu item).
I suggest to compute the charset at font loading and
to add it to the FlocaleFont structure. Then, depending
of this charset we can apply fribidi filter (that is for
UTF-8(~ ISO10646-1), ISO8859-6 and ISO8859-8 and others?).

I think that first we can forget the alignment problems.
Alignment problems may be solved by adding a "width"
in the FlocaleWinString structure to get a bounding
box. This can be done progressively by using a flag
as FWS_HAVE_WIDTH (used similarly than FWS_HAVE_LENGTH).

Olivier