Mercurial > emacs
comparison lisp/gnus/mm-util.el @ 92153:37d6263f580b
Revert removal of `mm-hack-charsets' in Gnus
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1076
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sun, 24 Feb 2008 15:23:45 +0000 |
parents | 89610dccd10a |
children | e931cb410f95 |
comparison
equal
deleted
inserted
replaced
92152:2c181d4110e5 | 92153:37d6263f580b |
---|---|
574 (coding-system-get cs 'safe-charsets)))) | 574 (coding-system-get cs 'safe-charsets)))) |
575 (not (assq mime alist))) | 575 (not (assq mime alist))) |
576 (push (cons mime (delq 'ascii mule)) alist))) | 576 (push (cons mime (delq 'ascii mule)) alist))) |
577 (setq mm-mime-mule-charset-alist (nreverse alist))))) | 577 (setq mm-mime-mule-charset-alist (nreverse alist))))) |
578 | 578 |
579 (defvar mm-hack-charsets '(iso-8859-15 iso-2022-jp-2) | |
580 "A list of special charsets. | |
581 Valid elements include: | |
582 `iso-8859-15' convert ISO-8859-1, -9 to ISO-8859-15 if ISO-8859-15 exists. | |
583 `iso-2022-jp-2' convert ISO-2022-jp to ISO-2022-jp-2 if ISO-2022-jp-2 exists." | |
584 ) | |
585 | |
586 (defvar mm-iso-8859-15-compatible | |
587 '((iso-8859-1 "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE") | |
588 (iso-8859-9 "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE\xD0\xDD\xDE\xF0\xFD\xFE")) | |
589 "ISO-8859-15 exchangeable coding systems and inconvertible characters.") | |
590 | |
591 (defvar mm-iso-8859-x-to-15-table | |
592 (and (fboundp 'coding-system-p) | |
593 (mm-coding-system-p 'iso-8859-15) | |
594 (mapcar | |
595 (lambda (cs) | |
596 (if (mm-coding-system-p (car cs)) | |
597 (let ((c (string-to-char | |
598 (decode-coding-string "\341" (car cs))))) | |
599 (cons (char-charset c) | |
600 (cons | |
601 (- (string-to-char | |
602 (decode-coding-string "\341" 'iso-8859-15)) c) | |
603 (string-to-list (decode-coding-string (car (cdr cs)) | |
604 (car cs)))))) | |
605 '(gnus-charset 0))) | |
606 mm-iso-8859-15-compatible)) | |
607 "A table of the difference character between ISO-8859-X and ISO-8859-15.") | |
608 | |
579 (defcustom mm-coding-system-priorities | 609 (defcustom mm-coding-system-priorities |
580 (if (boundp 'current-language-environment) | 610 (if (boundp 'current-language-environment) |
581 (let ((lang (symbol-value 'current-language-environment))) | 611 (let ((lang (symbol-value 'current-language-environment))) |
582 (cond ((string= lang "Japanese") | 612 (cond ((string= lang "Japanese") |
583 ;; Japanese users prefer iso-2022-jp to euc-japan or | 613 ;; Japanese users prefer iso-2022-jp to euc-japan or |
827 (if (featurep 'mule) | 857 (if (featurep 'mule) |
828 (if (boundp 'default-enable-multibyte-characters) | 858 (if (boundp 'default-enable-multibyte-characters) |
829 default-enable-multibyte-characters | 859 default-enable-multibyte-characters |
830 t))) | 860 t))) |
831 | 861 |
862 (defun mm-iso-8859-x-to-15-region (&optional b e) | |
863 (if (fboundp 'char-charset) | |
864 (let (charset item c inconvertible) | |
865 (save-restriction | |
866 (if e (narrow-to-region b e)) | |
867 (goto-char (point-min)) | |
868 (skip-chars-forward "\0-\177") | |
869 (while (not (eobp)) | |
870 (cond | |
871 ((not (setq item (assq (char-charset (setq c (char-after))) | |
872 mm-iso-8859-x-to-15-table))) | |
873 (forward-char)) | |
874 ((memq c (cdr (cdr item))) | |
875 (setq inconvertible t) | |
876 (forward-char)) | |
877 (t | |
878 (insert-before-markers (prog1 (+ c (car (cdr item))) | |
879 (delete-char 1))))) | |
880 (skip-chars-forward "\0-\177"))) | |
881 (not inconvertible)))) | |
882 | |
832 (defun mm-sort-coding-systems-predicate (a b) | 883 (defun mm-sort-coding-systems-predicate (a b) |
833 (let ((priorities | 884 (let ((priorities |
834 (mapcar (lambda (cs) | 885 (mapcar (lambda (cs) |
835 ;; Note: invalid entries are dropped silently | 886 ;; Note: invalid entries are dropped silently |
836 (and (setq cs (mm-coding-system-p cs)) | 887 (and (setq cs (mm-coding-system-p cs)) |
974 (setq charsets | 1025 (setq charsets |
975 (mm-delete-duplicates | 1026 (mm-delete-duplicates |
976 (mapcar 'mm-mime-charset | 1027 (mapcar 'mm-mime-charset |
977 (delq 'ascii | 1028 (delq 'ascii |
978 (mm-find-charset-region b e)))))) | 1029 (mm-find-charset-region b e)))))) |
1030 (if (and (> (length charsets) 1) | |
1031 (memq 'iso-8859-15 charsets) | |
1032 (memq 'iso-8859-15 hack-charsets) | |
1033 (save-excursion (mm-iso-8859-x-to-15-region b e))) | |
1034 (dolist (x mm-iso-8859-15-compatible) | |
1035 (setq charsets (delq (car x) charsets)))) | |
1036 (if (and (memq 'iso-2022-jp-2 charsets) | |
1037 (memq 'iso-2022-jp-2 hack-charsets)) | |
1038 (setq charsets (delq 'iso-2022-jp charsets))) | |
1039 ;; Attempt to reduce the number of charsets if utf-8 is available. | |
1040 (if (and (featurep 'xemacs) | |
1041 (> (length charsets) 1) | |
1042 (mm-coding-system-p 'utf-8)) | |
1043 (let ((mm-coding-system-priorities | |
1044 (cons 'utf-8 mm-coding-system-priorities))) | |
1045 (setq charsets | |
1046 (mm-delete-duplicates | |
1047 (mapcar 'mm-mime-charset | |
1048 (delq 'ascii | |
1049 (mm-find-charset-region b e))))))) | |
979 charsets)) | 1050 charsets)) |
980 | 1051 |
981 (defmacro mm-with-unibyte-buffer (&rest forms) | 1052 (defmacro mm-with-unibyte-buffer (&rest forms) |
982 "Create a temporary buffer, and evaluate FORMS there like `progn'. | 1053 "Create a temporary buffer, and evaluate FORMS there like `progn'. |
983 Use unibyte mode for this." | 1054 Use unibyte mode for this." |