(rfc822/analyze-atom): New alias for `std11-analyze-atom'; New
[elisp/mu-cite.git] / std11.el
index 36ffe43..4b58c24 100644 (file)
--- a/std11.el
+++ b/std11.el
@@ -1,10 +1,10 @@
-;;; std11.el --- STD 11 parser for GNU Emacs
+;;; std11.el --- STD 11 functions for GNU Emacs
 
 ;; Copyright (C) 1995,1996 Free Software Foundation, Inc.
 
 ;; Author:   MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;; Keywords: mail, news, RFC 822, STD 11
-;; Version: $Id: std11.el,v 0.4 1996-08-28 13:03:23 morioka Exp $
+;; Version: $Id: std11.el,v 0.14 1996-08-28 17:08:05 morioka Exp $
 
 ;; This file is part of tl (Tiny Library).
 
 (defconst std11-next-field-head-regexp
   (concat "\n" std11-field-name-regexp ":"))
 
-(defun std11-field-body (name &optional boundary)
-  (save-excursion
-    (save-restriction
-      (std11-narrow-to-header)
-      (goto-char (point-min))
-      (let ((case-fold-search t))
-       (if (re-search-forward (concat "^" name ":[ \t]*") nil t)
-           (buffer-substring-no-properties (match-end 0) (std11-field-end))
-         )))))
-
 (defun std11-field-end ()
+  "Move to end of field and return this point. [std11.el]"
   (if (re-search-forward std11-next-field-head-regexp nil t)
       (goto-char (match-beginning 0))
     (if (re-search-forward "^$" nil t)
   (point)
   )
 
+(defun std11-find-field-body (name &optional boundary)
+  "Return body of field NAME.
+If BOUNDARY is not nil, it is used as message header separator.
+\[std11.el]"
+  (save-excursion
+    (save-restriction
+      (std11-narrow-to-header boundary)
+      (goto-char (point-min))
+      (let ((case-fold-search t))
+       (if (re-search-forward (concat "^" name ":[ \t]*") nil t)
+           (buffer-substring-no-properties (match-end 0) (std11-field-end))
+         )))))
+
+(defun std11-find-field-bodies (field-names &optional default-value boundary)
+  "Return list of each field-bodies of FIELD-NAMES of the message header
+in current buffer. If BOUNDARY is not nil, it is used as message
+header separator. [std11.el]"
+  (save-excursion
+    (save-restriction
+      (std11-narrow-to-header boundary)
+      (let* ((case-fold-search t)
+            (dest (make-list (length field-names) default-value))
+            (s-rest field-names)
+            (d-rest dest)
+            field-name)
+       (while (setq field-name (car s-rest))
+         (goto-char (point-min))
+         (if (re-search-forward (concat "^" field-name ":[ \t]*") nil t)
+             (setcar d-rest
+                     (buffer-substring-no-properties
+                      (match-end 0) (std11-field-end)))
+           )
+         (setq s-rest (cdr s-rest)
+               d-rest (cdr d-rest))
+         )
+       dest))))
+
+
+;;; @ unfolding
+;;;
+
+(defun std11-unfold-string (string)
+  "Unfold STRING as message header field. [std11.el]"
+  (let ((dest ""))
+    (while (string-match "\n\\s +" string)
+      (setq dest (concat dest (substring string 0 (match-beginning 0)) " "))
+      (setq string (substring string (match-end 0)))
+      )
+    (concat dest string)
+    ))
+
 
 ;;; @ header
 ;;;
 
 (defun std11-narrow-to-header (&optional boundary)
+  "Narrow to the message header.
+If BOUNDARY is not nil, it is used as message header separator.
+\[std11.el]"
   (narrow-to-region
    (goto-char (point-min))
    (if (re-search-forward
      (point-max)
      )))
 
-(defun std11-header-string (pat &optional boundary)
+(defun std11-header-string (regexp &optional boundary)
+  "Return string of message header fields matched by REGEXP.
+If BOUNDARY is not nil, it is used as message header separator.
+\[std11.el]"
   (let ((case-fold-search t))
     (save-excursion
       (save-restriction
          (while (re-search-forward std11-field-head-regexp nil t)
            (setq field
                  (buffer-substring (match-beginning 0) (std11-field-end)))
-           (if (string-match pat field)
+           (if (string-match regexp field)
                (setq header (concat header field "\n"))
              ))
          header)
        ))))
 
-(defun std11-header-string-except (pat &optional boundary)
+(defun std11-header-string-except (regexp &optional boundary)
+  "Return string of message header fields not matched by REGEXP.
+If BOUNDARY is not nil, it is used as message header separator.
+\[std11.el]"
   (let ((case-fold-search t))
     (save-excursion
       (save-restriction
          (while (re-search-forward std11-field-head-regexp nil t)
            (setq field
                  (buffer-substring (match-beginning 0) (std11-field-end)))
-           (if (not (string-match pat field))
+           (if (not (string-match regexp field))
                (setq header (concat header field "\n"))
              ))
          header)
        ))))
 
-(defun std11-field-names (&optional boundary)
+(defun std11-collect-field-names (&optional boundary)
+  "Return list of all field-names of the message header in current buffer.
+If BOUNDARY is not nil, it is used as message header separator.
+\[std11.el]"
   (save-excursion
     (save-restriction
       (std11-narrow-to-header boundary)
 
 (provide 'std11)
 
+(autoload 'std11-analyze-spaces                "std11-parse")
+(autoload 'std11-analyze-special       "std11-parse")
+
 ;;; std11.el ends here