changeset 54261:94db0f6330b3

(mail-unquote-printable-region): New arg UNIBYTE.
author Richard M. Stallman <rms@gnu.org>
date Thu, 04 Mar 2004 17:02:13 +0000
parents d115cf4b7731
children 3d87267bf32d
files lisp/mail/mail-utils.el
diffstat 1 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mail/mail-utils.el	Thu Mar 04 17:01:17 2004 +0000
+++ b/lisp/mail/mail-utils.el	Thu Mar 04 17:02:13 2004 +0000
@@ -108,11 +108,15 @@
       (apply 'concat (nreverse (cons (substring string i) strings))))))
 
 ;;;###autoload
-(defun mail-unquote-printable-region (beg end &optional wrapper noerror)
+(defun mail-unquote-printable-region (beg end &optional wrapper noerror
+					  unibyte)
   "Undo the \"quoted printable\" encoding in buffer from BEG to END.
 If the optional argument WRAPPER is non-nil,
 we expect to find and remove the wrapper characters =?ISO-8859-1?Q?....?=.
-If NOERROR is non-nil, return t if successful."
+If NOERROR is non-nil, return t if successful.
+If UNIBYTE is non-nil, insert converted characters as unibyte.
+That is useful if you are going to character code decoding afterward,
+as Rmail does."
   (interactive "r\nP")
   (let (failed)
     (save-match-data
@@ -131,13 +135,16 @@
 		  ((= (char-after (match-beginning 1)) ?=)
 		   (replace-match "="))
 		  ((match-beginning 2)
-		   (replace-match
-		    (make-string 1
-				 (+ (* 16 (mail-unquote-printable-hexdigit
-					   (char-after (match-beginning 2))))
-				    (mail-unquote-printable-hexdigit
-				     (char-after (1+ (match-beginning 2))))))
-		    t t))
+		   (let ((char (+ (* 16 (mail-unquote-printable-hexdigit
+					 (char-after (match-beginning 2))))
+				  (mail-unquote-printable-hexdigit
+				   (char-after (1+ (match-beginning 2)))))))
+		     (if unibyte
+			 (progn
+			   (replace-match "")
+			   ;; insert-char will insert this as unibyte,
+			   (insert-char char 1))
+		       (replace-match (make-string 1 char) t t))))
 		  (noerror
 		   (setq failed t))
 		  (t