class: EncodedStream
comment/format in: #documentation
changed:
#decodedStreamFor:
#nextChunk
Fix encode checking for FilteringStreams
--- a/EncodedStream.st Wed Aug 21 16:01:32 2013 +0200
+++ b/EncodedStream.st Wed Aug 21 16:07:18 2013 +0200
@@ -36,10 +36,10 @@
documentation
"
- a stream which transparently decodes from an external decoding,
- looking for '---- Encoding: xxx' near the beginning of the file.
+ a stream which transparently decodes from an external decoding,
+ looking for '{ Encoding: xxx' near the beginning of the file.
- especially targeted towards reading ST/X source files.
+ especially targeted towards reading ST/X source files.
"
! !
@@ -59,21 +59,21 @@
|encodingSymbol decoder decodedStream|
- aStream isPositionable ifTrue:[
- encodingSymbol := CharacterEncoder guessEncodingOfStream:aStream.
+ aStream inputStream isPositionable ifTrue:[
+ encodingSymbol := CharacterEncoder guessEncodingOfStream:aStream inputStream.
decoder := self encoderFor:encodingSymbol.
decoder isNil ifTrue:[
"/ ascii or iso8895-1
^ aStream
].
+ decodedStream := self stream:aStream encoder:decoder.
+ decodedStream skipEncodingChunk.
] ifFalse:[
"/ setup for no-encoding;
"/ switch to a real encoder later,
- "/ whenever an encoding pragma is encountered later.
- decoder := CharacterEncoder nullEncoderInstance.
+ "/ whenever an encoding pragma is encountered later by #nextChunk.
+ decodedStream := self stream:aStream encoder:CharacterEncoder nullEncoderInstance.
].
- decodedStream := self stream:aStream encoder:decoder.
- decodedStream skipEncodingChunk.
^ decodedStream
!
@@ -192,25 +192,27 @@
nextChunk
"as a side effect, check for an encoding chunk"
-
- |prevEncoder chunk enc|
+
+ |prevEncoder chunk|
chunk := stream nextChunk.
- chunk isNil ifTrue:[^ chunk].
-
+ chunk isNil ifTrue:[
+ ^ nil
+ ].
prevEncoder := encoder.
- stream isPositionable ifFalse:[
+ (prevEncoder isNullEncoder and:[stream isPositionable not]) ifTrue:[
"/ not already checked
- encoder isNullEncoder ifTrue:[
- "/ check if we need lazy setup of the encoder
- "/ (used with non-positionable streams)
- (chunk includesString:'---- Encoding:') ifTrue:[
- enc := self class encoderFor:(CharacterEncoder guessEncodingOfBuffer:chunk).
- encoder := enc ? encoder.
- ]
- ].
+ "/ check if we need lazy setup of the encoder
+ "/ (used with non-positionable streams)
+ (chunk includesString:'{ Encoding:') ifTrue:[
+ |enc|
+
+ enc := self class encoderFor:(CharacterEncoder guessEncodingOfBuffer:chunk).
+ enc notNil ifTrue:[
+ prevEncoder := encoder := enc.
+ ].
+ ]
].
-
^ prevEncoder decodeString:chunk
!
@@ -370,11 +372,11 @@
!EncodedStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/EncodedStream.st,v 1.33 2013-08-10 11:31:31 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/EncodedStream.st,v 1.34 2013-08-21 14:07:18 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/EncodedStream.st,v 1.33 2013-08-10 11:31:31 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/EncodedStream.st,v 1.34 2013-08-21 14:07:18 stefan Exp $'
!
version_SVN