Mercurial > emacs
changeset 50349:12444cb90785
(ccl-decode-mule-utf-16-le): Don't assume the signature bytes.
(ccl-decode-mule-utf-16-be): Likewise.
(ccl-encode-mule-utf-16-le): Don't produce the signature bytes.
(ccl-encode-mule-utf-16-be): Likewise.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Mon, 31 Mar 2003 01:48:23 +0000 |
parents | 76c478507d78 |
children | 807c5a3c80d1 |
files | lisp/international/utf-16.el |
diffstat | 1 files changed, 11 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/international/utf-16.el Sun Mar 30 20:31:23 2003 +0000 +++ b/lisp/international/utf-16.el Mon Mar 31 01:48:23 2003 +0000 @@ -68,8 +68,9 @@ ;; Needed in macro expansion, so can't be let-bound. Zapped after use. (eval-and-compile (defconst utf-16-decode-ucs - ;; We have the unicode in r1. Output is charset ID in r0, code point - ;; in r1. + ;; We have the unicode in r1. Output is charset ID in r0, code + ;; point in r1. As r6 keeps endian information, the value should + ;; not be changed. `((lookup-integer utf-subst-table-for-decode r1 r3) (if r7 ; got a translation ((r0 = r1) (r1 = r3)) @@ -114,15 +115,14 @@ (define-ccl-program ccl-decode-mule-utf-16-le `(2 ; 2 bytes -> 1 to 4 bytes - ((read r0 r1) ; signature - (loop + ((loop (read r3 r4) (r1 = (r4 <8 r3)) ,utf-16-decode-ucs (translate-character utf-translation-table-for-decode r0 r1) (write-multibyte-character r0 r1) (repeat)))) - "Decode little endian UTF-16 (ignoring signature bytes). + "Decode UTF-16LE (little endian without signature bytes). Basic decoding is done into the charsets ascii, latin-iso8859-1 and mule-unicode-*. Un-representable Unicode characters are decoded as U+fffd. The result is run through the translation-table named @@ -130,15 +130,14 @@ (define-ccl-program ccl-decode-mule-utf-16-be `(2 ; 2 bytes -> 1 to 4 bytes - ((read r0 r1) ; signature - (loop + ((loop (read r3 r4) (r1 = (r3 <8 r4)) ,utf-16-decode-ucs (translate-character utf-translation-table-for-decode r0 r1) (write-multibyte-character r0 r1) (repeat)))) - "Decode big endian UTF-16 (ignoring signature bytes). + "Decode UTF-16BE (big endian without signature bytes). Basic decoding is done into the charsets ascii, latin-iso8859-1 and mule-unicode-*. Un-representable Unicode characters are decoded as U+fffd. The result is run through the translation-table of @@ -173,9 +172,7 @@ (define-ccl-program ccl-encode-mule-utf-16-le `(1 - ((write #xff) - (write #xfe) - (loop + ((loop (read-multibyte-character r0 r1) (lookup-character utf-subst-table-for-encode r0 r1) (if (r7 == 0) @@ -184,7 +181,7 @@ (write (r0 & 255)) (write (r0 >> 8)) (repeat)))) - "Encode to little endian UTF-16 with signature. + "Encode to UTF-16LE (little endian without signature). Characters from the charsets ascii, eight-bit-control, eight-bit-graphic, latin-iso8859-1 and mule-unicode-* are encoded after translation through the translation-table of name @@ -193,9 +190,7 @@ (define-ccl-program ccl-encode-mule-utf-16-be `(1 - ((write #xfe) - (write #xff) - (loop + ((loop (read-multibyte-character r0 r1) (lookup-character utf-subst-table-for-encode r0 r1) (if (r7 == 0) @@ -204,7 +199,7 @@ (write (r0 >> 8)) (write (r0 & 255)) (repeat)))) - "Encode to big endian UTF-16 with signature. + "Encode to UTF-16BE (big endian without signature). Characters from the charsets ascii, eight-bit-control, eight-bit-graphic, latin-iso8859-1 and mule-unicode-* are encoded after translation through the translation-table named @@ -215,8 +210,6 @@ (let ((doc " -Assumes and ignores the leading two-byte signature. - It supports Unicode characters of these ranges: U+0000..U+33FF, U+E000..U+FFFF. They correspond to these Emacs character sets: