Commit ae63e572 authored by Kenichi Handa's avatar Kenichi Handa
Browse files

(ucs-names): Supply a sufficiently fine ranges instead of

pre-calculating accurate ranges.  Iterate with bigger
gc-cons-threshold.
parent e2f3c692
2009-12-09 Kenichi Handa <handa@m17n.org>
* international/mule-cmds.el (ucs-names): Supply a sufficiently
fine ranges instead of pre-calculating accurate ranges. Iterate
with bigger gc-cons-threshold.
2009-12-08 Dan Nicolaescu <dann@ics.uci.edu>
Add support for stashing a snapshot of the current tree.
......
......@@ -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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment