Hi Ralf,
2014/1/11 Ralf Angeli <[email protected]>:
> * Mosč Giordano (2014-01-11) writes:
>
>> thanks for your report. The problem is in the `texmathp' function,
>> and in particular in the regexp used for searching math togglers, ie
>> `texmathp-toggle-regexp'. Its value is
>> "\\([^\\\\\\$]\\|\\`\\)\\(\\$\\$\\|\\$\\)", but this doesn't match a
>> dollar preceded by two escapes.
>> "\\(\\\\\\\\\\|[^\\\\\\$]\\|\\`\\)\\(\\$\\$\\|\\$\\)" should do the
>> trick, but I'd like a confirmation by someone more experienced in
>> regexps than me. Actually we should make sure there is an even number
>> of escapes, not just two, then perhaps something like `TeX-escaped-p'
>> might be needed.
>
> IIRC we used something like "[^\\]\\(\\\\\\\\\\)*" to check if something
> is unescaped before we had `TeX-escaped-p'. Let's assume the logic for
> the regexp is the following:
>
> match a pair of dollar signs or a single dollar sign under the condition
> that a) in front of it there is no dollar sign or escape or b) if there
> is a dollar sign in front if it, it is preceded by an odd number of
> escapes or c) if there is an escape in front of it, it has to be
> preceded by an odd number of escapes, so that there is an even number of
> escapes in a row or d) the dollar sign(s) occur(s) at the start of the
> buffer
>
> In that case the regexp could look like this:
>
> "\\([^\\$]\\|[^\\]\\(\\\\\\\\\\)*\\\\\\$\\|[^\\]\\(\\\\\\\\\\)+\\|\\`\\)\\(\\$\\$\\|\\$\\)"
>
Thanks for your suggestions! Unfortunately, this regexp doesn't match
the opening dollar in
\\$something$
> Note: I think that the "[^\\\\\\$]" in the original regexp has too many
> escapes. "[^\\$]" should suffice because you don't need to escape the
> characters in a character alternative.
>
I think you're right, `re-builder' confirms your idea.
> The regexp would become rather complicated, so it might be worth to
> check if using `TeX-escaped-p' is the nicer alternative. Or somebody
> has an idea how to simplify the regexp.
>
The attached patch uses the same logic of `TeX-escaped-p', but fails
to recognize the math mode in
\$$something$
because finds `$$' preceded by an escape. All in all, a single well
conceived regexp probably is better.
Bye,
Mosè
diff --git a/texmathp.el b/texmathp.el
index 350406b..d449f5f 100644
--- a/texmathp.el
+++ b/texmathp.el
@@ -171,7 +171,7 @@ customize (customize calls it when setting the variable)."
(mapconcat 'regexp-quote switches "\\|")
"\\)")
texmathp-toggle-regexp
- (concat "\\([^\\\\\\$]\\|\\`\\)\\("
+ (concat "\\("
(mapconcat 'regexp-quote togglers "\\|")
"\\)"))))
@@ -285,9 +285,13 @@ See the variable `texmathp-tex-commands' about which commands are checked."
(save-excursion
(goto-char (cdr match))
(while (re-search-forward texmathp-toggle-regexp pos t)
- (if (setq math-on (not math-on))
- (setq sw-match (cons (match-string 2) (match-beginning 2)))
- (setq sw-match nil)))
+ ;; Make sure the togglers are unescaped.
+ (if (save-excursion
+ (goto-char (match-beginning 0))
+ (zerop (mod (skip-chars-backward "\\\\") 2)))
+ (if (setq math-on (not math-on))
+ (setq sw-match (cons (match-string 1) (match-beginning 1)))
+ (setq sw-match nil))))
(and math-on sw-match (setq match sw-match))))
;; Store info, show as message when interactive, and return
_______________________________________________
bug-auctex mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-auctex