emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Writing syntax-propertize-function for strings in code in strings, e


From: Dmitry Gutov
Subject: Re: Writing syntax-propertize-function for strings in code in strings, etc
Date: Fri, 26 Oct 2012 23:18:10 +0400
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20121010 Thunderbird/16.0.1

On 26.10.2012 20:19, Stefan Monnier wrote:
I think the better approach is to extend syntax.c with such a notion of
"syntax within strings".  This could hopefully be used for:
- Strings within strings (e.g. Postscript nested strings).
- Comments within strings (I think some regexps allow comments).
- Code within strings (as here and in shell scripts).
I'm not sure what that would look like concretely.  Maybe a new string
quote syntax which specifies a syntax-table to use within the string?
In the current case, the syntactic meanings of characters are the same as
outside the string, except a certain character should end the "inner" region
and return the state after it to "inside string" (*).

Right, that's the "code within string" case, where you just need one
char to mean "pop last state".

Or that last character's text would just be assigned a class from the syntax-propertize-function, no different syntax table required.
Not sure how useful would the first option be.

Maybe just two new classes, similar to open and close parenthesis (to
support nesting)?

Yes, one "push <inner-syntax-table>" and one "pop".

So, I don't see the usefulness of the <inner-syntax-table> value in the simple case of embedding code in the same language.

Unless we're doing something like the "multiple-modes" use case, which we discussed in another thread. This looks like a more general solution.

Of course, this is fine for parse-partial-sexp, but it's a different
matter for backward-sexp, where the "pop" would also need to know the
<inner-syntax-table>.

Maybe in the latter case the scanning function, when encountering the "pop" syntax property, would just skip ahead until it finds the corresponding "push"?
Unless we want to support intersecting subregions, like ([{])}.

parse-partial-sexp will probably need to keep some sort of stack for
string-related data, so that when we're after the end of an "inner" region,
we could find out what is the outer string's type and where it started.
And when inside the inner region, the position of its start.
Use the 9th state element and bump the total number to 10?

The total number is already 10.  And yes, I think we can use the 9th
element.  Currently, the 9th element is a stack of open-paren positions.
So, I think we can reuse it (presumably we'd want parens and nested
strings to be "mutually properly nested").

--Dmitry



reply via email to

[Prev in Thread] Current Thread [Next in Thread]