mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
qp.el (quoted-printable-decode-region): Decode multiple bytes at once.
This commit is contained in:
commit
8b0c72d319
2 changed files with 20 additions and 7 deletions
|
|
@ -1,3 +1,8 @@
|
|||
2012-08-30 Kenichi Handa <handa@gnu.org>
|
||||
|
||||
* qp.el (quoted-printable-decode-region): Decode multiple bytes at
|
||||
once.
|
||||
|
||||
2012-08-29 Julien Danjou <julien@danjou.info>
|
||||
|
||||
* gnus-notifications.el: New file.
|
||||
|
|
|
|||
|
|
@ -53,7 +53,10 @@ 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))
|
||||
(let ((case-fold-search t)
|
||||
(decode-hex #'(lambda (n1 n2)
|
||||
(+ (* (if (<= n1 ?9) (- n1 ?0) (+ (- n1 ?A) 10)) 16)
|
||||
(if (<= n2 ?9) (- n2 ?0) (+ (- n2 ?A) 10))))))
|
||||
(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
|
||||
|
|
@ -65,12 +68,17 @@ them into characters should be done separately."
|
|||
(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)
|
||||
(aset str i (funcall decode-hex (char-after (1+ (point)))
|
||||
(char-after (+ 2 (point)))))
|
||||
(forward-char 3))
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(insert str)))
|
||||
(t
|
||||
(message "Malformed quoted-printable text")
|
||||
(forward-char)))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue