Function: describe-char-unicode-data
describe-char-unicode-data is a byte-compiled function defined in
descr-text.el.gz.
Signature
(describe-char-unicode-data CHAR)
Documentation
Return a list of Unicode data for Unicode CHAR.
Each element is a list of a property description and the property value.
The list is null if CHAR isn't found in describe-char-unicodedata-file.
This function is semi-obsolete. Use get-char-code-property.
Source Code
;; Defined in /usr/src/emacs/lisp/descr-text.el.gz
(defun describe-char-unicode-data (char)
"Return a list of Unicode data for Unicode CHAR.
Each element is a list of a property description and the property value.
The list is null if CHAR isn't found in `describe-char-unicodedata-file'.
This function is semi-obsolete. Use `get-char-code-property'."
(when describe-char-unicodedata-file
(unless (file-exists-p describe-char-unicodedata-file)
(error "`unicodedata-file' %s not found" describe-char-unicodedata-file))
(with-current-buffer (get-buffer-create " *Unicode Data*")
(when (zerop (buffer-size))
;; Don't use -literally in case of DOS line endings.
(insert-file-contents describe-char-unicodedata-file))
(goto-char (point-min))
(let ((hex (format "%04X" char))
found first last)
(if (re-search-forward (concat "^" hex) nil t)
(setq found t)
;; It's not listed explicitly. Look for ranges, e.g. CJK
;; ideographs, and check whether it's in one of them.
(while (and (re-search-forward "^\\([^;]+\\);[^;]+First>;" nil t)
(>= char (setq first
(string-to-number (match-string 1) 16)))
(progn
(forward-line 1)
(looking-at "^\\([^;]+\\);[^;]+Last>;")
(> char
(setq last
(string-to-number (match-string 1) 16))))))
(if (and (>= char first)
(<= char last))
(setq found t)))
(if found
(let ((fields (mapcar (lambda (elt)
(if (> (length elt) 0)
elt))
(cdr (split-string
(buffer-substring
(line-beginning-position)
(line-end-position))
";")))))
;; The length depends on whether the last field was empty.
(unless (or (= 13 (length fields))
(= 14 (length fields)))
(error "Invalid contents in %s" describe-char-unicodedata-file))
;; The field names and values lists are slightly
;; modified from Mule-UCS unidata.el.
(list
(list "Name" (let ((name (nth 0 fields)))
;; Check for <..., First>, <..., Last>
(if (string-match "\\`\\(<[^,]+\\)," name)
(concat (match-string 1 name) ">")
name)))
(list "Category"
(let ((val (nth 1 fields)))
(or (char-code-property-description
'general-category (intern val))
val)))
(list "Combining class"
(let ((val (nth 2 fields)))
(or (char-code-property-description
'canonical-combining-class (intern val))
val)))
(list "Bidi category"
(let ((val (nth 3 fields)))
(or (char-code-property-description
'bidi-class (intern val))
val)))
(list
"Decomposition"
(if (nth 4 fields)
(let* ((parts (split-string (nth 4 fields)))
(info (car parts)))
(if (string-match "\\`<\\(.+\\)>\\'" info)
(setq info (match-string 1 info))
(setq info nil))
(if info (setq parts (cdr parts)))
(setq parts (mapconcat
(lambda (arg)
(string (string-to-number arg 16)))
parts " "))
(concat info (if info " ") parts))))
(list "Decimal digit value"
(nth 5 fields))
(list "Digit value"
(nth 6 fields))
(list "Numeric value"
(nth 7 fields))
(list "Mirrored"
(if (equal "Y" (nth 8 fields))
"yes"))
(list "Old name" (nth 9 fields))
(list "ISO 10646 comment" (nth 10 fields))
(list "Uppercase" (and (nth 11 fields)
(string (string-to-number
(nth 11 fields) 16))))
(list "Lowercase" (and (nth 12 fields)
(string (string-to-number
(nth 12 fields) 16))))
(list "Titlecase" (and (nth 13 fields)
(string (string-to-number
(nth 13 fields) 16)))))))))))