all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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).



  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.