From: Kenichi Handa Date: Thu, 23 Oct 1997 12:05:45 +0000 (+0000) Subject: (find-safe-coding-system): New function. X-Git-Tag: emacs-20.3~2911 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e481690d87f3ec2ff6938cf29b6fea0fdfb67e07;p=emacs.git (find-safe-coding-system): New function. --- diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el index 3fd3a57b68b..c6316358dac 100644 --- a/lisp/international/mule-util.el +++ b/lisp/international/mule-util.el @@ -287,6 +287,38 @@ or one is an alias of the other." (or (eq eol-type-1 eol-type-2) (and (vectorp eol-type-1) (vectorp eol-type-2))))))) +;;;###autoload +(defun find-safe-coding-system (from to) + "Return a list of proper coding systems to encode a text between FROM and TO. +All coding systems in the list can safely encode any multibyte characters +in the region. + +If the region contains no multibyte charcters, the returned list +contains a single element `undecided'. + +Kludgy feature: if FROM is a string, then that string is the target +for finding proper coding systems, and TO is ignored." + (let ((found (if (stringp from) + (find-charset-string from) + (find-charset-region from to))) + (l coding-system-list) + codings coding safe) + (if (and (= (length found) 1) + (eq 'ascii (car found))) + '(undecided) + (while l + (setq coding (car l) l (cdr l)) + (if (and (eq coding (coding-system-base coding)) + (setq safe (coding-system-get coding 'safe-charsets)) + (or (eq safe t) + (catch 'tag + (mapcar (function (lambda (x) + (if (not (memq x safe)) + (throw 'tag nil)))) + found)))) + (setq codings (cons coding codings)))) + codings))) + ;;; Composite charcater manipulations.