EncodedStream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18192 32a7c53ef4d0
child 18768 99079a967eb0
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17668
871f6ce6dcdf class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17650
diff changeset
     1
"{ Encoding: utf8 }"
871f6ce6dcdf class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17650
diff changeset
     2
8148
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
     3
"
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
     4
 COPYRIGHT (c) 2004 by eXept Software AG
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
     5
              All Rights Reserved
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
     6
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
     7
 This software is furnished under a license and may be used
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
     8
 only in accordance with the terms of that license and with the
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    10
 be provided or otherwise made available to, or used by, any
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    11
 other person.  No title to or ownership of the software is
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    12
 hereby transferred.
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    13
"
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
17331
b1d8f60e45fb class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16394
diff changeset
    16
"{ NameSpace: Smalltalk }"
b1d8f60e45fb class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16394
diff changeset
    17
8447
9bdea3431846 EncodedStream inherts from PeekableStream
Stefan Vogel <sv@exept.de>
parents: 8444
diff changeset
    18
PeekableStream subclass:#EncodedStream
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
    19
	instanceVariableNames:'encoder stream'
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
    20
	classVariableNames:''
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
    21
	poolDictionaries:''
15963
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
    22
	category:'Collections-Text-Encodings'
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
8148
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    25
!EncodedStream class methodsFor:'documentation'!
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    26
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    27
copyright
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    28
"
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    29
 COPYRIGHT (c) 2004 by eXept Software AG
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    30
              All Rights Reserved
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    31
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    32
 This software is furnished under a license and may be used
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    33
 only in accordance with the terms of that license and with the
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    35
 be provided or otherwise made available to, or used by, any
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    36
 other person.  No title to or ownership of the software is
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    37
 hereby transferred.
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    38
"
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    39
!
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    40
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    41
documentation
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    42
"
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    43
    a stream which transparently decodes from an external decoding,
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    44
    looking for '{ Encoding: xxx' near the beginning of the file.
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    45
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    46
    especially targeted towards reading ST/X source files.
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    47
"
8148
dbf64e3142d9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8147
diff changeset
    48
! !
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!EncodedStream class methodsFor:'instance creation'!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
stream:streamArg encoder:encoder
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    ^ (self basicNew) stream:streamArg; encoder:encoder
16394
a662e916316c class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16258
diff changeset
    54
a662e916316c class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16258
diff changeset
    55
    "
a662e916316c class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16258
diff changeset
    56
     |s|
