Mercurial > hg > xemacs-beta
comparison lisp/gnus/mailheader.el @ 98:0d2f883870bc r20-1b1
Import from CVS: tag r20-1b1
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:13:56 +0200 |
parents | 131b0175ea99 |
children | 360340f9fd5f |
comparison
equal
deleted
inserted
replaced
97:498bf5da1c90 | 98:0d2f883870bc |
---|---|
34 ;; of headers. | 34 ;; of headers. |
35 | 35 |
36 ;; The car of each element in the message-header alist is a symbol whose | 36 ;; The car of each element in the message-header alist is a symbol whose |
37 ;; print name is the name of the header, in all lower-case. The cdr of an | 37 ;; print name is the name of the header, in all lower-case. The cdr of an |
38 ;; element depends on the operation. After extracting headers from a | 38 ;; element depends on the operation. After extracting headers from a |
39 ;; messge, it is a string, the value of the header. An extracted set of | 39 ;; message, it is a string, the value of the header. An extracted set of |
40 ;; headers may be parsed further, which may turn it into a list, whose car | 40 ;; headers may be parsed further, which may turn it into a list, whose car |
41 ;; is the original value and whose subsequent elements depend on the | 41 ;; is the original value and whose subsequent elements depend on the |
42 ;; header. For formatting, it is evaluated to obtain the strings to be | 42 ;; header. For formatting, it is evaluated to obtain the strings to be |
43 ;; inserted. For merging, one set of headers consists of strings, while | 43 ;; inserted. For merging, one set of headers consists of strings, while |
44 ;; the other set will be evaluated with the symbols in the first set of | 44 ;; the other set will be evaluated with the symbols in the first set of |
70 (while (progn (forward-char) (> (skip-chars-forward " \t") 0)) | 70 (while (progn (forward-char) (> (skip-chars-forward " \t") 0)) |
71 (push (buffer-substring (point) (progn (end-of-line) (point))) | 71 (push (buffer-substring (point) (progn (end-of-line) (point))) |
72 value)) | 72 value)) |
73 (push (if (cdr value) | 73 (push (if (cdr value) |
74 (cons header (mapconcat #'identity (nreverse value) " ")) | 74 (cons header (mapconcat #'identity (nreverse value) " ")) |
75 (cons header (car value))) | 75 (cons header (car value))) |
76 message-headers))) | 76 message-headers))) |
77 (goto-char top) | 77 (goto-char top) |
78 (nreverse message-headers))) | 78 (nreverse message-headers))) |
79 | 79 |
80 (defun mail-header-extract-no-properties () | 80 (defun mail-header-extract-no-properties () |
106 | 106 |
107 (defsubst mail-header (header &optional header-alist) | 107 (defsubst mail-header (header &optional header-alist) |
108 "Return the value associated with header HEADER in HEADER-ALIST. | 108 "Return the value associated with header HEADER in HEADER-ALIST. |
109 If the value is a string, it is the original value of the header. If the | 109 If the value is a string, it is the original value of the header. If the |
110 value is a list, its first element is the original value of the header, | 110 value is a list, its first element is the original value of the header, |
111 with any subsequent elements bing the result of parsing the value. | 111 with any subsequent elements being the result of parsing the value. |
112 If HEADER-ALIST is nil, the dynamically bound variable `headers' is used." | 112 If HEADER-ALIST is nil, the dynamically bound variable `headers' is used." |
113 (cdr (assq header (or header-alist headers)))) | 113 (cdr (assq header (or header-alist headers)))) |
114 | 114 |
115 (defun mail-header-set (header value &optional header-alist) | 115 (defun mail-header-set (header value &optional header-alist) |
116 "Set the value associated with header HEADER to VALUE in HEADER-ALIST. | 116 "Set the value associated with header HEADER to VALUE in HEADER-ALIST. |
117 HEADER-ALIST defaults to the dynamically bound variable `headers' if nil. | 117 HEADER-ALIST defaults to the dynamically bound variable `headers' if nil. |
118 See `mail-header' for the semantics of VALUE." | 118 See `mail-header' for the semantics of VALUE." |
119 (let* ((alist (or header-alist headers)) | 119 (let* ((alist (or header-alist headers)) |
120 (entry (assq header alist))) | 120 (entry (assq header alist))) |
121 (if entry | 121 (if entry |
122 (setf (cdr entry) value) | 122 (setf (cdr entry) value) |
123 (nconc alist (list (cons header value))))) | 123 (nconc alist (list (cons header value))))) |
124 value) | 124 value) |
125 | 125 |
126 (defsetf mail-header (header &optional header-alist) (value) | 126 (defsetf mail-header (header &optional header-alist) (value) |
127 `(mail-header-set ,header ,value ,header-alist)) | 127 `(mail-header-set ,header ,value ,header-alist)) |
128 | 128 |
159 A key of nil has as its value a list of defaulted headers to ignore." | 159 A key of nil has as its value a list of defaulted headers to ignore." |
160 (let ((ignore (append (cdr (assq nil format-rules)) | 160 (let ((ignore (append (cdr (assq nil format-rules)) |
161 (mapcar #'car format-rules)))) | 161 (mapcar #'car format-rules)))) |
162 (dolist (rule format-rules) | 162 (dolist (rule format-rules) |
163 (let* ((header (car rule)) | 163 (let* ((header (car rule)) |
164 (value (mail-header header))) | 164 (value (mail-header header))) |
165 (cond ((null header) 'ignore) | 165 (cond ((null header) 'ignore) |
166 ((eq header t) | 166 ((eq header t) |
167 (dolist (defaulted headers) | 167 (dolist (defaulted headers) |
168 (unless (memq (car defaulted) ignore) | 168 (unless (memq (car defaulted) ignore) |
169 (let* ((header (car defaulted)) | 169 (let* ((header (car defaulted)) |
170 (value (cdr defaulted))) | 170 (value (cdr defaulted))) |
171 (if (cdr rule) | 171 (if (cdr rule) |
172 (funcall (cdr rule) header value) | 172 (funcall (cdr rule) header value) |
173 (funcall mail-header-format-function header value)))))) | 173 (funcall mail-header-format-function header value)))))) |
174 (value | 174 (value |
175 (if (cdr rule) | 175 (if (cdr rule) |
176 (funcall (cdr rule) header value) | 176 (funcall (cdr rule) header value) |
177 (funcall mail-header-format-function header value)))))) | 177 (funcall mail-header-format-function header value)))))) |
178 (insert "\n"))) | 178 (insert "\n"))) |
179 | 179 |
180 (provide 'mailheader) | 180 (provide 'mailheader) |
181 | 181 |
182 ;;; mail-header.el ends here | 182 ;;; mail-header.el ends here |