intitial checkin
authorClaus Gittinger <cg@exept.de>
Tue, 02 Jul 1996 21:04:45 +0200
changeset 399 7007796f7a34
parent 398 957973258209
child 400 f61c18fd77be
intitial checkin
FilteringLineStream.st
--- /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 $'
+! !