[squeak-dev] The Inbox: Multilingual-ul.133.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Jan 24 03:14:45 UTC 2011
A new version of Multilingual was added to project The Inbox:
http://source.squeak.org/inbox/Multilingual-ul.133.mcz
==================== Summary ====================
Name: Multilingual-ul.133
Author: ul
Time: 24 January 2011, 3:40:52.355 am
UUID: e8de6a53-b209-c442-911b-4f711ca326aa
Ancestors: Multilingual-mtf.132, Multilingual-sn.131
- merged Multilingual-sn.131 to fix #defaultSystemConverter if using Latin1Environment
- make sure that the converter (#defaultSystemConverter) and line end convention (crlf for windows, lf for other platforms) is properly initialized for multi-byte stdio streams
- fixed MultiByteFileStream >> #setConverterForCode which tried to save and restore the stream's state while the converter (which decides how to store the state) was changed
- use the converter variable instead of the message with the same name from MultiByteFileStream
- deprecated #bareNext, inlined it to it's two senders which were also refactored a bit
- initialize MultiByteFileStream instances for stdio via #newForStdio instead of #openOnHandle:name:forWrite: which is removed.
=============== Diff against Multilingual-mtf.132 ===============
Item was changed:
----- Method: Latin1Environment class>>fileNameConverterClass (in category 'subclass responsibilities') -----
fileNameConverterClass
+ ^ self systemConverterClass
- ^ Latin1TextConverter
!
Item was changed:
----- Method: Latin1Environment class>>inputInterpreterClass (in category 'subclass responsibilities') -----
inputInterpreterClass
| platformName osVersion |
platformName := SmalltalkImage current platformName.
osVersion := SmalltalkImage current osVersion.
(platformName = 'Win32' and: [osVersion ~= 'CE'])
ifTrue: [^ (self win32VMUsesUnicode) ifTrue: [UTF32InputInterpreter] ifFalse: [MacRomanInputInterpreter]].
platformName = 'Mac OS'
+ ifTrue: [^ MacUnicodeInputInterpreter].
- ifTrue: [^ MacRomanInputInterpreter].
platformName = 'unix'
ifTrue: [^ UTF32InputInterpreter].
+ ^ MacUnicodeInputInterpreter!
- ^ MacRomanInputInterpreter!
Item was changed:
----- Method: Latin1Environment class>>systemConverterClass (in category 'subclass responsibilities') -----
systemConverterClass
+ | platformName osVersion |
+ platformName := SmalltalkImage current platformName.
+ osVersion := SmalltalkImage current getSystemAttribute: 1002.
+ (platformName = 'Win32'
+ and: [osVersion = 'CE'])
+ ifTrue: [^ MacRomanTextConverter].
+ platformName = 'Win32'
+ ifTrue: [^ (self win32VMUsesUnicode) ifTrue: [UTF8TextConverter] ifFalse: [Latin1TextConverter]].
+ platformName = 'Mac OS'
+ ifTrue: [^ ('10*' match: SmalltalkImage current osVersion)
+ ifTrue: [UTF8TextConverter]
+ ifFalse: [MacRomanTextConverter]].
+ platformName = 'unix'
+ ifTrue: [^ UTF8TextConverter].
+ ^ MacRomanTextConverter!
- ^ Latin1TextConverter.
- !
Item was changed:
----- Method: MacUnicodeInputInterpreter>>initialize (in category 'initialization') -----
initialize
| satisfiesVersion |
satisfiesVersion := self
majorMinorBuildFrom: SmalltalkImage current vmVersion
+ satisfies: [:major :minor :build |
+ major >= 4 or: [
+ major >= 3 and: [minor >= 8 and: [build >= 7]]]].
- satisfies: [:major :minor :build | (major >= 3
- and: [minor >= 8
- and: [build >= 7]]) or: [major >= 4]].
-
satisfiesVersion
ifTrue: [keyValueIndex := 6]
ifFalse: [keyValueIndex := 3]!
Item was added:
+ ----- Method: MultiByteFileStream class>>newForStdio (in category 'as yet unclassified') -----
+ newForStdio
+ "Use crlf as line end convention on windows, lf on all other platforms. Also make sure that the converter is initialized."
+
+ | lineEndConvention |
+ lineEndConvention := self lineEndDefault.
+ lineEndConvention == #crlf ifFalse: [
+ lineEndConvention := #lf ].
+ ^self new
+ lineEndConvention: lineEndConvention;
+ initializeConverter;
+ yourself!
Item was changed:
----- Method: MultiByteFileStream>>bareNext (in category 'crlf private') -----
bareNext
+ self deprecated: 'Don''t use this method anymore.'.
+ ^converter nextFromStream: self.
- ^ self converter nextFromStream: self.
!
Item was changed:
----- Method: MultiByteFileStream>>converter (in category 'accessing') -----
converter
+ ^converter ifNil: [
+ self initializeConverter.
+ converter ]!
- converter ifNil: [self converter: TextConverter defaultSystemConverter].
- ^ converter
- !
Item was added:
+ ----- Method: MultiByteFileStream>>initializeConverter (in category 'initialize-release') -----
+ initializeConverter
+
+ self converter: TextConverter defaultSystemConverter!
Item was changed:
----- Method: MultiByteFileStream>>next (in category 'public') -----
next
+ | char |
- | char secondChar state |
char := converter nextFromStream: self.
+ "#doConversion is inlined here"
+ (wantsLineEndConversion == true and: [ lineEndConvention notNil ]) ifTrue: [
+ char == Cr ifTrue: [
+ | state |
+ state := converter saveStateOf: self.
+ (converter nextFromStream: self) ifNotNil: [ :secondChar |
+ secondChar == Lf ifFalse: [
+ converter restoreStateOf: self with: state ] ].
+ ^Cr ].
+ char == Lf ifTrue: [
+ ^Cr ] ].
- (wantsLineEndConversion == true and: [ lineEndConvention notNil ]) "#doConversion is inlined here"
- ifTrue: [
- char == Cr ifTrue: [
- state := converter saveStateOf: self.
- secondChar := self bareNext.
- secondChar ifNotNil: [
- secondChar == Lf ifFalse: [ converter restoreStateOf: self with: state ] ].
- ^Cr ].
- char == Lf ifTrue: [
- ^Cr ] ].
^char.
!
Item was changed:
----- Method: MultiByteFileStream>>next:innerFor: (in category 'crlf private') -----
next: n innerFor: aString
- | peekChar state |
- "if we just read a CR, and the next character is an LF, then skip the LF"
aString size = 0 ifTrue: [^ aString].
+ "if we just read a CR, and the next character is an LF, then skip the LF"
+ aString last == Cr ifTrue: [
+ | state |
- (aString last = Character cr) ifTrue: [
state := converter saveStateOf: self.
+ (converter nextFromStream: self) ifNotNil: [ :peekChar |
+ peekChar == Lf ifFalse: [
+ converter restoreStateOf: self with: state ] ] ].
+ ^aString withSqueakLineEndings
- peekChar := self bareNext. "super peek doesn't work because it relies on #next"
- (peekChar notNil and: [peekChar ~= Character lf]) ifTrue: [
- converter restoreStateOf: self with: state.
- ].
- ].
-
- ^ aString withSqueakLineEndings.
!
Item was changed:
----- Method: MultiByteFileStream>>nextPut: (in category 'public') -----
nextPut: aCharacter
aCharacter isInteger ifTrue: [ ^super nextPut: aCharacter ].
(wantsLineEndConversion == true and: [ lineEndConvention notNil ]) "#doConversion is inlined here"
ifTrue: [
+ aCharacter == Cr
- aCharacter = Cr
ifTrue: [
+ converter
+ nextPutAll: (LineEndStrings at: lineEndConvention)
+ toStream: self ]
- (LineEndStrings at: lineEndConvention) do: [ :each |
- converter nextPut: each toStream: self ] ]
ifFalse: [
converter nextPut: aCharacter toStream: self ].
^aCharacter ].
+ converter nextPut: aCharacter toStream: self.
+ ^aCharacter!
- self converter nextPut: aCharacter toStream: self.
- ^aCharacter
- !
Item was changed:
----- Method: MultiByteFileStream>>nextPutAll: (in category 'public') -----
nextPutAll: aCollection
(self isBinary or: [aCollection class == ByteArray]) ifTrue: [
^ super nextPutAll: aCollection.
].
+ converter nextPutAll: aCollection toStream: self.
- self converter nextPutAll: aCollection toStream: self.
^aCollection!
Item was removed:
- ----- Method: MultiByteFileStream>>openOnHandle:name:forWrite: (in category 'open/close') -----
- openOnHandle: aFileID name: streamName forWrite: writeMode
-
- super openOnHandle: aFileID name: streamName forWrite: writeMode.
- self converter "Make sure that converter is initialized."!
Item was changed:
----- Method: MultiByteFileStream>>setConverterForCode (in category 'private') -----
setConverterForCode
+ | currentPosition |
- | current |
(SourceFiles at: 2)
ifNotNil: [self fullName = (SourceFiles at: 2) fullName ifTrue: [^ self]].
+ currentPosition := self position.
- current := self converter saveStateOf: self.
self position: 0.
self binary.
((self next: 3) = #[ 16rEF 16rBB 16rBF ]) ifTrue: [
self converter: UTF8TextConverter new
] ifFalse: [
self converter: MacRomanTextConverter new.
].
+ self position: currentPosition.
- converter restoreStateOf: self with: current.
self text.
!
More information about the Squeak-dev
mailing list
|