Bidirectional functions
Use the SETLOGICALORDER, SETVISUALORDER,SETORIENTATIONLTR, SETORIENTATIONRTL, SETTEXTSHAPING, and SETTEXTSHAPINGOFF functions for specific transformation needs when dealing with bidirectional data.
About the order of text
The order of text generally corresponds with way it is stored in memory or on disk. In general, the order of text is displayed, on the window for example, in visual order so that a person can read it the way it is subjectively meant to be read. That is, left-to-right characters are displayed from left-to-right, and right-to-left characters are displayed with the first character of the text block beginning from the right.
Storage in memory or on disk generally occurs in a logical manner so that the left-to-right characters are stored left-to-right (that is, one after another), and require no processing to display properly. However, when right-to-left characters are stored in a logical manner, they are also stored one after another from left-to-right. These text blocks, when in Logical order, are usually enclosed by markers that identify the start and end positions of the right-to-left text blocks.
Logical to visual reordering
To display these logical sequences on a window would require that any left-to-right text is simply read and displayed. When right-to-left text is encountered, it must be turned around to the appropriate direction. This is logical-to-visual reordering.
Examples
In the following example, lowercase characters are considered left-to-right (LTR) and uppercase characters are considered right-to-left (RTL).
Text= | a |
b |
c |
F |
E |
D |
g |
h |
i |
---|---|---|---|---|---|---|---|---|---|
Visual order | 0x61 |
0x62 |
0x63 |
0x46 |
0x45 |
0x44 |
0x67 |
0x68 |
0x69 |
Logical order | 0x61 |
0x62 |
0x63 |
0x44 |
0x45 |
0x46 |
0x67 |
0x68 |
0x69 |