equal
deleted
inserted
replaced
1 "{ Package: 'stx:libbasic2' }" |
1 "{ Package: 'stx:libbasic2' }" |
2 |
2 |
3 ObjectCoder subclass:#Base64Coder |
3 ObjectCoder subclass:#Base64Coder |
4 instanceVariableNames:'buffer bits charCount atEnd' |
4 instanceVariableNames:'buffer bits charCount peekByte atEnd' |
5 classVariableNames:'Base64Mapping Base64ReverseMapping' |
5 classVariableNames:'Base64Mapping Base64ReverseMapping' |
6 poolDictionaries:'' |
6 poolDictionaries:'' |
7 category:'System-Storage' |
7 category:'System-Storage' |
8 ! |
8 ! |
9 |
9 |
85 new |
85 new |
86 ^ self basicNew initialize |
86 ^ self basicNew initialize |
87 ! ! |
87 ! ! |
88 |
88 |
89 !Base64Coder methodsFor:'decoding'! |
89 !Base64Coder methodsFor:'decoding'! |
|
90 |
|
91 basicNext |
|
92 "answer the next decoded byte" |
|
93 |
|
94 |b| |
|
95 |
|
96 bits == 0 ifTrue:[ |
|
97 self fillBuffer. |
|
98 bits == 0 ifTrue:[ |
|
99 ^ stream class endOfStreamSignal raiseRequest. |
|
100 ] |
|
101 ]. |
|
102 |
|
103 b := (buffer bitShift:(8 - bits)) bitAnd:16rFF. |
|
104 bits := bits - 8. |
|
105 |
|
106 ^ b. |
|
107 ! |
90 |
108 |
91 fillBuffer |
109 fillBuffer |
92 "fill buffer with next 4 characters each representing 6 bits" |
110 "fill buffer with next 4 characters each representing 6 bits" |
93 |
111 |
94 |b shift| |
112 |b shift| |
129 next |
147 next |
130 "answer the next decoded byte" |
148 "answer the next decoded byte" |
131 |
149 |
132 |b| |
150 |b| |
133 |
151 |
134 bits == 0 ifTrue:[ |
152 peekByte notNil ifTrue:[ |
135 self fillBuffer. |
153 b := peekByte. |
136 bits == 0 ifTrue:[ |
154 peekByte := nil. |
137 ^ stream class endOfStreamSignal raiseRequest. |
155 ^ b |
138 ] |
156 ]. |
139 ]. |
157 ^ self basicNext. |
140 |
158 ! |
141 b := (buffer bitShift:(8 - bits)) bitAnd:16rFF. |
159 |
142 bits := bits - 8. |
160 peek |
143 |
161 "answer the next decoded byte" |
144 ^ b. |
162 |
|
163 peekByte isNil ifTrue:[ |
|
164 peekByte := self basicNext. |
|
165 ]. |
|
166 ^ peekByte |
145 ! ! |
167 ! ! |
146 |
168 |
147 !Base64Coder methodsFor:'encoding'! |
169 !Base64Coder methodsFor:'encoding'! |
148 |
170 |
149 encodeByteArray:aByteArray with:aParameter |
171 encodeByteArray:aByteArray with:aParameter |
165 encodeString:aString with:aParameter |
187 encodeString:aString with:aParameter |
166 |
188 |
167 ^ self nextPutAll:aString asByteArray; flush. |
189 ^ self nextPutAll:aString asByteArray; flush. |
168 |
190 |
169 " |
191 " |
170 self encodingOf:'hello world' |
192 |encoded decoded decoder| |
|
193 |
|
194 encoded := self encodingOf:'hello world'. |
|
195 decoded := #[] writeStream. |
|
196 decoder := Base64Coder on:encoded readStream. |
|
197 [decoder atEnd] whileFalse:[ |
|
198 decoded nextPut:(decoder next). |
|
199 ]. |
|
200 decoded := decoded contents. |
|
201 decoded asString. |
171 " |
202 " |
172 ! |
203 ! |
173 |
204 |
174 nextPut:aByte |
205 nextPut:aByte |
175 "encode aByte on the output stream" |
206 "encode aByte on the output stream" |
264 atEnd ifTrue:[^ true]. |
295 atEnd ifTrue:[^ true]. |
265 self fillBuffer. |
296 self fillBuffer. |
266 bits == 0 ifTrue:[^ true]. |
297 bits == 0 ifTrue:[^ true]. |
267 ]. |
298 ]. |
268 ^ false. |
299 ^ false. |
|
300 ! |
|
301 |
|
302 binary |
|
303 ^ self |
|
304 ! |
|
305 |
|
306 isStream |
|
307 ^ true |
269 ! ! |
308 ! ! |
270 |
309 |
271 !Base64Coder methodsFor:'stream compatibility'! |
310 !Base64Coder methodsFor:'stream compatibility'! |
272 |
311 |
273 upToEnd |
312 upToEnd |
285 ! ! |
324 ! ! |
286 |
325 |
287 !Base64Coder class methodsFor:'documentation'! |
326 !Base64Coder class methodsFor:'documentation'! |
288 |
327 |
289 version |
328 version |
290 ^ '$Header: /cvs/stx/stx/libbasic2/Base64Coder.st,v 1.4 2002-09-05 13:23:53 stefan Exp $' |
329 ^ '$Header: /cvs/stx/stx/libbasic2/Base64Coder.st,v 1.5 2002-11-04 14:38:30 cg Exp $' |
291 ! ! |
330 ! ! |
|
331 |
292 Base64Coder initialize! |
332 Base64Coder initialize! |