Re: CSS3 Text: Multi-Directional Scripts in Vertical Inline Progression

Michel Suignard wrote:
> In the introduction [1] (The BIDI problem), there are examples of
> upright (Chinese and latin) with a left-to-right block progression. The
> normal 'block direction' of such a case is 'rtl' (top to bottom
> physically), this means that L characters (as shown in the picture) go
> top to bottom (through bidi reordering) when their glyph orientation is
> -90deg clockwise, but if upright, no bidi reordering occurs so they will
> flow with the normal block direction which is top to bottom (which is
> the desired effect). Of course you can force a block direction to be
> 'ltr' which would get you in trouble as you demonstrate, but why do it
> when simply using 'direction:rtl' on the block would avoid the issue.

The reason why you should /not/ use 'direction: rtl' on a Chinese or
English text:

   element { writing-mode: tb-lr }

   * { block-progression: tb !important }

The net result is "writing-mode: rl", which is *inappropriate* for
horizontal left-to-right scripts.

'direction' controls the directionality of the element's text. This is
different from the stylistic inline progression, and you get problems
if you conflate the two.

> The new case which is really fascinating is the 'context' orientation.
> ... It could be added as a new keyword to both glyph-orientation-horizontal
> and glyph-orientation-vertical.

Overloading glyph-orientation like this bothers me, as it's not
just the glyph's orientation that's affected, but the ordering of
characters as well. "glyph-orientation: context", for example, makes
no sense whatsoever. In the "upright" style, the inline progression
depends on the glyph orientation -- but in the "context" style, the
glyph orientation depends on the inline progression. Nonetheless,
these two styles are parallel; they're either-or, and they belong in
one property.

> However I think you are not giving enough details about the horizontal case
> (block-progression: 'tb'). 

That was intentional. You'll note that the title of that page
says vertical layout. :)

> In that case, each Mongolian word will (should?) be displayed top to
> bottom with each following word going on the right of the previous one
> (I have seen that layout in mixed German/Mongolian litterature samples).
> In that case each vertical fragment of the vertical script is by itself
> a 'L' entity. For that to work you need a line-stacking-strategy
> allowing these vertical fragments to expend the line height.

Yes, that's one possibility. However, longer runs of Mongolian will
often run horizontally, as you can see in the Chinese/Mongolian
pages. (I found an English book, too, in which inline Mongolian runs
left to right.) The kind of layout you describe is like having each
Mongolian word inside its own inline block. It's therefore much more
complicated, and, I think, not a necessary addition to CSS3 Text.

If the inline progression is right-to-left, it would make sense for
Mongolian to also go from right to left. This kind of contextual
progression is what the "inline" (context) value should do: if the
block's inline progression is right-to-left, it should go from right
to left as well, not left to right. Right now it seems they're using
overrides for this [1], which IMO should be avoided. (It doesn't
handle mixed scripts very well.)

> As I have already completely separated 'direction' and
> 'block-progression' in my current draft it is reasonably easy to add
> these new concepts in the draft.




Received on Monday, 7 April 2003 10:57:32 UTC