a662e916316c class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16258
diff changeset
    57
     s := EncodedStream stream:Transcript encoder:(CharacterEncoder encoderToEncodeFrom:#utf8 into:#unicode).
17668
871f6ce6dcdf class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17650
diff changeset
    58
     s nextPutAll:('öäü' utf8Encoded)
16394
a662e916316c class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16258
diff changeset
    59
    "
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
! !
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
17650
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
    62
!EncodedStream class methodsFor:'Compatibility-VW5.4'!
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
    63
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
    64
on: aStream encodedBy: aStreamEncoder
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
    65
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
    66
        ^self basicNew on: aStream encodedBy: aStreamEncoder
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
    67
! !
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
    68
12610
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
    69
!EncodedStream class methodsFor:'utilities'!
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
    70
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
    71
decodedStreamFor:aStream
15345
8f04bcf567e6 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15049
diff changeset
    72
    "given a positionable stream, guess its encoding (by reading the
8f04bcf567e6 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15049
diff changeset
    73
     first few lines, looking for a string with an encoding hint,
8f04bcf567e6 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15049
diff changeset
    74
     and return an appropriate encoded string, which does the decoding
8f04bcf567e6 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15049
diff changeset
    75
     on the fly. Used mostly to read UTF8 files (source code)"
8f04bcf567e6 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15049
diff changeset
    76
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    77
    |encodingSymbol decoder decodedStream|
12610
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
    78
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    79
    aStream inputStream isPositionable ifTrue:[
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    80
        encodingSymbol := CharacterEncoder guessEncodingOfStream:aStream inputStream.
15963
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
    81
        decoder := CharacterEncoder encoderFor:encodingSymbol.
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    82
        decoder isNil ifTrue:[
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    83
            "/ ascii or iso8895-1
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    84
            ^ aStream
12610
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
    85
        ].
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    86
        decodedStream := self stream:aStream encoder:decoder.
15963
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
    87
        "JV@2012-03-27: NO, DO NOT CHANGE POSITION!! Caller might be interested
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
    88
                        in all data!!!!!!"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
    89
        "/decodedStream skipEncodingChunk.
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    90
    ] ifFalse:[
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    91
        "/ setup for no-encoding; 
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    92
        "/ switch to a real encoder later,
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    93
        "/ whenever an encoding pragma is encountered later by #nextChunk.
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
    94
        decodedStream := self stream:aStream encoder:CharacterEncoder nullEncoderInstance.
14095
73651b01bf12 changed: #decodedStreamFor:
Stefan Vogel <sv@exept.de>
parents: 14091
diff changeset
    95
    ].
12610
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
    96
    ^ decodedStream
15963
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
    97
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
    98
    "Modified: / 23-08-2013 / 17:30:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
    99
!
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   100
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   101
encoderFor:anEncodingSymbol
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   102
    (anEncodingSymbol isNil
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   103
    or:[ anEncodingSymbol = #'iso8859-1' 
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   104
    or:[ anEncodingSymbol = #'ascii' ]]) ifTrue:[
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   105
        ^ nil
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   106
    ].
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   107
    ^ CharacterEncoder encoderFor:anEncodingSymbol.
12610
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
   108
! !
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
   109
17650
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   110
!EncodedStream methodsFor:'Compatibility-VW5.4'!
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   111
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   112
on:aStream encodedBy:aStreamEncoder
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   113
    "Initialize the receiver on aStream with aStreamEncoder."
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   114
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   115
"/    skipSize := PositionRecord new.
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   116
"/    aStreamEncoder skipRecord: skipSize.
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   117
"/    binary := false.
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   118
"/    lineEndConvention == nil 
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   119
"/            ifTrue: 
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   120
"/                    [aStream needsFileLineEndConversion 
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   121
"/                            ifTrue: [self lineEndConvention: IOAccessor defaultLineEndConvention]
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   122
"/                            ifFalse: [self lineEndConvention: LineEndTransparent]].
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   123
    self stream: aStream.
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   124
    self encoder: aStreamEncoder
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   125
! !
bd5e57d909e3 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17331
diff changeset
   126
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
!EncodedStream methodsFor:'accessing'!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
11992
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   129
contentsSpecies
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   130
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   131
    "Not sure if this is ok"
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   132
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   133
    ^ stream contentsSpecies.
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   134
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   135
"/    ^UnicodeString
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   136
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   137
    "Created: / 14-06-2005 / 17:11:01 / janfrog"
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   138
!
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   139
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
encoder
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    ^ encoder
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
encoder:something
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    encoder := something.
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
15593
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   148
inputStream
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   149
    ^ stream inputStream
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   150
!
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   151
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   152
lineNumber
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   153
    ^ stream lineNumber
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   154
!
02cfcd9b9737 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15592
diff changeset
   155
12646
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   156
pathName
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   157
    "if our base stream hat a pathname, delegate..."
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   158
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   159
    stream isNil ifTrue:[
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   160
        ^ nil.
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   161
    ].
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   162
    ^ stream pathName.
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   163
!
ee2144f97338 added: #pathName
Stefan Vogel <sv@exept.de>
parents: 12610
diff changeset
   164
11766
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   165
readStream
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   166
    ^ self
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   167
!
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   168
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
stream
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
    ^ stream
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
stream:something
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    stream := something.
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
! !
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
15963
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   177
!EncodedStream methodsFor:'private fileIn'!
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   178
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   179
basicFileInNotifying:someone passChunk:passChunk
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   180
    "central method to file in from the receiver, i.e. read chunks and evaluate them -
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   181
     return the value of the last chunk.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   182
     Someone (which is usually some codeView) is notified of errors."
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   183
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   184
    |lastValue pkg nameSpace usedNameSpaces
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   185
     packageQuerySignal nameSpaceQuerySignal usedNameSpaceQuerySignal
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   186
     changeDefaultApplicationNotificationSignal
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   187
     defaultApplicationQuerySignal defaultApplication
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   188
     confirmationQuerySignal handledSignals passedSignals askSomeoneForPackage outerContext askForVariableTypeOfUndeclaredQuery|
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   189
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   190
    self skipSeparators.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   191
    lastValue := self peek.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   192
    lastValue == $< ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   193
        "/ assume, it's an xml file
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   194
        ^ self fileInXMLNotifying:someone passChunk:passChunk.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   195
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   196
    lastValue == $# ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   197
        "assume unix interpreter name:
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   198
         '#!!stx -e' or something like this"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   199
        self nextPeek == $!! ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   200
            "skip the unix command line"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   201
            self nextLine
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   202
        ] ifFalse:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   203
             self error:'Invalid chunk start'
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   204
        ]
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   205
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   206
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   207
    Smalltalk::Compiler isNil ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   208
        self isFileStream ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   209
            Transcript show:('[' , self pathName , '] ').
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   210
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   211
        Transcript showCR:'cannot fileIn (no compiler).'.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   212
        ^ nil.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   213
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   214
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   215
    "/ support for V'Age applications
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   216
    defaultApplicationQuerySignal := Class defaultApplicationQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   217
    changeDefaultApplicationNotificationSignal := Class changeDefaultApplicationNotificationSignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   218
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   219
    "/ support for ST/X's nameSpaces & packages
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   220
    packageQuerySignal := Class packageQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   221
    nameSpaceQuerySignal := Class nameSpaceQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   222
    usedNameSpaceQuerySignal := Class usedNameSpaceQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   223
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   224
    (someone respondsTo:#packageToInstall) ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   225
        pkg := someone packageToInstall.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   226
        askSomeoneForPackage := true.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   227
    ] ifFalse:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   228
        pkg := packageQuerySignal query.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   229
        askSomeoneForPackage := false.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   230
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   231
    (someone respondsTo:#currentNameSpace) ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   232
        nameSpace := someone currentNameSpace
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   233
    ] ifFalse:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   234
        nameSpace := nameSpaceQuerySignal query.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   235
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   236
    (someone respondsTo:#usedNameSpaces) ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   237
        usedNameSpaces := someone usedNameSpaces
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   238
    ] ifFalse:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   239
        usedNameSpaces := usedNameSpaceQuerySignal query.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   240
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   241
    (someone respondsTo:#defaultApplication) ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   242
        defaultApplication := someone defaultApplication
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   243
    ] ifFalse:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   244
        defaultApplication := defaultApplicationQuerySignal query.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   245
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   246
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   247
    confirmationQuerySignal := Metaclass confirmationQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   248
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   249
    handledSignals := SignalSet new.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   250
    passedSignals := IdentitySet new.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   251
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   252
    handledSignals add:changeDefaultApplicationNotificationSignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   253
    passedSignals add:changeDefaultApplicationNotificationSignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   254
    handledSignals add:defaultApplicationQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   255
    passedSignals add:defaultApplicationQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   256
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   257
    handledSignals add:packageQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   258
    handledSignals add:usedNameSpaceQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   259
    handledSignals add:nameSpaceQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   260
    handledSignals add:confirmationQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   261
    passedSignals add:confirmationQuerySignal.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   262
    Parser notNil ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   263
        "only if libcomp is present"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   264
        "Also catch a 'Parser askForVariableTypeOfUndeclaredQuery' and proceed with nil. 
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   265
         Imagine somebody has autodefine workspace variables on and then 
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   266
         evaluate Smalltalk loadPackage:'xyz' that loads code from source (using file-in), 
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   267
         certainly we don't want to compile workspace variable access for every
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   268
         not-yet-loaded class in some namespace. 
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   269
         This is demonstrated by Regression::CompilerTests2>>test_01 
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   270
         and this change actually fixes this test."
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   271
        askForVariableTypeOfUndeclaredQuery := Parser askForVariableTypeOfUndeclaredQuery.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   272
        handledSignals add:askForVariableTypeOfUndeclaredQuery.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   273
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   274
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   275
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   276
    outerContext := thisContext.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   277
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   278
    handledSignals handle:[:ex |
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   279
        |sig|
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   280
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   281
        sig := ex creator.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   282
        ((passedSignals includes:sig) and:[sig isHandledIn:outerContext]) ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   283
            ex reject
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   284
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   285
        
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   286
        sig == changeDefaultApplicationNotificationSignal ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   287
            "/ invoked via #becomeDefault to set the defaultApp and the package.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   288
            "/ (only when filing in V'Age code)
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   289
            defaultApplication := ex parameter.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   290
            pkg := defaultApplication name asSymbol.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   291
            ex proceedWith:nil
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   292
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   293
        sig == defaultApplicationQuerySignal ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   294
            "/ query for the application to add classes & methods into
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   295
            "/ (only when filing in V'Age code)
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   296
            ex proceedWith:defaultApplication
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   297
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   298
        sig == packageQuerySignal ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   299
            "answer the package to use for classes & methods"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   300
            askSomeoneForPackage ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   301
                ex proceedWith:someone packageToInstall
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   302
            ] ifFalse:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   303
                ex proceedWith:pkg
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   304
            ]
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   305
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   306
        sig == usedNameSpaceQuerySignal ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   307
            "answer the nameSpaces to be searched when encountering globals"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   308
            ex proceedWith:usedNameSpaces
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   309
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   310
        sig == nameSpaceQuerySignal ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   311
            "answer the nameSpace to install new classes in"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   312
            ex proceedWith:nameSpace
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   313
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   314
        sig == confirmationQuerySignal ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   315
            "don't pop up dialogs"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   316
            ex proceedWith:false
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   317
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   318
        sig == askForVariableTypeOfUndeclaredQuery ifTrue:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   319
           "no autodefined variables or so"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   320
            ex proceedWith:nil.
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   321
        ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   322
    ] do:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   323
        [self atEnd] whileFalse:[
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   324
            lastValue := self fileInNextChunkNotifying:someone passChunk:passChunk
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   325
        ]
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   326
    ].
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   327
    ^ lastValue
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   328
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   329
    "Modified: / 10.9.1999 / 16:54:01 / stefan"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   330
    "Modified: / 16.11.2001 / 16:21:28 / cg"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   331
    "Modified: / 18-03-2013 / 17:45:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   332
! !
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   333
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
!EncodedStream methodsFor:'stream protocol'!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
8175
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   336
atEnd
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   337
    ^ stream atEnd
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   338
!
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   339
8165
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   340
close
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   341
    stream close
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   342
!
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   343
13400
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   344
contents
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   345
18157
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   346
    ^String streamContents: [:s|
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   347
        [ self atEnd ] whileFalse:[
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   348
            |ch|
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   349
            ch := self next.
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   350
            "/ decoder may decide to return nil from #next, even though the
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   351
            "/ underlying stream was not at the end before. This is probably a bug...
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   352
            ch notNil ifTrue:[
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   353
                s nextPut: ch
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   354
            ]
13400
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   355
        ]
18157
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   356
    ]
13400
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   357
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   358
    "Created: / 25-02-2010 / 23:34:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   359
!
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   360
8213
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   361
cr
8459
1f59b17291a3 *** empty log message ***
penk
parents: 8447
diff changeset
   362
    self nextPutAll:(Character cr asString)
8213
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   363
!
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   364
11992
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   365
emphasis:anObject
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   366
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   367
    stream emphasis:anObject
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   368
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   369
    "Created: / 15-06-2005 / 11:16:33 / janfrog"
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   370
!
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   371
15477
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   372
flush
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   373
    stream flush
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   374
!
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   375
11946
1d2aefade06e +isOpen
Claus Gittinger <cg@exept.de>
parents: 11766
diff changeset
   376
