[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: syntax table entries for comments
From: |
Stefan Monnier |
Subject: |
Re: syntax table entries for comments |
Date: |
Wed, 10 Sep 2003 15:04:07 GMT |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 |
>>> (defvar nrx-mode-syntax-table nil
>>> "Syntax table in use in NRX-mode buffers.")
>>
>>> (defun nrx-create-syntax-table ()
>>> (if nrx-mode-syntax-table
>>> ()
>>> (setq nrx-mode-syntax-table (make-syntax-table))
>>> (modify-syntax-entry ?. "." nrx-mode-syntax-table)
>>> (modify-syntax-entry ?- ". 12b" nrx-mode-syntax-table)
>>> (modify-syntax-entry ?/ ". 14" nrx-mode-syntax-table)
>>> (modify-syntax-entry ?* ". 23" nrx-mode-syntax-table)
>>> (modify-syntax-entry ?\n "> b" nrx-mode-syntax-table)
>>> (modify-syntax-entry ?\' "\"" nrx-mode-syntax-table))
>>
>>> (set-syntax-table nrx-mode-syntax-table))
>> Could you tell me the place from which this code was inspired so we can
>> fix it ? It should look like:
>> (defvar nrx-mode-syntax-table
>> (let ((st (make-syntax-table)))
>> (modify-syntax-entry ...)
>> (modify-syntax-entry ...)
>> ...
>> st))
>> and the `set-syntax-table' is commonly done implicitly by
>> `define-derived-mode'.
> I found it via Emacs Wiki. On page
> http://www.emacswiki.org/cgi-bin/wiki/ModeTutorial, they link to the
> following mode tutorial:
> http://two-wugs.net/emacs/mode-tutorial.html
> which I followed and used as an inspiration.
> Could you please enlighten me as to why your way is better? I'm no (e)lisp
> expert, but I'm doing allright with a bit of voodoo programming[1].
Advantages are:
- shorter.
- less memory used since the code that sets up the table can be discarded
after the table is setup, whereas in your case, the function
nrx-create-syntax-table needs to be kept around in case someone wants
to call it.
- no temporary stage where nrx-mode-syntax-table holds a value that is
not a syntax-table (or that is a syntax-table but that is not yet
properly initialized): either it's there and initialized or it's not
there at all.
>>> This works but also renders the combination -* and *- as comment start and
>>> end, which is wrong. Could anyone please tell me what I'm missing?
>> Nothing, really, other than the fact that it's a limitation of current
>> syntax-tables. You can either hack on src/syntax.c to add support for
>> such cases, or use font-lock-syntactic-keywords to recognize `--'
>> and mark it as a comment starter.
> I tried the latter, but then strings within the `--' comment will undo the
> comment highlighting.
I suspect you used font-lock-keywords rather than
font-lock-syntactic-keywords.
> So I'll try to voodoo hack src/syntax.c
That would be wonderful.
Stefan