Commit f9337bc3 authored by Robert Pluim's avatar Robert Pluim

Follow decomposition chains when constructing char-fold-table

* lisp/char-fold.el (char-fold-make-table): Decompose the
decomposition of each character, adding equivalences to the original
character, until no more decompositions are left.
parent 9a83ecb6
Pipeline #2537 passed with stage
in 69 minutes and 15 seconds
......@@ -1167,6 +1167,14 @@ and case-sensitivity together with search strings in the search ring.
+++
*** 'flush-lines' prints and returns the number of deleted matching lines.
---
*** 'char-fold-to-regexp' now matches more variants of a base character.
The table used to check for equivalence of characters is now built
using the complete chain of unicode decompositions of a character,
rather than stopping after one level, such that searching for
e.g. GREEK SMALL LETTER IOTA will now also find GREEK SMALL LETTER
IOTA WITH OXIA.
** Debugger
+++
......
......@@ -78,6 +78,25 @@
(cons (char-to-string char)
(aref equiv (car decomp))))))))
(funcall make-decomp-match-char decomp char)
;; Check to see if the first char of the decomposition
;; has a further decomposition. If so, add a mapping
;; back from that second decomposition to the original
;; character. This allows e.g. 'ι' (GREEK SMALL LETTER
;; IOTA) to match both the Basic Greek block and
;; Extended Greek block variants of IOTA +
;; diacritical(s). Repeat until there are no more
;; decompositions.
(let ((dec decomp)
next-decomp)
(while dec
(setq next-decomp (char-table-range table (car dec)))
(when (consp next-decomp)
(when (symbolp (car next-decomp))
(setq next-decomp (cdr next-decomp)))
(if (not (eq (car dec)
(car next-decomp)))
(funcall make-decomp-match-char (list (car next-decomp)) char)))
(setq dec next-decomp)))
;; Do it again, without the non-spacing characters.
;; This allows 'a' to match 'ä'.
(let ((simpler-decomp nil)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment