changeset 48891:49c591ef85fb

(optimize-char-coding-system-table): New. (register-char-codings): Use it.
author Dave Love <fx@gnu.org>
date Wed, 18 Dec 2002 23:21:50 +0000
parents f4d223f5f6ef
children 2f4ee0c9b5be
files lisp/international/mule.el
diffstat 1 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/international/mule.el	Wed Dec 18 23:19:01 2002 +0000
+++ b/lisp/international/mule.el	Wed Dec 18 23:21:50 2002 +0000
@@ -592,6 +592,25 @@
 		 (make-char charset (+ i start) start)
 		 (make-char charset (+ i start) (+ start chars -1)))))))
 
+(defun optimize-char-coding-system-table ()
+  "Optimize `char-coding-system-table'.
+Elements which compare `equal' are modified to share the same list."
+  (let (cache)
+    (map-char-table
+     (lambda (k v)
+       ;; This doesn't worry about elements which are permutations of
+       ;; each other.  As it is, with utf-translate-cjk on and
+       ;; code-pages loaded, the table has ~50k elements, which are
+       ;; reduced to ~1k.  (`optimize-char-table' might win if
+       ;; permutations were eliminated, but that's probably a small
+       ;; effect and not easy to test.)
+       (let ((existing (car (member v cache))))
+	 (if existing
+	     (aset char-coding-system-table k existing)
+	   (push v cache))))
+     char-coding-system-table))
+  (optimize-char-table char-coding-system-table))
+
 (defun register-char-codings (coding-system safe-chars)
   "Add entries for CODING-SYSTEM to `char-coding-system-table'.
 If SAFE-CHARS is a char-table, its non-nil entries specify characters
@@ -644,9 +663,9 @@
 			       (generic-char-p key))
 		     (push charset partials)))))))
        safe-chars)
+      (optimize-char-coding-system-table)
       (set-char-table-extra-slot char-coding-system-table 1 partials))))
 
-
 (defun make-subsidiary-coding-system (coding-system)
   "Make subsidiary coding systems (eol-type variants) of CODING-SYSTEM."
   (let ((coding-spec (coding-system-spec coding-system))