care for bitsPerCharacter change during encodeString/decodeString.
--- 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!