isOpen
12690
1dab7b405304 changed: #isOpen
Stefan Vogel <sv@exept.de>
parents: 12646
diff changeset
   377
    ^ stream notNil and:[stream isOpen]
11946
1d2aefade06e +isOpen
Claus Gittinger <cg@exept.de>
parents: 11766
diff changeset
   378
!
1d2aefade06e +isOpen
Claus Gittinger <cg@exept.de>
parents: 11766
diff changeset
   379
11766
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   380
next
11992
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   381
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   382
    ^encoder readNextCharacterFrom:stream
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   383
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   384
    "Created: / 14-06-2005 / 17:01:39 / janfrog"
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   385
!
11766
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   386
11992
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   387
next:charactersToRead
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   388
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   389
    ^encoder readNext:charactersToRead charactersFrom:stream
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   390
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   391
    "Created: / 16-06-2005 / 11:43:43 / masca"
11766
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   392
!
b26aac1e4eb1 *** empty log message ***
Michael Beyl <mb@exept.de>
parents: 8712
diff changeset
   393
8147
416bcaa573ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 8047
diff changeset
   394
nextChunk
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   395
    "as a side effect, check for an encoding chunk"
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   396
    
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   397
    |prevEncoder chunk|
8175
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   398
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   399
    chunk := stream nextChunk.
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   400
    chunk isNil ifTrue:[
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   401
        ^ nil
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   402
    ].
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   403
    prevEncoder := encoder.
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   404
    (prevEncoder isNullEncoder and:[stream isPositionable not]) ifTrue:[
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   405
        "/ not already checked
15664
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   406
        "/ check if we need lazy setup of the encoder
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   407
        "/ (used with non-positionable streams)
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   408
        (chunk includesString:'{ Encoding:') ifTrue:[
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   409
            |enc|
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   410
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   411
            enc := self class encoderFor:(CharacterEncoder guessEncodingOfBuffer:chunk).
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   412
            enc notNil ifTrue:[
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   413
                prevEncoder := encoder := enc.
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   414
            ].
1b91431394a5 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15618
diff changeset
   415
        ]
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   416
    ].
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   417
    ^ prevEncoder decodeString:chunk
8147
416bcaa573ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 8047
diff changeset
   418
!
416bcaa573ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 8047
diff changeset
   419
8213
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   420
nextChunkPut:chunk
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   421
    stream nextChunkPut:(encoder encodeString:chunk)
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   422
!
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   423
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
nextPut:aCharacter
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    self nextPutAll:(aCharacter asString).
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
nextPutAll:aCollection
17668
871f6ce6dcdf class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17650
diff changeset
   429
    encoder encodeString:aCollection on:stream 
8147
416bcaa573ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 8047
diff changeset
   430
!
416bcaa573ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 8047
diff changeset
   431
17331
b1d8f60e45fb class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16394
diff changeset
   432
nextPutAll:aCollection startingAt:start to:stop
17668
871f6ce6dcdf class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 17650
diff changeset
   433
    encoder encodeString:(aCollection copyFrom:start to:stop) on:stream.
17331
b1d8f60e45fb class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16394
diff changeset
   434
!
b1d8f60e45fb class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 16394
diff changeset
   435
8444
354d0c48618d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8213
diff changeset
   436
peek
11992
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   437
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   438
    ^stream peek
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   439
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   440
    "Created: / 20-06-2005 / 10:13:03 / masca"
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   441
    "Modified: / 20-06-2005 / 13:06:14 / masca"
8444
354d0c48618d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8213
diff changeset
   442
!
354d0c48618d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8213
diff changeset
   443
8175
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   444
peekFor:aCharacter
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   445
    ^ stream peekFor:aCharacter
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   446
!
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   447
8165
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   448
position
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   449
    ^ stream position
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   450
!
d6446fc1ea3b more stream protocol
ca
parents: 8148
diff changeset
   451
8197
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   452
position0Based
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   453
    <resource: #obsolete>
