From: Asmus Freytag (email@example.com)
Date: Mon Mar 22 2010 - 22:28:22 CST
On 3/22/2010 7:03 PM, Russell Shaw wrote:
> I read http://unicode.org/reports/tr9/#Reordering_Resolved_Levels
> but am still unsure about line-breaking across text that has LTR
> and RTL runs.
the simple answer is that you want to be able to read the text without
having to skip lines. So if you mix longer sections of RTL text in the
middle of LTR text, as in your example, you proceed as follows: First,
you lay out the LTR text. That leaves some space at the end of the line.
Then you collect the logical start of the RTL text (i.e. the part that a
reader would read first) and then fit as much of that into the remaining
space on the line as will fit.
In other words, you get your display-order 2.
Not only is that the easiest for the reader, it's also really the
easiest for the computer, because the text, when stored in memory, is in
logical order. (Your "typing-order"). Notice how the stuff that ends up
staying together on a line in your display-order 2 is contiguous in the
This is all taken care of by the bidi algorithm.
First, it has a number or rules, the purpose of which are to nail down
what is LTR and what is RTL for an entire paragraph, and whether the LTR
sections are nested in the RTL text or vice versa. (That's a rather
simplified description of the essential action of these rules).
Next, you get to talk to your layout engine and find out how much text
fits on a line. (As discussed, that always corresponds to a contiguous
section of memory).
Finally, following the bidi algorithm again, you use the results from
the first phase to reorder the text - within that line only.
When you are done, you repeat the last two steps for all remaining lines
Anyway, that's the high-level picture, leaving out all sorts of twisty
details that are built into the actual rules. So this description is
only good to help you visualize what happens. For an actual
implementation you just crank the rules.
> line line
> start end
> | |
> V V
> He said THIS IS A CAR <- typing-order
> He said RAC A SI | <- display-order 1
> He said A SI SIHT | <- display-order 2
> Lower-case: LTR text
> Upper-case: RTL text
> Is case 1 the correct way, or case 2?
This archive was generated by hypermail 2.1.5 : Mon Mar 22 2010 - 22:30:28 CST