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: