X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fshr.el;h=494e761d3f8cc2725c1a256aef639a7faf681e07;hb=729f45911d1ca333db712468f8af3924a852fb25;hp=9580b4f60db450684dd7edf442214f38ca702051;hpb=eee491757a49e1494a4df549b5954612c4c194e1;p=gnus diff --git a/lisp/shr.el b/lisp/shr.el index 9580b4f60..494e761d3 100644 --- a/lisp/shr.el +++ b/lisp/shr.el @@ -92,15 +92,18 @@ fit these criteria." (defun shr-tag-p (cont) (shr-ensure-paragraph) (shr-generic cont) - (unless (bobp) - (insert "\n"))) + (shr-ensure-paragraph)) (defun shr-ensure-paragraph () (unless (bobp) (if (bolp) (unless (eql (char-after (- (point) 2)) ?\n) (insert "\n")) - (insert "\n\n")))) + (if (save-excursion + (beginning-of-line) + (looking-at " *$")) + (insert "\n") + (insert "\n\n"))))) (defun shr-tag-b (cont) (shr-fontize-cont cont 'bold)) @@ -111,8 +114,8 @@ fit these criteria." (defun shr-tag-u (cont) (shr-fontize-cont cont 'underline)) -(defun shr-s (cont) - (shr-fontize-cont cont 'strikethru)) +(defun shr-tag-s (cont) + (shr-fontize-cont cont 'strike-through)) (defun shr-fontize-cont (cont &rest types) (let (shr-start) @@ -139,7 +142,7 @@ fit these criteria." (browse-url (widget-get widget :url))) (defun shr-tag-img (cont) - (when (and (plusp (current-column)) + (when (and (> (current-column) 0) (not (eq shr-state 'image))) (insert "\n")) (let ((start (point-marker))) @@ -211,14 +214,14 @@ fit these criteria." image))) (defun shr-tag-pre (cont) - (let ((shr-folding-mode nil)) + (let ((shr-folding-mode 'none)) (shr-ensure-newline) (shr-generic cont) (shr-ensure-newline))) (defun shr-tag-blockquote (cont) (let ((shr-indentation (+ shr-indentation 4))) - (shr-tag-pre cont))) + (shr-generic cont))) (defun shr-ensure-newline () (unless (zerop (current-column)) @@ -230,24 +233,38 @@ fit these criteria." (setq shr-state nil)) (cond ((eq shr-folding-mode 'none) - (insert t)) + (insert text)) (t - (let (column) + (let ((first t) + column) + (when (and (string-match "\\`[ \t\n]" text) + (not (bolp))) + (insert " ")) (dolist (elem (split-string text)) (setq column (current-column)) - (when (plusp column) - (if (> (+ column (length elem) 1) shr-width) - (insert "\n") - (insert " "))) + (when (> column 0) + (cond + ((and (or (not first) + (eq shr-state 'space)) + (> (+ column (length elem) 1) shr-width)) + (insert "\n")) + ((not first) + (insert " ")))) + (setq first nil) (when (and (bolp) - (plusp shr-indentation)) + (> shr-indentation 0)) (insert (make-string shr-indentation ? ))) ;; 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)))))) + (insert elem)) + (setq shr-state nil) + (when (and (string-match "[ \t\n]\\'" text) + (not (bolp))) + (insert " ") + (setq shr-state 'space)))))) (defun shr-get-image-data (url) "Get image data for URL. @@ -262,6 +279,7 @@ Return a string with image data." (defvar shr-list-mode nil) (defun shr-tag-ul (cont) + (shr-ensure-paragraph) (let ((shr-list-mode 'ul)) (shr-generic cont))) @@ -271,15 +289,19 @@ Return a string with image data." (defun shr-tag-li (cont) (shr-ensure-newline) - (if (numberp shr-list-mode) - (progn - (insert (format "%d " shr-list-mode)) - (setq shr-list-mode (1+ shr-list-mode))) - (insert "* ")) - (shr-generic cont)) + (let* ((bullet + (if (numberp shr-list-mode) + (prog1 + (format "%d " shr-list-mode) + (setq shr-list-mode (1+ shr-list-mode))) + "* ")) + (shr-indentation (+ shr-indentation (length bullet)))) + (insert bullet) + (shr-generic cont))) (defun shr-tag-br (cont) - (shr-ensure-newline) + (unless (bobp) + (insert "\n")) (shr-generic cont)) (defun shr-tag-h1 (cont) @@ -297,6 +319,9 @@ Return a string with image data." (defun shr-tag-h5 (cont) (shr-heading cont)) +(defun shr-tag-h6 (cont) + (shr-heading cont)) + (defun shr-heading (cont &rest types) (shr-ensure-paragraph) (apply #'shr-fontize-cont cont types)