From: Lennart Borgman <lennart.borgman@gmail.com>
To: eric@siege-engine.com
Cc: Daniel Colascione <danc@merrillpress.com>,
David Engster <deng@randomsample.de>,
Daniel Colascione <danc@merrillprint.com>,
emacs-devel@gnu.org, Steve Yegge <stevey@google.com>,
Stefan Monnier <monnier@iro.umontreal.ca>,
Deniz Dogan <deniz.a.m.dogan@gmail.com>, Leo <sdl.web@gmail.com>,
Miles Bader <miles@gnu.org>
Subject: Re: "Font-lock is limited to text matching" is a myth
Date: Tue, 11 Aug 2009 21:48:09 +0200 [thread overview]
Message-ID: <e01d8a50908111248y3be3f6baj9f1ecd48f15c1b3c@mail.gmail.com> (raw)
In-Reply-To: <1249955428.29022.186.camel@projectile.siege-engine.com>
On Tue, Aug 11, 2009 at 3:50 AM, Eric M. Ludlam<eric@siege-engine.com> wrote:
> On Tue, 2009-08-11 at 00:19 +0200, Lennart Borgman wrote:
>> On Tue, Aug 11, 2009 at 12:06 AM, Eric M. Ludlam<eric@siege-engine.com> wrote:
>>
>> Hi Eric,
>>
>> > The concept of using the Semantic parser/generator framework for
>> > improving font-locking accuracy has come up many times. No-one to my
>> > knowledge has attempted to mix the two.
>>
>>
>> Maybe that can easier be done if Semantic parser use
>> font-lock/JIT-lock timers and marking to keep track of what need to be
>> reparsed? (It is just a wild idea perhaps.)
>
> I'm not certain of how the font/jit lock works. Semantic works by
> tracking edits (after-change-functions) and then on it's own timer, it
> coalesces the changes into parsable units. It then reparses those
> units.
This is precisely what font/jit lock does too.
More precisely this is done by setting the text property 'fontified to
nil (if I remember correctly). JIT-lock will then pick up this and
refontify those parts.
> Font lock can refontify based on fairly small subsections of a buffer,
> such as a single code line, or a comment section. Semantic's
> subsections are the size of functions, variables, and datatypes (ie, the
> tags it creates.)
Font/jit lock may also need bigger sections. In the case of mumamo it
does, for example. A change like adding a new major mode chunk
boundary may make it necessary to refontify the whole rest of the
buffer.
>> So you do a first pass with coarse parsing and then you look in the
>> sub-sections for details? Is this strictly necessary? I guess you are
>> looking for top level definitions in the first pass?
>>
>> Could that pass have its own state and continue upon demand (when an
>> item is not recognized) or is such a logic impossible?
>
> It could, but I have not done so. Tagging information is not generally
> needed right away, so just waiting for the user to either ask for it, or
> sit idle for a while works pretty well. The overhead of such an
> incremental parser isn't really needed.
The benefits coudl be that Emacs behaved much more smoothly. Both
because the background parsing could be interrupted and restarted
easier and because it could be easier to handle precomutation
(perhaps).
The overhead might perhaps be rather small if you could say "please
give me a JIT framework that computes these values: ... (list of
functions)... and runs according to scheme ...(JIT computation
style)..."? Just loose ideas of course, but...
> The needs between the tagging parser and the font-lock parser are
> different. Font lock needs to colorize arbitrary blocks of text, and a
> tagging parser needs to parse everything, but only needs the data
> periodically.
A very good point that maybe can be translated to strucures in a JIT framework.
> Converting a tagging parser to a colorizing parser would be challenging
> because of these different uses.
They might use similar JIT frameworks but not the same timers (but
maybe cooperating dito).
>> > I would imagine that the parsing engine in Semantic, if it is deemed
>> > critical by the maintainers, will get faster if key components are
>> > integrated into the C code.
>>
>> Is that part stable?
>
> Yes. Not much is going on there.
Stefan seems positive to getting this kind of things into C code. To
me it seems very reasonable too.
>> > Lastly, as David Engster stated, CEDET has decoration tools that
>> > decorate entire tags in some way, such as putting a line on top of
>> > functions. This is a separate decoration activity not related to font
>> > lock, and something font lock would not be able to do reliably.
>>
>> Why not if it asks the parser?
>
> Font lock runs long before the parser bothers trying to catch up. Font
> lock would needs hooks for after the parser runs.
> problems.
Perhaps it can be handled like this:
- The parser puts a tag on the parts where it wants special faces.
- It also sets 'fontified to nil on those regions. This will tell JIT
lock to refontify those parts.
- Then font-lock keywords functions supplied by the parser can set the
actual fontification when called by font/JIT-lock.
This will avoid the problem that the special parser fontification gets
thrown away when scrolling that Joakim mentioned.
> While font lock and semantic share a need for a parsing infrastructure,
> the where/when of the parsing is quite different. It is possible to
> conceptually mix and match the parsers vs the schedulers. In practice,
> the two tools have their own lengthy histories that will make that
> challenging. Before tackling such a project, it would be wise to take
> multi-mode (or similar tool) into account.
Yes.
Thanks for the good explanations.
> Eric
>
next prev parent reply other threads:[~2009-08-11 19:48 UTC|newest]
Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-09 23:34 Why js2-mode in Emacs 23.2? Deniz Dogan
2009-08-09 23:38 ` Lennart Borgman
2009-08-09 23:46 ` Daniel Colascione
2009-08-09 23:50 ` Deniz Dogan
2009-08-09 23:56 ` Lennart Borgman
2009-08-09 23:56 ` Daniel Colascione
2009-08-09 23:55 ` Lennart Borgman
2009-08-09 23:58 ` Daniel Colascione
2009-08-10 0:00 ` Lennart Borgman
2009-08-10 0:06 ` Daniel Colascione
2009-08-10 0:17 ` Lennart Borgman
2009-08-10 0:46 ` Daniel Colascione
2009-08-10 0:55 ` Lennart Borgman
2009-08-10 0:18 ` Leo
2009-08-10 0:49 ` Daniel Colascione
2009-08-10 7:06 ` Carsten Dominik
2009-08-10 8:44 ` Leo
2009-08-10 8:54 ` CHENG Gao
2009-08-10 9:26 ` Leo
2009-08-10 10:22 ` Richard Riley
2009-08-10 15:21 ` eval-after-load not harmful after all (Was: Re: Why js-2mode?) Daniel Colascione
2009-08-10 17:01 ` Drew Adams
2009-08-10 17:21 ` eval-after-load not harmful after all Stefan Monnier
2009-08-11 0:43 ` eval-after-load not harmful after all (Was: Re: Why js-2mode?) Stephen J. Turnbull
2009-08-11 0:46 ` Drew Adams
2009-08-11 14:06 ` Stephen J. Turnbull
2009-08-11 15:08 ` eval-after-load not harmful after all Stefan Monnier
2009-08-16 21:43 ` Leo
2009-08-17 0:34 ` Lennart Borgman
2009-08-17 11:44 ` Leo
2009-08-17 11:55 ` Lennart Borgman
2009-08-17 12:26 ` Leo
2009-08-17 14:40 ` Lennart Borgman
2009-08-11 0:53 ` eval-after-load not harmful after all (Was: Re: Why js-2mode?) Lennart Borgman
2009-08-11 3:06 ` Daniel Colascione
2009-08-11 9:17 ` Leo
2009-08-11 14:37 ` Stephen J. Turnbull
2009-08-10 10:41 ` Why js2-mode in Emacs 23.2? Carsten Dominik
2009-08-10 13:04 ` Leo
2009-08-10 14:55 ` Stefan Monnier
2009-08-11 1:13 ` Glenn Morris
2009-08-11 3:02 ` Daniel Colascione
2009-08-11 4:28 ` Dan Nicolaescu
2009-08-11 4:33 ` Daniel Colascione
2009-08-11 4:39 ` Dan Nicolaescu
2009-08-11 4:45 ` Daniel Colascione
2009-08-11 4:37 ` Glenn Morris
2009-08-10 2:47 ` Stefan Monnier
2009-08-10 2:55 ` Lennart Borgman
2009-08-10 13:12 ` Stefan Monnier
2009-08-10 0:32 ` Leo
2009-08-10 0:48 ` Daniel Colascione
2009-08-10 2:55 ` Stefan Monnier
2009-08-10 3:24 ` Miles Bader
2009-08-10 3:27 ` Lennart Borgman
2009-08-10 3:45 ` Daniel Colascione
2009-08-10 5:18 ` Jason Rumney
2009-08-10 5:51 ` Xah Lee
2009-08-10 6:22 ` Xah Lee
2009-08-10 6:59 ` Miles Bader
2009-08-10 11:01 ` Lennart Borgman
2009-08-10 17:35 ` "Font-lock is limited to text matching" is a myth Daniel Colascione
2009-08-10 18:04 ` Lennart Borgman
2009-08-10 20:42 ` David Engster
2009-08-10 20:51 ` Lennart Borgman
2009-08-10 22:06 ` Eric M. Ludlam
2009-08-10 22:19 ` Lennart Borgman
2009-08-11 1:50 ` Eric M. Ludlam
2009-08-11 6:47 ` Steve Yegge
2009-08-11 9:17 ` Miles Bader
2009-08-11 12:13 ` Daniel Colascione
2009-08-11 14:37 ` Miles Bader
2009-08-11 14:49 ` Lennart Borgman
2009-08-11 14:57 ` Daniel Colascione
2009-08-11 14:53 ` Daniel Colascione
2009-08-11 15:08 ` Lennart Borgman
2009-08-11 15:36 ` Miles Bader
2009-08-11 15:56 ` Stephen J. Turnbull
2009-08-11 15:54 ` Lennart Borgman
2009-08-11 17:00 ` Stephen J. Turnbull
2009-08-11 17:19 ` Lennart Borgman
2009-08-11 15:57 ` Miles Bader
2009-08-11 17:06 ` Stephen J. Turnbull
2009-08-11 14:50 ` Chong Yidong
2009-08-11 15:06 ` Daniel Colascione
2009-08-11 15:11 ` Lennart Borgman
2009-08-11 15:16 ` Daniel Colascione
2009-08-11 15:44 ` Lennart Borgman
2009-08-11 18:04 ` joakim
2009-08-11 18:08 ` Lennart Borgman
2009-08-11 19:12 ` joakim
2009-08-11 17:09 ` Stefan Monnier
2009-08-11 16:04 ` Stefan Monnier
2009-08-11 18:10 ` Edward O'Connor
2009-08-12 1:58 ` Steve Yegge
2009-08-12 13:48 ` Chong Yidong
2009-08-12 16:07 ` Lennart Borgman
2009-08-12 22:08 ` Steve Yegge
2009-08-14 1:22 ` Stefan Monnier
2009-08-12 2:16 ` Eric M. Ludlam
2009-08-12 6:43 ` Miles Bader
2009-08-12 11:28 ` Xah Lee
2010-11-23 14:43 ` Stefan Monnier
2009-08-12 15:21 ` asynchronous parsing (was: "Font-lock is limited to text matching" is a myth) Ted Zlatanov
2009-08-12 17:16 ` asynchronous parsing joakim
2009-08-12 19:39 ` Ted Zlatanov
2009-08-12 20:01 ` joakim
2009-08-13 2:51 ` Stefan Monnier
2009-08-13 14:51 ` Ted Zlatanov
2009-08-11 19:48 ` Lennart Borgman [this message]
2009-08-10 18:47 ` "Font-lock is limited to text matching" is a myth Stefan Monnier
2009-08-10 18:55 ` Lennart Borgman
2009-08-11 3:33 ` Stefan Monnier
2009-08-10 14:49 ` Why js2-mode in Emacs 23.2? Stefan Monnier
2009-08-10 6:46 ` Deniz Dogan
2009-08-10 14:53 ` Stefan Monnier
2009-08-10 14:05 ` Stephen Eilert
2009-08-10 14:37 ` Lennart Borgman
2009-08-10 14:42 ` Deniz Dogan
2009-08-10 19:12 ` Stephen Eilert
2009-08-10 14:41 ` Deniz Dogan
2009-08-10 14:57 ` Lennart Borgman
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=e01d8a50908111248y3be3f6baj9f1ecd48f15c1b3c@mail.gmail.com \
--to=lennart.borgman@gmail.com \
--cc=danc@merrillpress.com \
--cc=danc@merrillprint.com \
--cc=deng@randomsample.de \
--cc=deniz.a.m.dogan@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=eric@siege-engine.com \
--cc=miles@gnu.org \
--cc=monnier@iro.umontreal.ca \
--cc=sdl.web@gmail.com \
--cc=stevey@google.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).