Function: shr-fill-line
shr-fill-line is a byte-compiled function defined in shr.el.gz.
Signature
(shr-fill-line)
Documentation
Indent and fill the current line.
When shr-fill-text(var)/shr-fill-text(fun) is nil, only indent.
Source Code
;; Defined in /usr/src/emacs/lisp/net/shr.el.gz
(defun shr-fill-line ()
"Indent and fill the current line.
When `shr-fill-text' is nil, only indent."
(let ((shr-indentation (or (get-text-property (point) 'shr-indentation)
shr-indentation))
(continuation (get-text-property
(point) 'shr-continuation-indentation))
start)
(put-text-property (point) (1+ (point)) 'shr-indentation nil)
(let ((face (get-text-property (point) 'face))
(background-start (point)))
(shr-indent)
(when face
(put-text-property background-start (point) 'face
`,(shr-face-background face))))
(setq start (point))
(setq shr-indentation (or continuation shr-indentation))
;; Fill the current line, unless `shr-fill-text' is unset, or we
;; have an indentation that's wider than the width we're trying to
;; fill to.
(when (and shr-fill-text
(< shr-indentation shr-internal-width))
(shr-vertical-motion shr-internal-width)
(when (looking-at " $")
(delete-region (point) (line-end-position)))
(while (not (eolp))
;; We have to do some folding. First find the first
;; previous point suitable for folding.
(if (or (not (pixel-fill-find-fill-point (line-beginning-position)))
(= (point) start))
;; We had unbreakable text (for this width), so just go to
;; the first space and carry on.
(progn
(beginning-of-line)
(skip-chars-forward " ")
(search-forward " " (line-end-position) 'move)))
;; Success; continue.
(when (= (preceding-char) ?\s)
(delete-char -1))
(let ((gap-start (point))
(face (get-text-property (point) 'face)))
;; Extend the background to the end of the line.
(insert ?\n)
(shr-indent)
(when face
(put-text-property gap-start (point)
'face (shr-face-background face)))
(when (and (> (1- gap-start) (point-min))
(get-text-property (point) 'shr-url)
;; The link on both sides of the newline are the
;; same...
(equal (get-text-property (point) 'shr-url)
(get-text-property (1- gap-start) 'shr-url)))
;; ... so we join the two bits into one link logically, but
;; not visually. This makes navigation between links work
;; well, but avoids underscores before the link on the next
;; line when indented.
(let* ((props (copy-sequence (text-properties-at (point))))
(face (plist-get props 'face)))
;; We don't want to use the faces on the indentation, because
;; that's ugly, but we do want to use the background color.
(when face
(setq props (plist-put props 'face (shr-face-background face))))
(add-text-properties gap-start (point) props))))
(setq start (point))
(shr-vertical-motion shr-internal-width)
(when (looking-at " $")
(delete-region (point) (line-end-position)))))))