]> git.eshelyaron.com Git - emacs.git/commitdiff
(perl-imenu-generic-expression): Add entries for perldoc sections.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 27 Feb 2005 23:13:19 +0000 (23:13 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 27 Feb 2005 23:13:19 +0000 (23:13 +0000)
(perl-outline-regexp, perl-outline-level): New var and function.
(perl-mode): Use them.

lisp/ChangeLog
lisp/progmodes/perl-mode.el

index 716f6e5a42fb0b7747c2e0d25eeaaabb7541f81c..fe9f2fb1930a0533ebdc6838f635265b512ff5b4 100644 (file)
@@ -1,3 +1,10 @@
+2005-02-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * progmodes/perl-mode.el (perl-imenu-generic-expression): Add entries
+       for perldoc sections.
+       (perl-outline-regexp, perl-outline-level): New var and function.
+       (perl-mode): Use them.
+
 2005-02-27  Glenn Morris  <gmorris@ast.cam.ac.uk>
 
        * calendar/diary-lib.el (diary-remind): Discard any mark portion
index eb630c2ed542f8a4a83514333a5d29a32f144580..ad4633e20ebf0b356134cca4886b7c06036bd91c 100644 (file)
@@ -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 <tromey@cambric.colorado.edu> 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)))
 \f
 ;;;###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))
 \f
 ;; This is used by indent-for-comment