[Top][All Lists]

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

Re: [emacs-bidi] API for bidi reordering a string

From: Martin J. Dürst
Subject: Re: [emacs-bidi] API for bidi reordering a string
Date: Wed, 01 Sep 2010 18:06:14 +0900
User-agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv: Gecko/20100722 Eudora/3.0.4

Hello Eli,

Overall, the API makes sense. I'd personally put the levels (when extra is non-nil) in logical order, but that's a detail.

This function could be very useful for testing (assuming it uses the same logic as the built-in display reordering). On the other hand, I'm not sure what other uses you have in mind. I'm quite afraid that some people may take the existence of such a function as a license to convert a lot of text from logical to visual encoding. As I hope we all agree, that would be a bad idea, because it's a one-way street, and visual is much less flexible (e.g. reflowing lines,...).

Regards,    Martin.

On 2010/09/01 17:26, Eli Zaretskii wrote:
I'm planning on implementing the following API for reordering a
logical-order string into visual order.  Comments are welcome,
especially regarding the way the extra information is returned.

(defun bidi-reorder-string string embedding&optional extra)
   "Reorder the input STRING from logical to visual order.

This function reorders STRING according to the Unicode Bidirectional
Algorithm described in the Unicode Standard Annex #9 (UAX#9), see

Second argument EMBEDDING provides the base paragraph embedding level
for the reordering.  It is `left-to-right' for left-to-right
paragraphs, `right-to-left' for right-to-left paragraphs, or nil for
neutral paragraphs.  In the latter case, the actual base paragraph
level is determined from the string itself, using the UAX#9 rules.

Value is the reordered string.  For STRING without any characters
from right-to-left scripts, such as Arabic or Hebrew, this function
returns a copy of the original STRING, possibly with a text property
\(see below).

Optional argument EXTRA non-nil means return additional information
about the results of reordering.  This information is recorded in the
value of the `bidi-info' text property of the returned string.  The
value is a vector of the form:


EMBEDDING is the actual base paragraph embedding level.  It is
different from the input arg EMBEDDING only if the latter is nil.

LOG-TO-VIS is a vector of character indices mapping the original
logical-order STRING to the reordered visual-order string.  The zeroth
element of LOG-TO-VIS gives the index of the first character of STRING
in the reordered string output by the function, the next element gives
the index of the second character, etc.  For example, if the
logical-order string ABCDE is reordered into EDCBA, then the zeroth
element of LOG-TO-VIS will be 4, the 1st element will be 3, etc.

VIS-TO-LOG is a vector of character indices for the reverse mapping of
the characters in the visual-order string back to its logical-order

LEVELS is a vector of resolved levels, one each for every character in
the reordered string.  Resolved levels are numbers between zero and
63, with even levels indicating the left-to-right directionality and
odd levels indicating the right-to-left directionality.  Note that the
levels are specified in the visual order, i.e. they correspond to
characters in the reordered string returned by the function."

emacs-bidi mailing list

#-# Martin J. Dürst, Professor, Aoyama Gakuin University
#-# http://www.sw.it.aoyama.ac.jp   mailto:address@hidden

reply via email to

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