Function: python-syntax-stringify
python-syntax-stringify is a byte-compiled function defined in
python.el.gz.
Signature
(python-syntax-stringify)
Documentation
Put syntax-table property correctly on single/triple quotes.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/python.el.gz
(defun python-syntax-stringify ()
"Put `syntax-table' property correctly on single/triple quotes."
(let* ((ppss (save-excursion (backward-char 3) (syntax-ppss)))
(string-start (and (eq t (nth 3 ppss)) (nth 8 ppss)))
(quote-starting-pos (- (point) 3))
(quote-ending-pos (point)))
(cond ((or (nth 4 ppss) ;Inside a comment
(and string-start
;; Inside of a string quoted with different triple quotes.
(not (eql (char-after string-start)
(char-after quote-starting-pos)))))
;; Do nothing.
nil)
((nth 5 ppss)
;; The first quote is escaped, so it's not part of a triple quote!
(goto-char (1+ quote-starting-pos)))
((null string-start)
;; This set of quotes delimit the start of a string. Put
;; string fence syntax on last quote. (bug#49518)
;; FIXME: This makes sexp-movement a bit suboptimal since """a"""
;; is now treated as 3 strings.
;; We could probably have our cake and eat it too by
;; putting the string fence on the first quote and then
;; convincing `syntax-ppss-flush-cache' to flush to before
;; that fence when any char of the 3-char delimiter
;; is modified.
(put-text-property (1- quote-ending-pos) quote-ending-pos
'syntax-table (string-to-syntax "|")))
(t
;; This set of quotes delimit the end of a string. Put
;; string fence syntax on first quote. (bug#49518)
(put-text-property quote-starting-pos (1+ quote-starting-pos)
'syntax-table (string-to-syntax "|"))))))