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: