comparison string.rhope @ 55:048046186d22

Started working on Slice@String
author Mike Pavone <pavone@retrodev.com>
date Thu, 29 Apr 2010 01:47:10 -0400
parents 079200bc3e75
children d0ce696786cc
comparison
equal deleted inserted replaced
54:243d013a49cb 55:048046186d22
1
2 Blueprint Null String
3 {
4 }
5
6 Null String[:out(Null String)]
7 {
8 out <- Build[Null String()]
9 }
10
11 Depth@Null String[in:out(Int32)]
12 {
13 out <- 0i32
14 }
15
16 Blueprint Base String
17 {
18 Buffer
19 Length(Int32,Naked)
20 }
21
22 Print@Base String[string:out]
23 {
24 //TODO: Sanitize string (remove terminal escapes and replace invalid UTF)
25 write[1i32, [string]Buffer >>, Int64[[[string]Buffer >>]Length >>]]
26 { out <- write[1i32, [Array[1]]Append[10u8], 1i64] }
27 }
28 1
29 UTF8 Expect[num,arr,index,count,consumed:out] 2 UTF8 Expect[num,arr,index,count,consumed:out]
30 { 3 {
31 byte <- [arr]Index[index] 4 byte <- [arr]Index[index]
32 { 5 {
105 } 78 }
106 } 79 }
107 80
108 Blueprint String 81 Blueprint String
109 { 82 {
110 Left 83 Buffer
111 Right
112 L Offset(Int32,Naked)
113 L Length(Int32,Naked)
114 Depth(Int32,Naked)
115 Length(Int32,Naked) 84 Length(Int32,Naked)
116 } 85 }
117 86
118 String[in(Array):out(Base String)] 87 String[in(Array):out(String)]
119 { 88 {
120 out <- [[Build[Base String()]]Buffer <<[in]]Length <<[Count UTF8[in, 0, 0]] 89 out <- [[Build[String()]]Buffer <<[in]]Length <<[Count UTF8[in, 0, 0]]
90 }
91
92 Print@String[string:out]
93 {
94 //TODO: Sanitize string (remove terminal escapes and replace invalid UTF)
95 write[1i32, [string]Buffer >>, Int64[[[string]Buffer >>]Length >>]]
96 { out <- write[1i32, [Array[1]]Append[10u8], 1i64] }
97 }
98
99 Flatten@String[string:out]
100 {
101 out <- string
102 }
103
104 Slice@String[string,slicepoint:left,right]
105 {
106 //TODO: Handle invalid slicepoints
107 left <- String Slice[string, 0i32, slicepoint]
108 right <- String Slice[string, slicepoint, [[string]Length >>]-[slicepoint]]
109 }
110
111 Blueprint String Slice
112 {
113 Source
114 Offset(Int32,Naked)
115 Length(Int32,Naked)
116 }
117
118 String Slice[source,offset,length:out(String Slice)]
119 {
120 out <- [[[Build[String Slice()]]Source <<[source]]Offset <<[offset]]Length <<[length]
121 } 121 }
122 122
123 123
124