all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* How to make font lock work with comments?
@ 2010-12-29  9:50 rusi
  2010-12-30  8:43 ` Elena
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: rusi @ 2010-12-29  9:50 UTC (permalink / raw)
  To: help-gnu-emacs

Im hacking on an apl mode


 (let ((st (make-syntax-table))
        (comment-char ?\x235d))
:
:
 (modify-syntax-entry comment-char "<" st)

This char shows as follows (Dont know if it shows elsewhere..)

⍝ A comment

When I put point on the char and call describe-char I get

---------------------------------
        character: ⍝ (9053, #o21535, #x235d)
preferred charset: unicode (Unicode (ISO10646))
       code point: 0x235D
           syntax: < 	which means: comment
         category: .:Base
         to input: type "{upshoe-jot}" or "{lamp}" or "{comment}" or
"{@}" with apl-ascii
      buffer code: #xE2 #x8D #x9D
        file code: not encodable by coding system iso-latin-1-unix
          display: by this font (glyph code)
    xft:-unknown-unifont-normal-normal-normal-*-12-*-*-*-d-0-
iso10646-1 (#x2359)
------------------------------

In other words emacs sees this as a comment-type char (similar to what
it says for semicolon in elisp buffers

And yet in an elisp buffer the ; to EOL is red
but here it is not.

Any clues?


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: How to make font lock work with comments?
  2010-12-29  9:50 How to make font lock work with comments? rusi
@ 2010-12-30  8:43 ` Elena
  2010-12-30 21:27   ` Tim X
  2010-12-30 14:09 ` Pascal J. Bourguignon
  2011-01-03  4:29 ` Stefan Monnier
  2 siblings, 1 reply; 8+ messages in thread
From: Elena @ 2010-12-30  8:43 UTC (permalink / raw)
  To: help-gnu-emacs

On Dec 29, 9:50 am, rusi <rustompm...@gmail.com> wrote:
> Im hacking on an apl mode
>
>  (let ((st (make-syntax-table))
>         (comment-char ?\x235d))
> :
> :
>  (modify-syntax-entry comment-char "<" st)
>
> This char shows as follows (Dont know if it shows elsewhere..)
>
> ⍝ A comment
>
> When I put point on the char and call describe-char I get
>
> ---------------------------------
>         character: ⍝ (9053, #o21535, #x235d)
> preferred charset: unicode (Unicode (ISO10646))
>        code point: 0x235D
>            syntax: <         which means: comment
>          category: .:Base
>          to input: type "{upshoe-jot}" or "{lamp}" or "{comment}" or
> "{@}" with apl-ascii
>       buffer code: #xE2 #x8D #x9D
>         file code: not encodable by coding system iso-latin-1-unix
>           display: by this font (glyph code)
>     xft:-unknown-unifont-normal-normal-normal-*-12-*-*-*-d-0-
> iso10646-1 (#x2359)
> ------------------------------
>
> In other words emacs sees this as a comment-type char (similar to what
> it says for semicolon in elisp buffers
>
> And yet in an elisp buffer the ; to EOL is red
> but here it is not.
>
> Any clues?

Syntax and font-locking are two different things and are handled
separately.  Commands look at syntax, humans look at font-locking.

Try typing the string ";" (quotes included) into an Elisp buffer and
then calling `describe-char' on the semicolon: Emacs will tell you the
semicolon is a comment char, yet it will be highlighting it as string.

Check out `font-lock-add-keywords'.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: How to make font lock work with comments?
  2010-12-29  9:50 How to make font lock work with comments? rusi
  2010-12-30  8:43 ` Elena
@ 2010-12-30 14:09 ` Pascal J. Bourguignon
  2010-12-30 17:28   ` rusi
  2011-01-03  4:28   ` Stefan Monnier
  2011-01-03  4:29 ` Stefan Monnier
  2 siblings, 2 replies; 8+ messages in thread
From: Pascal J. Bourguignon @ 2010-12-30 14:09 UTC (permalink / raw)
  To: help-gnu-emacs

rusi <rustompmody@gmail.com> writes:

