Mercurial > emacs
comparison lisp/gnus/mm-decode.el @ 92769:734bb318f69e
(mm-with-part): Set the buffer to unibyte before inserting
the handle-buffer's text, so the implicit multibyte->unibyte conversion
uses string-make-unibyte rather than string-as-unibyte.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 12 Mar 2008 18:30:52 +0000 |
parents | d3767aa9ae49 |
children | 3bf6293f3041 |
comparison
equal
deleted
inserted
replaced
92768:f2df8a37cf42 | 92769:734bb318f69e |
---|---|
661 (setq parts (nconc (list (mm-dissect-buffer t nil from)) parts))))) | 661 (setq parts (nconc (list (mm-dissect-buffer t nil from)) parts))))) |
662 (mm-possibly-verify-or-decrypt (nreverse parts) ctl))) | 662 (mm-possibly-verify-or-decrypt (nreverse parts) ctl))) |
663 | 663 |
664 (defun mm-copy-to-buffer () | 664 (defun mm-copy-to-buffer () |
665 "Copy the contents of the current buffer to a fresh buffer." | 665 "Copy the contents of the current buffer to a fresh buffer." |
666 (let ((obuf (current-buffer)) | 666 (let ((obuf (current-buffer)) |
667 beg) | 667 beg) |
668 (goto-char (point-min)) | 668 (goto-char (point-min)) |
669 (search-forward-regexp "^\n" nil t) | 669 (search-forward-regexp "^\n" nil t) |
670 (setq beg (point)) | 670 (setq beg (point)) |
671 (with-current-buffer | 671 (with-current-buffer |
672 ;; Preserve the data's unibyteness (for url-insert-file-contents). | 672 ;; Preserve the data's unibyteness (for url-insert-file-contents). |
673 (let ((default-enable-multibyte-characters (mm-multibyte-p))) | 673 (let ((default-enable-multibyte-characters (mm-multibyte-p))) |
674 (generate-new-buffer " *mm*")) | 674 (generate-new-buffer " *mm*")) |
675 (insert-buffer-substring obuf beg) | 675 (insert-buffer-substring obuf beg) |
1125 ;;; Functions for outputting parts | 1125 ;;; Functions for outputting parts |
1126 ;;; | 1126 ;;; |
1127 | 1127 |
1128 (defmacro mm-with-part (handle &rest forms) | 1128 (defmacro mm-with-part (handle &rest forms) |
1129 "Run FORMS in the temp buffer containing the contents of HANDLE." | 1129 "Run FORMS in the temp buffer containing the contents of HANDLE." |
1130 `(let* ((handle ,handle) | 1130 ;; The handle-buffer's content is a sequence of bytes, not a sequence of |
1131 ;; The multibyteness of the temp buffer should be turned on | 1131 ;; chars, so the buffer should be unibyte. It may happen that the |
1132 ;; if inserting a multibyte string. Contrarily, the buffer's | 1132 ;; handle-buffer is multibyte for some reason, in which case now is a good |
1133 ;; multibyteness should be off if inserting a unibyte string, | 1133 ;; time to adjust it, since we know at this point that it should |
1134 ;; especially if a string contains 8bit data. | 1134 ;; be unibyte. |
1135 (default-enable-multibyte-characters | 1135 `(let* ((handle ,handle)) |
1136 (with-current-buffer (mm-handle-buffer handle) | |
1137 (mm-multibyte-p)))) | |
1138 (with-temp-buffer | 1136 (with-temp-buffer |
1137 (mm-disable-multibyte) | |
1139 (insert-buffer-substring (mm-handle-buffer handle)) | 1138 (insert-buffer-substring (mm-handle-buffer handle)) |
1140 (mm-disable-multibyte) | |
1141 (mm-decode-content-transfer-encoding | 1139 (mm-decode-content-transfer-encoding |
1142 (mm-handle-encoding handle) | 1140 (mm-handle-encoding handle) |
1143 (mm-handle-media-type handle)) | 1141 (mm-handle-media-type handle)) |
1144 ,@forms))) | 1142 ,@forms))) |
1145 (put 'mm-with-part 'lisp-indent-function 1) | 1143 (put 'mm-with-part 'lisp-indent-function 1) |