aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorChong Yidong2011-08-12 11:43:30 -0400
committerChong Yidong2011-08-12 11:43:30 -0400
commit9ccaaa4be77d1698784cceb983ef987cc80212c2 (patch)
tree4b9f4e801d8a5069933a3b2bad23d3e62cdb0c60 /lisp
parent6cd18349b892a5c432991e8231364e7a4d1ea33d (diff)
downloademacs-9ccaaa4be77d1698784cceb983ef987cc80212c2.tar.gz
emacs-9ccaaa4be77d1698784cceb983ef987cc80212c2.zip
Fix behavior of string-mark-left-to-right.
* lisp/subr.el (string-mark-left-to-right): Search the entire string for RTL script, not just the terminating character. Doc fix.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/subr.el31
2 files changed, 26 insertions, 10 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bde9d54cfa2..b9cf5367bf0 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
12011-08-12 Chong Yidong <cyd@stupidchicken.com>
2
3 * subr.el (string-mark-left-to-right): Search the entire string
4 for RTL script, not just the terminating character. Doc fix.
5
12011-08-12 Stefan Monnier <monnier@iro.umontreal.ca> 62011-08-12 Stefan Monnier <monnier@iro.umontreal.ca>
2 7
3 * progmodes/js.el (js-syntax-propertize, js-syntax-propertize-regexp): 8 * progmodes/js.el (js-syntax-propertize, js-syntax-propertize-regexp):
diff --git a/lisp/subr.el b/lisp/subr.el
index a897da1d9ba..a4251b6fee6 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -3540,18 +3540,29 @@ to case differences."
3540 str2 0 (length str1) ignore-case))) 3540 str2 0 (length str1) ignore-case)))
3541 3541
3542(defun string-mark-left-to-right (str) 3542(defun string-mark-left-to-right (str)
3543 "Return a string that can be safely embedded in left-to-right text. 3543 "Return a string that can be safely inserted in left-to-right text.
3544If STR ends in right-to-left (RTL) script, return a string 3544If STR contains right-to-left (RTL) script, return a string
3545consisting of STR followed by an invisible left-to-right 3545consisting of STR followed by a terminating invisible
3546mark (LRM) character. Otherwise, return STR." 3546left-to-right mark (LRM) character.
3547
3548The LRM character marks the end of an RTL segment, and resets the
3549display direction of any subsequent text to left-to-right.
3550\(Otherwise, some of that text might be displayed as part of the
3551RTL segment, based on the bidirectional display algorithm.)
3552
3553If STR contains no RTL characters, return STR."
3547 (unless (stringp str) 3554 (unless (stringp str)
3548 (signal 'wrong-type-argument (list 'stringp str))) 3555 (signal 'wrong-type-argument (list 'stringp str)))
3549 (if (and (> (length str) 0) 3556 (let ((len (length str))
3550 (eq (get-char-code-property (aref str (1- (length str))) 3557 (n 0)
3551 'bidi-class) 3558 rtl-found)
3552 'R)) 3559 (while (and (not rtl-found) (< n len))
3553 (concat str (propertize (string ?\x200e) 'invisible t)) 3560 (setq rtl-found (memq (get-char-code-property
3554 str)) 3561 (aref str n) 'bidi-class) '(R AL RLO))
3562 n (1+ n)))
3563 (if rtl-found
3564 (concat str (propertize (string ?\x200e) 'invisible t))
3565 str)))
3555 3566
3556;;;; invisibility specs 3567;;;; invisibility specs
3557 3568