# HG changeset patch # User Dave Love # Date 1040253710 0 # Node ID 49c591ef85fb1b48dde76ed61919cdc405c9f36e # Parent f4d223f5f6efe4133b0c63bf84d60224aeb015f0 (optimize-char-coding-system-table): New. (register-char-codings): Use it. diff -r f4d223f5f6ef -r 49c591ef85fb lisp/international/mule.el --- 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))