diff options
author | Kenichi Handa <handa@m17n.org> | 2009-12-09 00:55:55 +0000 |
---|---|---|
committer | Kenichi Handa <handa@m17n.org> | 2009-12-09 00:55:55 +0000 |
commit | fbb32105c45e020d999c63388b032f6993197476 (patch) | |
tree | fc52aa61279aa3630fcc02d9ab49236ca36f24b4 | |
parent | 8d63017d29f132d822f780408896dcb62746eb93 (diff) | |
download | emacs-fbb32105c45e020d999c63388b032f6993197476.tar.gz |
(ucs-names): Supply a sufficiently fine ranges instead of
pre-calculating accurate ranges. Iterate with bigger
gc-cons-threshold.
-rw-r--r-- | lisp/international/mule-cmds.el | 73 |
1 files changed, 32 insertions, 41 deletions
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index c13d96ec7b5..a817769c11d 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -2889,47 +2889,38 @@ on encoding." (defun ucs-names () "Return alist of (CHAR-NAME . CHAR-CODE) pairs cached in `ucs-names'." (or ucs-names - (let ((ranges - (purecopy - ;; We precompute at compile-time the ranges of chars - ;; that have names, so that at runtime, building the - ;; table can be done faster, since most of the time is - ;; spent looking for the chars that do have a name. - (eval-when-compile - (let ((ranges ()) - (first 0) - (last 0)) - (dotimes-with-progress-reporter (c #xEFFFF) - "Finding Unicode characters with names..." - (unless (or - ;; CJK Ideograph Extension Arch - (and (>= c #x3400 ) (<= c #x4dbf )) - ;; CJK Ideograph - (and (>= c #x4e00 ) (<= c #x9fff )) - ;; Private/Surrogate - (and (>= c #xd800 ) (<= c #xfaff )) - ;; CJK Ideograph Extensions B, C - (and (>= c #x20000) (<= c #x2ffff)) - (null (get-char-code-property c 'name))) - ;; This char has a name. - (if (<= c (1+ last)) - ;; Extend the current range. - (setq last c) - ;; We have to split the range. - (push (cons first last) ranges) - (setq first (setq last c))))) - (cons (cons first last) ranges))))) - name names) - (dolist (range ranges) - (let ((c (car range)) - (end (cdr range))) - (while (<= c end) - (if (setq name (get-char-code-property c 'name)) - (push (cons name c) names) - (error "Wrong range")) - (if (setq name (get-char-code-property c 'old-name)) - (push (cons name c) names)) - (setq c (1+ c))))) + (let ((bmp-ranges + '((#x0000 . #x33FF) + ;; (#x3400 . #x4DBF) CJK Ideograph Extension A + (#x4DC0 . #x4DFF) + ;; (#x4E00 . #x9FFF) CJK Ideograph + (#xA000 . #x0D7FF) + ;; (#xD800 . #xFAFF) Surrogate/Private + (#xFB00 . #xFFFD))) + (upper-ranges + '((#x10000 . #x134FF) + ;; (#x13500 . #x1CFFF) unsed + (#x1D000 . #x1FFFF) + ;; (#x20000 . #xDFFFF) CJK Ideograph Extension A, B, etc, unsed + (#xE0000 . #xE01FF))) + (gc-cons-threshold 10000000) + c end name names) + (dolist (range bmp-ranges) + (setq c (car range) + end (cdr range)) + (while (<= c end) + (if (setq name (get-char-code-property c 'name)) + (push (cons name c) names)) + (if (setq name (get-char-code-property c 'old-name)) + (push (cons name c) names)) + (setq c (1+ c)))) + (dolist (range upper-ranges) + (setq c (car range) + end (cdr range)) + (while (<= c end) + (if (setq name (get-char-code-property c 'name)) + (push (cons name c) names)) + (setq c (1+ c)))) (setq ucs-names names)))) (defvar ucs-completions (lazy-completion-table ucs-completions ucs-names) |