11947
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   454
    "to be obsoleted - use position"
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   455
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   456
    ^ stream position
8197
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   457
!
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   458
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   459
position0Based:newPosition
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   460
    <resource: #obsolete>
11947
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   461
    "to be obsoleted - use position"
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   462
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   463
    stream position:newPosition
8197
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   464
!
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   465
8175
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   466
position1Based
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   467
    <resource: #obsolete>
11947
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   468
    "to be obsoleted - use position"
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   469
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   470
    ^ stream position + 1
8175
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   471
!
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   472
8147
416bcaa573ef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 8047
diff changeset
   473
position1Based:newPosition
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   474
    <resource: #obsolete>
11947
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   475
    "to be obsoleted - use position"
18ce463920de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11946
diff changeset
   476
15618
4d4bafe3d804 class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15593
diff changeset
   477
    stream position:newPosition-1
8175
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   478
!
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   479
8197
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   480
position:newPosition
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   481
    stream position:newPosition
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   482
!
4fccb2671b9d stream protocol
Claus Gittinger <cg@exept.de>
parents: 8175
diff changeset
   483
13400
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   484
reset
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   485
    stream reset
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   486
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   487
    "Created: / 25-02-2010 / 23:37:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   488
!
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   489
8213
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   490
setToEnd
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   491
    stream setToEnd
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   492
!
0f9d34b2afb2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8197
diff changeset
   493
14333
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   494
size
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   495
    "not correct, but probably better than 0"
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   496
15585
8cc382344496 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15477
diff changeset
   497
    "/ is that better?
8cc382344496 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15477
diff changeset
   498
    "/ self error:'size of input is unknown (due to decoding)'
14333
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   499
    ^ stream size
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   500
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   501
    "Created: / 31-08-2012 / 16:52:40 / cg"
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   502
!
59c0d7e60297 added: #size
Claus Gittinger <cg@exept.de>
parents: 14095
diff changeset
   503
11992
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   504
skip: anInteger
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   505
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   506
    "/ Should skip on character basis, not on bytes. This works for XML reader
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   507
    ^stream skip: anInteger
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   508
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   509
    "Created: / 20-06-2005 / 13:06:06 / masca"
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   510
!
1d7a1c1c1ccc extended protocol
fm
parents: 11947
diff changeset
   511
8175
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   512
skipSeparators
3548845d3c09 more stream protocol
Claus Gittinger <cg@exept.de>
parents: 8165
diff changeset
   513
    ^ stream skipSeparators
15477
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   514
!
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   515
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   516
sync
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   517
    stream sync
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   518
!
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   519
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   520
syncData
32c7805d7a6e class: EncodedStream
Stefan Vogel <sv@exept.de>
parents: 15345
diff changeset
   521
    stream syncData
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
! !
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   524
!EncodedStream methodsFor:'testing'!
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   525
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   526
isEncodedStream
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   527
    ^ true
15963
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   528
2549ef06a310 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15664
diff changeset
   529
    "Created: / 04-02-2014 / 20:27:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15592
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   530
!
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   531
16258
1582c656cdb0 Added EncodedStream>>isPositionable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15963
diff changeset
   532
isPositionable
1582c656cdb0 Added EncodedStream>>isPositionable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15963
diff changeset
   533
    ^ stream isPositionable
1582c656cdb0 Added EncodedStream>>isPositionable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15963
diff changeset
   534
1582c656cdb0 Added EncodedStream>>isPositionable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15963
diff changeset
   535
    "Created: / 14-03-2014 / 16:18:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1582c656cdb0 Added EncodedStream>>isPositionable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15963
diff changeset
   536
!
1582c656cdb0 Added EncodedStream>>isPositionable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15963
diff changeset
   537
15592
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   538
isReadable
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   539
    ^ stream isReadable
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   540
!
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   541
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   542
isWritable
84ae0710b8b0 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15585
diff changeset
   543
    ^ stream isWritable
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   544
! !
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   545
8712
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   546
!EncodedStream methodsFor:'utilities'!
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   547
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   548
skipEncodingChunk
14091
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   549
    |pos chunk token|
