diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2003-05-18 21:02:22 +0000 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2003-05-18 21:02:22 +0000 |
commit | 2254377e6767f12326b26213f1105cf0f806b514 (patch) | |
tree | 3a93d04076246b6904b2842d7e6974b80aa3f03c /lisp/language/china-util.el | |
parent | 462a7ed6142961baf770eac8141bbe43192cbd45 (diff) | |
download | emacs-2254377e6767f12326b26213f1105cf0f806b514.tar.gz |
(hz-set-msb-table): Build when compiling.
(big5-to-cns): Pre-build the alist when compiling.
Diffstat (limited to 'lisp/language/china-util.el')
-rw-r--r-- | lisp/language/china-util.el | 77 |
1 files changed, 34 insertions, 43 deletions
diff --git a/lisp/language/china-util.el b/lisp/language/china-util.el index 2be6ebcdff4..57590d8a665 100644 --- a/lisp/language/china-util.el +++ b/lisp/language/china-util.el @@ -1,6 +1,6 @@ ;;; china-util.el --- utilities for Chinese -*- coding: iso-2022-7bit -*- -;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. +;; Copyright (C) 1995, 2003 Electrotechnical Laboratory, JAPAN. ;; Licensed to the Free Software Foundation. ;; Copyright (C) 1995, 2001 Free Software Foundation, Inc. @@ -64,15 +64,16 @@ "Flag to tell if we should care line continuation convention of Hz.") (defconst hz-set-msb-table - (let ((str (make-string 127 0)) - (i 0)) - (while (< i 33) - (aset str i i) - (setq i (1+ i))) - (while (< i 127) - (aset str i (+ i 128)) - (setq i (1+ i))) - str)) + (eval-when-compile + (let ((chars nil) + (i 0)) + (while (< i 33) + (push i chars) + (setq i (1+ i))) + (while (< i 127) + (push (+ i 128) chars) + (setq i (1+ i))) + (apply 'string (nreverse chars))))) ;;;###autoload (defun decode-hz-region (beg end) @@ -171,6 +172,7 @@ Return the length of resulting text." ;; Many kudos to Himi! The used code has been adapted from his ;; mule-ucs package. +(eval-when-compile (defun big5-to-flat-code (num) "Convert NUM in Big 5 encoding to a `flat code'. 0xA140 will be mapped to position 0, 0xA141 to position 1, etc. @@ -226,54 +228,43 @@ mapped will be represented with the byte 0xFF. The return value is the filled translation table." - (let (chartable - elem - result + (let ((chartable (make-char-table 'translation-table #xFF)) char big5 i end codepoint charset) - (setq chartable (make-char-table 'translation-table #xFF)) - (while alist - (setq elem (car alist) - char (car elem) - big5 (cdr elem) - alist (cdr alist)) + (dolist (elem alist) + (setq char (car elem) + big5 (cdr elem)) (cond ((and (consp char) (consp big5)) - (setq i (big5-to-flat-code (car big5)) - end (big5-to-flat-code (cdr big5)) - codepoint (euc-to-flat-code (cdr char)) - charset (car char)) - (while (>= end i) - (aset chartable - (decode-big5-char (flat-code-to-big5 i)) - (apply (function make-char) - charset - (flat-code-to-euc codepoint))) - (setq i (1+ i) - codepoint (1+ codepoint))) - ) + (setq i (big5-to-flat-code (car big5)) + end (big5-to-flat-code (cdr big5)) + codepoint (euc-to-flat-code (cdr char)) + charset (car char)) + (while (>= end i) + (aset chartable + (decode-big5-char (flat-code-to-big5 i)) + (apply (function make-char) + charset + (flat-code-to-euc codepoint))) + (setq i (1+ i) + codepoint (1+ codepoint)))) ((and (char-valid-p char) (numberp big5)) - (setq i (decode-big5-char big5)) - (aset chartable i char) - ) + (setq i (decode-big5-char big5)) + (aset chartable i char)) (t - (error "Unknown slot type: %S" elem) - ) - ) - ) + (error "Unknown slot type: %S" elem)))) ;; the return value - chartable - ) -) + chartable))) ;; All non-CNS encodings are commented out. (define-translation-table 'big5-to-cns + (eval-when-compile (expand-euc-big5-alist '( ;; Symbols @@ -420,7 +411,7 @@ The return value is the filled translation table." (?$(I=~(B . #xF9DB) (?$(IK\(B . #xF9DC) ) - ) + )) ) ;; |