Mercurial > repos > rhope
comparison string.rhope @ 77:a748300a4143
Some untested progress on String
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 08 Jul 2010 09:57:16 -0400 |
parents | f7bcf3db1342 |
children | 4d5ea487f810 |
comparison
equal
deleted
inserted
replaced
76:004f0fc8941f | 77:a748300a4143 |
---|---|
82 { | 82 { |
83 Buffer | 83 Buffer |
84 Length(Int32,Naked) | 84 Length(Int32,Naked) |
85 } | 85 } |
86 | 86 |
87 String[in(Array):out(String)] | 87 String@Array[in:out(String)] |
88 { | 88 { |
89 out <- [[Build[String()]]Buffer <<[in]]Length <<[Count UTF8[in, 0, 0]] | 89 out <- [[Build[String()]]Buffer <<[in]]Length <<[Count UTF8[in, 0, 0]] |
90 } | 90 } |
91 | 91 |
92 Print@String[string:out] | 92 Print@String[string:out] |
144 Flatten@String[string:out] | 144 Flatten@String[string:out] |
145 { | 145 { |
146 out <- string | 146 out <- string |
147 } | 147 } |
148 | 148 |
149 _CPOff to BOff[buff,cur,expected:outcur,outboff] | |
150 { | |
151 If[expected] | |
152 { | |
153 outcur <- cur | |
154 outboff <- 0i32 | |
155 }{ | |
156 err <- If[[byte]>[192u8]] {} | |
157 { | |
158 err <- If[[byte]<[128u8]] {} | |
159 { | |
160 outcur <- _CPOff to BOff[buff, [cur]+[1i32], [expected]-[1i32]] {} | |
161 { outboff <- [~]+[1i32] } | |
162 } | |
163 } | |
164 | |
165 Val[err] | |
166 { | |
167 outcur <- [cur]+[1i32] | |
168 outboff <- 1i32 | |
169 } | |
170 } | |
171 } | |
172 | |
173 CPOff to BOff[buff,cur,boff,cpoff:out] | |
174 { | |
175 If[[cur]=[cpoff]] | |
176 { | |
177 out <- boff | |
178 }{ | |
179 byte <- [buff]Index[cur] | |
180 If[[byte] < [128u8]] | |
181 { | |
182 nboff <- [bof]+[1i32] | |
183 ncur <- [cur]+[1i32] | |
184 }{ | |
185 If[[byte]<[192u8]] | |
186 { | |
187 //Error: Encoding for 2nd,3rd or 4th byte of sequence | |
188 //treat as a single character | |
189 nboff <- [bof]+[1i32] | |
190 ncur <- [cur]+[1i32] | |
191 }{ | |
192 If[[byte]<[224u8]] | |
193 { | |
194 expect <- 1i32 | |
195 }{ | |
196 If[[byte]<[240u8]] | |
197 { | |
198 expect <- 2i32 | |
199 }{ | |
200 If[[byte]<[245u8]] | |
201 { | |
202 expect <- 3i32 | |
203 }{ | |
204 //Error | |
205 nboff <- [bof]+[1i32] | |
206 ncur <- [cur]+[1i32] | |
207 } | |
208 } | |
209 } | |
210 Val[expect] | |
211 { | |
212 ncur <- _CPOff to BOff[buff, [cur]+[1i32], expect] {} | |
213 { nboff <- [1i32]+[~] } | |
214 } | |
215 } | |
216 } | |
217 out <- CPOff to BOff[buff, ncur, cpoff, nboff] | |
218 } | |
219 } | |
220 | |
149 Slice@String[string,slicepoint:left,right] | 221 Slice@String[string,slicepoint:left,right] |
150 { | 222 { |
151 //TODO: Handle invalid slicepoints | 223 //TODO: Handle invalid slicepoints |
152 left <- String Slice[string, 0i32, slicepoint] | 224 sliceoffset <- CPOff to BOff[[string]Buffer >>, 0i32, 0i32, slicepoint] |
153 right <- String Slice[string, slicepoint, [[string]Length >>]-[slicepoint]] | 225 left <- String Slice[string, 0i32, slicepoint, sliceoffset] |
226 right <- String Slice[string, sliceoffset, [[string]Length >>]-[slicepoint], [[[string]Buffer >>]Length]-[sliceoffset]] | |
154 } | 227 } |
155 | 228 |
156 Byte@String[string,index:out,invalid] | 229 Byte@String[string,index:out,invalid] |
157 { | 230 { |
158 out,invalid <- [[string]Buffer >>]Index[index] | 231 out,invalid <- [[string]Buffer >>]Index[index] |
174 }{ | 247 }{ |
175 out <- Yes | 248 out <- Yes |
176 } | 249 } |
177 } | 250 } |
178 | 251 |
252 Eq String[left,right:out] | |
253 { | |
254 ,out <- If[[[left]Length] = [[right]Length]] | |
255 { | |
256 out <- _=String[left,right,0] | |
257 } | |
258 } | |
259 | |
179 =@String[left,right:out] | 260 =@String[left,right:out] |
180 { | 261 { |
181 ,out <- If[[[left]Length] = [[right]Length]] | 262 out <- Eq String[left,right] |
182 { | 263 } |
183 out <- _=String[left,right,0] | 264 |
184 } | 265 Byte Length@String[string:out] |
266 { | |
267 out <- [[string]Buffer >>]Length | |
268 } | |
269 | |
270 Append@String[left,right:out] | |
271 { | |
272 out <- String Cat[left,right] | |
185 } | 273 } |
186 | 274 |
187 Blueprint String Slice | 275 Blueprint String Slice |
188 { | 276 { |
189 Source | 277 Source |
190 Offset(Int32,Naked) | 278 Offset(Int32,Naked) |
191 Length(Int32,Naked) | 279 Length(Int32,Naked) |
192 } | 280 ByteLen(Int32,Naked) |
193 | 281 } |
194 String Slice[source,offset,length:out(String Slice)] | 282 |
195 { | 283 String Slice[source,offset,length,bytelen:out(String Slice)] |
196 out <- [[[Build[String Slice()]]Source <<[source]]Offset <<[offset]]Length <<[length] | 284 { |
197 } | 285 out <- [[[[Build[String Slice()]]Source <<[source]]Offset <<[offset]]Length <<[length]]ByteLen <<[bytelen] |
198 | 286 } |
199 | 287 |
288 Byte@String Slice[string,index:out,invalid] | |
289 { | |
290 ,invalid <- If[[index]<[[string]ByteLen >>]] | |
291 { | |
292 out,invalid <- [[string]Source >>]Byte[[index]+[[string]Offset >>]] | |
293 } | |
294 } | |
295 | |
296 Byte Length@String Slice[string:out] | |
297 { | |
298 out <- [string]ByteLen >> | |
299 } | |
300 | |
301 =@String Slice[left,right:out] | |
302 { | |
303 out <- Eq String[left,right] | |
304 } | |
305 | |
306 _Flatten@String[string,dest,offset,count:out] | |
307 { | |
308 If[count] | |
309 { | |
310 out <- [string]_Flatten[[dest]Append[ [[string]Buffer >>]Index[offset] ], [offset]+[1i32], [count]-[1i32]] | |
311 }{ | |
312 out <- dest | |
313 } | |
314 } | |
315 | |
316 Flatten@String[string:out] | |
317 { | |
318 out <- string | |
319 } | |
320 | |
321 _Flatten@String Slice[string,dest,offset,count:out] | |
322 { | |
323 out <- [[string]Source >>]_Flatten[dest, [[string]Offset >>]+[offset], count] | |
324 } | |
325 | |
326 Flatten@String Slice[string:out] | |
327 { | |
328 out <- String[ [[string]Source >>]_Flatten[Array[], [string]Offset >>, [string]ByteLen >>] ] | |
329 } | |
330 | |
331 Append@String Slice[left,right:out] | |
332 { | |
333 out <- String Cat[left,right] | |
334 } | |
335 | |
336 Blueprint String Cat | |
337 { | |
338 Left | |
339 Right | |
340 Length | |
341 ByteLen | |
342 } | |
343 | |
344 String Cat[left,right:out] | |
345 { | |
346 out <- [[[[Build[String Cat()] | |
347 ]Left <<[left] | |
348 ]Right <<[right] | |
349 ]Length <<[ [[left]Length]+[[right]Length] ] | |
350 ]ByteLen <<[ [[left]Byte Length]+[[right]Byte Length] ] | |
351 } | |
352 | |
353 Append@String Cat[left,right:out] | |
354 { | |
355 out <- String Cat[left,right] | |
356 } | |
357 | |
358 Byte@String Cat[string,index:out,invalid] | |
359 { | |
360 leftlen <- [[string]Left >>]Byte Length | |
361 If[[index]<[leftlen]] | |
362 { | |
363 out,invalid <- [[string]Left >>]Byte[index] | |
364 }{ | |
365 rindex <- [index]-[leftlen] | |
366 ,invalid <- If[[rindex]<[[[string]Right >>]Byte Length]] | |
367 { | |
368 out,invalid <- [[string]Right >>]Byte[rindex] | |
369 } | |
370 } | |
371 } | |
372 | |
373 Byte Length@String Cat[string:out] | |
374 { | |
375 out <- [string]ByteLen >> | |
376 } | |
377 | |
378 _Flatten@String Cat[string,dest,offset,count:out] | |
379 { | |
380 [string]Left >> | |
381 } | |
382 |