From 84dc47fd3e183ae2346e929894c8b189f7a8c1af Mon Sep 17 00:00:00 2001 From: Dave Love Date: Wed, 18 Dec 2002 23:21:50 +0000 Subject: [PATCH] (optimize-char-coding-system-table): New. (register-char-codings): Use it. --- lisp/international/mule.el | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 3eaf3dc61ce..0a9751b984c 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -592,6 +592,25 @@ character code range. Thus FUNC should iterate over [START, END]." (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 @@ CODING-SYSTEM as a general one which can encode all characters." (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)) -- 2.39.2