]> code.delx.au - gnu-emacs/blobdiff - lisp/descr-text.el
Update GPL version for Emacs images.
[gnu-emacs] / lisp / descr-text.el
index 705d582500eae71dab09055269353ed12f5dd2c5..d14aba7ae6f40b31dc304867b5fe93c62622f5c5 100644 (file)
@@ -1,7 +1,7 @@
 ;;; descr-text.el --- describe text mode
 
 ;; Copyright (C) 1994, 1995, 1996, 2001, 2002, 2003, 2004,
-;;   2005 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Maintainer: FSF
@@ -11,7 +11,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -60,7 +60,7 @@
              (t t))
        (insert pp)
       (insert-text-button
-       "show" 'action `(lambda (&rest ignore)
+       "[Show]" 'action `(lambda (&rest ignore)
                        (with-output-to-temp-buffer
                            "*Pp Eval Output*"
                          (princ ',pp)))
@@ -90,7 +90,9 @@ into help buttons that call `describe-text-category' or
                         (describe-text-category ',value))
              'help-echo "mouse-2, RET: describe this category"))
             ((memq key '(face font-lock-face mouse-face))
-            (insert (concat "`" (format "%S" value) "'")))
+            (insert-text-button
+             (format "%S" value)
+             'type 'help-face 'help-args (list value)))
             ((widgetp value)
             (describe-text-widget value))
            (t
@@ -161,8 +163,8 @@ otherwise."
       ;; Buttons
       (when (and button (not (widgetp wid-button)))
        (newline)
-       (insert "Here is a " (format "%S" button-type)
-               " button labeled `" button-label "'.\n\n"))
+       (insert "Here is a `" (format "%S" button-type)
+               "' button labeled `" button-label "'.\n\n"))
       ;; Overlays
       (when overlays
        (newline)
@@ -183,13 +185,13 @@ otherwise."
 \f
 (defcustom describe-char-unicodedata-file nil
   "Location of Unicode data file.
-This is the UnicodeData.txt file from the Unicode consortium, used for
+This is the UnicodeData.txt file from the Unicode Consortium, used for
 diagnostics.  If it is non-nil `describe-char' will print data
 looked up from it.  This facility is mostly of use to people doing
 multilingual development.
 
-This is a fairly large file, not typically present on GNU systems.  At
-the time of writing it is at the URL
+This is a fairly large file, not typically present on GNU systems.
+At the time of writing it is at the URL
 `http://www.unicode.org/Public/UNIDATA/UnicodeData.txt'."
   :group 'mule
   :version "22.1"
@@ -210,11 +212,10 @@ The list is null if CHAR isn't found in `describe-char-unicodedata-file'."
   (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
-       ;; Find file in fundamental mode to avoid, e.g. flyspell turned
-       ;; on for .txt.  Don't use RAWFILE arg in case of DOS line endings.
-       (let ((auto-mode-alist))
-         (find-file-noselect 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)
@@ -462,8 +463,8 @@ as well as widgets, buttons, overlays, and text properties."
             ,(let ((split (split-char char)))
                `(insert-text-button
                  ,(if (= (charset-dimension charset) 1)
-                      (format "%d" (nth 1 split))
-                    (format "%d %d" (nth 1 split)
+                      (format "#x%02X" (nth 1 split))
+                    (format "#x%02X #x%02X" (nth 1 split)
                             (nth 2 split)))
                  'action (lambda (&rest ignore)
                            (list-charset-chars ',charset)
@@ -505,7 +506,7 @@ as well as widgets, buttons, overlays, and text properties."
                                      key-list " or ")
                           "with"
                           `(insert-text-button
-                            ,(symbol-name current-input-method)
+                            ,current-input-method
                             'type 'help-input-method
                             'help-args '(,current-input-method))))))
            ("buffer code"
@@ -527,11 +528,11 @@ as well as widgets, buttons, overlays, and text properties."
                  (setq char (aref disp-vector i))
                  (aset disp-vector i
                        (cons char (describe-char-display
-                                   pos (logand char #x7ffff)))))
+                                   pos (glyph-char char)))))
                (format "by display table entry [%s] (see below)"
                        (mapconcat
                         #'(lambda (x)
-                            (format "?%c" (logand (car x) #x7ffff)))
+                            (format "?%c" (glyph-char (car x))))
                         disp-vector " ")))
               (composition
                (let ((from (car composition))
@@ -576,7 +577,9 @@ as well as widgets, buttons, overlays, and text properties."
                          ((and (< char 32) (not (memq char '(9 10))))
                           'escape-glyph)))))
                (if face (list (list "hardcoded face"
-                                    (concat "`" (symbol-name face) "'")))))
+                                    `(insert-text-button
+                                      ,(symbol-name face)
+                                      'type 'help-face 'help-args '(,face))))))
            ,@(let ((unicodedata (and unicode
                                      (describe-char-unicode-data unicode))))
                (if unicodedata
@@ -624,25 +627,19 @@ as well as widgets, buttons, overlays, and text properties."
              (progn
                (insert "these fonts (glyph codes):\n")
                (dotimes (i (length disp-vector))
-                 (insert (logand (car (aref disp-vector i)) #x7ffff) ?:
+                 (insert (glyph-char (car (aref disp-vector i))) ?:
                          (propertize " " 'display '(space :align-to 5))
                          (if (cdr (aref disp-vector i))
                              (format "%s (#x%02X)" (cadr (aref disp-vector i))
                                      (cddr (aref disp-vector i)))
                            "-- no font --")
                          "\n")
-                 (when (> (car (aref disp-vector i)) #x7ffff)
-                   (let* ((face-id (lsh (car (aref disp-vector i)) -19))
-                          (face (car (delq nil (mapcar
-                                                (lambda (face)
-                                                  (and (eq (face-id face)
-                                                           face-id) face))
-                                                (face-list))))))
-                     (when face
-                       (insert (propertize " " 'display '(space :align-to 5))
-                               "face: ")
-                       (insert (concat "`" (symbol-name face) "'"))
-                       (insert "\n"))))))
+                 (let ((face (glyph-face (car (aref disp-vector i)))))
+                   (when face
+                     (insert (propertize " " 'display '(space :align-to 5))
+                             "face: ")
+                     (insert (concat "`" (symbol-name face) "'"))
+                     (insert "\n")))))
            (insert "these terminal codes:\n")
            (dotimes (i (length disp-vector))
              (insert (car (aref disp-vector i))
@@ -687,7 +684,7 @@ as well as widgets, buttons, overlays, and text properties."
                  "the meaning of the rule.\n"))
 
         (if text-props-desc (insert text-props-desc))
-       (setq help-xref-stack-item (list 'help-insert-string (buffer-string)))
+       (setq help-xref-stack-item (list 'help-insert-string (buffer-string)))
        (toggle-read-only 1)
        (print-help-return-message)))))