emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Line wrap reconsidered


From: Yuan Fu
Subject: Re: Line wrap reconsidered
Date: Fri, 19 Jun 2020 14:03:24 -0400


> On Jun 19, 2020, at 1:47 PM, Eli Zaretskii <eliz@gnu.org> wrote:
> 
>> From: Yuan Fu <casouri@gmail.com>
>> Date: Fri, 19 Jun 2020 13:22:18 -0400
>> Cc: Lars Ingebrigtsen <larsi@gnus.org>,
>> emacs-devel@gnu.org
>> 
>>> What do you mean by "in the RTL context"?
>>> 
>>> Remember: bidi reordering can take place in two different situations:
>>> then the paragraph direction is left-to-right, and when it's
>>> right-to-left.  In the former situation, the lines begin on the left,
>>> in the latter they begin on the right.  But LTR text, such as CJK
>>> characters, will always be rendered left-to-right, no matter what is
>>> the paragraph direction.
>>> 
>>> So which "RTL context" did you mean here?
>> 
>> Oooh so there are four cases: LRT text in LTR paragraph, LRT text in RTL 
>> paragraph, RTL text in RTL paragraph, and RTL text in LTR paragraph. And the 
>> order in which the iterator draws glyphs depends on the paragraph order 
>> (although it doesn’t know it). Am I right?
> 
> You can say that there are 4 cases, yes.  But from the iterator POV,
> there are only 2: either the text of the same direction as the
> paragraph, or of the opposite direction.
> 
>>> אבגד הוזחטיכך למנן 我今天看来了本书,感觉挺有意思,名字是
>>> 《钢铁是怎样炼成的》。
> 
>>> 
>>> (I assume you are reading your email in Emacs; if not, copy/paste this
>>> text into an Emacs buffer whose bidi-paragraph-direction is nil, and
>>> look at the resulting display.)
>>> 
>>> Does the above look correct, from the Kinsoku POV?  This is how LTR
>>> CJK text will be displayed in a paragraph with right-to-left base
>>> direction.  Do you still think something needs to be flipped here?
>> 
>> Kinsoku looks right, yes. However the period (“。”) seems to be interpreted 
>> as RTL text, not sure why.
> 
> That's expected, since the period has a "weak directionality", so at
> the end of the paragraph it takes the paragraph direction.
> 
>>> We must use BOL and EOL in their logical-order meanings, otherwise the
>>> result will be utter confusion.  In the above example, the EOL
>>> character in the first line is 是, and it is not at the left edge of
>>> the line.  It is at the logical-order end of the line, i.e. the
>>> character after it in the buffer position order is the newline.  But
>>> if we had RTL characters instead of the CJK text above, the character
>>> at EOL would indeed have been displayed at the left edge of the line.
>>> 
>> 
>> I see. However, I suggest to define EOL and BOL (in kinsoku) in terms of 
>> visual edges, instead of the logical order. Because we are using this 
>> information (NOT_AT_BOL, etc) for visual layout. When we are at a window 
>> edge and ask if this character can appear at this edge, we are interested in 
>> the visual aspect rather than the logical order, if you get what I mean. 
> 
> If that works, then fine.
> 
>> BTW, what does it->bidi_p mean exactly? Does it mean bidi-display-reordering 
>> is t, or current paragraph is ‘right-to-left, or the char at point is RTL, 
>> or something else?
> 
> It means bidi reordering is in effect.  For displaying buffer text, it
> is determined by bidi-display-reordering.
> 
>> Can I know whether I’m at the left edge or the right edge?
> 
> You can, but why do you need to?

I don’t have to know if I’m at left or right edge, I just want to know if the 
iterator is drawing from right to left or left to right. What is the right way 
to know that?

Yuan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]