Bidirectional Scripts in Desktop Software
Bidirectional scripts are those with characters flowing from right to left. Major bidirectional scripts are the Arabic, Persian and Hebrew scripts, but there are other ones too. Supporting these languages in the user interface of a desktop system needs special support in several layers of the system. Experiments and history shows such special support moves on the very thin edge between completely unusable and highly usable. So they deserve their own guidelines for a consistent cross-desktop behavior. That's what we aim to do here.
Readings (a.k.a. References)
- Unicode Bidirectional Algorithm (UBA from now on, a.k.a UAX#9) is the place to start. It contains the basic algorithm to map a Unicode plain text string to a visual ordering.
- Bidirectional Layouts in GTK+ is a presentation of the state of art bidi support in Gtk+ by mid 2004. Discusses several problems and concepts that are general to all GUI applications.
- Hierarchically Implicit Bidi is a personal proposal for a hierarchical bidi system.
- Guidelines of a Logical User Interface for Editing Bidirectional Text (also here) is the guidelines in use by IBM.
- Yudit Bidirectional Information discusses surprises and potential security problems with bidi text support complying to the UBA.
- Examples of bidirectional IRIs linked from Editing 'Internationalized Resource Identifiers (IRIs)'.
- Mozilla Bi-Di API proposal (out-dated) is the old proposal to add support for bidirectional text to Mozilla. Note that the API proposed in this document is missing essential features, like line breaking support.
- The 'direction' and 'unicode-bidi' properties in CSS 2.1 specification, and its box model.
- A couple messages about start/end margins as opposed to left/right margins in CSS 3. Unfortunately seems like the whole thing did not make it into final CSS 3. Mozilla bug about the issue, and KDE's.
- Exploring Better Source Editing for Bidirectional XHTML and XML, a paper from IUC28, Septembre 2005. Excellent reading in itself, but even more valuable is the list of references. Check it out.
- Better tutorial on mixed directionality is a Usenet post about cursor movement in bidirectional text.
- Documentation for BiDi Mozilla. This is preliminary documentation of the changes introduced to Mozilla as part of the bidi support contributed by IBM (a.k.a. IBMBIDI).
- RFC: Standard for automatic insertion of bidi control characters. Interesting discussion thread on good ol' ivrix list.
Non-Readings (a.k.a. Pre-Unicode Tries)
- Understanding bidirectional language support is an older IBM standard.
- ECMA TR53 Handling of Bi-directional Texts, Second Edition is a technical report on supporting bidi text in text terminals. No one knows if it was ever implemented.
Implementations
- GNU FriBidi is GNU project's implementation of the UBA, also used in several other projects.
Automatic paragraph direction according to the UBA in Gtk+ (bugzilla discussion) (also this and this.)
Handling markup text from a bidi point of view (bugzilla discussion).
- miniBidi is a minimal implemention of the UBA (BMP only, implicit only).
- PGBA: Pretty Good Bidi Algorithm (approximate, implicit only)
- GtkBidiText: A Gtk BiDirectional text widget for Hebrew (out-dated)
- ProtoBidi: The Prototype Bidirectional Widget (out-dated)
- Mozilla BiDi UI Extension is a Mozilla extension to support bidi widgets on Mozilla user interface.
- Gedit Bidi Assistant is a Gedit plugin for dealing with Unicode bidirectional markup.
Mailinglist
All bidi discussion is currently on bidi at lists freedesktop org. The archives are here.
-- ?BehdadEsfahbod - June 7, 2005