]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix cornercase for string syntax.
authorFabián Ezequiel Gallina <fgallina@gnu.org>
Wed, 3 Oct 2012 21:53:09 +0000 (18:53 -0300)
committerFabián Ezequiel Gallina <fgallina@gnu.org>
Wed, 3 Oct 2012 21:53:09 +0000 (18:53 -0300)
* progmodes/python.el (python-syntax-propertize-function):
Simplify and enhance the regexp for unescaped quotes.  Now it also
matches quotes in weird situations like the single quote in
"something\"'".
(python-syntax-stringify): Simplify num-quotes detecting code.

lisp/ChangeLog
lisp/progmodes/python.el

index 32540b213dc41c9be1982199e0b80c11efebaf29..689659fd797bb8b9d8be26b5b79788129b6d5d50 100644 (file)
@@ -1,3 +1,12 @@
+2012-10-03  Fabián Ezequiel Gallina  <fgallina@cuca>
+
+       Fix cornercase for string syntax.
+       * progmodes/python.el (python-syntax-propertize-function):
+       Simplify and enhance the regexp for unescaped quotes.  Now it also
+       matches quotes in weird situations like the single quote in
+       "something\"'".
+       (python-syntax-stringify): Simplify num-quotes detecting code.
+
 2012-10-03  Glenn Morris  <rgm@gnu.org>
 
        * help-macro.el (three-step-help):
index 26758105218ed3bb761ba2615a6f454578ee4e22..f5e4bffd5981e3f6a7411f5b479b79e43486b981 100644 (file)
@@ -499,16 +499,15 @@ The type returned can be `comment', `string' or `paren'."
 (defconst python-syntax-propertize-function
   (syntax-propertize-rules
    ((rx
-     (or (and
-          ;; Match even number of backslashes.
-          (or (not (any ?\\ ?\' ?\")) point) (* ?\\ ?\\)
-          ;; Match single or triple quotes of any kind.
-          (group (or  "\"" "\"\"\"" "'" "'''")))
-         (and
-          ;; Match odd number of backslashes.
-          (or (not (any ?\\)) point) ?\\ (* ?\\ ?\\)
-          ;; Followed by even number of equal quotes.
-          (group (or  "\"\"" "\"\"\"\"" "''" "''''")))))
+     (and
+      ;; Match even number of backslashes.
+      (or (not (any ?\\ ?\' ?\")) point
+          ;; Quotes might be preceeded by a escaped quote.
+          (and (or (not (any ?\\)) point) ?\\
+               (* ?\\ ?\\) (any ?\' ?\")))
+      (* ?\\ ?\\)
+      ;; Match single or triple quotes of any kind.
+      (group (or  "\"" "\"\"\"" "'" "'''"))))
     (0 (ignore (python-syntax-stringify))))))
 
 (defsubst python-syntax-count-quotes (quote-char &optional point limit)
@@ -525,12 +524,7 @@ is used to limit the scan."
 
 (defun python-syntax-stringify ()
   "Put `syntax-table' property correctly on single/triple quotes."
-  (let* ((num-quotes
-          (let ((n (length (or (match-string-no-properties 1)
-                               (match-string-no-properties 2)))))
-            ;; This corrects the quote count when matching odd number
-            ;; of backslashes followed by even number of quotes.
-            (or (and (= 1 (logand n 1)) n) (1- n))))
+  (let* ((num-quotes (length (match-string-no-properties 1)))
          (ppss (prog2
                    (backward-char num-quotes)
                    (syntax-ppss)