emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/descr-text.el


From: Richard M. Stallman
Subject: [Emacs-diffs] Changes to emacs/lisp/descr-text.el
Date: Mon, 17 Jun 2002 12:12:47 -0400

Index: emacs/lisp/descr-text.el
diff -c emacs/lisp/descr-text.el:1.4 emacs/lisp/descr-text.el:1.5
*** emacs/lisp/descr-text.el:1.4        Sat Jun  8 18:43:33 2002
--- emacs/lisp/descr-text.el    Mon Jun 17 12:12:47 2002
***************
*** 46,52 ****
    :type 'hook)
  
  (defun describe-text-mode ()
!   "Major mode for buffers created by `describe-text-at'.
  
  \\{describe-text-mode-map}
  Entry to this mode calls the value of `describe-text-mode-hook'
--- 46,52 ----
    :type 'hook)
  
  (defun describe-text-mode ()
!   "Major mode for buffers created by `describe-char'.
  
  \\{describe-text-mode-map}
  Entry to this mode calls the value of `describe-text-mode-hook'
***************
*** 92,98 ****
                                 (princ (widget-get widget :value))))
                     pp))))
  
! (defun describe-text-properties (properties)
    "Insert a description of PROPERTIES in the current buffer.
  PROPERTIES should be a list of overlay or text properties.
  The `category' property is made into a widget button that call 
--- 92,98 ----
                                 (princ (widget-get widget :value))))
                     pp))))
  
! (defun describe-property-list (properties)
    "Insert a description of PROPERTIES in the current buffer.
  PROPERTIES should be a list of overlay or text properties.
  The `category' property is made into a widget button that call 
***************
*** 141,156 ****
      (with-output-to-temp-buffer "*Text Category*"
        (set-buffer "*Text Category*")
        (widget-insert "Category " (format "%S" category) ":\n\n")
!       (describe-text-properties (symbol-plist category))
        (describe-text-mode)
        (goto-char (point-min)))))
  
  ;;;###autoload
! (defun describe-text-at (pos)
!   "Describe widgets, buttons, overlays and text properties at POS."
    (interactive "d")
    (when (eq (current-buffer) (get-buffer "*Text Description*"))
      (error "Can't do self inspection"))
    (let* ((properties (text-properties-at pos))
         (overlays (overlays-at pos))
         overlay
--- 141,180 ----
      (with-output-to-temp-buffer "*Text Category*"
        (set-buffer "*Text Category*")
        (widget-insert "Category " (format "%S" category) ":\n\n")
!       (describe-property-list (symbol-plist category))
        (describe-text-mode)
        (goto-char (point-min)))))
  
  ;;;###autoload
! (defun describe-text-properties (pos &optional output-buffer)
!   "Describe widgets, buttons, overlays and text properties at POS.
! Interactively, describe them for the character after point.
! If optional second argument OUTPUT-BUFFER is non-nil,
! insert the output into that buffer, and don't initialize or clear it
! otherwise."
    (interactive "d")
    (when (eq (current-buffer) (get-buffer "*Text Description*"))
      (error "Can't do self inspection"))
+   (if (>= pos (point-max))
+       (error "No character follows specified position"))
+   (if output-buffer
+       (describe-text-properties-1 pos output-buffer)
+     (if (not (or (text-properties-at pos) (overlays-at pos)))
+       (message "This is plain text.")
+       (when (get-buffer "*Text Description*")
+       (kill-buffer "*Text Description*"))
+       (let ((buffer (current-buffer)))
+       (save-excursion
+         (with-output-to-temp-buffer "*Text Description*"
+           (set-buffer "*Text Description*")
+           (setq output-buffer (current-buffer))
+           (widget-insert "Text content at position " (format "%d" pos) 
":\n\n")
+           (with-current-buffer buffer
+             (describe-text-properties-1 pos output-buffer))
+           (describe-text-mode)
+           (goto-char (point-min))))))))
+ 
+ (defun describe-text-properties-1 (pos output-buffer)
    (let* ((properties (text-properties-at pos))
         (overlays (overlays-at pos))
         overlay
***************
*** 162,204 ****
         (button-type (and button (button-type button)))
         (button-label (and button (button-label button)))
         (widget (or wid-field wid-button wid-doc)))
!     (if (not (or properties overlays))
!       (message "This is plain text.")
!       (when (get-buffer "*Text Description*")
!       (kill-buffer "*Text Description*"))
        (save-excursion
!       (with-output-to-temp-buffer "*Text Description*"
!         (set-buffer "*Text Description*")
!         (widget-insert "Text content at position " (format "%d" pos) ":\n\n")
!         ;; Widgets
!         (when (widgetp widget)
!           (widget-insert (cond (wid-field "This is an editable text area")
!                                (wid-button "This is an active area")
!                                (wid-doc "This is documentation text")))
!           (widget-insert " of a ")
!           (describe-text-widget widget)
!           (widget-insert ".\n\n"))
!         ;; Buttons
!         (when (and button (not (widgetp wid-button)))
!           (widget-insert "Here is a " (format "%S" button-type) 
!                          " button labeled `" button-label "'.\n\n"))
!         ;; Overlays
!         (when overlays
!           (if (eq (length overlays) 1)
!               (widget-insert "There is an overlay here:\n")
!             (widget-insert "There are " (format "%d" (length overlays))
!                            " overlays here:\n"))
!           (dolist (overlay overlays)
!             (widget-insert " From " (format "%d" (overlay-start overlay)) 
!                            " to " (format "%d" (overlay-end overlay)) "\n")
!             (describe-text-properties (overlay-properties overlay)))
!           (widget-insert "\n"))
!         ;; Text properties
!         (when properties
!           (widget-insert "There are text properties here:\n")
!           (describe-text-properties properties))
!         (describe-text-mode)
!         (goto-char (point-min)))))))
  
  (provide 'descr-text)
  
--- 186,357 ----
         (button-type (and button (button-type button)))
         (button-label (and button (button-label button)))
         (widget (or wid-field wid-button wid-doc)))
