(defconst char-fold--default-include
'((?\" """ "“" "”" "”" "„" "⹂" "〞" "‟" "‟" "❞" "❝" "❠" "“" "„" "〝" "〟" "🙷" "🙶" "🙸" "«" "»")
(?' "❟" "❛" "❜" "‘" "’" "‚" "‛" "‚" "" "❮" "❯" "‹" "›")
- (?` "❛" "‘" "‛" "" "❮" "‹")))
- (defconst char-fold--default-exclude nil)
+ (?` "❛" "‘" "‛" "" "❮" "‹")
+ (?ß "ss") ;; de
+ (?ι "ΐ") ;; el for (?ΐ "ΐ") decomposition
+ (?υ "ΰ") ;; el for (?ΰ "ΰ") decomposition
+ ))
+ (defconst char-fold--default-exclude
+ '(
+ (?и "й") ;; ru
+ ))
(defconst char-fold--default-symmetric nil)
- (defconst char-fold--previous (list char-fold--default-include
- char-fold--default-exclude
- char-fold--default-symmetric)))
+ (defvar char-fold--previous
+ (list char-fold--default-include
+ char-fold--default-exclude
+ char-fold--default-symmetric)))
\f
(eval-and-compile
\f
(defun char-fold-update-table ()
+ "Update char-fold-table only when one of the options changes its value."
(let ((new (list (or (bound-and-true-p char-fold-include)
char-fold--default-include)
(or (bound-and-true-p char-fold-exclude)
char-fold--default-exclude)
(or (bound-and-true-p char-fold-symmetric)
- char-fold--default-symmetric))))
+ char-fold--default-symmetric))))
(unless (equal char-fold--previous new)
(setq char-fold-table (char-fold-make-table)
char-fold--previous new))))
(ert-deftest char-fold--test-without-customization ()
(let* ((matches
'(
+ ("'" "’")
("e" "ℯ" "ḗ" "ë" "ë")
("ι"
"ί" ;; 1 level decomposition
"ί" ;; 2 level decomposition
- ;; FIXME:
- ;; "ΐ" ;; 3 level decomposition
+ "ΐ" ;; 3 level decomposition
)
+ ("ß" "ss")
+ ))
+ (no-matches
+ '(
+ ("и" "й")
)))
(dolist (strings matches)
- (apply 'char-fold--test-match-exactly strings))))
+ (apply 'char-fold--test-match-exactly strings))
+ (dolist (strings no-matches)
+ (apply 'char-fold--test-no-match-exactly strings))))
(ert-deftest char-fold--test-with-customization ()
:tags '(:expensive-test)
+ ;; FIXME: move some language-specific settings to defaults
(let* ((char-fold-include
- '(
- (?ß "ss") ;; de
- (?o "ø") ;; da no nb nn
- (?l "ł") ;; pl
- ))
- ;; FIXME: move language-specific settings to defaults
+ (append char-fold-include
+ '(
+ (?o "ø") ;; da no nb nn
+ (?l "ł") ;; pl
+ (?æ "ae")
+ (?→ "->")
+ (?⇒ "=>")
+ )))
(char-fold-exclude
- '(
- (?a "å") ;; sv da no nb nn
- (?a "ä") ;; sv fi et
- (?o "ö") ;; sv fi et
- (?n "ñ") ;; es
- (?и "й") ;; ru
- ))
+ (append char-fold-exclude
+ '(
+ (?a "å") ;; da no nb nn sv
+ (?a "ä") ;; et fi sv
+ (?o "ö") ;; et fi sv
+ (?n "ñ") ;; es
+ )))
(char-fold-symmetric t)
(char-fold-table (char-fold-make-table))
(matches
'(
("e" "ℯ" "ḗ" "ë" "ë")
("е" "ё" "ё")
- ("ι" "ί" "ί"
- ;; FIXME: "ΐ"
- )
+ ("ι" "ί" "ί" "ΐ")
("ß" "ss")
("o" "ø")
("l" "ł")
-
+ ("æ" "ae")
+ ("→" "->")
+ ("⇒" "=>")
))
(no-matches
'(