Mercurial > emacs
changeset 20399:04ce86b23ffa
(rmail-decode-quoted-printable): New function
mostly copied from gnus-art.el.
(rmail-hex-string-to-integer): New fn, copied from hexl.el.
(rmail-hex-char-to-integer): Likewise.
(rmail-convert-to-babyl-format): Use rmail-decode-quoted-printable.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Thu, 04 Dec 1997 04:32:03 +0000 |
parents | 47f326ffb7ba |
children | fd74979309d3 |
files | lisp/mail/rmail.el |
diffstat | 1 files changed, 41 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/mail/rmail.el Thu Dec 04 04:30:59 1997 +0000 +++ b/lisp/mail/rmail.el Thu Dec 04 04:32:03 1997 +0000 @@ -1478,10 +1478,7 @@ (setq count (1+ count)) (if quoted-printable-header-field-end (save-excursion - (save-restriction - (narrow-to-region header-end (point)) - (require 'gnus-art) - (article-mime-decode-quoted-printable-buffer)) + (rmail-decode-quoted-printable header-end (point)) ;; Change "quoted-printable" to "8bit", ;; to reflect the decoding we just did. (goto-char quoted-printable-header-field-end) @@ -1508,6 +1505,46 @@ (t (error "Cannot convert to babyl format"))))) count)) +(defun rmail-hex-char-to-integer (character) + "Return CHARACTER's value interpreted as a hex digit." + (if (and (>= character ?0) (<= character ?9)) + (- character ?0) + (let ((ch (logior character 32))) + (if (and (>= ch ?a) (<= ch ?f)) + (- ch (- ?a 10)) + (error "Invalid hex digit `%c'" ch))))) + +(defun rmail-hex-string-to-integer (hex-string) + "Return decimal integer for HEX-STRING." + (let ((hex-num 0) + (index 0)) + (while (< index (length hex-string)) + (setq hex-num (+ (* hex-num 16) + (rmail-hex-char-to-integer (aref hex-string index)))) + (setq index (1+ index))) + hex-num)) + +(defun rmail-decode-quoted-printable (from to) + "Decode Quoted-Printable in the region between FROM and TO." + (interactive "r") + (goto-char from) + (or (markerp to) + (setq to (copy-marker to))) + (while (search-forward "=" to t) + (cond ((eq (following-char) ?\n) + (delete-char -1) + (delete-char 1)) + ((looking-at "[0-9A-F][0-9A-F]") + (subst-char-in-region + (1- (point)) (point) ?= + (rmail-hex-string-to-integer + (buffer-substring (point) (+ 2 (point))))) + (delete-char 2)) + ((looking-at "=") + (delete-char 1)) + (t + (message "Malformed MIME quoted-printable message"))))) + ;; Delete the "From ..." line, creating various other headers with ;; information from it if they don't already exist. Now puts the ;; original line into a mail-from: header line for debugging and for