branch: externals/auctex commit 618bdf1b89159dfe23375353002cf05e354d2342 Author: Arash Esbati <ar...@gnu.org> Commit: Arash Esbati <ar...@gnu.org>
Append \b to regexp built from TeX control words * latex.el (LaTeX-paragraph-commands-regexp-make): Append \b to regexp built from TeX control words. Fix this report http://lists.gnu.org/archive/html/auctex/2017-03/msg00009.html * tests/latex/latex-filling-in.tex: * tests/latex/latex-filling-out.tex: * tests/latex/latex-test.el (LaTeX-filling): Extend test for addition in `LaTeX-paragraph-commands-regexp-make' in latex.el. --- latex.el | 19 +++++++++++++++---- tests/latex/latex-filling-in.tex | 23 +++++++++++++++++++++++ tests/latex/latex-filling-out.tex | 17 +++++++++++++++++ tests/latex/latex-test.el | 15 ++++++++++++--- 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/latex.el b/latex.el index a82a136..5e75d31 100644 --- a/latex.el +++ b/latex.el @@ -4547,10 +4547,21 @@ value of NO-SUBSECTIONS." "Internal list of LaTeX macros that should have their own line.") (defun LaTeX-paragraph-commands-regexp-make () - "Return a regular expression matching defined paragraph commands." - (concat (regexp-quote TeX-esc) "\\(" - (regexp-opt (append LaTeX-paragraph-commands - LaTeX-paragraph-commands-internal)) "\\)")) + "Return a regular expression matching defined paragraph commands. +Regexp part containing TeX control words is postfixed with `\\b' +to avoid ambiguities (e.g. \\par vs. \\parencite)." + (let (cmds symbs) + (dolist (mac (append LaTeX-paragraph-commands + LaTeX-paragraph-commands-internal)) + (if (string-match "[^a-zA-Z]" mac) + (push mac symbs) + (push mac cmds))) + (concat (regexp-quote TeX-esc) "\\(?:" + (regexp-opt cmds "\\(?:") + "\\b" + "\\|" + (regexp-opt symbs) + "\\)"))) (defcustom LaTeX-paragraph-commands nil "List of LaTeX macros that should have their own line. diff --git a/tests/latex/latex-filling-in.tex b/tests/latex/latex-filling-in.tex index 6e7294a..274d03c 100644 --- a/tests/latex/latex-filling-in.tex +++ b/tests/latex/latex-filling-in.tex @@ -3,3 +3,26 @@ Lorem ipsum dolor sit amet, consectetur adipisci elit, sed eiusmod \(0 = 1\) tem \begin{tabular}{| l | l | l | l |} Lorem ipsum dolor sit amet, consectetur adipisci & Lorem ipsum dolor sit amet, consectetur adipisci & Lorem ipsum dolor sit amet, consectetur adipisci & Lorem ipsum dolor sit amet, consectetur adipisci \end{tabular} + +% Test for unambiguousness of macros starting a paragraph. E.g. +% caption vs. captionsetup +Lorem ipsum dolor sit amet, consectetur adipisci, +lorem ipsum dolor +\captionsetup{key=val} +sit amet, consectetur adipisci + +Lorem ipsum dolor sit amet, consectetur adipisci, +lorem ipsum dolor +\caption{key=val} +sit amet, consectetur adipisci + +% par vs. parencite +Lorem ipsum dolor sit amet, consectetur adipisci, +lorem ipsum dolor +\parencite{key} +sit amet, consectetur adipisci + +Lorem ipsum dolor sit amet, consectetur adipisci, +lorem ipsum dolor +\par +sit amet, consectetur adipisci diff --git a/tests/latex/latex-filling-out.tex b/tests/latex/latex-filling-out.tex index b0596f3..764628c 100644 --- a/tests/latex/latex-filling-out.tex +++ b/tests/latex/latex-filling-out.tex @@ -7,3 +7,20 @@ consequatur. \begin{tabular}{| l | l | l | l |} Lorem ipsum dolor sit amet, consectetur adipisci & Lorem ipsum dolor sit amet, consectetur adipisci & Lorem ipsum dolor sit amet, consectetur adipisci & Lorem ipsum dolor sit amet, consectetur adipisci \end{tabular} + +% Test for unambiguousness of macros starting a paragraph. E.g. +% caption vs. captionsetup +Lorem ipsum dolor sit amet, consectetur adipisci, lorem ipsum dolor +\captionsetup{key=val} sit amet, consectetur adipisci + +Lorem ipsum dolor sit amet, consectetur adipisci, lorem ipsum dolor +\caption{key=val} +sit amet, consectetur adipisci + +% par vs. parencite +Lorem ipsum dolor sit amet, consectetur adipisci, lorem ipsum dolor +\parencite{key} sit amet, consectetur adipisci + +Lorem ipsum dolor sit amet, consectetur adipisci, lorem ipsum dolor +\par +sit amet, consectetur adipisci diff --git a/tests/latex/latex-test.el b/tests/latex/latex-test.el index 02b1894..05ca2c8 100644 --- a/tests/latex/latex-test.el +++ b/tests/latex/latex-test.el @@ -93,15 +93,24 @@ line and from another directory." ;; Test LaTeX code with math modes is indented as expected. This has mostly to ;; do with the value of `LaTeX-fill-break-at-separators' and how ;; `LaTeX-fill-move-to-break-point' handles it. If the test fails, try to look -;; there. +;; there. The second part of the test looks for unambiguousness of +;; macros starting a paragraph +;; (http://lists.gnu.org/archive/html/auctex/2017-03/msg00009.html) (ert-deftest LaTeX-filling () (should (string= (with-temp-buffer (insert-file-contents LaTeX-filling/in) (LaTeX-mode) (let ((fill-column 70)) - (fill-paragraph)) - (buffer-string)) + (fill-paragraph) + (let ((cmds '("captionsetup" "caption" + "parencite" "par"))) + (dolist (cmd cmds) + (search-forward (concat "\\" cmd)) + (save-excursion + (end-of-line 0) + (fill-paragraph))))) + (buffer-string)) (with-temp-buffer (insert-file-contents LaTeX-filling/out) (buffer-string)))))