X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0c382083b6b550c26fad8ac7f59b1ba09663e728..7e09ef09a479731d01b1ca46e94ddadd73ac98e3:/lisp/textmodes/paragraphs.el diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el index 4f1bcefa90..b18a93cd3e 100644 --- a/lisp/textmodes/paragraphs.el +++ b/lisp/textmodes/paragraphs.el @@ -1,10 +1,9 @@ ;;; paragraphs.el --- paragraph and sentence parsing -;; Copyright (C) 1985, 1986, 1987, 1991, 1994, 1995, 1996, 1997, 1999, 2000, -;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -;; Free Software Foundation, Inc. +;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2015 Free Software +;; Foundation, Inc. -;; Maintainer: FSF +;; Maintainer: emacs-devel@gnu.org ;; Keywords: wp ;; Package: emacs @@ -36,19 +35,23 @@ (put 'use-hard-newlines 'permanent-local t) (define-minor-mode use-hard-newlines - "Minor mode to distinguish hard and soft newlines. -When active, the functions `newline' and `open-line' add the + "Toggle distinguishing between hard and soft newlines. +With a prefix argument ARG, enable the feature if ARG is +positive, and disable it otherwise. If called from Lisp, enable +it if ARG is omitted or nil. + +When enabled, the functions `newline' and `open-line' add the text-property `hard' to newlines that they insert, and a line is only considered as a candidate to match `paragraph-start' or `paragraph-separate' if it follows a hard newline. -Prefix argument says to turn mode on if positive, off if negative. -When the mode is turned on, if there are newlines in the buffer but no hard -newlines, ask the user whether to mark as hard any newlines preceeding a -`paragraph-start' line. From a program, second arg INSERT specifies whether -to do this; it can be `never' to change nothing, t or `always' to force -marking, `guess' to try to do the right thing with no questions, nil -or anything else to ask the user. +When enabling, if there are newlines in the buffer but no hard +newlines, ask the user whether to mark as hard any newlines +preceding a `paragraph-start' line. From a program, second arg +INSERT specifies whether to do this; it can be `never' to change +nothing, t or `always' to force marking, `guess' to try to do the +right thing with no questions, nil or anything else to ask the +user. Newlines not marked hard are called \"soft\", and are always internal to paragraphs. The fill functions insert and delete only soft newlines." @@ -376,8 +379,8 @@ the number of paragraphs marked equals ARG. If ARG is negative, point is put at end of this paragraph, mark is put at beginning of this or a previous paragraph. -Interactively, if this command is repeated -or (in Transient Mark mode) if the mark is active, +Interactively (or if ALLOW-EXTEND is non-nil), if this command is +repeated or (in Transient Mark mode) if the mark is active, it marks the next ARG paragraphs after the ones already marked." (interactive "p\np") (unless arg (setq arg 1)) @@ -457,21 +460,29 @@ sentences. Also, every paragraph boundary terminates sentences as well." (sentence-end (sentence-end))) (while (< arg 0) (let ((pos (point)) - ;; We used to use (start-of-paragraph-text), but this can - ;; prevent sentence-end from matching if it is anchored at - ;; BOL and the paragraph starts indented. - (par-beg (save-excursion (backward-paragraph) (point)))) - (if (and (re-search-backward sentence-end par-beg t) - (or (< (match-end 0) pos) - (re-search-backward sentence-end par-beg t))) - (goto-char (match-end 0)) - (goto-char par-beg))) + par-beg par-text-beg) + (save-excursion + (start-of-paragraph-text) + ;; Start of real text in the paragraph. + ;; We move back to here if we don't see a sentence-end. + (setq par-text-beg (point)) + ;; Start of the first line of the paragraph. + ;; We use this as the search limit + ;; to allow sentence-end to match if it is anchored at + ;; BOL and the paragraph starts indented. + (beginning-of-line) + (setq par-beg (point))) + (if (and (re-search-backward sentence-end par-beg t) + (or (< (match-end 0) pos) + (re-search-backward sentence-end par-beg t))) + (goto-char (match-end 0)) + (goto-char par-text-beg))) (setq arg (1+ arg))) (while (> arg 0) (let ((par-end (save-excursion (end-of-paragraph-text) (point)))) - (if (re-search-forward sentence-end par-end t) - (skip-chars-backward " \t\n") - (goto-char par-end))) + (if (re-search-forward sentence-end par-end t) + (skip-chars-backward " \t\n") + (goto-char par-end))) (setq arg (1- arg))) (constrain-to-field nil opoint t))) @@ -529,5 +540,4 @@ the current sentence with the one containing the mark." ;; coding: utf-8 ;; End: -;; arch-tag: e727eb1a-527a-4464-b9d7-9d3ec0d1a575 ;;; paragraphs.el ends here