+(defun std11-full-name-string (address)
+ "Return string of full-name part from parsed ADDRESS of RFC 822.
+\[std11.el]"
+ (cond ((eq (car address) 'group)
+ (mapconcat (function
+ (lambda (token)
+ (cdr token)
+ ))
+ (nth 1 address) "")
+ )
+ ((eq (car address) 'mailbox)
+ (let ((addr (nth 1 address))
+ (comment (nth 2 address))
+ phrase)
+ (if (eq (car addr) 'phrase-route-addr)
+ (setq phrase (mapconcat (function
+ (lambda (token)
+ (cdr token)
+ ))
+ (nth 1 addr) ""))
+ )
+ (or phrase comment)
+ ))))
+
+
+;;; @ parser
+;;;
+
+(defun std11-parse-address-string (string)
+ "Parse STRING as mail address. [std11.el]"
+ (std11-parse-address (std11-lexical-analyze string))
+ )
+
+(defun std11-parse-addresses-string (string)
+ "Parse STRING as mail address list. [std11.el]"
+ (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
+ (lambda (func)
+ (autoload func "std11-parse")
+ ))
+ '(std11-lexical-analyze
+ std11-parse-address std11-parse-addresses
+ std11-parse-address-string))
+