FilteringStream subclass:#FilteringLineStream
instanceVariableNames:'lineBuffer'
classVariableNames:''
poolDictionaries:''
category:'Streams'
!
!FilteringLineStream class methodsFor:'documentation'!
examples
"
filter all comments from a file:
|in filter|
in := 'Makefile' asFilename readStream.
filter := FilteringLineStream basicNew.
filter inputStream:in.
filter filter:[:line | (line startsWith:'#') ifTrue:[line] ifFalse:[nil]].
filter outputStream:Transcript.
filter filterUpToEnd
feed a second filter from the first filters output:
|in filter1 filter2|
in := 'Makefile' asFilename readStream.
filter1 := FilteringLineStream basicNew.
filter1 inputStream:in.
filter1 filter:[:line | (line startsWith:'#') ifTrue:[line] ifFalse:[nil]].
filter2 := FilteringLineStream basicNew.
filter2 filter:[:line | (line startsWith:'#-') ifTrue:[line] ifFalse:[nil]].
filter1 outputStream:filter2.
filter2 outputStream:Transcript.
filter1 filterUpToEnd
"
! !
!FilteringLineStream methodsFor:'access - push-writing'!
cr
"finish a line, push it filtered into the outputStream"
|output|
lineBuffer isNil ifTrue:[lineBuffer := ''].
output := filter value:lineBuffer.
output notNil ifTrue:[
outputStream nextPutAll:output.
outputStream cr.
].
lineBuffer := ''.
"Created: 2.7.1996 / 20:55:53 / cg"
"Modified: 2.7.1996 / 21:03:07 / cg"
!
nextPut:something
"collect a line and push it when a cr arrives"
something == Character cr ifTrue:[
self cr
] ifFalse:[
lineBuffer isNil ifTrue:[lineBuffer := ''].
lineBuffer := lineBuffer copyWith:something.
]
"Created: 2.7.1996 / 20:54:38 / cg"
"Modified: 2.7.1996 / 21:03:26 / cg"
!
nextPutAll:something
"collect a line and push it when a cr arrives"
lineBuffer isNil ifTrue:[lineBuffer := ''].
lineBuffer := lineBuffer , something.
"Created: 2.7.1996 / 20:54:45 / cg"
"Modified: 2.7.1996 / 21:03:30 / cg"
! !
!FilteringLineStream class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libbasic2/FilteringLineStream.st,v 1.2 1996-07-02 19:27:59 cg Exp $'
! !