;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Keywords: mail, news, RFC 822, STD 11
-;; Version: $Id: std11.el,v 0.24 1996-08-30 06:11:58 morioka Exp $
+;; Version: $Id: std11.el,v 0.33 1996-09-14 08:42:39 morioka Exp $
-;; This file is part of tl (Tiny Library).
+;; This file is part of MU (Message Utilities).
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
(buffer-substring-no-properties (match-end 0) (std11-field-end))
)))))
+(defun std11-find-field-body (field-names &optional boundary)
+ "Return the first found field-body specified by 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)
+ field-name)
+ (catch 'tag
+ (while (setq field-name (car field-names))
+ (goto-char (point-min))
+ (if (re-search-forward (concat "^" field-name ":[ \t]*") nil t)
+ (throw 'tag
+ (buffer-substring-no-properties
+ (match-end 0) (std11-field-end)))
+ )
+ (setq field-names (cdr field-names))
+ ))))))
+
(defun std11-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
dest))))
+;;; @ quoted-string
+;;;
+
+(defconst std11-non-qtext-char-list '(?\" ?\\ ?\r ?\n))
+
+(defun std11-wrap-as-quoted-string (string)
+ "Wrap STRING as RFC 822 quoted-string. [std11.el]"
+ (concat "\""
+ (mapconcat (function
+ (lambda (chr)
+ (if (memq chr std11-non-qtext-char-list)
+ (concat "\\" (char-to-string chr))
+ (char-to-string chr)
+ )
+ )) string "")
+ "\""))
+
+(defun std11-strip-quoted-pair (str)
+ (let ((dest "")
+ (i 0)
+ (len (length str))
+ chr flag)
+ (while (< i len)
+ (setq chr (aref str i))
+ (if (or flag (not (eq chr ?\\)))
+ (progn
+ (setq dest (concat dest (char-to-string chr)))
+ (setq flag nil)
+ )
+ (setq flag t)
+ )
+ (setq i (+ i 1))
+ )
+ dest))
+
+(defun std11-strip-quoted-string (string)
+ "Strip quoted-string STRING. [std11.el]"
+ (std11-strip-quoted-pair
+ (let ((max (1- (length string))))
+ (if (and (eq (aref string 0) ?\")
+ (eq (aref string max) ?\")
+ )
+ (substring string 1 max)
+ string)
+ )))
+
+
;;; @ composer
;;;
(std11-parse-addresses (std11-lexical-analyze string))
)
+(defun std11-extract-address-components (string)
+ "Extract full name and canonical address from STRING.
+Returns a list of the form (FULL-NAME CANONICAL-ADDRESS).
+If no name can be extracted, FULL-NAME will be nil. [std11.el]"
+ (let* ((structure (car (std11-parse-address-string
+ (std11-unfold-string string))))
+ (phrase (std11-full-name-string structure))
+ (address (std11-address-string structure))
+ )
+ (list phrase address)
+ ))
+
(provide 'std11)
(mapcar (function