aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenichi Handa <[email protected]>2004-10-27 06:01:59 +0000
committerKenichi Handa <[email protected]>2004-10-27 06:01:59 +0000
commitfce59e4038c02d88aca0ba6ef06db7ceb991d279 (patch)
treed63caad886ed1cdbdd29d5bf2805c490aca502d6
parent233f3db624556da41f0edb0c0a03dc4288eeea98 (diff)
(utf-translate-cjk-unicode-range-string):
New variable. (utf-translate-cjk-set-unicode-range): New function. (utf-translate-cjk-unicode-range): Make it customizable. (utf-8-post-read-conversion): Use utf-translate-cjk-unicode-range-string.
-rw-r--r--lisp/international/utf-8.el103
1 files changed, 85 insertions, 18 deletions
diff --git a/lisp/international/utf-8.el b/lisp/international/utf-8.el
index 5a7acee0f0..02d7733e2d 100644
--- a/lisp/international/utf-8.el
+++ b/lisp/international/utf-8.el
@@ -197,10 +197,81 @@ Setting this variable outside customize has no effect."
korean-ksc5601)
"List of charsets supported by `utf-translate-cjk-mode'.")
-(defconst utf-translate-cjk-unicode-range
- '((#x2e80 . #xd7a3)
- (#xff00 . #xffef))
- "List of Unicode code ranges supported by `utf-translate-cjk-mode'.")
+(defvar utf-translate-cjk-lang-env nil
+ "Language environment in which tables for `utf-translate-cjk-mode' is loaded.
+The value nil means that the tables are not yet loaded.")
+
+(defvar utf-translate-cjk-unicode-range)
+
+;; String generated from utf-translate-cjk-unicode-range. It is
+;; suitable for an argument to skip-chars-forward.
+(defvar utf-translate-cjk-unicode-range-string nil)
+
+(defun utf-translate-cjk-set-unicode-range (range)
+ (setq utf-translate-cjk-unicode-range range)
+ (setq utf-translate-cjk-unicode-range-string
+ (let ((decode-char-no-trans
+ #'(lambda (x)
+ (cond ((< x #x100) (make-char 'latin-iso8859-1 x))
+ ((< x #x2500)
+ (setq x (- x #x100))
+ (make-char 'mule-unicode-0100-24ff
+ (+ (/ x 96) 32) (+ (% x 96) 32)))
+ ((< x #x3400)
+ (setq x (- x #x2500))
+ (make-char 'mule-unicode-2500-33ff
+ (+ (/ x 96) 32) (+ (% x 96) 32)))
+ (t
+ (setq x (- x #xe000))
+ (make-char 'mule-unicode-e000-ffff
+ (+ (/ x 96) 32) (+ (% x 96) 32))))))
+ ranges from to)
+ (dolist (elt range)
+ (setq from (max #xA0 (car elt)) to (min #xffff (cdr elt)))
+ (if (and (>= to #x3400) (< to #xE000))
+ (setq to #x33FF))
+ (cond ((< from #x100)
+ (if (>= to #xE000)
+ (setq ranges (cons (cons #xE000 to) ranges)
+ to #x33FF))
+ (if (>= to #x2500)
+ (setq ranges (cons (cons #x2500 to) ranges)
+ to #x24FF))
+ (if (>= to #x100)
+ (setq ranges (cons (cons #x100 to) ranges)
+ to #xFF)))
+ ((< from #x2500)
+ (if (>= to #xE000)
+ (setq ranges (cons (cons #xE000 to) ranges)
+ to #x33FF))
+ (if (>= to #x2500)
+ (setq ranges (cons (cons #x2500 to) ranges)
+ to #x24FF)))
+ ((< from #x3400)
+ (if (>= to #xE000)
+ (setq ranges (cons (cons #xE000 to) ranges)
+ to #x33FF))))
+ (if (<= from to)
+ (setq ranges (cons (cons from to) ranges))))
+ (mapconcat #'(lambda (x)
+ (format "%c-%c"
+ (funcall decode-char-no-trans (car x))
+ (funcall decode-char-no-trans (cdr x))))
+ ranges "")))
+ ;; This forces loading tables for utf-translate-cjk-mode.
+ (setq utf-translate-cjk-lang-env nil))
+
+(defcustom utf-translate-cjk-unicode-range '((#x2e80 . #xd7a3)
+ (#xff00 . #xffef))
+ "List of Unicode code ranges supported by `utf-translate-cjk-mode'.
+Setting this variable directly does not take effect;
+use either \\[customize] or the function
+`utf-translate-cjk-set-unicode-range'."
+ :version "21.4"
+ :type '(repeat (cons integer integer))
+ :set (lambda (symbol value)
+ (utf-translate-cjk-set-unicode-range value))
+ :group 'mule)
;; Return non-nil if CODE-POINT is in `utf-translate-cjk-unicode-range'.
(defsubst utf-translate-cjk-substitutable-p (code-point)
@@ -213,10 +284,6 @@ Setting this variable outside customize has no effect."
(setq elt nil)))
elt))
-(defvar utf-translate-cjk-lang-env nil
- "Language environment in which tables for `utf-translate-cjk-mode' is loaded.
-The value nil means that the tables are not yet loaded.")
-
(defun utf-translate-cjk-load-tables ()
"Load tables for `utf-translate-cjk-mode'."
;; Fixme: Allow the use of the CJK charsets to be
@@ -874,17 +941,17 @@ Also compose particular scripts if `utf-8-compose-scripts' is non-nil."
hash-table ch)
(set-buffer-multibyte t)
(when utf-translate-cjk-mode
- (if (not utf-translate-cjk-lang-env)
- ;; Check these characters:
- ;; "U+2e80-U+33ff", "U+ff00-U+ffef"
- ;; We may have to translate them to CJK charsets.
- (let ((range2 "$,29@(B-$,2G$,3r`(B-$,3u/(B"))
- (skip-chars-forward (concat range range2))
- (unless (eobp)
- (utf-translate-cjk-load-tables)
- (setq range (concat range range2)))
+ (unless utf-translate-cjk-lang-env
+ ;; Check these characters in utf-translate-cjk-range.
+ ;; We may have to translate them to CJK charsets.
+ (skip-chars-forward
+ (concat range utf-translate-cjk-unicode-range-string))
+ (unless (eobp)
+ (utf-translate-cjk-load-tables)
+ (setq range
+ (concat range utf-translate-cjk-unicode-range-string))))
(setq hash-table (get 'utf-subst-table-for-decode
- 'translation-hash-table)))))
+ 'translation-hash-table)))
(while (and (skip-chars-forward range)
(not (eobp)))
(setq ch (following-char))