changeset 31656:0090ca919308

(lm-get-header-re): Allow spaces between the header and the colon. (lm-header-prefix): Cleanup the regexp. (lm-header): Allow $ in non-RCS headers. (lm-header-multiline): Put the strings back into order. Stop at an empty line. Don't require two space chars if the line is clearly not another header line.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sun, 17 Sep 2000 01:00:09 +0000
parents 8c99980d4906
children 58e2bb13d72e
files lisp/emacs-lisp/lisp-mnt.el
diffstat 1 files changed, 20 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/lisp-mnt.el	Sat Sep 16 23:35:51 2000 +0000
+++ b/lisp/emacs-lisp/lisp-mnt.el	Sun Sep 17 01:00:09 2000 +0000
@@ -120,7 +120,7 @@
   :prefix "lm-"
   :group 'maint)
 
-(defcustom lm-header-prefix "^;;*[ \t]+\\(@\(#\)\\)?[ \t]*\\([\$]\\)?"
+(defcustom lm-header-prefix "^;+[ \t]+\\(@(#)\\)?[ \t]*\\$?"
   "Prefix that is ignored before the tag.
 For example, you can write the 1st line synopsis string and headers like this
 in your Lisp package:
@@ -157,10 +157,9 @@
   "Return regexp for matching HEADER.
 If called with optional MODE and with value `section',
 return section regexp instead."
-  (cond ((eq mode 'section)
-	 (concat "^;;;;* " header ":[ \t]*$"))
-	(t
-	 (concat lm-header-prefix header ":[ \t]*"))))
+  (if (eq mode 'section)
+      (concat "^;;;;* " header ":[ \t]*$")
+    (concat lm-header-prefix header "[ \t]*:[ \t]*")))
 
 (defun lm-get-package-name ()
   "Return package name by looking at the first line."
@@ -201,11 +200,14 @@
   "Return the contents of the header named HEADER."
   (goto-char (point-min))
   (let ((case-fold-search t))
-    (if (and (re-search-forward (lm-get-header-re header) (lm-code-mark) t)
-	     ;;   RCS ident likes format "$identifier: data$"
-	     (looking-at "\\([^$\n]+\\)")
-	     (match-end 1))
-	(match-string-no-properties 1))))
+    (when (and (re-search-forward (lm-get-header-re header) (lm-code-mark) t)
+	       ;;   RCS ident likes format "$identifier: data$"
+	       (looking-at
+		(if (save-excursion
+		      (skip-chars-backward "^$" (match-beginning 0))
+		      (= (point) (match-beginning 0)))
+		    "[^\n]+" "[^$\n]+")))
+      (match-string-no-properties 0))))
 
 (defun lm-header-multiline (header)
   "Return the contents of the header named HEADER, with continuation lines.
@@ -216,14 +218,15 @@
       (when res
 	(setq res (list res))
 	(forward-line 1)
-	(while (and (looking-at (concat lm-header-prefix "[\t ]+"))
-		    (progn
-		      (goto-char (match-end 0))
-		      (looking-at "\\(.*\\)"))
-		    (match-end 1))
-	  (setq res (cons (match-string-no-properties 1) res))
+	(while (and (or (looking-at (concat lm-header-prefix "[\t ]+"))
+			(and (not (looking-at
+				   (lm-get-header-re "\\sw\\(\\sw\\|\\s_\\)*")))
+			     (looking-at lm-header-prefix)))
+		    (goto-char (match-end 0))
+		    (looking-at ".+"))
+	  (setq res (cons (match-string-no-properties 0) res))
 	  (forward-line 1)))
-      res)))
+      (nreverse res))))
 
 ;; These give us smart access to the header fields and commentary