care for bitsPerCharacter change during encodeString/decodeString.
authorca
Wed, 10 Mar 2004 16:09:29 +0100
changeset 8150 ba9c6e587973
parent 8149 c0b336aacec6
child 8151 1f0fc1d4516b
care for bitsPerCharacter change during encodeString/decodeString.
CharacterEncoder.st
--- a/CharacterEncoder.st	Wed Mar 10 01:12:27 2004 +0100
+++ b/CharacterEncoder.st	Wed Mar 10 16:09:29 2004 +0100
@@ -865,26 +865,28 @@
 decodeString:anEncodedString
     "given a string in my encoding, return a unicode-string for it"
 
-    |newString|
+    |newString myCode uniCodePoint bits|
 
     newString := String new:(anEncodedString size).
-    1 to:anEncodedString size do:[:idx |
-	|myCode uniCodePoint|
+    bits := newString bitsPerCharacter.
 
-	myCode := (anEncodedString at:idx) codePoint.
-	uniCodePoint := self decode:myCode.
-	uniCodePoint > 16rFF ifTrue:[
-	    uniCodePoint > 16rFFFF ifTrue:[
-		newString bitsPerCharacter < 32 ifTrue:[
-		    newString := Unicode32String fromString:newString.
-		]
-	    ] ifFalse:[
-		newString bitsPerCharacter < 16 ifTrue:[
-		    newString := Unicode16String fromString:newString.
-		]
-	    ].
-	].
-	newString at:idx put:(Character value:uniCodePoint).
+    1 to:anEncodedString size do:[:idx |
+        uniCodePoint := (anEncodedString at:idx) codePoint.
+        myCode := self decode:uniCodePoint.
+        myCode > 16rFF ifTrue:[
+            myCode > 16rFFFF ifTrue:[
+                bits < 32 ifTrue:[
+                    newString := Unicode32String fromString:newString.
+                    bits := 32.
+                ]
+            ] ifFalse:[
+                bits < 16 ifTrue:[
+                    newString := Unicode16String fromString:newString.
+                    bits := 16.
+                ]
+            ]
+        ].
+        newString at:idx put:(Character value:myCode).
     ].
     ^ newString
 
@@ -902,13 +904,28 @@
 encodeString:aUnicodeString
     "given a string in unicode, return a string in my encoding for it"
 
-    |newString myCode uniCodePoint|
+    |newString myCode uniCodePoint bits|
 
-    newString := self newString:(aUnicodeString size).
+    newString := String new:(aUnicodeString size).
+    bits := newString bitsPerCharacter.
+
     1 to:aUnicodeString size do:[:idx |
-	uniCodePoint := (aUnicodeString at:idx) codePoint.
-	myCode := self encode:uniCodePoint.
-	newString at:idx put:(Character value:myCode).
+        uniCodePoint := (aUnicodeString at:idx) codePoint.
+        myCode := self encode:uniCodePoint.
+        myCode > 16rFF ifTrue:[
+            myCode > 16rFFFF ifTrue:[
+                bits < 32 ifTrue:[
+                    newString := Unicode32String fromString:newString.
+                    bits := 32.
+                ]
+            ] ifFalse:[
+                bits < 16 ifTrue:[
+                    newString := Unicode16String fromString:newString.
+                    bits := 16.
+                ]
+            ]
+        ].
+        newString at:idx put:(Character value:myCode).
     ].
     ^ newString
 ! !
@@ -1204,7 +1221,7 @@
 !CharacterEncoder class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.65 2004-03-09 01:03:03 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.66 2004-03-10 15:09:29 ca Exp $'
 ! !
 
 CharacterEncoder initialize!