FilteringLineStream.st
author Claus Gittinger <cg@exept.de>
Tue, 02 Jul 1996 21:27:59 +0200
changeset 400 f61c18fd77be
parent 399 7007796f7a34
child 473 cb46b0ba9934
permissions -rw-r--r--
checkin from browser

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 $'
! !