Mercurial > emacs
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))