From: Artur Malabarba Date: Sun, 5 Jul 2015 15:44:22 +0000 (+0100) Subject: * lisp/character-fold.el (character-fold-table): X-Git-Tag: emacs-25.0.90~1563 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5516728eac58aba87a39427b7a3d1bfb8e2a19d0;p=emacs.git * lisp/character-fold.el (character-fold-table): Only fold decompositions if at least one character is non-spacing. (Bug#20975) --- diff --git a/lisp/character-fold.el b/lisp/character-fold.el index fca13bf96c1..bf5ae59f41a 100644 --- a/lisp/character-fold.el +++ b/lisp/character-fold.el @@ -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.