(eval-and-compile
(eval
- '(if (not (fboundp 'base64-encode-string))
- (require 'base64))))
+ '(unless (fboundp 'base64-decode-string)
+ (require 'base64))))
+
(require 'qp)
(require 'mm-util)
-(require 'drums)
+(require 'ietf-drums)
(defvar rfc2047-default-charset 'iso-8859-1
"Default MIME charset -- does not need encoding.")
(iso-8859-3 . Q)
(iso-8859-4 . Q)
(iso-8859-5 . B)
- (koi8-r . Q)
+ (koi8-r . B)
(iso-8859-7 . Q)
(iso-8859-8 . Q)
(iso-8859-9 . Q)
(rfc2047-encode-region (point-min) (point-max)))
;; Hm.
(t))))
- (goto-char (point-max))))))))
+ (goto-char (point-max)))))
+ (when rfc2047-default-charset
+ (encode-coding-region (point-min) (point-max)
+ rfc2047-default-charset)))))
(defun rfc2047-encodable-p ()
"Say whether the current (narrowed) buffer contains characters that need encoding."
(let ((charsets (mapcar
'mm-mule-charset-to-mime-charset
- (find-charset-region (point-min) (point-max))))
+ (mm-find-charset-region (point-min) (point-max))))
(cs (list 'us-ascii rfc2047-default-charset))
found)
(while charsets
found))
(defun rfc2047-dissect-region (b e)
- "Dissect the region between B and E."
+ "Dissect the region between B and E into words."
(let (words)
(save-restriction
(narrow-to-region b e)
(goto-char (point-min))
- (while (re-search-forward (concat "[^" drums-tspecials " \t\n]+") nil t)
+ (while (re-search-forward
+ (concat "[^" ietf-drums-tspecials " \t\n]+") nil t)
(push
(list (match-beginning 0) (match-end 0)
- (car
- (delq 'ascii
- (find-charset-region (match-beginning 0)
- (match-end 0)))))
+ (car (delq 'ascii (mm-find-charset-region
+ (match-beginning 0) (match-end 0)))))
words))
words)))
(pop alist))
(goto-char (point-min))
(while (not (eobp))
- (forward-char 64)
- (search-backward "=" nil (- (point) 2))
+ (goto-char (min (point-max) (+ 64 (point))))
+ (search-backward "=" (- (point) 2) t)
(unless (eobp)
(insert "\n")))))))
(prog1
(match-string 0)
(delete-region (match-beginning 0) (match-end 0)))))
- (when (mm-multibyte-p)
+ (when (and (mm-multibyte-p) rfc2047-default-charset)
(mm-decode-coding-region b e rfc2047-default-charset))
(setq b (point)))
- (when (mm-multibyte-p)
+ (when (and (mm-multibyte-p)
+ rfc2047-default-charset
+ (not (eq rfc2047-default-charset 'us-ascii)))
(mm-decode-coding-region b (point-max) rfc2047-default-charset))))))
(defun rfc2047-decode-string (string)
"Decode STRING that uses CHARSET with ENCODING.
Valid ENCODINGs are \"B\" and \"Q\".
If your Emacs implementation can't decode CHARSET, it returns nil."
- (let ((cs (mm-charset-to-coding-system charset)))
+ (let ((cs (let ((mm-default-charset rfc2047-default-charset))
+ (mm-charset-to-coding-system charset))))
(when cs
+ (when (eq cs 'ascii)
+ (setq cs rfc2047-default-charset))
(mm-decode-coding-string
(cond
((equal "B" encoding)
- (if (fboundp 'base64-decode-string)
- (base64-decode-string string)
- (base64-decode string)))
+ (base64-decode-string string))
((equal "Q" encoding)
(quoted-printable-decode-string
(mm-replace-chars-in-string string ?_ ? )))