Mercurial > emacs
changeset 28899:133a92b8094d
(syntax-description-table): New variable.
(describe-char-after): New function.
(describe-font-internal): Adjusted for the change of font-info.
(describe-font): Likewise.
(print-fontset): Rewritten for the new fontset implementation.
(describe-fontset): Include fontset alias names in completion.
(list-fontsets): Adjusted for the change of print-fontset.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Sat, 13 May 2000 00:37:45 +0000 |
parents | a17b5669e2df |
children | ac620ff5fd5d |
files | lisp/international/mule-diag.el |
diffstat | 1 files changed, 174 insertions(+), 82 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/international/mule-diag.el Sat May 13 00:37:11 2000 +0000 +++ b/lisp/international/mule-diag.el Sat May 13 00:37:45 2000 +0000 @@ -454,6 +454,99 @@ (t (error "Invalid charset %s" charset)))))) + +;;;###autoload +(defun describe-char-after (&optional pos) + "Display information of in current buffer at position POS. +The information includes character code, charset and code points in it, +syntax, category, how the character is encoded in a file, +which font is being used for displaying the character." + (interactive) + (or pos + (setq pos (point))) + (if (>= pos (point-max)) + (error "No character at point")) + (let* ((char (char-after pos)) + (charset (char-charset char)) + (composition (find-composition (point) nil nil t)) + (composed (if composition (buffer-substring (car composition) + (nth 1 composition)))) + item-list max-width) + (unless (eq charset 'unknown) + (setq item-list + `(("character" + ,(format "%s (0%o, %d, 0x%x)" (if (< char 256) + (single-key-description char) + (char-to-string char)) + char char char)) + ("charset" + ,(symbol-name charset) + ,(format "(%s)" (charset-description charset))) + ("code point" + ,(let ((split (split-char char))) + (if (= (charset-dimension charset) 1) + (format "%d" (nth 1 split)) + (format "%d %d" (nth 1 split) (nth 2 split))))) + ("syntax" + ,(nth 2 (assq (char-syntax char) syntax-code-table))) + ("category" + ,@(let ((category-set (char-category-set char))) + (if (not category-set) + '("-- none --") + (mapcar #'(lambda (x) (format "%c:%s " + x (category-docstring x))) + (category-set-mnemonics category-set))))) + ("buffer code" + ,(encoded-string-description + (string-as-unibyte (char-to-string char)) nil)) + ("file code" + ,@(let* ((coding buffer-file-coding-system) + (encoded (encode-coding-char char coding))) + (if encoded + (list (encoded-string-description encoded coding) + (format "(encoded by coding system %S)" coding)) + (list "not encodable by coding system" + (symbol-name coding))))) + ,(if window-system + (list "font" (char-font (point))) + (list "terminal code" + (let* ((coding (terminal-coding-system)) + (encoded (encode-coding-char char coding))) + (if encoded + (encoded-string-description encoded coding) + "not encodable")))))) + (setq max-width (apply #'max (mapcar #'(lambda (x) (length (car x))) + item-list))) + (with-output-to-temp-buffer "*Help*" + (save-excursion + (set-buffer standard-output) + (let ((formatter (format "%%%ds:" max-width))) + (dolist (elt item-list) + (insert (format formatter (car elt))) + (dolist (clm (cdr elt)) + (when (>= (+ (current-column) (string-width clm) 1) + (frame-width)) + (insert "\n") + (indent-to (1+ max-width))) + (insert " " clm)) + (insert "\n"))) + (when composition + (insert "\nComposed with the following characerter(s) " + (mapconcat (lambda (x) (format "`%c'" x)) + (substring composed 1) + ", ") + " to form `" composed "'") + (if (nth 3 composition) + (insert ".\n") + (insert "\nby the rule (" + (mapconcat (lambda (x) + (format (if (consp x) "%S" "?%c") x)) + (nth 2 composition) + " ") + ").\n" + "See the variable `reference-point-alist' for the meaning of the rule.\n"))) + ))))) + ;;; CODING-SYSTEM @@ -893,13 +986,10 @@ (defun describe-font-internal (font-info &optional verbose) (print-list "name (opened by):" (aref font-info 0)) (print-list " full name:" (aref font-info 1)) - (let ((charset (aref font-info 2))) - (print-list " charset:" - (format "%s (%s)" charset (charset-description charset)))) - (print-list " size:" (format "%d" (aref font-info 3))) - (print-list " height:" (format "%d" (aref font-info 4))) - (print-list " baseline-offset:" (format "%d" (aref font-info 5))) - (print-list "relative-compose:" (format "%d" (aref font-info 6)))) + (print-list " size:" (format "%2d" (aref font-info 2))) + (print-list " height:" (format "%2d" (aref font-info 3))) + (print-list " baseline-offset:" (format "%2d" (aref font-info 4))) + (print-list "relative-compose:" (format "%2d" (aref font-info 5)))) ;;;###autoload (defun describe-font (fontname) @@ -911,7 +1001,7 @@ (setq fontname (cdr (assq 'font (frame-parameters)))) (if (query-fontset fontname) (setq fontname - (nth 2 (assq 'ascii (aref (fontset-info fontname) 2)))))) + (nth 1 (assq 'ascii (fontset-info fontname)))))) (let ((font-info (font-info fontname))) (if (null font-info) (message "No matching font") @@ -919,93 +1009,95 @@ (describe-font-internal font-info 'verbose))))) ;; Print information of FONTSET. If optional arg PRINT-FONTS is -;; non-nil, print also names of all fonts in FONTSET. This function -;; actually INSERT such information in the current buffer. +;; non-nil, print also names of all opened fonts for FONTSET. This +;; function actually INSERT such information in the current buffer. (defun print-fontset (fontset &optional print-fonts) - (let* ((fontset-info (fontset-info fontset)) - (size (aref fontset-info 0)) - (height (aref fontset-info 1)) - (fonts (and print-fonts (aref fontset-info 2))) - (xlfd-fields (x-decompose-font-name fontset)) - style) - (if xlfd-fields - (let ((weight (aref xlfd-fields xlfd-regexp-weight-subnum)) - (slant (aref xlfd-fields xlfd-regexp-slant-subnum))) - (if (string-match "^bold$\\|^demibold$" weight) - (setq style (concat weight " ")) - (setq style "medium ")) - (cond ((string-match "^i$" slant) - (setq style (concat style "italic"))) - ((string-match "^o$" slant) - (setq style (concat style "slant"))) - ((string-match "^ri$" slant) - (setq style (concat style "reverse italic"))) - ((string-match "^ro$" slant) - (setq style (concat style "reverse slant"))))) - (setq style " ? ")) + (let ((tail (cdr (fontset-info fontset))) + elt chars font-spec opened prev-charset charset from to) (beginning-of-line) - (insert fontset) - (indent-to 58) - (insert (if (and size (> size 0)) (format "%2dx%d" size height) " -")) - (indent-to 64) - (insert style "\n") - (when print-fonts - (insert " O Charset / Fontname\n" - " - ------------------\n") - (sort-charset-list) - (let ((l charset-list) - charset font-info opened fontname) - (while l - (setq charset (car l) l (cdr l)) - (setq font-info (assq charset fonts)) - (if (null font-info) - (setq opened ?? fontname "not specified") - (if (nth 2 font-info) - (if (stringp (nth 2 font-info)) - (setq opened ?o fontname (nth 2 font-info)) - (setq opened ?- fontname (nth 1 font-info))) - (setq opened ?x fontname (nth 1 font-info)))) - (insert (format " %c %s\n %s\n" - opened charset fontname))))))) + (insert "Fontset: " fontset "\n") + (insert "CHARSET or CHAR RANGE") + (indent-to 25) + (insert "FONT NAME\n") + (insert "---------------------") + (indent-to 25) + (insert "---------") + (insert "\n") + (while tail + (setq elt (car tail) tail (cdr tail)) + (setq chars (car elt) font-spec (car (cdr elt)) opened (cdr (cdr elt))) + (if (symbolp chars) + (setq charset chars from nil to nil) + (if (integerp chars) + (setq charset (char-charset chars) from chars to chars) + (setq charset (char-charset (car chars)) + from (car chars) to (cdr chars)))) + (unless (eq charset prev-charset) + (insert (symbol-name charset)) + (if from + (insert "\n"))) + (when from + (let ((split (split-char from))) + (if (and (= (charset-dimension charset) 2) + (= (nth 2 split) 0)) + (setq from + (make-char charset (nth 1 split) + (if (= (charset-chars charset) 94) 33 32)))) + (insert " " from)) + (when (/= from to) + (insert "-") + (let ((split (split-char to))) + (if (and (= (charset-dimension charset) 2) + (= (nth 2 split) 0)) + (setq to + (make-char charset (nth 1 split) + (if (= (charset-chars charset) 94) 126 127)))) + (insert to)))) + (indent-to 25) + (if (stringp font-spec) + (insert font-spec) + (if (car font-spec) + (if (string-match "-" (car font-spec)) + (insert "-" (car font-spec) "-") + (insert "-*-" (car font-spec) "-")) + (insert "-*-")) + (if (cdr font-spec) + (if (string-match "-" (cdr font-spec)) + (insert (cdr font-spec)) + (insert (cdr font-spec) "-*")) + (insert "*"))) + (insert "\n") + (when print-fonts + (while opened + (indent-to 5) + (insert "[" (car opened) "]\n") + (setq opened (cdr opened)))) + (setq prev-charset charset) + ))) ;;;###autoload (defun describe-fontset (fontset) "Display information of FONTSET. -This shows the name, size, and style of FONTSET, and the list of fonts -contained in FONTSET. - -The column WDxHT contains width and height (pixels) of each fontset -\(i.e. those of ASCII font in the fontset). The letter `-' in this -column means that the corresponding fontset is not yet used in any -frame. - -The O column for each font contains one of the following letters: - o -- font already opened - - -- font not yet opened - x -- font can't be opened - ? -- no font specified - -The Charset column for each font contains a name of character set -displayed (for this fontset) using that font." +This shows which font is used for which character(s)." (interactive (if (not (and window-system (fboundp 'fontset-list))) (error "No fontsets being used") - (let ((fontset-list (mapcar '(lambda (x) (list x)) (fontset-list))) + (let ((fontset-list (append + (mapcar '(lambda (x) (list x)) (fontset-list)) + (mapcar '(lambda (x) (list (cdr x))) + fontset-alias-alist))) (completion-ignore-case t)) (list (completing-read "Fontset (default, used by the current frame): " fontset-list nil t))))) (if (= (length fontset) 0) (setq fontset (cdr (assq 'font (frame-parameters))))) - (if (not (query-fontset fontset)) + (if (not (setq fontset (query-fontset fontset))) (error "Current frame is using font, not fontset")) - (let ((fontset-info (fontset-info fontset))) - (with-output-to-temp-buffer "*Help*" - (save-excursion - (set-buffer standard-output) - (insert "Fontset-Name\t\t\t\t\t\t WDxHT Style\n") - (insert "------------\t\t\t\t\t\t ----- -----\n") - (print-fontset fontset t))))) + (with-output-to-temp-buffer "*Help*" + (save-excursion + (set-buffer standard-output) + (print-fontset fontset t)))) ;;;###autoload (defun list-fontsets (arg) @@ -1020,15 +1112,15 @@ (save-excursion ;; This code is duplicated near the end of mule-diag. (set-buffer standard-output) - (insert "Fontset-Name\t\t\t\t\t\t WDxHT Style\n") - (insert "------------\t\t\t\t\t\t ----- -----\n") (let ((fontsets (sort (fontset-list) (function (lambda (x y) (string< (fontset-plain-name x) (fontset-plain-name y))))))) (while fontsets - (print-fontset (car fontsets) arg) + (if arg + (print-fontset (car fontsets) nil) + (insert "Fontset: " (car fontsets) "\n")) (setq fontsets (cdr fontsets)))))))) ;;;###autoload