aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenichi Handa2009-06-30 01:51:08 +0000
committerKenichi Handa2009-06-30 01:51:08 +0000
commitdbff07a260704e19f6c82c157a2f57dfb8b3793c (patch)
tree2e65a9818fee43a844a164a52dae2918194c2b31
parentfd46e8939584ce23c85445fc9257305febe923e6 (diff)
downloademacs-dbff07a260704e19f6c82c157a2f57dfb8b3793c.tar.gz
emacs-dbff07a260704e19f6c82c157a2f57dfb8b3793c.zip
(cjk-char-width-table): Delete it.
(cjk-char-width-table-list): New variable. (use-cjk-char-width-table): New arg local-name. (use-default-char-width-table): Fix for the case that Emacs is already using the default char-width-table.
-rw-r--r--lisp/international/characters.el62
1 files changed, 45 insertions, 17 deletions
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index 7b694b19759..a300f15df58 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -1028,27 +1028,55 @@ Combining diacritic or mark (Unicode General Category M)")
1028 (lambda (range ignore) (set-char-table-range char-width-table range 2)) 1028 (lambda (range ignore) (set-char-table-range char-width-table range 2))
1029 'arabic-2-column) 1029 'arabic-2-column)
1030 1030
1031(defvar cjk-char-width-table 1031;; Internal use only.
1032 (let ((table (make-char-table nil))) 1032;; Alist of locale symbol vs charsets. In a language environment
1033 (dolist (charset '(big5 chinese-gb2312 chinese-cns11643-1 1033;; corresponding to the locale, width of characters in the charsets is
1034 japanese-jisx0208 cp932-2-byte korean-ksc5601)) 1034;; set to 2. Each element has the form:
1035 (map-charset-chars #'(lambda (range arg) 1035;; (LOCALE TABLE (CHARSET (FROM-CODE . TO-CODE) ...) ...)
1036 (set-char-table-range table range 2)) 1036;; LOCALE: locale symbol
1037 charset)) 1037;; TABLE: char-table used for char-width-table, initially nil.
1038 (optimize-char-table table) 1038;; CAHRSET: character set
1039 (set-char-table-parent table char-width-table) 1039;; FROM-CODE, TO-CODE: range of code-points in CHARSET
1040 table) 1040
1041 "Character width table used in CJK language environment.") 1041(defvar cjk-char-width-table-list
1042 1042 '((ja_JP nil (japanese-jisx0208 (#x2121 . #x287E))
1043(defun use-cjk-char-width-table () 1043 (cp932-2-byte (#x8140 . #x879F)))
1044 "Internal use only. 1044 (zh_CN nil (chinese-gb2312 (#x2121 . #x297E)))
1045Setup char-width-table appropriate for CJK language environment." 1045 (zh_HK nil (big5-hkscs (#xA140 . #xA3FE) (#xC6A0 . #xC8FE)))
1046 (setq char-width-table cjk-char-width-table)) 1046 (zh_TW nil (big5 (#xA140 . #xA3FE))
1047 (chinese-cns11643-1 (#x2121 . #x427E)))
1048 (ko_KR nil (korean-ksc5601 (#x2121 . #x2C7E)))))
1049
1050;; Internal use only.
1051;; Setup char-width-table appropriate for a language environment
1052;; corresponding to LOCALE-NAME (symbol).
1053
1054(defun use-cjk-char-width-table (locale-name)
1055 (while (char-table-parent char-width-table)
1056 (setq char-width-table (char-table-parent char-width-table)))
1057 (let ((slot (assq locale-name cjk-char-width-table-list))
1058 table)
1059 (or slot (error "Unknown locale for CJK language environment: %s"
1060 locale-name))
1061 (unless (nth 1 slot)
1062 (let ((table (make-char-table nil)))
1063 (dolist (charset-info (nthcdr 2 slot))
1064 (let ((charset (car charset-info)))
1065 (dolist (code-range (cdr charset-info))
1066 (map-charset-chars #'(lambda (range arg)
1067 (set-char-table-range table range 2))
1068 charset nil
1069 (car code-range) (cdr code-range)))))
1070 (optimize-char-table table)
1071 (set-char-table-parent table char-width-table)
1072 (setcar (cdr slot) table)))
1073 (setq char-width-table (nth 1 slot))))
1047 1074
1048(defun use-default-char-width-table () 1075(defun use-default-char-width-table ()
1049 "Internal use only. 1076 "Internal use only.
1050Setup char-width-table appropriate for non-CJK language environment." 1077Setup char-width-table appropriate for non-CJK language environment."
1051 (setq char-width-table (char-table-parent cjk-char-width-table))) 1078 (while (char-table-parent char-width-table)
1079 (setq char-width-table (char-table-parent char-width-table))))
1052 1080
1053(optimize-char-table (standard-case-table)) 1081(optimize-char-table (standard-case-table))
1054(optimize-char-table (standard-syntax-table)) 1082(optimize-char-table (standard-syntax-table))