;;; shr.el --- Simple HTML Renderer
-;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2011 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: html
(const :tag "Use the width of the window" nil))
:group 'shr)
-(defface shr-tag-h1 '((t (:bold t :height 2.2)))
- "Face used for H1 tags."
- :group 'shr)
-
-(defface shr-tag-h2 '((t (:bold t :height 2.0)))
- "Face used for H2 tags."
- :group 'shr)
-
-(defface shr-tag-h3 '((t (:bold t :height 1.8)))
- "Face used for H3 tags."
- :group 'shr)
-
-(defface shr-tag-h4 '((t (:bold t :height 1.6)))
- "Face used for H4 tags."
- :group 'shr)
-
-(defface shr-tag-h5 '((t (:bold t :height 1.4)))
- "Face used for H5 tags."
- :group 'shr)
-
-(defface shr-tag-h6 '((t (:bold t :height 1.2)))
- "Face used for H6 tags."
- :group 'shr)
-
(defvar shr-content-function nil
"If bound, this should be a function that will return the content.
This is used for cid: URLs, and the function is called with the
(when fg
(shr-put-color start end :foreground (cadr new-colors)))
(when bg
- (shr-put-color start end :background (car new-colors)))))))
+ (shr-put-color start end :background (car new-colors))))
+ new-colors)))
;; Put a color in the region, but avoid putting colors on on blank
;; text at the start of the line, and the newline at the end, to avoid
(save-excursion
(goto-char start)
(while (< (point) end)
- (when (bolp)
+ (when (and (bolp)
+ (not (eq type :background)))
(skip-chars-forward " "))
(when (> (line-end-position) (point))
(shr-put-color-1 (point) (min (line-end-position) end) type color))
(if (< (line-end-position) end)
(forward-line 1)
(goto-char end)))
- (when (eq type :background)
+ (when (and (eq type :background)
+ (= shr-table-depth 0))
(shr-expand-newlines start end color))))
(defun shr-expand-newlines (start end color)
(goto-char (point-min))
(while (not (eobp))
(end-of-line)
- (when (and (< (setq current-column (current-column)) width)
- (< (setq current-column (shr-previous-newline-padding-width
- current-column))
+ (when (and (< (setq column (current-column)) width)
+ (< (setq column (shr-previous-newline-padding-width column))
width))
(let ((overlay (make-overlay (point) (1+ (point)))))
(overlay-put overlay 'before-string
(concat
(mapconcat
(lambda (overlay)
- (let ((string (getf (overlay-properties overlay) 'before-string)))
+ (let ((string (plist-get
+ (overlay-properties overlay)
+ 'before-string)))
(if (not string)
""
(overlay-put overlay 'before-string "")
string)))
(overlays-at (point))
"")
- (propertize (make-string (- width current-column) ? )
+ (propertize (make-string (- width column) ? )
'face (list :background color))))))
(forward-line 1)))))
(dolist (overlay overlays)
(setq previous-width
(+ previous-width
- (length (getf (overlay-properties overlay) 'before-string)))))
+ (length (plist-get (overlay-properties overlay)
+ 'before-string)))))
(+ width previous-width))))
(defun shr-put-color-1 (start end type color)
(defun shr-tag-body (cont)
(let* ((start (point))
- (fgcolor (cdr (assq :fgcolor cont)))
+ (fgcolor (cdr (or (assq :fgcolor cont)
+ (assq :text cont))))
(bgcolor (cdr (assq :bgcolor cont)))
(shr-stylesheet (list (cons 'color fgcolor)
(cons 'background-color bgcolor))))
(shr-generic cont))
(defun shr-tag-h1 (cont)
- (shr-heading cont 'shr-tag-h1))
+ (shr-heading cont 'bold 'underline))
(defun shr-tag-h2 (cont)
- (shr-heading cont 'shr-tag-h2))
+ (shr-heading cont 'bold))
(defun shr-tag-h3 (cont)
- (shr-heading cont 'shr-tag-h3))
+ (shr-heading cont 'italic))
(defun shr-tag-h4 (cont)
- (shr-heading cont 'shr-tag-h4))
+ (shr-heading cont))
(defun shr-tag-h5 (cont)
- (shr-heading cont 'shr-tag-h5))
+ (shr-heading cont))
(defun shr-tag-h6 (cont)
- (shr-heading cont 'shr-tag-h6))
+ (shr-heading cont))
(defun shr-tag-hr (cont)
(shr-ensure-newline)
;; possibly.
(dotimes (i (- height (length lines)))
(end-of-line)
- (insert (make-string (string-width (car lines)) ? )
- shr-table-vertical-line)
+ (let ((start (point)))
+ (insert (make-string (string-width (car lines)) ? )
+ shr-table-vertical-line)
+ (when (nth 4 column)
+ (shr-put-color start (1- (point)) :background (nth 4 column))))
(forward-line 1)))))
(shr-insert-table-ruler widths)))
(fgcolor (cdr (assq :fgcolor cont)))
(style (cdr (assq :style cont)))
(shr-stylesheet shr-stylesheet)
- overlays)
+ overlays actual-colors)
(when style
(setq style (and (string-match "color" style)
(shr-parse-style style))))
(end-of-line)
(when (> (- width (current-column)) 0)
(insert (make-string (- width (current-column)) ? )))
- (forward-line 1))))
- (when style
- (shr-colorize-region
- (point-min) (point-max)
- (cdr (assq 'color shr-stylesheet))
- (cdr (assq 'background-color shr-stylesheet))))
+ (forward-line 1)))
+ (when style
+ (setq actual-colors
+ (shr-colorize-region
+ (point-min) (point-max)
+ (cdr (assq 'color shr-stylesheet))
+ (cdr (assq 'background-color shr-stylesheet))))))
(if fill
(list max
(count-lines (point-min) (point-max))
(split-string (buffer-string) "\n")
- (shr-collect-overlays))
+ (shr-collect-overlays)
+ (car actual-colors))
(list max
(shr-natural-width)))))))