(std11-addr-to-string): New function; moved from tl-822.el.
[elisp/apel.git] / std11.el
index bb762ff..33c8588 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.9 1996-08-28 15:17:19 morioka Exp $
+;; Version: $Id: std11.el,v 0.19 1996-08-28 21:01:41 morioka Exp $
 
 ;; This file is part of tl (Tiny Library).
 
 (defconst std11-next-field-head-regexp
   (concat "\n" std11-field-name-regexp ":"))
 
-(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-field-end ()
   "Move to end of field and return this point. [std11.el]"
   (if (re-search-forward std11-next-field-head-regexp nil t)
@@ -62,25 +49,20 @@ If BOUNDARY is not nil, it is used as message header separator.
   (point)
   )
 
-(defun std11-field-names (&optional boundary)
-  "Return list of all field-names of the message header in current buffer.
+(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 (dest name)
-       (while (re-search-forward std11-field-head-regexp nil t)
-         (setq name (buffer-substring-no-properties
-                     (match-beginning 0)(1- (match-end 0))))
-         (or (member name dest)
-             (setq dest (cons name dest))
-             )
-         )
-       dest))))
+      (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-bodies (field-names &optional default-value boundary)
+(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]"
@@ -173,10 +155,70 @@ If BOUNDARY is not nil, it is used as message header separator.
          header)
        ))))
 
+(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)
+      (goto-char (point-min))
+      (let (dest name)
+       (while (re-search-forward std11-field-head-regexp nil t)
+         (setq name (buffer-substring-no-properties
+                     (match-beginning 0)(1- (match-end 0))))
+         (or (member name dest)
+             (setq dest (cons name dest))
+             )
+         )
+       dest))))
 
-;;; @ end
+
+;;; @ parser
 ;;;
 
 (provide 'std11)
 
+(mapcar (function
+        (lambda (func)
+          (autoload func "std11-parse")
+          ))
+       '(std11-lexical-analyze
+         std11-parse-address std11-parse-addresses
+         std11-parse-address-string))
+
+(defun std11-parse-address-string (string)
+  "Parse STRING as mail address. [std11.el]"
+  (std11-parse-address (std11-lexical-analyze string))
+  )
+
+(defun std11-addr-to-string (seq)
+  (mapconcat (function
+             (lambda (token)
+               (if (eq (car token) 'spaces)
+                   ""
+                 (cdr token)
+                 )))
+            seq "")
+  )
+
+(defun std11-address-string (address)
+  (cond ((eq (car address) 'group)
+        (mapconcat (function std11-address-string)
+                   (car (cdr address))
+                   ", ")
+        )
+       ((eq (car address) 'mailbox)
+        (let ((addr (nth 1 address)))
+          (std11-addr-to-string
+           (if (eq (car addr) 'phrase-route-addr)
+               (nth 2 addr)
+             (cdr addr)
+             )
+           )))))
+
+
+;;; @ end
+;;;
+
 ;;; std11.el ends here