Mercurial > hg > xemacs-beta
diff lisp/tl/tl-822.el @ 4:b82b59fe008d r19-15b3
Import from CVS: tag r19-15b3
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:46:56 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/tl/tl-822.el Mon Aug 13 08:46:56 2007 +0200 @@ -0,0 +1,148 @@ +;;; tl-822.el --- RFC 822 parser for GNU Emacs + +;; Copyright (C) 1995,1996 Free Software Foundation, Inc. + +;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> +;; Keywords: mail, news, RFC 822 + +;; This file is part of tl (Tiny Library). + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2, or (at +;; your option) any later version. + +;; This program is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with This program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Code: + +(require 'tl-seq) +(require 'tl-str) +(require 'std11) + + +(defconst rfc822/RCS-ID + "$Id: tl-822.el,v 1.1.1.1 1996/12/18 03:55:31 steve Exp $") +(defconst rfc822/version (get-version-string rfc822/RCS-ID)) + + +;;; @ header +;;; + +(defalias 'rfc822/narrow-to-header 'std11-narrow-to-header) +(defalias 'rfc822/get-header-string 'std11-header-string) +(defalias 'rfc822/get-header-string-except 'std11-header-string-except) +(defalias 'rfc822/get-field-names 'std11-collect-field-names) + + +;;; @ field +;;; + +(defalias `rfc822/field-end 'std11-field-end) +(defalias 'rfc822/get-field-body 'std11-field-body) +(defalias 'rfc822/get-field-bodies 'std11-field-bodies) + + +;;; @ quoting +;;; + +(defconst rfc822/linear-white-space-regexp "\\(\n?[ \t]\\)+") +(defconst rfc822/quoted-pair-regexp "\\\\.") +(defconst rfc822/non-qtext-char-list '(?\" ?\\ ?\r ?\n)) +(defconst rfc822/qtext-regexp + (concat "[^" (char-list-to-string rfc822/non-qtext-char-list) "]")) +(defconst rfc822/quoted-string-regexp + (concat "\"" + (regexp-* + (regexp-or rfc822/qtext-regexp rfc822/quoted-pair-regexp) + ) + "\"")) + +(defun rfc822/wrap-as-quoted-string (str) + "Wrap string STR as RFC 822 quoted-string. [tl-822.el]" + (concat "\"" + (mapconcat (function + (lambda (chr) + (if (memq chr rfc822/non-qtext-char-list) + (concat "\\" (char-to-string chr)) + (char-to-string chr) + ) + )) str "") + "\"")) + +(defun rfc822/strip-quoted-pair (str) + (let ((dest "") + (i 0) + (len (length str)) + chr flag) + (while (< i len) + (setq chr (elt 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 rfc822/strip-quoted-string (str) + (rfc822/strip-quoted-pair + (let ((max (- (length str) 1)) + ) + (if (and (eq (elt str 0) ?\") + (eq (elt str max) ?\") + ) + (substring str 1 max) + str) + ))) + + +;;; @ unfolding +;;; + +(defalias 'rfc822/unfolding-string 'std11-unfold-string) + + +;;; @ lexical analyze +;;; + +(defalias 'rfc822/lexical-analyze 'std11-lexical-analyze) + + +;;; @ parser +;;; + +(defalias 'rfc822/parse-address 'std11-parse-address) +(defalias 'rfc822/parse-addresses 'std11-parse-addresses) +(defalias 'rfc822/address-string 'std11-address-string) +(defalias 'rfc822/full-name-string 'std11-full-name-string) + +(defun rfc822/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. [tl-822.el]" + (let* ((structure (car (std11-parse-address-string string))) + (phrase (rfc822/full-name-string structure)) + (address (rfc822/address-string structure)) + ) + (list phrase address) + )) + + +;;; @ end +;;; + +(provide 'tl-822) + +;;; tl-822.el ends here