Mercurial > emacs
changeset 46505:005d282a48ed
(decode-char): Use utf-8-translation-table-for-decode.
(encode-char): Use ucs-mule-to-mule-unicode.
author | Dave Love <fx@gnu.org> |
---|---|
date | Wed, 17 Jul 2002 19:20:01 +0000 |
parents | 2d28ee240bd7 |
children | a7f933a7b003 |
files | lisp/international/mule.el |
diffstat | 1 files changed, 32 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/international/mule.el Wed Jul 17 19:06:52 2002 +0000 +++ b/lisp/international/mule.el Wed Jul 17 19:20:01 2002 +0000 @@ -307,34 +307,40 @@ "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 @@ 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)