FilteringLineStream.st
author Claus Gittinger <cg@exept.de>
Tue, 02 Jul 1996 21:04:45 +0200
changeset 399 7007796f7a34
child 400 f61c18fd77be
permissions -rw-r--r--
intitial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
399
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
Stream subclass:#FilteringLineStream
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
	instanceVariableNames:'lineBuffer inputStream outputStream filter'
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	classVariableNames:''
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	poolDictionaries:''
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	category:'Streams'
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!FilteringLineStream  class methodsFor:'documentation'!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
examples
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
    |in filter1 filter2|
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    in := 'Makefile' asFilename readStream.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    filter1 := FilteringLineStream basicNew.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    filter1 inputStream:in.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
    filter1 filter:[:line | (line startsWith:'#') ifTrue:[line] ifFalse:[nil]].
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
    filter2 := FilteringLineStream basicNew.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
    filter2 filter:[:line | (line startsWith:'#-') ifTrue:[line] ifFalse:[nil]].
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
    filter1 outputStream:filter2.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    filter2 outputStream:Transcript.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
    filter1 filterUpToEnd
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
! !
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!FilteringLineStream methodsFor:'access - pull-reading'!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
filterUpToEnd
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
    "pull input from inputStream up to the end,
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
     push it filtered into the outputStream"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
    [inputStream atEnd] whileFalse:[
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
        self nextPut:(inputStream next)
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    ].
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    "Created: 2.7.1996 / 20:58:24 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    "Modified: 2.7.1996 / 21:02:49 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
! !
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
!FilteringLineStream methodsFor:'access - push-writing'!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
cr
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    "finish a line, push it filtered into the outputStream"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    |output|
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    lineBuffer isNil ifTrue:[lineBuffer := ''].
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    output := filter value:lineBuffer.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    output notNil ifTrue:[
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        outputStream nextPutAll:output.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
        outputStream cr.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    ].
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    lineBuffer := ''.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    "Created: 2.7.1996 / 20:55:53 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    "Modified: 2.7.1996 / 21:03:07 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
nextPut:something
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    "collect a line and push it when a cr arrives"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    something == Character cr ifTrue:[
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        self cr
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    ] ifFalse:[
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
        lineBuffer isNil ifTrue:[lineBuffer := ''].
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
        lineBuffer := lineBuffer copyWith:something.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    ]
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    "Created: 2.7.1996 / 20:54:38 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    "Modified: 2.7.1996 / 21:03:26 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
nextPutAll:something
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    "collect a line and push it when a cr arrives"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    lineBuffer isNil ifTrue:[lineBuffer := ''].
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    lineBuffer := lineBuffer , something.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    "Created: 2.7.1996 / 20:54:45 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    "Modified: 2.7.1996 / 21:03:30 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
! !
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
!FilteringLineStream methodsFor:'accessing'!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
filter
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
    "return the filter"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    ^ filter
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    "Created: 2.7.1996 / 20:56:55 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    "Modified: 2.7.1996 / 21:03:36 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
filter:something
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    "set the filter"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    filter := something.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    "Created: 2.7.1996 / 20:56:55 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    "Modified: 2.7.1996 / 21:03:40 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
inputStream
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    "return the inputStream"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    ^ inputStream
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    "Created: 2.7.1996 / 20:56:50 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    "Modified: 2.7.1996 / 21:03:43 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
inputStream:something
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    "set the inputStream"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    inputStream := something.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    "Created: 2.7.1996 / 20:56:50 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    "Modified: 2.7.1996 / 21:03:46 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
outputStream
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    "return the outputStream"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    ^ outputStream
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    "Created: 2.7.1996 / 20:56:53 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    "Modified: 2.7.1996 / 21:03:49 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
outputStream:something
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    "set the outputStream"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
    outputStream := something.
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    "Created: 2.7.1996 / 20:56:53 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    "Modified: 2.7.1996 / 21:03:52 / cg"
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
! !
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
!FilteringLineStream  class methodsFor:'documentation'!
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
version
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    ^ '$Header: /cvs/stx/stx/libbasic2/FilteringLineStream.st,v 1.1 1996-07-02 19:04:45 cg Exp $'
7007796f7a34 intitial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
! !