'From Pharo0.1 of 16 May 2008 [Latest update: #10300] on 10 May 2009 at 1:01:18 am'!
"Change Set:		FasterLatin1Conversion-Part2
Date:			10 May 2009
Author:			nice

Install fast latin1 conversion Part2

Create TextConverter instance variables to handle
latin1 fast conversion + lineEndConventions fast conversion"!

Object subclass: #TextConverter
	instanceVariableNames: 'latin1Map latin1Encodings '
	classVariableNames: ''
	poolDictionaries: 'EventSensorConstants'
	category: 'Multilingual-TextConversion'!

!MultiByteFileStream methodsFor: 'private' stamp: 'nice 5/10/2009 00:13'!
installLineEndConventionInConverter
	converter ifNotNil: [converter installLineEndConvention: (self doConversion
		ifTrue: [LineEndStrings at: lineEndConvention]
		ifFalse: [nil])]! !


!TextConverter methodsFor: 'initialize-release' stamp: 'nice 5/10/2009 00:09'!
installLineEndConvention: lineEndStringOrNil

	latin1Map := self class latin1Map.
	latin1Encodings := self class latin1Encodings.
	lineEndStringOrNil ifNotNil:
		[latin1Encodings := latin1Encodings copy.
		latin1Encodings at: Character cr asciiValue + 1 put: (self convertFromSystemString: lineEndStringOrNil).
		latin1Map := latin1Map copy.
		latin1Map at: Character cr asciiValue + 1 put: 1]! !
	

!TextConverter methodsFor: 'conversion' stamp: 'nice 5/10/2009 00:03'!
nextPutAll: aString toStream: aStream
	"Handle fast conversion if ByteString"
	
	| lastIndex nextIndex |
	aString class == ByteString ifFalse: [
		(latin1Map at: Character cr asciiValue + 1) = 0
			ifTrue: [
				aString do: [:char | self nextPut: char toStream: aStream]]
			ifFalse: [
				aString do: [:char | aStream nextPut: char]].
		^self].
	
	lastIndex := 1.
	[nextIndex := ByteString findFirstInString: aString inSet: latin1Map startingAt: lastIndex.
	nextIndex = 0] whileFalse:
		[aStream next: nextIndex-lastIndex putAll: aString startingAt: lastIndex.
		aStream basicNextPutAll: (latin1Encodings at: (aString byteAt: nextIndex)+1).
		lastIndex := nextIndex + 1].
	aStream next: aString size-lastIndex+1 putAll: aString startingAt: lastIndex.
	^self! !

Object subclass: #TextConverter
	instanceVariableNames: 'latin1Map latin1Encodings'
	classVariableNames: ''
	poolDictionaries: 'EventSensorConstants'
	category: 'Multilingual-TextConversion'!
