Annotation of parser3/tests/185.html, revision 1.9
1.5 misha 1: @main[]
1.1 misha 2: $request:charset[UTF-8]
3: $response:charset[UTF-8]
4: $response:content-type[
5: $.value[text/html]
6: $.charset[$response:charset]
7: ]
8:
1.3 misha 9: $str[ab^taint["]"cd^taint[xml][&]&ef]
10: <pre>^$str[$str] [^str.length[]]</pre>
1.1 misha 11:
1.5 misha 12: ^^str.left[]: ^left[$str]<br />
13: ^^str.left(-2): ^left[$str](-2)<br />
1.2 misha 14: ^^str.left(4): ^left[$str](4)<br />
15: ^^str.left(9): ^left[$str](9)<br />
1.5 misha 16: ^^str.left(20): ^left[$str](20)<br />
17: ^^str.right[]: ^right[$str]<br />
18: ^^str.right(-3): ^right[$str](-3)<br />
1.2 misha 19: ^^str.right(4): ^right[$str](4)<br />
20: ^^str.right(9): ^right[$str](9)<br />
1.5 misha 21: ^^str.right(30): ^right[$str](30)<br />
1.2 misha 22: ^^str.mid(1;8): ^mid[$str](1;8)<br />
1.5 misha 23: ^^str.mid(2;0): ^mid[$str](2;0)<br />
24: ^^str.mid(3;-1): ^mid[$str](3;-1)<br />
25: ^^str.mid(7): ^mid[$str](7)<br />
26: ^^str.mid(8;99): ^mid[$str](8;99)<br />
27: ^^str.mid(40): ^mid[$str](40)<br />
28: ^^str.mid(40;2): ^mid[$str](40;2)<br />
29: ^^str.mid(-5): ^mid[$str](-5)<br />
30: ^^str.mid(-5;2): ^mid[$str](-5;2)<br />
1.2 misha 31:
32: <hr />
1.1 misha 33: $str[о сколько нам открытий чудных...10.11.2005]
34: $length(^str.length[]) ^rem{ *** length in real chars (not in bytes) == 42 *** }
35:
36: <pre>^taint[as-is][
1.2 misha 37: ^$str[$str] [^str.length[]]
1.5 misha 38: <b>0</b>123456789<b>0</b>123456789<b>0</b>123456789<b>0</b>123456789<b>0</b>123456789
1.1 misha 39: ]</pre>
40:
1.5 misha 41: ^^str.pos[]: ^try{^str.pos[]}{$exception.handled(1)error}<br />
42: ^^str.pos[^$empty]: ^str.pos[$empty]<br />
1.1 misha 43: ^pos[$str;о]
1.4 misha 44: ^pos[$str;о;2]
1.1 misha 45: ^pos[$str; ]
46: ^pos[$str;чудных]
47: ^pos[$str;2005]
48: ^pos[$str;zzz]
1.7 moko 49: ^rpos[$str;о]
50: ^rpos[$str;о;14]
51: ^rpos[$str;о;13]
52: ^rpos[$str;о;0]
53: ^rpos[$str; ]
54: ^rpos[$str;чудных]
55: ^rpos[$str;чудных;23]
56: ^rpos[$str;чудных;22]
57: ^rpos[$str;.]
58: ^rpos[$str;.;36]
59: ^rpos[$str;2005]
60: ^rpos[$str;2005;100]
61: ^rpos[$str;2005;37]
62: ^rpos[$str;zzz]
63: ^rpos[$str;$empty]
64: ^rpos[$str;$str]
1.1 misha 65:
1.2 misha 66: <br />
1.1 misha 67: <table border="1">
68: <tr>
1.3 misha 69: <td>L</td>
70: <td>^^str.left(L) [^^substr.length[]]</tr>
71: <td>R</td>
72: <td>^^str.right(R) [^^substr.length[]]</tr>
73: <td>N, O</td>
1.2 misha 74: <td>^^str.mid(N;O)</tr>
1.1 misha 75: </tr>
76: ^for[i](0;$length\2+1){
77: <tr>
1.3 misha 78: $iLeft($i*2+$i%2)
79: <td>$iLeft</td>
80: <td>^left[$str]($iLeft)</td>
81:
82: $iRight($i*2+($i+1)%2)
83: <td>$iRight</td>
84: <td>^right[$str]($iRight)</td>
85:
86: $iMid($i*2)
87: $iLength(^if($i%2)(3;4))
88: <td>$iMid, $iLength</td>
89: <td>^mid[$str]($iMid;$iLength)</td>
1.1 misha 90: </tr>
91: }
92: </table>
93:
1.8 moko 94: <hr />
95: $str[😀a€й😀z😀]
96: $length(^str.length[])
97: <pre>^$str[$str] [^str.length[]] ^rem{ *** 1-4 bytes per character *** }</pre>
98: ^for[i](1;$length+1){^left[$str]($i)<br />}
99: ^for[i](1;$length+1){^right[$str]($i)<br />}
100: ^for[i](0;$length+1){^mid[$str]($i;2)<br />}
101: ^mid[$str]($length+1)<br />
102: ^mid[$str](100;3)<br />
103: $e[]
104: ^left[$e](3)<br />
105: ^right[$e](3)<br />
106: ^mid[$e](1)<br />
107: ^right[😀](2)<br />
108:
109: <hr />
110: $str[о сколько нам открытий чудных...10.11.2005]
111: ^rem{ *** 42 characters, more bytes: p and n between the length in characters and in bytes *** }
112: ^mid[$str](42)<br />
113: ^mid[$str](50)<br />
114: ^mid[$str](42;5)<br />
115: ^mid[$str](50;5)<br />
116: ^left[$str](50)<br />
117: ^right[$str](50)<br />
118:
1.9 ! moko 119: <hr />
! 120: ^rem{ *** not valid utf-8: bytes 80-BF without the leading byte are characters of their own, as length counts them *** }
! 121: ^strays[^#80^#81a^#82й^#83^#84€^#85]
! 122: ^rem{ *** the last character is cut off by the end of the string: length counts it as a whole *** }
! 123: ^strays[a€^#E2^#80]
! 124: ^strays[й^#F0^#9F]
! 125:
1.2 misha 126: @left[str;num][substr]
1.5 misha 127: ^try{
128: ^if(def $num){
129: $substr[^str.left($num)]
130: }{
131: $substr[^str.left[]]
132: }
133: $result['$substr' [^substr.length[]]]
134: }{
135: $exception.handled(1)
136: $result[error]
137: }
1.2 misha 138:
139: @right[str;num][substr]
1.5 misha 140: ^try{
141: ^if(def $num){
142: $substr[^str.right($num)]
143: }{
144: $substr[^str.right[]]
145: }
146: $result['$substr' [^substr.length[]]]
147: }{
148: $exception.handled(1)
149: $result[error]
150: }
1.1 misha 151:
152: @mid[str;num;count]
1.5 misha 153: ^try{
154: ^if(def $num){
155: ^if(def $count){
156: $substr[^str.mid($num;$count)]
157: }{
158: $substr[^str.mid($num)]
159: }
160: }{
161: $substr[^str.mid[]]
162: }
163: $result['$substr' [^substr.length[]]]
164: }{
165: $exception.handled(1)
166: $result[error]
167: }
1.1 misha 168:
1.4 misha 169: @pos[str;substr;offset]
170: ^^str.pos[$substr]^if(def $offset){($offset)}: ^if(def $offset){^str.pos[$substr]($offset)}{^str.pos[$substr]}<br />
1.7 moko 171:
172: @rpos[str;substr;offset]
173: ^^str.rpos[$substr]^if(def $offset){($offset)}: ^if(def $offset){^str.rpos[$substr]($offset)}{^str.rpos[$substr]}<br />
1.9 ! moko 174:
! 175: @strays[str]
! 176: $length(^str.length[])
! 177: <pre>^taint[uri][$str] [$length]</pre>
! 178: ^for[i](0;$length+2){^stray[$str]($i)}
! 179:
! 180: @stray[str;n]
! 181: $first[^str.left($n)]
! 182: $last[^str.right($n)]
! 183: ^rem{ *** right(n) is mid(length-n): counting from the start, as it was before right went from the end *** }
! 184: $by_mid[^str.mid(^math:max(0;$length-$n))]
! 185: ${n}: '^taint[uri][$first]' [^first.length[]] '^taint[uri][$last]' [^last.length[]] ^if($last eq $by_mid){same as mid}<br />
E-mail: