From: Alan Mackenzie <acm@muc.de>
To: Dmitry Gutov <dgutov@yandex.ru>
Cc: Noam Postavsky <npostavs@users.sourceforge.net>, emacs-devel@gnu.org
Subject: Re: font-lock-syntactic-keywords obsolet?
Date: Mon, 20 Jun 2016 10:58:50 +0000 [thread overview]
Message-ID: <20160620105850.GB3166@acm.fritz.box> (raw)
In-Reply-To: <751427e7-f305-7790-99f5-dea230d8e6c4@yandex.ru>
Hello, Dmitry.
On Sun, Jun 19, 2016 at 08:55:52PM +0300, Dmitry Gutov wrote:
> On 06/19/2016 08:15 PM, Alan Mackenzie wrote:
[ .... ]
> > Consider the following non-unusual case. In C++ Mode we have nested
> > template delimiters, thusly:
> > A B C D
> > < < > >
> > They each have parentheses syntax-table text properties such that A
> > matches D and B matches C. You can, for example put point at A, do
> > C-M-n, and you will get to after D.
> > Suppose you delete the < at A, and move point to D. What will now
> > happen if you do C-M-p?
> Scan error?
No. In the current C++ Mode, after-change functions remove the
syntax-table text property from D, ensuring template delimiters balance
always.
> > With a syntax-propertize-function instead of the current
> > before/after-change-functions, I simply can't picture what would happen.
> The same.
> a) By the time you move point to D, font-lock has most likely run, ....
only when font-lock is enabled. What about when it's not enabled?
You seem to be advocating that CC Mode should lose its deterministic text
property handling and replace it by a "hope it's OK" non-deterministic
handling. You can understand me not wanting to do this.
> .... and the current visible area of the buffer is already
> syntax-propertized (this is how this problem was solved in Emacs <25).
There's no guarantee that the matching template delimiter for any given
delimiter is on the screen. It might be after the screen, it might be
before it.
> b) In addition to that, scan_lists now applies syntax-table properties
> by calling syntax-propertize-function
Yuck! That's the sort of ugly workaround that becomes needed when things
aren't properly thought through from the beginning. In a proper design,
the low level routines in syntax.c wouldn't even know about s-p-function,
and nor should they.
> > Why do we need such a general abstraction, anyway?
> > before/after-change-functions already form a good scheme for applying
> > and removing these properties.
> Because just by the virtue of having before/after-change-functions, we
> can [can't :-] be sure that a given position is syntax-propertized.
In CC Mode that certainty exists. That certainty exists if the
before/after-change-functions are implemented properly.
> The only way we could, without adding additional abstraction, is by
> agreeing that all buffers must be syntax-propertized in their entirety
> after before/after-change-functions run. And that is just too damn wasteful.
How is it wasteful? If the syntax-table properties are all "local", it's
actually an efficient way to do things. You simply have to extend the
(beg end) region to that which might contain pertinent characters, remove
s-t properties in a before-change function, and apply them in an
after-change function. If the s-t props aren't "local", then maybe the
syntax-propertize-function approach is a good one. I haven't had any
reason to think this through. Somebody (either you or Stefan) opined
that ALL s-t properties are, in practice, "local".
> > Changing CC Mode to use syntax-propertize-function would require a
> > substantial amount of design work, assuming such were possible. There
> > doesn't seem to be a good reason to do this.
> One reason would be for you to get a handle on what it does, and the
> design benefit that follow.
The current CC Mode before/after-change-function design has been
carefully thought out. I'm not convinced that's the case for the
syntax-propertize-function mechanism.
> Maybe you would discover an even better design along the way, who
> knows.
Maybe. But it's not as though I'm short of things to do.
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2016-06-20 10:58 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-16 10:18 font-lock-syntactic-keywords obsolet? Andreas Röhler
2016-06-17 22:13 ` Stefan Monnier
2016-06-18 7:03 ` Andreas Röhler
2016-06-18 15:07 ` Noam Postavsky
2016-06-18 17:12 ` Alan Mackenzie
2016-06-18 18:13 ` Stefan Monnier
2016-06-18 19:41 ` Noam Postavsky
2016-06-19 7:12 ` Andreas Röhler
2016-06-19 13:21 ` Noam Postavsky
2016-06-19 14:03 ` Andreas Röhler
2016-06-19 14:36 ` Stefan Monnier
2016-06-19 15:12 ` Alan Mackenzie
2016-06-19 15:18 ` Dmitry Gutov
2016-06-19 15:26 ` Alan Mackenzie
2016-06-19 15:52 ` Stefan Monnier
2016-06-19 15:53 ` Dmitry Gutov
2016-06-20 2:58 ` Stefan Monnier
2016-06-20 11:57 ` Alan Mackenzie
2016-06-20 13:37 ` Stefan Monnier
2016-06-20 13:50 ` Dmitry Gutov
2016-06-20 16:00 ` Andreas Röhler
2016-06-20 18:15 ` Dmitry Gutov
2016-06-20 23:33 ` John Wiegley
2016-06-20 18:55 ` Alan Mackenzie
2016-06-20 20:22 ` Andreas Röhler
2016-06-19 15:27 ` Andreas Röhler
2016-06-19 15:51 ` Stefan Monnier
2016-06-19 12:31 ` Dmitry Gutov
2016-06-19 13:31 ` Alan Mackenzie
2016-06-19 13:48 ` Dmitry Gutov
2016-06-19 14:59 ` Alan Mackenzie
2016-06-19 15:07 ` Dmitry Gutov
2016-06-19 15:18 ` Alan Mackenzie
2016-06-19 15:22 ` Dmitry Gutov
2016-06-19 15:34 ` Alan Mackenzie
2016-06-19 15:50 ` Dmitry Gutov
2016-06-19 17:15 ` Alan Mackenzie
2016-06-19 17:55 ` Dmitry Gutov
2016-06-19 22:20 ` Dmitry Gutov
2016-06-20 10:22 ` Alan Mackenzie
2016-06-20 11:50 ` Dmitry Gutov
2016-06-20 14:50 ` Alan Mackenzie
2016-06-20 15:02 ` Dmitry Gutov
2016-06-20 13:39 ` Stefan Monnier
2016-06-20 10:58 ` Alan Mackenzie [this message]
2016-06-20 11:12 ` Andreas Röhler
2016-06-20 12:15 ` Dmitry Gutov
2016-06-20 14:52 ` Noam Postavsky
2016-06-20 15:57 ` Dmitry Gutov
2016-06-20 17:23 ` Noam Postavsky
2016-06-20 18:58 ` Dmitry Gutov
2016-06-20 15:25 ` Alan Mackenzie
2016-06-20 16:45 ` Dmitry Gutov
2016-06-20 18:12 ` Alan Mackenzie
2016-06-20 19:15 ` Dmitry Gutov
2016-06-20 20:08 ` Alan Mackenzie
2016-06-20 20:32 ` Dmitry Gutov
2016-06-21 14:40 ` Alan Mackenzie
2016-06-21 21:06 ` Dmitry Gutov
2016-06-21 23:50 ` Dmitry Gutov
2016-06-23 16:30 ` Alan Mackenzie
2016-06-27 11:48 ` Alan Mackenzie
2016-06-29 0:30 ` Dmitry Gutov
2016-06-30 9:52 ` Alan Mackenzie
2016-07-10 2:01 ` Dmitry Gutov
2016-07-10 22:11 ` Alan Mackenzie
2016-07-11 0:06 ` Dmitry Gutov
2016-07-11 17:20 ` Alan Mackenzie
2016-07-11 22:44 ` Dmitry Gutov
2016-06-20 22:45 ` John Wiegley
2016-06-20 23:30 ` Dmitry Gutov
2016-06-20 23:56 ` John Wiegley
2016-06-21 0:26 ` John Wiegley
2016-06-21 15:26 ` Alan Mackenzie
2016-06-21 16:09 ` Dmitry Gutov
2016-06-21 18:34 ` Andreas Röhler
2016-06-21 18:42 ` John Wiegley
2016-06-21 18:52 ` Eli Zaretskii
2016-06-27 11:50 ` Andreas Röhler
2016-06-21 19:23 ` Andreas Röhler
2016-06-21 18:49 ` Eli Zaretskii
2016-06-21 21:05 ` Alan Mackenzie
2016-06-21 21:17 ` Dmitry Gutov
2016-06-21 16:28 ` Dmitry Gutov
2016-06-20 0:06 ` Stefan Monnier
2016-06-20 11:03 ` Alan Mackenzie
2016-06-20 13:53 ` Stefan Monnier
2016-06-20 4:33 ` Stefan Monnier
2016-06-20 5:05 ` John Wiegley
2016-06-19 23:59 ` Stefan Monnier
2016-06-20 3:14 ` Stefan Monnier
2016-06-20 3:20 ` Dmitry Gutov
2016-06-20 3:47 ` Stefan Monnier
2016-06-20 6:40 ` Andreas Röhler
2016-06-20 3:08 ` Stefan Monnier
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160620105850.GB3166@acm.fritz.box \
--to=acm@muc.de \
--cc=dgutov@yandex.ru \
--cc=emacs-devel@gnu.org \
--cc=npostavs@users.sourceforge.net \
/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 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.