(rfc2231-parse-string): Add missing semicolons to segmented lines of parameter
authorKatsumi Yamaoka <yamaoka@jpl.org>
Fri, 3 Feb 2006 08:05:45 +0000 (08:05 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Fri, 3 Feb 2006 08:05:45 +0000 (08:05 +0000)
 value to cope with Thunderbird 1.5 bug
 (cf. https://bugzilla.mozilla.org/show_bug.cgi?id=323318).
 Suggested by ARISAWA Akihiro <ari(at)mbf.ocn.ne.jp>.
(rfc2231-encode-string): Don't make lines exceeding 76 column.

lisp/ChangeLog
lisp/rfc2231.el

index 371b377..27eb3d3 100644 (file)
@@ -1,3 +1,11 @@
+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
index 14a9186..fb2d070 100644 (file)
@@ -1,7 +1,7 @@
 ;;; 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.
@@ -53,6 +53,10 @@ The list will be on the form
          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)))
@@ -191,6 +195,7 @@ These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"."
        (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)
@@ -209,24 +214,30 @@ These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"."
       (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))
@@ -235,12 +246,12 @@ These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"."
            (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)