+2006-02-03 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2231.el (rfc2231-parse-string): Add missing semicolons to
+ segmented lines of parameter value to cope with Thunderbird 1.5
+ bug (cf. https://bugzilla.mozilla.org/show_bug.cgi?id=323318).
+ Suggested by ARISAWA Akihiro <ari@mbf.ocn.ne.jp>.
+ (rfc2231-encode-string): Don't make lines exceeding 76 column.
+
2006-02-01 Max Froumentin <max@lapin-bleu.net> (tiny change)
* mml.el (mml-generate-mime-1): Correct the order of inline signed
;;; rfc2231.el --- Functions for decoding rfc2231 headers
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005,
+;; 2006 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; This file is part of GNU Emacs.
display-name mailbox c display-string parameters
attribute value type subtype number encoded
prev-attribute prev-encoded)
+ ;; Some mailer (e.g. Thunderbird 1.5) doesn't terminate each
+ ;; line with semicolon when folding a long parameter value.
+ (while (string-match "\\([^\t\n\r ;]\\)[\t ]*\r?\n[\t ]+" string)
+ (setq string (replace-match "\\1;\n " nil nil string)))
(ietf-drums-init (mail-header-remove-whitespace
(mail-header-remove-comments string)))
(let ((table (copy-syntax-table ietf-drums-syntax-table)))
(special (ietf-drums-token-to-list "*'%\n\t"))
(ascii (ietf-drums-token-to-list ietf-drums-text-token))
(num -1)
+ (limit (- 74 (length param)))
spacep encodep charsetp charset broken)
(with-temp-buffer
(insert value)
(when charsetp
(setq charset (mm-encode-body)))
(cond
- ((or encodep charsetp)
+ ((or encodep charsetp
+ (progn
+ (end-of-line)
+ (> (current-column) (if spacep (- limit 2) limit))))
+ (setq limit (- limit 6))
(goto-char (point-min))
+ (insert (symbol-name (or charset 'us-ascii)) "''")
(while (not (eobp))
- (when (> (current-column) 60)
- (insert ";\n")
- (setq broken t))
(if (or (not (memq (following-char) ascii))
(memq (following-char) control)
(memq (following-char) tspecial)
(memq (following-char) special)
(eq (following-char) ? ))
(progn
+ (when (>= (current-column) (1- limit))
+ (insert ";\n")
+ (setq broken t))
(insert "%" (format "%02x" (following-char)))
(delete-char 1))
+ (when (> (current-column) limit)
+ (insert ";\n")
+ (setq broken t))
(forward-char 1)))
(goto-char (point-min))
- (insert (symbol-name (or charset 'us-ascii)) "''")
- (goto-char (point-min))
(if (not broken)
(insert param "*=")
(while (not (eobp))
(forward-line 1))))
(spacep
(goto-char (point-min))
- (insert param "=\"")
+ (insert "\n " param "=\"")
(goto-char (point-max))
(insert "\""))
(t
(goto-char (point-min))
- (insert param "=")))
+ (insert "\n " param "=")))
(buffer-string))))
(provide 'rfc2231)