From: Lars Ingebrigtsen Date: Tue, 25 Jan 2011 08:42:32 +0000 (+0000) Subject: shr.el (shr-expand-newlines): Make nested boxes work. X-Git-Tag: emacs-pretest-24.0.90~104^2~618^2~1322^2~130 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d709b79ac8969fd305b5bec23cb02b927dfe1507;p=emacs.git shr.el (shr-expand-newlines): Make nested boxes work. --- diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 34c97a97dd7..16d0787f768 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,7 @@ +2011-01-25 Lars Ingebrigtsen + + * shr.el (shr-expand-newlines): Make nested boxes work. + 2011-01-24 Lars Ingebrigtsen * shr.el (shr-expand-newlines): Proof of concept implemantation of boxy diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el index fb0db90e580..aa05a061868 100644 --- a/lisp/gnus/shr.el +++ b/lisp/gnus/shr.el @@ -648,6 +648,15 @@ ones, in case fg and bg are nil." (defun shr-expand-newlines (start end color) (save-restriction + ;; Skip past all white space at the start and ends. + (goto-char start) + (skip-chars-forward " \t\n") + (beginning-of-line) + (setq start (point)) + (goto-char end) + (skip-chars-backward " \t\n") + (forward-line 1) + (setq end (point)) (narrow-to-region start end) (let ((width (shr-natural-width)) column) @@ -655,13 +664,36 @@ ones, in case fg and bg are nil." (while (not (eobp)) (end-of-line) (when (and (< (setq current-column (current-column)) width) - (not (overlays-at (point)))) + (< (setq current-column (shr-previous-newline-padding-width + current-column)) + width)) (let ((overlay (make-overlay (point) (1+ (point))))) (overlay-put overlay 'before-string - (propertize (make-string (- width current-column) ? ) - 'face (list :background color))))) + (concat + (mapconcat + (lambda (overlay) + (let ((string (getf (overlay-properties overlay) 'before-string))) + (if (not string) + "" + (overlay-put overlay 'before-string "") + string))) + (overlays-at (point)) + "") + (propertize (make-string (- width current-column) ? ) + 'face (list :background color)))))) (forward-line 1))))) +(defun shr-previous-newline-padding-width (width) + (let ((overlays (overlays-at (point))) + (previous-width 0)) + (if (null overlays) + width + (dolist (overlay overlays) + (setq previous-width + (+ previous-width + (length (getf (overlay-properties overlay) 'before-string))))) + (+ width previous-width)))) + (defun shr-put-color-1 (start end type color) (let* ((old-props (get-text-property start 'face)) (do-put (not (memq type old-props)))