!     (with-current-buffer output-buffer
!       ;; Widgets
!       (when (widgetp widget)
!       (newline)
!       (widget-insert (cond (wid-field "This is an editable text area")
!                            (wid-button "This is an active area")
!                            (wid-doc "This is documentation text")))
!       (widget-insert " of a ")
!       (describe-text-widget widget)
!       (widget-insert ".\n\n"))
!       ;; Buttons
!       (when (and button (not (widgetp wid-button)))
!       (newline)
!       (widget-insert "Here is a " (format "%S" button-type) 
!                      " button labeled `" button-label "'.\n\n"))
!       ;; Overlays
!       (when overlays
!       (newline)
!       (if (eq (length overlays) 1)
!           (widget-insert "There is an overlay here:\n")
!         (widget-insert "There are " (format "%d" (length overlays))
!                        " overlays here:\n"))
!       (dolist (overlay overlays)
!         (widget-insert " From " (format "%d" (overlay-start overlay)) 
!                        " to " (format "%d" (overlay-end overlay)) "\n")
!         (describe-property-list (overlay-properties overlay)))
!       (widget-insert "\n"))
!       ;; Text properties
!       (when properties
!       (newline)
!       (widget-insert "There are text properties here:\n")
!       (describe-property-list properties)))))
! 
! ;;;###autoload
! (defun describe-char (pos)
!   "Describe the character after POS (interactively, the character after 
point).
! The information includes character code, charset and code points in it,
! syntax, category, how the character is encoded in a file,
! character composition information (if relevant),
! as well as widgets, buttons, overlays, and text properties."
!   (interactive "d")
!   (when (eq (current-buffer) (get-buffer "*Text Description*"))
!     (error "Can't do self inspection"))
!   (if (>= pos (point-max))
!       (error "No character follows specified position"))
!   (let* ((char (char-after pos))
!        (charset (char-charset char))
!        (buffer (current-buffer))
!        (composition (find-composition (point) nil nil t))
!        (composed (if composition (buffer-substring (car composition)
!                                                    (nth 1 composition))))
!        (multibyte-p enable-multibyte-characters)
!        item-list max-width)
!     (if (eq charset 'unknown)
!       (setq item-list
!             `(("character"
!                ,(format "%s (0%o, %d, 0x%x) -- invalid character code"
!                         (if (< char 256)
!                             (single-key-description char)
!                           (char-to-string char))
!                         char char char))))
!       (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"
!              ,(let ((syntax (get-char-property (point) 'syntax-table)))
!                 (with-temp-buffer
!                   (internal-describe-syntax-value
!                    (if (consp syntax) syntax
!                      (aref (or syntax (syntax-table)) char)))
!                   (buffer-string))))
!             ("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)))))
!             ,@(let ((props (aref char-code-property-table char))
!                     ps)
!                 (when props
!                   (while props
!                     (push (format "%s:" (pop props)) ps)
!                     (push (format "%s;" (pop props)) ps))
!                   (list (cons "Properties" (nreverse ps)))))
!             ("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 (or (memq 'mule-utf-8
!                         (find-coding-systems-region (point) (1+ (point))))
!                       (get-char-property (point) 'untranslated-utf-8))
!                   (let ((uc (or (get-char-property (point)
!                                                    'untranslated-utf-8)
!                                 (encode-char (char-after) 'ucs))))
!                     (if uc
!                         (list (list "Unicode"
!                                     (format "%04X" uc))))))
!             ,(if (display-graphic-p (selected-frame))
!                  (list "font" (or (internal-char-font (point))
!                                   "-- none --"))
!                (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)))
!     (when (get-buffer "*Help*")
!       (kill-buffer "*Help*"))
!     (with-output-to-temp-buffer "*Help*"
        (save-excursion
!       (set-buffer standard-output)
!       (set-buffer-multibyte multibyte-p)
!       (let ((formatter (format "%%%ds:" max-width)))
!         (dolist (elt item-list)
!           (insert (format formatter (car elt)))
!           (dolist (clm (cdr elt))
!             (when (>= (+ (current-column)
!                          (or (string-match "\n" clm)
!                              (string-width clm)) 1)
!                       (frame-width))
!               (insert "\n")
!               (indent-to (1+ max-width)))
!             (insert " " clm))
!           (insert "\n")))
!       (when composition
!         (insert "\nComposed with the following character(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")))
! 
!       (let ((output (current-buffer)))
!         (with-current-buffer buffer
!           (describe-text-properties pos output))
!         (describe-text-mode))))))
  
  (provide 'descr-text)
  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]