X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mcs-20.el;h=7b785855e08dbea7e8c5180aab5eab02c761a76a;hb=refs%2Ftags%2Fapel-10_5;hp=39532690914f1b7d8960b648ac1d40e54bda5d9e;hpb=23ec73924741ed7dfe32cf0e3c4b4bf93ad0f8d3;p=elisp%2Fapel.git diff --git a/mcs-20.el b/mcs-20.el index 3953269..7b78585 100644 --- a/mcs-20.el +++ b/mcs-20.el @@ -1,8 +1,8 @@ ;;; mcs-20.el --- MIME charset implementation for Emacs 20 and XEmacs/mule -;; Copyright (C) 1997,1998,1999 Free Software Foundation, Inc. +;; Copyright (C) 1997,1998,1999,2000 Free Software Foundation, Inc. -;; Author: MORIOKA Tomohiko +;; Author: MORIOKA Tomohiko ;; Keywords: emulation, compatibility, Mule ;; This file is part of APEL (A Portable Emacs Library). @@ -29,10 +29,13 @@ ;;; Code: -(require 'poem) -(require 'pcustom) +(require 'custom) (eval-when-compile (require 'wid-edit)) +(if (featurep 'xemacs) + (require 'mcs-xm) + (require 'mcs-e20)) + ;;; @ MIME charset ;;; @@ -43,9 +46,10 @@ (gb2312 . cn-gb-2312) (cn-gb . cn-gb-2312) (iso-2022-jp-2 . iso-2022-7bit-ss2) + (iso-2022-jp-3 . iso-2022-7bit-ss2) (tis-620 . tis620) - (windows-874 . tis620) - (cp874 . tis620) + (windows-874 . tis-620) + (cp874 . tis-620) (x-ctext . ctext) (unknown . undecided) (x-unknown . undecided) @@ -99,6 +103,8 @@ is specified, it is used as line break code type of coding-system." charset lbt cs) )))) +(defalias 'mime-charset-p 'mime-charset-to-coding-system) + (defvar widget-mime-charset-prompt-value-history nil "History of input to `widget-mime-charset-prompt-value'.") @@ -131,17 +137,85 @@ is specified, it is used as line break code type of coding-system." (widget-apply widget :notify widget event) (widget-setup))) -(defcustom default-mime-charset 'x-ctext +(defcustom default-mime-charset 'x-unknown "Default value of MIME-charset. It is used when MIME-charset is not specified. It must be symbol." :group 'i18n :type 'mime-charset) +(cond ((featurep 'utf-2000) +;; for CHISE Architecture +(defun mcs-region-repertoire-p (start end charsets &optional buffer) + (save-excursion + (if buffer + (set-buffer buffer)) + (save-restriction + (narrow-to-region start end) + (goto-char (point-min)) + (catch 'tag + (let (ch) + (while (not (eobp)) + (setq ch (char-after (point))) + (unless (some (lambda (ccs) + (encode-char ch ccs)) + charsets) + (throw 'tag nil)) + (forward-char))) + t)))) + +(defun mcs-string-repertoire-p (string charsets &optional start end) + (let ((i (if start + (if (< start 0) + (error 'args-out-of-range string start end) + start) + 0)) + ch) + (if end + (if (> end (length string)) + (error 'args-out-of-range string start end)) + (setq end (length string))) + (catch 'tag + (while (< i end) + (setq ch (aref string i)) + (unless (some (lambda (ccs) + (encode-char ch ccs)) + charsets) + (throw 'tag nil)) + (setq i (1+ i))) + t))) + +(defun detect-mime-charset-region (start end) + "Return MIME charset for region between START and END." + (let ((rest charsets-mime-charset-alist) + cell) + (catch 'tag + (while rest + (setq cell (car rest)) + (if (mcs-region-repertoire-p start end (car cell)) + (throw 'tag (cdr cell))) + (setq rest (cdr rest))) + default-mime-charset-for-write))) + +(defun detect-mime-charset-string (string) + "Return MIME charset for STRING." + (let ((rest charsets-mime-charset-alist) + cell) + (catch 'tag + (while rest + (setq cell (car rest)) + (if (mcs-string-repertoire-p string (car cell)) + (throw 'tag (cdr cell))) + (setq rest (cdr rest))) + default-mime-charset-for-write))) +) +(t +;; for legacy Mule (defun detect-mime-charset-region (start end) "Return MIME charset for region between START and END." (find-mime-charset-by-charsets (find-charset-region start end) 'region start end)) +)) (defun write-region-as-mime-charset (charset start end filename &optional append visit lockname) @@ -155,6 +229,7 @@ It must be symbol." ;;; @ end ;;; -(provide 'mcs-20) +(require 'product) +(product-provide (provide 'mcs-20) (require 'apel-ver)) ;;; mcs-20.el ends here