Bidirectional Support
Main Maintainer
Shachar Shemesh <shachar AT SPAMFREE shemesh DOT biz>
What is it?
Most languages around the world are written from left to right. Some other languages are written from right to left. Even when a language is, predominantly, right to left, it is very common for a paragraphs to contain elements in the paragraph that are written (and read) from left to right. For example, a Hebrew sentence with digits or Latin reference will be alternately written from right to left and left to right. This is called "BiDi", or "Bidirectional", rendering.
Right to Left Languages
As a rule, BiDi languages will use either the Hebrew (actually, modern Hebrew, or Asuric) script or the Arabic script. The Arabic script has many variants in precise shaping, numbers glyphs and diacritics.
Hebrew scripts languages include Hebrew and Yiddish.
There are many Arabic script languages, including Arabic, Persian (aka Farsi) and Urdu. Wikipedia has a more complete list.
Non-BiDi Issues With BiDi Languages
Proper BiDi support requires more than merely reordering the characters of a string. All BiDi languages require mirroring, which means rendering directional characters (such as U0028 - Left Parenthesis) as their mirror image when the context is right to left.
In addition to that, proper rendering of the Arabic script requires Shaping (selecting different glyphs for a character based on its position in the word), joining (rendering two or more characters as one glyph), and many other special handling.
As a result, BiDi languages are typically referred to as requiring "Complex Text Layout".
Current Status
Wine has complete support for the Unicode BiDi algorithm in the Uniscribe module. (usp10.dll)
This support is reflected in ExtTextOut. As of version 1.3.32, the Edit Control also has full BiDi and complex script support. This means that display and editing of BiDi text should work as expected in all basic windows edit controls and the notepad.
There is presently no support for BiDi editing in the RichEdit control.
