unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Lennart Borgman (gmail)" <lennart.borgman@gmail.com>
To: emacs-nxml-mode@yahoogroups.com,
	 Daniel Colascione <dan.colascione@gmail.com>
Cc: "Eric M. Ludlam" <eric@siege-engine.com>,
	 Emacs Devel <emacs-devel@gnu.org>
Subject: Re: [patch] use font-lock
Date: Sat, 24 May 2008 00:50:19 +0200	[thread overview]
Message-ID: <48374A2B.1030304@gmail.com> (raw)
In-Reply-To: <200805231824.18563.danc@merrillpress.com>

Daniel Colascione wrote:
> 
> 
> On Friday 23 May 2008, Lennart Borgman (gmail) wrote:
>  > You might wonder how that can be the case. To make it work I implemented
>  > a workaround where I use the parsing capabilities from nxml-mode to
>  > check that the files follows the DTD specified syntax, but syntax
>  > highlighting from another mode (xml-mode/html-mode) that supports
>  > font-lock.
> 
> I saw that you used that approach, and decided to just alter nXML-mode
> instead.
> 
> I don't really understand why nXML was written to not use font-lock in the
> first place. cc-mode had used the complex-matcher approach for a long time,
> portably and with few problems. But from having read the font-lock
> documentation, one wouldn't suppose this kind of power was available. The
> trick of making a matcher that does all the fontification itself and just
> returns 'nil' is not documented. Perhaps it should be.

Do you mean font-lock-fontify-region-function?

>  > There is one very disturbing thing with my solution: I can't stop
>  > nxml-mode from parsing the whole buffer. It parses also those parts
>  > where mumamo has assigned another major mode. (I hoped that someone some
>  > day might have the time and skill to look into this, but I did not have
>  > them.)
> 
>  > Does you solution handle this problem? If it does, then how does it
>  > handle it? Does font-lock-fontify-region-function handle also the
>  > parsing of the xml code? That would be great, but it seems difficult.
> 
> I haven't looked at mumamo mode in detail. How does mumamo isolate major 
> modes
> to particular areas of the buffer? If you're just narrowing the buffer, I
> think going through nXML and removing all the calls to WIDEN should be
> sufficient. (Or replacing them with some kind of mumamo-widen.)

Mumamo now defines what I call "multi major modes". (Previously there 
was a minor mode called mumamo-mode, but that is obsolete.)

Mumamo defines its own font-lock-fontify-region-function that does the 
job. In this function it narrows the buffer to chunks where each chunk 
has its own major mode.

So the main question is: does the parsing happens in the 
font-lock-fontify-region-function that you have defined in nxml-mode? (I 
guess you have defined such a function?)

One thing I think need to be taken care of is nxml-mode starting state 
in chunks handled by mumamo. Is there a way to do that?


> cc-mode also widens the buffer. What's the difference?

Sorry, I do not understand what you mean here.


> I don't use CEDET, but if it's getting into Emacs, I might as well give it
> another whirl. IIRC, CEDET requires a buffer parser to just generate a 
> set of
> tags. What else is required?

I do not know. Maybe this discussion should be carried over to Emacs 
devel which I think Eric Ludlam reads?


>  > BTW, there is a problem with hi-lock. It uses text properties which may
>  > be hidden by overlays. IMO it should use overlays with high priorities.
>  > (That seems to be the easiest solution.)
> 
> IMHO, font-lock itself should use overlays.

That would probably be a performance problem.

> But ignoring that distinction,
> hi-lock dynamically adding font-lock keywords is the right way to go.

Yes, it is very nice.

>  > Genshi was new to me. I will add it to mumamo.el.
>  >
>  > How did you do the integration with xhtml?
> 
> I extended the XHTML schema to support Genshi and XInclude elements and
> attributes; I include the original XHTML schema and augment it.

Thanks, very nice. That mean you can handle <?pyton ... ?> and for 
example py:content="var".

mumamo can help in two ways here:

1) inside <?pyton ... ?> it can use a genshi-mode major mode if there is 
one.

2) inside {% pyton ... %} it can do the same.


> It'd be nice if nXML extended Relax NG to support some kind of schema 
> plugin
> mechanism, basically automating what's in qtmstr-xhtml.rnc: e.g. some 
> way of
> saying "elements ns:a, ns:b, and ns:c from mylanguage.rnc are at block 
> level
> and can contain block-level elements, and ns:d is inline, but can't contain
> any children. Oh, and attributes ns:foo and ns:bar can attach to all
> elements".

Good idea IMO.


> As it is, the best approach for Genshi, IMHO, would be some kind of minor
> mode. This mode would add the appropriate font-lock keywords and generate a
> temporary schema like the one in qtmstr-xhtml.rnc, only pointing to the
> correct xhtml.rnc.

Maybe. But with mumamo it could be a major mode, written with those 
tools that there already are in Emacs.

This could be combined with the schema extending mechanism you suggest.

------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/emacs-nxml-mode/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/emacs-nxml-mode/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:emacs-nxml-mode-digest@yahoogroups.com 
    mailto:emacs-nxml-mode-fullfeatured@yahoogroups.com

<*> To unsubscribe from this group, send an email to:
    emacs-nxml-mode-unsubscribe@yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/



  parent reply	other threads:[~2008-05-23 22:50 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200805231711.30830.danc@merrillpress.com>
2008-05-23 21:52 ` [patch] use font-lock Lennart Borgman (gmail)
2008-05-23 22:24   ` [emacs-nxml-mode] " Daniel Colascione
     [not found]   ` <200805231824.18563.danc@merrillpress.com>
2008-05-23 22:50     ` Lennart Borgman (gmail) [this message]
2008-05-24 15:03       ` Daniel Colascione
2008-05-24 16:57         ` Lennart Borgman (gmail)
2008-05-24  2:39   ` [emacs-nxml-mode] " Stefan Monnier
2008-05-23 22:26 Daniel Colascione
2008-05-24 20:38 ` Stefan Monnier
2008-05-25 20:36   ` Daniel Colascione
2008-05-26 14:52     ` Stefan Monnier
2008-05-27 15:13       ` Daniel Colascione
2008-05-27 15:37         ` Stefan Monnier
2008-05-27 15:45           ` Daniel Colascione
2008-05-27 18:37             ` Stefan Monnier
     [not found]             ` <jwv8wxj8pf9.fsf-monnier+emacs@gnu.org>
2008-06-05 23:07               ` Daniel Colascione
2008-06-05 23:30                 ` Lennart Borgman (gmail)
2008-06-06  7:01                 ` Stefan Monnier
2008-06-06  7:24                   ` Lennart Borgman (gmail)
2008-06-06  7:59                     ` Stefan Monnier
2008-06-06  8:09                       ` Lennart Borgman (gmail)
2008-06-06 10:09                         ` Jason Rumney
2008-06-06 14:23                         ` Chong Yidong
2008-06-06 19:04                       ` Richard M Stallman
2008-06-06 16:25                   ` Michael Olson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48374A2B.1030304@gmail.com \
    --to=lennart.borgman@gmail.com \
    --cc=dan.colascione@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=emacs-nxml-mode@yahoogroups.com \
    --cc=eric@siege-engine.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).