# HG changeset patch # User Richard M. Stallman # Date 866584000 0 # Node ID 363bd42657e1cf398bcd4c52a869d38c849d0fb6 # Parent ffc2fda197bc52abbfaf27874850c06fe25c8928 (fill-context-prefix): Fix criteria for first line, and for second line; always fetch prefixes from both lines. diff -r ffc2fda197bc -r 363bd42657e1 lisp/textmodes/fill.el --- a/lisp/textmodes/fill.el Tue Jun 17 19:34:56 1997 +0000 +++ b/lisp/textmodes/fill.el Tue Jun 17 21:46:40 1997 +0000 @@ -1,6 +1,6 @@ ;;; fill.el --- fill commands for Emacs -;; Copyright (C) 1985, 86, 92, 94, 95, 1996 Free Software Foundation, Inc. +;; Copyright (C) 1985, 86, 92, 94, 95, 96, 1997 Free Software Foundation, Inc. ;; Keywords: wp @@ -183,45 +183,60 @@ (if (eolp) (forward-line 1)) ;; Move to the second line unless there is just one. (let ((firstline (point)) + first-line-prefix ;; Non-nil if we are on the second line. at-second - result) + second-line-prefix + start) + (move-to-left-margin) + (setq start (point)) + (setq first-line-prefix + (cond ((looking-at paragraph-start) nil) + ((and adaptive-fill-regexp (looking-at adaptive-fill-regexp)) + (buffer-substring-no-properties start (match-end 0))) + (adaptive-fill-function (funcall adaptive-fill-function)))) (forward-line 1) (if (>= (point) to) (goto-char firstline) - (setq at-second t)) - (move-to-left-margin) - (let ((start (point))) - (setq result - (if (not (looking-at paragraph-start)) - (cond ((and adaptive-fill-regexp (looking-at adaptive-fill-regexp)) - (buffer-substring-no-properties start (match-end 0))) - (adaptive-fill-function (funcall adaptive-fill-function))))) - (if at-second - ;; If we get a fill prefix from the second line, - ;; make sure it's on the first line too. - (and result - (save-excursion - (forward-line -1) - (if (looking-at (regexp-quote result)) - result))) - ;; If we get a fill prefix from a one-line paragraph, - ;; maybe change it to whitespace, - ;; and check that it isn't a paragraph starter. - (if result - (progn - ;; If RESULT comes from the first line, - ;; see if it seems reasonable to use for all lines. - ;; If not, replace it with whitespace. - (or (and first-line-regexp - (string-match first-line-regexp result)) - (and comment-start-skip - (string-match comment-start-skip result)) - (setq result (make-string (string-width result) ?\ ))) - ;; But either way, reject it if it indicates - ;; the start of a paragraph. - (if (not (eq 0 (string-match paragraph-start result))) - result)))))))) + (setq at-second t) + (move-to-left-margin) + (setq start (point)) + (setq second-line-prefix + (cond ((looking-at paragraph-start) nil) + ((and adaptive-fill-regexp (looking-at adaptive-fill-regexp)) + (buffer-substring-no-properties start (match-end 0))) + (adaptive-fill-function (funcall adaptive-fill-function))))) + (if at-second + ;; If we get a fill prefix from the second line, + ;; make sure it or something compatible is on the first line too. + (and second-line-prefix + (if (or (string-match (regexp-quote second-line-prefix) + first-line-prefix) + (and (string-match "[ \t]" second-line-prefix) + (>= (string-width first-line-prefix) + (string-width second-line-prefix)))) + second-line-prefix)) + ;; If we get a fill prefix from a one-line paragraph, + ;; maybe change it to whitespace, + ;; and check that it isn't a paragraph starter. + (if first-line-prefix + (let ((result + ;; If first-line-prefix comes from the first line, + ;; see if it seems reasonable to use for all lines. + ;; If not, replace it with whitespace. + (if (or (and first-line-regexp + (string-match first-line-regexp + first-line-prefix)) + (and comment-start-skip + (string-match comment-start-skip + first-line-prefix))) + first-line-prefix + (make-string (string-width first-line-prefix) ?\ )))) + ;; But either way, reject it if it indicates the start + ;; of a paragraph when text follows it. + (if (not (eq 0 (string-match paragraph-start + (concat result "a")))) + result)))))))) (defun fill-region-as-paragraph (from to &optional justify nosqueeze squeeze-after)