;;; qp.el --- Quoted-Printable functions
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: mail, extensions
(not (eobp)))
(cond ((eq (char-after (1+ (point))) ?\n)
(delete-char 2))
- ((looking-at "=[0-9A-F][0-9A-F]")
- (let ((byte (string-to-number (buffer-substring (1+ (point))
- (+ 3 (point)))
- 16)))
- (mm-insert-byte byte 1)
- (delete-char 3)))
+ ((looking-at "\\(=[0-9A-F][0-9A-F]\\)+")
+ ;; Decode this sequence at once; i.e. by a single
+ ;; deletion and insertion.
+ (let* ((n (/ (- (match-end 0) (point)) 3))
+ (str (make-string n 0)))
+ (dotimes (i n)
+ (let ((n1 (char-after (1+ (point))))
+ (n2 (char-after (+ 2 (point)))))
+ (aset str i
+ (+ (* 16 (- n1 (if (<= n1 ?9) ?0
+ (if (<= n1 ?F) (- ?A 10)
+ (- ?a 10)))))
+ (- n2 (if (<= n2 ?9) ?0
+ (if (<= n2 ?F) (- ?A 10)
+ (- ?a 10)))))))
+ (forward-char 3))
+ (delete-region (match-beginning 0) (match-end 0))
+ (insert str)))
(t
(message "Malformed quoted-printable text")
(forward-char)))))
(defun quoted-printable-encode-string (string)
"Encode the STRING as quoted-printable and return the result."
- (let ((default-enable-multibyte-characters (mm-multibyte-string-p string)))
- (with-temp-buffer
- (insert string)
- (quoted-printable-encode-region (point-min) (point-max))
- (buffer-string))))
+ (with-temp-buffer
+ (if (mm-multibyte-string-p string)
+ (mm-enable-multibyte)
+ (mm-disable-multibyte))
+ (insert string)
+ (quoted-printable-encode-region (point-min) (point-max))
+ (buffer-string)))
(provide 'qp)
-;; arch-tag: db89e52a-e4a1-4b69-926f-f434f04216ba
;;; qp.el ends here