changeset 111385:85a2b871f225

* lisp/progmodes/python.el (python-font-lock-syntactic-keywords): Fix handling of backslash escapes. (python-quote-syntax): Adjust accordingly.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 08 Nov 2010 13:56:10 -0500
parents 90d8fda00161
children 93e249d6d27c
files lisp/ChangeLog lisp/progmodes/python.el
diffstat 2 files changed, 11 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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  <monnier@iro.umontreal.ca>
+
+	* 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  <richard@levitte.org>  (tiny patch)
 
 	* vc-mtn.el (vc-mtn-working-revision, vc-mtn-after-dir-status)
--- 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 "|")))))