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

Arabic in PuTTY



This weekend, I checked in one of the remaining pieces of work
required before the Arabic support in PuTTY is considered
releasable. Specifically:

 - the cursor position is now mapped through the bidi transformation
 - highlighting of selections is mapped through the bidi
   transformation
 - mouse clicks are mapped (backwards) through the bidi
   transformation before being processed.

This means that when the cursor looks as if it's on a particular
letter, it really is on that letter; and you can select pieces of
right-to-left text by clicking on where the words look as if they
are.

As far as I'm concerned, the Arabic support in PuTTY is now ready in
feature terms to be included in trunk releases. (I've put out two
branch-based releases without it since checking it in, because I
didn't think it was stable enough yet.) I don't know whether it yet
does everything an Arabic speaker would require, but it at least
isn't being _gratuitously_ confusing to non-Arabic-speakers, so it
shouldn't need to be left out of the next release.

There is still stability work to do. In particular, somebody needs
to go through minibidi.c and review the array bounds checking,
because it currently isn't very good. For example, around line 205
of the current code, in do_shape(), line[i+1].wc and line[i-1].wc
are both referenced without stopping to check whether i is at the
beginning or end of the array. I could go through and fix these
myself, but it would help if somebody who actually understood bidi
and shaping did it, because they'd know what was _supposed_ to
happen in those cases!

Also, I should let you know that PuTTY now supports combining
characters, which was on the list as being important for Arabic
support.

Next on the list is support for ligatures. As I understand it, the
current plan is to support them by using the new combining character
support to squash the lam and alif characters into the same
character cell, so that selecting and copying just that character
cell gets you both characters. Is that correct? I think I can now
see how to do this reasonably easily, but I wanted to check with you
before going ahead.

So what I'd like from you, if possible, would be:

 - Check the new bidi functionality (PuTTY development snapshot
   code) and verify that the cursor position and selection do what
   you expect.

 - Check the new combining character support (also in the snapshots)
   and let me know if there's any problem with that.

 - Consider doing a robustness review of minibidi.c. Alternatively,
   I could go through it and point out the potential problems and
   then you could suggest what solutions were appropriate.

 - Let me know whether the plan for ligatures is correct, so I can
   go ahead with it.

Cheers,
Simon
-- 
Simon Tatham         "Happiness is having a large, warm, loving,
<anakin at pobox dot com>    caring, close-knit family in another city."