mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-14 16:50:58 +00:00
* lisp/character-fold.el (character-fold-table):
Only fold decompositions if at least one character is non-spacing. (Bug#20975)
This commit is contained in:
parent
1323c13978
commit
5516728eac
@ -52,7 +52,9 @@ some).")
|
||||
;; Skip trivial cases like ?a decomposing to (?a).
|
||||
(unless (or (and (eq i (car dec))
|
||||
(not (cdr dec))))
|
||||
(let ((d dec) k found multiletter)
|
||||
(let ((d dec)
|
||||
(fold-decomp t)
|
||||
k found)
|
||||
(while (and d (not found))
|
||||
(setq k (pop d))
|
||||
;; Is k a number or letter, per unicode standard?
|
||||
@ -63,20 +65,30 @@ some).")
|
||||
;; because then we don't want the first letter to match
|
||||
;; the decomposition.
|
||||
(dolist (k d)
|
||||
(when (memq (get-char-code-property k 'general-category)
|
||||
'(Lu Ll Lt Lm Lo Nd Nl No))
|
||||
(setq multiletter t)))
|
||||
(when (and fold-decomp
|
||||
(memq (get-char-code-property k 'general-category)
|
||||
'(Lu Ll Lt Lm Lo Nd Nl No)))
|
||||
(setq fold-decomp nil)))
|
||||
;; If there's no number or letter on the
|
||||
;; decomposition, take the first character in it.
|
||||
(setq found (car-safe dec)))
|
||||
;; Finally, we only fold multi-char decomposition if at
|
||||
;; least one of the chars is non-spacing (combining).
|
||||
(when fold-decomp
|
||||
(setq fold-decomp nil)
|
||||
(dolist (k dec)
|
||||
(when (and (not fold-decomp)
|
||||
(> (get-char-code-property k 'canonical-combining-class) 0))
|
||||
(setq fold-decomp t))))
|
||||
;; Add i to the list of characters that k can
|
||||
;; represent. Also possibly add its decomposition, so we can
|
||||
;; match multi-char representations like (format "a%c" 769)
|
||||
(when (and found (not (eq i k)))
|
||||
(let ((chars (cons (char-to-string i) (aref equiv k))))
|
||||
(aset equiv k
|
||||
(if multiletter chars
|
||||
(cons (apply #'string dec) chars)))))))))
|
||||
(if fold-decomp
|
||||
(cons (apply #'string dec) chars)
|
||||
chars))))))))
|
||||
table)
|
||||
|
||||
;; Add some manual entries.
|
||||
|
Loading…
Reference in New Issue
Block a user