+2010-03-30 Martin Stjernholm <mast@lysator.liu.se>
+
+ * mm-decode.el (mm-add-meta-html-tag): Added option to override the
+ charset.
+
+ * gnus-art.el (gnus-article-browse-html-parts): Force the correct
+ charset into the <meta> tag when the article is encoded to utf-8.
+
2010-03-30 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-article-browse-delete-temp-files): Delete
;; Add a meta html tag to specify charset and a header.
(cond
(header
- (let (title eheader body hcharset coding cid-image-dir)
+ (let (title eheader body hcharset coding force-charset
+ cid-image-dir)
(with-temp-buffer
(mm-enable-multibyte)
(setq case-fold-search t)
title (when title
(mm-encode-coding-string title charset))
body (mm-encode-coding-string (mm-get-part handle)
- charset))
+ charset)
+ force-charset t)
(setq hcharset (mm-find-mime-charset-region (point-min)
(point-max)))
(cond ((= (length hcharset) 1)
body (mm-encode-coding-string
(mm-decode-coding-string
(mm-get-part handle) body)
- charset))))
+ charset)
+ force-charset t)))
(setq charset hcharset
eheader (mm-encode-coding-string
(buffer-string) coding)
(mm-disable-multibyte)
(insert body)
(when charset
- (mm-add-meta-html-tag handle charset))
+ (mm-add-meta-html-tag handle charset force-charset))
(when title
(goto-char (point-min))
(unless (search-forward "<title>" nil t)
(mm-save-part-to-file handle file)
file))))
-(defun mm-add-meta-html-tag (handle &optional charset)
+(defun mm-add-meta-html-tag (handle &optional charset force-charset)
"Add meta html tag to specify CHARSET of HANDLE in the current buffer.
CHARSET defaults to the one HANDLE specifies. Existing meta tag that
-specifies charset will not be modified. Return t if meta tag is added
-or replaced."
+specifies charset will not be modified unless FORCE-CHARSET is non-nil.
+Return t if meta tag is added or replaced."
(when (equal (mm-handle-media-type handle) "text/html")
(when (or charset
(setq charset (mail-content-type-get (mm-handle-type handle)
(if (re-search-forward "\
<meta\\s-+http-equiv=[\"']?content-type[\"']?\\s-+content=[\"']\
text/\\(\\sw+\\)\\(?:\;\\s-*charset=\\(.+\\)\\)?[\"'][^>]*>" nil t)
- (if (and (match-beginning 2)
+ (if (and (not force-charset)
+ (match-beginning 2)
(string-match "\\`html\\'" (match-string 1)))
;; Don't modify existing meta tag.
nil