1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-18 18:05:07 +00:00

* lisp/progmodes/sh-script.el: Better handle nested quotes

(sh-here-doc-open-re): Don't mis-match the <<< operator (bug#20683).
(sh-font-lock-quoted-subshell): Make sure double quotes within single
quotes don't mistakenly end prematurely the surrounding string.
This commit is contained in:
Stefan Monnier 2015-06-09 22:10:38 -04:00
parent 26a17f5ac9
commit 06193432f2

View File

@ -987,7 +987,7 @@ See `sh-feature'.")
"\\(?:\\(?:.*[^\\\n]\\)?\\(?:\\\\\\\\\\)*\\\\\n\\)*.*")
(defconst sh-here-doc-open-re
(concat "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._]\\)+\\)"
(concat "[^<]<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._]\\)+\\)"
sh-escaped-line-re "\\(\n\\)")))
(defun sh--inside-noncommand-expression (pos)
@ -1064,7 +1064,16 @@ subshells can nest."
(pcase (char-after)
(?\' (pcase state
(`double-quote nil)
(_ (forward-char 1) (skip-chars-forward "^'" limit))))
(_ (forward-char 1)
;; FIXME: mark skipped double quotes as punctuation syntax.
(let ((spos (point)))
(skip-chars-forward "^'" limit)
(save-excursion
(let ((epos (point)))
(goto-char spos)
(while (search-forward "\"" epos t)
(put-text-property (point) (1- (point))
'syntax-table '(1)))))))))
(?\\ (forward-char 1))
(?\" (pcase state
(`double-quote (setq state (pop states)))