mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-23 10:34:07 +00:00
* lisp/progmodes/sh-script.el (sh-font-lock-open-heredoc): Fix case
of here-doc that immediately follows a comment. * .bzrignore: Ignore globals.h and related stamp. * test/indent/shell.sh: * test/indent/shell.rc: New files.
This commit is contained in:
parent
33cd3ee46b
commit
ccded26c1e
@ -1,3 +1,7 @@
|
||||
2011-02-09 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* .bzrignore: Ignore globals.h and related stamp.
|
||||
|
||||
2011-02-09 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* lib/Makefile.in, lib/gnulib.mk: Regenerate.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-02-09 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* progmodes/sh-script.el (sh-font-lock-open-heredoc): Fix case
|
||||
of here-doc that immediately follows a comment.
|
||||
|
||||
2011-02-09 Deniz Dogan <deniz.a.m.dogan@gmail.com>
|
||||
|
||||
* net/rcirc.el (rcirc-ctcp-sender-PING): Simplifying.
|
||||
|
@ -948,12 +948,12 @@ Point is at the beginning of the next line."
|
||||
;; We're looking at <<STRING, so we add "^STRING$" to the syntactic
|
||||
;; font-lock keywords to detect the end of this here document.
|
||||
(let ((str (replace-regexp-in-string "['\"]" "" string))
|
||||
(ppss (save-excursion (syntax-ppss (1- (point))))))
|
||||
(ppss (save-excursion (syntax-ppss eol))))
|
||||
(if (nth 4 ppss)
|
||||
;; The \n not only starts the heredoc but also closes a comment.
|
||||
;; Let's close the comment just before the \n.
|
||||
(put-text-property (1- (point)) (point) 'syntax-table '(12))) ;">"
|
||||
(if (or (nth 5 ppss) (> (count-lines start (point)) 1))
|
||||
(put-text-property (1- eol) eol 'syntax-table '(12))) ;">"
|
||||
(if (or (nth 5 ppss) (> (count-lines start eol) 1))
|
||||
;; If the sh-escaped-line-re part of sh-here-doc-open-re has matched
|
||||
;; several lines, make sure we refontify them together.
|
||||
;; Furthermore, if (nth 5 ppss) is non-nil (i.e. the \n is
|
||||
@ -961,7 +961,7 @@ Point is at the beginning of the next line."
|
||||
;; Don't bother fixing it now, but place a multiline property so
|
||||
;; that when jit-lock-context-* refontifies the rest of the
|
||||
;; buffer, it also refontifies the current line with it.
|
||||
(put-text-property start (point) 'syntax-multiline t))
|
||||
(put-text-property start (1+ eol) 'syntax-multiline t))
|
||||
(put-text-property eol (1+ eol) 'sh-here-doc-marker str)
|
||||
(prog1 sh-here-doc-syntax
|
||||
(goto-char (+ 2 start))))))
|
||||
@ -1083,33 +1083,33 @@ subshells can nest."
|
||||
(defun sh-syntax-propertize-function (start end)
|
||||
(goto-char start)
|
||||
(sh-syntax-propertize-here-doc end)
|
||||
(funcall
|
||||
(syntax-propertize-rules
|
||||
(funcall
|
||||
(syntax-propertize-rules
|
||||
(sh-here-doc-open-re
|
||||
(2 (sh-font-lock-open-heredoc
|
||||
(match-beginning 0) (match-string 1) (match-beginning 2))))
|
||||
("\\s|" (0 (prog1 nil (sh-syntax-propertize-here-doc end))))
|
||||
;; A `#' begins a comment when it is unquoted and at the
|
||||
;; beginning of a word. In the shell, words are separated by
|
||||
;; metacharacters. The list of special chars is taken from
|
||||
;; the single-unix spec of the shell command language (under
|
||||
;; `quoting') but with `$' removed.
|
||||
("[^|&;<>()`\\\"' \t\n]\\(#+\\)" (1 "_"))
|
||||
;; In a '...' the backslash is not escaping.
|
||||
("\\(\\\\\\)'" (1 (sh-font-lock-backslash-quote)))
|
||||
;; Make sure $@ and $? are correctly recognized as sexps.
|
||||
("\\$\\([?@]\\)" (1 "_"))
|
||||
;; Distinguish the special close-paren in `case'.
|
||||
(")" (0 (sh-font-lock-paren (match-beginning 0))))
|
||||
;; Highlight (possibly nested) subshells inside "" quoted
|
||||
;; regions correctly.
|
||||
;; A `#' begins a comment when it is unquoted and at the
|
||||
;; beginning of a word. In the shell, words are separated by
|
||||
;; metacharacters. The list of special chars is taken from
|
||||
;; the single-unix spec of the shell command language (under
|
||||
;; `quoting') but with `$' removed.
|
||||
("[^|&;<>()`\\\"' \t\n]\\(#+\\)" (1 "_"))
|
||||
;; In a '...' the backslash is not escaping.
|
||||
("\\(\\\\\\)'" (1 (sh-font-lock-backslash-quote)))
|
||||
;; Make sure $@ and $? are correctly recognized as sexps.
|
||||
("\\$\\([?@]\\)" (1 "_"))
|
||||
;; Distinguish the special close-paren in `case'.
|
||||
(")" (0 (sh-font-lock-paren (match-beginning 0))))
|
||||
;; Highlight (possibly nested) subshells inside "" quoted
|
||||
;; regions correctly.
|
||||
("\"\\(?:\\(?:[^\\\"]\\|\\)*?[^\\]\\(?:\\\\\\\\\\)*\\)??\\(\\$(\\|`\\)"
|
||||
(1 (ignore
|
||||
;; Save excursion because we want to also apply other
|
||||
;; syntax-propertize rules within the affected region.
|
||||
(1 (ignore
|
||||
;; Save excursion because we want to also apply other
|
||||
;; syntax-propertize rules within the affected region.
|
||||
(if (nth 8 (syntax-ppss))
|
||||
(goto-char (1+ (match-beginning 0)))
|
||||
(save-excursion
|
||||
(save-excursion
|
||||
(sh-font-lock-quoted-subshell end)))))))
|
||||
(point) end))
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-02-09 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* indent/shell.sh:
|
||||
* indent/shell.rc: New files.
|
||||
|
||||
2011-01-27 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* automated/font-parse-tests.el: Move from
|
||||
|
30
test/indent/shell.rc
Executable file
30
test/indent/shell.rc
Executable file
@ -0,0 +1,30 @@
|
||||
#!/bin/rc
|
||||
|
||||
if (foo) {
|
||||
echo 1
|
||||
}
|
||||
if not {
|
||||
echo 2
|
||||
}
|
||||
|
||||
if (foo)
|
||||
echo 3 # KNOWN INDENT BUG
|
||||
if not
|
||||
echo 4 # KNOWN INDENT BUG
|
||||
|
||||
switch ($a) {
|
||||
case 3
|
||||
echo 4
|
||||
case 5
|
||||
echo 7
|
||||
for (i in a b c) {
|
||||
echo $i
|
||||
}
|
||||
for (i in a b c)
|
||||
echo "$i" # KNOWN INDENT BUG
|
||||
echo titi
|
||||
|
||||
case *
|
||||
echo other
|
||||
}
|
||||
|
98
test/indent/shell.sh
Executable file
98
test/indent/shell.sh
Executable file
@ -0,0 +1,98 @@
|
||||
#!/bin/sh
|
||||
|
||||
setlock -n /tmp/getmail.lock && echo getmail isn\'t running
|
||||
|
||||
# adsgsdg
|
||||
|
||||
foo () {
|
||||
|
||||
bar () {
|
||||
blilbi
|
||||
}
|
||||
|
||||
case toto
|
||||
in a) hello # KNOWN INDENT BUG
|
||||
;; b) hi # KNOWN INDENT BUG
|
||||
esac
|
||||
|
||||
case $toto in
|
||||
a) echo 1;; b) echo 2;;
|
||||
c) echo 3;;
|
||||
esac
|
||||
|
||||
case $as_nl`(ac_space=' '; set) 2>&1` in #(
|
||||
*${as_nl}ac_space=\ *)
|
||||
# `set' does not quote correctly, so add quotes: double-quote
|
||||
# substitution turns \\\\ into \\, and sed turns \\ into \.
|
||||
sed -n \
|
||||
"s/'/'\\\\''/g;
|
||||
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=/\\1=''/p"
|
||||
;; #(
|
||||
*)
|
||||
# `set' quotes correctly as required by POSIX, so do not add
|
||||
# quotes.
|
||||
sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
|
||||
;;
|
||||
esac |
|
||||
cat # KNOWN INDENT BUG
|
||||
|
||||
case toto in
|
||||
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
|
||||
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* \
|
||||
| --exec=* | --exe=* | --ex=*)
|
||||
exec_prefix=$ac_optarg ;;
|
||||
5)
|
||||
hello ;;
|
||||
3) hello $(adfad)
|
||||
echo esac ;; # KNOWN INDENT BUG
|
||||
5) hello ;;
|
||||
4) hello ;&
|
||||
4) hello ;;&
|
||||
5) hello ;;
|
||||
5) hello ;;
|
||||
esac
|
||||
|
||||
echo "'" wfgfe
|
||||
|
||||
#!/bin/bash
|
||||
cat << EOF \
|
||||
| cat sadfsafd \
|
||||
sadfsafd "KNOWN INDENT BUG" \
|
||||
| tee -a bug.txt
|
||||
asdfsaf
|
||||
This is a test case for a bug in bash shell mode text highlighting
|
||||
EOF
|
||||
|
||||
cat <<EOF1 <<EOF2 # KNOWN INDENT BUG
|
||||
help1
|
||||
EOF1
|
||||
help2
|
||||
EOF2
|
||||
}
|
||||
bar () {
|
||||
if [ $# == 0 ]; then
|
||||
while
|
||||
f # KNOWN INDENT BUG
|
||||
do
|
||||
bla;
|
||||
done
|
||||
echo "Highlighting is screwed up now"
|
||||
if [ 1 = 1 ]; then
|
||||
# adsgsdg
|
||||
echo "screwed up"
|
||||
fi
|
||||
|
||||
$@ $? $#
|
||||
|
||||
for f in *
|
||||
do
|
||||
sdfg
|
||||
done
|
||||
|
||||
if swrgfef
|
||||
then blas
|
||||
else sdf
|
||||
fi
|
||||
|
||||
fi
|
||||
}
|
Loading…
Reference in New Issue
Block a user