> Im hacking on an apl mode
> In other words emacs sees this as a comment-type char (similar to what
> it says for semicolon in elisp buffers
>
> And yet in an elisp buffer the ; to EOL is red
> but here it is not.

Font locking is a tricky matter. 

(font-lock-add-keywords nil
    '(("⍝.*"                          0 font-lock-comment-face prepend)
     ("[^\\]\"\\([^\"\\]*\\|\\.\\)\"" 0 font-lock-string-face  prepend)))

The main problem is that it uses regular expressions to find the
"keywords", but you want syntax coloring.  However, there's a way to use
it for syntax coloring, since instead of a regular expression, you can
use a function here, which will have to set the "matched regions".

For example, for an assembler, I wrote a function to parse
(syntactically) an assembler line, and matching the fields.  It is
configured with font-lock-add-keywords as:

 (font-lock-add-keywords 
   nil
   (list
    (list
     (function search-asm7090-fields)
     '(1 font-lock-function-name-face)       ; labels
     '(2 font-lock-keyword-face)             ; operation codes
     '(3 font-lock-reference-face)           ; arguments
     '(4 font-lock-comment-face)             ; comments
     '(5 font-lock-preprocessor-face)        ; ibsys
     '(6 font-lock-type-face)                ; cols 72-80
     )))

Of course, you can also implement buffer-wide syntax analysis, and have
these functions just report the findings.

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: How to make font lock work with comments?
  2010-12-30 14:09 ` Pascal J. Bourguignon
@ 2010-12-30 17:28   ` rusi
  2010-12-30 18:35     ` Pascal J. Bourguignon
  2011-01-03  4:28   ` Stefan Monnier
  1 sibling, 1 reply; 8+ messages in thread
From: rusi @ 2010-12-30 17:28 UTC (permalink / raw)
  To: help-gnu-emacs

On Dec 30, 7:09 pm, "Pascal J. Bourguignon" <p...@informatimago.com>
wrote:
> rusi <rustompm...@gmail.com> writes:
> > Im hacking on an apl mode
> > In other words emacs sees this as a comment-type char (similar to what
> > it says for semicolon in elisp buffers
>
> > And yet in an elisp buffer the ; to EOL is red
> > but here it is not.
>
> Font locking is a tricky matter.
>
> (font-lock-add-keywords nil
>     '(("⍝.*"                          0 font-lock-comment-face prepend)
>      ("[^\\]\"\\([^\"\\]*\\|\\.\\)\"" 0 font-lock-string-face  prepend)))

Thanks Pascal.  I gave this (\x235 is that char) and it works
[Else I get some unicode-related messages when I try ot save the el
file]

