;;; char-db-util.el --- Character Database utility
-;; Copyright (C) 1998,1999,2000,2001,2002,2003,2004 MORIOKA Tomohiko.
+;; Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2005 MORIOKA Tomohiko.
;; Author: MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
;; Keywords: CHISE, Character Database, ISO/IEC 10646, Unicode, UCS-4, MULE.
'(ucs daikanwa cns gt jis jis/alt jis/a jis/b
jis-x0212 jis-x0213 cdp shinjigen misc unknown))
-(defvar char-db-ignored-attributes nil)
+(defvar char-db-ignored-attributes '(ideographic-products))
(defun char-attribute-name< (ka kb)
(cond
greek-iso8859-7
thai-tis620
=jis-x0208
- japanese-jisx0208
+ =jis-x0208@1978
+ =jis-x0208@1983
japanese-jisx0212
- japanese-jisx0208-1978
chinese-gb2312
chinese-cns11643-1
chinese-cns11643-2
chinese-cns11643-5
chinese-cns11643-6
chinese-cns11643-7
- =jis-x0208-1990
+ =jis-x0208@1990
=jis-x0213-1-2000
=jis-x0213-2-2000
korean-ksc5601
ideograph-hanziku-10
ideograph-hanziku-11
ideograph-hanziku-12
+ =gt-k
+ =ucs@iso
+ =ucs@unicode
=big5
=big5-eten
- =gt-k
=jis-x0208@1997
=jef-china3))
=daikanwa@rev2
;; =gt-k
)))
+ (setq ccs (charset-name ccs))
+ (null (assq ccs char-spec))
(setq ret (encode-char char ccs 'defined-only)))
(setq char-spec (cons (cons ccs ret) char-spec))))
(if (null char-spec)
(setq attributes (delq 'ideographic-radical attributes))
)
(let (key)
- (dolist (domain char-db-feature-domains)
+ (dolist (domain
+ (append
+ char-db-feature-domains
+ (let (dest domain)
+ (dolist (feature (char-attribute-list))
+ (setq feature (symbol-name feature))
+ (when (string-match
+ "\\(radical\\|strokes\\)@\\([^@*]+\\)\\(\\*\\|$\\)"
+ feature)
+ (setq domain (intern (match-string 2 feature)))
+ (unless (memq domain dest)
+ (setq dest (cons domain dest)))))
+ (sort dest #'string<))))
(setq key (intern (format "%s@%s" 'ideographic-radical domain)))
(when (and (memq key attributes)
(setq value (get-char-attribute char key)))
no-ucs-unified
script excluded-script)
(insert-char-data char printable)
- (let ((variants (or (char-variants char)
- (let ((ucs (get-char-attribute char '->ucs)))
- (if ucs
- (delete char (char-variants (int-char ucs)))))))
- variant vs)
+ (let ((variants (char-variants char))
+ rest
+ variant vs ret)
(setq variants (sort variants #'<))
- (while variants
- (setq variant (car variants))
- (if (and (or (null script)
- (null (setq vs (get-char-attribute variant 'script)))
- (memq script vs))
- (or (null excluded-script)
- (null (setq vs (get-char-attribute variant 'script)))
- (not (memq excluded-script vs))))
- (or (and no-ucs-unified (get-char-attribute variant '=ucs))
- (insert-char-data variant printable)))
- (setq variants (cdr variants))
- )))
+ (setq rest variants)
+ (setq variants (cons char variants))
+ (while rest
+ (setq variant (car rest))
+ (unless (get-char-attribute variant '<-subsumptive)
+ (if (and (or (null script)
+ (null (setq vs (get-char-attribute variant 'script)))
+ (memq script vs))
+ (or (null excluded-script)
+ (null (setq vs (get-char-attribute variant 'script)))
+ (not (memq excluded-script vs))))
+ (unless (and no-ucs-unified (get-char-attribute variant '=ucs))
+ (insert-char-data variant printable)
+ (if (setq ret (char-variants variant))
+ (while ret
+ (or (memq (car ret) variants)
+ ;; (get-char-attribute (car ret) '<-subsumptive)
+ (setq rest (nconc rest (list (car ret)))))
+ (setq ret (cdr ret)))))))
+ (setq rest (cdr rest)))))
(defun insert-char-range-data (min max &optional script excluded-script)
(let ((code min)