URI.st
author Stefan Vogel <sv@exept.de>
Fri, 11 Jul 2003 14:48:15 +0200
changeset 1268 48b43aebf125
parent 1256 f452235ed554
child 1270 01f4dc0293cd
permissions -rw-r--r--
Fix for home directories
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
Object subclass:#URI
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'scheme'
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
	category:'Resources'
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
!URI class methodsFor:'instance creation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
fromString:aString
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
    "create an URI from a given String"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
1251
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    16
    |i scheme rest|
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    17
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    18
    i := aString indexOf:$:.
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    19
    i == 0 ifTrue:[ 
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    20
        self error:('Missing scheme in: %1!!' bindWith:aString)
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    21
    ].
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    22
    scheme := aString copyFrom:1 to:i-1.
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    23
    rest := aString copyFrom:i+1.
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    24
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    25
    ^ (self classForScheme:scheme) scheme:scheme fromString:rest
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    26
1249
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    27
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    28
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    29
"
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    30
    self fromString:''
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1256
diff changeset
    31
    self fromString:'file:~'
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1256
diff changeset
    32
    self fromString:'ftp://exept.exept.de/~stefan/bla'
1249
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    33
"
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    34
!
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    35
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    36
fromString:aString onError:exceptionBlock
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    37
    "create an URI from a given String"
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    38
1251
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    39
    |uri|
1249
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    40
1251
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    41
    Error handle:[:ex| 
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    42
        exceptionBlock value.
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    43
    ] do:[
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    44
        uri := self fromString:aString
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    45
    ].
1249
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    46
1251
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    47
    ^ uri
1249
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    48
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    49
"
1251
7ee3093b7375 *** empty log message ***
tm
parents: 1249
diff changeset
    50
    self fromString:'' onError:nil    
1249
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    51
"
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
!URI class methodsFor:'accessing'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    56
attributes
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    57
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    58
    |dict|
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    59
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    60
    dict := Dictionary new.
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    61
    dict at:#MIME put:'text/plain'.
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    62
    ^ dict
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    63
!
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
    64
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
classForScheme:aString
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
    "find a class for a given scheme name aString"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
    |s|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
    s := aString asLowercase.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
    ^ self allSubclasses detect:[:cls| |schemes|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
        schemes := cls schemes.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
        schemes size ~~ 0 and:[schemes includes:s]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
    ] ifNone:[HierarchicalURI]
1249
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    76
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    77
"
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    78
    self classForScheme:'file'
71aae2f2fbba *** empty log message ***
tm
parents: 1005
diff changeset
    79
"
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
schemes
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    "answer the schemes supported by an URI-class.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
     Concrete subclasses redefine this to answer an array of scheme names"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
    ^ nil
1256
f452235ed554 *** empty log message ***
tm
parents: 1254
diff changeset
    87
!
f452235ed554 *** empty log message ***
tm
parents: 1254
diff changeset
    88
f452235ed554 *** empty log message ***
tm
parents: 1254
diff changeset
    89
transferBufferSize
f452235ed554 *** empty log message ***
tm
parents: 1254
diff changeset
    90
    ^ 8 * 1024
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
!URI class methodsFor:'escape'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
escape:aString allow:additionalCharacters on:aStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
    |val|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
    aString do:[:c|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
        ((c isLetterOrDigit) 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
         or:[('-_.!!~*''()' includes:c) 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
         or:[additionalCharacters notNil 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
             and:[additionalCharacters includes:c]]]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
        ) ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
            aStream nextPut:c
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
        ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
            val := c asciiValue.            
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
            aStream nextPut:$%; 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
                    nextPut:(Character digitValue:val//16);
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
                    nextPut:(Character digitValue:val\\16).
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
        ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
    ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
        
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
     self escape:'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
          allow:nil on:TextCollector open
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
     self escape:'Ein text mit blanks und @ & #' 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
          allow:nil on:TextCollector open
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
    "  
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
unEscape:aStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
    "convert escape sequences to the original characters"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
    |s c1 c2|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
    s := WriteStream on:''.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
    [aStream atEnd] whileFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
        c1 := aStream next.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
        c1 == $% ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
            c1 := aStream next.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
            c1 isNil ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
                self error:'escape sequence incomplete'
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
            ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
            c2 := aStream next.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
            c2 isNil ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
                self error:'escape sequence incomplete'
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
            ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
            c1 := c1 digitValue.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
            c2 := c2 digitValue.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
            (c1 > 15 or:[c2 > 15]) ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
                self error:'escape sequence: expect hex digit'
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
            ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
            c1 := Character value:c1*16 + c2.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
        ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
        s nextPut:c1.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
    ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
    ^ s contents.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
     self unEscape:(self escape:'   &%@   ' allow:nil) readStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
!URI methodsFor:'accessing'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
scheme
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
    "return primary scheme of the class.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
     Concrete subclasses may redefine this"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
    |schemes|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   167
    schemes := self class schemes.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
    ^ schemes size ~~ 0 ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   169
        schemes at:1
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
    ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
        nil
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
    ]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
scheme:aString
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
    "set the scheme. This is a noop here and may be 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
     defined by subclasses"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   178
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
    ^ self
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   180
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   181
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
!URI methodsFor:'comparing'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   183
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   184
= anURI
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   185
    ^ self class == anURI class and:[self asString == anURI asString]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   186
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   187
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   188
hash
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   189
    ^ self asString hash
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   190
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   191
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   192
!URI methodsFor:'converting'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   193
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
asURI
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   195
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   196
    ^ self
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   197
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   198
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
!URI methodsFor:'printing & storing'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   201
printOn:aStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   202
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   203
    |scheme|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   204
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   205
    scheme := self scheme.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   206
    scheme size ~~ 0 ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   207
        aStream nextPutAll:scheme; nextPut:$:
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   208
    ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   209
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   210
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   211
!URI methodsFor:'subclass responsibility'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   212
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   213
pathExists
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   214
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   215
    "returns true if path exists"
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   216
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   217
    ^ self subclassResponsibility
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   218
!
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   219
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   220
readStreamDo:aBlock
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   221
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   222
    "evaluate a block with the read stream as first argument
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   223
     and a dictionary containing attributes as second argument.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   224
     The stream is closed after aBlock has been evaluated.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   225
     Attributes may be the mime type (key #MIME)"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   226
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   227
    ^ self subclassResponsibility
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   228
!
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   229
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   230
readStreamsDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   231
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   232
    "evaluate the block with a Collection of streams as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   233
     and a dictionary containing attributes as second argument,
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   234
     - a collection with a stream on a single file,
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   235
     - or a collection with streams on a directorie's files, but not recursive
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   236
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   237
     The streams are closed after aBlock has been evaluated.
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   238
     Attributes may be the mime type (key #MIME)"
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   239
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   240
    ^ self subclassResponsibility
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   241
!
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   242
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   243
writeStreamDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   244
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   245
    "evaluate a block with the write stream as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   246
     and a dictionary containing attributes as second argument.
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   247
     The stream is closed after aBlock has been evaluated.
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   248
     Attributes may be the mime type (key #MIME)"
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   249
baf01931b9d6 *** empty log message ***
tm
parents: 1251
diff changeset
   250
    ^ self subclassResponsibility
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   251
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   252
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   253
!URI class methodsFor:'documentation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   254
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   255
version
1268
48b43aebf125 Fix for home directories
Stefan Vogel <sv@exept.de>
parents: 1256
diff changeset
   256
    ^ '$Header: /cvs/stx/stx/libbasic2/URI.st,v 1.6 2003-07-11 12:47:46 stefan Exp $'
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   257
! !