[squeak-dev] The Trunk: Multilingual-ul.149.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun May 22 17:24:27 UTC 2011
Levente Uzonyi uploaded a new version of Multilingual to project The Trunk:
http://source.squeak.org/trunk/Multilingual-ul.149.mcz
==================== Summary ====================
Name: Multilingual-ul.149
Author: ul
Time: 22 May 2011, 2:05:19.387 pm
UUID: 5dc26283-2342-8a46-894f-2de166468c16
Ancestors: Multilingual-ul.148
- assume that UTF16TextConverter's instance variables are correctly initialized. Migration code is in the preamble.
- other minor refactorings of UTF16TextConverter
=============== Diff against Multilingual-ul.148 ===============
Item was changed:
+ (PackageInfo named: 'Multilingual') preamble: '"Ensure that the instance variables of UTF16TextConverters are initialized."
+ UTF16TextConverter allInstancesDo: [ :converter |
+ #(useLittleEndian useByteOrderMark byteOrderMarkDone) do: [ :instVarName |
+ (converter instVarNamed: instVarName) ifNil: [
+ converter instVarNamed: instVarName put: false ] ] ]'!
- (PackageInfo named: 'Multilingual') preamble: '"Initialize the value of wantsLineEndConversion in all MultiByteFileStreams"
- MultiByteFileStream allSubInstancesDo: [ :each |
- (each instVarNamed: #wantsLineEndConversion) ifNil: [
- each instVarNamed: #wantsLineEndConversion put: false ] ]'!
Item was changed:
----- Method: UTF16TextConverter>>charFromStream:withFirst: (in category 'private') -----
charFromStream: aStream withFirst: firstValue
+ | character1 character2 n secondValue |
+ (16rD800 <= firstValue and: [firstValue <= 16rDBFF]) ifFalse: [
+ ^Unicode value: firstValue ].
+ character1 := aStream basicNext ifNil: [ ^nil ].
+ character2 := aStream basicNext ifNil: [ ^nil ].
+ useLittleEndian ifTrue: [
+ | tmp |
+ tmp := character1.
+ character1 := character2.
+ character2 := tmp ].
+ secondValue := (character1 charCode bitShift: 8) + character2 charCode.
+ n := firstValue - 16rD800 * 16r400 + (secondValue - 16rDC00) + 16r10000.
+ ^Unicode value: n!
- | character1 character2 tmp n secondValue |
- (16rD800 <= firstValue and: [firstValue <= 16rDBFF]) ifTrue: [
- character1 := aStream basicNext.
- character1 isNil ifTrue: [^ nil].
- character2 := aStream basicNext.
- character2 isNil ifTrue: [^ nil].
- self useLittleEndian ifTrue: [
- tmp := character1.
- character1 := character2.
- character2 := tmp
- ].
- secondValue := (character1 charCode << 8) + (character2 charCode).
- n := (firstValue - 16rD800) * 16r400 + (secondValue - 16rDC00) + 16r10000.
- ^ Unicode value: n
- ].
-
- ^ Unicode value: firstValue
- !
Item was changed:
----- Method: UTF16TextConverter>>initialize (in category 'initialize-release') -----
initialize
super initialize.
+ useLittleEndian := useByteOrderMark := byteOrderMarkDone := false!
- useLittleEndian := useByteOrderMark := byteOrderMarkDone := false.
- !
Item was changed:
----- Method: UTF16TextConverter>>next16BitValue:toStream: (in category 'private') -----
next16BitValue: value toStream: aStream
| v1 v2 |
+ v1 := (value bitShift: -8) bitAnd: 16rFF.
- v1 := (value >> 8) bitAnd: 16rFF.
v2 := value bitAnd: 16rFF.
+ useLittleEndian
+ ifTrue: [
+ aStream
+ basicNextPut: (Character value: v2);
+ basicNextPut: (Character value: v1) ]
+ ifFalse: [
+ aStream
+ basicNextPut: (Character value: v1);
+ basicNextPut: (Character value: v2) ].
-
- self useLittleEndian ifTrue: [
- aStream basicNextPut: (Character value: v2).
- aStream basicNextPut: (Character value: v1).
- ] ifFalse: [
- aStream basicNextPut: (Character value: v1).
- aStream basicNextPut: (Character value: v2).
- ].
!
Item was changed:
----- Method: UTF16TextConverter>>nextFromStream: (in category 'conversion') -----
nextFromStream: aStream
| character1 character2 readBOM charValue |
aStream isBinary ifTrue: [^ aStream basicNext].
+ character1 := aStream basicNext ifNil: [ ^nil ].
+ character2 := aStream basicNext ifNil: [ ^nil ].
+
- character1 := aStream basicNext.
- character1 isNil ifTrue: [^ nil].
- character2 := aStream basicNext.
- character2 isNil ifTrue: [^ nil].
-
readBOM := false.
(character1 asciiValue = 16rFF and: [character2 asciiValue = 16rFE]) ifTrue: [
+ self
+ useByteOrderMark: true;
+ useLittleEndian: true.
+ readBOM := true ].
- self useByteOrderMark: true.
- self useLittleEndian: true.
- readBOM := true.
- ].
(character1 asciiValue = 16rFE and: [character2 asciiValue = 16rFF]) ifTrue: [
+ self
+ useByteOrderMark: true;
+ useLittleEndian: false.
+ readBOM := true ].
- self useByteOrderMark: true.
- self useLittleEndian: false.
- readBOM := true.
- ].
readBOM ifTrue: [
+ character1 := aStream basicNext ifNil: [ ^nil ].
+ character2 := aStream basicNext ifNil: [ ^nil ] ].
- character1 := aStream basicNext.
- character1 isNil ifTrue: [^ nil].
- character2 := aStream basicNext.
- character2 isNil ifTrue: [^ nil].
- ].
+ useLittleEndian
+ ifTrue: [ charValue := character2 charCode bitShift: 8 + character1 charCode ]
+ ifFalse: [ charValue := character1 charCode bitShift: 8 + character2 charCode ].
- self useLittleEndian ifTrue: [
- charValue := character2 charCode << 8 + character1 charCode.
- ] ifFalse: [
- charValue := character1 charCode << 8 + character2 charCode.
- ].
+ ^ self charFromStream: aStream withFirst: charValue!
- ^ self charFromStream: aStream withFirst: charValue.
- !
Item was changed:
----- Method: UTF16TextConverter>>nextPut:toStream: (in category 'conversion') -----
nextPut: aCharacter toStream: aStream
| charCode |
aStream isBinary ifTrue: [ ^aCharacter storeBinaryOn: aStream ].
+ (useByteOrderMark and: [ byteOrderMarkDone not ]) ifTrue: [
- (useByteOrderMark == true and: [ byteOrderMarkDone isNil ]) ifTrue: [
self next16BitValue: 16rFEFF toStream: aStream.
byteOrderMarkDone := true ].
(charCode := aCharacter charCode) < 256
ifTrue: [
(latin1Encodings at: charCode + 1)
ifNil: [ self next16BitValue: charCode toStream: aStream ]
ifNotNil: [ :encodedString | aStream basicNextPutAll: encodedString ] ]
ifFalse: [
charCode <= 16rFFFF
ifTrue: [ self next16BitValue: charCode toStream: aStream ]
ifFalse: [
| low high |
charCode := charCode - 16r10000.
+ low := charCode \\ 16r400 + 16rDC00.
+ high := charCode // 16r400 + 16rD800.
- low := (charCode \\ 16r400) + 16rDC00.
- high := (charCode // 16r400) + 16rD800.
self
next16BitValue: high toStream: aStream;
next16BitValue: low toStream: aStream ] ].
^aCharacter!
Item was changed:
----- Method: UTF16TextConverter>>useByteOrderMark (in category 'accessing') -----
useByteOrderMark
+ ^useByteOrderMark
- ^ useByteOrderMark ifNil: [^ false].
!
Item was changed:
----- Method: UTF16TextConverter>>useLittleEndian (in category 'accessing') -----
useLittleEndian
+ ^useLittleEndian
- ^ useLittleEndian ifNil: [false].
!
Item was changed:
----- Method: UTF16TextConverter>>useLittleEndian: (in category 'accessing') -----
useLittleEndian: aBoolean
+
+ aBoolean = useLittleEndian ifFalse: [ self swapLatin1EncodingByteOrder ].
- aBoolean = self useLittleEndian ifFalse: [self swapLatin1EncodingByteOrder].
useLittleEndian := aBoolean.
!
More information about the Squeak-dev
mailing list
|