# HG changeset patch # User Stefan Monnier # Date 1289242570 18000 # Node ID 85a2b871f225b933f646985565698759f27d528b # Parent 90d8fda00161f9b44ecd8d8a5499bfbf991238f6 * lisp/progmodes/python.el (python-font-lock-syntactic-keywords): Fix handling of backslash escapes. (python-quote-syntax): Adjust accordingly. diff -r 90d8fda00161 -r 85a2b871f225 lisp/ChangeLog --- a/lisp/ChangeLog Mon Nov 08 13:42:24 2010 -0500 +++ b/lisp/ChangeLog Mon Nov 08 13:56:10 2010 -0500 @@ -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 -r 90d8fda00161 -r 85a2b871f225 lisp/progmodes/python.el --- a/lisp/progmodes/python.el Mon Nov 08 13:42:24 2010 -0500 +++ b/lisp/progmodes/python.el Mon Nov 08 13:56:10 2010 -0500 @@ -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 "|")))))