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

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

Re: define multi-line comments


From: David Hansen
Subject: Re: define multi-line comments
Date: Sun, 22 Jun 2008 12:15:53 +0200
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.0.60 (gnu/linux)

On Sun, 22 Jun 2008 09:51:02 +0200 henry atting wrote:

> David Hansen wrote:
>
>> On Sat, 21 Jun 2008 10:32:39 +0200 henry atting wrote:
>>
>>> David Hansen wrote:
>>>
>>>> On Fri, 20 Jun 2008 16:46:37 +0200 henry atting wrote:
>>>>
>>>>> I have my own text mode (derived from text-mode), which defines some
>>>>> syntax highlighting. Defining keywords is no problem but as far as I see
>>>>> keywords don't work on serveral lines, e.g. this
>>>>>
>>>>>          (list "\".*\"" 0 'font-lock-variable-name-face t) 
>>>>>

I should have noted that before...  If that's the only case, you can
simply modify the syntax of a `"' (lookup `syntax tables' in the manual)
to highlight the region as a string.  I don't think it's possible to
change the face here.

>>> In the meantime I found a way to do it. I looked into lua-mode.el where
>>> mulit-line comments work and changed it according to my needs:
>>>
>>>         (list
>>>        "\\(?:^\\|[^-]\\)\\(\"\\(=*\\)\\(?:.\\|\n\\)*?\"\\)"
>>>        '(1 'font-lock-string-face t))
>>
>> Setting `font-lock-multiline' to `t' and using regexps that spawn more
>> than one line works "a bit".  If it's not to important to highlight
>> always correctly and if the regexp "usually" matches only one line this
>> is an option as well.
>>
>>>
>>>> But in many circumstances you can use `font-lock-syntactic-keywords' to
>>>> make some region a "string" or "comment" and then use
>>>> `font-lock-syntactic-face-function' to give it another face.
>>>
>>> Now I will take a look at this. Thanks :)
>>
>> Someone should tell the lua-mode developers about it...  This works
>> perfectly well if you have one region and one face for the whole region.
>> But it's not an option for regions with multiple faces (like e.g. long
>> function declarations in C).
>
> Because its only purpose is to highlight direct speech (in my
> text-mode) it actually works very well.

Are you talking about setting `font-lock-multiline' to `t' and just
using regexps that may spawn several lines?  If it works for you just
use it, it will save a lot of trouble.  But be warned, it's not 100%
accurate.

> Mmh, with `font-lock-syntactic-keywords' I couldn't get very far. I
> found this in the manual:

If you describe your problems in a bit more detail someone might be able
to help.

> ,----
> | — Variable: font-lock-syntactic-face-function
> | [...]
> | This can be used to highlighting different kinds of strings or comments
> | differently. It is also sometimes abused together with
> | font-lock-syntactic-keywords to highlight constructs that span multiple
> | lines, but this is too esoteric to document here.
> `----
>
> which is not too encouraging. 

Ignore the "esoteric" comment.  Just pretend your constructs are
"strings of a programming language".  It will work.  If you run into
problems that `parse-partial-sexp' behaves weird, play around with
`parse-sexp-lookup-properties'.  But i recommend to not care about this
right now.

If you grep the emacs sources for `syntactic-keywords' you'll find some
examples (every language that has comments or strings that can't be
described via syntax tables, e.g. html).

David





reply via email to

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