support/Xtreams__Encoder.st
author Martin Kobetic <mkobetic@gmail.com>
Mon, 22 Aug 2011 15:51:21 +0000
changeset 6 5fcffc3d40d2
child 24 f906c95ca2ed
permissions -rw-r--r--
first cut

"{ Package: 'stx:goodies/xtreams/support' }"

"{ NameSpace: Xtreams }"

Object subclass:#Encoder
	instanceVariableNames:''
	classVariableNames:'DialectEncoder Encoders'
	poolDictionaries:''
	category:'Xtreams'
!

Encoder comment:'Abstract character encoder class defines the API and maintains a registry of known encoders (Encoders). Also provides a hook to allow plugging in dialect specific encoders (DialectEncoder) as a secondary encoder resource.

Shared Variables
	DialectEncoder	<Class> optional dialect specific encoder class providing support for additional encodings
	Encoders	<Dictionary key: Symbol value: Class> maps encoding names to encoders

'
!


!Encoder class methodsFor:'instance creation'!

for: anEncoding

	anEncoding isSymbol ifFalse: [ ^anEncoding streamingAsEncoder ].
	^Encoders at: anEncoding ifAbsent: [
		DialectEncoder
			ifNil: [ self error: 'Unknown encoding!!' ]
			ifNotNil: [ :factory | factory for: anEncoding ] ]
!

streamingAsEncoder

	^self new
! !

!Encoder class methodsFor:'accessing'!

encoders

	^Encoders ifNil: [ Encoders := IdentityDictionary new ]
! !

!Encoder methodsFor:'accessing'!

backupState
!

decodeFrom: aReadStream

	^self subclassResponsibility
!

encode: aCharacter on: aWriteStream

	^self subclassResponsibility
!

restoreState
!

streamingAsEncoder

	^self
! !

!Encoder class methodsFor:'documentation'!

version_SVN
    ^ '$Id$'
! !