# HG changeset patch # User Richard M. Stallman # Date 889425440 0 # Node ID e1c817a29b2d05950ad4768f65fcae2c69477fb4 # Parent 912cc3491589f24b19e5fef2abd9e75e9cc8d740 (fill-nobreak-predicate): New variable. (fill-region-as-paragraph): Obey fill-nobreak-predicate. diff -r 912cc3491589 -r e1c817a29b2d lisp/textmodes/fill.el --- a/lisp/textmodes/fill.el Mon Mar 09 06:36:42 1998 +0000 +++ b/lisp/textmodes/fill.el Mon Mar 09 06:37:20 1998 +0000 @@ -247,6 +247,11 @@ (concat result "a")))) result))))))) +(defvar fill-nobreak-predicate nil + "If non-nil, a predicate for recognizing places not to break a line. +The predicate is called with no arguments, with point at the place +to be tested. If it returns t, fill commands do not break the line there.") + (defun fill-region-as-paragraph (from to &optional justify nosqueeze squeeze-after) "Fill the region as one paragraph. @@ -421,14 +426,17 @@ ;; further fills will assume it ends a sentence. ;; If we now know it does not end a sentence, ;; avoid putting it at the end of the line. - (if sentence-end-double-space - (while (and (> (point) (+ linebeg 2)) + (while (or (and sentence-end-double-space + (> (point) (+ linebeg 2)) (eq (preceding-char) ?\ ) (not (eq (following-char) ?\ )) - (eq (char-after (- (point) 2)) ?\.)) - (forward-char -2) - (if (re-search-backward " \\|\\c|.\\|.\\c|" linebeg 0) - (forward-char 1)))) + (eq (char-after (- (point) 2)) ?\.) + (progn (forward-char -2) t)) + (and fill-nobreak-predicate + (funcall fill-nobreak-predicate) + (goto-char (match-beginning 0)))) + (if (re-search-backward " \\|\\c|.\\|.\\c|" linebeg 0) + (forward-char 1))) ;; If the left margin and fill prefix by themselves ;; pass the fill-column. or if they are zero ;; but we have no room for even one word, @@ -450,7 +458,9 @@ sentence-end-double-space (save-excursion (forward-char -1) (and (looking-at "\\. ") - (not (looking-at "\\. "))))))) + (not (looking-at "\\. "))))) + (and fill-nobreak-predicate + (funcall fill-nobreak-predicate)))) ;; Find a breakable point while ignoring the ;; following spaces. (skip-chars-forward " \t") @@ -495,7 +505,9 @@ sentence-end-double-space (save-excursion (forward-char -1) (and (looking-at "\\. ") - (not (looking-at "\\. "))))))) + (not (looking-at "\\. "))))) + (and fill-nobreak-predicate + (funcall fill-nobreak-predicate)))) ;; Find a breakable point while ignoring the ;; following spaces. (skip-chars-forward " \t")