From: Stefan Monnier <monnier@iro.umontreal.ca>
To: "Eric M. Ludlam" <eric@siege-engine.com>
Cc: "John W. Eaton" <jwe@octave.org>,
"Kurt Hornik" <Kurt.Hornik@wu-wien.ac.at>,
"Jordi Gutiérrez Hermoso" <jordigh@gmail.com>,
"Daniel Colascione" <daniel@censorshipresearch.org>,
"Emacs development discussions" <emacs-devel@gnu.org>
Subject: Re: [PATCH] let octave-mode understand single-quoted strings
Date: Thu, 07 Oct 2010 10:41:39 +0200 [thread overview]
Message-ID: <jwvsk0io1h6.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <4CABBB75.2010606@siege-engine.com> (Eric M. Ludlam's message of "Tue, 05 Oct 2010 19:57:41 -0400")
>>>>> John W. Eaton <jwe@octave.org> writes:
> A single-quote character is recognized as a transpose operator if it
[...]
> Does that help?
Yes, it does, thank you.
> The Octave manual has a more complete description of how
> "command-style" parsing works (yes, this is ugly; it was implemented
> because it is required for compatibility with Matlab).
Could you give me a pointer to it? I haven't found it.
>>>>> "Eric" == Eric M Ludlam <eric@siege-engine.com> writes:
> If not, the basic idea behind it is to use font-lock's functional matching
> stuff. Look to these functions:
> matlab-font-lock-string-match-normal
> matlab-font-lock-string-match-unterminated
> matlab-font-lock-comment-match
Thanks. octave-mod.el uses syntax-table text-properties instead (since
it has the advantage of making buffer navigation functions work
correctly as well), so it's necessarily a bit different.
> The strings and comments have to be done together, so you end up having to
> use these functions in a particular order, checking to see what faces are
> left behind while looking at comment chars to make sure it isn't in
> a string.
FWIW, I've appended the code I use now in octave-mod.el, since I think
it's a good bit simpler. It uses the new syntax-propertize feature, but
you could use font-lock-syntactic-keywords instead.
Stefan
(defun octave-syntax-propertize-function (start end)
(goto-char start)
(octave-syntax-propertize-sqs end)
(funcall (syntax-propertize-rules
;; Try to distinguish the string-quotes from the transpose-quotes.
("[[({,; ]\\('\\)"
(1 (prog1 "\"'" (octave-syntax-propertize-sqs end)))))
(point) end))
(defun octave-syntax-propertize-sqs (end)
"Propertize the content/end of single-quote strings."
(when (eq (nth 3 (syntax-ppss)) ?\')
;; A '..' string.
(when (re-search-forward
"\\(?:\\=\\|[^']\\)\\(?:''\\)*\\('\\)\\($\\|[^']\\)" end 'move)
(goto-char (match-beginning 2))
(when (eq (char-before (match-beginning 1)) ?\\)
;; Backslash cannot escape a single quote.
(put-text-property (1- (match-beginning 1)) (match-beginning 1)
'syntax-table (string-to-syntax ".")))
(put-text-property (match-beginning 1) (match-end 1)
'syntax-table (string-to-syntax "\"'")))))
next prev parent reply other threads:[~2010-10-07 8:41 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-30 21:19 [PATCH] let octave-mode understand single-quoted strings Daniel Colascione
2010-08-31 12:32 ` Stefan Monnier
2010-08-31 21:15 ` Jordi Gutiérrez Hermoso
2010-09-01 6:46 ` Stefan Monnier
2010-09-02 14:07 ` Jordi Gutiérrez Hermoso
2010-09-02 16:24 ` Stefan Monnier
2010-09-02 23:46 ` Jordi Gutiérrez Hermoso
2010-09-03 10:48 ` Stefan Monnier
2010-10-05 8:28 ` John W. Eaton
2010-10-05 23:57 ` Eric M. Ludlam
2010-10-07 8:41 ` Stefan Monnier [this message]
2011-10-04 15:13 ` Jordi Gutiérrez Hermoso
2011-10-04 17:40 ` 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=jwvsk0io1h6.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=Kurt.Hornik@wu-wien.ac.at \
--cc=daniel@censorshipresearch.org \
--cc=emacs-devel@gnu.org \
--cc=eric@siege-engine.com \
--cc=jordigh@gmail.com \
--cc=jwe@octave.org \
/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.