("So" symbol other)
))
+(defun char-attribute-name< (ka kb)
+ (cond
+ ((find-charset ka)
+ (cond
+ ((find-charset kb)
+ (cond
+ ((= (charset-dimension ka)
+ (charset-dimension kb))
+ (cond ((= (charset-chars ka)(charset-chars kb))
+ (cond
+ ((>= (charset-final ka) ?@)
+ (if (>= (charset-final kb) ?@)
+ (< (charset-final ka)
+ (charset-final kb))
+ t))
+ ((>= (charset-final ka) ?0)
+ (cond
+ ((>= (charset-final kb) ?@)
+ nil)
+ ((>= (charset-final kb) ?0)
+ (< (charset-final ka)
+ (charset-final kb)))
+ (t)))))
+ ((<= (charset-chars ka)(charset-chars kb)))))
+ (t
+ (< (charset-dimension ka)
+ (charset-dimension kb))
+ )))
+ (t)))
+ ((find-charset kb)
+ t)
+ ((symbolp ka)
+ (cond ((symbolp kb)
+ (string< (symbol-name ka)
+ (symbol-name kb)))
+ (t)))
+ ((symbolp kb)
+ nil)))
+
(defun insert-char-data (char)
(let ((data (char-attribute-alist char))
cell ret name has-long-ccs-name rest)
(setq data (del-alist 'numeric-value data))
)
)
- (setq data (sort data
- (lambda (a b)
- (let ((ka (car a))
- (kb (car b)))
- (cond ((find-charset ka)
- (cond ((find-charset kb)
- (cond ((= (charset-dimension ka)
- (charset-dimension kb))
- (< (charset-final ka)
- (charset-final kb)))
- (t
- (< (charset-dimension ka)
- (charset-dimension kb))
- )))
- (t)))
- ((find-charset kb)
- t)
- ((symbolp ka)
- (cond ((symbolp kb)
- (string< (symbol-name ka)
- (symbol-name kb)))
- (t)))
- ((symbolp kb)
- nil))))))
+ (when (setq cell (assq 'iso-10646-comment data))
+ (setq cell (cdr cell))
+ (insert (format "(iso-10646-comment\t. %S)
+ "
+ cell))
+ (setq data (del-alist 'iso-10646-comment data))
+ )
+ (when (setq cell (assq '->decomposition data))
+ (setq cell (cdr cell))
+ (insert (format "(->decomposition\t%s)
+ "
+ (mapconcat (lambda (code)
+ (cond ((symbolp code)
+ (symbol-name code))
+ ((integerp code)
+ (format "#x%04X" code))
+ (t
+ (format "\n %S" code))))
+ cell " ")))
+ (setq data (del-alist '->decomposition data))
+ )
+ (when (setq cell (assq '->uppercase data))
+ (setq cell (cdr cell))
+ (insert (format "(->uppercase\t%s)
+ "
+ (mapconcat (lambda (code)
+ (cond ((symbolp code)
+ (symbol-name code))
+ ((integerp code)
+ (format "#x%04X" code))
+ (t
+ (format "\n %S" code))))
+ cell " ")))
+ (setq data (del-alist '->uppercase data))
+ )
+ (when (setq cell (assq '->lowercase data))
+ (setq cell (cdr cell))
+ (insert (format "(->lowercase\t%s)
+ "
+ (mapconcat (lambda (code)
+ (cond ((symbolp code)
+ (symbol-name code))
+ ((integerp code)
+ (format "#x%04X" code))
+ (t
+ (format "\n %S" code))))
+ cell " ")))
+ (setq data (del-alist '->lowercase data))
+ )
+ (when (setq cell (assq '->titlecase data))
+ (setq cell (cdr cell))
+ (insert (format "(->titlecase\t%s)
+ "
+ (mapconcat (lambda (code)
+ (cond ((symbolp code)
+ (symbol-name code))
+ ((integerp code)
+ (format "#x%04X" code))
+ (t
+ (format "\n %S" code))))
+ cell " ")))
+ (setq data (del-alist '->titlecase data))
+ )
+ (setq data
+ (sort data
+ (lambda (a b)
+ (char-attribute-name< (car a)(car b)))))
(setq rest data)
(while (and rest
(progn
"
)
(charset-name ret)
- (mapconcat (lambda (b)
- (format "#x%02X" b)
- )
- (cdr cell) " "))))
+ (mapconcat
+ (lambda (b)
+ (format "#x%02X"
+ (if (= (charset-graphic ret) 1)
+ (logior b #x80)
+ b)))
+ (cdr cell) " "))))
((string-match "^->" (symbol-name (car cell)))
(insert
(format "(%-18s %s)
(tabify (point-min)(point-max))
))))
-(defun insert-char-range-data (min max)
- (let ((code min))
- (while (<= code max)
- (insert-char-data (int-char code))
- (setq code (1+ code))
- )))
-
-(defun write-char-range-data-to-file (min max file)
- (with-temp-buffer
- (insert-char-range-data min max)
- (write-region (point-min)(point-max) file)))
-
+;;;###autoload
(defun char-db-update-comment ()
(interactive)
(save-excursion
(goto-char (point-min))
- (let (cdef table)
+ (let (cdef table char)
(while (re-search-forward "^[ \t]*\\(([^.()]+)\\)" nil t)
(goto-char (match-beginning 1))
(setq cdef (read (current-buffer)))
(when (find-charset (car cdef))
(goto-char (match-end 0))
- (if (setq table (charset-mapping-table (car cdef)))
- (set-charset-mapping-table (car cdef) nil))
- (delete-region (point) (point-at-eol))
- (insert (format "\t; %c" (apply #'make-char cdef)))
- (if table
- (set-charset-mapping-table (car cdef) table))
+ (setq char
+ (if (or (memq (car cdef) '(ascii latin-viscii-upper
+ latin-viscii-lower
+ arabic-iso8859-6))
+ (= (char-int (charset-final (car cdef))) 0))
+ (apply (function make-char) cdef)
+ (if (setq table (charset-mapping-table (car cdef)))
+ (set-charset-mapping-table (car cdef) nil))
+ (prog1
+ (apply (function make-char) cdef)
+ (if table
+ (set-charset-mapping-table (car cdef) table)))))
+ (when (not (or (< (char-int char) 32)
+ (and (<= 128 (char-int char))
+ (< (char-int char) 160))))
+ (delete-region (point) (point-at-eol))
+ (insert (format "\t; %c" char)))
)))))
+(defun insert-char-data-with-variant (char)
+ (insert-char-data char)
+ (let ((variants (char-variants char)))
+ (while variants
+ (insert-char-data (car variants))
+ (setq variants (cdr variants))
+ )))
+
+(defun insert-char-range-data (min max)
+ (let ((code min)
+ char
+ variants)
+ (while (<= code max)
+ (setq char (int-char code))
+ (insert-char-data-with-variant char)
+ (setq code (1+ code))
+ )))
+
+(defun write-char-range-data-to-file (min max file)
+ (with-temp-buffer
+ (insert-char-range-data min max)
+ (write-region (point-min)(point-max) file)))
+
;;;###autoload
(defun what-char-definition (char)
(interactive (list (char-after)))
(erase-buffer)
(condition-case err
(progn
- (insert-char-data char)
+ (insert-char-data-with-variant char)
+ (char-db-update-comment)
(set-buffer-modified-p nil)
(view-mode the-buf (lambda (buf)
(set-window-configuration