From: yamaoka Date: Wed, 30 Apr 2003 00:13:01 +0000 (+0000) Subject: * nnheader.el: Enclose T-gnus specific function definitions, e.g. X-Git-Tag: t-gnus-6_15_21-00-quimby~12 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=b1e8b71badea62273983270da6f6878c87d32c90;p=elisp%2Fgnus.git- * nnheader.el: Enclose T-gnus specific function definitions, e.g. `nnheader-detect-coding-region', with `eval-and-compile'. * dgnushack.el: Don't autoload nnheader. --- diff --git a/ChangeLog b/ChangeLog index e873a32..0b03ac1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2003-04-30 Katsumi Yamaoka + + * lisp/nnheader.el: Enclose T-gnus specific function definitions, + e.g. `nnheader-detect-coding-region', with `eval-and-compile'. + + * lisp/dgnushack.el: Don't autoload nnheader. + 2003-04-29 Katsumi Yamaoka * lisp/dgnushack.el: Autoload font-lock and nnheader for XEmacs diff --git a/lisp/dgnushack.el b/lisp/dgnushack.el index 9998f95..968c884 100644 --- a/lisp/dgnushack.el +++ b/lisp/dgnushack.el @@ -525,11 +525,7 @@ Try to re-configure with --with-addpath=FLIM_PATH and run make again. (when (featurep 'xemacs) (autoload 'c-mode "cc-mode" nil t) (autoload 'font-lock-mode "font-lock" nil t) - (autoload 'nnheader-detect-coding-region "nnheader") (autoload 'read-kbd-macro "edmacro" nil t) - (autoload 'std11-extract-addresses-components "nnheader") - (autoload 'std11-fold-regionstd11-unfold-region "nnheader") - (autoload 'std11-narrow-to-field "nnheader") (autoload 'turn-on-font-lock "font-lock" nil t))) (defconst dgnushack-unexporting-files diff --git a/lisp/nnheader.el b/lisp/nnheader.el index b994e58..752bacf 100644 --- a/lisp/nnheader.el +++ b/lisp/nnheader.el @@ -140,212 +140,253 @@ This variable is a substitute for `mm-text-coding-system-for-write'.") (autoload 'gnus-buffer-live-p "gnus-util")) ;; mm-util stuff. -(unless (featurep 'mm-util) - ;; Should keep track of `mm-image-load-path' in mm-util.el. - (defun nnheader-image-load-path (&optional package) - (let (dir result) - (dolist (path load-path (nreverse result)) - (if (file-directory-p - (setq dir (concat (file-name-directory - (directory-file-name path)) - "etc/" (or package "gnus/")))) - (push dir result)) - (push path result)))) - (defalias 'mm-image-load-path 'nnheader-image-load-path) - - ;; Should keep track of `mm-read-coding-system' in mm-util.el. - (defalias 'mm-read-coding-system - (if (or (and (featurep 'xemacs) - (<= (string-to-number emacs-version) 21.1)) - (boundp 'MULE)) - (lambda (prompt &optional default-coding-system) - (read-coding-system prompt)) - 'read-coding-system)) - - ;; Should keep track of `mm-%s' in mm-util.el. - (defalias 'mm-multibyte-string-p - (if (fboundp 'multibyte-string-p) - 'multibyte-string-p - 'ignore)) - (defalias 'mm-encode-coding-string 'encode-coding-string) - (defalias 'mm-decode-coding-string 'decode-coding-string) - - ;; Should keep track of `mm-detect-coding-region' in mm-util.el. - (defun nnheader-detect-coding-region (start end) - "Like 'detect-coding-region' except returning the best one." - (let ((coding-systems - (static-if (boundp 'MULE) - (code-detect-region (point) (point-max)) - (detect-coding-region (point) (point-max))))) - (or (car-safe coding-systems) - coding-systems))) - (defalias 'mm-detect-coding-region 'nnheader-detect-coding-region) - - ;; Should keep track of `mm-detect-mime-charset-region' in mm-util.el. - (defun nnheader-detect-mime-charset-region (start end) - "Detect MIME charset of the text in the region between START and END." - (coding-system-to-mime-charset - (nnheader-detect-coding-region start end))) - (defalias 'mm-detect-mime-charset-region - 'nnheader-detect-mime-charset-region) - - ;; Should keep track of `mm-with-unibyte-buffer' in mm-util.el. - (defmacro nnheader-with-unibyte-buffer (&rest forms) - "Create a temporary buffer, and evaluate FORMS there like `progn'. +(eval-and-compile + (unless (featurep 'mm-util) + ;; Should keep track of `mm-image-load-path' in mm-util.el. + (defun nnheader-image-load-path (&optional package) + (let (dir result) + (dolist (path load-path (nreverse result)) + (if (file-directory-p + (setq dir (concat (file-name-directory + (directory-file-name path)) + "etc/" (or package "gnus/")))) + (push dir result)) + (push path result)))) + (defalias 'mm-image-load-path 'nnheader-image-load-path) + + ;; Should keep track of `mm-read-coding-system' in mm-util.el. + (defalias 'mm-read-coding-system + (if (or (and (featurep 'xemacs) + (<= (string-to-number emacs-version) 21.1)) + (boundp 'MULE)) + (lambda (prompt &optional default-coding-system) + (read-coding-system prompt)) + 'read-coding-system)) + + ;; Should keep track of `mm-%s' in mm-util.el. + (defalias 'mm-multibyte-string-p + (if (fboundp 'multibyte-string-p) + 'multibyte-string-p + 'ignore)) + (defalias 'mm-encode-coding-string 'encode-coding-string) + (defalias 'mm-decode-coding-string 'decode-coding-string) + + ;; Should keep track of `mm-detect-coding-region' in mm-util.el. + (defun nnheader-detect-coding-region (start end) + "Like 'detect-coding-region' except returning the best one." + (let ((coding-systems + (static-if (boundp 'MULE) + (code-detect-region (point) (point-max)) + (detect-coding-region (point) (point-max))))) + (or (car-safe coding-systems) + coding-systems))) + (defalias 'mm-detect-coding-region 'nnheader-detect-coding-region) + + ;; Should keep track of `mm-detect-mime-charset-region' in mm-util.el. + (defun nnheader-detect-mime-charset-region (start end) + "Detect MIME charset of the text in the region between START and END." + (coding-system-to-mime-charset + (nnheader-detect-coding-region start end))) + (defalias 'mm-detect-mime-charset-region + 'nnheader-detect-mime-charset-region) + + ;; Should keep track of `mm-with-unibyte-buffer' in mm-util.el. + (defmacro nnheader-with-unibyte-buffer (&rest forms) + "Create a temporary buffer, and evaluate FORMS there like `progn'. Use unibyte mode for this." - `(let (default-enable-multibyte-characters default-mc-flag) - (with-temp-buffer ,@forms))) - (put 'nnheader-with-unibyte-buffer 'lisp-indent-function 0) - (put 'nnheader-with-unibyte-buffer 'edebug-form-spec '(body)) - (put 'mm-with-unibyte-buffer 'lisp-indent-function 0) - (put 'mm-with-unibyte-buffer 'edebug-form-spec '(body)) - (defalias 'mm-with-unibyte-buffer 'nnheader-with-unibyte-buffer) - - ;; Should keep track of `mm-with-unibyte-current-buffer' in mm-util.el. - (defmacro nnheader-with-unibyte-current-buffer (&rest forms) - "Evaluate FORMS with current current buffer temporarily made unibyte. + `(let (default-enable-multibyte-characters default-mc-flag) + (with-temp-buffer ,@forms))) + (put 'nnheader-with-unibyte-buffer 'lisp-indent-function 0) + (put 'nnheader-with-unibyte-buffer 'edebug-form-spec '(body)) + (put 'mm-with-unibyte-buffer 'lisp-indent-function 0) + (put 'mm-with-unibyte-buffer 'edebug-form-spec '(body)) + (defalias 'mm-with-unibyte-buffer 'nnheader-with-unibyte-buffer) + + ;; Should keep track of `mm-with-unibyte-current-buffer' in mm-util.el. + (defmacro nnheader-with-unibyte-current-buffer (&rest forms) + "Evaluate FORMS with current current buffer temporarily made unibyte. Also bind `default-enable-multibyte-characters' to nil. Equivalent to `progn' in XEmacs" - (let ((multibyte (make-symbol "multibyte")) - (buffer (make-symbol "buffer"))) - (cond ((featurep 'xemacs) - `(let (default-enable-multibyte-characters) - ,@forms)) - ((boundp 'MULE) - `(let ((,multibyte mc-flag) - (,buffer (current-buffer))) - (unwind-protect - (let (default-enable-multibyte-characters default-mc-flag) - (setq mc-flag nil) - ,@forms) - (set-buffer ,buffer) - (setq mc-flag ,multibyte)))) - (t - `(let ((,multibyte enable-multibyte-characters) - (,buffer (current-buffer))) - (unwind-protect - (let (default-enable-multibyte-characters) - (set-buffer-multibyte nil) - ,@forms) - (set-buffer ,buffer) - (set-buffer-multibyte ,multibyte))))))) - (put 'nnheader-with-unibyte-current-buffer 'lisp-indent-function 0) - (put 'nnheader-with-unibyte-current-buffer 'edebug-form-spec '(body)) - (put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0) - (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body)) - (defalias 'mm-with-unibyte-current-buffer - 'nnheader-with-unibyte-current-buffer) - - ;; Should keep track of `mm-with-unibyte' in mm-util.el. - (defmacro nnheader-with-unibyte (&rest forms) - "Eval the FORMS with the default value of `enable-multibyte-characters' + (let ((multibyte (make-symbol "multibyte")) + (buffer (make-symbol "buffer"))) + (cond ((featurep 'xemacs) + `(let (default-enable-multibyte-characters) + ,@forms)) + ((boundp 'MULE) + `(let ((,multibyte mc-flag) + (,buffer (current-buffer))) + (unwind-protect + (let (default-enable-multibyte-characters + default-mc-flag) + (setq mc-flag nil) + ,@forms) + (set-buffer ,buffer) + (setq mc-flag ,multibyte)))) + (t + `(let ((,multibyte enable-multibyte-characters) + (,buffer (current-buffer))) + (unwind-protect + (let (default-enable-multibyte-characters) + (set-buffer-multibyte nil) + ,@forms) + (set-buffer ,buffer) + (set-buffer-multibyte ,multibyte))))))) + (put 'nnheader-with-unibyte-current-buffer 'lisp-indent-function 0) + (put 'nnheader-with-unibyte-current-buffer 'edebug-form-spec '(body)) + (put 'mm-with-unibyte-current-buffer 'lisp-indent-function 0) + (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body)) + (defalias 'mm-with-unibyte-current-buffer + 'nnheader-with-unibyte-current-buffer) + + ;; Should keep track of `mm-with-unibyte' in mm-util.el. + (defmacro nnheader-with-unibyte (&rest forms) + "Eval the FORMS with the default value of `enable-multibyte-characters' nil, ." - `(let (default-enable-multibyte-characters) - ,@forms)) - (put 'nnheader-with-unibyte 'lisp-indent-function 0) - (put 'nnheader-with-unibyte 'edebug-form-spec '(body)) - (put 'mm-with-unibyte 'lisp-indent-function 0) - (put 'mm-with-unibyte 'edebug-form-spec '(body)) - (defalias 'mm-with-unibyte 'nnheader-with-unibyte) - - ;; Should keep track of `mm-guess-mime-charset' in mm-util.el. - (defun nnheader-guess-mime-charset () - "Guess the default MIME charset from the language environment." - (let ((language-info - (and (boundp 'current-language-environment) - (assoc current-language-environment - language-info-alist))) - item) - (cond - ((null language-info) - 'iso-8859-1) - ((setq item - (cadr - (or (assq 'coding-priority language-info) - (assq 'coding-system language-info)))) - (if (fboundp 'coding-system-get) - (or (coding-system-get item 'mime-charset) - item) - item)) - ((setq item (car (last (assq 'charset language-info)))) - (if (eq item 'ascii) - 'iso-8859-1 - (charsets-to-mime-charset (list item)))) - (t - 'iso-8859-1)))) - (defalias 'mm-guess-mime-charset 'nnheader-guess-mime-charset) - - (defalias 'mm-char-int 'char-int) - - ;; Should keep track of the same alias in mm-util.el. - (defalias 'mm-multibyte-p - (static-cond ((and (featurep 'xemacs) (featurep 'mule)) - (lambda nil t)) - ((featurep 'xemacs) - (lambda nil nil)) - ((boundp 'MULE) - (lambda nil mc-flag)) - (t - (lambda nil enable-multibyte-characters)))) - - ;; Should keep track of the same alias in mm-util.el. - (defalias 'mm-make-temp-file - (if (fboundp 'make-temp-file) - 'make-temp-file - (lambda (prefix &optional dir-flag) - (let ((file (expand-file-name - (make-temp-name prefix) - (if (fboundp 'temp-directory) - (temp-directory) - temporary-file-directory)))) - (if dir-flag - (make-directory file)) - file)))) - - ;; Should keep track of `mm-coding-system-p' in mm-util.el. - (defun nnheader-coding-system-p (sym) - "Return non-nil if SYM is a coding system." - (or (and (fboundp 'find-coding-system) (find-coding-system sym)) - (and (fboundp 'coding-system-p) (coding-system-p sym)))) - (defalias 'mm-coding-system-p 'nnheader-coding-system-p)) - -;; mail-parse stuff. -(unless (featurep 'mail-parse) - ;; Should keep track of `rfc2047-narrow-to-field' in rfc2047.el. - (defun-maybe std11-narrow-to-field () - "Narrow the buffer to the header on the current line." - (forward-line 0) - (narrow-to-region (point) - (progn - (std11-field-end) - (when (eolp) (forward-line 1)) - (point))) - (goto-char (point-min))) - (defalias 'mail-header-narrow-to-field 'std11-narrow-to-field) - - ;; Should keep track of `ietf-drums-narrow-to-header' in ietf-drums.el. - (defun mail-narrow-to-head () - "Narrow to the header section in the current buffer." - (narrow-to-region - (goto-char (point-min)) - (if (re-search-forward "^\r?$" nil 1) - (match-beginning 0) - (point-max))) - (goto-char (point-min))) - - ;; Should keep track of `rfc2047-fold-region' in rfc2047.el. - (defun-maybe std11-fold-region (b e) - "Fold long lines in region B to E." - (save-restriction - (narrow-to-region b e) - (goto-char (point-min)) - (let ((break nil) - (qword-break nil) - (first t) - (bol (save-restriction - (widen) - (gnus-point-at-bol)))) - (while (not (eobp)) + `(let (default-enable-multibyte-characters) + ,@forms)) + (put 'nnheader-with-unibyte 'lisp-indent-function 0) + (put 'nnheader-with-unibyte 'edebug-form-spec '(body)) + (put 'mm-with-unibyte 'lisp-indent-function 0) + (put 'mm-with-unibyte 'edebug-form-spec '(body)) + (defalias 'mm-with-unibyte 'nnheader-with-unibyte) + + ;; Should keep track of `mm-guess-mime-charset' in mm-util.el. + (defun nnheader-guess-mime-charset () + "Guess the default MIME charset from the language environment." + (let ((language-info + (and (boundp 'current-language-environment) + (assoc current-language-environment + language-info-alist))) + item) + (cond + ((null language-info) + 'iso-8859-1) + ((setq item + (cadr + (or (assq 'coding-priority language-info) + (assq 'coding-system language-info)))) + (if (fboundp 'coding-system-get) + (or (coding-system-get item 'mime-charset) + item) + item)) + ((setq item (car (last (assq 'charset language-info)))) + (if (eq item 'ascii) + 'iso-8859-1 + (charsets-to-mime-charset (list item)))) + (t + 'iso-8859-1)))) + (defalias 'mm-guess-mime-charset 'nnheader-guess-mime-charset) + + (defalias 'mm-char-int 'char-int) + + ;; Should keep track of the same alias in mm-util.el. + (defalias 'mm-multibyte-p + (static-cond ((and (featurep 'xemacs) (featurep 'mule)) + (lambda nil t)) + ((featurep 'xemacs) + (lambda nil nil)) + ((boundp 'MULE) + (lambda nil mc-flag)) + (t + (lambda nil enable-multibyte-characters)))) + + ;; Should keep track of the same alias in mm-util.el. + (defalias 'mm-make-temp-file + (if (fboundp 'make-temp-file) + 'make-temp-file + (lambda (prefix &optional dir-flag) + (let ((file (expand-file-name + (make-temp-name prefix) + (if (fboundp 'temp-directory) + (temp-directory) + temporary-file-directory)))) + (if dir-flag + (make-directory file)) + file)))) + + ;; Should keep track of `mm-coding-system-p' in mm-util.el. + (defun nnheader-coding-system-p (sym) + "Return non-nil if SYM is a coding system." + (or (and (fboundp 'find-coding-system) (find-coding-system sym)) + (and (fboundp 'coding-system-p) (coding-system-p sym)))) + (defalias 'mm-coding-system-p 'nnheader-coding-system-p)) + + ;; mail-parse stuff. + (unless (featurep 'mail-parse) + ;; Should keep track of `rfc2047-narrow-to-field' in rfc2047.el. + (defun-maybe std11-narrow-to-field () + "Narrow the buffer to the header on the current line." + (forward-line 0) + (narrow-to-region (point) + (progn + (std11-field-end) + (when (eolp) (forward-line 1)) + (point))) + (goto-char (point-min))) + (defalias 'mail-header-narrow-to-field 'std11-narrow-to-field) + + ;; Should keep track of `ietf-drums-narrow-to-header' in ietf-drums.el. + (defun mail-narrow-to-head () + "Narrow to the header section in the current buffer." + (narrow-to-region + (goto-char (point-min)) + (if (re-search-forward "^\r?$" nil 1) + (match-beginning 0) + (point-max))) + (goto-char (point-min))) + + ;; Should keep track of `rfc2047-fold-region' in rfc2047.el. + (defun-maybe std11-fold-region (b e) + "Fold long lines in region B to E." + (save-restriction + (narrow-to-region b e) + (goto-char (point-min)) + (let ((break nil) + (qword-break nil) + (first t) + (bol (save-restriction + (widen) + (gnus-point-at-bol)))) + (while (not (eobp)) + (when (and (or break qword-break) + (> (- (point) bol) 76)) + (goto-char (or break qword-break)) + (setq break nil + qword-break nil) + (if (looking-at "[ \t]") + (insert "\n") + (insert "\n ")) + (setq bol (1- (point))) + ;; Don't break before the first non-LWSP characters. + (skip-chars-forward " \t") + (unless (eobp) + (forward-char 1))) + (cond + ((eq (char-after) ?\n) + (forward-char 1) + (setq bol (point) + break nil + qword-break nil) + (skip-chars-forward " \t") + (unless (or (eobp) (eq (char-after) ?\n)) + (forward-char 1))) + ((eq (char-after) ?\r) + (forward-char 1)) + ((memq (char-after) '(? ?\t)) + (skip-chars-forward " \t") + (if first + ;; Don't break just after the header name. + (setq first nil) + (setq break (1- (point))))) + ((not break) + (if (not (looking-at "=\\?[^=]")) + (if (eq (char-after) ?=) + (forward-char 1) + (skip-chars-forward "^ \t\n\r=")) + (setq qword-break (point)) + (skip-chars-forward "^ \t\n\r"))) + (t + (skip-chars-forward "^ \t\n\r")))) (when (and (or break qword-break) (> (- (point) bol) 76)) (goto-char (or break qword-break)) @@ -358,147 +399,108 @@ nil, ." ;; Don't break before the first non-LWSP characters. (skip-chars-forward " \t") (unless (eobp) - (forward-char 1))) - (cond - ((eq (char-after) ?\n) - (forward-char 1) - (setq bol (point) - break nil - qword-break nil) - (skip-chars-forward " \t") - (unless (or (eobp) (eq (char-after) ?\n)) - (forward-char 1))) - ((eq (char-after) ?\r) - (forward-char 1)) - ((memq (char-after) '(? ?\t)) - (skip-chars-forward " \t") - (if first - ;; Don't break just after the header name. - (setq first nil) - (setq break (1- (point))))) - ((not break) - (if (not (looking-at "=\\?[^=]")) - (if (eq (char-after) ?=) - (forward-char 1) - (skip-chars-forward "^ \t\n\r=")) - (setq qword-break (point)) - (skip-chars-forward "^ \t\n\r"))) - (t - (skip-chars-forward "^ \t\n\r")))) - (when (and (or break qword-break) - (> (- (point) bol) 76)) - (goto-char (or break qword-break)) - (setq break nil - qword-break nil) - (if (looking-at "[ \t]") - (insert "\n") - (insert "\n ")) - (setq bol (1- (point))) - ;; Don't break before the first non-LWSP characters. - (skip-chars-forward " \t") - (unless (eobp) - (forward-char 1)))))) - - ;; Should keep track of `rfc2047-fold-field' in rfc2047.el. - (defun-maybe std11-fold-field () - "Fold the current line." - (save-excursion - (save-restriction - (std11-narrow-to-field) - (std11-fold-region (point-min) (point-max))))) - - (defalias 'mail-header-fold-field 'std11-fold-field) + (forward-char 1)))))) - ;; Should keep track of `rfc2047-unfold-region' in rfc2047.el. - (defun-maybe std11-unfold-region (b e) - "Unfold lines in region B to E." - (save-restriction - (narrow-to-region b e) - (goto-char (point-min)) - (let ((bol (save-restriction - (widen) - (gnus-point-at-bol))) - (eol (gnus-point-at-eol))) - (forward-line 1) - (while (not (eobp)) - (if (and (looking-at "[ \t]") - (< (- (gnus-point-at-eol) bol) 76)) - (delete-region eol (progn - (goto-char eol) - (skip-chars-forward "\r\n") - (point))) - (setq bol (gnus-point-at-bol))) - (setq eol (gnus-point-at-eol)) - (forward-line 1))))) - - ;; Should keep track of `rfc2047-unfold-field' in rfc2047.el. - (defun-maybe std11-unfold-field () - "Fold the current line." - (save-excursion - (save-restriction - (std11-narrow-to-field) - (std11-unfold-region (point-min) (point-max))))) + ;; Should keep track of `rfc2047-fold-field' in rfc2047.el. + (defun-maybe std11-fold-field () + "Fold the current line." + (save-excursion + (save-restriction + (std11-narrow-to-field) + (std11-fold-region (point-min) (point-max))))) - (defalias 'mail-header-unfold-field 'std11-unfold-field) + (defalias 'mail-header-fold-field 'std11-fold-field) - ;; This is the original function in T-gnus. - (defun-maybe std11-extract-addresses-components (string) - "Extract a list of full name and canonical address from STRING. Each + ;; Should keep track of `rfc2047-unfold-region' in rfc2047.el. + (defun-maybe std11-unfold-region (b e) + "Unfold lines in region B to E." + (save-restriction + (narrow-to-region b e) + (goto-char (point-min)) + (let ((bol (save-restriction + (widen) + (gnus-point-at-bol))) + (eol (gnus-point-at-eol))) + (forward-line 1) + (while (not (eobp)) + (if (and (looking-at "[ \t]") + (< (- (gnus-point-at-eol) bol) 76)) + (delete-region eol (progn + (goto-char eol) + (skip-chars-forward "\r\n") + (point))) + (setq bol (gnus-point-at-bol))) + (setq eol (gnus-point-at-eol)) + (forward-line 1))))) + + ;; Should keep track of `rfc2047-unfold-field' in rfc2047.el. + (defun-maybe std11-unfold-field () + "Fold the current line." + (save-excursion + (save-restriction + (std11-narrow-to-field) + (std11-unfold-region (point-min) (point-max))))) + + (defalias 'mail-header-unfold-field 'std11-unfold-field) + + ;; This is the original function in T-gnus. + (defun-maybe std11-extract-addresses-components (string) + "Extract a list of full name and canonical address from STRING. Each element looks like a list of the form (FULL-NAME CANONICAL-ADDRESS). If no name can be extracted, FULL-NAME will be nil." - (when string - (let (addresses) - (dolist (structure (std11-parse-addresses-string - (std11-unfold-string string)) - addresses) - (push (list (std11-full-name-string structure) - (std11-address-string structure)) - addresses)) - (nreverse addresses)))) - - ;; Should keep track of `ietf-drums-parse-addresses' in ietf-drums.el. - (defun mail-header-parse-addresses (string) - "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs." - (mapcar (function - (lambda (components) - (cons (nth 1 components) (car components)))) - (std11-extract-addresses-components string))) - - ;; Should keep track of `rfc2047-field-value' in rfc2047.el. - (defun std11-field-value (&optional dont-include-last-newline) - "Return the value of the field at point. If the optional argument is + (when string + (let (addresses) + (dolist (structure (std11-parse-addresses-string + (std11-unfold-string string)) + addresses) + (push (list (std11-full-name-string structure) + (std11-address-string structure)) + addresses)) + (nreverse addresses)))) + + ;; Should keep track of `ietf-drums-parse-addresses' in ietf-drums.el. + (defun mail-header-parse-addresses (string) + "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs." + (mapcar (function + (lambda (components) + (cons (nth 1 components) (car components)))) + (std11-extract-addresses-components string))) + + ;; Should keep track of `rfc2047-field-value' in rfc2047.el. + (defun std11-field-value (&optional dont-include-last-newline) + "Return the value of the field at point. If the optional argument is given, the return value will not contain the last newline." - (let ((begin (point)) - (inhibit-point-motion-hooks t) - start value) - (beginning-of-line) - (unless (eobp) - (while (and (memq (char-after) '(?\t ?\ )) - (zerop (forward-line -1)))) - (when (looking-at "[^\t\n ]+:[\t\n ]+") - (goto-char (setq start (match-end 0))) - (forward-line 1) + (let ((begin (point)) + (inhibit-point-motion-hooks t) + start value) + (beginning-of-line) + (unless (eobp) (while (and (memq (char-after) '(?\t ?\ )) - (zerop (forward-line 1)))) - (when dont-include-last-newline - (skip-chars-backward "\t\n " start)) - (setq value (buffer-substring start (point))))) - (goto-char begin) - value)) - - (defalias 'mail-header-field-value 'std11-field-value)) - -;; ietf-drums stuff. -(unless (featurep 'ietf-drums) - ;; Should keep track of `ietf-drums-unfold-fws' in ietf-drums.el. - (defun nnheader-unfold-fws () - "Unfold folding white space in the current buffer." - (goto-char (point-min)) - (while (re-search-forward "[ \t]*\n[ \t]+" nil t) - (replace-match " " t t)) - (goto-char (point-min))) + (zerop (forward-line -1)))) + (when (looking-at "[^\t\n ]+:[\t\n ]+") + (goto-char (setq start (match-end 0))) + (forward-line 1) + (while (and (memq (char-after) '(?\t ?\ )) + (zerop (forward-line 1)))) + (when dont-include-last-newline + (skip-chars-backward "\t\n " start)) + (setq value (buffer-substring start (point))))) + (goto-char begin) + value)) + + (defalias 'mail-header-field-value 'std11-field-value)) + + ;; ietf-drums stuff. + (unless (featurep 'ietf-drums) + ;; Should keep track of `ietf-drums-unfold-fws' in ietf-drums.el. + (defun nnheader-unfold-fws () + "Unfold folding white space in the current buffer." + (goto-char (point-min)) + (while (re-search-forward "[ \t]*\n[ \t]+" nil t) + (replace-match " " t t)) + (goto-char (point-min))) - (defalias 'ietf-drums-unfold-fws 'nnheader-unfold-fws)) + (defalias 'ietf-drums-unfold-fws 'nnheader-unfold-fws))) ;;; Header access macros.