(defvar shr-folding-mode nil)
(defvar shr-state nil)
+(defvar shr-start nil)
(defvar shr-width 70)
;;;###autoload
(defun shr-insert-document (dom)
- (let ((shr-state nil))
+ (let ((shr-state nil)
+ (shr-start nil))
(shr-descend (shr-transform-dom dom))))
(defun shr-descend (dom)
(shr-fontize-cont cont 'strikethru))
(defun shr-fontize-cont (cont type)
- (let ((start (point)))
+ (let (shr-start)
(shr-generic cont)
- (shr-add-font start (point) type)))
+ (shr-add-font shr-start (point) type)))
(defun shr-add-font (start end type)
- (put-text-property start end 'face type))
+ (let ((overlay (make-overlay start end)))
+ (overlay-put overlay 'face type)))
(defun shr-a (cont)
- (let ((start (point))
- (url (cdr (assq :href cont))))
+ (let ((url (cdr (assq :href cont)))
+ shr-start)
(shr-generic cont)
(widget-convert-button
- 'link start (point)
+ 'link shr-start (point)
:action 'shr-browse-url
:url url
:keymap widget-keymap
(let (column)
(dolist (elem (split-string text))
(setq column (current-column))
- (if (zerop column)
- (insert elem)
+ (when (plusp column)
(if (> (+ column (length elem) 1) shr-width)
- (insert "\n" elem)
- (insert " " elem))))))))
+ (insert "\n")
+ (insert " ")))
+ ;; The shr-start is a special variable that is used to pass
+ ;; upwards the first point in the buffer where the text really
+ ;; starts.
+ (unless shr-start
+ (setq shr-start (point)))
+ (insert elem))))))
(defun shr-get-image-data (url)
"Get image data for URL.