Mercurial > emacs
changeset 95506:313549362857
(perl-font-lock-syntactic-keywords): Try to be
yet a bit more clever at distinguishing / from /.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 03 Jun 2008 07:18:54 +0000 |
parents | e80f4eb078ee |
children | 62ef79a054ca |
files | lisp/ChangeLog lisp/progmodes/perl-mode.el |
diffstat | 2 files changed, 24 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue Jun 03 06:22:40 2008 +0000 +++ b/lisp/ChangeLog Tue Jun 03 07:18:54 2008 +0000 @@ -1,3 +1,8 @@ +2008-06-03 Stefan Monnier <monnier@iro.umontreal.ca> + + * progmodes/perl-mode.el (perl-font-lock-syntactic-keywords): Try to be + yet a bit more clever at distinguishing / from /. + 2008-06-03 Kenichi Handa <handa@m17n.org> * Makefile.in (ELCFILES): Add $(lisp)/language/hanja-util.elc.
--- a/lisp/progmodes/perl-mode.el Tue Jun 03 06:22:40 2008 +0000 +++ b/lisp/progmodes/perl-mode.el Tue Jun 03 07:18:54 2008 +0000 @@ -252,7 +252,7 @@ ;; <file*glob> (defvar perl-font-lock-syntactic-keywords ;; TODO: here-documents ("<<\\(\\sw\\|['\"]\\)") - '(;; Turn POD into b-style comments + `(;; Turn POD into b-style comments ("^\\(=\\)\\sw" (1 "< b")) ("^=cut[ \t]*\\(\n\\)" (1 "> b")) ;; Catch ${ so that ${var} doesn't screw up indentation. @@ -267,12 +267,27 @@ ;; Be careful not to match "sub { (...) ... }". ("\\<sub\\(?:[[:space:]]+[^{}[:punct:][:space:]]+\\)?[[:space:]]*(\\([^)]+\\))" 1 '(1)) - ;; Regexp and funny quotes. - ("\\(?:[?:.,;=!~({[]\\|\\(^\\)\\)[ \t\n]*\\(/\\)" + ;; Regexp and funny quotes. Distinguishing a / that starts a regexp + ;; match from the division operator is ...interesting. + ;; Basically, / is a regexp match if it's preceded by an infix operator + ;; (or some similar separator), or by one of the special keywords + ;; corresponding to builtin functions that can take their first arg + ;; without parentheses. Of course, that presume we're looking at the + ;; *opening* slash. We can mis-match the closing ones, because they are + ;; treated separately later in + ;; perl-font-lock-special-syntactic-constructs. + (,(concat "\\(?:\\(?:\\(?:^\\|[^$@&%[:word:]]\\)" + (regexp-opt '("split" "if" "unless" "until" "while" "split" + "grep" "map" "not" "or" "and")) + "\\)\\|[?:.,;=!~({[]\\|\\(^\\)\\)[ \t\n]*\\(/\\)") (2 (if (and (match-end 1) (save-excursion (goto-char (match-end 1)) - (skip-chars-backward " \t\n") + ;; Not 100% correct since we haven't finished setting up + ;; the syntax-table before point, but better than nothing. + (forward-comment (- (point-max))) + (put-text-property (point) (match-end 2) + 'jit-lock-multiline t) (not (memq (char-before) '(?? ?: ?. ?, ?\; ?= ?! ?~ ?\( ?\[))))) nil ;; A division sign instead of a regexp-match.