From unknown Sat Jun 14 03:54:58 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#78561 <78561@debbugs.gnu.org> To: bug#78561 <78561@debbugs.gnu.org> Subject: Status: [PATCH] Add semantic linefeed support for paragraph filling Reply-To: bug#78561 <78561@debbugs.gnu.org> Date: Sat, 14 Jun 2025 10:54:58 +0000 retitle 78561 [PATCH] Add semantic linefeed support for paragraph filling reassign 78561 emacs submitter 78561 Roi Martin severity 78561 normal tag 78561 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Fri May 23 05:58:30 2025 Received: (at submit) by debbugs.gnu.org; 23 May 2025 09:58:30 +0000 Received: from localhost ([127.0.0.1]:45802 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIPAZ-0001n6-QS for submit@debbugs.gnu.org; Fri, 23 May 2025 05:58:30 -0400 Received: from lists.gnu.org ([2001:470:142::17]:51364) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIPAT-0001mh-Ur for submit@debbugs.gnu.org; Fri, 23 May 2025 05:58:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIPAO-0006wH-1A for bug-gnu-emacs@gnu.org; Fri, 23 May 2025 05:58:16 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uIPAI-0008JZ-IO for bug-gnu-emacs@gnu.org; Fri, 23 May 2025 05:58:15 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-442ccf0e1b3so110918915e9.3 for ; Fri, 23 May 2025 02:58:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747994289; x=1748599089; darn=gnu.org; h=mime-version:message-id:date:subject:to:from:from:to:cc:subject :date:message-id:reply-to; bh=tV8Afgj1RHH7Wkie9fiOeLvOGYbh1s9V6ZTd6UchsTo=; b=NRcUd4KhqwFHSfZmoSv/oVxwRqZhD8U07l7FFkfndSFdlNTFC9+x1pOXJKLJXoKumu iNCW69KSA495W7WlZXq5KKzNpEi4qQ8ZTzoAmeCXR6+cnJTRSQyhWzRaoRAAJNz2HUzX V9MRUuRekV2pqKtiVdEVOJo9Fs4FZUBQX/MTlwktCgZ8y9rBW4Y8M9zDAWTESgpP/spX gTyZmwerAkqc7MQzHziMT1BdhwBV11tHLZ7fyoeAu6gYMWc30ExWH3lL6MfjhuRy9AMB hEOCvMB6tsuaBitzdt+rLt46n3X6T8pFwDBAK7/xApWZHSMUe535hCz0eKlaThBYOaFW wFBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747994289; x=1748599089; h=mime-version:message-id:date:subject:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=tV8Afgj1RHH7Wkie9fiOeLvOGYbh1s9V6ZTd6UchsTo=; b=Y9iRwRNDQ2xgl8+18eSkyprec2wvfJfc8fbfHGUEU/UgpTnWylB56xYS7rMUc3VUTn 7m1im4zJgBKZtNWtnjrVM4u/m8OovRwntJp5JKnu+2+kjL+4npxsE0gSGm8TFHbaoT83 GkTM9PCQ2wJyFm/MoAlDhYpziIHWFGl1H2+brvVTgdUHQgK2bV3F9o6YTPnd4uuKRnhw hbE83JE/rdOE/2V7aH1RwFnGN13ECEB+h1WaTvp2e1xCUTgVPyKhkNRgOXtcYPGFm2kG mkHpwiikglOpApMt8tcF5Wy6Dp+wMIt3cyP6y33uWPGLMUZ3KBA9RCTNY1eaqBScaXjs NXpw== X-Gm-Message-State: AOJu0YwdCb4wvKRFwsm2AbbD0QnKLqZJaCFd6b9wsK0WohDoGRSrFqbK iHs/nk6CiAMrnLfurbsLXZsAIpcNvEPq5YheFKS7w5DU67XXpGSb9qF14YX+bg== X-Gm-Gg: ASbGncsftz67TrX3uqnPSxguJVZSYZtRRZHoNqwSvs/P689z/PC7vsr8+iy6gS9vLX3 4iiGfQbF1x2tyquliT20mm7zCC7v04IyOx3FhDj4N0+89ILTcjRE+jsMs1Uh9oKA2QT2CUN8UNE pBXBssi5UxGfsklk3VM+Nxl6VldIBvyAGTFqDTUTKTjcrw7uBPMjdj3goPgwrJqfGvFiIwaHrEl chkfKGBOqy4uyOExOBPcAEuFY9BlqApuXQ3u1KNyFyOOrTn6pPEKqsq5ds0zFmcYijD+jOnus6P qNxKNvxtU9nSBbWsDh+btDohlbriP1V+xPtL8MLoKHWI+/QjJA== X-Google-Smtp-Source: AGHT+IEGnz4MnmNI14hA1Qdgf3iikFvX9xB9d2OQNmDsOrpkYaP7yAKJKEVlDqUWwySAm958FGDoMQ== X-Received: by 2002:a05:6000:2f87:b0:3a0:b84c:52b4 with SMTP id ffacd0b85a97d-3a4c20eea8amr2414044f8f.10.1747994288615; Fri, 23 May 2025 02:58:08 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a362997dc8sm24192274f8f.46.2025.05.23.02.58.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 May 2025 02:58:07 -0700 (PDT) From: Roi Martin To: bug-gnu-emacs@gnu.org Subject: [PATCH] Add semantic linefeed support for paragraph filling X-Debbugs-Cc: Marcin Borkowski Date: Fri, 23 May 2025 11:58:02 +0200 Message-ID: <87jz67tzrp.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=jroi.martin@gmail.com; helo=mail-wm1-x330.google.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_SBL_A=0.1 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.7 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Tags: patch This patch adds semantic linefeed support for paragraph filling. The functionality has been discussed in the emacs-devel mailing list in the following threads: - Fill paragraph using semantic linefeeds: https://lists.gnu.org/archive/html/emacs-devel/2025-03/msg00035.html - [GNU ELPA] New package: semlf: https://lists.gnu.org/archive/html/emacs-devel/2025-03/ [...] Content analysis details: (1.7 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.1 URIBL_SBL_A Contains URL's A record listed in the Spamhaus SBL blocklist [URIs: web.archive.org] 0.6 URIBL_SBL Contains an URL's NS IP listed in the Spamhaus SBL blocklist [URIs: web.archive.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (jroi.martin[at]gmail.com) -0.0 SPF_HELO_PASS SPF: HELO matches SPF record 1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2001:470:142:0:0:0:0:17 listed in] [list.dnswl.org] X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.7 (/) --=-=-= Content-Type: text/plain Tags: patch This patch adds semantic linefeed support for paragraph filling. The functionality has been discussed in the emacs-devel mailing list in the following threads: - Fill paragraph using semantic linefeeds: https://lists.gnu.org/archive/html/emacs-devel/2025-03/msg00035.html - [GNU ELPA] New package: semlf: https://lists.gnu.org/archive/html/emacs-devel/2025-03/msg00702.html In the second thread we agreed on sending a patch to core instead of adding a new package to GNU ELPA. Given that this is a first version, I have not added any reference to the manuals. If you think it makes sense, please let me know and I'll modify the patch accordingly. What follows is a detailed explanation of the term semantic linefeeds, so we have all the information in one single place. The term "semantic linefeeds" or "semantic line breaks" refers to a set of conventions for using insensitive vertical whitespace to structure prose along semantic boundaries. The concept was first introduced by Brian Kernighan in "UNIX for Beginners" [1] in October 1974. Hints for Preparing Documents Most documents go through several versions (always more than you expected) before they are finally finished. Accordingly, you should do whatever possible to make the job of changing them easy. First, when you do the purely mechanical operations of typing, type so subsequent editing will be easy. Start each sentence on a new line. Make lines short, and break lines at natural places, such as after commas and semicolons, rather than randomly. Since most people change documents by rewriting phrases and adding, deleting and rearranging sentences, these precautions simplify any editing you have to do later. Semantic linefeeds are usually used with markup languages that are not sensitive to newlines when exported to a different format (e.g. Org, Texinfo, Markdown). Let's say that we have the following paragraph in an Org document: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. After filling the paragraph using semantic linefeeds, the result is: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. However, when exported, in both cases the result is: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. So, what are the benefits? One of the greatest benefits is that semantic linefeeds are "diff friendly". For example, -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod -tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea -commodo consequat. +Lorem ipsum dolor sit amet, XXXXX consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut +aliquip ex ea commodo consequat. Versus, -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod -tempor. +Lorem ipsum dolor sit amet, XXXXX consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Semantic linefeeds make easier to spot that the word "XXXXX" was added in the first line. Also, they are convenient during code reviews. Shorter diffs and separating "ideas" with newlines allow to be more accurate when adding comments. The site "Semantic Line Breaks" [2] by Mattt and the blog post "Semantic Linefeeds" [3] by Brandon Rhodes are both excellent references. [1] https://web.archive.org/web/20130108163017if_/http://miffy.tom-yam.or.jp:80/2238/ref/beg.pdf [2] https://sembr.org/ [3] https://rhodesmill.org/brandon/2012/one-sentence-per-line/ --=-=-= Content-Type: text/patch Content-Disposition: attachment; filename=0001-Add-semantic-linefeed-support-for-paragraph-filling.patch >From 8faa17e5ddc8156a6f9f18965bb34e477d5d8b1d Mon Sep 17 00:00:00 2001 From: Roi Martin Date: Fri, 21 Mar 2025 14:22:46 +0100 Subject: [PATCH] Add semantic linefeed support for paragraph filling * lisp/textmodes/fill.el (fill-paragraph-semlf): Add function to fill paragraph using semantic linefeeds. * test/lisp/textmodes/fill-tests.el (fill-test-fill-paragraph-semlf) (fill-test-fill-paragraph-semlf-fill-paragraph-function) (fill-test-fill-paragraph-semlf-justify) (fill-test-fill-paragraph-semlf-sentence-end-double-space) (fill-test-fill-paragraph-semlf-fill-column) (fill-test-fill-paragraph-semlf-punctuation-marks) (fill-test-fill-paragraph-semlf-twice) (fill-test-fill-paragraph-semlf-fill-prefix) (fill-test-fill-paragraph-semlf-indented-block) (fill-test-fill-paragraph-semlf-emacs-lisp-mode) (fill-test-fill-paragraph-semlf-c-mode) (fill-test-fill-paragraph-semlf-org-mode) (fill-test-fill-paragraph-semlf-markdown-mode): Add tests. * test/lisp/textmodes/fill-resources/semlf-c-mode.erts: * test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts: * test/lisp/textmodes/fill-resources/semlf-fill-column.erts: * test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts: * test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts: * test/lisp/textmodes/fill-resources/semlf-indented-block.erts: * test/lisp/textmodes/fill-resources/semlf-justify.erts: * test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts: * test/lisp/textmodes/fill-resources/semlf-org-mode.erts: * test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts: * test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts: * test/lisp/textmodes/fill-resources/semlf-twice.erts: * test/lisp/textmodes/fill-resources/semlf.erts: Add test data. --- lisp/textmodes/fill.el | 40 ++++ .../fill-resources/semlf-c-mode.erts | 183 ++++++++++++++++++ .../fill-resources/semlf-emacs-lisp-mode.erts | 87 +++++++++ .../fill-resources/semlf-fill-column.erts | 15 ++ .../semlf-fill-paragraph-function.erts | 12 ++ .../fill-resources/semlf-fill-prefix.erts | 35 ++++ .../fill-resources/semlf-indented-block.erts | 31 +++ .../fill-resources/semlf-justify.erts | 12 ++ .../fill-resources/semlf-markdown-mode.erts | 129 ++++++++++++ .../fill-resources/semlf-org-mode.erts | 122 ++++++++++++ .../semlf-punctuation-marks.erts | 13 ++ .../semlf-sentence-end-double-space.erts | 13 ++ .../textmodes/fill-resources/semlf-twice.erts | 12 ++ test/lisp/textmodes/fill-resources/semlf.erts | 88 +++++++++ test/lisp/textmodes/fill-tests.el | 90 +++++++++ 15 files changed, 882 insertions(+) create mode 100644 test/lisp/textmodes/fill-resources/semlf-c-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-column.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-indented-block.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-justify.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-org-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-twice.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf.erts diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index e38d030734fb..676c1657b666 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -1583,4 +1583,44 @@ fill-individual-paragraphs-citation "") string)) +(defun fill-paragraph-semlf (&optional justify) + "Fill paragraph at or after point using semantic linefeeds. + +This function ensures that a newline character follows every +sentence, as punctuated by a period (.), exclamation mark (!), or +question mark (?). + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. If `sentence-end-double-space' is non-nil, then period followed +by one space does not end a sentence, so don't break a line there. The +variable `fill-column' controls the width for filling." + (interactive "P") + (save-excursion + (let ((end (progn + (fill-forward-paragraph 1) + (backward-word) + (end-of-line) + (point))) + (start (progn + (fill-forward-paragraph -1) + (forward-word) + (beginning-of-line) + (point))) + pfx) + (with-restriction start end + (let ((fill-column (point-max))) + (setq pfx (or (fill-region-as-paragraph (point-min) (point-max)) ""))) + (goto-char (point-min)) + (while (not (eobp)) + (let ((fill-prefix pfx)) + (fill-region-as-paragraph (point) + (progn (forward-sentence) (point)) + justify)) + (when (and (> (point) (line-beginning-position)) + (< (point) (line-end-position))) + (delete-horizontal-space) + (newline) + (insert pfx)))))) + t) + ;;; fill.el ends here diff --git a/test/lisp/textmodes/fill-resources/semlf-c-mode.erts b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts new file mode 100644 index 000000000000..a28eb68cfc6a --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts @@ -0,0 +1,183 @@ +Point-Char: | + +Name: c-mode - single-line + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +// ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: c-mode - single-line - fill-prefix - marker + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// - eiusmod tempor. +// - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// - veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. +// - Duis aute irure dolor in reprehenderit in voluptate velit esse +// - cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// - officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - fill-prefix - whitespace + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. +// Duis aute irure dolor in reprehenderit in voluptate velit esse +// cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - indented block + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. Incididunt ut labore et dolore magna +// aliqua. Ut enim ad minim veniam, quis nostrud exercitation +// ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-=-= + +Name: c-mode - multi-line + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim + * ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - marker + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * - eiusmod tempor. + * - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * - veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. + * - Duis aute irure dolor in reprehenderit in voluptate velit esse + * - cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * - officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - whitespace + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. + * Duis aute irure dolor in reprehenderit in voluptate velit esse + * cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - indented block + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. Incididunt ut labore et dolore magna + * aliqua. Ut enim ad minim veniam, quis nostrud exercitation + * ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts new file mode 100644 index 000000000000..fe71ee32c1aa --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts @@ -0,0 +1,87 @@ +Point-Char: | + +Name: emacs-lisp-mode + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +;; ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - marker + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; - eiusmod tempor. +;; - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; - veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. +;; - Duis aute irure dolor in reprehenderit in voluptate velit esse +;; - cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; - officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - whitespace + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. +;; Duis aute irure dolor in reprehenderit in voluptate velit esse +;; cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - indented block + +The `fill-forward-paragraph' function jumps to the beginning/end of +the comment. + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. Incididunt ut labore et dolore magna +;; aliqua. Ut enim ad minim veniam, quis nostrud exercitation +;; ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-column.erts b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts new file mode 100644 index 000000000000..20db7b1f9c5b --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts @@ -0,0 +1,15 @@ +Name: fill-column + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts new file mode 100644 index 000000000000..467e7401cf50 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts @@ -0,0 +1,12 @@ +Name: fill-paragraph-function + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts new file mode 100644 index 000000000000..e067eff69701 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts @@ -0,0 +1,35 @@ +Name: fill-prefix - marker + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +- eiusmod tempor. +- Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +- veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. +- Duis aute irure dolor in reprehenderit in voluptate velit esse +- cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +- officia deserunt mollit anim id est laborum. +=-=-= + +Name: fill-prefix - whitespace + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-indented-block.erts b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts new file mode 100644 index 000000000000..e483567c6ab3 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts @@ -0,0 +1,31 @@ +Point-Char: | + +Name: indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-justify.erts b/test/lisp/textmodes/fill-resources/semlf-justify.erts new file mode 100644 index 000000000000..3a951b7ce424 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-justify.erts @@ -0,0 +1,12 @@ +Name: justify + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts new file mode 100644 index 000000000000..7257708c245d --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts @@ -0,0 +1,129 @@ +Point-Char: | + +Name: markdown-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - indented block +Skip: t + +TODO - In `markdown-mode', the `fill-forward-paragraph' function +ignores code blocks. We should reach out to the `markdown-mode' +maintainer(s) to understand the reason for this and possibly suggest a +change to this behavior. This works as expected in +`markdown-ts-mode'. + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-org-mode.erts b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts new file mode 100644 index 000000000000..81dd4841de94 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts @@ -0,0 +1,122 @@ +Point-Char: | + +Name: org-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts new file mode 100644 index 000000000000..5346216e9f9c --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts @@ -0,0 +1,13 @@ +Name: punctuation marks + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua! Ut enim +ad minim veniam? Quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua! +Ut enim ad minim veniam? +Quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts new file mode 100644 index 000000000000..a01beed0f665 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts @@ -0,0 +1,13 @@ +Name: sentence-end-double-space + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris +nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-twice.erts b/test/lisp/textmodes/fill-resources/semlf-twice.erts new file mode 100644 index 000000000000..862dda6e27eb --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-twice.erts @@ -0,0 +1,12 @@ +Name: fill twice + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf.erts b/test/lisp/textmodes/fill-resources/semlf.erts new file mode 100644 index 000000000000..f3e331cd9381 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf.erts @@ -0,0 +1,88 @@ +Point-Char: | + +Name: beginning of buffer + +=-= +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: second paragraph + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: end of buffer + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.| +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-tests.el b/test/lisp/textmodes/fill-tests.el index 6e079973100e..afd17c52dcd5 100644 --- a/test/lisp/textmodes/fill-tests.el +++ b/test/lisp/textmodes/fill-tests.el @@ -28,6 +28,7 @@ ;;; Code: (require 'ert) +(require 'ert-x) (ert-deftest fill-test-no-fill-polish-nobreak-p nil "Tests of the `fill-polish-nobreak-p' function." @@ -121,6 +122,95 @@ test-fill-haskell ;; w "))) +(ert-deftest fill-test-fill-paragraph-semlf () + "Test the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-paragraph-function () + "Test `fill-paragraph-semlf' as `fill-paragraph-function'." + (ert-test-erts-file (ert-resource-file "semlf-fill-paragraph-function.erts") + (lambda () + (setq-local fill-paragraph-function #'fill-paragraph-semlf) + (fill-paragraph)))) + +(ert-deftest fill-test-fill-paragraph-semlf-justify () + "Test the JUSTIFY parameter of the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-justify.erts") + (lambda () + (fill-paragraph-semlf 'justify)))) + +(ert-deftest fill-test-fill-paragraph-semlf-sentence-end-double-space () + "Test the `fill-paragraph-semlf' function with `sentence-end-double-space'." + (ert-test-erts-file (ert-resource-file "semlf-sentence-end-double-space.erts") + (lambda () + (setq-local sentence-end-double-space nil) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-column () + "Test the `fill-paragraph-semlf' function with `fill-column'." + (ert-test-erts-file (ert-resource-file "semlf-fill-column.erts") + (lambda () + (setq-local fill-column 35) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-punctuation-marks () + "Test the `fill-paragraph-semlf' function with different punctuation marks." + (ert-test-erts-file (ert-resource-file "semlf-punctuation-marks.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-twice () + "Test to run the `fill-paragraph-semlf' function twice." + (ert-test-erts-file (ert-resource-file "semlf-twice.erts") + (lambda () + (goto-char (point-min)) + (fill-paragraph-semlf) + (goto-char (point-min)) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-prefix () + "Test the `fill-paragraph-semlf' function with different fill prefixes." + (ert-test-erts-file (ert-resource-file "semlf-fill-prefix.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-indented-block () + "Test the `fill-paragraph-semlf' function with an indented block." + (ert-test-erts-file (ert-resource-file "semlf-indented-block.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-emacs-lisp-mode () + "Test the `fill-paragraph-semlf' function with `emacs-lisp-mode'." + (ert-test-erts-file (ert-resource-file "semlf-emacs-lisp-mode.erts") + (lambda () + (emacs-lisp-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-c-mode () + "Test the `fill-paragraph-semlf' function with `c-mode'." + (ert-test-erts-file (ert-resource-file "semlf-c-mode.erts") + (lambda () + (c-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-org-mode () + "Test the `fill-paragraph-semlf' function with `org-mode'." + (ert-test-erts-file (ert-resource-file "semlf-org-mode.erts") + (lambda () + (org-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-markdown-mode () + "Test the `fill-paragraph-semlf' function with `markdown-mode'." + (skip-unless (functionp 'markdown-mode)) + (ert-test-erts-file (ert-resource-file "semlf-markdown-mode.erts") + (lambda () + (markdown-mode) + (fill-paragraph-semlf)))) + (provide 'fill-tests) ;;; fill-tests.el ends here -- 2.49.0 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri May 23 07:11:54 2025 Received: (at 78561) by debbugs.gnu.org; 23 May 2025 11:11:54 +0000 Received: from localhost ([127.0.0.1]:46015 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIQJa-0005Vo-6t for submit@debbugs.gnu.org; Fri, 23 May 2025 07:11:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37606) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIQJV-0005VV-Nm for 78561@debbugs.gnu.org; Fri, 23 May 2025 07:11:47 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIQJP-0000aJ-1w; Fri, 23 May 2025 07:11:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=FoL1TLkdB2QqpAUn7sGXGxqGWRuC2RTpuREVMclz/co=; b=SOBOdWQwllxf b0DQYTfGrCC2sPqoy2qtRJuK6rm18EMrAxdzcJX7gHF8umy5YPB3zB5oyRvi5xYyKdb1AL6r9dkl0 ZMTLwGCX7n8IyQb/B8h4i12L50iyiakO/AfLw5dJQ0oEZ2XamCcg0RFA80Z4ofisn3KGwJDxQMQ6c RrR37ZPXP+6hrZeq27/1/zoY6ZDke7O+baez2FH4vflstp9HW+lj1Ogjlynl78MwO9ZvuIvwhzf9D r70P60+It+iXVnRNIYgYkhLVSFfJ3aKuk1ik3ax2WGVUXUI4VHRdX6PE5OB6pI9PMVfRy0w+/g9ll LbWtP7Ma7zf3m3F22cRqYA==; Date: Fri, 23 May 2025 14:11:35 +0300 Message-Id: <86ldqn4m54.fsf@gnu.org> From: Eli Zaretskii To: Roi Martin In-Reply-To: <87jz67tzrp.fsf@gmail.com> (message from Roi Martin on Fri, 23 May 2025 11:58:02 +0200) Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling References: <87jz67tzrp.fsf@gmail.com> X-Spam-Score: -1.6 (-) X-Debbugs-Envelope-To: 78561 Cc: mbork@mbork.pl, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.3 (/) > Cc: Marcin Borkowski > From: Roi Martin > Date: Fri, 23 May 2025 11:58:02 +0200 > > This patch adds semantic linefeed support for paragraph filling. The > functionality has been discussed in the emacs-devel mailing list in the > following threads: > > - Fill paragraph using semantic linefeeds: https://lists.gnu.org/archive/html/emacs-devel/2025-03/msg00035.html > - [GNU ELPA] New package: semlf: https://lists.gnu.org/archive/html/emacs-devel/2025-03/msg00702.html > > In the second thread we agreed on sending a patch to core instead of > adding a new package to GNU ELPA. > > Given that this is a first version, I have not added any reference to > the manuals. If you think it makes sense, please let me know and I'll > modify the patch accordingly. > > What follows is a detailed explanation of the term semantic linefeeds, > so we have all the information in one single place. > > The term "semantic linefeeds" or "semantic line breaks" refers to a set > of conventions for using insensitive vertical whitespace to structure > prose along semantic boundaries. > > The concept was first introduced by Brian Kernighan in "UNIX for > Beginners" [1] in October 1974. > > Hints for Preparing Documents > > Most documents go through several versions (always more than you > expected) before they are finally finished. Accordingly, you should > do whatever possible to make the job of changing them easy. > > First, when you do the purely mechanical operations of typing, type so > subsequent editing will be easy. Start each sentence on a new line. > Make lines short, and break lines at natural places, such as after > commas and semicolons, rather than randomly. Since most people change > documents by rewriting phrases and adding, deleting and rearranging > sentences, these precautions simplify any editing you have to do > later. > > Semantic linefeeds are usually used with markup languages that are not > sensitive to newlines when exported to a different format (e.g. Org, > Texinfo, Markdown). > > Let's say that we have the following paragraph in an Org document: > > Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod > tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim > veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea > commodo consequat. > > After filling the paragraph using semantic linefeeds, the result is: > > Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod > tempor. > Incididunt ut labore et dolore magna aliqua. > Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi > ut aliquip ex ea commodo consequat. > > However, when exported, in both cases the result is: > > Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod > tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim > veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea > commodo consequat. > > So, what are the benefits? > > One of the greatest benefits is that semantic linefeeds are "diff > friendly". > > For example, > > -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod > -tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim > -veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea > -commodo consequat. > +Lorem ipsum dolor sit amet, XXXXX consectetur adipiscing elit, sed do > +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim > +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut > +aliquip ex ea commodo consequat. > > Versus, > > -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod > -tempor. > +Lorem ipsum dolor sit amet, XXXXX consectetur adipiscing elit, sed do > +eiusmod tempor. > Incididunt ut labore et dolore magna aliqua. > Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi > ut aliquip ex ea commodo consequat. > > Semantic linefeeds make easier to spot that the word "XXXXX" was added > in the first line. > > Also, they are convenient during code reviews. Shorter diffs and > separating "ideas" with newlines allow to be more accurate when adding > comments. > > The site "Semantic Line Breaks" [2] by Mattt and the blog post "Semantic > Linefeeds" [3] by Brandon Rhodes are both excellent references. > > [1] https://web.archive.org/web/20130108163017if_/http://miffy.tom-yam.or.jp:80/2238/ref/beg.pdf > [2] https://sembr.org/ > [3] https://rhodesmill.org/brandon/2012/one-sentence-per-line/ Thanks. > +(defun fill-paragraph-semlf (&optional justify) > + "Fill paragraph at or after point using semantic linefeeds. > + > +This function ensures that a newline character follows every > +sentence, as punctuated by a period (.), exclamation mark (!), or > +question mark (?). This explanation of what is "semantic linefeeds" is a good starting point, but it is not enough. For starters, "ensures" hints but doesn't say explicitly that if there's no newline there, it is inserted. Also, I think a URL to at least one site explaining what "semantic linefeeds" are should be in the doc string. > + (when (and (> (point) (line-beginning-position)) > + (< (point) (line-end-position))) > + (delete-horizontal-space) > + (newline) Are you sure 'newline' is the right function to call here? It doesn't just insert the newline character, at least not in all the cases. Perhaps inserting a literal newline character is better? From debbugs-submit-bounces@debbugs.gnu.org Fri May 23 11:05:03 2025 Received: (at 78561) by debbugs.gnu.org; 23 May 2025 15:05:03 +0000 Received: from localhost ([127.0.0.1]:49126 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uITxH-0003M8-0L for submit@debbugs.gnu.org; Fri, 23 May 2025 11:05:03 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:5707) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uITxA-0003LE-1X for 78561@debbugs.gnu.org; Fri, 23 May 2025 11:04:56 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 4BD17808F6; Fri, 23 May 2025 11:04:50 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1748012689; bh=4fYUJbc6WRM9wdXyLiLuQkpg+tKpC6CbwznpF8cVR7Y=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=I/v8ouY9xBB9OsJZ8iwkgGZrL7IPqZTFZm1m3vlk4/O/fQMaMcqe+vDbYcJtHKTh0 IUk1an+jGcyWRHSLFEURj3MvamlWb2/CAXD41z4+JDJaIeH26VO+7eBVfKZbHY4c31 P+V1kWqAFxUrfTQ7ku/4UYLbAGIdIbnF4yd3gqpTaYJ8Qxs9aymy+ffWEXswI3S7iM EjTkCS/NURa/p8J+m/5Hz6Ii4CRnQeEQajtutpoGWenfAEnAKk7LsGZq+437sOlQo6 P8zTSb+Mu4IDbUb0KkQgW1P57Zy2a8oMPgqmRKBdmkihnwbkDSJZ5y+3muSy+NwkN2 D6YxcEr7t8IKg== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 527918053B; Fri, 23 May 2025 11:04:49 -0400 (EDT) Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 399C512041A; Fri, 23 May 2025 11:04:49 -0400 (EDT) From: Stefan Monnier To: Roi Martin Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <87jz67tzrp.fsf@gmail.com> Message-ID: References: <87jz67tzrp.fsf@gmail.com> Date: Fri, 23 May 2025 11:04:48 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.169 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: Marcin Borkowski , 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Given that this is a first version, I have not added any reference to > the manuals. If you think it makes sense, please let me know and I'll > modify the patch accordingly. Maybe a short version of the explanation you give below would be good to have in the manual (tho Eli suggests a URL instead, so maybe that's good enough?). > +(defun fill-paragraph-semlf (&optional justify) > + "Fill paragraph at or after point using semantic linefeeds. > + > +This function ensures that a newline character follows every > +sentence, as punctuated by a period (.), exclamation mark (!), or > +question mark (?). This seems inaccurate: it just uses whichever definition of sentence is used by `forward-sentence`, so it may ignore some of those chars or pay attention to others. > +If JUSTIFY is non-nil (interactively, with prefix argument), justify as > +well. If `sentence-end-double-space' is non-nil, then period followed > +by one space does not end a sentence, so don't break a line there. The > +variable `fill-column' controls the width for filling." I'd move the "The" to the last line. =F0=9F=99=82 > + (interactive "P") > + (save-excursion > + (let ((end (progn > + (fill-forward-paragraph 1) > + (backward-word) > + (end-of-line) > + (point))) > + (start (progn > + (fill-forward-paragraph -1) > + (forward-word) > + (beginning-of-line) > + (point))) > + pfx) > + (with-restriction start end > + (let ((fill-column (point-max))) > + (setq pfx (or (fill-region-as-paragraph (point-min) (point-max)) ""))) > + (goto-char (point-min)) > + (while (not (eobp)) > + (let ((fill-prefix pfx)) > + (fill-region-as-paragraph (point) > + (progn (forward-sentence) (point)) > + justify)) > + (when (and (> (point) (line-beginning-position)) > + (< (point) (line-end-position))) > + (delete-horizontal-space) > + (newline) > + (insert pfx)))))) > + t) Please try and separate it into a `fill-region-semlf` function and then another one which applies it to a paragraph, so that it can also be used to fill a specific user-specified region (or the whole buffer). Stefan From debbugs-submit-bounces@debbugs.gnu.org Sat May 24 08:15:53 2025 Received: (at 78561) by debbugs.gnu.org; 24 May 2025 12:15:53 +0000 Received: from localhost ([127.0.0.1]:58567 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uInn6-0001Cg-A9 for submit@debbugs.gnu.org; Sat, 24 May 2025 08:15:52 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:51505) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uInn3-0001CB-OR for 78561@debbugs.gnu.org; Sat, 24 May 2025 08:15:50 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-442e9c00bf4so4017545e9.3 for <78561@debbugs.gnu.org>; Sat, 24 May 2025 05:15:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748088943; x=1748693743; darn=debbugs.gnu.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=4wL6depUM5YYutY6Z1jvAXcvu6dI5wWkUuZIzQptSkE=; b=F4UA47TMapVc+18XqPGWUuNt5W2BLZLYGB9Stbq4910wNbz8m9necO9V2rkL/UZQET +zdE2B2fweX/UzR8yHjJ9+tp+gVilA/V5RSU1FzLYegfseeAH/gy7lvNBnurE//Zj+ju MRCeYhqAidxZQziDlOS/l1dWNGDjocFmw0mqwoazeqi6aeJ+Xg5E5Zm82W+xjo/5Bzd+ Yy2FBnHzNCM1odCb9PcLSqXF/QbBR2gJuPtN+RAkg72aMOmynDPnKN1WtvG/qB3SRQOZ 0QHe0GBEahmrua00yjUjbz8yTK9c70IcoJD08r6uhvsnS/O8ZSKFLmW10TsfGQyvBLFm oc0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748088943; x=1748693743; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4wL6depUM5YYutY6Z1jvAXcvu6dI5wWkUuZIzQptSkE=; b=qCXyISCKZH5BnxkwkDchjDPHIcSguSHZt3701MMhm5NIp/hWF34K+5+S0rDzPdNALw qUsovewkN24TPyGVTBCMR88Adm8fyhZiWfsGPyTCtmcCvZufNNY7W7BSIgm8wFqUBy4Q SJSr9kldo06C6uFi+E6lxK2u83NToNA1ScxEXCtA3bs+VsJgRneSvQBvEUAFySrnwq0S 5MqyvegqVhH7mna8PE8Uu0LRs1dU0Mvnef+XMGtZ4X8uTuM7u2BaGqbCtRNA2bPkIOLs e1EpbAYy3NAbKejFOUEC5CF1+MFyTr9U1zzMlTMW/pXsmJs8uIF0Sm7+rPyHUmbPdfp1 tN8w== X-Gm-Message-State: AOJu0YwS493p9tOmotX1IkE8KEwrMp/kdvfCvCVuMQgkcqkcrzcfCODN nDW7/nmBOVDR4IJjcnYvn0pUP1lxIEVDgWctVLFEANcDk+X69lTrkWmt X-Gm-Gg: ASbGnct9de6E8u1MbcPmThnEEnAhbON4MVnyvWR7oEK5CAXCh1VZ/rV9IyqFZyvTi/A Twj/POYUtwwfaXFkCfVG1+WJ1cNbJjT3whTnnnHRiNAbgYXsjEDp65AxC2J/OwGxVgFYv+Iw5tt R+YQQffuTXtThKqWAGbyiuEUv51jpUN4pOwvqqZnncSr5BxX6wXUMZ/Kr/y88vNamogoTa8JcXQ CXxzV5KRE+aSDvfXhp3xnt24tS8pBnESfdfIBK4MdnwnyYmWMVNyzri5kfG8CcQyv7oo1eT00NS Kg03Zy2L4ur4VBAtDohhmN3OehadJEBB/nUNBuPFQ4nRC7T3p0A1h4w7gcyu X-Google-Smtp-Source: AGHT+IFnNDqjMAI64si92n72fBMOwPHud4O4gwPcqBWLaXb7vpNHVt7JU9ZZ2V2B29vrG/cAQEt8VA== X-Received: by 2002:a05:600c:138f:b0:43d:fa5d:9315 with SMTP id 5b1f17b1804b1-44c94c2d54emr20925575e9.33.1748088943066; Sat, 24 May 2025 05:15:43 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-447f3dd99absm172802105e9.37.2025.05.24.05.15.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 May 2025 05:15:42 -0700 (PDT) From: Roi Martin To: Eli Zaretskii Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <86ldqn4m54.fsf@gnu.org> References: <87jz67tzrp.fsf@gmail.com> <86ldqn4m54.fsf@gnu.org> Date: Sat, 24 May 2025 14:15:37 +0200 Message-ID: <87msb2432u.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78561 Cc: mbork@mbork.pl, monnier@iro.umontreal.ca, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> +(defun fill-paragraph-semlf (&optional justify) >> + "Fill paragraph at or after point using semantic linefeeds. >> + >> +This function ensures that a newline character follows every >> +sentence, as punctuated by a period (.), exclamation mark (!), or >> +question mark (?). > > This explanation of what is "semantic linefeeds" is a good starting > point, but it is not enough. For starters, "ensures" hints but > doesn't say explicitly that if there's no newline there, it is > inserted. Also, I think a URL to at least one site explaining what > "semantic linefeeds" are should be in the doc string. I would prefer to avoid depending on external URLs to explain the concept. I'd link to an external reference if, for instance, this feature was backed by an standard located in a well-known site (e.g. IETF RFCs). In this case, the concept is quite simple and I agree with Stefan in that we can provide our own interpretation in the manual and link to the Info node from the doc string. If you prefer to avoid changing the manual until this is well tested, then we can provide a more detailed explanation in the doc string itself. What do you think? >> + (when (and (> (point) (line-beginning-position)) >> + (< (point) (line-end-position))) >> + (delete-horizontal-space) >> + (newline) > > Are you sure 'newline' is the right function to call here? It doesn't > just insert the newline character, at least not in all the cases. > Perhaps inserting a literal newline character is better? The reason behind using 'newline' is to support documents that follow other conventions to represent newlines (e.g. '\r\n' or '\r'). Does it make sense? Is this the right approach? From debbugs-submit-bounces@debbugs.gnu.org Sat May 24 09:02:27 2025 Received: (at 78561) by debbugs.gnu.org; 24 May 2025 13:02:27 +0000 Received: from localhost ([127.0.0.1]:58898 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIoWB-0004oe-Ah for submit@debbugs.gnu.org; Sat, 24 May 2025 09:02:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52060) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIoW8-0004o8-Mf for 78561@debbugs.gnu.org; Sat, 24 May 2025 09:02:25 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIoW1-00056p-Tp; Sat, 24 May 2025 09:02:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=h+yNJTGgcmjl+0l15x2AirHrSAlrlRZAIope8fXB/MQ=; b=K39UFKWebYJ/ ZH1FvXSw/59mesZXx2iCnXBGaLYDYNk5KPvvkj+8C4Mk+Mg7VmvRckArZDd+RX2g+8kU11ovlwtGN 8f/O/vOpPO93DW0IUHLGE5a6eIG0+ZMZke+UuSN1JE8CqR5BIjOnm1sspvLhFdhBuuA95tNqK+NzZ qIBQdYZycRcIfpR7uCJO3x1VidvvesSZX8hV/OU4NNAsVXcmc8GQCMuCDWXoJA90GVE3vg4rHZFyO PNG3gDgKLvZZydO/sHjrqe82bg1w7YKRL5OPHDOaVLJFz5GRuwNLgRiGNibp8xRJoBHWOc5YtGur7 zCySXd9lJPowPr7U7PsS8Q==; Date: Sat, 24 May 2025 16:02:15 +0300 Message-Id: <864ixa17s8.fsf@gnu.org> From: Eli Zaretskii To: Roi Martin In-Reply-To: <87msb2432u.fsf@gmail.com> (message from Roi Martin on Sat, 24 May 2025 14:15:37 +0200) Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling References: <87jz67tzrp.fsf@gmail.com> <86ldqn4m54.fsf@gnu.org> <87msb2432u.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: mbork@mbork.pl, monnier@iro.umontreal.ca, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Roi Martin > Cc: 78561@debbugs.gnu.org, mbork@mbork.pl, monnier@iro.umontreal.ca > Date: Sat, 24 May 2025 14:15:37 +0200 > > Eli Zaretskii writes: > > > This explanation of what is "semantic linefeeds" is a good starting > > point, but it is not enough. For starters, "ensures" hints but > > doesn't say explicitly that if there's no newline there, it is > > inserted. Also, I think a URL to at least one site explaining what > > "semantic linefeeds" are should be in the doc string. > > I would prefer to avoid depending on external URLs to explain the > concept. Since the concept came from outside, why not? > I'd link to an external reference if, for instance, this > feature was backed by an standard located in a well-known site > (e.g. IETF RFCs). In this case, the concept is quite simple and I agree > with Stefan in that we can provide our own interpretation in the manual > and link to the Info node from the doc string. There's no contradiction: we could describe this in our documentation and also mention the external references. We do that, for example, for Unicode-related features. > >> + (when (and (> (point) (line-beginning-position)) > >> + (< (point) (line-end-position))) > >> + (delete-horizontal-space) > >> + (newline) > > > > Are you sure 'newline' is the right function to call here? It doesn't > > just insert the newline character, at least not in all the cases. > > Perhaps inserting a literal newline character is better? > > The reason behind using 'newline' is to support documents that follow > other conventions to represent newlines (e.g. '\r\n' or '\r'). Does it > make sense? Is this the right approach? In Emacs, there's only one "newline convention", the one that uses the newline (LFD) character. The different en d-of-line conventions are supported during I/O: we "encode" newlines as CR-LF pair for Windows, for example, when saving buffers to files, and "decode" CR-LF back into a single newline when reading files into buffers. By contrast, the 'newline' function does other things, in addition to inserting the newline character; see its documentation for the details. It seems to me that some of those additional actions is not something this feature will want, because this feature is _only_ about where to break text into physical lines. From debbugs-submit-bounces@debbugs.gnu.org Sat May 24 09:38:59 2025 Received: (at 78561) by debbugs.gnu.org; 24 May 2025 13:38:59 +0000 Received: from localhost ([127.0.0.1]:59178 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIp5W-0007dG-3D for submit@debbugs.gnu.org; Sat, 24 May 2025 09:38:59 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]:54291) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uIp5S-0007ca-4B for 78561@debbugs.gnu.org; Sat, 24 May 2025 09:38:55 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-43edecbfb46so6159225e9.0 for <78561@debbugs.gnu.org>; Sat, 24 May 2025 06:38:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748093928; x=1748698728; darn=debbugs.gnu.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=Jei9RgntfFW1KMM19Dv1vnPgqSCMfTqeAQJ8Lla+amo=; b=cNiG8ED4/CsTaL8Jhv3JaqdndCeSslOWIKnlIFNYevf1mLymu41biUBCLBIs5wIpma pDtq2uMhRrYNM/K92Zdp8lIG0QhTzw8N9f12uMPaJN2uonWAm0cbSusUNwGgQWEN28hG 0JoaSPzrzdEVE2VkheSL6Myb68UYuM5vd2ybHYsGSIbqADd1kdfEel+rOCZTUJ0NPj3U kbcsOGfeuGiRdQK34Vgzl8C3fVNvO5CKOzB5+24wnpdZkwP5CTKCxQLEAo7mWzAPijI7 XLFBFS3MIJBF/jepfaE/Fknu1kv/6A6ZLzJzZ/5O40KGCJuxKLvFft7AbS0NfH88qleE I52Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748093928; x=1748698728; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Jei9RgntfFW1KMM19Dv1vnPgqSCMfTqeAQJ8Lla+amo=; b=Ihqa/uUvUzYfyyQrrhNHuGwNCdbjJn0YTGJ7VD0OWp9GN4lGThluShdv1sYxKAdgU4 KbgADJz0vy4AOttg4zGM9vCXGZgDHRcCXQnjmVWkjB6QADNq8bQNKbhT1uZUWqv27OaU 6Wj53h2i4n68jGgk/FJ+SaRTm4la113J/lQ9xFdocLJ60gRk2XmdXIFOfti9mxaTX/pU j/dgKgcnZjWoBa0JjVw4E5w7m/yPZo7zT8OlXM8o61GZtya2cwTdNF8cmxIu9b6hohnj BkeMsIaG9pvxCxcYvxC96Wkz0DJ/IXm0s9Bga21t9How3XH9mGDlt1kT6yoiqlQoqPBE D6lg== X-Gm-Message-State: AOJu0Yxli3rxmMCqcYuGIuKGDc8+36b6zwu4jOMsmRkb3HbLpLnogQMH WRpOKbTXRA1/PP7yqul0WRdmCHyQR7rACY9B6Lk9hbCC0LI5ixPMzOpu X-Gm-Gg: ASbGncuKwSOJREqtiLicfv2BtwYEeitcCn69n5oqIkEzCOUyzo6DSxFt1hYO+mpBrfU t5Su34+j8OKsaDeky6sbgXA30Sgid+QjDh8P2IojlsUQ4Zv9GpeuxiUmXYFqyBo/gV/CXCsHwnR IEBi2zab+Ms1XcMVGcH6lE5NzXbvH7fA1UxBznYbvbpeZMmJLihAjkWigZaktw2aHBJdxTAIQx6 SLAVGPuxq+OcHMKmSHi7elqc/9giWvRUwIhd1eaYrNGW6MLrnGvmACZ2xKgVHfEKJHRHwC/1GQc JHlzySnSUx14ETPjeL/NJqBz0woQpPP7HewC5u7Y0j3rxqjVgQ== X-Google-Smtp-Source: AGHT+IFPw2TGeRcgaqgEhTwJreIorLvM087smP0viDcMK6WYSjCKtT4KC8xNAC8kAlvkR95JBwpdng== X-Received: by 2002:a05:600c:620a:b0:43d:b3:f95 with SMTP id 5b1f17b1804b1-44c94c28b8fmr20716505e9.28.1748093927467; Sat, 24 May 2025 06:38:47 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-447f18251c7sm177882785e9.3.2025.05.24.06.38.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 May 2025 06:38:47 -0700 (PDT) From: Roi Martin To: Eli Zaretskii Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <864ixa17s8.fsf@gnu.org> References: <87jz67tzrp.fsf@gmail.com> <86ldqn4m54.fsf@gnu.org> <87msb2432u.fsf@gmail.com> <864ixa17s8.fsf@gnu.org> Date: Sat, 24 May 2025 15:38:40 +0200 Message-ID: <87jz663z8f.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78561 Cc: mbork@mbork.pl, monnier@iro.umontreal.ca, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> From: Roi Martin >> Cc: 78561@debbugs.gnu.org, mbork@mbork.pl, monnier@iro.umontreal.ca >> Date: Sat, 24 May 2025 14:15:37 +0200 >> >> Eli Zaretskii writes: >> >> > This explanation of what is "semantic linefeeds" is a good starting >> > point, but it is not enough. For starters, "ensures" hints but >> > doesn't say explicitly that if there's no newline there, it is >> > inserted. Also, I think a URL to at least one site explaining what >> > "semantic linefeeds" are should be in the doc string. >> >> I would prefer to avoid depending on external URLs to explain the >> concept. > > Since the concept came from outside, why not? > >> I'd link to an external reference if, for instance, this >> feature was backed by an standard located in a well-known site >> (e.g. IETF RFCs). In this case, the concept is quite simple and I agree >> with Stefan in that we can provide our own interpretation in the manual >> and link to the Info node from the doc string. > > There's no contradiction: we could describe this in our documentation > and also mention the external references. We do that, for example, > for Unicode-related features. OK. I'll update the patch accordingly. >> >> + (when (and (> (point) (line-beginning-position)) >> >> + (< (point) (line-end-position))) >> >> + (delete-horizontal-space) >> >> + (newline) >> > >> > Are you sure 'newline' is the right function to call here? It doesn't >> > just insert the newline character, at least not in all the cases. >> > Perhaps inserting a literal newline character is better? >> >> The reason behind using 'newline' is to support documents that follow >> other conventions to represent newlines (e.g. '\r\n' or '\r'). Does it >> make sense? Is this the right approach? > > In Emacs, there's only one "newline convention", the one that uses the > newline (LFD) character. The different en d-of-line conventions are > supported during I/O: we "encode" newlines as CR-LF pair for Windows, > for example, when saving buffers to files, and "decode" CR-LF back > into a single newline when reading files into buffers. Got it. Thanks a lot for the explanation. That simplifies things a lot. > By contrast, the 'newline' function does other things, in addition to > inserting the newline character; see its documentation for the > details. It seems to me that some of those additional actions is not > something this feature will want, because this feature is _only_ about > where to break text into physical lines. You are right. I replaced it with (insert "\n") Thanks! From debbugs-submit-bounces@debbugs.gnu.org Sun May 25 14:47:21 2025 Received: (at 78561) by debbugs.gnu.org; 25 May 2025 18:47:21 +0000 Received: from localhost ([127.0.0.1]:48569 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uJGNS-0005XW-53 for submit@debbugs.gnu.org; Sun, 25 May 2025 14:47:21 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:56635) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uJGNM-0005Wi-Cf for 78561@debbugs.gnu.org; Sun, 25 May 2025 14:47:16 -0400 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-3a4d877dfb3so368332f8f.1 for <78561@debbugs.gnu.org>; Sun, 25 May 2025 11:47:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748198826; x=1748803626; darn=debbugs.gnu.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=ibFQPPnAeaxgTD845cIwyo1dnwwP146ml1u7cW+8A5g=; b=YhIck9LJbRWwZt2gT1JGeLE9WooSzMM6xeFTMGBJiNeOulckAsfd1PGIsD+XswdAtg LroZ1PNg1FaRC+Oe6ijCpKY+C/yxgf3iiD7Un7Q9pLn53e84P8eDa3PGUhpB/G5e4eJ7 rRS+u/6WIsOMdtSiuhp8NSrzaGA+J+b8nlVRf4qVRsOn8ofaHy1UGMQNBpiZpB/CrRGJ CbNBdvDYTF4fbi5B207xhSvvtscHB0P4nAjOG7dMFKhNnxyOk9rpLEsf4yvVC/b7W/ZO g7Y3Shx/Ov7nm9K0OJtTPf3AO9ePP+Dn+iLceQdkze6Jl+69/SGmXZasgdndPgWbqyJG ITYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748198826; x=1748803626; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ibFQPPnAeaxgTD845cIwyo1dnwwP146ml1u7cW+8A5g=; b=nBhcD8CtWxPE10XkrNkULbzaqqpODXDinH+BCtOyEGC+MNR3do1baJxgX+sDxsh6ON roNIwc/1dJEuAejVjhBmWX3TK3QxvrWGBTGVLOU8Casc2AryKwcoCrfr8eOamFva0JYN SxyaGZZ+PEPGxQTC9oVuUQkTOGTeqVB+S6+gnG/0wvdiqXnThX5GiJRPnobXa515DPTN mQBu4LLN5ldLNQtN0EXdAxvNth5dyUUEqs5PnsgMlLweOfpRcyE053/4TDbqjawxW6e4 mrcJk6y6lYqCTwRNkQMawtvXCrXDw1fSz+Ay+H7mAVvt5eoRuQuu659qtXUHZOncHShr gCJw== X-Gm-Message-State: AOJu0YzkmYhHv8xPcM4uyuRATeaFUYFRLOvvztF51du1QWbKB6mn69kZ W1nAH4fRQXqRfDFISq7EQzpQcqhXWuvQ8Vvx6SSYZfhTzWneWsC1J7Yh X-Gm-Gg: ASbGnctvE+j4063uupqbAU8sPByfP9Gg0SWGIFWjGtTSE6LpjLhz/gNPZmR9QkegHfR wasbdvGj8VwwISvjfkvpFKPcOnPk8eQmgX24FeTh4VR9G90fy17BCQFhXtKC1DRCv9kzDWriS0p x94/EfgnLLnHfiOeluESjwV1vFmArgdh4H5qbSBfLaeQx+cbQ3VXKphvCpeRtdDZTzdDocepZF8 xvx2MBfCEM1NIEAIKcyxEBnQSBTHPdW4CDUr5z/SnV6eQqt9P42HmX2wJFwK8RWihwmrOXhWRn6 t+AWJAZY+BtbwOeEiQig6U1vqlC4B5jPnEEBFej0Zs3z5Gf99Q== X-Google-Smtp-Source: AGHT+IEtRwMFegIyM4Z2bC9BuSsIqz+vBtOJFYI9xCWEYdJ052htQqVVWRtL4N6PkLeHqRoqXUzFtg== X-Received: by 2002:a05:6000:3103:b0:3a3:64d2:ced0 with SMTP id ffacd0b85a97d-3a4cb49e6e4mr3809761f8f.53.1748198825937; Sun, 25 May 2025 11:47:05 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-447f73d4aa2sm219222405e9.21.2025.05.25.11.47.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 May 2025 11:47:05 -0700 (PDT) From: Roi Martin To: Stefan Monnier , Eli Zaretskii Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: References: <87jz67tzrp.fsf@gmail.com> Date: Sun, 25 May 2025 20:46:58 +0200 Message-ID: <87frgs4jfh.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78561 Cc: Marcin Borkowski , 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Stefan Monnier writes: >> Given that this is a first version, I have not added any reference to >> the manuals. If you think it makes sense, please let me know and I'll >> modify the patch accordingly. > > Maybe a short version of the explanation you give below would be good to > have in the manual (tho Eli suggests a URL instead, so maybe that's > good enough?). > >> +(defun fill-paragraph-semlf (&optional justify) >> + "Fill paragraph at or after point using semantic linefeeds. >> + >> +This function ensures that a newline character follows every >> +sentence, as punctuated by a period (.), exclamation mark (!), or >> +question mark (?). > > This seems inaccurate: it just uses whichever definition of sentence is > used by `forward-sentence`, so it may ignore some of those chars or pay > attention to others. I have updated the patch with a more precise definition. Also, I added links to the sources I referenced for semantic linefeeds. >> +If JUSTIFY is non-nil (interactively, with prefix argument), justify as >> +well. If `sentence-end-double-space' is non-nil, then period followed >> +by one space does not end a sentence, so don't break a line there. The >> +variable `fill-column' controls the width for filling." > > I'd move the "The" to the last line. 🙂 Fixed :) >> + (interactive "P") >> + (save-excursion >> + (let ((end (progn >> + (fill-forward-paragraph 1) >> + (backward-word) >> + (end-of-line) >> + (point))) >> + (start (progn >> + (fill-forward-paragraph -1) >> + (forward-word) >> + (beginning-of-line) >> + (point))) >> + pfx) >> + (with-restriction start end >> + (let ((fill-column (point-max))) >> + (setq pfx (or (fill-region-as-paragraph (point-min) (point-max)) ""))) >> + (goto-char (point-min)) >> + (while (not (eobp)) >> + (let ((fill-prefix pfx)) >> + (fill-region-as-paragraph (point) >> + (progn (forward-sentence) (point)) >> + justify)) >> + (when (and (> (point) (line-beginning-position)) >> + (< (point) (line-end-position))) >> + (delete-horizontal-space) >> + (newline) >> + (insert pfx)))))) >> + t) > > Please try and separate it into a `fill-region-semlf` function and then > another one which applies it to a paragraph, so that it can also be used > to fill a specific user-specified region (or the whole buffer). I'm not sure about this one. The idea is that `fill-paragraph-semlf' can be assigned as a value for `fill-paragraph-function' (I also included a mention to this in the doc string) or it ca be called directly. The thing is that `fill-paragraph' docs say: The REGION argument is non-nil if called interactively; in that case, if Transient Mark mode is enabled and the mark is active, call `fill-region' to fill each of the paragraphs in the active region, instead of just filling the current paragraph. And `fill-paragraph-function' docs say: Note: This only affects ‘fill-paragraph’ and not ‘fill-region’ nor ‘auto-fill-mode’ So, if I'm not wrong, filling regions and paragraphs is different in the current design. I agree that it would be useful to apply `fill-paragraph-semlf' on a region or the whole buffer. But, the same could be said about any other `fill-paragraph-function'. So, do we really want a specific `fill-region-semlf' function? I attach a new version of the patch. Thanks! --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Add-semantic-linefeed-support-for-paragraph-filling.patch >From 9b8a28910a3da271afe32377926fd6cc2a9356ff Mon Sep 17 00:00:00 2001 From: Roi Martin Date: Fri, 21 Mar 2025 14:22:46 +0100 Subject: [PATCH] Add semantic linefeed support for paragraph filling * lisp/textmodes/fill.el (fill-paragraph-semlf): Add function to fill paragraph using semantic linefeeds. * test/lisp/textmodes/fill-tests.el (fill-test-fill-paragraph-semlf) (fill-test-fill-paragraph-semlf-fill-paragraph-function) (fill-test-fill-paragraph-semlf-justify) (fill-test-fill-paragraph-semlf-sentence-end-double-space) (fill-test-fill-paragraph-semlf-fill-column) (fill-test-fill-paragraph-semlf-punctuation-marks) (fill-test-fill-paragraph-semlf-twice) (fill-test-fill-paragraph-semlf-fill-prefix) (fill-test-fill-paragraph-semlf-indented-block) (fill-test-fill-paragraph-semlf-emacs-lisp-mode) (fill-test-fill-paragraph-semlf-c-mode) (fill-test-fill-paragraph-semlf-org-mode) (fill-test-fill-paragraph-semlf-markdown-mode): Add tests. * test/lisp/textmodes/fill-resources/semlf-c-mode.erts: * test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts: * test/lisp/textmodes/fill-resources/semlf-fill-column.erts: * test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts: * test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts: * test/lisp/textmodes/fill-resources/semlf-indented-block.erts: * test/lisp/textmodes/fill-resources/semlf-justify.erts: * test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts: * test/lisp/textmodes/fill-resources/semlf-org-mode.erts: * test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts: * test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts: * test/lisp/textmodes/fill-resources/semlf-twice.erts: * test/lisp/textmodes/fill-resources/semlf.erts: Add test data. --- lisp/textmodes/fill.el | 47 +++++ .../fill-resources/semlf-c-mode.erts | 183 ++++++++++++++++++ .../fill-resources/semlf-emacs-lisp-mode.erts | 87 +++++++++ .../fill-resources/semlf-fill-column.erts | 15 ++ .../semlf-fill-paragraph-function.erts | 12 ++ .../fill-resources/semlf-fill-prefix.erts | 35 ++++ .../fill-resources/semlf-indented-block.erts | 31 +++ .../fill-resources/semlf-justify.erts | 12 ++ .../fill-resources/semlf-markdown-mode.erts | 129 ++++++++++++ .../fill-resources/semlf-org-mode.erts | 122 ++++++++++++ .../semlf-punctuation-marks.erts | 13 ++ .../semlf-sentence-end-double-space.erts | 13 ++ .../textmodes/fill-resources/semlf-twice.erts | 12 ++ test/lisp/textmodes/fill-resources/semlf.erts | 88 +++++++++ test/lisp/textmodes/fill-tests.el | 90 +++++++++ 15 files changed, 889 insertions(+) create mode 100644 test/lisp/textmodes/fill-resources/semlf-c-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-column.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-indented-block.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-justify.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-org-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-twice.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf.erts diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index e38d030734fb..b6b413f88b2d 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -1583,4 +1583,51 @@ fill-individual-paragraphs-citation "") string)) +(defun fill-paragraph-semlf (&optional justify) + "Fill paragraph at or after point using semantic linefeeds. + +This function ensures that a newline character follows every sentence. +If a sentence is not followed by a newline character, one is inserted. +The task of deciding what is considered a sentence is delegated to the +`forward-sentence' function. + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. If `sentence-end-double-space' is non-nil, then period followed +by one space does not end a sentence, so don't break a line there. +The variable `fill-column' controls the width for filling. + +This function can be assigned as a value for `fill-paragraph-function', +allowing `fill-paragraph' to utilize it. + +For more details about semantic linefeeds, see `https://sembr.org/' and +`https://rhodesmill.org/brandon/2012/one-sentence-per-line/'." + (interactive "P") + (save-excursion + (let ((end (progn + (fill-forward-paragraph 1) + (backward-word) + (end-of-line) + (point))) + (start (progn + (fill-forward-paragraph -1) + (forward-word) + (beginning-of-line) + (point))) + pfx) + (with-restriction start end + (let ((fill-column (point-max))) + (setq pfx (or (fill-region-as-paragraph (point-min) (point-max)) ""))) + (goto-char (point-min)) + (while (not (eobp)) + (let ((fill-prefix pfx)) + (fill-region-as-paragraph (point) + (progn (forward-sentence) (point)) + justify)) + (when (and (> (point) (line-beginning-position)) + (< (point) (line-end-position))) + (delete-horizontal-space) + (insert "\n") + (insert pfx)))))) + t) + ;;; fill.el ends here diff --git a/test/lisp/textmodes/fill-resources/semlf-c-mode.erts b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts new file mode 100644 index 000000000000..a28eb68cfc6a --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts @@ -0,0 +1,183 @@ +Point-Char: | + +Name: c-mode - single-line + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +// ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: c-mode - single-line - fill-prefix - marker + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// - eiusmod tempor. +// - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// - veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. +// - Duis aute irure dolor in reprehenderit in voluptate velit esse +// - cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// - officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - fill-prefix - whitespace + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. +// Duis aute irure dolor in reprehenderit in voluptate velit esse +// cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - indented block + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. Incididunt ut labore et dolore magna +// aliqua. Ut enim ad minim veniam, quis nostrud exercitation +// ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-=-= + +Name: c-mode - multi-line + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim + * ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - marker + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * - eiusmod tempor. + * - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * - veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. + * - Duis aute irure dolor in reprehenderit in voluptate velit esse + * - cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * - officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - whitespace + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. + * Duis aute irure dolor in reprehenderit in voluptate velit esse + * cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - indented block + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. Incididunt ut labore et dolore magna + * aliqua. Ut enim ad minim veniam, quis nostrud exercitation + * ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts new file mode 100644 index 000000000000..fe71ee32c1aa --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts @@ -0,0 +1,87 @@ +Point-Char: | + +Name: emacs-lisp-mode + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +;; ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - marker + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; - eiusmod tempor. +;; - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; - veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. +;; - Duis aute irure dolor in reprehenderit in voluptate velit esse +;; - cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; - officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - whitespace + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. +;; Duis aute irure dolor in reprehenderit in voluptate velit esse +;; cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - indented block + +The `fill-forward-paragraph' function jumps to the beginning/end of +the comment. + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. Incididunt ut labore et dolore magna +;; aliqua. Ut enim ad minim veniam, quis nostrud exercitation +;; ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-column.erts b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts new file mode 100644 index 000000000000..20db7b1f9c5b --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts @@ -0,0 +1,15 @@ +Name: fill-column + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts new file mode 100644 index 000000000000..467e7401cf50 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts @@ -0,0 +1,12 @@ +Name: fill-paragraph-function + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts new file mode 100644 index 000000000000..e067eff69701 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts @@ -0,0 +1,35 @@ +Name: fill-prefix - marker + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +- eiusmod tempor. +- Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +- veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. +- Duis aute irure dolor in reprehenderit in voluptate velit esse +- cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +- officia deserunt mollit anim id est laborum. +=-=-= + +Name: fill-prefix - whitespace + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-indented-block.erts b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts new file mode 100644 index 000000000000..e483567c6ab3 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts @@ -0,0 +1,31 @@ +Point-Char: | + +Name: indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-justify.erts b/test/lisp/textmodes/fill-resources/semlf-justify.erts new file mode 100644 index 000000000000..3a951b7ce424 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-justify.erts @@ -0,0 +1,12 @@ +Name: justify + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts new file mode 100644 index 000000000000..7257708c245d --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts @@ -0,0 +1,129 @@ +Point-Char: | + +Name: markdown-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - indented block +Skip: t + +TODO - In `markdown-mode', the `fill-forward-paragraph' function +ignores code blocks. We should reach out to the `markdown-mode' +maintainer(s) to understand the reason for this and possibly suggest a +change to this behavior. This works as expected in +`markdown-ts-mode'. + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-org-mode.erts b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts new file mode 100644 index 000000000000..81dd4841de94 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts @@ -0,0 +1,122 @@ +Point-Char: | + +Name: org-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts new file mode 100644 index 000000000000..5346216e9f9c --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts @@ -0,0 +1,13 @@ +Name: punctuation marks + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua! Ut enim +ad minim veniam? Quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua! +Ut enim ad minim veniam? +Quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts new file mode 100644 index 000000000000..a01beed0f665 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts @@ -0,0 +1,13 @@ +Name: sentence-end-double-space + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris +nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-twice.erts b/test/lisp/textmodes/fill-resources/semlf-twice.erts new file mode 100644 index 000000000000..862dda6e27eb --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-twice.erts @@ -0,0 +1,12 @@ +Name: fill twice + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf.erts b/test/lisp/textmodes/fill-resources/semlf.erts new file mode 100644 index 000000000000..f3e331cd9381 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf.erts @@ -0,0 +1,88 @@ +Point-Char: | + +Name: beginning of buffer + +=-= +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: second paragraph + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: end of buffer + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.| +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-tests.el b/test/lisp/textmodes/fill-tests.el index 6e079973100e..afd17c52dcd5 100644 --- a/test/lisp/textmodes/fill-tests.el +++ b/test/lisp/textmodes/fill-tests.el @@ -28,6 +28,7 @@ ;;; Code: (require 'ert) +(require 'ert-x) (ert-deftest fill-test-no-fill-polish-nobreak-p nil "Tests of the `fill-polish-nobreak-p' function." @@ -121,6 +122,95 @@ test-fill-haskell ;; w "))) +(ert-deftest fill-test-fill-paragraph-semlf () + "Test the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-paragraph-function () + "Test `fill-paragraph-semlf' as `fill-paragraph-function'." + (ert-test-erts-file (ert-resource-file "semlf-fill-paragraph-function.erts") + (lambda () + (setq-local fill-paragraph-function #'fill-paragraph-semlf) + (fill-paragraph)))) + +(ert-deftest fill-test-fill-paragraph-semlf-justify () + "Test the JUSTIFY parameter of the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-justify.erts") + (lambda () + (fill-paragraph-semlf 'justify)))) + +(ert-deftest fill-test-fill-paragraph-semlf-sentence-end-double-space () + "Test the `fill-paragraph-semlf' function with `sentence-end-double-space'." + (ert-test-erts-file (ert-resource-file "semlf-sentence-end-double-space.erts") + (lambda () + (setq-local sentence-end-double-space nil) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-column () + "Test the `fill-paragraph-semlf' function with `fill-column'." + (ert-test-erts-file (ert-resource-file "semlf-fill-column.erts") + (lambda () + (setq-local fill-column 35) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-punctuation-marks () + "Test the `fill-paragraph-semlf' function with different punctuation marks." + (ert-test-erts-file (ert-resource-file "semlf-punctuation-marks.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-twice () + "Test to run the `fill-paragraph-semlf' function twice." + (ert-test-erts-file (ert-resource-file "semlf-twice.erts") + (lambda () + (goto-char (point-min)) + (fill-paragraph-semlf) + (goto-char (point-min)) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-prefix () + "Test the `fill-paragraph-semlf' function with different fill prefixes." + (ert-test-erts-file (ert-resource-file "semlf-fill-prefix.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-indented-block () + "Test the `fill-paragraph-semlf' function with an indented block." + (ert-test-erts-file (ert-resource-file "semlf-indented-block.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-emacs-lisp-mode () + "Test the `fill-paragraph-semlf' function with `emacs-lisp-mode'." + (ert-test-erts-file (ert-resource-file "semlf-emacs-lisp-mode.erts") + (lambda () + (emacs-lisp-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-c-mode () + "Test the `fill-paragraph-semlf' function with `c-mode'." + (ert-test-erts-file (ert-resource-file "semlf-c-mode.erts") + (lambda () + (c-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-org-mode () + "Test the `fill-paragraph-semlf' function with `org-mode'." + (ert-test-erts-file (ert-resource-file "semlf-org-mode.erts") + (lambda () + (org-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-markdown-mode () + "Test the `fill-paragraph-semlf' function with `markdown-mode'." + (skip-unless (functionp 'markdown-mode)) + (ert-test-erts-file (ert-resource-file "semlf-markdown-mode.erts") + (lambda () + (markdown-mode) + (fill-paragraph-semlf)))) + (provide 'fill-tests) ;;; fill-tests.el ends here -- 2.49.0 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon May 26 12:21:25 2025 Received: (at 78561) by debbugs.gnu.org; 26 May 2025 16:21:25 +0000 Received: from localhost ([127.0.0.1]:58606 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uJaZp-0004HF-3Q for submit@debbugs.gnu.org; Mon, 26 May 2025 12:21:25 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:8451) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uJaZn-0004Gs-6D for 78561@debbugs.gnu.org; Mon, 26 May 2025 12:21:23 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 418C8100C6C; Mon, 26 May 2025 12:21:17 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1748276476; bh=o8AfXoAY1ASeeY3lNXkNfoqCplrE70IkgiDp9/+n4P4=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=R7GGaIIpylOo+I2U6w9zbqTkZxxIc/Y6pa6MDKex4dzqlFx6JLoe5g7PcMbDrYjud gzWl4zlq3Hdahx/8LHHhOv500yRwqxzETt70QDC7rX3g6gbGAkBhgBxaX24w6W5Ffi KQ+hu9PdmycV5MyTj30qIqsAo/OVmWTN0lVvosa9SvNQ/OyNcA92DkTEkyEL/HpD8v dw6GmF0UBz5c/K3S7CHBdrJm3s6SBt7MPTtRU1k/wtxTyiljUD5n+H9isCWP5dQkI5 omvBZxUbodu1pseor2hARPKDgL+MAMjPs2+6lYzUmNcZHipQFgn3rIjKVQGf3cx4cF 6thvUUxTruWJw== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 4CDC81003A7; Mon, 26 May 2025 12:21:16 -0400 (EDT) Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 3430812065C; Mon, 26 May 2025 12:21:16 -0400 (EDT) From: Stefan Monnier To: Roi Martin Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <87frgs4jfh.fsf@gmail.com> Message-ID: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> Date: Mon, 26 May 2025 12:21:15 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.073 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , Marcin Borkowski , 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> Please try and separate it into a `fill-region-semlf` function and then >> another one which applies it to a paragraph, so that it can also be used >> to fill a specific user-specified region (or the whole buffer). > I'm not sure about this one. The idea is that `fill-paragraph-semlf' > can be assigned as a value for `fill-paragraph-function' (I also > included a mention to this in the doc string) or it can be called > directly. The thing is that `fill-paragraph' docs say: Sadly, we don't currently have anything like a `fill-region-function`, but that's "a bug, not a feature", so we should write new code such that this misfeature is easier rather than harder to fix in the future. > I agree that it would be useful to apply `fill-paragraph-semlf' on > a region or the whole buffer. But, the same could be said about any > other `fill-paragraph-function'. Yes, I've had this in my TODO for many years. =F0=9F=99=81 > So, do we really want a specific `fill-region-semlf' function? Actually, I think I want a `fill-region-as-paragraph-semlf'. And maybe then some way to tell the `fill.el` code to use that instead of the default `fill-region-as-paragraph`. Stefan From debbugs-submit-bounces@debbugs.gnu.org Tue May 27 11:47:34 2025 Received: (at 78561) by debbugs.gnu.org; 27 May 2025 15:47:34 +0000 Received: from localhost ([127.0.0.1]:42722 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uJwWb-0004Dk-1t for submit@debbugs.gnu.org; Tue, 27 May 2025 11:47:34 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:59522) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uJwWV-0004D1-M4 for 78561@debbugs.gnu.org; Tue, 27 May 2025 11:47:31 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-3a361b8a66cso2348350f8f.2 for <78561@debbugs.gnu.org>; Tue, 27 May 2025 08:47:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748360839; x=1748965639; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jS4kvaGruoas+80TdZ4QzuvjtrATkwcUof+JSXGY82s=; b=fXYl+PFA9O0rWKTurMUvTuitLfUbzcXaT+4OAkcgZf1182mSy6i33n1i8t4cAzD5QU vc4irRytQd56sapnC7Fal3Em2BqzCbY1qqxhFgjsM99dSo5HBp21am9jHOP0M2UAJoej aME6mt9F5Ub9EerJJeZMV/trwNGNj8U2oy2CTsZlzztmIO1Z+NUyutEFjvgMam8R78aC qpT+D/YC//6JrTeAXHl8qMFIjUW2HJxVfDy4Sn/8HPrpLSbe7UtjUsKsA//2TvvxG2bE iIJphTKYBAy1HPqTYMLgQy+pHzc5GiRSxRQ/OKV7TrbjsYr5QfduVRkHru5iwyl+ayg5 fbNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748360839; x=1748965639; h=content-transfer-encoding:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jS4kvaGruoas+80TdZ4QzuvjtrATkwcUof+JSXGY82s=; b=RR7JyhkGAPQ+SL45Oi2BClZQZGfWqtRe0v+3/mg4hx1l5G52akELSCtsmF8DLhl4X5 WRTK/+g6fmeUnEdBsiuciJovJR3LmAOEUE1lU0QcrmefUvq0sJ74GS2b8TPom1H6khLf viwzEuoF3XDS+ZNG0MjVBFDr7bSKaShks1+CkWZzPFKE2YUBQxe1vEvctPhLN6z0fmAm dWWCGatXnweRsgLnuSmUwYws5Ugf4wCAQPI81uWO8HPozYxOeVAo07sa28ZcFd3AsyV5 YQSdfIlkXO5kU6gtfPtyfayw0ZeOGzhrYVTntLd+v1hOe+26R0p/xWQeGIH6qk2oSoYM IRog== X-Forwarded-Encrypted: i=1; AJvYcCWgUOjc9tUyjjiPj28y7Pl/+yCoZcy+W4wGBROtaKVWoHUqc1uM+WBGMuh8sJH7Y+TOxLA9ZA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyyMYtmxHKKvKIF4QIabZ8J2BQwQB60q/lRvvCGDOHRENc4FcR6 l0D/Fj76XA5alaVdGqf1rLrdE7lIr/8gXO6YX1P7voYhVoSipEtdkoVO X-Gm-Gg: ASbGncsrS8zpLBh3upfQkGz+IN9xsj/842Pjq/slxsRf9NaBohrIfzThd8z5C1fPjEb t2WyxlRRz4VacWgv4TNCraYA8htW4iVus63OArQvndaKpqfCFYA3MoEQzQb9z6RhhgXCt0E9F2H 49NhUgxUpWGlQaAo3b+yJTNPaaNs+widoiZbmMwQdocbI9HFM2OWKsUsSKsGgCooJf1xBJw5Q6b C2vRYGicCf0Z8MZpDMhHfptMztevhtQErhHQg6Og2VnlVN0mU8AJM2iq9yFdoXS4ARXhGKGj+E8 ojdUoAUHQlxjzREaJey0VFldqdUJMNi9RCz1BK+OBE5zBMpUOw== X-Google-Smtp-Source: AGHT+IEGNOK0mUt1T1WfWtWU+RejdIoExLutF0eNoTGmnP3hgijV52hlSf5N2PoPErVIxW8zZ0id4Q== X-Received: by 2002:a05:6000:40ce:b0:3a4:dd02:f48a with SMTP id ffacd0b85a97d-3a4dd02f535mr5103446f8f.11.1748360838733; Tue, 27 May 2025 08:47:18 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4d2a7a317sm8594418f8f.24.2025.05.27.08.47.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 May 2025 08:47:18 -0700 (PDT) From: Roi Martin To: Stefan Monnier Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> Date: Tue, 27 May 2025 17:47:14 +0200 Message-ID: <87bjrehx8d.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , Marcin Borkowski , 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Stefan Monnier writes: >>> Please try and separate it into a `fill-region-semlf` function and then >>> another one which applies it to a paragraph, so that it can also be used >>> to fill a specific user-specified region (or the whole buffer). >> I'm not sure about this one. The idea is that `fill-paragraph-semlf' >> can be assigned as a value for `fill-paragraph-function' (I also >> included a mention to this in the doc string) or it can be called >> directly. The thing is that `fill-paragraph' docs say: > > Sadly, we don't currently have anything like a `fill-region-function`, > but that's "a bug, not a feature", so we should write new code such that > this misfeature is easier rather than harder to fix in the future. > >> I agree that it would be useful to apply `fill-paragraph-semlf' on >> a region or the whole buffer. But, the same could be said about any >> other `fill-paragraph-function'. > > Yes, I've had this in my TODO for many years. 🙁 I'll try to implement it :) >> So, do we really want a specific `fill-region-semlf' function? > > Actually, I think I want a `fill-region-as-paragraph-semlf'. > And maybe then some way to tell the `fill.el` code to use that instead > of the default `fill-region-as-paragraph`. OK, so here is my plan: First, I'll give a closer look to all the "fill" functions that Emacs currently provides to understand how every thing fits together and what is and what is not already supported. Then, I'll send a new patch to support applying a `fill-paragraph-function' on a region "as-paragraph" (similar to the behavior of `fill-region-as-paragraph') and "per-paragraph" (similar to executing `fill-paragraph' for each paragraph within the region). Finally, if needed, I can update this patch. Does it make sense? From debbugs-submit-bounces@debbugs.gnu.org Tue May 27 12:36:23 2025 Received: (at 78561) by debbugs.gnu.org; 27 May 2025 16:36:23 +0000 Received: from localhost ([127.0.0.1]:43108 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uJxHr-0007vZ-Ga for submit@debbugs.gnu.org; Tue, 27 May 2025 12:36:23 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:10489) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uJxHn-0007uo-OE for 78561@debbugs.gnu.org; Tue, 27 May 2025 12:36:20 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id CB715441485; Tue, 27 May 2025 12:36:12 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1748363771; bh=PHlXLK7t+I5XgTtttLfYgyL17+Ztm2nG6cE76l5lun0=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=SnOu3tRAo0HVlaYlBHGIDWznDXiN0dErYHvsqrlzNWe/9fyRXEyf7qrSM/JHvtM91 t54pnSKLIqRLlgOcBTujhYTXoTwACBOVULnNO1WqLW1ftoB+aSuO7Q7Y61qonQNPiu VKcYjpaaFC5Wht9Af/0ukXP+f9AH/uYxcOhLkPD31A/YOYKYmf7F6Yp1Kvu79KGTh7 DP+C2VhL8J8Jw+gjr8vvmPZZf9lqLBypZNxkzYw89k9QhtmhRRLKp7Orj4w7U7RgDQ BHu/So3Bfgr2N+Ea+EpyLyBBta8fJKzO4oCCuDvu+0jlHuqg9LR1pHprael2oBP8b9 GPUlLeXtRlVXQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 9627744098F; Tue, 27 May 2025 12:36:11 -0400 (EDT) Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 880B5120495; Tue, 27 May 2025 12:36:11 -0400 (EDT) From: Stefan Monnier To: Roi Martin Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <87bjrehx8d.fsf@gmail.com> Message-ID: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> Date: Tue, 27 May 2025 12:36:10 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.162 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , Marcin Borkowski , 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> Yes, I've had this in my TODO for many years. =F0=9F=99=81 > I'll try to implement it :) For some definition of "it". >>> So, do we really want a specific `fill-region-semlf' function? >> Actually, I think I want a `fill-region-as-paragraph-semlf'. >> And maybe then some way to tell the `fill.el` code to use that instead >> of the default `fill-region-as-paragraph`. > OK, so here is my plan: That plan has a much larger scope than semantic linefeed, so I recommend you first finish the current patch and take on that plan afterwards. What I'm asking is a fairly small refactoring of the code you sent, I think. > First, I'll give a closer look to all the "fill" functions that Emacs > currently provides to understand how every thing fits together and what > is and what is not already supported. Sounds good. I can give you a quick summary of what I know. `fill-paragraph-function`s usually serve as either: - Some way for the major mode to teach the fill code how to stay within a major-mode-specific notion of paragraph (e.g. fill within comments or within strings). This use has made somewhat obsolete by `fill-paragraph-forward-function` but it's still pretty common. - Some way for the major mode to teach the fill code about special line-wrapping conventions (e.g. add a trailing \ on the previous line to fill C strings, add a leading SPC or TAB to fill rfc822 headers, ..) or to fine tune (adaptive-)fill-prefix. - Actually change where we break lines for example to fill code in a "smart" way (like `smie-auto-fill` does). - It can also be used to prevent filling in some parts (e.g. titles/headlines). > Then, I'll send a new patch to support applying a > `fill-paragraph-function' on a region "as-paragraph" (similar to the > behavior of `fill-region-as-paragraph') and "per-paragraph" (similar to > executing `fill-paragraph' for each paragraph within the region). I think in general these are impossible because we don't know what the `fill-paragraph-function` actually does. My TODO is instead to provide different hooks for the above different uses (some hooks already exist such as `comment-line-break-function` but often they need to be generalized) to try and make `fill-paragraph-function` effectively obsolete (without necessarily marking it officially as obsolete). Stefan From debbugs-submit-bounces@debbugs.gnu.org Wed May 28 11:44:26 2025 Received: (at 78561) by debbugs.gnu.org; 28 May 2025 15:44:26 +0000 Received: from localhost ([127.0.0.1]:55122 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uKIx2-0000oY-Oo for submit@debbugs.gnu.org; Wed, 28 May 2025 11:44:26 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:46265) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uKIwv-0000nf-Ni for 78561@debbugs.gnu.org; Wed, 28 May 2025 11:44:17 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-441d1ed82dbso85975e9.0 for <78561@debbugs.gnu.org>; Wed, 28 May 2025 08:44:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748447047; x=1749051847; darn=debbugs.gnu.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=73Et3ZcBCNJOJEO8wMmvemEOZEOTwjoj/G2W+6yYo5s=; b=LR5CApVxFXkAvNDfiJZEFBiaFV1iOFYlXJHqBEqs0RKqU3PwthgdWf9qu0wEe90gBB bQsr0rwEMkp1eQCQOImkfGEOsZAsFyLYZaBUeoPQIErJuDUvxGHvGkFT9qNIPhMedJWY wMzAtfjpFwD9I68mOHcWMNGtZz/A8me+oEgEN8UTpuP7CQ7JEyrxlWoLgWMq0lZq3zHe rQY2y7y/DoqNS9ZEkYjJsNrY7gKtWrOnIMRte7fDnH6a0e8uITyo9ephXeVbnamQta3x RDh7DG6Ua/lwadP70WLEVgrmhCrUF3G4eJe3xg2gAwg/Sb+7oRcy9s2o2jBtNQLZukkB +56w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748447047; x=1749051847; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=73Et3ZcBCNJOJEO8wMmvemEOZEOTwjoj/G2W+6yYo5s=; b=enaEK93X6SdeirWritl9VZlYQONgo3psWe+F8LFfxh0C+mrrqdtD3Ol7WBkIOwk0NA +GEAEirvgan8GJuNTVORee4aZ6YvwrbJr7u1twJvjT0EgSmuvkBlQ2ME7jj7wWnTFXhE KVKhb4zYUYzh73vBRtFA+a6tfvRwknPSDY8LYvnI8tIDvcMK9Pk2Se5eIOGyG2uEobww 9wV4mj9Ug+nuEEPsH2F1j1qRjwYkaJsrpu+oFynz2oFpQ70V2oGsT6XwS4Gg7PD1HLpo Z8i8UmFDLYl+p/W6tW1Pp5digclZ1xjJX83G+480bRMEVFGoMrI48nRNkMt/7YySIlQA 2MOw== X-Forwarded-Encrypted: i=1; AJvYcCWeRG+f8TULVqofsrp+BHd6J1OYfoTrFp4oR5XH36NqWrbqw0l+MimFcbfpxrm7N1orKTwu+w==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yy6xhkJUff70ga2ZFPi0G2t0KzghsuZaIgqxLWpCQvpG6H/yXYk o6BriQkn5A5PV1LiAyzHgRa4jTBVE7KTth0mLufV3wHONZqnYbi9n6hm X-Gm-Gg: ASbGncvE3paDOTDbKTnp1f1LAXOl0wRrnu2npjj1CyRuF7sopZbV0JeTg21JvmJQs5G wD9lptcwCmEM/IdlfRwJ+BdPx/XYkHFl/P+VAvd7aJt4tab6OtKjlG2glQEBqjfcFY/t/BaM98q OlXUsE+PXHB5YVNNiCrQPkInHSLA6/mHasg8zVgG6otb2wI54uTWPUjsRr2ebqTT9EGqsACRl9H SilqBv1QZWUpITIoPmnNojjK4TrnrCUi2R1m+ESae7z1AlAn6Sjj43l+ln/2t7b7QshFCVnNxoL VxZGGi7snPxgBPxHoIFG4495pnzlTKUR3O3zdC0xesT3K7WB7g== X-Google-Smtp-Source: AGHT+IEc59yzkBSG9Ve6HAH4KhzeZULSOEDpiyMjzNoduZbDMlxcRTgbEjg+2uGxy0jHWq3F1KJo+g== X-Received: by 2002:a05:600c:6297:b0:43c:fc04:6d35 with SMTP id 5b1f17b1804b1-44c91ad6b51mr184676975e9.4.1748447046822; Wed, 28 May 2025 08:44:06 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450064add8bsm25955795e9.17.2025.05.28.08.44.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 08:44:06 -0700 (PDT) From: Roi Martin To: Stefan Monnier Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> Date: Wed, 28 May 2025 17:44:02 +0200 Message-ID: <875xhkivul.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , Marcin Borkowski , 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Stefan Monnier writes: > I recommend you first finish the current patch and take on that > plan afterwards. > What I'm asking is a fairly small refactoring of the code you sent, > I think. Please, find attached a new version of the patch. It contains the following changes: - Add a new function named `fill-region-as-paragraph-semlf', which fills a region using semantic linefeeds as if it were a single paragraph. Its behavior is analogous to `fill-region-as-paragraph'. - Update the `fill-paragraph-semlf' function to use `fill-region-as-paragraph-semlf' internally. - Remove the mention about using `fill-paragraph-semlf' as `fill-paragraph-function' from docs, given that the long term plan is to obsolete this. - Add test for `fill-region-as-paragraph-semlf'. Thanks a lot for all the explanations. I hope this new version is closer to what you had in mind. Roi --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Add-semantic-linefeed-support-for-paragraph-filling.patch >From 92538223e4808a46d47de57be4e85b3773f1fc8b Mon Sep 17 00:00:00 2001 From: Roi Martin Date: Fri, 21 Mar 2025 14:22:46 +0100 Subject: [PATCH] Add semantic linefeed support for paragraph filling * lisp/textmodes/fill.el (fill-region-as-paragraph-semlf): Add function to fill a region using semantic linefeeds as if it were a single paragraph. (fill-paragraph-semlf): Add function to fill paragraph using semantic linefeeds. * test/lisp/textmodes/fill-tests.el (fill-test-fill-region-as-paragraph-semlf) (fill-test-fill-paragraph-semlf) (fill-test-fill-paragraph-semlf-fill-paragraph-function) (fill-test-fill-paragraph-semlf-justify) (fill-test-fill-paragraph-semlf-sentence-end-double-space) (fill-test-fill-paragraph-semlf-fill-column) (fill-test-fill-paragraph-semlf-punctuation-marks) (fill-test-fill-paragraph-semlf-twice) (fill-test-fill-paragraph-semlf-fill-prefix) (fill-test-fill-paragraph-semlf-indented-block) (fill-test-fill-paragraph-semlf-emacs-lisp-mode) (fill-test-fill-paragraph-semlf-c-mode) (fill-test-fill-paragraph-semlf-org-mode) (fill-test-fill-paragraph-semlf-markdown-mode): Add tests. * test/lisp/textmodes/fill-resources/semlf-c-mode.erts: * test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts: * test/lisp/textmodes/fill-resources/semlf-fill-column.erts: * test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts: * test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts: * test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts: * test/lisp/textmodes/fill-resources/semlf-indented-block.erts: * test/lisp/textmodes/fill-resources/semlf-justify.erts: * test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts: * test/lisp/textmodes/fill-resources/semlf-org-mode.erts: * test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts: * test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts: * test/lisp/textmodes/fill-resources/semlf-twice.erts: * test/lisp/textmodes/fill-resources/semlf.erts: Add test data. --- lisp/textmodes/fill.el | 92 +++++++++ .../fill-resources/semlf-c-mode.erts | 183 ++++++++++++++++++ .../fill-resources/semlf-emacs-lisp-mode.erts | 87 +++++++++ .../fill-resources/semlf-fill-column.erts | 15 ++ .../semlf-fill-paragraph-function.erts | 12 ++ .../fill-resources/semlf-fill-prefix.erts | 35 ++++ .../semlf-fill-region-as-paragraph.erts | 37 ++++ .../fill-resources/semlf-indented-block.erts | 31 +++ .../fill-resources/semlf-justify.erts | 12 ++ .../fill-resources/semlf-markdown-mode.erts | 129 ++++++++++++ .../fill-resources/semlf-org-mode.erts | 122 ++++++++++++ .../semlf-punctuation-marks.erts | 13 ++ .../semlf-sentence-end-double-space.erts | 13 ++ .../textmodes/fill-resources/semlf-twice.erts | 12 ++ test/lisp/textmodes/fill-resources/semlf.erts | 88 +++++++++ test/lisp/textmodes/fill-tests.el | 104 ++++++++++ 16 files changed, 985 insertions(+) create mode 100644 test/lisp/textmodes/fill-resources/semlf-c-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-column.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-indented-block.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-justify.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-org-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-twice.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf.erts diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index e38d030734fb..b457b01d6917 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -1583,4 +1583,96 @@ fill-individual-paragraphs-citation "") string)) +(defun fill-region-as-paragraph-semlf (from to &optional justify + nosqueeze squeeze-after) + "Fill the region using semantic linefeeds as if it were a single paragraph. +This command removes any paragraph breaks in the region and extra +newlines at the end, and fills lines within the region. It leaves point +at the beginning of the line following the region. + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. If NOSQUEEZE is non-nil, do not to make spaces between words +canonical before filling. SQUEEZE-AFTER, if non-nil, should be a buffer +position; it means canonicalize spaces only starting from that position. +See `canonically-space-region' for the meaning of canonicalization of +spaces. + +Return the `fill-prefix' used for filling. + +If `sentence-end-double-space' is non-nil, then period followed by one +space does not end a sentence, so don't break a line there. +The variable `fill-column' controls the width for filling. + +For more details about semantic linefeeds, see `fill-paragraph-semlf'." + (interactive (progn + (barf-if-buffer-read-only) + (list (region-beginning) + (region-end) + (if current-prefix-arg 'full)))) + (unless (memq justify '(t nil none full center left right)) + (setq justify 'full)) + + (let ((from (min from to)) + (to (max from to)) + pfx) + (goto-char from) + (with-restriction (line-beginning-position) to + (let ((fill-column (point-max))) + (setq pfx (or (save-excursion + (fill-region-as-paragraph (point) + (point-max) + nil + nosqueeze + squeeze-after)) + ""))) + (while (not (eobp)) + (let ((fill-prefix pfx)) + (fill-region-as-paragraph (point) + (progn (forward-sentence) (point)) + justify + nosqueeze + squeeze-after)) + (when (and (> (point) (line-beginning-position)) + (< (point) (line-end-position))) + (delete-horizontal-space) + (insert "\n") + (insert pfx)))) + (unless (eobp) (forward-char 1)) + pfx)) + +(defun fill-paragraph-semlf (&optional justify) + "Fill paragraph at or after point using semantic linefeeds. +This command ensures that a newline character follows every sentence. +If a sentence is not followed by a newline character, one is inserted. +The task of deciding what is considered a sentence is delegated to the +`forward-sentence' function. + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. If `sentence-end-double-space' is non-nil, then period followed +by one space does not end a sentence, so don't break a line there. +The variable `fill-column' controls the width for filling. + +Return the `fill-prefix' used for filling. + +For more details about semantic linefeeds, see `https://sembr.org/' and +`https://rhodesmill.org/brandon/2012/one-sentence-per-line/'." + (interactive (progn + (barf-if-buffer-read-only) + (list (if current-prefix-arg 'full)))) + (unless (memq justify '(t nil none full center left right)) + (setq justify 'full)) + + (save-excursion + (let ((to (progn + (fill-forward-paragraph 1) + (backward-word) + (end-of-line) + (point))) + (from (progn + (fill-forward-paragraph -1) + (forward-word) + (beginning-of-line) + (point)))) + (fill-region-as-paragraph-semlf from to justify)))) + ;;; fill.el ends here diff --git a/test/lisp/textmodes/fill-resources/semlf-c-mode.erts b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts new file mode 100644 index 000000000000..a28eb68cfc6a --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts @@ -0,0 +1,183 @@ +Point-Char: | + +Name: c-mode - single-line + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +// ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: c-mode - single-line - fill-prefix - marker + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// - eiusmod tempor. +// - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// - veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. +// - Duis aute irure dolor in reprehenderit in voluptate velit esse +// - cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// - officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - fill-prefix - whitespace + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. +// Duis aute irure dolor in reprehenderit in voluptate velit esse +// cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - indented block + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. Incididunt ut labore et dolore magna +// aliqua. Ut enim ad minim veniam, quis nostrud exercitation +// ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-=-= + +Name: c-mode - multi-line + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim + * ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - marker + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * - eiusmod tempor. + * - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * - veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. + * - Duis aute irure dolor in reprehenderit in voluptate velit esse + * - cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * - officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - whitespace + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. + * Duis aute irure dolor in reprehenderit in voluptate velit esse + * cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - indented block + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. Incididunt ut labore et dolore magna + * aliqua. Ut enim ad minim veniam, quis nostrud exercitation + * ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts new file mode 100644 index 000000000000..fe71ee32c1aa --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts @@ -0,0 +1,87 @@ +Point-Char: | + +Name: emacs-lisp-mode + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +;; ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - marker + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; - eiusmod tempor. +;; - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; - veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. +;; - Duis aute irure dolor in reprehenderit in voluptate velit esse +;; - cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; - officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - whitespace + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. +;; Duis aute irure dolor in reprehenderit in voluptate velit esse +;; cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - indented block + +The `fill-forward-paragraph' function jumps to the beginning/end of +the comment. + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. Incididunt ut labore et dolore magna +;; aliqua. Ut enim ad minim veniam, quis nostrud exercitation +;; ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-column.erts b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts new file mode 100644 index 000000000000..20db7b1f9c5b --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts @@ -0,0 +1,15 @@ +Name: fill-column + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts new file mode 100644 index 000000000000..467e7401cf50 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts @@ -0,0 +1,12 @@ +Name: fill-paragraph-function + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts new file mode 100644 index 000000000000..e067eff69701 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts @@ -0,0 +1,35 @@ +Name: fill-prefix - marker + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +- eiusmod tempor. +- Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +- veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. +- Duis aute irure dolor in reprehenderit in voluptate velit esse +- cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +- officia deserunt mollit anim id est laborum. +=-=-= + +Name: fill-prefix - whitespace + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts b/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts new file mode 100644 index 000000000000..114eaa46fc3c --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts @@ -0,0 +1,37 @@ +Point-Char: | + +Name: fill-region-as-paragraph-semlf + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, s|ed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +do eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-indented-block.erts b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts new file mode 100644 index 000000000000..e483567c6ab3 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts @@ -0,0 +1,31 @@ +Point-Char: | + +Name: indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-justify.erts b/test/lisp/textmodes/fill-resources/semlf-justify.erts new file mode 100644 index 000000000000..3a951b7ce424 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-justify.erts @@ -0,0 +1,12 @@ +Name: justify + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts new file mode 100644 index 000000000000..7257708c245d --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts @@ -0,0 +1,129 @@ +Point-Char: | + +Name: markdown-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - indented block +Skip: t + +TODO - In `markdown-mode', the `fill-forward-paragraph' function +ignores code blocks. We should reach out to the `markdown-mode' +maintainer(s) to understand the reason for this and possibly suggest a +change to this behavior. This works as expected in +`markdown-ts-mode'. + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-org-mode.erts b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts new file mode 100644 index 000000000000..81dd4841de94 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts @@ -0,0 +1,122 @@ +Point-Char: | + +Name: org-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts new file mode 100644 index 000000000000..5346216e9f9c --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts @@ -0,0 +1,13 @@ +Name: punctuation marks + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua! Ut enim +ad minim veniam? Quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua! +Ut enim ad minim veniam? +Quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts new file mode 100644 index 000000000000..a01beed0f665 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts @@ -0,0 +1,13 @@ +Name: sentence-end-double-space + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris +nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-twice.erts b/test/lisp/textmodes/fill-resources/semlf-twice.erts new file mode 100644 index 000000000000..862dda6e27eb --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-twice.erts @@ -0,0 +1,12 @@ +Name: fill twice + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf.erts b/test/lisp/textmodes/fill-resources/semlf.erts new file mode 100644 index 000000000000..f3e331cd9381 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf.erts @@ -0,0 +1,88 @@ +Point-Char: | + +Name: beginning of buffer + +=-= +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: second paragraph + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: end of buffer + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.| +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-tests.el b/test/lisp/textmodes/fill-tests.el index 6e079973100e..1448965c9d46 100644 --- a/test/lisp/textmodes/fill-tests.el +++ b/test/lisp/textmodes/fill-tests.el @@ -28,6 +28,7 @@ ;;; Code: (require 'ert) +(require 'ert-x) (ert-deftest fill-test-no-fill-polish-nobreak-p nil "Tests of the `fill-polish-nobreak-p' function." @@ -121,6 +122,109 @@ test-fill-haskell ;; w "))) + +(ert-deftest fill-test-fill-region-as-paragraph-semlf () + "Test the `fill-region-as-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-fill-region-as-paragraph.erts") + (lambda () + (setq-local fill-column 35) + (fill-region-as-paragraph-semlf + (point) + (progn + (goto-char (point-max)) + (forward-line -1) + (beginning-of-line) + (point)))))) + +(ert-deftest fill-test-fill-paragraph-semlf () + "Test the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-paragraph-function () + "Test `fill-paragraph-semlf' as `fill-paragraph-function'." + (ert-test-erts-file (ert-resource-file "semlf-fill-paragraph-function.erts") + (lambda () + (setq-local fill-paragraph-function #'fill-paragraph-semlf) + (fill-paragraph)))) + +(ert-deftest fill-test-fill-paragraph-semlf-justify () + "Test the JUSTIFY parameter of the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-justify.erts") + (lambda () + (fill-paragraph-semlf 'justify)))) + +(ert-deftest fill-test-fill-paragraph-semlf-sentence-end-double-space () + "Test the `fill-paragraph-semlf' function with `sentence-end-double-space'." + (ert-test-erts-file (ert-resource-file "semlf-sentence-end-double-space.erts") + (lambda () + (setq-local sentence-end-double-space nil) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-column () + "Test the `fill-paragraph-semlf' function with `fill-column'." + (ert-test-erts-file (ert-resource-file "semlf-fill-column.erts") + (lambda () + (setq-local fill-column 35) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-punctuation-marks () + "Test the `fill-paragraph-semlf' function with different punctuation marks." + (ert-test-erts-file (ert-resource-file "semlf-punctuation-marks.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-twice () + "Test to run the `fill-paragraph-semlf' function twice." + (ert-test-erts-file (ert-resource-file "semlf-twice.erts") + (lambda () + (goto-char (point-min)) + (fill-paragraph-semlf) + (goto-char (point-min)) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-prefix () + "Test the `fill-paragraph-semlf' function with different fill prefixes." + (ert-test-erts-file (ert-resource-file "semlf-fill-prefix.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-indented-block () + "Test the `fill-paragraph-semlf' function with an indented block." + (ert-test-erts-file (ert-resource-file "semlf-indented-block.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-emacs-lisp-mode () + "Test the `fill-paragraph-semlf' function with `emacs-lisp-mode'." + (ert-test-erts-file (ert-resource-file "semlf-emacs-lisp-mode.erts") + (lambda () + (emacs-lisp-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-c-mode () + "Test the `fill-paragraph-semlf' function with `c-mode'." + (ert-test-erts-file (ert-resource-file "semlf-c-mode.erts") + (lambda () + (c-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-org-mode () + "Test the `fill-paragraph-semlf' function with `org-mode'." + (ert-test-erts-file (ert-resource-file "semlf-org-mode.erts") + (lambda () + (org-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-markdown-mode () + "Test the `fill-paragraph-semlf' function with `markdown-mode'." + (skip-unless (functionp 'markdown-mode)) + (ert-test-erts-file (ert-resource-file "semlf-markdown-mode.erts") + (lambda () + (markdown-mode) + (fill-paragraph-semlf)))) + (provide 'fill-tests) ;;; fill-tests.el ends here -- 2.49.0 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat May 31 13:40:12 2025 Received: (at 78561) by debbugs.gnu.org; 31 May 2025 17:40:12 +0000 Received: from localhost ([127.0.0.1]:59580 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uLQBm-0000Im-Bm for submit@debbugs.gnu.org; Sat, 31 May 2025 13:40:11 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:30884) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uLQBh-0000Gv-Fu for 78561@debbugs.gnu.org; Sat, 31 May 2025 13:40:08 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 1FC7F440871; Sat, 31 May 2025 13:39:59 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1748713194; bh=m7ULPBB1HXO7dm2u8BJOx5MPICkaaDDvEAzJc6hB0Ko=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=KJvPrl9/CGf7vpMmLHZlkseb6iy7YpokqcaLlfmdy094XYIi0pEVsnB7IsmZ8p3Um /W4CsMWy8cgSTTD6uaujjy8X4eWY1lJ37EeCoUiR4U6/+MgIWX8QyoAdnqyFvMETe3 WkY6ij43g7hYb90N78OG9SURqYudckWAw5Fxzl+LGXHIz7fQkY+ytnQI4XV2Ver3Yk ntiZstpfJCUjxYWIn/tp5opKtYaigzrY0UwfxqTG9ckq4RYMM1RpWu17oX5beiENt8 Z7SQj0wIUdD75dAEcckVe/bFa6dPKX0OoW8UTdV6ofwYYZ1jlhDHZQ6bbsFIDs8gCc c/zxfCOwF3NVQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id F0005440BA2; Sat, 31 May 2025 13:39:53 -0400 (EDT) Received: from alfajor (unknown [104.247.225.139]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 9FC2A12023A; Sat, 31 May 2025 13:39:53 -0400 (EDT) From: Stefan Monnier To: Roi Martin Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <875xhkivul.fsf@gmail.com> Message-ID: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> <875xhkivul.fsf@gmail.com> Date: Sat, 31 May 2025 13:39:52 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.350 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , Marcin Borkowski , 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> I recommend you first finish the current patch and take on that >> plan afterwards. >> What I'm asking is a fairly small refactoring of the code you sent, >> I think. > > Please, find attached a new version of the patch. Looks good to me. Eli? > - Remove the mention about using `fill-paragraph-semlf' as > `fill-paragraph-function' from docs, given that the long term plan is > to obsolete this. Well, it's been in my TODO for ages, so maybe we shouldn't assume this long term plan will materialize soon. Stefan From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 01 00:48:45 2025 Received: (at 78561) by debbugs.gnu.org; 1 Jun 2025 04:48:45 +0000 Received: from localhost ([127.0.0.1]:35119 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uLacm-0002v7-0K for submit@debbugs.gnu.org; Sun, 01 Jun 2025 00:48:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59734) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uLach-0002tT-A2 for 78561@debbugs.gnu.org; Sun, 01 Jun 2025 00:48:40 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uLaca-00022c-O4; Sun, 01 Jun 2025 00:48:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=9vm/Pg8C9eNwgBht4wIO8WbVPAzPZPNocNc8k2Qjhb0=; b=JzmAW7LAoCWH gryiXY3v9FgVWb5nsly+RYQ4NZQzvok3j47NP8TRToINd85XBauU4G8jsLj7ihItZC1nwKRB4VRcM U7ClbZuFRm162r3Ll40pStnfgzjT+N+nmmDtNHyC+9Ixi5qvvICcPyNdNNmHXn6vDFl3+Z9tF39i1 xWgmmOHt4eWRqxGnWgVp2lvYUMN5g8Qle+HVVloVd7YB4VAPTDbdv/13o6alQPaAYChN+X+9fLk1q ATu1Z7N1SJHyGrNX9UDE+w0L8lITn8BCAFKPb5murL5rwwxAf+Qgbc1X7C4okpN4lXvxHfboRq/fH lEP9sXLr4S9Nswr4pxWPcA==; Date: Sun, 01 Jun 2025 07:48:29 +0300 Message-Id: <86o6v8qd7m.fsf@gnu.org> From: Eli Zaretskii To: Stefan Monnier In-Reply-To: (message from Stefan Monnier on Sat, 31 May 2025 13:39:52 -0400) Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> <875xhkivul.fsf@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: mbork@mbork.pl, jroi.martin@gmail.com, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Stefan Monnier > Cc: Eli Zaretskii , 78561@debbugs.gnu.org, Marcin Borkowski > > Date: Sat, 31 May 2025 13:39:52 -0400 > > >> I recommend you first finish the current patch and take on that > >> plan afterwards. > >> What I'm asking is a fairly small refactoring of the code you sent, > >> I think. > > > > Please, find attached a new version of the patch. > > Looks good to me. Eli? It's okay, but please make sure there are two spaces between sentences, not one. There are quite a few cases in the patch where this is not so. Also, the commit log message should mention the bug number. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Mon Jun 02 09:06:35 2025 Received: (at 78561) by debbugs.gnu.org; 2 Jun 2025 13:06:35 +0000 Received: from localhost ([127.0.0.1]:50227 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uM4s4-0006LG-C3 for submit@debbugs.gnu.org; Mon, 02 Jun 2025 09:06:35 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:61755) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uM4rz-0006KR-79 for 78561@debbugs.gnu.org; Mon, 02 Jun 2025 09:06:30 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3a503d9ef59so1048354f8f.3 for <78561@debbugs.gnu.org>; Mon, 02 Jun 2025 06:06:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748869581; x=1749474381; darn=debbugs.gnu.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=OuTzJxuVXyokCjZIopmyduZHcqW3Aej8WBZA4PAzNU0=; b=Uq5Av/EYJ+A38ZKKcfq9LR0/f5ot1pegJCLT0WW4ywSZPdnbAyr+j2Sr+g5INQFbjF DZ89PPJxTLB79PZsgz7oF2hf41j88TUUquGQzUaaz40u49+aaqCAEPCd6Xq19C5ZmkTX zwS68qRH/CBPqrcy0v3Oc11kgpU1+j8RHg6YnkGd0u2y86r1d0D/l4OMEQgEirVxrpku uiFrdOrZj3ZDF0FXtQPY0+POsP/tTI+ajgcFuNuCxw5x2nIdZ1KCq7zA9ou2JObUwEO2 9xAQOxF7fOmk/vn3kkMT1pHIyCfIs3nmNfHQcuSM46ltscooZwTgA5figjJXwuzNyknM qa0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748869581; x=1749474381; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OuTzJxuVXyokCjZIopmyduZHcqW3Aej8WBZA4PAzNU0=; b=mL1cZnc65CQiTXwiaIvM4KfkNWdGtE1hNhiLN1XLNLDmKEr/gmhDoF8BRrGHDVfHAx iu2ytsuAGmlGHbFF6nAOLx0iMTO2vb+yCDoB34UAYIf9nMnZZ0f0e0N+UiS4pJDRys3l 1WEzpVhIoWfB9HoO6qGqTPUtQA9yptLuFjI0mDBsBa+wmYZQCh1unBc5xkfV2sivZi5m mJtN3ADLkrHjI2EgWuJmuGpHRgfGvatx/RVg89KrxxJi/NjIgH4xabbBcBn4SwTrgySc ah0QvmftdkeU62It5ityvQx4UWjN+05KniGOQ5HFU/RHgG+deUeyGuvfLvm3q8V7g7Ih 3eJA== X-Gm-Message-State: AOJu0Yzzjc5wtoK2Y16R2+TK0ZIa15fHEjZS3RR0Wf5is3wX+X42JXwA 2DJRe447owYtGJheJA91d9oCt8zNLyjIMBO/9aJJ83m0zBWMeHJO/V5R X-Gm-Gg: ASbGnctgWUfT9D3l8ev6b1ojg4i9Ei4xezNDJRX7prR2Lbep+a2AuDZQSiHzAIB7fUx tAVKfcWszPkeoE4nFRXuqa/ZdFG7lTbvv9+TltwXJ8Vk+OFINR8Kn98skHLUG/cvAyLaFIP+Oo2 vALH1/VnUENpz5yyjJxOGXNo1EZoWrW6uuw7RnSe3Yl5r3Bf+sCuBxmTtFWQ6qZf85ymq5fIfAy r7hTtJ4iyZS+ucGHgkV6yAVHAaioGoZE9KrxXBY/YEn8lwdawzDB0S9IuMBzlMP4Uq+GX7POe34 Pi6l5otGPkPK0aygjl8DhYQuYDdKxMGg+ya04gtaclFrMIjIWQ== X-Google-Smtp-Source: AGHT+IFyNnw5Tbj+dUIIbzVre9TXU7GwtDkP7q+30qIDZp6tHPYIeGHPV8WU5CqO5bLjdz33M4EDiQ== X-Received: by 2002:a05:6000:248a:b0:3a4:e706:530f with SMTP id ffacd0b85a97d-3a4fe398991mr6559134f8f.42.1748869580467; Mon, 02 Jun 2025 06:06:20 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4f00972b5sm14943698f8f.76.2025.06.02.06.06.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 06:06:19 -0700 (PDT) From: Roi Martin To: Eli Zaretskii , Stefan Monnier , rms@gnu.org Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <86o6v8qd7m.fsf@gnu.org> References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> <875xhkivul.fsf@gmail.com> <86o6v8qd7m.fsf@gnu.org> Date: Mon, 02 Jun 2025 15:06:16 +0200 Message-ID: <87tt4yqomv.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78561 Cc: mbork@mbork.pl, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Eli Zaretskii writes: > It's okay, but please make sure there are two spaces between > sentences, not one. There are quite a few cases in the patch where > this is not so. Fixed in doc strings. The rest of cases correspond to test data where we want to verify that `sentence-end-double-space' is respected. > Also, the commit log message should mention the bug number. Fixed. RMS replied to me with a review, where he mentioned that this feature would be more convenient if it were a minor mode. Eli, Stefan, what do you think? If it makes sense, we can add it in a future patch. Also, with regard to the paragraph: For more details about semantic linefeeds, see `https://sembr.org/' and `https://rhodesmill.org/brandon/2012/one-sentence-per-line/'." He raised the following concern: > This sort of information doesn't belong in an Emacs doc string. > If some of it isimportant for using this feature right, we > should state the point in this and other doc strings, or in > the Emacs Manual, That way we can propagate it and update it. > If information is "if you'd like to know more", not necessary for peopke > to read to know how to use the feature, then we can refer to it on a web page. > But we need to have reason to be confident that page will exist for many > years, serving the same purpose, in a way we would not be ashamed to link to. > > Otherwise, depending on it is asking for trouble. > > How much material is importaht to link to for this purpose? As I previously said, I think it should be fine to add a short explanation in the doc string or in the manual instead of linking with external sites that are subject to change or be deleted in the future. I've attached a new version of the patch. It includes the following changes compared to the previous version: - Separate sentences in doc strings using two spaces. - Add bug number to commit log message. - Slightly reword doc strings, following a suggestion from RMS. - Add test to check that it is possible to "revert" semlf-filling by refilling the paragraph, following a suggestion from RMS. Roi --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Add-semantic-linefeed-support-for-paragraph-filling.patch >From db5067064d89ea16b2313622be3e6bb32e9293f4 Mon Sep 17 00:00:00 2001 From: Roi Martin Date: Fri, 21 Mar 2025 14:22:46 +0100 Subject: [PATCH] Add semantic linefeed support for paragraph filling * lisp/textmodes/fill.el (fill-region-as-paragraph-semlf): Add function to fill a region using semantic linefeeds as if it were a single paragraph. (fill-paragraph-semlf): Add function to fill paragraph using semantic linefeeds. * test/lisp/textmodes/fill-tests.el (fill-test-fill-region-as-paragraph-semlf) (fill-test-fill-paragraph-semlf) (fill-test-fill-paragraph-semlf-fill-paragraph-function) (fill-test-fill-paragraph-semlf-justify) (fill-test-fill-paragraph-semlf-sentence-end-double-space) (fill-test-fill-paragraph-semlf-fill-column) (fill-test-fill-paragraph-semlf-punctuation-marks) (fill-test-fill-paragraph-semlf-twice) (fill-test-fill-paragraph-semlf-fill-prefix) (fill-test-fill-paragraph-semlf-indented-block) (fill-test-fill-paragraph-semlf-revert) (fill-test-fill-paragraph-semlf-emacs-lisp-mode) (fill-test-fill-paragraph-semlf-c-mode) (fill-test-fill-paragraph-semlf-org-mode) (fill-test-fill-paragraph-semlf-markdown-mode): Add tests. * test/lisp/textmodes/fill-resources/semlf-c-mode.erts: * test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts: * test/lisp/textmodes/fill-resources/semlf-fill-column.erts: * test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts: * test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts: * test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts: * test/lisp/textmodes/fill-resources/semlf-indented-block.erts: * test/lisp/textmodes/fill-resources/semlf-justify.erts: * test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts: * test/lisp/textmodes/fill-resources/semlf-org-mode.erts: * test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts: * test/lisp/textmodes/fill-resources/semlf-revert.erts: * test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts: * test/lisp/textmodes/fill-resources/semlf-twice.erts: * test/lisp/textmodes/fill-resources/semlf.erts: Add test data. (Bug#78561) --- lisp/textmodes/fill.el | 92 +++++++++ .../fill-resources/semlf-c-mode.erts | 183 ++++++++++++++++++ .../fill-resources/semlf-emacs-lisp-mode.erts | 87 +++++++++ .../fill-resources/semlf-fill-column.erts | 15 ++ .../semlf-fill-paragraph-function.erts | 12 ++ .../fill-resources/semlf-fill-prefix.erts | 35 ++++ .../semlf-fill-region-as-paragraph.erts | 37 ++++ .../fill-resources/semlf-indented-block.erts | 31 +++ .../fill-resources/semlf-justify.erts | 12 ++ .../fill-resources/semlf-markdown-mode.erts | 129 ++++++++++++ .../fill-resources/semlf-org-mode.erts | 122 ++++++++++++ .../semlf-punctuation-marks.erts | 13 ++ .../fill-resources/semlf-revert.erts | 11 ++ .../semlf-sentence-end-double-space.erts | 13 ++ .../textmodes/fill-resources/semlf-twice.erts | 12 ++ test/lisp/textmodes/fill-resources/semlf.erts | 88 +++++++++ test/lisp/textmodes/fill-tests.el | 112 +++++++++++ 17 files changed, 1004 insertions(+) create mode 100644 test/lisp/textmodes/fill-resources/semlf-c-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-column.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-indented-block.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-justify.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-org-mode.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-revert.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf-twice.erts create mode 100644 test/lisp/textmodes/fill-resources/semlf.erts diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index e38d030734fb..386a88bda3a8 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -1583,4 +1583,96 @@ fill-individual-paragraphs-citation "") string)) +(defun fill-region-as-paragraph-semlf (from to &optional justify + nosqueeze squeeze-after) + "Fill the region using semantic linefeeds as if it were a single paragraph. +This command removes any paragraph breaks in the region and extra +newlines at the end, and fills lines within the region. Text is +refilled putting a newline character after each sentence, calling +`forward-sentence' to find the ends of sentences. If +`sentence-end-double-space' is non-nil, period followed by one space is +not the end of a sentence. + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. If NOSQUEEZE is non-nil, do not to make spaces between words +canonical before filling. SQUEEZE-AFTER, if non-nil, should be a buffer +position; it means canonicalize spaces only starting from that position. +See `canonically-space-region' for the meaning of canonicalization of +spaces. The variable `fill-column' controls the width for filling. + +Return the `fill-prefix' used for filling. + +For more details about semantic linefeeds, see `fill-paragraph-semlf'." + (interactive (progn + (barf-if-buffer-read-only) + (list (region-beginning) + (region-end) + (if current-prefix-arg 'full)))) + (unless (memq justify '(t nil none full center left right)) + (setq justify 'full)) + + (let ((from (min from to)) + (to (max from to)) + pfx) + (goto-char from) + (with-restriction (line-beginning-position) to + (let ((fill-column (point-max))) + (setq pfx (or (save-excursion + (fill-region-as-paragraph (point) + (point-max) + nil + nosqueeze + squeeze-after)) + ""))) + (while (not (eobp)) + (let ((fill-prefix pfx)) + (fill-region-as-paragraph (point) + (progn (forward-sentence) (point)) + justify + nosqueeze + squeeze-after)) + (when (and (> (point) (line-beginning-position)) + (< (point) (line-end-position))) + (delete-horizontal-space) + (insert "\n") + (insert pfx)))) + (unless (eobp) (forward-char 1)) + pfx)) + +(defun fill-paragraph-semlf (&optional justify) + "Fill paragraph at or after point using semantic linefeeds. +Refill text putting a newline character after each sentence, calling +`forward-sentence' to find the ends of sentences. If +`sentence-end-double-space' is non-nil, period followed by one space is +not the end of a sentence. + +If JUSTIFY is non-nil (interactively, with prefix argument), justify as +well. The variable `fill-column' controls the width for filling. + +Return the `fill-prefix' used for filling. + +You can use this function as the value of `fill-paragraph-function', so +`fill-paragraph' and other filling commands will use it. + +For more details about semantic linefeeds, see `https://sembr.org/' and +`https://rhodesmill.org/brandon/2012/one-sentence-per-line/'." + (interactive (progn + (barf-if-buffer-read-only) + (list (if current-prefix-arg 'full)))) + (unless (memq justify '(t nil none full center left right)) + (setq justify 'full)) + + (save-excursion + (let ((to (progn + (fill-forward-paragraph 1) + (backward-word) + (end-of-line) + (point))) + (from (progn + (fill-forward-paragraph -1) + (forward-word) + (beginning-of-line) + (point)))) + (fill-region-as-paragraph-semlf from to justify)))) + ;;; fill.el ends here diff --git a/test/lisp/textmodes/fill-resources/semlf-c-mode.erts b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts new file mode 100644 index 000000000000..a28eb68cfc6a --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-c-mode.erts @@ -0,0 +1,183 @@ +Point-Char: | + +Name: c-mode - single-line + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +// ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: c-mode - single-line - fill-prefix - marker + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// - eiusmod tempor. +// - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// - veniam, quis nostrud exercitation ullamco laboris nisi ut. +// - Aliquip ex ea commodo consequat. +// - Duis aute irure dolor in reprehenderit in voluptate velit esse +// - cillum dolore eu fugiat nulla pariatur. +// - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// - officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - fill-prefix - whitespace + +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +// - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// Aliquip ex ea commodo consequat. +// Duis aute irure dolor in reprehenderit in voluptate velit esse +// cillum dolore eu fugiat nulla pariatur. +// Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +// officia deserunt mollit anim id est laborum. +=-=-= + +Name: c-mode - single-line - indented block + +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. Incididunt ut labore et dolore magna +// aliqua. Ut enim ad minim veniam, quis nostrud exercitation +// ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-= +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +// do eiusmod tempor. +// Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +// veniam, quis nostrud exercitation ullamco laboris nisi ut. +// +// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +// eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +// enim ad minim veniam, quis nostrud exercitation ullamco laboris +// nisi ut. +=-=-= + +Name: c-mode - multi-line + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim + * ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - marker + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * - eiusmod tempor. + * - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * - veniam, quis nostrud exercitation ullamco laboris nisi ut. + * - Aliquip ex ea commodo consequat. + * - Duis aute irure dolor in reprehenderit in voluptate velit esse + * - cillum dolore eu fugiat nulla pariatur. + * - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * - officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - fill-prefix - whitespace + +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + */ +=-= +/* + * - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * Aliquip ex ea commodo consequat. + * Duis aute irure dolor in reprehenderit in voluptate velit esse + * cillum dolore eu fugiat nulla pariatur. + * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + * officia deserunt mollit anim id est laborum. + */ +=-=-= + +Name: c-mode - multi-line - indented block + +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. Incididunt ut labore et dolore magna + * aliqua. Ut enim ad minim veniam, quis nostrud exercitation + * ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-= +/* + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + * do eiusmod tempor. + * Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + * veniam, quis nostrud exercitation ullamco laboris nisi ut. + * + * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + * eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + * enim ad minim veniam, quis nostrud exercitation ullamco laboris + * nisi ut. + */ +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts new file mode 100644 index 000000000000..fe71ee32c1aa --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-emacs-lisp-mode.erts @@ -0,0 +1,87 @@ +Point-Char: | + +Name: emacs-lisp-mode + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +;; ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - marker + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; - eiusmod tempor. +;; - Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; - veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; - Aliquip ex ea commodo consequat. +;; - Duis aute irure dolor in reprehenderit in voluptate velit esse +;; - cillum dolore eu fugiat nulla pariatur. +;; - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; - officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - fill-prefix - whitespace + +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +;; - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. +;; Aliquip ex ea commodo consequat. +;; Duis aute irure dolor in reprehenderit in voluptate velit esse +;; cillum dolore eu fugiat nulla pariatur. +;; Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +;; officia deserunt mollit anim id est laborum. +=-=-= + +Name: emacs-lisp-mode - indented block + +The `fill-forward-paragraph' function jumps to the beginning/end of +the comment. + +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. Incididunt ut labore et dolore magna +;; aliqua. Ut enim ad minim veniam, quis nostrud exercitation +;; ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-= +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +;; do eiusmod tempor. +;; Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +;; veniam, quis nostrud exercitation ullamco laboris nisi ut. + +;; Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +;; eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut +;; enim ad minim veniam, quis nostrud exercitation ullamco laboris +;; nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-column.erts b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts new file mode 100644 index 000000000000..20db7b1f9c5b --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-column.erts @@ -0,0 +1,15 @@ +Name: fill-column + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts new file mode 100644 index 000000000000..467e7401cf50 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-paragraph-function.erts @@ -0,0 +1,12 @@ +Name: fill-paragraph-function + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts new file mode 100644 index 000000000000..e067eff69701 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts @@ -0,0 +1,35 @@ +Name: fill-prefix - marker + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +- eiusmod tempor. +- Incididunt ut labore et dolore magna aliqua. Ut enim ad minim +- veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. +- Duis aute irure dolor in reprehenderit in voluptate velit esse +- cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +- officia deserunt mollit anim id est laborum. +=-=-= + +Name: fill-prefix - whitespace + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + Aliquip ex ea commodo consequat. + Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts b/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts new file mode 100644 index 000000000000..114eaa46fc3c --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts @@ -0,0 +1,37 @@ +Point-Char: | + +Name: fill-region-as-paragraph-semlf + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, s|ed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed +do eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim ad minim +veniam, quis nostrud exercitation +ullamco laboris nisi ut. +Lorem ipsum dolor sit amet, +consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore +magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-indented-block.erts b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts new file mode 100644 index 000000000000..e483567c6ab3 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-indented-block.erts @@ -0,0 +1,31 @@ +Point-Char: | + +Name: indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-justify.erts b/test/lisp/textmodes/fill-resources/semlf-justify.erts new file mode 100644 index 000000000000..3a951b7ce424 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-justify.erts @@ -0,0 +1,12 @@ +Name: justify + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts new file mode 100644 index 000000000000..7257708c245d --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-markdown-mode.erts @@ -0,0 +1,129 @@ +Point-Char: | + +Name: markdown-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: markdown-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: markdown-mode - indented block +Skip: t + +TODO - In `markdown-mode', the `fill-forward-paragraph' function +ignores code blocks. We should reach out to the `markdown-mode' +maintainer(s) to understand the reason for this and possibly suggest a +change to this behavior. This works as expected in +`markdown-ts-mode'. + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-org-mode.erts b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts new file mode 100644 index 000000000000..81dd4841de94 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-org-mode.erts @@ -0,0 +1,122 @@ +Point-Char: | + +Name: org-mode + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - one single-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple single-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - one multi-line item + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - list - multiple multi-line items + +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-= +- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +- Aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +=-=-= + +Name: org-mode - list - short sentence in multi-line item + +=-= +- Lorem ipsum dolor. Sit amet, consectetur adipiscing elit, sed do + eiusmod tempor. Incididunt ut labore et dolore magn a aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi + ut. +=-= +- Lorem ipsum dolor. + Sit amet, consectetur adipiscing elit, sed do eiusmod tempor. + Incididunt ut labore et dolore magn a aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: org-mode - indented block + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + |Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. Incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, quis nostrud exercitation + ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed + do eiusmod tempor. + Incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts new file mode 100644 index 000000000000..5346216e9f9c --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts @@ -0,0 +1,13 @@ +Name: punctuation marks + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua! Ut enim +ad minim veniam? Quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua! +Ut enim ad minim veniam? +Quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-revert.erts b/test/lisp/textmodes/fill-resources/semlf-revert.erts new file mode 100644 index 000000000000..d3efca50de6d --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-revert.erts @@ -0,0 +1,11 @@ +Name: revert + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts new file mode 100644 index 000000000000..a01beed0f665 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts @@ -0,0 +1,13 @@ +Name: sentence-end-double-space + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris +nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf-twice.erts b/test/lisp/textmodes/fill-resources/semlf-twice.erts new file mode 100644 index 000000000000..862dda6e27eb --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf-twice.erts @@ -0,0 +1,12 @@ +Name: fill twice + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-resources/semlf.erts b/test/lisp/textmodes/fill-resources/semlf.erts new file mode 100644 index 000000000000..f3e331cd9381 --- /dev/null +++ b/test/lisp/textmodes/fill-resources/semlf.erts @@ -0,0 +1,88 @@ +Point-Char: | + +Name: beginning of buffer + +=-= +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: second paragraph + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. +=-=-= + +Name: end of buffer + +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.| +=-= +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. Incididunt ut labore et dolore magna aliqua. Ut enim +ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor. +Incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, +quis nostrud exercitation ullamco laboris nisi ut. +=-=-= diff --git a/test/lisp/textmodes/fill-tests.el b/test/lisp/textmodes/fill-tests.el index 6e079973100e..8fbd9919bad0 100644 --- a/test/lisp/textmodes/fill-tests.el +++ b/test/lisp/textmodes/fill-tests.el @@ -28,6 +28,7 @@ ;;; Code: (require 'ert) +(require 'ert-x) (ert-deftest fill-test-no-fill-polish-nobreak-p nil "Tests of the `fill-polish-nobreak-p' function." @@ -121,6 +122,117 @@ test-fill-haskell ;; w "))) + +(ert-deftest fill-test-fill-region-as-paragraph-semlf () + "Test the `fill-region-as-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-fill-region-as-paragraph.erts") + (lambda () + (setq-local fill-column 35) + (fill-region-as-paragraph-semlf + (point) + (progn + (goto-char (point-max)) + (forward-line -1) + (beginning-of-line) + (point)))))) + +(ert-deftest fill-test-fill-paragraph-semlf () + "Test the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-paragraph-function () + "Test `fill-paragraph-semlf' as `fill-paragraph-function'." + (ert-test-erts-file (ert-resource-file "semlf-fill-paragraph-function.erts") + (lambda () + (setq-local fill-paragraph-function #'fill-paragraph-semlf) + (fill-paragraph)))) + +(ert-deftest fill-test-fill-paragraph-semlf-justify () + "Test the JUSTIFY parameter of the `fill-paragraph-semlf' function." + (ert-test-erts-file (ert-resource-file "semlf-justify.erts") + (lambda () + (fill-paragraph-semlf 'justify)))) + +(ert-deftest fill-test-fill-paragraph-semlf-sentence-end-double-space () + "Test the `fill-paragraph-semlf' function with `sentence-end-double-space'." + (ert-test-erts-file (ert-resource-file "semlf-sentence-end-double-space.erts") + (lambda () + (setq-local sentence-end-double-space nil) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-column () + "Test the `fill-paragraph-semlf' function with `fill-column'." + (ert-test-erts-file (ert-resource-file "semlf-fill-column.erts") + (lambda () + (setq-local fill-column 35) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-punctuation-marks () + "Test the `fill-paragraph-semlf' function with different punctuation marks." + (ert-test-erts-file (ert-resource-file "semlf-punctuation-marks.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-twice () + "Test to run the `fill-paragraph-semlf' function twice." + (ert-test-erts-file (ert-resource-file "semlf-twice.erts") + (lambda () + (goto-char (point-min)) + (fill-paragraph-semlf) + (goto-char (point-min)) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-fill-prefix () + "Test the `fill-paragraph-semlf' function with different fill prefixes." + (ert-test-erts-file (ert-resource-file "semlf-fill-prefix.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-indented-block () + "Test the `fill-paragraph-semlf' function with an indented block." + (ert-test-erts-file (ert-resource-file "semlf-indented-block.erts") + (lambda () + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-revert () + "Test that the `fill-paragraph-semlf' function can be reverted." + (ert-test-erts-file (ert-resource-file "semlf-revert.erts") + (lambda () + (fill-paragraph) + (fill-paragraph-semlf) + (fill-paragraph)))) + +(ert-deftest fill-test-fill-paragraph-semlf-emacs-lisp-mode () + "Test the `fill-paragraph-semlf' function with `emacs-lisp-mode'." + (ert-test-erts-file (ert-resource-file "semlf-emacs-lisp-mode.erts") + (lambda () + (emacs-lisp-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-c-mode () + "Test the `fill-paragraph-semlf' function with `c-mode'." + (ert-test-erts-file (ert-resource-file "semlf-c-mode.erts") + (lambda () + (c-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-org-mode () + "Test the `fill-paragraph-semlf' function with `org-mode'." + (ert-test-erts-file (ert-resource-file "semlf-org-mode.erts") + (lambda () + (org-mode) + (fill-paragraph-semlf)))) + +(ert-deftest fill-test-fill-paragraph-semlf-markdown-mode () + "Test the `fill-paragraph-semlf' function with `markdown-mode'." + (skip-unless (functionp 'markdown-mode)) + (ert-test-erts-file (ert-resource-file "semlf-markdown-mode.erts") + (lambda () + (markdown-mode) + (fill-paragraph-semlf)))) + (provide 'fill-tests) ;;; fill-tests.el ends here -- 2.49.0 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon Jun 02 15:13:16 2025 Received: (at 78561) by debbugs.gnu.org; 2 Jun 2025 19:13:16 +0000 Received: from localhost ([127.0.0.1]:55047 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uMAax-0004Ce-Hz for submit@debbugs.gnu.org; Mon, 02 Jun 2025 15:13:15 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:14709) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uMAau-0004CF-F1 for 78561@debbugs.gnu.org; Mon, 02 Jun 2025 15:13:12 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id EE0F010013E; Mon, 2 Jun 2025 15:13:06 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1748891585; bh=Ir4t9Lv8qlBiauf38XrxdUO66L2uXFNJG09Ja/FZDno=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=h2K3FeAl0XZOSZ5tiO/1+1Pcfq/cniRCT11jLw0bS6k9EQiUHlShb8W+1DUyiG32l blFbfElfNc+gmtCIpF+4IbTV+6jtrgo10cfIc4/C/arco8BOywNEZCyTPd8Tvjrdqs kHnxaYvDPyKDLJKMpUNyoQGyXmpAOZMw1ccl281XSQzPgIYTLsNHvntzCfMSamojMD xjSGew4JkhhyOsQQIBtRP+Q6Uzfm5LUtO8aYiCCxH/5HYsPE9GG0fe+n95JjXQxJ0Y PLrk5yrE60VoDM73JLy1PDZi+Z/uzGrbCuLLBUgqrKiVZ0JaJNhXWdARGBv7l9dqWZ E2N1RSGZ6TMjQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id E7FA510006B; Mon, 2 Jun 2025 15:13:05 -0400 (EDT) Received: from alfajor (modemcable005.21-80-70.mc.videotron.ca [70.80.21.5]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id AD2DE12024D; Mon, 2 Jun 2025 15:13:05 -0400 (EDT) From: Stefan Monnier To: Roi Martin Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <87tt4yqomv.fsf@gmail.com> Message-ID: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> <875xhkivul.fsf@gmail.com> <86o6v8qd7m.fsf@gnu.org> <87tt4yqomv.fsf@gmail.com> Date: Mon, 02 Jun 2025 15:13:05 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.267 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , mbork@mbork.pl, rms@gnu.org, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > RMS replied to me with a review, where he mentioned that this feature > would be more convenient if it were a minor mode. Eli, Stefan, what do > you think? If it makes sense, we can add it in a future patch. Yes, it goes in the same direction of my TODO of adding more hooks to control various aspects of filling. (One of) Those hooks should make it easy to write such a minor mode. > I've attached a new version of the patch. It includes the following > changes compared to the previous version: LGTM. Side comment, tho: it would be good to get rid of the `with-restriction` so that the code can see the surrounding text. In the past such restrictions in `fill.el` have posed problems for example when we want to refill code in a way that obeys indentation rules or that needs to distinguish filling within strings vs filling within comments. Stefan From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 03 02:45:34 2025 Received: (at 78561) by debbugs.gnu.org; 3 Jun 2025 06:45:34 +0000 Received: from localhost ([127.0.0.1]:59370 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uMLOv-0004tD-LM for submit@debbugs.gnu.org; Tue, 03 Jun 2025 02:45:34 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]:58454) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uMLOs-0004rc-4y for 78561@debbugs.gnu.org; Tue, 03 Jun 2025 02:45:31 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-442f9043f56so31143015e9.0 for <78561@debbugs.gnu.org>; Mon, 02 Jun 2025 23:45:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748933124; x=1749537924; darn=debbugs.gnu.org; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=wxeMZQendUGYwC0ErOXla8pwOMeLchK2GyuZrCySLeY=; b=ivG6REHsc/mmYFcCsdUcHtv6QLKYsNNouUXdQsTRoQvSUn5ZPiMusTC6WWKtOD1x6V dM9GbSqI11Lrpoe0a1XgvxO6AEhyu4mT1hU1JyatGUX2ucd6NwqGoQnMtv2dCFRUzFH6 G4jxd84X6MJdt8uxg50b5euTLU3yogK1RP5kpKsNCQQlT/834XNlGgUrTQmVGwcclJQg TvTYTVkyuUD425bmt0Sl+c4oR1z91JKjJscPXMhKdOq+N9Z5X0cikBxU80tHNXqAbr+u GXnBFhrL4i8K+EF3Yd8BxFoG+QQkdqQjpoqMTLY4rm0Ir7zjU0p2XVednx7mwz02Z2to Zppw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748933124; x=1749537924; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wxeMZQendUGYwC0ErOXla8pwOMeLchK2GyuZrCySLeY=; b=xRC8GX4uAbiqZDnjuTSqOAZi3iP3GZ65zo3+HT3VDLiJDHl7lMwLOlJfOc6zyPIOoD cZGAvuDwJOP377oyYQg3vlnRZJCZk6VO3YHRl8sbmwbxXoO56didoA4baRCdZouygbbh P/rYXdOWn92W488b/SVZg9hh59ul9/SDD7XDTiQf5VKwgRA32OwLIsTFP+44H9fvTeg9 s4jcdQstpobxs+MSn3ComkkPGqz/wW+HWVOXQoMtpeHvQ+/O0SzI0LwUBnAWfZvqgrpV jpCQUCPnqYDbOxaq35UfecSaRINkz1mTdgHNwls6q9L+tiUDh+DhzRFAtEikoa7Qd9BM wqqg== X-Forwarded-Encrypted: i=1; AJvYcCX8OWucBwFftYqHcW5Fps1ag43H66rloOiCZ20NDmuGxH3rrrIRMnnqIp2q+JQcNch5g2SrlQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yz7iglbMpWMXhaq5EDto/Ld+ryVlTWirwy+POjFbMFSmKbG8HcY lGDsjEijxY5y3Bx2S9af5es3DjQukAOe4YACfEsP9J+R5vxs1nMXHVK/ X-Gm-Gg: ASbGnctRqgVtzN4fNEVypYMHJewS1kFpKU3p9rg+h6TKa18mfVjKLhNDzJZs0PxqVek lQBwvzVZdmf/ksZGAVmVQW9FMKW8n7YAEtMqyg2gN8HUcy2GTJw4Gd6wy0nUsQNjr5S1HWhbpKf jBFdkqhHyb9hTXwSwbKi3up4AIgFm9pY4J77KznJymCcElH5PyJwLGz0ztql2PtpWCMN3Hkin26 rC0FtLB6TlCqmHjsYoMTJOo97xOK0Dc3IajLsIP/EEPJgzfD4vdnUXwDaqchfssCJRQ5+qPj9it lWZHwgCRzrAXEp43z91LSSTwhPMNAVQYEgCWHsa+xnMnIM9I1w== X-Google-Smtp-Source: AGHT+IG+RfRKpfs9ptvwwu1H93yozKPeH3KDV8DxyhjuMZAplTZC3JZ7vVsqIRnKmIQzjhQHWdipkA== X-Received: by 2002:a05:6000:4282:b0:3a4:ec23:dba7 with SMTP id ffacd0b85a97d-3a4fe394766mr8747534f8f.31.1748933123687; Mon, 02 Jun 2025 23:45:23 -0700 (PDT) Received: from localhost ([84.79.192.255]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4efe5b79asm16875453f8f.2.2025.06.02.23.45.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 23:45:23 -0700 (PDT) From: Roi Martin To: Stefan Monnier Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> <875xhkivul.fsf@gmail.com> <86o6v8qd7m.fsf@gnu.org> <87tt4yqomv.fsf@gmail.com> Date: Tue, 03 Jun 2025 08:45:17 +0200 Message-ID: <87bjr5b9xe.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , mbork@mbork.pl, rms@gnu.org, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Stefan Monnier writes: > Side comment, tho: it would be good to get rid of the `with-restriction` > so that the code can see the surrounding text. In the past such > restrictions in `fill.el` have posed problems for example when we want > to refill code in a way that obeys indentation rules or that > needs to distinguish filling within strings vs filling within comments. The latest version is far from perfect but works well for the most common use cases. The included tests can given you an idea of the current state. Are you OK with tackling the `with-restriction' improvement in a future patch? Roi From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 03 13:25:05 2025 Received: (at 78561) by debbugs.gnu.org; 3 Jun 2025 17:25:05 +0000 Received: from localhost ([127.0.0.1]:41128 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uMVNp-00066q-BG for submit@debbugs.gnu.org; Tue, 03 Jun 2025 13:25:05 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:62523) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uMVNm-00065c-Sm for 78561@debbugs.gnu.org; Tue, 03 Jun 2025 13:25:03 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 569A344239A; Tue, 3 Jun 2025 13:24:55 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1748971494; bh=fp7opKaFrbkXBQAS3FNNb/4QbxlW8NyFO8AertIWP9E=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=fmK1lX1y0mtIhgXlLy9nFy9EA3yexSQnwwHQ9XOFFVUyViPzDlBftUCJwQ7dyeWVa oCQt+dEglaFEFpYIcLz0veKWbxhEduauvZnlp4BOXBzULRB2cb+AYay8Kw5GeiEJOr O9v5zSlg4WwnfaaZotRWlGDJBqfz+vco2A/tbchbwpU2HA9OAPlwhmmwzLmIg0DoDj 8sKNYHg6AetiDdKdhH2ymIE/V8V4Ef0Gyf4hq7Xu5phTUUJZ/gpmzk9KJkpLHw0VGm 3pNnPi+/uuCMBHNrWxCOaqmSQ1N8wQdkvtjlwbyKV5+LNZ2bIO8THLAf711gijs/NC ivx36HdO4M6OQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 82021441857; Tue, 3 Jun 2025 13:24:54 -0400 (EDT) Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 6F3C012058A; Tue, 3 Jun 2025 13:24:54 -0400 (EDT) From: Stefan Monnier To: Roi Martin Subject: Re: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling In-Reply-To: <87bjr5b9xe.fsf@gmail.com> Message-ID: References: <87jz67tzrp.fsf@gmail.com> <87frgs4jfh.fsf@gmail.com> <87bjrehx8d.fsf@gmail.com> <875xhkivul.fsf@gmail.com> <86o6v8qd7m.fsf@gnu.org> <87tt4yqomv.fsf@gmail.com> <87bjr5b9xe.fsf@gmail.com> Date: Tue, 03 Jun 2025 13:24:54 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.161 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 78561 Cc: Eli Zaretskii , mbork@mbork.pl, rms@gnu.org, 78561@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Are you OK with tackling the `with-restriction' > improvement in a future patch? Yes. Stefan