aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes/perl-mode.el
diff options
context:
space:
mode:
authorMiles Bader <[email protected]>2005-03-03 10:35:22 +0000
committerMiles Bader <[email protected]>2005-03-03 10:35:22 +0000
commitdedb5504d3464bd50b6c591d36791c5535af68c1 (patch)
tree83ce1054c597d5e7c0d9be5dffd1d08dae2e330c /lisp/progmodes/perl-mode.el
parentc638e2237cd90a294ed01ae2d29a51e25887bd43 (diff)
parent139c65cf7b6b0bce5f4cd6e45f450ff4f02d5421 (diff)
Revision: [email protected]/emacs--unicode--0--patch-21
Merge from emacs--cvs-trunk--0 Patches applied: * [email protected]/emacs--cvs-trunk--0 (patch 129-149) - Update from CVS - Merge from gnus--rel--5.10 - (make-text-button): Default button type if not specified - quick-install-emacs: Use mkdir --verbose only when requested * [email protected]/gnus--rel--5.10 (patch 31-33) - Merge from emacs--cvs-trunk--0 - Update from CVS
Diffstat (limited to 'lisp/progmodes/perl-mode.el')
-rw-r--r--lisp/progmodes/perl-mode.el28
1 files changed, 23 insertions, 5 deletions
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 4b2941bd96..63848b188b 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -161,10 +161,11 @@ The expansion is entirely correct because it uses the C preprocessor."
(defvar perl-imenu-generic-expression
'(;; Functions
- (nil "^sub\\s-+\\([-A-Za-z0-9+_:]+\\)\\(\\s-\\|\n\\)*{" 1 )
+ (nil "^sub\\s-+\\([-A-Za-z0-9+_:]+\\)" 1)
;;Variables
- ("Variables" "^\\([$@%][-A-Za-z0-9+_:]+\\)\\s-*=" 1 )
- ("Packages" "^package\\s-+\\([-A-Za-z0-9+_:]+\\);" 1 ))
+ ("Variables" "^\\([$@%][-A-Za-z0-9+_:]+\\)\\s-*=" 1)
+ ("Packages" "^package\\s-+\\([-A-Za-z0-9+_:]+\\);" 1)
+ ("Doc sections" "^=head[0-9][ \t]+\\(.*\\)" 1))
"Imenu generic expression for Perl mode. See `imenu-generic-expression'.")
;; Regexps updated with help from Tom Tromey <[email protected]> and
@@ -411,6 +412,20 @@ create a new comment."
(defcustom perl-nochange ";?#\\|\f\\|\\s(\\|\\(\\w\\|\\s_\\)+:[^:]"
"*Lines starting with this regular expression are not auto-indented."
:type 'regexp)
+
+;; Outline support
+
+(defvar perl-outline-regexp
+ (concat (mapconcat 'cadr perl-imenu-generic-expression "\\|")
+ "\\|^=cut\\>"))
+
+(defun perl-outline-level ()
+ (cond
+ ((looking-at "package\\s-") 0)
+ ((looking-at "sub\\s-") 1)
+ ((looking-at "=head[0-9]") (- (char-before (match-end 0)) ?0))
+ ((looking-at "=cut") 1)
+ (t 3)))
;;;###autoload
(defun perl-mode ()
@@ -498,9 +513,12 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'."
. perl-font-lock-syntactic-face-function)
(parse-sexp-lookup-properties . t)))
;; Tell imenu how to handle Perl.
- (make-local-variable 'imenu-generic-expression)
- (setq imenu-generic-expression perl-imenu-generic-expression)
+ (set (make-local-variable 'imenu-generic-expression)
+ perl-imenu-generic-expression)
(setq imenu-case-fold-search nil)
+ ;; Setup outline-minor-mode.
+ (set (make-local-variable 'outline-regexp) perl-outline-regexp)
+ (set (make-local-variable 'outline-level) 'perl-outline-level)
(run-hooks 'perl-mode-hook))
;; This is used by indent-for-comment