[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs/lisp/international characters.el
From: |
Kenichi Handa |
Subject: |
[Emacs-diffs] emacs/lisp/international characters.el |
Date: |
Tue, 30 Jun 2009 01:51:08 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Kenichi Handa <handa> 09/06/30 01:51:08
Modified files:
lisp/international: characters.el
Log message:
(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.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/international/characters.el?cvsroot=emacs&r1=1.85&r2=1.86
Patches:
Index: characters.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/international/characters.el,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -b -r1.85 -r1.86
--- characters.el 17 Mar 2009 07:14:45 -0000 1.85
+++ characters.el 30 Jun 2009 01:51:08 -0000 1.86
@@ -1028,27 +1028,55 @@
(lambda (range ignore) (set-char-table-range char-width-table range 2))
'arabic-2-column)
-(defvar cjk-char-width-table
+;; Internal use only.
+;; Alist of locale symbol vs charsets. In a language environment
+;; corresponding to the locale, width of characters in the charsets is
+;; set to 2. Each element has the form:
+;; (LOCALE TABLE (CHARSET (FROM-CODE . TO-CODE) ...) ...)
+;; LOCALE: locale symbol
+;; TABLE: char-table used for char-width-table, initially nil.
+;; CAHRSET: character set
+;; FROM-CODE, TO-CODE: range of code-points in CHARSET
+
+(defvar cjk-char-width-table-list
+ '((ja_JP nil (japanese-jisx0208 (#x2121 . #x287E))
+ (cp932-2-byte (#x8140 . #x879F)))
+ (zh_CN nil (chinese-gb2312 (#x2121 . #x297E)))
+ (zh_HK nil (big5-hkscs (#xA140 . #xA3FE) (#xC6A0 . #xC8FE)))
+ (zh_TW nil (big5 (#xA140 . #xA3FE))
+ (chinese-cns11643-1 (#x2121 . #x427E)))
+ (ko_KR nil (korean-ksc5601 (#x2121 . #x2C7E)))))
+
+;; Internal use only.
+;; Setup char-width-table appropriate for a language environment
+;; corresponding to LOCALE-NAME (symbol).
+
+(defun use-cjk-char-width-table (locale-name)
+ (while (char-table-parent char-width-table)
+ (setq char-width-table (char-table-parent char-width-table)))
+ (let ((slot (assq locale-name cjk-char-width-table-list))
+ table)
+ (or slot (error "Unknown locale for CJK language environment: %s"
+ locale-name))
+ (unless (nth 1 slot)
(let ((table (make-char-table nil)))
- (dolist (charset '(big5 chinese-gb2312 chinese-cns11643-1
- japanese-jisx0208 cp932-2-byte korean-ksc5601))
+ (dolist (charset-info (nthcdr 2 slot))
+ (let ((charset (car charset-info)))
+ (dolist (code-range (cdr charset-info))
(map-charset-chars #'(lambda (range arg)
(set-char-table-range table range 2))
- charset))
+ charset nil
+ (car code-range) (cdr code-range)))))
(optimize-char-table table)
(set-char-table-parent table char-width-table)
- table)
- "Character width table used in CJK language environment.")
-
-(defun use-cjk-char-width-table ()
- "Internal use only.
-Setup char-width-table appropriate for CJK language environment."
- (setq char-width-table cjk-char-width-table))
+ (setcar (cdr slot) table)))
+ (setq char-width-table (nth 1 slot))))
(defun use-default-char-width-table ()
"Internal use only.
Setup char-width-table appropriate for non-CJK language environment."
- (setq char-width-table (char-table-parent cjk-char-width-table)))
+ (while (char-table-parent char-width-table)
+ (setq char-width-table (char-table-parent char-width-table))))
(optimize-char-table (standard-case-table))
(optimize-char-table (standard-syntax-table))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs/lisp/international characters.el,
Kenichi Handa <=