bug-auctex
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#56160: 13.1.3; fill breaks verbatim macros not followed with spaces


From: Arash Esbati
Subject: bug#56160: 13.1.3; fill breaks verbatim macros not followed with spaces
Date: Fri, 01 Jul 2022 11:01:27 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50

Ikumi Keita <ikumi@ikumi.que.jp> writes:

>>>>>> Arash Esbati <arash@gnu.org> writes:
>
> Done. :-)

Thanks 🙏🏿

>> I'm not sure I understand the last sentence.  Can you elaborate?
>
> AUCTeX doesn't have its own auto fill function. If auto fill is enabled,
> `do-auto-fill' does its job. 

Thanks, now I understand what you meant.

>> (defun LaTeX-verbatim-p (&optional pos)
> ...
>>         (when LaTeX-shortvrb-chars
>>           (let* ((strings (mapcar #'string LaTeX-shortvrb-chars))
>>                  (regexp (mapconcat #'regexp-quote strings "\\|"))
>
> In most cases,
>           (let ((regexp (concat "[" LaTeX-shortvrb-chars "]"))
> would be enough. Is it necessary to take corner cases, in which
> `LaTeX-shortvrb-chars' contains ?- or ?], into accounts?

That was also my first approach, but then I thought I make it more
robust since we really don't know what people will choose as delimiters.
Actually, I think we have change that to:

    (regexp (concat "[^\\]" (mapconcat #'regexp-quote strings "\\|")))

to exclude things like \|, \- and \" etc.

>>                  (p (point))
>>                  (match (save-excursion
>>                           (re-search-forward regexp (line-end-position) t))))
>>             (and match
>>                  (save-excursion
>>                    (cl-oddp (how-many regexp (line-beginning-position) p)))
>>                  (save-excursion
>>                    (cl-evenp (how-many regexp (line-beginning-position) 
>> match)))))))))
>
> This `cl-evenp' always evaluates to non-nil because the first
> `re-search-forward' succeeded, doesn't it?

True, that was again only precaution.  But I think we're not done yet.
Please consider this example, and hit 'M-q' in the paragraphs once with
`font-lock-mode' enabled and once disabled:

--8<---------------cut here---------------start------------->8---
\documentclass{article}
\usepackage{shortvrb}
\begin{document}

Lorem ipsum |dolor| sit "amet", consectetur |adipiscing elit, sed do eiusmod|
tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum |dolor| sit "amet", consectetur \verb|adipiscing elit, sed do 
eiusmod|
tempor incididunt ut labore et dolore magna aliqua.

\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% LaTeX-shortvrb-chars: (?| ?\")
%%% End:
--8<---------------cut here---------------end--------------->8---

with this definition:

--8<---------------cut here---------------start------------->8---
(defun LaTeX-verbatim-p (&optional pos)
  "Return non-nil if position POS is in a verbatim-like construct."
  (when pos (goto-char pos))
  (save-match-data
    (or (when (fboundp 'font-latex-faces-present-p)
          (font-latex-faces-present-p 'font-latex-verbatim-face))
        (member (LaTeX-current-verbatim-macro)
                (LaTeX-verbatim-macros-with-delims))
        (member (TeX-current-macro) (LaTeX-verbatim-macros-with-braces))
        (member (LaTeX-current-environment) (LaTeX-verbatim-environments))
        (when LaTeX-shortvrb-chars
          (let* ((strings (mapcar #'string LaTeX-shortvrb-chars))
                 (regexp (concat "[^\\]"
                                 (mapconcat #'regexp-quote strings "\\|")))
                 (p (point))
                 (match (save-excursion
                          (re-search-forward regexp (line-end-position) t))))
            (and match
                 (save-excursion
                   (cl-oddp (how-many regexp (line-beginning-position) p)))
                 (save-excursion
                   (cl-evenp (how-many regexp (line-beginning-position) 
match)))))))))
--8<---------------cut here---------------end--------------->8---

With `font-lock-mode' enabled, you get this:

--8<---------------cut here---------------start------------->8---
Lorem ipsum |dolor| sit "amet",
consectetur |adipiscing elit, sed do eiusmod| tempor incididunt ut
labore et dolore magna aliqua.

Lorem ipsum |dolor| sit "amet", consectetur
\verb|adipiscing elit, sed do eiusmod| tempor incididunt ut labore et
dolore magna aliqua.
--8<---------------cut here---------------end--------------->8---

and without, you get:

--8<---------------cut here---------------start------------->8---
Lorem ipsum |dolor| sit "amet", consectetur
|adipiscing elit, sed do eiusmod| tempor incididunt ut labore et
dolore magna aliqua.

Lorem ipsum |dolor| sit "amet", consectetur
\verb|adipiscing elit, sed do eiusmod| tempor incididunt ut labore et
dolore magna aliqua.
--8<---------------cut here---------------end--------------->8---

I think the issue is that '|' has also `font-latex-verbatim-face' which
makes Emacs travel to far back when searching for the next break point.
I'm not sure what's the best approach to fix this, what do you think?

Best, Arash





reply via email to

[Prev in Thread] Current Thread [Next in Thread]