From 73525e726cd917645950e185cbabafda00bc0635 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 8 Nov 2010 13:56:10 -0500 Subject: [PATCH] * lisp/progmodes/python.el (python-font-lock-syntactic-keywords): Fix handling of backslash escapes. (python-quote-syntax): Adjust accordingly. Fixes: debbugs:7322 --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/python.el | 19 +++++-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 45066263c5e..0a38a9a6c9f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2010-11-08 Stefan Monnier + + * progmodes/python.el (python-font-lock-syntactic-keywords): (bug#7322) + Fix handling of backslash escapes. + (python-quote-syntax): Adjust accordingly. + 2010-11-08 Richard Levitte (tiny patch) * vc-mtn.el (vc-mtn-working-revision, vc-mtn-after-dir-status) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index ed2a3236be1..dba8fe5572b 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -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 @@ Used for syntactic keywords. N is the match number (1, 2 or 3)." (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 "|"))))) -- 2.39.2