support/Xtreams__Encoder.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 01 Feb 2012 00:37:59 +0000
changeset 98 bd334e72464f
parent 89 208ac7c53cfb
child 109 9587e2df7029
permissions -rw-r--r--
Fix in #read:into:at:

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

"{ NameSpace: Xtreams }"

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

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: [ DialectEncoder for: anEncoding ] ]
!

streamingAsEncoder

	^self new
! !

!Encoder class methodsFor:'accessing'!

encoders

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

!Encoder methodsFor:'accessing'!

backupState
!

contentsSpecies

        ^String
!

decodeFrom: aReadStream

	^self subclassResponsibility
!

encode: aCharacter on: aWriteStream

	^self subclassResponsibility
!

restoreState
!

streamingAsEncoder

	^self
! !

!Encoder class methodsFor:'documentation'!

version_SVN
    ^ '$Id$'
! !