diff options
author | Miles Bader <miles@gnu.org> | 2005-02-19 13:24:16 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2005-02-19 13:24:16 +0000 |
commit | 270a576a4222c76b9483a322769fc4d3d2e29a82 (patch) | |
tree | e0be8d073df1534be0a9304b1c5418a64e24e45e /lisp/gnus/rfc2047.el | |
parent | 2511035dc74e5637fb020eefdb193f3dd3e810b8 (diff) | |
download | emacs-270a576a4222c76b9483a322769fc4d3d2e29a82.tar.gz |
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-111
Merge from gnus--rel--5.10
Patches applied:
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-17
- miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-19
Update from CVS
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-20
Merge from emacs--cvs-trunk--0
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-21
More work on moving images to etc/images
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-22
Update from CVS
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-23
Fix errors with image-file installation
2005-02-19 Katsumi Yamaoka <yamaoka@jpl.org>
* lisp/gnus/gnus-msg.el (gnus-copy-article-buffer): Quote decoded words
containing special characters.
* lisp/gnus/gnus-sum.el (gnus-summary-edit-article): Ditto.
* lisp/gnus/mml.el (mime-to-mml): Ditto.
* lisp/gnus/rfc2047.el (rfc2047-encode-parameter): Use ietf-drums-tspecials.
(rfc2047-quote-decoded-words-containing-tspecials): New variable.
(rfc2047-decode-region): Quote decoded words containing special
characters when rfc2047-quote-decoded-words-containing-tspecials
is non-nil.
2005-02-16 Teodor Zlatanov <tzz@lifelogs.com>
* lisp/gnus/gnus-registry.el (gnus-registry-delete-group): minor bug fix
* lisp/gnus/gnus.el (gnus-install-group-spam-parameters): Doc fix.
2005-02-15 Simon Josefsson <jas@extundo.com>
* lisp/gnus/nnimap.el (nnimap-debug): Doc fix.
* lisp/gnus/imap.el (imap-debug): Doc fix.
2005-02-14 Reiner Steib <Reiner.Steib@gmx.de>
* lisp/gnus/gnus-group.el (gnus-group-make-doc-group): Mention prefix
argument in doc string. Make query for type more clear.
Diffstat (limited to 'lisp/gnus/rfc2047.el')
-rw-r--r-- | lisp/gnus/rfc2047.el | 66 |
1 files changed, 62 insertions, 4 deletions
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el index e6461bf2627..6086f422abd 100644 --- a/lisp/gnus/rfc2047.el +++ b/lisp/gnus/rfc2047.el @@ -1,5 +1,7 @@ ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages -;; Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. + +;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> ;; MORIOKA Tomohiko <morioka@jaist.ac.jp> @@ -50,6 +52,7 @@ Value is what BODY returns." (require 'qp) (require 'mm-util) +(require 'ietf-drums) ;; Fixme: Avoid this (used for mail-parse-charset) mm dependence on gnus. (require 'mail-prsvr) (require 'base64) @@ -639,6 +642,9 @@ By default, the region is treated as containing addresses (see "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\ \\?\\([!->@-~ +]*\\)\\?=")) +(defvar rfc2047-quote-decoded-words-containing-tspecials nil + "If non-nil, quote decoded words containing special characters.") + ;; Fixme: This should decode in place, not cons intermediate strings. ;; Also check whether it needs to worry about delimiting fields like ;; encoding. @@ -673,14 +679,66 @@ By default, the region is treated as containing addresses (see (insert (rfc2047-parse-and-decode (prog1 (match-string 0) - (delete-region (match-beginning 0) (match-end 0))))) - ;; Remove newlines between decoded words, though such things - ;; essentially must not be there. + (delete-region e (match-end 0))))) + (while (looking-at rfc2047-encoded-word-regexp) + (insert (rfc2047-parse-and-decode + (prog1 + (match-string 0) + (delete-region (point) (match-end 0)))))) (save-restriction (narrow-to-region e (point)) (goto-char e) + ;; Remove newlines between decoded words, though such + ;; things essentially must not be there. (while (re-search-forward "[\n\r]+" nil t) (replace-match " ")) + ;; Quote decoded words if there are special characters + ;; which might violate RFC2822. + (when (and rfc2047-quote-decoded-words-containing-tspecials + (let ((regexp (car (rassq + 'address-mime + rfc2047-header-encoding-alist)))) + (when regexp + (save-restriction + (widen) + (beginning-of-line) + (while (and (memq (char-after) '(? ?\t)) + (zerop (forward-line -1)))) + (looking-at regexp))))) + (let (quoted) + (goto-char e) + (skip-chars-forward " \t") + (setq start (point)) + (setq quoted (eq (char-after) ?\")) + (goto-char (point-max)) + (skip-chars-backward " \t") + (if (setq quoted (and quoted + (> (point) (1+ start)) + (eq (char-before) ?\"))) + (progn + (backward-char) + (setq start (1+ start) + end (point-marker))) + (setq end (point-marker))) + (goto-char start) + (while (search-forward "\"" end t) + (when (prog2 + (backward-char) + (zerop (% (skip-chars-backward "\\\\") 2)) + (goto-char (match-beginning 0))) + (insert "\\")) + (forward-char)) + (when (and (not quoted) + (progn + (goto-char start) + (re-search-forward + (concat "[" ietf-drums-tspecials "]") + end t))) + (goto-char start) + (insert "\"") + (goto-char end) + (insert "\"")) + (set-marker end nil))) (goto-char (point-max))) (when (and (mm-multibyte-p) mail-parse-charset |