]> git.eshelyaron.com Git - emacs.git/commitdiff
(ispell-unified-chars-table): New variable.
authorKenichi Handa <handa@m17n.org>
Thu, 13 Jan 2005 04:33:05 +0000 (04:33 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 13 Jan 2005 04:33:05 +0000 (04:33 +0000)
(ispell-get-decoded-string): New function.
(ispell-get-casechars, ispell-get-not-casechars)
(ispell-get-otherchars): Call ispell-get-decoded-string.

lisp/textmodes/ispell.el

index f3a7616bfd674a9b9fa3783d1ae0223dbc4d65f0..0c4aeb1bd244c0a76ec56349837453ffe7f546d2 100644 (file)
@@ -1074,15 +1074,54 @@ Protects against bogus binding of `enable-multibyte-characters' in XEmacs."
       (decode-coding-string str (ispell-get-coding-system))
     str))
 
+(put 'ispell-unified-chars-table 'char-table-extra-slots 0)
+
+;; Char-table that maps an Unicode character (charset:
+;; latin-iso8859-1, mule-unicode-0100-24ff, mule-unicode-2500-34ff) to
+;; a string in which all equivalent characters are listed.
+
+(defconst ispell-unified-chars-table
+  (let ((table (make-char-table 'ispell-unified-chars-table)))
+    (map-char-table
+     #'(lambda (c v)
+        (if (and v (/= c v))
+            (let ((unified (or (aref table v) (string v))))
+              (aset table v (concat unified (string c))))))
+     ucs-mule-8859-to-mule-unicode)
+    table))
+
+;; Return a string decoded from Nth element of the current dictionary
+;; while splice equivalent characters into the string.  This splicing
+;; is done only if the string is a regular expression of the form
+;; "[...]" because, otherwise, splicing will result in incorrect
+;; regular expression matching.
+
+(defun ispell-get-decoded-string (n)
+  (let* ((slot (assoc ispell-dictionary ispell-dictionary-alist))
+        (str (nth n slot)))
+    (when (and (> (length str) 0)
+              (not (multibyte-string-p str)))
+      (setq str (ispell-decode-string str))
+      (if (and (= (aref str 0) ?\[)
+              (eq (string-match "\\]" str) (1- (length str))))
+         (setq str
+               (string-as-multibyte
+                (mapconcat
+                 #'(lambda (c)
+                     (let ((unichar (aref ucs-mule-8859-to-mule-unicode c)))
+                       (if unichar
+                           (aref ispell-unified-chars-table unichar)
+                         (string c))))
+                 str ""))))
+      (setcar (nthcdr n slot) str))
+    str))
+
 (defun ispell-get-casechars ()
-  (ispell-decode-string
-   (nth 1 (assoc ispell-dictionary ispell-dictionary-alist))))
+  (ispell-get-decoded-string 1))
 (defun ispell-get-not-casechars ()
-  (ispell-decode-string
-   (nth 2 (assoc ispell-dictionary ispell-dictionary-alist))))
+  (ispell-get-decoded-string 2))
 (defun ispell-get-otherchars ()
-  (ispell-decode-string
-   (nth 3 (assoc ispell-dictionary ispell-dictionary-alist))))
+  (ispell-get-decoded-string 3))
 (defun ispell-get-many-otherchars-p ()
   (nth 4 (assoc ispell-dictionary ispell-dictionary-alist)))
 (defun ispell-get-ispell-args ()