aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes/perl-mode.el
diff options
context:
space:
mode:
authorStefan Monnier <[email protected]>2008-06-03 07:18:54 +0000
committerStefan Monnier <[email protected]>2008-06-03 07:18:54 +0000
commita9bc137f5ec9d474b035afdbd0de9b0a5fe73c5e (patch)
tree9a716369303cb823a5a785428fee3d351fbec2f1 /lisp/progmodes/perl-mode.el
parentacc12ef73e3f7605960b5ba190bf965d4e61eea2 (diff)
(perl-font-lock-syntactic-keywords): Try to be
yet a bit more clever at distinguishing / from /.
Diffstat (limited to 'lisp/progmodes/perl-mode.el')
-rw-r--r--lisp/progmodes/perl-mode.el23
1 files changed, 19 insertions, 4 deletions
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 22d9b488cc..c92ac4252d 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -252,7 +252,7 @@ The expansion is entirely correct because it uses the C preprocessor."
;; <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 @@ The expansion is entirely correct because it uses the C preprocessor."
;; 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.