summaryrefslogtreecommitdiff
path: root/lisp/gnus/qp.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/gnus/qp.el')
-rw-r--r--lisp/gnus/qp.el84
1 files changed, 45 insertions, 39 deletions
diff --git a/lisp/gnus/qp.el b/lisp/gnus/qp.el
index cb0b4bb4a7e..a5993de136f 100644
--- a/lisp/gnus/qp.el
+++ b/lisp/gnus/qp.el
@@ -89,52 +89,58 @@ the form expected by `skip-chars-forward'.
If `mm-use-ultra-safe-encoding' is set, fold lines unconditionally and
encode lines starting with \"From\"."
(interactive "r")
- ;; Fixme: what should this do in XEmacs/Mule?
- (if (fboundp 'find-charset-region) ; else XEmacs, non-Mule
- (if (delq 'unknown ; Emacs 20 unibyte
- (delq 'eight-bit-graphic ; Emacs 21
- (delq 'eight-bit-control
- (delq 'ascii (find-charset-region from to)))))
- (error "Multibyte character in QP encoding region")))
(unless class
- (setq class "^\000-\007\013\015-\037\200-\377="))
+ ;; Avoid using 8bit characters. = is \075.
+ ;; Equivalent to "^\000-\007\013\015-\037\200-\377="
+ (setq class "\010-\012\014\040-\074\076-\177"))
(if (fboundp 'string-as-multibyte)
(setq class (string-as-multibyte class)))
(save-excursion
(save-restriction
(narrow-to-region from to)
- ;; Encode all the non-ascii and control characters.
- (goto-char (point-min))
- (while (and (skip-chars-forward class)
- (not (eobp)))
- (insert
- (prog1
- (format "=%02x" (upcase (char-after)))
- (delete-char 1))))
- ;; Encode white space at the end of lines.
- (goto-char (point-min))
- (while (re-search-forward "[ \t]+$" nil t)
- (goto-char (match-beginning 0))
- (while (not (eolp))
+ (mm-with-unibyte-current-buffer-mule4
+ ;; Fixme: what should this do in XEmacs/Mule?
+ (if (fboundp 'find-charset-region) ; else XEmacs, non-Mule
+ (if (delq 'unknown ; Emacs 20 unibyte
+ (delq 'eight-bit-graphic ; Emacs 21
+ (delq 'eight-bit-control
+ (delq 'ascii
+ (find-charset-region from to)))))
+ (error "Multibyte character in QP encoding region")))
+ ;; Encode all the non-ascii and control characters.
+ (goto-char (point-min))
+ (while (and (skip-chars-forward class)
+ (not (eobp)))
(insert
(prog1
- (format "=%02x" (upcase (char-after)))
- (delete-char 1)))))
- (let ((mm-use-ultra-safe-encoding
- (and (boundp 'mm-use-ultra-safe-encoding)
- mm-use-ultra-safe-encoding)))
- (when (or fold mm-use-ultra-safe-encoding)
- ;; Fold long lines.
- (let ((tab-width 1)) ; HTAB is one character.
- (goto-char (point-min))
- (while (not (eobp))
- ;; In ultra-safe mode, encode "From " at the beginning
- ;; of a line.
- (when mm-use-ultra-safe-encoding
- (beginning-of-line)
- (when (looking-at "From ")
- (replace-match "From=20" nil t)))
- (end-of-line)
+ (format "=%02X" (char-after))
+ (delete-char 1))))
+ ;; Encode white space at the end of lines.
+ (goto-char (point-min))
+ (while (re-search-forward "[ \t]+$" nil t)
+ (goto-char (match-beginning 0))
+ (while (not (eolp))
+ (insert
+ (prog1
+ (format "=%02X" (char-after))
+ (delete-char 1)))))
+ (let ((mm-use-ultra-safe-encoding
+ (and (boundp 'mm-use-ultra-safe-encoding)
+ mm-use-ultra-safe-encoding)))
+ (when (or fold mm-use-ultra-safe-encoding)
+ ;; Fold long lines.
+ (let ((tab-width 1)) ; HTAB is one character.
+ (goto-char (point-min))
+ (while (not (eobp))
+ ;; In ultra-safe mode, encode "From " at the beginning
+ ;; of a line.
+ (when mm-use-ultra-safe-encoding
+ (beginning-of-line)
+ (if (looking-at "From ")
+ (replace-match "From=20" nil t)
+ (if (looking-at "-")
+ (replace-match "=2D" nil t))))
+ (end-of-line)
(while (> (current-column) 76) ; tab-width must be 1.
(beginning-of-line)
(forward-char 75) ; 75 chars plus an "="
@@ -142,7 +148,7 @@ encode lines starting with \"From\"."
(insert "=\n")
(end-of-line))
(unless (eobp)
- (forward-line)))))))))
+ (forward-line))))))))))
(defun quoted-printable-encode-string (string)
"Encode the STRING as quoted-printable and return the result."