8712
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   550
13525
e17ebc11ca73 changed: #skipEncodingChunk
Claus Gittinger <cg@exept.de>
parents: 13400
diff changeset
   551
    stream isPositionable ifFalse:[
e17ebc11ca73 changed: #skipEncodingChunk
Claus Gittinger <cg@exept.de>
parents: 13400
diff changeset
   552
        ^ self
e17ebc11ca73 changed: #skipEncodingChunk
Claus Gittinger <cg@exept.de>
parents: 13400
diff changeset
   553
    ].
e17ebc11ca73 changed: #skipEncodingChunk
Claus Gittinger <cg@exept.de>
parents: 13400
diff changeset
   554
8712
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   555
    pos := self position.
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   556
    chunk := self nextChunk.
14084
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   557
    [
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   558
        "/ if this is a valid chunk (i.e. not a comment or encoding-directive),
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   559
        "/ then position back, so it will be processed as usual.
14091
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   560
"/ We could parse here, but this is overkill, since we are only interested in the fact,
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   561
"/ that there is anything else than a comment in the chunk.
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   562
"/        result := (Parser for:chunk)
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   563
"/            ignoreErrors:true;
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   564
"/            ignoreWarnings:true;
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   565
"/            parseMethodBody.
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   566
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   567
        token := (Scanner for:chunk)
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   568
                     ignoreErrors:true;
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   569
                     ignoreWarnings:true;
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   570
                     nextToken.
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   571
24392adf9457 changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14089
diff changeset
   572
        token ~= #EOF ifTrue:[
14084
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   573
            self position:pos
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   574
        ].
14086
2629f014266b changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14084
diff changeset
   575
    ] on:Parser parseWarningSignal do:[:ex|
14084
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   576
        "really ignore any error.
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   577
         Even setting ignorError will output diagnostics here
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   578
         during standalone startup when debugging"
14086
2629f014266b changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14084
diff changeset
   579
        ex proceedWith:#ignore.
14084
341e275c4bba changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 13525
diff changeset
   580
    ].
13525
e17ebc11ca73 changed: #skipEncodingChunk
Claus Gittinger <cg@exept.de>
parents: 13400
diff changeset
   581
e17ebc11ca73 changed: #skipEncodingChunk
Claus Gittinger <cg@exept.de>
parents: 13400
diff changeset
   582
    "Modified: / 29-07-2011 / 17:42:11 / cg"
8712
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   583
! !
bcef3a0c0a1d skipEncodingCHunk now in EncodedStream
Claus Gittinger <cg@exept.de>
parents: 8459
diff changeset
   584
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
!EncodedStream class methodsFor:'documentation'!
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
14086
2629f014266b changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14084
diff changeset
   587
version
18157
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   588
    ^ '$Header: /cvs/stx/stx/libbasic/EncodedStream.st,v 1.41 2015-03-26 16:20:12 cg Exp $'
14086
2629f014266b changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14084
diff changeset
   589
!
2629f014266b changed: #skipEncodingChunk
Stefan Vogel <sv@exept.de>
parents: 14084
diff changeset
   590
13400
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   591
version_CVS
18157
ea49ddbe173e class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 18140
diff changeset
   592
    ^ '$Header: /cvs/stx/stx/libbasic/EncodedStream.st,v 1.41 2015-03-26 16:20:12 cg Exp $'
12610
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
   593
!
cfbb45980e28 added: #decodedStreamFor:
Claus Gittinger <cg@exept.de>
parents: 11992
diff changeset
   594
13400
8dcdfacd2f34 changed: #version_CVS
vrany
parents: 12690
diff changeset
   595
version_SVN
15345
8f04bcf567e6 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 15049
diff changeset
   596
    ^ '$ Id: EncodedStream.st 10643 2011-06-08 21:53:07Z vranyj1  $'
8047
9cfc575512eb initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
! !
15049
3c4d74d39396 class: EncodedStream
Claus Gittinger <cg@exept.de>
parents: 14333
diff changeset
   598