diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 5 | ||||
| -rw-r--r-- | lisp/subr.el | 31 |
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 @@ | |||
| 1 | 2011-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 | |||
| 1 | 2011-08-12 Stefan Monnier <monnier@iro.umontreal.ca> | 6 | 2011-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. |
| 3544 | If STR ends in right-to-left (RTL) script, return a string | 3544 | If STR contains right-to-left (RTL) script, return a string |
| 3545 | consisting of STR followed by an invisible left-to-right | 3545 | consisting of STR followed by a terminating invisible |
| 3546 | mark (LRM) character. Otherwise, return STR." | 3546 | left-to-right mark (LRM) character. |
| 3547 | |||
| 3548 | The LRM character marks the end of an RTL segment, and resets the | ||
| 3549 | display direction of any subsequent text to left-to-right. | ||
| 3550 | \(Otherwise, some of that text might be displayed as part of the | ||
| 3551 | RTL segment, based on the bidirectional display algorithm.) | ||
| 3552 | |||
| 3553 | If 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 | ||