emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/gnus/rfc2047.el


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/gnus/rfc2047.el
Date: Sat, 19 Feb 2005 08:24:19 -0500

Index: emacs/lisp/gnus/rfc2047.el
diff -c emacs/lisp/gnus/rfc2047.el:1.18 emacs/lisp/gnus/rfc2047.el:1.19
*** emacs/lisp/gnus/rfc2047.el:1.18     Tue Dec  7 21:56:40 2004
--- emacs/lisp/gnus/rfc2047.el  Sat Feb 19 13:24:16 2005
***************
*** 1,5 ****
  ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages
! ;; Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <address@hidden>
  ;;    MORIOKA Tomohiko <address@hidden>
--- 1,7 ----
  ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages
! 
! ;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
! ;;        Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <address@hidden>
  ;;    MORIOKA Tomohiko <address@hidden>
***************
*** 50,55 ****
--- 52,58 ----
  
  (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,644 ****
--- 642,650 ----
      "=\\?\\([^][\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,686 ****
          (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.
          (save-restriction
            (narrow-to-region e (point))
            (goto-char e)
            (while (re-search-forward "[\n\r]+" nil t)
              (replace-match " "))
            (goto-char (point-max)))
          (when (and (mm-multibyte-p)
                     mail-parse-charset
--- 679,744 ----
          (insert (rfc2047-parse-and-decode
                   (prog1
                       (match-string 0)
!                    (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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]