(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).
(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))))