From: Artur Malabarba <bruce.connor.am@gmail.com>
Date: Fri, 27 Nov 2015 12:01:12 +0000 (+0000)
Subject: * lisp/character-fold.el: Allow complex chars to match their decomposition
X-Git-Tag: emacs-25.0.90~628
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a5f2970207d792e5f5d40160485007f282a0569d;p=emacs.git

* lisp/character-fold.el: Allow complex chars to match their decomposition

(character-fold-table): When a character's decomposition does not
involve a formatting tag (i.e., if it has an "exact" description via
other characters), then this character is allowed to match the
decomposition.
---

diff --git a/lisp/character-fold.el b/lisp/character-fold.el
index 3d19d29b1f6..4b526c20277 100644
--- a/lisp/character-fold.el
+++ b/lisp/character-fold.el
@@ -38,9 +38,15 @@
       (map-char-table
        (lambda (char decomp)
          (when (consp decomp)
-           ;; Discard a possible formatting tag.
-           (when (symbolp (car decomp))
-             (setq decomp (cdr decomp)))
+           (if (symbolp (car decomp))
+               ;; Discard a possible formatting tag.
+               (setq decomp (cdr decomp))
+             ;; If there's no formatting tag, ensure that char matches
+             ;; its decomp exactly.  This is because we want 'ä' to
+             ;; match 'ä', but we don't want '¹' to match '1'.
+             (aset equiv char
+                   (cons (apply #'string decomp)
+                         (aref equiv char))))
            ;; Finally, figure out whether char has a simpler
            ;; equivalent (char-aux). If so, ensure that char-aux
            ;; matches char and maybe its decomp too.