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

[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


reply via email to

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