[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#7322: 23.1; tqs-escape-syntax-error
From: |
Stefan Monnier |
Subject: |
bug#7322: 23.1; tqs-escape-syntax-error |
Date: |
Mon, 08 Nov 2010 13:57:34 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) |
>>>>> "Andreas" == Andreas Röhler <andreas.roehler@easy-emacs.de> writes:
> Hi,
> editing python code, the following code concatenates strings with variables:
> """(beginning-of-form-base \"""" + string1 + """\" \"""" + string2 + """\"
> nil nil nil nil t))))"""
> while " + string1 +" is highlighted correctly, " + string2 + " has string
> face wrongly.
Thanks. Indeed backslashes weren't recognized properly in this case.
I've installed the patch below in the emacs-23 branch, which seems to
fix this problem.
Stefan
=== modified file 'lisp/progmodes/python.el'
--- lisp/progmodes/python.el 2010-08-23 00:44:55 +0000
+++ lisp/progmodes/python.el 2010-11-08 18:53:30 +0000
@@ -170,18 +170,9 @@
;; Make outer chars of matching triple-quote sequences into generic
;; string delimiters. Fixme: Is there a better way?
;; First avoid a sequence preceded by an odd number of backslashes.
- `((,(rx (not (any ?\\))
- ?\\ (* (and ?\\ ?\\))
- (group (syntax string-quote))
- (backref 1)
- (group (backref 1)))
- (2 ,(string-to-syntax "\""))) ; dummy
- (,(rx (group (optional (any "uUrR"))) ; prefix gets syntax property
- (optional (any "rR")) ; possible second prefix
- (group (syntax string-quote)) ; maybe gets property
- (backref 2) ; per first quote
- (group (backref 2))) ; maybe gets property
- (1 (python-quote-syntax 1))
+ `((,(concat "\\(?:\\([RUru]\\)[Rr]?\\|^\\|[^\\]\\(?:\\\\.\\)*\\)" ;Prefix.
+ "\\(?:\\('\\)'\\('\\)\\|\\(?2:\"\\)\"\\(?3:\"\\)\\)")
+ (1 (python-quote-syntax 1) nil lax)
(2 (python-quote-syntax 2))
(3 (python-quote-syntax 3)))
;; This doesn't really help.
@@ -219,9 +210,9 @@
(eval-when-compile (string-to-syntax "|"))))))
;; Consider property for initial char, accounting for prefixes.
((or (and (= n 2) ; leading quote (not prefix)
- (= (match-beginning 1) (match-end 1))) ; prefix is null
+ (not (match-end 1))) ; prefix is null
(and (= n 1) ; prefix
- (/= (match-beginning 1) (match-end 1)))) ; non-empty
+ (match-end 1))) ; non-empty
(let ((font-lock-syntactic-keywords nil))
(unless (eq 'string (syntax-ppss-context (syntax-ppss)))
(eval-when-compile (string-to-syntax "|")))))