- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Mon, 26 Mar 2012 18:28:19 -0700
- To: public-i18n-bidi@w3.org, "www-style@w3.org" <www-style@w3.org>
On 02/20/2012 04:58 AM, Aharon (Vladimir) Lanin wrote: <http://lists.w3.org/Archives/Public/public-i18n-bidi/2012JanMar/0040.html> > The following is too long, but please do read. [...] Thank you for your lengthy and insightful comments! I may be slow in responding, but I greatly appreciate your clear thinking and clear explanations. > In a nutshell, the current definition of unicode-bidi:plaintext in > http://dev.w3.org/csswg/css3-writing-modes/#unicode-bidi > is unclear about how unicode-bidi:plaintext is supposed to behave > when it is in effect on an inline element. Please note that originally, > e.g. in > http://www.w3.org/TR/2011/WD-css3-writing-modes-20110428/, > the definition said that "this value has no effect on inline elements". > And later, in > http://www.w3.org/TR/2011/WD-css3-writing-modes-20110531/, > it said that "for inline elements, this value is equivalent to ‘isolate’". > This put them in a separate bidi paragraph, but did *not* determine > this paragraph's base directionality. The current definition, however, > says the following: > > # For the purposes of the Unicode bidirectional algorithm, the base > # directionality of each bidi paragraph for which the element forms > # the containing block is determined not by the element's computed > # ‘direction’ as usual, but by following the heuristic in rules P2 > # and P3 of the Unicode bidirectional algorithm. For inline elements, > # this value behaves as for ‘isolate’, except, as with block containers, > # **the base directionality is determined by following the Unicode > # heuristic instead of by using the ‘direction’ value. > > This gives no clue to the following question: for which paragraphs, > exactly, does a unicode-bidi:plaintext element that is not a containing > block for anything determine the base directionality? > > Given that the definition says that such elements are to behave as for > unicode-bidi:isolate, we do at least know that paragraphs never straddle > the boundary of a unicode-bidi:plaintext element. So, should the unicode >-bidi:plaintext on an element set the base directionality of *all* > paragraphs contained by the element? Should it apply to: > > - Both paragraphs in > <span "style=unicode-bidi:plaintext">Line 1.<br/>שורה 2.</span>? > - All three paragraphs in > <span "style=unicode-bidi: plaintext">Line 1. > <span style="display:block">שורה 2.</span>שורה 3.</span>? > - Both paragraphs in > <span "style=unicode-bidi: plaintext">He said > '<span style="unicode-bidi:isolate">שלום!</span>'.</span>? My answers would be, - yes - for lines 1 and 3 only - for the outer paragraph only > [...] > > If so, however, the unicode-bidi:plaintext heuristic also should not apply > to the paragraph in the inside span in [the second example]. > > That is, "שורה 2!" should be displayed LTR by inheritance from the div, > not RTL by the unicode-bidi:plaintext on the outside span, even though > the outside span contains it. > > To reflect this, I propose that the definition of unicode-bidi:plaintext > be modified as follows: > > | plaintext > | This value behaves as for ‘isolate’, except that for the purposes of > | the Unicode bidirectional algorithm, the base directionality of each > | bidi paragraph /immediately contained/ by the element is determined > | not by the element's computed ‘direction’ as usual, but by following > | the heuristic in rules P2 and P3 of the Unicode bidirectional algorithm. > | /A paragraph is immediately contained by an element if it is contained > | by it, but is not contained by a descendant element that puts its > | content into a separate bidi paragraph (or paragraphs)/, e.g. an element > | with display:block, position:absolute, unicode-bidi:isolate, > | unicode-bidi:plaintext, and so on. > > Please note that this gets rid of the reliance on containing blocks, > replacing it instead with the notion of the "immediately containing" > element for a given bidi paragraph. It then makes no difference whether > the element is inline or a block. [Note about this better matching > Firefox and Webkits behavior wrt embedded blocks.] I've tweaked the definition of "immediately contained" a bit to try to make it clearer, but otherwise accepted your edits: # This value behaves as ''isolate'' except that for the purposes of # the Unicode bidirectional algorithm, the base directionality of each # bidi paragraph immediately contained by the element is determined not # by the element's computed 'direction' as usual, but by following the # heuristic in rules P2 and P3 of the Unicode bidirectional algorithm. # An element immediately contains a bidi paragraph if it is a block # container or bidi-isolating inline and no other such elements intervene # between it and the bidi paragraph. Alternatively, the last three lines could be # A bidi paragraph is immediately contained by an element if the element # is a block container or bidi-isolating inline and no other such elements # intervene between it and the bidi paragraph. > Now, let's go on to alignment. [...] There are a couple of issues here. > > - What exactly does "In the case of ‘unicode-bidi: plaintext’" mean? I > think it means the case where the element whose text-align (or text-align-last) > we are trying to apply also has unicode-bidi:plaintext. Yes, that is indeed what's meant. > - The definition assumes that a "paragraph" can contain several line boxes, > but not the other way around. This is not true. Take, for example, [...] > > I propose that just as an element's unicode-bidi:plaintext only affects the > directionality of paragraphs that the element immediately contains, so too > it is *only these* paragraphs' directionality that should affect the alignment > of the line boxes in the element when the element is a containing block. Agreed. > That is, let's note that if two distinct paragraphs are immediately contained > by the same element, they can not share a line box. (If they did, they would > have to be a single paragraph.) Thus, each line box in a containing block > belongs to exactly one of the block's immediately contained paragraphs. > > Now, the amended definition for alignment: > > | The start and end edges of a line box are relative to a direction > | determined as follows. If a line box's containing block has > | unicode-bidi:plaintext, use the base directionality of the containing > | block's immediately contained paragraph to which the line box belongs. > | Otherwise, use the containing block's computed direction. So, how about this: | The start and end edges of a line box are determined by the inline base | direction of the "bidi paragraph" to which it belongs. In most cases, | this means using the containing block's computed 'direction'. However if | containing block has ''unicode-bidi: plaintext'' [[!CSS3-WRITING-MODES]], | the inline base direction of its line boxes will be determined by the bidi | paragraphs it contains. (I want to put the most common case up first, which I think helps make the paragraph understandable.) > Please note that this means that unicode-bidi:plaintext does not affect > alignment except when applied to an element that is a containing block. Good, I think this should be the intent. :) > [lots of examples] > And finally, let's take an example like the one in the current spec. > As you will see, my expectations differ from those currently stated > in the spec: Fixed the incorrect example. I should probably add some more of yours, too. :) ~fantasai
Received on Tuesday, 27 March 2012 01:28:56 UTC