Re: Suboptimal display-reordering in minibuffer

"Martin J. Dürst" <[email protected]> Fri, 02 Jul 2010 10:04:35 +0900
Newsgroups gmane.emacs.bidi
Organization Aoyama Gakuin University
Message-ID <[email protected]>
Hello Eli,

On 2010/07/02 2:45, Eli Zaretskii wrote:
>> Date: Thu, 01 Jul 2010 15:37:35 +0900
>> From: "Martin J. Dürst"<[email protected]>
>> CC: [email protected], [email protected]
>>
>> Hello Eli,
>>
>> On 2010/07/01 12:14, Eli Zaretskii wrote:
>>
>>> You are suggesting to insert bidirectional format characters into the
>>> buffer text in order to affect the display.  That's a no-no, IMO:
>>
>> I agree that that's a no-no, for the reasons you give below. But that's
>> not what I was suggesting or thinking about.
>
> Sorry.

No problem. I should have been clearer.

>>   What I was suggesting
>> (actually, the idea is originally from Kenichi Handa and/or Naoto
>> Takahashi) is that these bidirectional formatting characters go into the
>> text only 'virtually', e.g. in the before-string or after-string
>> properties of an overlay (see
>> http://www.gnu.org/software/emacs/elisp/html_node/Overlay-Properties.html#Overlay-Properties).
>> In that way, In my understanding, they are not part of the text buffer,
>> and will not be saved when saving the file.
>
> Got it.
>
>> Of course, if the characters in the overlay properties before-string and
>> after-string are not currently taken into account when running the bidi
>> algorithm, then that approach may not work very easily.
>
> You are right: they aren't taken into account.  I have yet to code
> support for reordering text in display strings.  To add this feature,
> I will need to solve quite a few problems.  Until I do, I won't know
> whether what you suggest is even doable with a reasonable effort.
>
> I also think that, even if doable, this is a somewhat hackish
> solution.

One thing that we should think about is what people want to happen if 
there is actual displayable text in some of these strings. I don't have 
much of an idea where this is used, but I can imagine that at least in 
some usage scenarios, one might want the text added via an overlay to be 
rendered in exactly the same way as the text in the buffer. In that 
case, it's about user requirements, even if the solution might involve 
some hacks.

> I think having a special text property that covers the text
> that needs to be reordered is a cleaner solution.

It's definitely also a viable solution, although there also might be 
some tricky issues. Say you have a property defining an embedding from 
characters 10 to 30, and another such property from characters 20 to 40. 
What exactly is that supposed to mean?

>> In any way, I think it's better to use the concepts already available in
>> the Unicode Bidi algorithm (override, embedding, marks) for improving
>> the display of XML, HTML, and other structured data and program source,
>> rather than to invent completely new concepts. Whether these concepts
>> then get transferred to the bidi algorithm via the (faked) insertion of
>> characters or via some other way (one could imagine to have properties
>> such as LRO/RLO/LRE/RLE on overlays,...) may be a secondary issue.
>
> I think the upcoming Unicode 6.0 is already headed in that direction.
> See http://www.unicode.org/reports/tr9/proposed.html#HL1.  The text
> above this explicitly says that these provisions are for XML, HTML,
> and other structured text.

HL1 is indeed being reworked, but even without that rework, it already 
provides the necessary leeway for what we want to do.

And please note that if we find out that something in 4.3, Higher-Level 
Protocols, doesn't work for us, we can always ask for an addition or 
clarification/correction. For example, in the context of programming 
languages or HTML/XML, the sentence at the end of 4.3, "When text using 
a higher-level protocol is to be converted to Unicode plain text, for 
consistent appearance formatting codes should be inserted to ensure that 
the order matches that of the higher-level protocol.", may be extremely 
counterproductive. I already have written to the relevant Unicode 
mailing list.

> So I think we will be fine doing it in Emacs.
>
>> 1) it is easier for "application-level" emacs-lisp programmers who work
>> on updating modes to improve bidi display.
>> 2) it is easier for the core implementer(s), i.e. you, because they have
>> to work with only one algorithm.
>
> I don't intend to change the bidi reordering engine in any significant
> way, to support these features.  All that's needed is a possibility to
> tell it "restrict yourself to region between buffer positions P1 and
> P2".  Actually, it just descended on me that I can easily do that with
> `narrow-to-region', since the reordering engine already honors that,
> it never goes out of the accessible portion of text.

I'm not sure I understand, but if it means that the bidi algorithm is 
just applied piecewise, that won't be enough. It may be enough for some 
simple cases, such as C programs, where the main concern is to keep text 
within string constants together, and the rest is ASCII only and 
therefore goes LTR. However, on the other hand, with some XML markup 
with e.g. element and attribute names in Hebrew, in our experience 
actual nestings (i.e. embeddings in terms of the bidi algorithm) are 
highly desirable.


I think there are also other ways of attacking the problem. What about, 
for example, a property on characters that increases the embedding level 
in a certain way? Or a property that changes the bidi category of a 
character?

Regards,    Martin.


-- 
#-# Martin J. Dürst, Professor, Aoyama Gakuin University
#-# http://www.sw.it.aoyama.ac.jp   mailto:[email protected]