From: Dave Love Date: Wed, 17 Jul 2002 19:20:01 +0000 (+0000) Subject: (decode-char): Use utf-8-translation-table-for-decode. X-Git-Tag: ttn-vms-21-2-B4~14016 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9fb1b1a8198d3cb4fff9489790b99f205711ab53;p=emacs.git (decode-char): Use utf-8-translation-table-for-decode. (encode-char): Use ucs-mule-to-mule-unicode. --- diff --git a/lisp/international/mule.el b/lisp/international/mule.el index b7d6de44913..e5fdf415e1e 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -307,34 +307,40 @@ See also the documentation of `make-char'." "Return character specified by coded character set CCS and CODE-POINT in it. Return nil if such a character is not supported. Currently the only supported coded character set is `ucs' (ISO/IEC -10646: Universal Multi-Octet Coded Character Set). +10646: Universal Multi-Octet Coded Character Set), and the result is +translated through the char table `utf-8-translation-table-for-decode'. Optional argument RESTRICTION specifies a way to map the pair of CCS and CODE-POINT to a character. Currently not supported and just ignored." - (cond ((eq ccs 'ucs) - (cond ((< code-point 160) - code-point) - ((< code-point 256) - (make-char 'latin-iso8859-1 code-point)) - ((< code-point #x2500) - (setq code-point (- code-point #x0100)) - (make-char 'mule-unicode-0100-24ff - (+ (/ code-point 96) 32) (+ (% code-point 96) 32))) - ((< code-point #x3400) - (setq code-point (- code-point #x2500)) - (make-char 'mule-unicode-2500-33ff - (+ (/ code-point 96) 32) (+ (% code-point 96) 32))) - ((and (>= code-point #xe000) (< code-point #x10000)) - (setq code-point (- code-point #xe000)) - (make-char 'mule-unicode-e000-ffff - (+ (/ code-point 96) 32) (+ (% code-point 96) 32))) - )))) + (cond + ((eq ccs 'ucs) + (let ((c (cond + ((< code-point 160) + code-point) + ((< code-point 256) + (make-char 'latin-iso8859-1 code-point)) + ((< code-point #x2500) + (setq code-point (- code-point #x0100)) + (make-char 'mule-unicode-0100-24ff + (+ (/ code-point 96) 32) (+ (% code-point 96) 32))) + ((< code-point #x3400) + (setq code-point (- code-point #x2500)) + (make-char 'mule-unicode-2500-33ff + (+ (/ code-point 96) 32) (+ (% code-point 96) 32))) + ((and (>= code-point #xe000) (< code-point #x10000)) + (setq code-point (- code-point #xe000)) + (make-char 'mule-unicode-e000-ffff + (+ (/ code-point 96) 32) (+ (% code-point 96) 32)))))) + (if (and c (aref utf-8-translation-table-for-decode c)) + (aref utf-8-translation-table-for-decode c) + c))))) (defun encode-char (char ccs &optional restriction) "Return code-point in coded character set CCS that corresponds to CHAR. Return nil if CHAR is not included in CCS. Currently the only supported coded character set is `ucs' (ISO/IEC -10646: Universal Multi-Octet Coded Character Set). +10646: Universal Multi-Octet Coded Character Set), and CHAR is first +translated through the char-table `ucs-mule-to-mule-unicode'. CHAR should be in one of these charsets: ascii, latin-iso8859-1, mule-unicode-0100-24ff, mule-unicode-2500-33ff, @@ -344,8 +350,13 @@ Otherwise, return nil. Optional argument RESTRICTION specifies a way to map CHAR to a code-point in CCS. Currently not supported and just ignored." (let* ((split (split-char char)) - (charset (car split))) + (charset (car split)) + trans) (cond ((eq ccs 'ucs) + (setq trans (aref ucs-mule-to-mule-unicode char)) + (if trans + (setq split (split-char trans) + charset (car split))) (cond ((eq charset 'ascii) char) ((eq charset 'latin-iso8859-1)