emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Karl Berry
Subject: [Emacs-diffs] Changes to emacs/lisp/info.el
Date: Fri, 25 Apr 2003 19:17:07 -0400

Index: emacs/lisp/info.el
diff -c emacs/lisp/info.el:1.343 emacs/lisp/info.el:1.344
*** emacs/lisp/info.el:1.343    Mon Apr 21 13:40:19 2003
--- emacs/lisp/info.el  Fri Apr 25 19:17:06 2003
***************
*** 1072,1077 ****
--- 1072,1133 ----
      (if (numberp nodepos)
        (+ (- nodepos lastfilepos) (point)))))
  
+ (defun Info-unescape-quotes (value)
+   "Unescape double quotes and backslashes in VALUE"
+   (let ((start 0)
+       (unquote value))
+     (while (string-match "[^\\\"]*\\(\\\\\\)[\\\\\"]" unquote start)
+       (setq unquote (replace-match "" t t unquote 1))
+       (setq start (- (match-end 0) 1)))
+     unquote))
+ 
+ ;; As of Texinfo 4.6, makeinfo writes constructs like
+ ;;   \0\h[image param=value ...\h\0]
+ ;; into the Info file for handling images.
+ (defun Info-split-parameter-string (parameter-string)
+   "Return alist of (\"KEY\" . \"VALUE\") from PARAMETER-STRING; a
+    whitespace separated list of KEY=VALUE pairs.  If VALUE
+    contains whitespace or double quotes, it must be quoted in
+    double quotes and any double quotes or backslashes must be
+    escaped (\\\",\\\\)."
+   (let ((start 0)
+       (parameter-alist))
+     (while (string-match
+           "\\s *\\([^=]+\\)=\\(?:\\([^\\s 
\"]+\\)\\|\\(?:\"\\(\\(?:[^\\\"]\\|\\\\[\\\\\"]\\)*\\)\"\\)\\)"
+           parameter-string start)
+       (setq start (match-end 0))
+       (push (cons (match-string 1 parameter-string)
+                 (or (match-string 2 parameter-string)
+                     (Info-unescape-quotes
+                      (match-string 3 parameter-string))))
+           parameter-alist))
+     parameter-alist))
+ 
+ (defun Info-display-images-node ()
+   "Display images in current node."
+   (save-excursion
+     (let ((inhibit-read-only t)
+         (case-fold-search t)
+         paragraph-markers)
+       (goto-char (point-min))
+       (while (re-search-forward
+             "\\(\0\b[[]image\\(\\(?:[^\b]\\|[^\0]+\b\\)*\\)\0\b[]]\\)"
+             nil t)
+       (let* ((start (match-beginning 1))
+              (parameter-alist (Info-split-parameter-string (match-string 2)))
+              (src (cdr (assoc-string "src" parameter-alist)))
+              (image-file (if src (if (file-name-absolute-p src) src
+                                    (concat default-directory src))
+                            ""))
+              (image (if (file-exists-p image-file)
+                         (create-image image-file)
+                       "[broken image]")))
+         (message "Found image: %S" image-file)
+         (if (not (get-text-property start 'display))
+             (add-text-properties
+              start (point) `(display ,image rear-nonsticky (display)))))))
+     (set-buffer-modified-p nil)))
+ 
  (defvar Info-header-line nil
    "If the info node header is hidden, the text of the header.")
  (put 'Info-header-line 'risky-local-variable t)
***************
*** 1112,1117 ****
--- 1168,1174 ----
        (if Info-enable-active-nodes (eval active-expression))
        (Info-fontify-node)
        (setq Info-header-line (get-text-property (point-min) 'header-line))
+       (Info-display-images-node)
        (run-hooks 'Info-selection-hook)))))
  
  (defun Info-set-mode-line ()




reply via email to

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