summaryrefslogtreecommitdiffstatsabout
authorStefan Monnier <monnier@iro.umontreal.ca>2012-09-10 05:00:20 (GMT)
committer Katsumi Yamaoka <yamaoka@jpl.org>2012-09-10 05:00:20 (GMT)
commitd1a9bfb4363aceb094957e8d94cfca73be3e2c13 (patch) (side-by-side diff)
tree377946bb2f3e93829e0ef99d5e8bf14db0638cad
parent2df323a009ddd334ef992f32b7a8441daa6b6256 (diff)
downloadgnus-d1a9bfb4363aceb094957e8d94cfca73be3e2c13.zip
qp.el (quoted-printable-decode-region): Inline+CSE+strength-reduction
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/qp.el20
2 files changed, 14 insertions, 10 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 1f9de72..90e1db7 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2012-09-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * qp.el (quoted-printable-decode-region): Inline+CSE+strength-reduction.
+
2012-09-07 Chong Yidong <cyd@gnu.org>
* gnus-util.el
diff --git a/lisp/qp.el b/lisp/qp.el
index bfa1fe0..c4487c6 100644
--- a/lisp/qp.el
+++ b/lisp/qp.el
@@ -53,14 +53,7 @@ them into characters should be done separately."
;; or both of which are lowercase letters in "abcdef", is
;; formally illegal. A robust implementation might choose to
;; recognize them as the corresponding uppercase letters.''
- (let ((case-fold-search t)
- (decode-hex #'(lambda (n1 n2)
- (+ (* (if (<= n1 ?9) (- n1 ?0)
- (if (<= n1 ?F) (+ (- n1 ?A) 10)
- (+ (- n1 ?a) 10))) 16)
- (if (<= n2 ?9) (- n2 ?0)
- (if (<= n2 ?F) (+ (- n2 ?A) 10)
- (+ (- n2 ?a) 10)))))))
+ (let ((case-fold-search t))
(narrow-to-region from to)
;; Do this in case we're called from Gnus, say, in a buffer
;; which already contains non-ASCII characters which would
@@ -78,8 +71,15 @@ them into characters should be done separately."
(let* ((n (/ (- (match-end 0) (point)) 3))
(str (make-string n 0)))
(dotimes (i n)
- (aset str i (funcall decode-hex (char-after (1+ (point)))
- (char-after (+ 2 (point)))))
+ (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)))