support/Xtreams__STXEncoder.st
author mkobetic
Tue, 31 Jan 2012 03:46:52 +0000
changeset 89 208ac7c53cfb
child 92 c5019e8f9992
permissions -rw-r--r--
added STXEncoder (utf8 support)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
89
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     1
"{ Package: 'stx:goodies/xtreams/support' }"
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     2
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     3
"{ NameSpace: Xtreams }"
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     4
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     5
Encoder subclass:#STXEncoder
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     6
	instanceVariableNames:'encoder stream character contentsSpecies'
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     7
	classVariableNames:''
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     8
	poolDictionaries:''
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
     9
	category:'Xtreams-Support'
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    10
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    11
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    12
STXEncoder comment:'Provides access to all encodings supported by VisualWorks.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    13
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    14
Instance Variables
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    15
	encoder <StreamEncoder> the encoder from classic EncodedStream
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    16
	skipRecord      <PositionRecord> the skipRecord of the encoder to allow repeated decoding attempts
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    17
	backupRecord    <PositionRecord> snapshot of the skipRecord that we can restore from
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    18
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    19
'
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    20
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    21
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    22
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    23
!STXEncoder class methodsFor:'instance creation'!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    24
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    25
encoder: anEncoder
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    26
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    27
	^self new encoder: anEncoder
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    28
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    29
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    30
for: anEncoding
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    31
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    32
	^self new encoding: anEncoding
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    33
! !
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    34
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    35
!STXEncoder class methodsFor:'class initialization'!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    36
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    37
initialize
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    38
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    39
	DialectEncoder := self
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    40
! !
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    41
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    42
!STXEncoder methodsFor:'accessing'!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    43
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    44
decodeFrom: aReadStream
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    45
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    46
        stream := aReadStream.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    47
        ^encoder readNextCharacterFrom: self
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    48
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    49
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    50
encode: aCharacter on: aWriteStream
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    51
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    52
        character := aCharacter.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    53
        ^aWriteStream write: (encoder readNextInputCharacterFrom: self)
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    54
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    55
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    56
encoder
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    57
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    58
	^encoder
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    59
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    60
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    61
next: count
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    62
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    63
        |bytes|
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    64
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    65
        bytes := ByteArray new: count.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    66
        character isNil
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    67
                ifTrue: [ stream read: count into: bytes ]
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    68
                ifFalse: [ bytes at: 1 put: character.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    69
                        character := nil.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    70
                        stream read: count - 1 into: bytes at: 2 ].
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    71
        ^bytes
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    72
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    73
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    74
nextUnsignedShortMSB: bigEndian
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    75
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    76
        ^character codePoint
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    77
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    78
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    79
peek
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    80
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    81
        ^character ifNil: [ character := stream get ]
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    82
! !
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    83
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    84
!STXEncoder methodsFor:'initialize-release'!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    85
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    86
encoder: anEncoder
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    87
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    88
        encoder := anEncoder.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    89
        contentsSpecies := (anEncoder newString: 1) class.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    90
!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    91
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    92
encoding: anEncoding
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    93
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    94
        | newEncoder |
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    95
        newEncoder := CharacterEncoder encoderFor: anEncoding.
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    96
        newEncoder isNullEncoder ifTrue: [ self error: 'Unsupported encoding!!' ].
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    97
        self encoder: newEncoder
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    98
! !
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
    99
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
   100
!STXEncoder class methodsFor:'documentation'!
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
   101
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
   102
version_SVN
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
   103
    ^ '$Id$'
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
   104
! !
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
   105
208ac7c53cfb added STXEncoder (utf8 support)
mkobetic
parents:
diff changeset
   106
STXEncoder initialize!