# HG changeset patch # User Gerd Moellmann # Date 947626932 0 # Node ID 523c67808ff46871da739baf7bd649c01bf32988 # Parent d3c2ea889aa80dbeea8bcf22145909ddafae02d9 (fill-common-string-prefix): New function. (fill-context-prefix): Use the longest common substring of both prefixes, if there is one. diff -r d3c2ea889aa8 -r 523c67808ff4 lisp/textmodes/fill.el --- a/lisp/textmodes/fill.el Tue Jan 11 19:31:26 2000 +0000 +++ b/lisp/textmodes/fill.el Tue Jan 11 21:42:12 2000 +0000 @@ -185,6 +185,15 @@ ;; of the line and wants it to stay at the end of the line. (insert-before-markers-and-inherit ? ))))) +(defun fill-common-string-prefix (s1 s2) + "Return the longest common prefix of strings S1 and S2, or nil if none." + (let ((cmp (compare-strings s1 nil nil s2 nil nil))) + (if (eq cmp t) + s1 + (setq cmp (1- (abs cmp))) + (unless (zerop cmp) + (substring s1 0 cmp))))) + (defun fill-context-prefix (from to &optional first-line-regexp) "Compute a fill prefix from the text between FROM and TO. This uses the variables `adaptive-fill-regexp' and `adaptive-fill-function' @@ -233,13 +242,24 @@ ;; If the second line prefix is whitespace, use it. (string-match "\\`[ \t]+\\'" second-line-prefix)) second-line-prefix - ;; If the second line has the first line prefix, - ;; plus whitespace, use the part that the first line shares. - (if (string-match (concat "\\`" - (regexp-quote first-line-prefix) - "[ \t]*\\'") - second-line-prefix) - first-line-prefix))) + + ;; If using the common prefix of first-line-prefix + ;; and second-line-prefix leads to problems, consider + ;; to restore the code below that's commented out, + ;; and document why a common prefix cannot be used. + +; ;; If the second line has the first line prefix, +; ;; plus whitespace, use the part that the first line shares. +; (if (string-match (concat "\\`" +; (regexp-quote first-line-prefix) +; "[ \t]*\\'") +; second-line-prefix) +; first-line-prefix))) + + ;; Use the longest common substring of both prefixes, + ;; if there is one. + (fill-common-string-prefix first-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.