]> git.eshelyaron.com Git - emacs.git/commitdiff
Enhancements for triple-quote string syntax.
authorFabián Ezequiel Gallina <fgallina@gnu.org>
Sun, 30 Sep 2012 20:14:02 +0000 (17:14 -0300)
committerFabián Ezequiel Gallina <fgallina@gnu.org>
Sun, 30 Sep 2012 20:14:02 +0000 (17:14 -0300)
* progmodes/python.el (python-syntax-propertize-function): Match
both quote cases in one regexp.
(python-syntax-stringify): Handle matches properly.

lisp/progmodes/python.el

index e99e6bda4b830b1fe447322a01df68ca311a09f1..c5ba9a6aecb9ad445880f270db7948e089661ba9 100644 (file)
@@ -499,17 +499,17 @@ The type returned can be `comment', `string' or `paren'."
 (defconst python-syntax-propertize-function
   (syntax-propertize-rules
    ((rx
-     ;; Match even number of backslashes.
-     (or (not (any ?\\ ?\' ?\")) point) (* ?\\ ?\\)
-     ;; Match single or triple quotes of any kind.
-     (group (or  "\"" "\"\"\"" "'" "'''")))
-    (1 (ignore (python-syntax-stringify))))
-   ((rx
-     ;; Match odd number of backslashes.
-     (or (not (any ?\\)) point) ?\\ (* ?\\ ?\\)
-     ;; Followed by even number of equal quotes.
-     (group (or  "\"\"" "\"\"\"\"" "''" "''''")))
-    (1 (ignore (python-syntax-stringify))))))
+     (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  "\"\"" "\"\"\"\"" "''" "''''")))))
+    (0 (ignore (python-syntax-stringify))))))
 
 (defsubst python-syntax-count-quotes (quote-char &optional point limit)
   "Count number of quotes around point (max is 3).
@@ -526,7 +526,8 @@ 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 (match-string-no-properties 1))))
+          (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))))