If POS is nil, it defauls to the current point.
If POS is out of range, the value is nil.
If the charset is `composition', return the actual one."
- (let ((charset (cond
- ((fboundp 'charset-after)
- (charset-after pos))
- ((fboundp 'char-charset)
- (char-charset (char-after pos)))
- ((< (mm-char-int (char-after pos)) 128)
- 'ascii)
- (mail-parse-mule-charset ;; cached mule-charset
- mail-parse-mule-charset)
- ((boundp 'current-language-environment)
- (let ((entry (assoc current-language-environment
- language-info-alist)))
- (setq mail-parse-mule-charset
- (or (car (last (assq 'charset entry)))
- 'latin-iso8859-1))))
- (t ;; figure out the charset
- (setq mail-parse-mule-charset
- (or (car (last (assq mail-parse-charset
- mm-mime-mule-charset-alist)))
- 'latin-iso8859-1))))))
- (if (eq charset 'composition)
- (let ((p (or pos (point))))
- (cadr (find-charset-region p (1+ p))))
- charset)))
+ (let ((char (char-after pos)) charset)
+ (if (< (mm-char-int char) 128)
+ (setq charset 'ascii)
+ ;; charset-after is fake in some Emacsen.
+ (setq charset (and (fboundp 'char-charset) (char-charset char)))
+ (if (eq charset 'composition)
+ (let ((p (or pos (point))))
+ (cadr (find-charset-region p (1+ p))))
+ (if (and charset (not (eq charset 'ascii)))
+ charset
+ (or
+ mail-parse-mule-charset ;; cached mule-charset
+ (progn
+ (setq mail-parse-mule-charset
+ (and (boundp 'current-language-environment)
+ (car (last
+ (assq 'charset
+ (assoc current-language-environment
+ language-info-alist))))))
+ (if (or (not mail-parse-mule-charset)
+ (eq mail-parse-mule-charset 'ascii))
+ (setq mail-parse-mule-charset
+ (or (car (last (assq mail-parse-charset
+ mm-mime-mule-charset-alist)))
+ 'latin-iso8859-1)))
+ mail-parse-mule-charset)))))))
(defun mm-mime-charset (charset)
"Return the MIME charset corresponding to the MULE CHARSET."
(defsubst mm-multibyte-p ()
"Say whether multibyte is enabled."
- (or (featurep 'xemacs)
- (and (boundp 'enable-multibyte-characters)
- enable-multibyte-characters)))
+ (if (boundp 'enable-multibyte-characters)
+ enable-multibyte-characters
+ (featurep 'mule)))
(defmacro mm-with-unibyte-buffer (&rest forms)
"Create a temporary buffer, and evaluate FORMS there like `progn'.
(fboundp 'find-charset-region))
;; Remove composition since the base charsets have been included.
(delq 'composition (find-charset-region b e)))
- ((not (boundp 'current-language-environment))
+ (t
+ ;; We are in a unibyte buffer or XEmacs non-mule, so we futz around a bit.
(save-excursion
(save-restriction
(narrow-to-region b e)
(skip-chars-forward "\0-\177")
(if (eobp)
'(ascii)
- (delq nil (list 'ascii
- (or (car (last (assq mail-parse-charset
- mm-mime-mule-charset-alist)))
- 'latin-iso8859-1)))))))
- (t
- ;; We are in a unibyte buffer, so we futz around a bit.
- (save-excursion
- (save-restriction
- (narrow-to-region b e)
- (goto-char (point-min))
- (let ((entry (assoc current-language-environment
- language-info-alist)))
- (skip-chars-forward "\0-\177")
- (if (eobp)
- '(ascii)
- (delq nil (list 'ascii
- (or (car (last (assq 'charset entry)))
- 'latin-iso8859-1))))))))))
+ (let (charset)
+ (setq charset
+ (and (boundp 'current-language-environment)
+ (car (last (assq 'charset
+ (assoc current-language-environment
+ language-info-alist))))))
+ (if (eq charset 'ascii) (setq charset nil))
+ (or charset
+ (setq charset
+ (car (last (assq mail-parse-charset
+ mm-mime-mule-charset-alist)))))
+ (list 'ascii (or charset 'latin-iso8859-1)))))))))
(if (fboundp 'shell-quote-argument)
(defalias 'mm-quote-arg 'shell-quote-argument)