--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FilteringLineStream.st Tue Jul 02 21:04:45 1996 +0200
@@ -0,0 +1,149 @@
+Stream subclass:#FilteringLineStream
+ instanceVariableNames:'lineBuffer inputStream outputStream filter'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Streams'
+!
+
+!FilteringLineStream class methodsFor:'documentation'!
+
+examples
+"
+ |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 - pull-reading'!
+
+filterUpToEnd
+ "pull input from inputStream up to the end,
+ push it filtered into the outputStream"
+
+ [inputStream atEnd] whileFalse:[
+ self nextPut:(inputStream next)
+ ].
+
+ "Created: 2.7.1996 / 20:58:24 / cg"
+ "Modified: 2.7.1996 / 21:02:49 / cg"
+! !
+
+!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 methodsFor:'accessing'!
+
+filter
+ "return the filter"
+
+ ^ filter
+
+ "Created: 2.7.1996 / 20:56:55 / cg"
+ "Modified: 2.7.1996 / 21:03:36 / cg"
+!
+
+filter:something
+ "set the filter"
+
+ filter := something.
+
+ "Created: 2.7.1996 / 20:56:55 / cg"
+ "Modified: 2.7.1996 / 21:03:40 / cg"
+!
+
+inputStream
+ "return the inputStream"
+
+ ^ inputStream
+
+ "Created: 2.7.1996 / 20:56:50 / cg"
+ "Modified: 2.7.1996 / 21:03:43 / cg"
+!
+
+inputStream:something
+ "set the inputStream"
+
+ inputStream := something.
+
+ "Created: 2.7.1996 / 20:56:50 / cg"
+ "Modified: 2.7.1996 / 21:03:46 / cg"
+!
+
+outputStream
+ "return the outputStream"
+
+ ^ outputStream
+
+ "Created: 2.7.1996 / 20:56:53 / cg"
+ "Modified: 2.7.1996 / 21:03:49 / cg"
+!
+
+outputStream:something
+ "set the outputStream"
+
+ outputStream := something.
+
+ "Created: 2.7.1996 / 20:56:53 / cg"
+ "Modified: 2.7.1996 / 21:03:52 / cg"
+! !
+
+!FilteringLineStream class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/libbasic2/FilteringLineStream.st,v 1.1 1996-07-02 19:04:45 cg Exp $'
+! !