help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: Font-lock of comments using comment tokens, does it work?


From: Björn Lindqvist
Subject: Re: Font-lock of comments using comment tokens, does it work?
Date: Fri, 5 Jun 2015 05:29:36 +0200

2015-06-05 0:11 GMT+02:00 Stefan Monnier <monnier@iro.umontreal.ca>:
>>> Also, as Emacs maintainer I have enough experience/knowledge to fix
>>> most users's problems, but if I do that I'll just end up with more
>>> users with new problems to fix.  So instead I'm better off trying to
>>> train them so they can fix their problems themselves and even help me
>>> improve Emacs.
>>>> I've tried a dozen different permutations of the regexp and none of
>>>> them produces the desired result.
>>> What have you tried?  What/where were the undesired results?
>
>> ("[a-zA-Z0-9_]\\(! \\) " (1 "_")))
>
> IIUC you want all "!" that are surrounded by spaces to be treated as
> comment starters.

No. I want two strings, FOO and BAR (or ! doesn't matter, same
principle) to start comments iff they are separate tokens. Look at my
examples if the definition isn't so precise. FOO written at the top of
the buffer and followed by a newline would therefore start a comment.

> The above regexp does part of the work, but only does it for those "!"
> which are preceded by a latin letter or a number and are followed by
> a space.  E.g. it will fail on those "!" which don't have a space afterwards.
>
>> ("\\(!\\)[a-zA-Z0-9_]" (1 "_")))
>
> This one will fail on those "!" which are followed with a letter that's
> neither a space nor a latin letter nor a number.  And it will fail on
> those "!" which are followed by a space but are not preceded by a space.
>
> To me, the translation into regexp of «all "!" which are not surrounded
> by spaces» would look like "[^ ]![^ ]".  Have you tried something like
> that?

That turns the comment face of if the ! is in the middle, but not if
it prefixes or suffixes the token. abcFOO is wrongly interpreted as a
comment starter.

> Also it's likely that " !! " would also start
> a comment, so "followed by a space" is too strict as well.  But then,
> I don't know if " !!a" would be treated as starting a comment.
> IOW, maybe you'll want something like "[^ \n\t]\\(!+\\)[^
> \t\n]" instead.

No. In "!!" and "!!a" the comment token is not separate, so no comment.

> Yet another thing: if you have trouble catching all cases with a single
> regexp, you can use more rules, as in
>
>    (syntax-propertize-rules
>     ("[a-zA-Z0-9_]\\(! \\) " (1 "_"))
>     ("\\(!\\)[a-zA-Z0-9_]" (1 "_")))

It still messes up the comment font-locking. BTW I've noticed that if
the regexp is "test\\(!\\)" emacs correctly does not use comment face
on "test!". But if it is "\\(!\\)test" then "!test" is still seen as a
comment. That is inconsistent with what you have explained and the
elisp manual. So I think it is a bug.


-- 
mvh/best regards Björn Lindqvist



reply via email to

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