X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/ccded26c1e57045a8941dd69b2566ac9a49cfe4b..7be1c708c5abc7dea388d45454bd19bff07b7943:/lisp/progmodes/sh-script.el diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 900072fe35..31a4fbaef4 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -969,7 +969,8 @@ Point is at the beginning of the next line." (defun sh-syntax-propertize-here-doc (end) (let ((ppss (syntax-ppss))) (when (eq t (nth 3 ppss)) - (let ((key (get-text-property (nth 8 ppss) 'sh-here-doc-marker))) + (let ((key (get-text-property (nth 8 ppss) 'sh-here-doc-marker)) + (case-fold-search nil)) (when (re-search-forward (concat "^\\([ \t]*\\)" (regexp-quote key) "\\(\n\\)") end 'move) @@ -986,8 +987,7 @@ subshells can nest." ;; rather flakey. (when (eq ?\" (nth 3 (syntax-ppss))) ; Check we matched an opening quote. ;; bingo we have a $( or a ` inside a "" - (let ((char (char-after (point))) - ;; `state' can be: double-quote, backquote, code. + (let (;; `state' can be: double-quote, backquote, code. (state (if (eq (char-before) ?`) 'backquote 'code)) ;; Stacked states in the context. (states '(double-quote))) @@ -1028,45 +1028,45 @@ subshells can nest." (defun sh-font-lock-paren (start) (unless (nth 8 (syntax-ppss)) - (save-excursion - (goto-char start) - ;; Skip through all patterns - (while - (progn + (save-excursion + (goto-char start) + ;; Skip through all patterns + (while + (progn (while (progn - (forward-comment (- (point-max))) + (forward-comment (- (point-max))) (when (and (eolp) (sh-is-quoted-p (point))) (forward-char -1) t))) - ;; Skip through one pattern - (while - (or (/= 0 (skip-syntax-backward "w_")) + ;; Skip through one pattern + (while + (or (/= 0 (skip-syntax-backward "w_")) (/= 0 (skip-chars-backward "-$=?[]*@/\\\\")) - (and (sh-is-quoted-p (1- (point))) - (goto-char (- (point) 2))) + (and (sh-is-quoted-p (1- (point))) + (goto-char (- (point) 2))) (when (memq (char-before) '(?\" ?\' ?\})) - (condition-case nil (progn (backward-sexp 1) t) - (error nil))))) - ;; Patterns can be preceded by an open-paren (Bug#1320). - (if (eq (char-before (point)) ?\() - (backward-char 1)) - (while (progn - (forward-comment (- (point-max))) - ;; Maybe we've bumped into an escaped newline. - (sh-is-quoted-p (point))) - (backward-char 1)) - (when (eq (char-before) ?|) - (backward-char 1) t))) - (when (progn (backward-char 2) - (if (> start (line-end-position)) - (put-text-property (point) (1+ start) - 'syntax-multiline t)) - ;; FIXME: The `in' may just be a random argument to - ;; a normal command rather than the real `in' keyword. - ;; I.e. we should look back to try and find the - ;; corresponding `case'. - (and (looking-at ";[;&]\\|in") + (condition-case nil (progn (backward-sexp 1) t) + (error nil))))) + ;; Patterns can be preceded by an open-paren (Bug#1320). + (if (eq (char-before (point)) ?\() + (backward-char 1)) + (while (progn + (forward-comment (- (point-max))) + ;; Maybe we've bumped into an escaped newline. + (sh-is-quoted-p (point))) + (backward-char 1)) + (when (eq (char-before) ?|) + (backward-char 1) t))) + (when (progn (backward-char 2) + (if (> start (line-end-position)) + (put-text-property (point) (1+ start) + 'syntax-multiline t)) + ;; FIXME: The `in' may just be a random argument to + ;; a normal command rather than the real `in' keyword. + ;; I.e. we should look back to try and find the + ;; corresponding `case'. + (and (looking-at ";[;&]\\|\\_