Subject: bug#19281: 11.86; environment update fails when environment name contains \

From: Tassilo Horn <[email-masked]>
Date: Wed, 10 Dec 2014 08:38:04 +0100

Mosè Giordano <[email-masked]> writes:

Hi!

> 2014-12-09 10:34 GMT+01:00 Tassilo Horn <[email-masked]>:
>>> Or matching everything between the opening and the closing brace
>>> (allowing at least one level of braces)?
>>
>> Either that, or we could also rely on syntax tables.  I.e., since
>> `LaTeX-find-matching-end' already brings us to the end of the
>> environment name,
>>
>>   (let ((end (point)))
>>     (forward-char)
>>     (backward-sexp)
>>     (forward-char)
>>     (buffer-substring-no-properties (point) end))
>>
>> gives us the environment name.
>
> Good idea, except that `LaTeX-find-matching-end' fails to find the
> closing brace of \end when the environment name is a macro with
> arguments.

Ah, indeed.  During my testing it always stopped at
\end{\whatever{foo}|} with | being point, so I assumed that's where it's
supposed to stop, i.e., right after the environment name, not right
after the environment.

I guess it's better to also test the simple cases, not only the complex
ones. ;-)

> The attached patch should fix this problem.
> `LaTeX-environment-name-regexp' needs to be a function because if it
> were a variable it would always keep the original value, also in
> buffers with different values for `TeX-grop' and `TeX-grcl' (or not?).

Correct.  Well, it could also be a variable that's initialized in
`LaTeX-common-initialization' or so after a call to
`hack-local-variables' to apply file local variables first.  But IMO
it's better to have it as a function.

> Probably `LaTeX-modify-environment' can be simplified following your
> suggestion,

On a second thought, the syntax-table approach will fail in case the
environment name is something unbalanced like \foo[{] which is unlikely
but possible.  So better stick to the regexp-search.

> the patch sketches an idea how to fix `LaTeX-find-matching-end', but
> can be improved.

Looks good to me.

Bye,
Tassilo