(font-lock-add-keywords 'inferior-apl-mode
    '(("\x235d.*"     0 font-lock-comment-face prepend)))

I guess the second line is for strings?
Where do I get all the (typical) faces that should be set up for a
progmode?
Ive been trying to copy stuff from scheme.el -- is there a better
model?

>
> The main problem is that it uses regular expressions to find the
> "keywords", but you want syntax coloring.  However, there's a way to use
> it for syntax coloring, since instead of a regular expression, you can
> use a function here, which will have to set the "matched regions".
>
> For example, for an assembler, I wrote a function to parse
> (syntactically) an assembler line, and matching the fields.  It is
> configured with font-lock-add-keywords as:
>
>  (font-lock-add-keywords
>    nil
>    (list
>     (list
>      (function search-asm7090-fields)
>      '(1 font-lock-function-name-face)       ; labels
>      '(2 font-lock-keyword-face)             ; operation codes
>      '(3 font-lock-reference-face)           ; arguments
>      '(4 font-lock-comment-face)             ; comments
>      '(5 font-lock-preprocessor-face)        ; ibsys
>      '(6 font-lock-type-face)                ; cols 72-80
>      )))


I dont think I really understand this...  In any case I guess I dont
need much parsing (for apl)


>
> Of course, you can also implement buffer-wide syntax analysis, and have
> these functions just report the findings.
>
> --
> __Pascal Bourguignon__                    http://www.informatimago.com/
> A bad day in () is better than a good day in {}.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: How to make font lock work with comments?
  2010-12-30 17:28   ` rusi
@ 2010-12-30 18:35     ` Pascal J. Bourguignon
  0 siblings, 0 replies; 8+ messages in thread
From: Pascal J. Bourguignon @ 2010-12-30 18:35 UTC (permalink / raw)
  To: help-gnu-emacs

rusi <rustompmody@gmail.com> writes:

> On Dec 30, 7:09 pm, "Pascal J. Bourguignon" <p...@informatimago.com>
> wrote:
>> rusi <rustompm...@gmail.com> writes:
>> > Im hacking on an apl mode
>> > In other words emacs sees this as a comment-type char (similar to what
>> > it says for semicolon in elisp buffers
>>
>> > And yet in an elisp buffer the ; to EOL is red
>> > but here it is not.
>>
>> Font locking is a tricky matter.
>>
>> (font-lock-add-keywords nil
>>     '(("⍝.*"                          0 font-lock-comment-face prepend)
>>      ("[^\\]\"\\([^\"\\]*\\|\\.\\)\"" 0 font-lock-string-face  prepend)))
>
> Thanks Pascal.  I gave this (\x235 is that char) and it works

\x235d actually.

> [Else I get some unicode-related messages when I try ot save the el
> file]

I save my files encoded in utf-8.  To be sure, you can add on the first
(or second) line a comment containing "-*- coding:utf-8 -*-".
See File Local Variables in emacs documentation.



> (font-lock-add-keywords 'inferior-apl-mode
>     '(("\x235d.*"     0 font-lock-comment-face prepend)))
>
> I guess the second line is for strings?

Yes.  I wanted to avoid strings containing that character to be colorized
as comments.  The order in font-lock-keywords is important.


> Where do I get all the (typical) faces that should be set up for a
> progmode?

One way to find all the existing faces is to type:

M-x customize-face RET TAB

You can use one of the "standard" font-lock-*-face faces, or you can
also create apl specific faces.


> Ive been trying to copy stuff from scheme.el -- is there a better
> model?


>> The main problem is that it uses regular expressions to find the
>> "keywords", but you want syntax coloring.  However, there's a way to use
>> it for syntax coloring, since instead of a regular expression, you can
>> use a function here, which will have to set the "matched regions".
>>
>> For example, for an assembler, I wrote a function to parse
>> (syntactically) an assembler line, and matching the fields.  It is
>> configured with font-lock-add-keywords as:
>>
>>  (font-lock-add-keywords
>>    nil
>>    (list
>>     (list
>>      (function search-asm7090-fields)
>>      '(1 font-lock-function-name-face)       ; labels
>>      '(2 font-lock-keyword-face)             ; operation codes
>>      '(3 font-lock-reference-face)           ; arguments
>>      '(4 font-lock-comment-face)             ; comments
>>      '(5 font-lock-preprocessor-face)        ; ibsys
>>      '(6 font-lock-type-face)                ; cols 72-80
>>      )))
>
>
> I dont think I really understand this...  

Check the documentation of the function font-lock-add-keywords:
      C-h f font-lock-add-keywords RET
and the variable font-lock-keywords:
      C-h v font-lock-keywords RET

The numbers refers to the regular expression groups.

For example, if you have a regexpp that matches three different parts,
identified by three regexp groups, you can colorize them differently
with:

(font-lock-add-keywords nil
    '("\\(procedure\\) +\\([A-Za-z0-9]+\\) *(\\(.*\\));"
       (1 font-lock-keyword-face)
       (2 font-lock-function-name-face)
       (3 font-lock-type-face)))


> In any case I guess I dont need much parsing (for apl)

Right.

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: How to make font lock work with comments?
  2010-12-30  8:43 ` Elena
@ 2010-12-30 21:27   ` Tim X
  0 siblings, 0 replies; 8+ messages in thread
From: Tim X @ 2010-12-30 21:27 UTC (permalink / raw)
  To: help-gnu-emacs

Elena <egarrulo@gmail.com> writes:

> On Dec 29, 9:50 am, rusi <rustompm...@gmail.com> wrote:
>> Im hacking on an apl mode
>>
>>  (let ((st (make-syntax-table))
>>         (comment-char ?\x235d))
>> :
>> :
>>  (modify-syntax-entry comment-char "<" st)
>>
>> This char shows as follows (Dont know if it shows elsewhere..)
>>
>> ⍝ A comment
>>
>> When I put point on the char and call describe-char I get
>>
>> ---------------------------------
>>         character: ⍝ (9053, #o21535, #x235d)
>> preferred charset: unicode (Unicode (ISO10646))
>>        code point: 0x235D
>>            syntax: <         which means: comment
>>          category: .:Base
>>          to input: type "{upshoe-jot}" or "{lamp}" or "{comment}" or
>> "{@}" with apl-ascii
>>       buffer code: #xE2 #x8D #x9D
>>         file code: not encodable by coding system iso-latin-1-unix
>>           display: by this font (glyph code)
>>     xft:-unknown-unifont-normal-normal-normal-*-12-*-*-*-d-0-
>> iso10646-1 (#x2359)
>> ------------------------------
>>
>> In other words emacs sees this as a comment-type char (similar to what
>> it says for semicolon in elisp buffers
>>
>> And yet in an elisp buffer the ; to EOL is red
>> but here it is not.
>>
>> Any clues?
>
> Syntax and font-locking are two different things and are handled
> separately.  Commands look at syntax, humans look at font-locking.
>
> Try typing the string ";" (quotes included) into an Elisp buffer and
> then calling `describe-char' on the semicolon: Emacs will tell you the
> semicolon is a comment char, yet it will be highlighting it as string.
>
> Check out `font-lock-add-keywords'.

The two are not as seperate as implied. The font-lock system can/does
use the syntax table, primarily for comments and strings. See the
section Syntactic Font Lock in the elisp manual (section 23.6.8).

Also note that the development version of Emacs has some changes in this
area i.e. from the NEWS file

,----
| ** New variable syntax-propertize-function to set syntax-table properties.
| Replaces font-lock-syntactic-keywords which are now obsolete.
| This allows syntax-table properties to be set independently from font-lock:
| just call syntax-propertize to make sure the text is propertized.
| Together with this new variable come a new hook
| syntax-propertize-extend-region-functions, as well as two helper functions:
| syntax-propertize-via-font-lock to reuse old font-lock-syntactic-keywords
| as-is; and syntax-propertize-rules which provides a new way to specify
| syntactic rules.
`----

Tim

-- 
tcross (at) rapttech dot com dot au


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: How to make font lock work with comments?
  2010-12-30 14:09 ` Pascal J. Bourguignon
  2010-12-30 17:28   ` rusi
@ 2011-01-03  4:28   ` Stefan Monnier
  1 sibling, 0 replies; 8+ messages in thread
From: Stefan Monnier @ 2011-01-03  4:28 UTC (permalink / raw)
  To: help-gnu-emacs

> Font locking is a tricky matter. 

> (font-lock-add-keywords nil
>     '(("⍝.*"                          0 font-lock-comment-face prepend)
>      ("[^\\]\"\\([^\"\\]*\\|\\.\\)\"" 0 font-lock-string-face  prepend)))

Bad idea: font-lock normally uses syntax-tables for comments and
strings, so unless you *really* can't make it work with syntax-table,
you shouldn't do it via font-lock-keywords.


        Stefan


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: How to make font lock work with comments?
  2010-12-29  9:50 How to make font lock work with comments? rusi
  2010-12-30  8:43 ` Elena
  2010-12-30 14:09 ` Pascal J. Bourguignon
@ 2011-01-03  4:29 ` Stefan Monnier
  2 siblings, 0 replies; 8+ messages in thread
From: Stefan Monnier @ 2011-01-03  4:29 UTC (permalink / raw)
  To: help-gnu-emacs

> Im hacking on an apl mode
>  (let ((st (make-syntax-table))
>         (comment-char ?\x235d))
> :
> :
>  (modify-syntax-entry comment-char "<" st)

> In other words emacs sees this as a comment-type char (similar to what
> it says for semicolon in elisp buffers

> And yet in an elisp buffer the ; to EOL is red
> but here it is not.

> Any clues?

How do you setup font-lock-defaults?  I.e. is the KEYWORDS-ONLY entry
set to t by any chance?


        Stefan


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-01-03  4:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-29  9:50 How to make font lock work with comments? rusi
2010-12-30  8:43 ` Elena
2010-12-30 21:27   ` Tim X
2010-12-30 14:09 ` Pascal J. Bourguignon
2010-12-30 17:28   ` rusi
2010-12-30 18:35     ` Pascal J. Bourguignon
2011-01-03  4:28   ` Stefan Monnier
2011-01-03  4:29 ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.