Annotation of parser3/www/htdocs/index.html, revision 1.179
1.104 paf 1: @USE
1.105 paf 2: /derived.p
1.145 paf 3: /operators.p
1.15 paf 4:
1.72 paf 5: @auto[filespec]
6: $selffilespec[$filespec]
1.63 paf 7: #$form:here
1.131 paf 8: #$request:charset[UTF-8]
1.177 paf 9: $request:charset[windows-1251]
10: $response:charset[windows-1251]
1.112 paf 11: #$response:charset[UTF-8]
1.131 paf 12: #$response:charset[empty]
1.84 paf 13: #$response:content-type[$.value[text/html]$.charset[$response:charset]]
1.15 paf 14:
1.171 paf 15: @postprocess[body]
1.60 paf 16: #<b>$body</b>
17: #$result[123]
1.171 paf 18: $body
19: <hr>
20: OK
1.37 paf 21:
1.15 paf 22: @main[]
1.72 paf 23: #$a(123)
24: #^a.format[%.10u]
1.71 paf 25: #$result[111]
1.70 paf 26: #^f[a]
1.133 paf 27: #^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
1.88 paf 28: # ^int:sql{select news_id from news where news_id=-1}[
1.143 paf 29: # $.default{2}
1.88 paf 30: # ]<br>
1.115 paf 31: # ^hash::sql{bad}
1.88 paf 32: # ^string:sql{select news_id from news where news_id=-1}[$.default{2}]
1.109 paf 33: # ^file::load[text;^string:sql{select 'from sql server' }]
1.95 paf 34: # ^string:sql{select '^^hello[]' }] $ORIGINS(1)
1.96 paf 35: # ^process{ ^^h[]}
1.97 paf 36: # ^process{^string:sql{select '1
37: # ^^hello[]' }] }
1.131 paf 38: # ^double:sql{select '2*' ^; }
1.133 paf 39: #$card_sequence_expect_no(^double:sql{select 20020909131047 #card_sequence_expect_no from card_sequence})
40: #^card_sequence_expect_no.format[%15.f]
41: #}
1.49 paf 42: #^eval(2)
1.48 paf 43: #^tcrashlocaljunctionsv2[]
1.49 paf 44: #^tcrashlocaljunctions[]
1.50 paf 45: #^tjunctions[]
1.47 paf 46: #^replacetest[]
1.48 paf 47: #^matchoptionpp[]
1.46 paf 48: #^txdocxnodechild[]
1.44 paf 49: #^tclasses[]
1.43 paf 50: #$math:PI
51: #^b:method[]
1.42 paf 52: #^main[]
1.41 paf 53: #^errort[]
1.44 paf 54: #^tselectNumber[]
1.39 paf 55: #$result[hello]
1.36 paf 56: #^invaliddate2[]
57: #^process2[]
58: #^casehashtext[]
1.35 paf 59: #^subjvaltest[]
60: #^tableselect0[]
1.34 paf 61: #^memnotest1[]
1.32 paf 62: #^voidparams[]
1.31 paf 63: #^rolls2[]
1.30 paf 64: #^cacheexpireschanging[]
1.29 paf 65: #^cacheexpiresfixed[]
66: #^dateoffsets[]
67: #^exceptionTypes[]
1.28 paf 68: #^roll2[]
1.27 paf 69: #^rolls[]
1.25 paf 70: #^exceptions1[]
1.22 paf 71: #^locate_by_expr[]
1.18 paf 72: #^method_junction_params{...}
1.17 paf 73: #^verifyCookie[paf]
1.37 paf 74: #^execlangs[]
1.16 paf 75: #$t[^tobjeresult[]]$t.a
76: #^xmlprobs[]
1.15 paf 77: #^doubleprobs[]
78: #^math:random(-10)
79: #^divnamestop[]
80: #^arrayclone[]
81: #^operator_tricks[]
82: #^xoutputrusattr[]
83: #^xdocset1[]
84: #^regexp3[]
85: #^exec2[]
86: #^tlock[]
87: #^xmloutattrwithoutvalue[]
88: #^precisionProblem[]
89: #^xpath[]
90: #^ttablesetlang[]
91: #^ttime[]
92: #^tupper[]
93: #^treplace[]
94: #^xslt2[]
95: #^tcache2[]
96: #$ORIGINS(1)
97: #$t[^table::set{a b} ^table::set{c d}]
98: #^ttaintuntaint[]
99: #^tappend2[]
100: #^badvsnprintf[]
101: #^badoracequoting[]
102: #^badconstructors[]
103: #^xloadwrongtable[]
104: #^xsetwrongtable[]
105: #^if($form:test){y}{n}
106: #^tablecolumnerror[]
107: #^roll[]
108: #^tableset[]
109: #^math:PI.format{%.30f}
110: #^xchildren[]
111: #^thashforeach3[]
112: #^thashforeach2[]
113: #^thashforeach[]
114: #^thashdelete[]
115: #^connect[mysql://user:pass@cd.rinet.ru/db]{^void:sql{z} }
116: #^tappend[]
117: #^sappend[]
118: #^eval(10\3)<br>
119: #^tform[]
120: #^formattest[]
121: #^filelist[]
122: #^connect[mysql://user:pass@host]{ }
123: #^безнадёжна_попытка_поправить_непоправимое[]
124: #^tcache[]
125: #^thashfileexp[]
126: #^tcounter[]
127: #^tablehash[]
128: #j^hashfile[]
129: #^formclass[]
130: #^hren[]
131: #^domedit[]
132: #^domxslt[]
133: #^lsplit2[]
134: #^faceesize[]
135: #^imageresize[]
136: #^ifassignhash[]
137: #^tintdefault[]
138: #$response:status[404]
139: #^ifpasshash[]
140: #^movedir[]
141: #^replace[]
142: #^set[]
143: #^hash[]<hr>
144: #$t[^methresult[]] ->$t
145: #^terror[]
146: #^ssave[]
147: #^thash[]
148: #^tdef[]
149: #^ford[]
150: #^tif[]
1.84 paf 151: #^image[]
1.15 paf 152: #^response[]
153: #^regexp2[]
154: #^ttablerem[]
155: #^pcre[]
156: #^regexp[]<hr>
157: #^mail[]
158: #^fori[]
159: #^tconnect[]
160: #^xslt[]
161: #^header[]
1.53 paf 162: #^tablehasht[]
1.54 paf 163: #^datecreatestring[]
1.56 paf 164: #^mssqltypes1[]
165: #^badthrows[]
1.57 paf 166: #^xmlspace[]
167: #^counter[main.counter]
168: #^xpath2[]
169: #^callindirect[]
170: #^junctionprob[]
1.59 paf 171: #^datecreatestring2[]
172: #^tstoredproc[]
173: #^tstoredproc2[]
174: #^forkeys[]
1.60 paf 175: #^pngsize[]
1.61 paf 176: #^checkList[]
1.63 paf 177: #^datetest[]
1.65 paf 178: #^tserge[]
1.69 paf 179: #^envt[]
1.67 paf 180: #^selectt[]
181: #^select2[]
182: #^selectSingle2[]
183: #^selectString2[]
184: #^selectNumber2[]
185: #^selectBool2[]
186: #^xdoccreate[]
187: #^xdoccreatetag[]
1.70 paf 188: #^xdocload[]
1.67 paf 189: #^xdocstring[]
190: #^xdocsave[]
1.68 paf 191: #^div[]
192: #^datecreatestring3[]
1.73 paf 193: #^tfilespec[]
1.77 paf 194: #^tcrypt[]
1.74 paf 195: #^cryptdocsample[]
1.78 paf 196: #^tnormalize[]
1.83 paf 197: #^xmltransformbyxdoc[]
1.81 paf 198: #^sergestrandef[]
1.83 paf 199: #^tstdin[]
200: #^tfind[]
1.86 paf 201: #^mimet[]
1.92 paf 202: #^joinlimit[]
1.89 paf 203: #^tableclonelimit[]
1.91 paf 204: #^transparams[]
205: #^sendtests[]
1.93 paf 206: #^wwrapperpass[]
1.95 paf 207: #^badpos[]
1.98 paf 208: #^processtest[]
209: #^mail3[]
1.100 paf 210: #^datesaving[]
1.101 paf 211: #^badconstructor[]
1.103 paf 212: #^calendar[]
1.104 paf 213: #^monthdays(8)
214: #^xdoctypetest[]
1.105 paf 215: #^xtabletest[]
1.117 paf 216: #^staticstest[]
1.108 paf 217: #^staticstest2[]
1.115 paf 218: #^rbodytest[]
219: #^cookie[]
1.116 paf 220: #^cookieexpirestest[]
1.119 paf 221: #^postest[]
1.120 paf 222: #^voidpostest[]
1.122 paf 223: #^badcolumntest[]
1.124 paf 224: #^delimiters[]
1.125 paf 225: #^новый-split[]
1.127 paf 226: #^грязные-cookie[]
227: #^html-почта[]
228: #^badswitchtest[]
1.128 paf 229: #^okswitchtest[]
1.131 paf 230: #^cgit[]
1.132 paf 231: #^ttransformsep[]
1.133 paf 232: #^calltest[]
1.134 paf 233: #^xpath3[]
1.139 paf 234: #^doubleliterals[]
235: #^newxor[]
1.135 paf 236: #^mail2[]
1.139 paf 237: #^exec[]
1.140 paf 238: #^passpost[]
1.141 paf 239: #^fordelim[]
1.143 paf 240: #^duplicatetable2hashkey[]
1.142 paf 241: #^duplicatehashsqlkey[]
1.145 paf 242: #^longlreplace[]
243: #^table2hash_onecolumn[]
1.146 paf 244: #^crossopvars[]
1.148 paf 245: #^three[]
1.149 paf 246: #^badLangAfterCatch[]
1.150 paf 247: #^zeroinstdin[]
1.151 paf 248: #^shifts[]
249: #^jspace[]
1.152 paf 250: #^hashselfmodification[]
251: #^emptyTransformResult[]
252: #^badxdoccreate[]
1.154 paf 253: #^if(-d "CVS"){y}{n}
1.155 paf 254: #^badjunctioncall[]
1.156 paf 255: #^russianindex[]
256: #^virtualtest[]
257: #^xml[]
258: #^mail4[]
1.157 paf 259: #^voidconstructorpass[]
1.160 paf 260: #^$form:CLASS.a=$form:CLASS.a<br>
261: #^cookie2[]
262: #^menudelim[]
1.158 paf 263: #^touchittest[]
1.162 paf 264: #^touchittest2[]
1.160 paf 265: #^opauto[]
1.161 paf 266: #^trycontextt[]
267: #^tfor[]
1.162 paf 268: #^user-foreach-test[]
269: #^includet[]
1.163 paf 270: #^derived:includet[]
1.164 paf 271: #^fortestsep[]
1.165 paf 272: #^derived:inclass_process_test[]
273: #$derived[^derived::create[]]^derived.inclass_process_test[]
1.166 paf 274: #^domorigint[]
1.167 paf 275: #^junctiontest2[]
1.169 paf 276: #^junctionselftest[]
1.170 paf 277: #^bad-compiletosystem[]
278: #^steppedfor[i](1;10;2){$i }
1.171 paf 279: #^file:fullpath[a.gif]<br>
280: #^file:fullpath[/abs/a.gif]<br>
281: #$form:a/$form:image-map=
282: #^foreachform[]
283: #^selectSingleoct[]
284: #^compilebug[]
285: #^badhashcreate[]
1.172 paf 286: #^badsendmail[]
287: #^keygenedhash[]<br>
288: #<hr>[$env:HTTP_REFERER]
289: #$response:Content-TypE[bad]
1.174 paf 290: #^emailhead2[]
1.175 paf 291: #^includet2overridedynamic[]
1.176 paf 292: #^includet2overridestatic[]
1.177 paf 293: #^virtualtest2[]
294: #^message-id-test[]
1.179 ! paf 295: #^test_exif[jpg]
! 296: #^http_prefix[]
! 297: #^http_prefix_table[]
! 298: ^http_prefix_xml[]
! 299:
! 300: @http_prefix_xml[]
! 301: $xdoc[^xdoc::load[http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002;$.param[1]]]
! 302: <pre>^taint[^xdoc.string[]]</pre>
! 303:
! 304: @http_prefix_table[]
! 305: $table[^table::load[nameless;http://www.artlebedev.ru;$.USER-AGENT[paf]]]
! 306: ^table.count[]
! 307: <hr>
! 308: <pre>$table.0</pre>
! 309:
! 310: @http_prefix[]
! 311: #$file[^file::load[text;http://www.artlebedev.ru]]
! 312: #$file[^file::load[text;http://www.artlebedev.ru;alt]]
! 313: $file[^file::load[text;http://www.artlebedev.ru;
! 314: $.USER-AGENT[paf]
! 315: ]]
! 316: $file.status
! 317: <hr>
! 318: <pre>$file.text</pre>
1.177 paf 319:
1.178 paf 320: @test_exif[dir]
321: $file[^file:list[$dir;\.(jpe?g|JPE?G)^$]]
322: <table border=1>
1.177 paf 323: ^file.menu{
1.178 paf 324: <tr valign=top>
1.177 paf 325: $image[^image::measure[$dir/$file.name]]
1.178 paf 326: <td>^image.html[$.width(100)$.height(100)]</td>
327: <td>
328: $file.name<hr>
329: $exif[$image.exif]
330: ^if($exif){
331: $keys[^exif._keys[]] ^keys.sort{$keys.key}
332: ^keys.menu{
333: $key[$keys.key]
334: $value[$exif.$key]
335:
336: ${key}: <b>^show_exif_value[$value]</b><br>
337: }
338: }{
339: no EXIF info<br>
340: }
341: </td>
342: </tr>
343: }
344: </table>
345:
346: @show_exif_value[value][i]
347: ^if($value is hash){
348: ^for[i](0;$value-1){$value.$i}[,]
349: }{
350: $value
1.177 paf 351: }
1.178 paf 352:
1.177 paf 353:
354: @message-id-test[]
355: ^mail:send[
356: $.from[paf@mail]
357: $.to[paf@mail]
358: $.subject[test]
359: # $.message-id[<1@parser.ru>]
360: $.Message-id[<2@parser.ru>]
361: $.subject[проверка]
362: $.text[мычит!]
363: ]
1.176 paf 364:
365: @virtualtest2[]
366: $derived[^derived::create[]]
367: ^derived.first[]
368:
1.174 paf 369:
1.175 paf 370: @includet2overridedynamic[]
1.176 paf 371: includet2overridedynamic:<br>
372: shold say 'hello in some.p'<br>
373: <hr>
1.174 paf 374: $derived[^derived::create[]]
375: ^derived.includet2override[]
1.175 paf 376:
377: @includet2overridestatic[]
1.176 paf 378: includet2overridestatic:<br>
379: shold say 'hello in derived.p'<br>
380: because in static classes there's no way to determine derived class (no virtual mech becase of no virtual table)<br>
381: <hr>
1.175 paf 382: ^derived:includet2override[]
1.172 paf 383:
384: @emailhead2[]
385: ^mail:send[
386: $.charset[koi8-r]
387: $.from[paf@design.ru]
388: $.to[paf@mail]
1.174 paf 389: # $.reply-to[^taint[agat] <^taint[ag_7k@mail.ru]>]
390: $user[^taint[agat]]
391: $email[^taint[ag_7k@mail.ru]]
392: $.reply-to[$user $email]
393: $.subject[test2]
1.172 paf 394: ]
395:
396: @keygenedhash[]
397: $table[^table::create{key value
398: 1 a
399: 2 b
400: }]
401: $hash[^table.hash($table.key*2)]
402: '$hash.4.value' must be 'b'
1.171 paf 403:
404: @badsendmail[]
405: ^mail:send[
406: $.from[hren < paf@design.ru
407: >]
408: $.to[paf@design.ru]
409: $.subject[test]
410: ]
411:
412: @badhashcreate[]
413: $hash[
414: $.ok[1]
415: ]
416: $.bad[1]
417:
418: @compilebug[]
419: ^a[]^#31=
420:
421: @selectSingleoct[]
422: $d[^xdoc::create[doc]]
423: $element[^d.selectSingle[$nothing]]
424:
425:
426: @foreachform[]
427: <a href=index.cgihtml?one&a=1&two&b=2&three?1,2>one</a><br>
428: <a href=index.cgihtml?one&a=1&two&b=2&three?shit>two</a><br>
429:
430: ^form:fields.foreach[key;value]{
431: $key -- $value
432: }[<br>]
433: <hr>
434: $nameless[$form:tables.nameless]
435: ^if(def $nameless){
436: nameless table -- ^nameless.menu{$nameless.field}[,]
437: }
438: ^if(def $form:imap){
439: <hr>
440: IMAP $form:imap.x : $form:imap.y
441: }
1.170 paf 442:
443: @steppedfor[name;from;to;step;code]
444: $caller.$name($from)
445: ^while($caller.$name<=$to){
446: $code
447: ^caller.$name.inc($step)
448: }
1.169 paf 449:
450: @bad-compiletosystem[]
451: ^process[$string:CLASS]{@a[]
452: }
1.168 paf 453:
454: @junctionselftest[]
455: $derived[^derived::create[]]^derived.explodejunction{$tomain[tomainOK]}
456: ^$tomain=$tomain
1.166 paf 457:
458: @junctiontest2[]
459: ^if($if is junction){is junction;not junction}<br>
460: ^if(def $if){defined;not defined}<br>
1.165 paf 461:
462: @domorigint[]
463: $xdoc[^xdoc::create[вася]]
464: ^xdoc.firstChild.setAttribute[name;значение]
465: $var[$xdoc.firstChild.nodeName]
466: ^throw[paf;$var]
467:
1.163 paf 468:
469: @fortestsep[][i]
470: ^for[i](1;3){$i}[,]
1.162 paf 471:
472: @includet[]
473: ^include[some.p]
474: ^included_method[2]
475:
476: @user-foreach-test[][key;value]
477: ^user-foreach[key;value]{$key=$value<br>}
478:
479: @user-foreach[key;value;code]
480: ^for[i](1;10){
481: $caller.$key($i)
482: $caller.$value($i*2)
483: $code
484: }
485:
1.161 paf 486:
487: @tfor[][i]
488: ^for[i](1;10){
489: $i
490: }
1.160 paf 491:
492: @trycontextt[]
493: ^try{
494: ^trycontexttsub[]
495: }{
496: $exception.handled(0)
497: }
498:
499:
500: @trycontexttsub[]
501: ^bad[]
502:
503:
504: @opauto[]
505: ^reada[]
1.159 paf 506:
507:
1.157 paf 508: @rusage2[]
1.77 paf 509: <hr>
1.74 paf 510: OK
1.157 paf 511:
512: @rusage2[]
513: $s[$status:rusage]
514:
515: ^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f]
516:
1.150 paf 517:
1.156 paf 518: @voidconstructorpass[]
519: $a[$form:a]
520: =^form:a.int(1)=
521: =^a.int(1)=
522:
523:
1.155 paf 524: @russianindex[]
525: #dir with files with russian-lang names
526: $where[dir]
527:
528: $dir[^file:list[$where;\.txt^$]]
529: ^dir.menu{
530: <a href=$where/^untaint[uri]{$dir.name}>$dir.name</a><br>
531: }
532:
1.154 paf 533: @badjunctioncall[]
534: ^badjunctioncallinside{code}
535:
536: @badjunctioncallinside[code]
1.155 paf 537: xx^code[]
1.152 paf 538:
539: @badxdoccreate[]
540: $xdoc[^xdoc::create[вася]]
541: #$xdoc[^xdoc::create{<?xml version="1.0" encoding="$request:charset"?><doc>вася</doc>}]
542:
543: ^xdoc.firstChild.setAttribute[name;значение]
544: ^xdoc.string[]
545:
546:
547: @emptyTransformResult[]
548: $input[^xdoc::create[docBad]]
549: $sheet[^xdoc::create{<?xml version="1.0"?>
550: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
551: <xsl:template match="doc">
552: output
553: </xsl:template>
554: </xsl:stylesheet>
555: }]
556: $output[^input.transform[$sheet]]
557: $response:body[^output.file[]]
558:
559: @hashselfmodification[]
560: $hash[
561: $.a[1]
562: $.b[2]
563: ]
564: ^hash.foreach[key;value]{
565: # $hash.c[1]
566: $hash.a[1]
567: }
568:
569: @touchittest[][i]
1.160 paf 570: $i[before]
571: ^touchit[]
572: $i
573:
574: @touchittest2[]
1.158 paf 575: $i[before]
1.152 paf 576: ^touchit[]
577: $i
578:
1.151 paf 579:
580: @jspace[]
581: $a(1)
582: ^jspace_call{^eval($a*2)}
583: #$a(2)
584: #$junction
585:
586: @jspace_call[param][a]
587: $a[unrelcfgdfgated]
588: $junction<br>
589: $junction.a(2)
590: $junction<br>
591:
1.150 paf 592: @shifts[]
593: ^eval(1<<3)<br>
594: ^eval(8>>2)<br>
1.151 paf 595: #^if(1=1){y;n}<br>
1.150 paf 596:
1.149 paf 597:
598: @zeroinstdin[]
599: #$f[^file::exec[a.pl;$.stdin[$.shit[]]]]
600: $f[^file::exec[a.pl;$.stdin[^file::load[binary;1z2.txt]]]]
601: =$f.text=
602: ^f.save[binary;1z2.out]
1.148 paf 603:
604: @badLangAfterCatch[]
605: ^try{
606: $a[
607: тут язык сменился на pass_appended
608: ^throw[user;test]
609: и улетело с не тем языком
610: ]
611: }{
612: $exception.handled(1)
613: }
614: 1 2
1.145 paf 615:
616: @crossopvars[]
617: #^one[]<hr>
618: ^two[]<hr>
619:
620: @table2hash_onecolumn[]
621: $t[^table::create{a
622: 1
623: 1
624: }]
625: #^t.hash[a]
626: #^t.hash[a;b]
627: $h[^t.hash[a][$.distinct(1)]]
628: $h.1.a
1.143 paf 629:
630: @longlreplace[]
1.144 paf 631: $str1[ мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла ]
1.143 paf 632: $str2[ела]
633: $str[Мама $str1 раму]
634:
1.144 paf 635: ^str.replace[^table::create[nameless]{мыла $str2}]
1.141 paf 636:
637: @duplicatehashsqlkey[]
638: ^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
639: $t[^table::sql{select * from news}]
640: $c[^t.columns[]]
641: ^c.menu{$c.column}[,]
642:
1.142 paf 643: $h[^hash::sql{select news_type_id, name from news}[$.distinct(1)]]
1.141 paf 644: }
645:
646: @duplicatetable2hashkey[]
647: $t[^table::create{a b
648: 1 2
649: 1 3
650: }]
1.142 paf 651: #^t.hash[a]
652: #^t.hash[a;b]
653: ^t.hash[a][$.distinct[1]]
1.140 paf 654:
655: @menudelim[]
656: $t[^table::create{a
657: 1
658: 2
659: 3
660: 4
661: 5
662: }]
663:
664: ^t.menu{^if($t.a<3){}{$t.a}}[,]
665:
666: @fordelim[]
667: ^for[a](0;6){^if($a<3){}{$a}}[,]
668:
1.135 paf 669:
1.139 paf 670: @passpost[]
671: <form method=post name="test" id="test">
672: <textarea name="text" cols=20 rows =6>^taint[html][1
673: 2
674:
675: 3]</textarea><br>
676: <input type=submit>
677: </form>
678:
679: ^if(def $form:text){
680: $a[^file::cgi[a.pl]]
681: $a.text|$a.status|$a.stderr<hr>
682: }
683:
684: @exec[]
685: #$a[^file::exec[a.cmd]]
686: $a[^file::cgi[a.cmd]]
687: $a.text|$a.status|$a.stderr<hr>
688:
689:
1.137 paf 690: @newxor[]
1.138 paf 691: ^eval(1!|2 #примечание()zzz
692: |0x100)<br>
1.137 paf 693: #^eval(1!||2)<br>
694: ^if(1!|1){y}{n}
695:
696: #@method[$bad]
1.136 paf 697:
1.135 paf 698: @doubleliterals[]
699: #^eval(1e-10)
700: ^eval("1e-20")
1.133 paf 701:
702: @xpath3[]
703: $constr[^xdoc::create{<?xml version="1.0" encoding="$request:charset" standalone="no"?> <constructor-data><object object_type_id="1" template_id="1" data_process_id="1" is_published="1">проверка</object> <block-list> <block name="date" type="0" label="Дата" is_hide_pub="1" data_type="1"/> <block name="content" type="0" label="Текст" is_hide_pub="1" data_type=""/> </block-list></constructor-data>}]
704: $objectData[^constr.selectSingle[/constructor-data/object]]
705: $objectData.nodeType<br>
706: $objectData.firstChild.nodeValue
707:
708: @calltest[]
709: ^calltest2[string]
710:
711: @calltest2[s]
712: $s
1.131 paf 713:
714: @ttransformsep[]
715: $input[^xdoc::load[20020909131046.xml]]
716: $output[^input.transform[generated.xsl]]
717: ^output.string[]
1.127 paf 718:
719: @okswitchtest[]
720: $local[local value]
721: ^switch[1]{
722: ^case[1]{1code $local}
723: }
724:
725: @badswitchtest[]
726: ^switch[1]{
727: ^badswitchtestcase[]
728: }
729: @badswitchtestcase[][local]
730: $local[local value]
731: ^case[1]{1code $local}
732:
733: @badjunction[]
734: ^badj1[]
735: ^badj2[]
736:
737: @html-почта[]
738: $переменная[значение]
739: ^mail:send[
740: $.from[paf@mail]
741: $.to[paf@mail]
742: $.subject[htmltest1]
743: $.html{тест$переменная= !}
744: ]
745:
1.124 paf 746:
747: @грязные-cookie[]
1.126 paf 748: $cookie:a[&]
1.125 paf 749: $cookie:a
1.124 paf 750:
751: @новый-split[]
752: $abc[a.b.c]
753: #$table[^abc.split[.]]
754: #$table[^abc.split[.;l]]
755: #$table[^abc.split[.;v]]
756: $table[^abc.split[.;lv]]
757: ^table.menu{$table.piece}[,]
758: <hr>
759: #$table[^abc.split[.;h]]
760: $table[^abc.split[.;hr]]
761: $table.0,$table.1,$table.2<br>
1.123 paf 762:
763: @delimiters[]
764: $a#1[1]<br>
765: $a#1=<br>
766:
1.121 paf 767:
768: @badcolumntest[]
769: $table[^table::load[ext.cfg]]
770: $table.b
771:
1.120 paf 772:
773: @virtualtest[]
774: $derived[^derived::create[derived create actual param]]
775: ^derived.test[]
776:
1.119 paf 777:
778: @voidpostest[]
779: $s[]
780: ^s.pos[$nothing]
1.118 paf 781:
782: @postest[]
783: $s[$nothing]
784: ^s.pos[$nothing]
1.113 paf 785:
1.115 paf 786: @cookieexpirestest[]
787: #$cookie:exptest[1]
788: #$cookie:exptest[$.value[2] $.expires(+1)]
789: $response:xxxx[^date::now(+10)]
790: $response:yyy[$.value[^date::now(+20)]]
791: $response:yyy[$.value[vvv] $.aaaa[^date::now(+20)]]
792:
1.113 paf 793: @rbodytest[]
794: $request:body=
795: <form method=post>
796: <input type=submit name=paf value=123>
797: </form>
1.107 paf 798:
799: @staticstest2[]
800: ^$derived:derived_var=$derived:derived_var<br>
801: ^$derived:a=$derived:a<br>
1.108 paf 802: $derived:a[changed] ^$derived:a=$derived:a<br>
1.107 paf 803: $derived:derived_var[changed]
804: ^$derived:derived_var=$derived:derived_var<br>
805:
1.105 paf 806: @staticstest[]
807: $derived[^derived::create[]]
808: ^derived.test[]
1.110 paf 809: <hr>
1.106 paf 810: ^$derived.a=$derived.a<br>
811: ^$derived.x=$derived.x<br>
1.110 paf 812: <hr>
813: ^if($derived is derived){derived is derived}{error: derived is not derived}<br>
814: ^if($derived is table){derived is table}{error:derived is not table}<br>
1.111 paf 815: <hr>
816: ^^eval(^$derived)=^eval($derived)<br>
817: ^^if(^$derived)=^if($derived){y}{n}<br>
1.106 paf 818:
1.105 paf 819:
1.104 paf 820: @xdoctypetest[]
821: $xdoc[^xdoc::create[x]]
822: ^if($xdoc is xdoc){y}{n}
823:
824: @xtabletest[]
825: $xtableo[^xtable::create[]]
826: ^if($xtableo is table){y}{n}
1.105 paf 827: #^xtableo.columns[]
1.100 paf 828:
1.103 paf 829: @monthdays[month]
830: $from[^date::create(2000;$month;1)]
831: $to[^date::create($from)] ^to.roll[month](+1)
832: $result($to-$from)
833:
1.100 paf 834: @badconstructor[]
835: ^date::now[]
1.99 paf 836:
837: @datesaving[]
838: $now[^date::now[]]
839: $now.daylightsaving<br>
840: $now.yearday<br>
841: #
842: $date[^date::create(2002;1;3)]
843: $date.daylightsaving<br>
844: $date.yearday
1.97 paf 845:
1.98 paf 846: @mail4[]
847: ^mail:send[
848: $.from[paf@mail.design.ru]
849: $.to[paf@mail.design.ru]
1.156 paf 850: $.subject[^taint[uri][москва=E0_+ ]=2]
1.98 paf 851: $.text[^taint[uri][москва]=]
852: $.html{<a href=http://there.ru/?city=^taint[uri][Москва]>link</a>}
853: ]
1.97 paf 854: @processtest[]
855: $f[^file::load[text;piece.p]] ^process{$f.text}
856: $ORIGINS(1)
1.93 paf 857:
858:
859: @badpos[]
860: $s[123]
1.94 paf 861: ^s.mid(0;2)
1.92 paf 862:
863: @wwrapperpass[]
864: $h[^hash::create[]]
865: $h.a(1)
866: ^my_method[^if(1){$h}]
867: работает. так и должно быть?
868:
869: @my_method[p]
870: ^p._count[]
871:
1.88 paf 872:
873: @tableclonelimit[]
874: $source[^table::create{a
875: aa
876: bb
877: cc}]
878: ^source.offset(1)
879: #$dest[^table::create[$source]]
880: $dest[^table::create[$source;$.offset(2)]]
881: $dest[^table::create[$source;$.limit(2)]]
882: $dest[^table::create[$source;$.offset(1)$.limit(1)]]
883: $dest[^table::create[$source;$.offset(1)$.limit(2)]]
884: $dest[^table::create[$source;$.offset[cur]$.limit(2)]]
885:
886: ^dest.menu{$dest.a}[,]<br>
887:
888: @joinlimit[]
889: $source[^table::create{a
890: aa
891: bb
892: cc}]
893: ^source.offset(2)
894: $dest[^table::create{a
895: xx
896: }]
897: #^dest.join[$source]
898: #^dest.join[$source;$.offset(2)]
899: #^dest.join[$source;$.limit(2)]
900: #^dest.join[$source;$.offset(1)$.limit(1)]
901: #^dest.join[$source;$.offset(1)$.limit(2)]
1.91 paf 902: #^dest.join[$source;$.offset[cur]$.limit(1)]
903: ^dest.join[$source;$.limit(0)]
1.88 paf 904:
905: ^dest.menu{$dest.a}[,]<br>
1.86 paf 906:
907: @cgit[]
908: $f[^file::cgi[showenv.cmd]]
909: $f.HELLO=<br>
910: $f.CONTENT-TYPE=<br>
911: $f.content-type=<br>
912:
1.83 paf 913:
1.84 paf 914: @mimet[]
1.85 paf 915: $f[^file::stat[a.GIF]]
916: $f.content-type
1.84 paf 917:
918:
1.83 paf 919: @tfind[]
920: ^file:find[index.html]
921:
922: @tstdin[]
923: $f[^file::exec[test.pl;$.stdin[проверка stdin потока]]]
924: <pre>$f.text</pre>
1.80 paf 925:
926: @sergestrandef[]
927: $sQuantity[ ]
928: ^sQuantity.int(10)
1.78 paf 929:
930: @xmltransformbyxdoc[]
931: $xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
932: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
933: <people>
934: <man id="1" имя="word слово">
935: <name>1 2</name>
936: </man>
937: </people>
938: }}]
939: $sheet[^xdoc::create{<?xml version="1.0"?>
1.79 paf 940: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
941:
942: >
1.78 paf 943: <!--<xsl:output doctype-public ="-//W3C//DTD XHTML" indent="yes"/>-->
944:
1.79 paf 945: <!--<xsl:import href="http://localhost/html.xsl"/>-->
946: <xsl:import href="html.xsl"/>
947:
1.78 paf 948: <xsl:param name="param1">defparam1</xsl:param>
949: <xsl:param name="param2">defparam2</xsl:param>
1.79 paf 950:
1.78 paf 951:
952: <xsl:template match="doc">
953: param1=<xsl:value-of select="^$param1"/><br/>
954: param2=<xsl:value-of select="^$param2"/><br/>
955:
956: test return <something background=""/>
957: </xsl:template>
958:
959: <xsl:template name="test">
1.81 paf 960: test return3
1.78 paf 961: </xsl:template>
962:
963: <xsl:template match="people">
964: <html>
1.155 paf 965: <head>
966: <link type='text/xml' rel='alternate' href='/Default.vsdisco'/>
967: z</head>
1.78 paf 968: para1=<xsl:copy-of select="^$param1"/>
969: <xsl:apply-templates/>
970: <hr/>
971: <xsl:call-template name="test"/>
972: </html>
973: </xsl:template>
974:
975: <xsl:template match="name">
976: <b><xsl:value-of select="."/></b>
977: </xsl:template>
978: </xsl:stylesheet>
979: }]
980:
981:
982: $xdoc[^xdoc.transform[$sheet]]
983: $string[^xdoc.string[$.method[html]]]
984: ^string.save[a]
985: ^untaint[html]{$string}
986:
987:
1.77 paf 988:
989: @tnormalize[]
990: #s состоит из 1000 фрагментов
991: $s[^for[i](0;999){фрагмент }]
992: #это займет много ресурсов
993: ^s.match[фраг][g]{перга}
994: #это займет меньше ресурсов
995: #$normalized[^s.normalize[]]
996: #^normalized.match[фраг][g]{перга}
1.74 paf 997:
998: @sendtests[]
1.89 paf 999: ^text[]
1.74 paf 1000: #^html[]
1001: #^text-n-html[]
1002: #^file[]
1003: #^text-n-file[]
1.89 paf 1004: #^text-n-html-n-file[]
1.74 paf 1005: #^backwardcomp[]
1006:
1007: @backwardcomp[]
1008: ^mail:send[
1009: $.from[paf]
1010: $.to[paf]
1011: $.body[this is text value]
1012: ]
1013:
1014: @text[]
1015: ^mail:send[
1016: $.from[paf]
1.90 paf 1017: $.to[paf]
1.74 paf 1018: $.text[
1019: $.value[this is text value]
1020: ]
1021: ]
1022:
1023: @html[]
1024: ^mail:send[
1025: $.from[paf]
1026: $.to[paf]
1027: $.html{this is <b>html</b> value ^taint[<] 10}
1028: ]
1029:
1030: @text-n-html[]
1031: ^mail:send[
1032: $.from[paf]
1033: $.to[paf]
1034: $.text[
1035: $.value[this is text value]
1036: ]
1037: $.html[
1038: $.value{this is <b>html</b> value ^taint[<] 10}
1039: ]
1040: ]
1041:
1042: @file[]
1043: ^mail:send[
1044: $.from[paf]
1045: $.to[paf]
1046: $.file[^file::load[binary;image.jpg]]
1047: ]
1048:
1049: @text-n-file[]
1050: ^mail:send[
1051: $.from[paf]
1052: $.to[paf]
1053: $.text[
1054: $.value[this is text value]
1055: ]
1056: $.file[^file::load[binary;image.jpg]]
1057: ]
1058:
1059: @text-n-html-n-file[]
1060: ^mail:send[
1061: $.from[paf]
1062: $.to[paf]
1063: $.text[
1064: $.value[this is text value]
1065: ]
1066: $.html[
1067: $.COntent-type[$.value[text/html]$.charset[windows-1251xx]]
1068: $.value{this is <b>html</b> value ^taint[<] 10}
1069: ]
1070: $.file[^file::load[binary;image.jpg]]
1071: ]
1072:
1073:
1074:
1075: @md5salt[]
1076: 1234
1077:
1078: @cryptdocsample[]
1079: $users[^table::create{name password
1080: alice ***
1081: bob ***
1082: }]
1083:
1084: $htpasswd[^table::create[nameless]{}]
1085: ^users.menu{
1086: ^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$^md5salt[]]}
1087: }
1088:
1089: ^htpasswd.save[nameless;.htpasswd-parser-test]
1090:
1.73 paf 1091:
1092: @tcrypt[]
1.76 paf 1093: #^math:crypt[123;^$apr1^$1234567890abcdef]<br>
1094: ^math:crypt[123;^$apr1^$]<br>
1.72 paf 1095:
1096: @tfilespec[]
1097: src=$selffilespec<br>
1098: dirname=^file:dirname[$selffilespec]<br>
1099: basename=^file:basename[$selffilespec]<br>
1100: justname=^file:justname[$selffilespec]<br>
1101: justext=^file:justext[$selffilespec]<br>
1.68 paf 1102:
1103: @datecreatestring3[]
1104: $new_after[^date::now(-3)]
1105: $articles[^table::create{id title last_update
1106: 1 привет 2002-07-03}]
1107: ^articles.menu{
1108: $last_update[^date::create[$articles.last_update]]
1109: <a href=${articles.id}.html>$articles.title</a>
1110: ^if($last_update > $new_after){новая}
1111: <br>
1112: }
1.67 paf 1113:
1114: @div[]
1115: $var(5)
1116: ^var.inc(7)
1117: ^var.dec(3)
1118: ^var.div(4)
1119: ^var.mul(2)
1120: $var
1121:
1122:
1123: @xdocsave[]
1124: $document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
1125: <document>
1126: строка1<br/>
1127: строка2<br/>
1128: </document>}]
1129: ^document.save[test.xml]
1130:
1131: @xdocstring[]
1132: $document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
1133: <document>
1134: строка1<br/>
1135: строка2<br/>
1136: </document>}]
1137: ^document.string[
1138: $.method[html]
1139: ]
1140:
1141:
1142: @xdocload[]
1143: $document[^xdoc::load[article.xml]]
1144: $response:body[^document.file[$.media-type[text/xml]]]
1145:
1146:
1147: @xdoccreatetag[]
1148: $document[^xdoc::create[document]]
1149: $paraNode[^document.createElement[para]]
1150: $dummy[^document.documentElement.appendChild[$paraNode]]
1151: $response:body[^document.file[$.media-type[text/xml]]]
1152:
1153:
1154: @xdoccreate[]
1155: $document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
1156: <document>
1157: текст
1158: </document>}]
1159: $response:body[^document.file[$.media-type[text/xml]]]
1160:
1161: @selectBool2[]
1162: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
1163: <t attr="привет" n="123"/>}]
1164: ^if(^d.selectBool[/t/@n > 10]){
1165: /t/@n больше 10
1166: }{
1167: не больше
1168: }
1169:
1170:
1171: @selectNumber2[]
1172: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
1173: <t attr="привет" n="123"/>}]
1174: ^d.selectNumber[number(/t/@n)+1]<br>
1175: ^d.selectNumber[2*2]<br>
1176:
1177:
1178: @selectString2[]
1179: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
1180: <t attr="привет" n="123"/>}]
1181: # результат=привет
1182: ^d.selectString[string(t/@attr)]
1183:
1184:
1185: @selectSingle2[]
1186: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
1187: <t attr="привет" n="123"/>}]
1188: # результат=один элемент "t"
1189: $element[^d.selectSingle[t]]
1190: # результат=2 (количество атрибутов <t>)
1191: Количество атрибутов: ^element.attributes._count[]<br>
1192: # результат=не существует (нет <x>)
1193: ^if(^d.select[x]){
1194: x существует
1195: }{
1196: x не существует
1197: }
1198:
1199: @select2[]
1200: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><t attr="привет" n="123"/>}]
1201: # результат: список из одного элемента "t"
1202: $list[^d.select[t]]
1203: # результат: 2 = количество атрибутов <t>
1204: ^list.0.attributes._count[]<br>
1205: ^for[i](0;$list-1){
1206: $attr[$list.$i]
1207: $attr.nodeName = $attr.nodeType<br>
1208: }
1209:
1210:
1211: @selectt[]
1212: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><t attr="привет" n="123"/>}]
1213: $list[^d.select[t]]
1214: ^list.0.attributes._count[]
1.65 paf 1215:
1216: @envt[]
1.66 paf 1217: $f[^file::exec[showenv.cmd;
1218: $.bad[value]
1219: $.CGI_good[value]
1220: ]]
1.65 paf 1221: $f.status<br>
1222: $f.stderr<br>
1223: <pre>$f.text</pre>
1224:
1.63 paf 1225:
1226: @tserge[]
1.64 paf 1227: ^if(" 09 "){y}
1.61 paf 1228:
1229: @datetest[]
1230: $f[^file::stat[some.zip]]
1231: Размер в байтах: $f.size<br>
1232: Год создания: $f.cdate.year<br>
1233: $now[^date::now[]]
1234: $DAYS_CONSIDERED_NEW(3)
1235: Статус: ^if($f.mdate >= $now-$DAYS_CONSIDERED_NEW){новый;старый}
1236:
1.60 paf 1237:
1238: @checkList[]
1239: ...^oneOf[a;a,b,c]...<br>
1240: #...^oneOf[a;ax,b,c]...<br>
1241: ...^oneWord[word]...<br>
1242: #...^oneWord[wo rd]...<br>
1243:
1244:
1245: @oneOf[s;list][t] выдаёт строку, если строка она есть в списке(разделенном запятыми)
1246: $t[^list.lsplit[,]]
1247: ^if(!^t.locate[piece;$s]){^throw[user;$s;unknown]}
1248: $result[$s]
1249:
1250: @oneWord[s]
1251: ^if(^s.match[\W]){^throw[user.data;$s;not word]}{$s}
1.59 paf 1252:
1253: @pngsize[]
1254: $i[^image::measure[test.png]]
1255: ^i.html[]
1256:
1257:
1258: @forkeys[]
1259: $text[^form:fields.foreach[key;val]{$key=$val
1260: }]
1261: ^text.save[ttt.txt]
1262: =$text=
1263:
1264:
1265: @tstoredproc2[]
1266: ^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
1267: ^void:sql{exec pafvoid}
1268: }
1269:
1270: @tstoredproc[]
1271: ^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
1272: $t[^table::sql{exec pafproc}]
1273: # $t[^table::sql{{call pafproc}}]
1274: $c[^t.columns[]]
1275: ^c.menu{$c.column}[<br>]
1276: }
1.57 paf 1277:
1278: @datecreatestring2[]
1.58 paf 1279: <table border=1>
1280: ^datecreatestring2show[2000]
1281: ^datecreatestring2show[2000-02]
1.59 paf 1282: ^datecreatestring2show[2000-2-03]
1.58 paf 1283: ^datecreatestring2show[2000-02-03 15]
1284: ^datecreatestring2show[2000-02-03 15:30]
1285: ^datecreatestring2show[2000-02-03 15:30:04]
1286: ^datecreatestring2show[2000-02-03 15:30:04 hren]
1287: ^datecreatestring2show[15:30]
1288: ^datecreatestring2show[15:30:05]
1289: ^datecreatestring2show[15:30:05 hren]
1290: </table>
1291:
1292: @datecreatestring2show[s]
1293: $date[^date::create[$s]]
1294: <tr>
1295: <td>$s</td><td align=right>^date.sql-string[]</td>
1296: </tr>
1297:
1.57 paf 1298:
1299: @junctionprob[][l]
1300: $l[123]
1301: $a{$l}
1302: ^junctionprobnested[$a]
1303: @junctionprobnested[p]
1304: $p
1305:
1306:
1307: @callindirecttarget[]
1308: callindirecttarget called
1309: @callindirect[]
1310: $f[$callindirecttarget]
1311: ^f[]
1312:
1313: @xpath2[]
1314: $xdoc[^xdoc::create{<?xml version="1.0" encoding="windows-1251"?>
1315: <doc>
1316: <field-list>
1317: <field name="aa"/>
1318: <field name="bb"/>
1319: </field-list>
1320: </doc>
1321: }]
1322:
1323: #^xdoc.string[]
1324:
1325: $fieldList[^xdoc.selectSingle[/doc/field-list]]
1326: #^fieldList.childNodes._count[]
1327: $fields[^fieldList.select[field]]
1328: #^fields._count[]
1329: ^fields.foreach[k;node]{
1330: $node.nodeName<br>
1331: }
1332: @counter[filespec][f;s]
1333: ^file:lock[$filespec]{
1334: $f[^file::load[text;$filespec]]
1335: $s[^eval($f.text+1)]
1336: ^s.save[$filespec]
1337: }
1338: $s
1.56 paf 1339:
1340: @xmlspace[]
1341: $xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
1342: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
1343: <people>
1344: <man id="1" имя="word слово">
1345: <name>1 2</name>
1346: </man>
1347: </people>
1348: }}]
1349: $xdoc[^xdoc.transform[global.xsl]]
1350: $string[^xdoc.string[$.method[html]]]
1351: ^string.save[a]
1352: ^untaint[html]{$string}
1353:
1354: @badthrows[]
1355: #^throw[a;b;]
1356: ^throw[a;]
1.54 paf 1357:
1358: @mssqltypes1[]
1359: ^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
1.55 paf 1360: # ^string:sql{select { ts '1998-05-02 01:23:56.123' }}
1361: # ^string:sql{select CAST({ ts '1998-05-02 01:23:56.123' }AS smalldatetime)}
1362: # ^string:sql{select CAST({ts '2002-04-28 00:00:00.000'} AS smalldatetime)}
1363: $t[^table::sql{select a from paf}]
1364: ^t.count[]
1.54 paf 1365: }
1.51 paf 1366:
1.53 paf 1367: @datecreatestring[]
1.54 paf 1368: $d[^date::create[2002-04-33 01:03:04]]
1.53 paf 1369: ^d.sql-string[]
1.52 paf 1370:
1371: @method[hash]
1372: $hash.key
1373: @mainZ[]
1374: ^method[
1375: $.key{code}
1376: ]
1377:
1.51 paf 1378: @tablehasht[]
1379: $t[^table::create{p
1380: 1
1381: 3
1382: 2
1383: 4}]
1384:
1385: $h[^t.hash[p]]
1386:
1387: =^h._count[]=
1388:
1389:
1390: @sqldefaults[]
1391: ^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
1392: ^int:sql{select news_id from news where news_id=-1}[$.default{2}]<br>
1393: ^string:sql{select news_id from news where news_id=-1}[$.default{2}]
1394: }
1.60 paf 1395: =======
1396: <hr>
1397: OK
1398: >>>>>>> 1.50
1.48 paf 1399:
1400: @tcrashlocaljunctionsv2[]
1401: $a[
1402: $b{ $c[1] }
1403: ]
1404: $b
1405: $c
1406:
1407: @tcrashlocaljunctions[]
1408: $var[aaa]
1409: ^if(1){
1410: ^tcrashlocaljunctions1[]
1411: }
1412:
1413: $j
1414:
1.49 paf 1415: @tcrashlocaljunctions1[][var]
1416: $var[varvalue]
1.48 paf 1417: $j{
1418: $var
1419: }
1.49 paf 1420: $j
1.48 paf 1421:
1422: @tjunctions[][tl]
1423: $t[^t::create[]]
1424: ^tjunctionsi[]
1425:
1426: @tjunctionsi[][tl]
1427: $tl[12345]
1428: ^t.tjunctionsm[
1429: $.key{
1430: $tl
1431: }
1432: ]
1.46 paf 1433:
1.47 paf 1434: @replacetest[]
1435: $b[b]
1436: $s[
1437: aaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1438: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1439: ]
1440: ^s.replace[^table::create{from to
1441: ba !_}]
1442:
1443:
1.46 paf 1444: @matchoptionpp[]
1.47 paf 1445: #$ORIGINS(1)
1.46 paf 1446: $s[
1447: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1.47 paf 1448: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1449: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1450: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1451: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1452: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1453: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1454: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1455: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1456: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1.46 paf 1457: ]
1458: ^s.match[b;g']{($match.prematch|$match.match|$match.postmatch)}
1459:
1.44 paf 1460:
1461: @txdocxnodechild[]
1462: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?><d/>}]
1463: $xdoc.nodeName
1464: ^xdoc.selectNumber[2*2]
1.45 paf 1465: $xdoc:ELEMENT_NODE
1.44 paf 1466:
1467:
1468: @tclasses[]
1469: $t[^t::create[]]
1470: ^t.method[]
1471: <hr>
1472: ^t.base_method[]
1473:
1.40 paf 1474:
1475: @errort[]
1.42 paf 1476: ^xdoc::create[a]
1.40 paf 1477: #^throw[user;here;this]
1478:
1479: @tselectNumber[]
1480: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d attr="привет" n="123"/>}]
1481: ^d.selectString[string(d/@attr)]<br>
1482: ^d.selectNumber[2*2]<br>
1483: ^d.selectNumber[number(/d/@n)+1]<br>
1484:
1.34 paf 1485:
1.36 paf 1486: @invaliddate2[]
1487: $d[^date::create(1018946575/60/60)] ^d.sql-string[]
1488:
1489: @process2[]
1490: ^^process{
1491: ^process{
1492: ^$a[^^if(0){^$.k[y]}{^$.k[^^hren[]n]}] ^$a.k
1493: }
1494: }
1495:
1.35 paf 1496: @casehashtext[]
1497: $tt[1]
1498: $tmp[
1499: ^switch[$tt]{
1500: ^case[1]{
1501: $.aaa[123]
1502: }
1503: ^case[DEFAULT]{
1504: $.bbb[456]
1505: }
1506: }
1.36 paf 1507: shit!
1.35 paf 1508: ]
1.36 paf 1509: #$tmp
1.35 paf 1510: $tmp.aaa
1511:
1512: @subjvaltest[]
1513: $a12[val]
1514: $b[12]
1515: $a$b
1516:
1.34 paf 1517: @tableselect0[]
1518: $person[^table::create{name height
1519: paf 1.77
1520: шохин 2.07
1521: moko 1.77
1522: }]
1523: $nottoohigh[^person.select($person.height<2)]
1524: ^nottoohigh.menu{$nottoohigh.name<br>}
1.32 paf 1525:
1526: @transparams[]
1527: $idoc[^xdoc::create{<?xml version="1.0" ?><doc/>}]
1528: $odoc[^idoc.transform[global.xsl;
1529: $.param1['1']
1530: $.param2['2']
1531: ]]
1532: <pre>^taint[^odoc.string[$.method[html]]]
1533:
1534: @memnotest1[]
1535: ^for[i](0;4000){
1536:
1537: $xxxx[$i]
1538: $xxxx
1539:
1540: }
1541:
1542: @memnotest1notes[]
1543: одна итерация цикла:
1544: [Mon Apr 8 20:12:02 2002] execution-------------------------|
1.35 paf 1545: '469641+=28 wcodeframe -> 0 !optimize[3]''469669+=49 string от {} -> 0 optimize[3]'
1.32 paf 1546: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
1547: [Mon Apr 8 20:12:02 2002] "|| "
1548: [Mon Apr 8 20:12:02 2002] 12:WITH_ROOT
1549: [Mon Apr 8 20:12:02 2002] 13:VALUE
1550: [Mon Apr 8 20:12:02 2002] "xxxx" string
1.35 paf 1551: [Mon Apr 8 20:12:02 2002] 14:CREATE_EWPOOL'469377+=24 wcodeframe -> 0 !optimize[1]''469401+=49 string -> 41 !optimize[7]'
1.32 paf 1552: [Mon Apr 8 20:12:02 2002] 16:WITH_READ
1553: [Mon Apr 8 20:12:02 2002] 17:VALUE
1554: [Mon Apr 8 20:12:02 2002] "i" string
1555: [Mon Apr 8 20:12:02 2002] 18:GET_ELEMENT
1.35 paf 1556: [Mon Apr 8 20:12:02 2002] 17:WRITE_VALUE'469452+=40 MAX_NUMBER -> !~2 actual digits''469492+=49 -> 41 !'
1557: [Mon Apr 8 20:12:02 2002] 16:REDUCE_EWPOOL'469541+=24 VString -> 0 optimize[5]'
1.32 paf 1558: [Mon Apr 8 20:12:02 2002] 15:CONSTRUCT_VALUE
1559: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
1560: [Mon Apr 8 20:12:02 2002] "| "
1561: [Mon Apr 8 20:12:02 2002] 12:WITH_READ
1562: [Mon Apr 8 20:12:02 2002] 13:VALUE
1563: [Mon Apr 8 20:12:02 2002] "xxxx" string
1564: [Mon Apr 8 20:12:02 2002] 14:GET_ELEMENT
1565: [Mon Apr 8 20:12:02 2002] 13:WRITE_VALUE'469573+=41 string expand nothing for now'
1566: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
1.35 paf 1567: [Mon Apr 8 20:12:02 2002] "||"'469617+=24 VString -> 0 !optimize[6]'
1.32 paf 1568: [Mon Apr 8 20:12:02 2002] <-ja returned
1569: [Mon Apr 8 20:12:02 2002] ja->
1570:
1571: 201/328=0.612804878049 %%optimized
1572:
1573: 1.
1574: CREATE_*POOL
1575: сделать
1576: *POOL_POOLED+CODE
1577: где
1578: wwrapper
1579: и(возможно) wcodeframe
1580: +string
1581: стековая переменная
1582:
1583: 2.
1584: избавиться от обёртки при возврате результата process [см. тело _for]
1585:
1586: 3.
1587: сделать callback для process, чтобы вынести invariants из _for & co.
1588:
1589: 4.
1590: @todo склеить get_element и write_value (при вставлении? write_value)
1591:
1592: 5.
1593: reduce_*pool -> вариант получить именно string, без VString обёртки [часто
1594: обёртка сразу выбрасывается = не нужна]
1595:
1596: 6.
1597: process вариант получить именно string, без VString обёртки [часто обёртка
1598: сразу выбрасывается = не нужна]
1599:
1600: 7.
1601: string head, убить 8 байт неправильной link
1.31 paf 1602:
1603: @voidparams[]
1604: ^voidparamsm[$form:field]
1605:
1606: @voidparamsm[p]
1607: ^p.int(123)
1.29 paf 1608:
1.30 paf 1609: @rolls2[]
1610: $now[^date::now[]]
1611: $d[^date::create($now.year;$now.month)] ^d.sql-string[]<br>
1612: ^for[i](1;12){
1613: ^d.roll[month](-1) ^d.sql-string[]<br>
1614: }
1615:
1.29 paf 1616: @cacheexpireschanging[]
1617: ^cache[$DB_HOME/keyключ][^date::now(+1)]{ ^rem{1 day}
1618: ^cache[^date::now(+4/24/60/60)]
1619: # ^cache(2)
1.30 paf 1620: # ^cache(0)
1.29 paf 1621: ^math:random(100)
1622: }
1623:
1624:
1625:
1626: @cacheexpiresfixed[]
1627: ^cache[$DB_HOME/keyключ][^date::now(+2/24/60/60)]{
1628: ^math:random(100)
1629: }
1630:
1631: @dateoffsets[]
1632: $d[^date::create(^date::now[]+1/24/60)]
1633: #$d[^date::now(+1/24/60)]
1634: ^d.sql-string[]
1635: #$d
1.26 paf 1636:
1.28 paf 1637: @exceptionTypes[]
1638: # parser.compile ^test[} компиляция (непарная скобка, ...)
1639: # parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...)
1640: # number.zerodivision ^eval(1/0) ^eval(1%0)
1641: # number.format ^eval(abc*5)
1642: # file.missing ^file:delete[delme] not found
1643: # file.access ^table::load[.] no rights
1644: # image.format ^image::measure[index.html] not gif/jpg
1645: # sql.connect ^connect[mysql://baduser:pass@host/db]{} not found/timeout
1646: # sql.execute ^connect[mysql://okuser:pass@host/db]{^void:sql{select bad}} syntax error
1647: # xml ^xdoc::create{<forgot?>} any error in xml/xslt libs
1648: # smtp.connect not found/timeout
1649: # smtp.execute communication error
1650:
1.26 paf 1651: @roll2[]
1652: $d[^date::create(2002;4;2;2;2;3)] ^d.sql-string[]<br>
1.27 paf 1653: ^d.roll[day](+365*3+1) ^d.sql-string[]<br>
1.26 paf 1654:
1.25 paf 1655:
1656: @rolls[]
1657: $d[^date::create(2002;4;4)]
1658: ^d.sql-string[]<br>
1659: ^for[i](1;7){
1660: ^d.roll[day](-1)
1661: ^d.sql-string[]<br>
1662: }
1663: <hr>
1664: $d[^date::create(2002;3;28)]
1665: ^d.sql-string[]<br>
1666: ^for[i](1;7){
1667: ^d.roll[day](+1)
1668: ^d.sql-string[]<br>
1669: }
1670: <hr>
1671: $d[^date::create(2002;12;3)]
1672: ^d.sql-string[]<br>
1673: ^for[i](1;14){
1674: ^d.roll[day](-1)
1675: ^d.sql-string[]<br>
1676: }
1677: <hr>
1678: $d[^date::create(2002;10;19)]
1679: ^d.sql-string[]<br>
1680: ^for[i](1;14){
1681: ^d.roll[day](+1)
1682: ^d.sql-string[]<br>
1683: }
1684:
1685:
1686:
1687:
1688:
1.22 paf 1689:
1690: @exceptions1[]
1691: ^try{
1692: aaa
1.24 paf 1693: ^throw[custom1;paf;is stupid]
1.22 paf 1694: }{
1.24 paf 1695: ^if($exception.type eq custom1){
1.28 paf 1696: # $exception.handled(1)
1697: ^throw[$exception]
1.24 paf 1698: type=$exception.type<br>
1699: source=$exception.source<br>
1700: file=$exception.file<br>
1701: lineno=$exception.lineno<br>
1702: comment=$exception.comment<br>
1703: }
1.22 paf 1704: }
1.21 paf 1705:
1706: @locate_by_expr[]
1707: $t[^table::create{a b
1708: 1 nok
1709: 2 ok
1710: 3 nok
1711: }]
1712: ^if(^t.locate($t.a==2)){$t.b}{n}
1.17 paf 1713:
1714: @method_junction_params[param]
1715: ^if($param is junction){junction}{ne junction}
1716:
1717: @verifyCookie[value]
1718: ^if($cookie:dummyvote eq $value){
1719: $result(1)
1720: }{
1721: $cookie:dummyvote[$value]
1722: $result(0)
1723: }
1.16 paf 1724:
1725: @execlangs[]
1.20 paf 1726: $f[^file::exec[test.pl]]
1.36 paf 1727: err:$f.stderr<br>
1.16 paf 1728: ^process{$f.text}
1729: #$c[^t.columns[]]
1730: #^c.menu{
1731: #* $c.column<br>
1732: #}
1.36 paf 1733: c:$t.c<br>
1.16 paf 1734:
1735: @tobjeresult[]
1736: ^table::create{a
1737: 12}
1.15 paf 1738:
1739: @xmlprobs[]
1740: $xmlDataType[^xdoc::load[program.xml]]
1741: #<pre>^taint[^xmlDataType.string[]]
1742: $xmlDataTypes[^xmlDataType.select[programs/program[@id=4]/data]]
1743: #=^xmlDataTypes._count[]=
1744: =^xmlDataTypes.0.getAttribute[type-id]=
1745:
1746: @doubleprobs[]
1747: $1(^math:radians(180))
1748: $2($math:PI)
1749: ^if(^1.format[%.10f]==^2.format[%.10f]){y;n}
1750: ^if($1==$2){y;n}
1751: ^if(^math:radians(180)==$math:PI){y;n}
1752:
1753:
1754: @divnamestop[]
1755: $a(10)
1756: ^eval($a\3)
1757:
1758: @arrayclone[]
1759: $t[^table::create{a b
1760: 1 11
1761: 2 22
1762: }]
1763: $c[^table::create[$t]]
1764: ^c.append{2 33}
1765: ^t.count[]
1766: ^c.count[]
1767:
1768: @operator_tricks[]
1769: ^if(1){$a[^t[]]}
1770: $a!
1771: $a($b)
1772: ^if(1){y}{n}
1773: $MAIN:a(^t[] eq OK)
1774: #$MAIN:a(1)
1775: ^if($a){y}{n}
1776: #^if(1){y}{n}
1777: $form:if
1778: $a[$.n[1]]
1779: $a.if
1780:
1781: @xoutputrusattr[]
1782: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d attr="привет"/>}]
1783: ^show_xdoc2[$d]
1784:
1785: @xdocset1[]
1786: $d[^xdoc::set{<?xml version="1.0"?><d>=^taint[&]=</d>}]
1787: ^show_xdoc2[$d]
1788:
1789: @regexp3[]
1790: $s[abcАБВ]
1791: ^if(^s.match[][i]){y}{n}
1792:
1793:
1794: @exec2[]
1795: $a[^file::exec[bin/t.cmd]]
1796: <pre>^taint[$a.text]</pre>|$a.status|$a.stderr<hr>
1797:
1798:
1799: @tlock[]
1800: ^file:lock[lockfile]{
1801: code
1802: }
1803:
1804: @xmloutattrwithoutvalue[]
1805: #$ORIGINS(1)
1806: $doc[^xdoc::set{<?xml version="1.0"?><doc background="">zz</doc>}]
1807: $doc[^doc.transform[global.xsl]]
1808: =^taint[html][^doc.string[$.method[html]]]=
1809:
1810:
1811:
1812: @precisionProblem[]
1813: $a[123456789012345678901234567890]
1814: $b(^a.double[])
1815: ^b.format{%.20E}
1816: <hr>
1817: ^eval(2*2)
1818:
1819: @xpath[]
1820: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
1821: <document><block><p>привет</p></block></document>
1822: }]
1823: #^show_xdoc2[$xdoc]
1824: $node[^xdoc.selectSingle[/document/block/p]]
1825: ^if(def $node){
1826: ^if($node is string){
1827: $node
1828: }{
1829: ^if($node is hash){
1830: ^node._count[]
1831: }{
1832: $node.nodeType
1833: }
1834: }
1835: #$node.firstChild.nodeValue
1836: }{
1837: node not found
1838: }
1839:
1840:
1841: @ttablesetlang[]
1842: $a-tab-b[a b
1843: 1 2]
1844:
1845: $t[^table::set{$a-tab-b}]
1846: =$t.a=
1847: <hr>
1848:
1849: $t[^table::set[nameless]{^taint[$a-tab-b]}]
1850: =$t.0=
1851: <hr>
1852:
1853: $t[^table::set{^untaint{^taint[$a-tab-b]}}]
1854: =$t.a=
1855:
1856: #^t.append{1 2}
1857:
1858: @mail3[]
1859: ^mail:send[
1.98 paf 1860: $.from[Александр Петросян <paf@mail.design.ru>]
1861: $.to[Александр Петросян <paf@mail.design.ru>]
1862: $.subject[проверка2]
1.15 paf 1863: $.body[
1864: $.text[
1865: $.content-type[$.value[text/plain] $.charset[windows-1251]]
1.98 paf 1866: $.body[проверка^taint[uri][москва]=]
1.15 paf 1867: ]
1868: $.attachment[
1869: $.value[^file::load[text;index.html]]
1870: $.file-name[привет всем.html]
1871: ]
1872: ]
1873: ]
1874:
1875:
1876: @ttime[]
1877: $now[^date::now[]]
1878: $now.hour:$now.minute
1879:
1880: @tupper[]
1881: $t[abcABCабвАБВ]
1882: $t<br>
1883: ^t.upper[]
1884:
1885: @treplace[]
1886: $copy-paste-clean[^table::set{a b
1887: . _
1888: , _
1889: + _
1890: & _
1891: ? _
1892: = _}]
1893:
1894: $cache_key[^taint[в.а,с+я]&был?тут=недавно.cache]
1895: # почему-то этот replace роняет апач в 500 ошибку :(
1896: #^cache_key.replace[$copy-paste-clean]
1897: $test[abc]
1898: ^test.save[$cache_key]saved<br>
1899: $cache[^file:list[.;\.cache^$]]
1900: ^file:delete[$cache_key]deleted($cache.name)<br>
1901:
1902:
1903:
1904: @xslt2[]
1905: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
1906: <document><block><p>привет</p></block></document>
1907: }]
1908: ^show_xdoc2[$xdoc]
1909: ^show_xdoc2[^xdoc.transform[templates/_document.xslt]]
1910: <hr>
1911:
1912:
1913: @tcache2[]
1914: ^cache[$DB_HOME/keyключ](2){
1915: ^math:random(100)
1916: }
1917:
1918: @ttaintuntaint[]
1919: <!-- некий панковский заголовок с буковкой C в круглых скобках -->^taint[html][
1920:
1921: ]zz
1922: <hr>
1923: ^untaint[html]{1^taint[ ]2 3}
1924:
1925:
1926: @tappend2[]
1927: $t[^table::set{a b}]^t.append{1 2}$t.a
1928:
1929: @badvsnprintf[]
1930: ^connect[zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz]{
1931: }
1932:
1933:
1934: @badoracequoting[]
1935: $SQL.connect-string[oracle://webspb:webpwd@mts?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]
1936: ^connect[$SQL.connect-string]{
1937: ^void:sql{delete from paf}
1938: ^void:sql{insert into paf values (1, '$form:text')}
1939: $paf[^table::sql{select * from paf}]
1940: ^paf.menu{
1941: $paf.id: ^untaint{$paf.block}<hr>
1942:
1943: }
1944: <hr>
1945:
1946:
1947: ^rem{
1948: $news[^table::sql{select description from news}[$.limit(3)]]
1949: ^news.menu{
1950: ^untaint{$news.description}<hr>
1951:
1952: }
1953: <hr>
1954: }
1955:
1956: $tables[^table::sql{select table_name from user_tables}]
1957: ^tables.menu{
1958: $tables.table_name<br>
1959: }
1960:
1961: }
1962: <hr>
1963: $env:PATH
1964:
1965: @badconstructors[]
1966: $bred[^string::length[]]
1967: $bred[^response::clear[]]
1968: $bred[^int::int[]]
1969:
1970:
1971: @xloadwrongtable[]
1972: $constr[^xdoc::load[wrongtable.xml]]
1973: ^show_xdoc2[$constr]
1974:
1975: @xsetwrongtable[]
1976: $constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251z" ?>
1977: <block-list>^untaint[as-is]{$constructor}</block-list>}]
1978:
1979:
1980: @tablecolumnerror[]
1981: $t[^table::set{a}]
1982: $t.$a
1983:
1984: @roll[]
1985: #$date[^date::set(1970;1;2)]
1986: #^date.roll[month](-1)
1987: $date[^date::set(2038;1;1)]
1988: ^date.roll[month](+1)
1989: $date.year $date.month $date.day
1990:
1991: @cookie2[]
1992: #=$cookie:clientType[$.value[test]]=<br>
1.159 paf 1993: =$cookie:CLASS.clientType=<br>
1.15 paf 1994:
1995:
1996: @tableset[]
1997: $a[^table::set{a
1998: 1
1999: 2}]
2000: ^eval(100\$a)
2001:
2002:
2003:
2004: @zzz[]
2005:
2006:
2007: $constructor[
2008: <block1 name="main_srvr" type="0" label="Основное тело" />
2009: <block2 name="main_srvr2" type="0" label="Основное тело" />
2010: ]
2011:
2012: $constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
2013: <block-list>^untaint[as-is]{$constructor}</block-list>}]
2014:
2015: $children[$constr.documentElement.childNodes]
2016: ^if($children){
2017: ^for[i](1;^children._count[]){
2018: $node[$children.$i]
2019: $node.nodeName<br>
2020: }
2021: }
2022:
2023:
2024: @thashforeach3[]
2025: $h[
2026: $.a[1]
2027: $.b[2]
2028: ]
2029: $c[^table::set{a
2030: ^h.foreach[key;value]{$value
2031: }}]
2032: $c.a
2033:
2034: @thashforeach2[]
2035: $h[
2036: $.a[1]
2037: $.b[2]
2038: ]
2039: $c[
2040: ^h.foreach[key;value]{
2041: $.$key[$value]
2042: }
2043: ]
2044: $c.b
2045:
2046: @thashforeach[]
2047: $h[
2048: $.a[1]
2049: $.b[2]
2050: ]
2051: ^h.foreach[key;value]{
2052: $key=$value<br>
2053: }
2054:
2055: @thashdelete[]
2056: $h[$.a[1] $.b[2]]
2057: was:<br>
2058: count=^h._count[] <br>
2059: b='$h.b' <br>
2060:
2061: ^h.delete[b]
2062:
2063: now:<br>
2064: count=^h._count[] <br>
2065: b='$h.b'
2066:
2067: @sappend[]
2068: $test[123]
2069: ^test.save[test]
2070: ^test.save[append;test]
2071:
2072: @tappend[]
2073: $test[^table::set{a b
2074: a1 b1}]
2075: ^test.save[test]
2076: $test[^table::set{a b
2077: a2 b2}]
2078: ^test.save[append;test]
2079:
2080:
2081: @tform[]
2082: ^if(def $form:new_file){y}{n}
2083: <form method="post" enctype="multipart/form-data">
2084: <input type="file" name="new_file" />
2085: <input type=submit>
2086: </input>
2087:
2088: @formattest[]
2089: $size(15.124)
2090:
2091: ^size.format{%.2f}
2092:
2093: @filelist[]
2094: $html[^file:list[.;\.html^$]]
2095: ^html.menu{
2096: $html.name<br>
2097: }
2098: <hr>
2099:
2100: @безнадёжна_попытка_поправить_непоправимое[]
2101: $dom_from_disk[^xdoc::load[input.xml]]
2102: $dom_created_in_air[^xdoc::create[doc]]
2103: ^dom_created_in_air.documentElement.appendChild[^dom_from_disk.documentElement.cloneNode(1)]
2104: ^show_xdoc2[$dom_created_in_air]
2105:
2106:
2107: @tcache[]
2108: #^hashfile:clear[cache]
2109: $code[^hashfile::open[$DB_HOME;cache]]
2110: ^code.cache[key](2){
2111: ^math:random(100)
2112: # ^code.delete[]
2113: }
2114:
2115: @thashfileexp[]
2116: $hf[^hashfile::open[$DB_HOME;hashfile]]
2117: $hf.paf[$.value[крут] $.expires(3)]
2118: paf=$hf.paf
2119: <hr>
2120: ^hf.foreach[key;value]{
2121: $key=$value<br>
2122: }
2123: <hr>
2124: $hash[^hf.hash[]]
2125: =$hash.paf=
2126: <hr>
2127:
2128: @tcounter[]
2129: ^tcounterone[$DB_HOME]
2130: other root:
2131: ^tcounterone[${DB_HOME}2]
2132: again, first:
2133: ^tcounterone[$DB_HOME]
2134:
2135: @tcounterone[DB_HOME]
2136: $counter[^hashfile::open[$DB_HOME;counter]]
2137: #^counter.clear[]
2138: ^counter.transaction{
2139: # $counter.value(10)
2140: $counter.value($counter.value+1)
2141: # ^counter.delete[value]
2142: $counter.value
2143: }
2144: <hr>
2145: ^rem{
2146: $hash[^counter.hash[]]
2147: =$hash.value=
2148: <hr>
2149: }
2150:
2151: @tablehash[]
2152: $productList[^table::set{id name
2153: 1 носки
2154: 2 валенки
2155: 3 ушанка
2156: }]
2157:
2158: #скажем, у первого дилера
2159: $firstPriceList[^table::set{id price
2160: 1 0.3
2161: 3 1000
2162: }]
2163:
2164: $firstPriceHash[^firstPriceList.hash[id]]
2165:
2166: ^productList.menu{
2167: продукт "$productList.name" | цена у first: $firstPriceHash.[$productList.id].price<br>
2168: }
2169:
2170:
2171: @hashfile[]
2172: $hf[^hashfile::assign[hashfile]]
2173: #$hf.paf[крут5]
2174: paf=$hf.paf
2175:
2176: @formclass[]
2177: ^$form:CLASS.a=$form:CLASS.a
2178:
2179: @domdata[]
2180: ^if(1){
2181: # $a{^hren[]}
2182: }
2183: $a
2184: $xdoc[^xdoc::create[doc]]
2185: $doc[$xdoc.documentElement]
2186: $name[^doc.appendChild[^xdoc.createElement[name]]]
2187: $text[^name.appendChild[^xdoc.createTextNode[петросян&coz]]]
2188: ^untaint[as-is]{=$text.nodeValue=}
2189:
2190: @domedit[]
2191: ^domdata[]
2192: #$paf.nodeName<br>
2193: #$doc.documentElement.nodeName<br>
2194:
2195: ^show_xnode1[$xdoc.documentElement;0;1]
2196: <hr>
2197: ^show_xdoc2[$xdoc]
2198: <hr>
2199:
2200: @domxslt[]
2201: ^domdata[]
2202: ^show_xdoc2[^xdoc.transform[global.xsl;$.param1[123/]]]
2203: <hr>
2204:
2205: @lsplit2[]
2206: $path[/optics/]
2207: $pathTable[^path.lsplit[/]]
2208: ^pathTable.menu{
2209: ^if(def $pathTable.piece){
2210: =$pathTable.piece=
2211: }
2212: }
2213:
2214:
2215: @faceesize[]
2216: $k(2)
2217: $pict[^image::load[paf.gif]]
2218: $small[^image::create($pict.width/$k;$pict.height/$k)]
2219: ^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;250)
2220: $response:body[^small.gif[]]
2221:
2222: @imageresize[]
2223: $k(2)
2224: $pict[^image::create(400*$k;200*$k)]
2225: $pict.line-width(2)
2226: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
2227: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-20;$pict.height-20;0+20;360-20;0xff0000)
2228: #^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
2229: ^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-20;0x0000ff)
2230: ^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+20;360-20;0xff0000)
2231: $response:body[^pict.gif[]]
2232:
2233: #$small[^image::create($pict.width/$k;$pict.height/$k)]
2234: #^small.copy[$pict](0;0;$pict.width;$pict.height;0;0)
2235: #^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;0)
2236:
2237: #$response:body[^small.gif[]]
2238:
2239:
2240: @tintdefault[]
2241: #$abc[abc]
2242: $abc[33]
2243: ^abc.int[z]
2244: #^abc.int(123)
2245:
2246: @ifassignhash[]
2247: $h[^if(1){$.a(1);$.a(2)}]
2248: $h.a
2249:
2250: @ifpasshash[]
2251: $a[$.e[a]]
2252: $b[$.e[b]]
2253: ^ifpasshashdest[^if(1){$a;$b}]
2254: #$x[^if(1){$a}{$b}]
2255: #^ifpasshashdest[$x]
2256:
2257: @ifpasshashdest[p]
2258: $p.e
2259:
2260: @movedir[]
2261: ^file:move[a;deeper/a]
2262:
2263: @replace[]
2264: $a[12^;3]
2265: ^a.replace[^table::set{from to
2266: 2^; !
2267: }]
2268:
2269:
2270: @set[]
2271: ^setdata[]
2272: ^a.add[$b]
2273: add:$a.3<br>
2274:
2275: ^setdata[]
2276: ^a.sub[$b]
2277: sub2:$a.2<br>
2278: sub1:$a.1<br>
2279:
2280: ^setdata[]
2281: $c[^a.union[$b]]
2282: union3:$c.3<br>
2283: union2:$c.2<br>
2284:
2285: ^setdata[]
2286: $c[^a.intersection[$b]]
2287: intersection3:$c.3<br>
2288: intersection2:$c.2<br>
2289:
2290: ^setdata[]
2291: intersects:^if(^a.intersects[$b]){y;n}<br>
2292: intersects2:^if(^a.intersects[ ]){y;n}<br>
2293:
2294:
2295: <hr>
2296:
2297: @setdata[]
2298: $a[$.1[a1] $.2[a2]]
2299: $b[ $.2[b2] $.3[b3]]
2300:
2301:
2302: @hash[]
2303: $h[^hash::create[$._default[123]]]
2304: $h.paf[not kretin]
2305: $h.paf<br>
2306: =$h.that=<br>
2307:
2308: @methresult[]
2309: $result[^table::set{1}]
2310:
2311: @terror[]
2312: ^error[method z must be called with z]
2313:
2314: @syntax1[]
2315: #^a[^b]
2316:
2317: @syntax2[]
2318: #^a[
2319:
2320: @ssave[]
2321: $abc[abc]
2322: ^abc.save[abc]
2323:
2324: @calendar[]
1.103 paf 2325: $year(2002)
2326: $month(12)
1.84 paf 2327: ${year}-${month}:<br>
2328: $week_days[^date:calendar[rus]($year;$month)]
1.15 paf 2329: <pre>
1.101 paf 2330: ^week_days.menu{^for[wday](0;6){^if($week_days.$wday){$week_days.$wday; ^; ^;} }=$week_days.week,$week_days.year=<br>}
1.15 paf 2331: </pre>
2332:
2333: @thash[]
2334: $table[^table::set{id name age
2335: 1 paf 278
2336: 2 пиф 234
2337: }]
2338: $hash[^table.hash[id;^table::set[nameless]{id
2339: name}]]
2340: $hash.2.id $hash.2.name $hash.2.age
2341:
2342: @tdef[]
2343: $s[0]
2344: if 0=^if($s){}{n}<br>
2345: if def 0=^if(def $s){y}{}<br>
2346: <hr>
2347:
2348: @ford[]
2349: ^for[i](0;5){$i}{($i)}
2350:
2351: @tif[]
2352: ^if[def]{y;n}
2353:
2354: @image[]
2355: $pict[^image::create(400;200)]
2356: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
2357: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-10;$pict.height-10;0+10;360-10;0xff0000)
2358: #^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
2359: ^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-10;0x0000ff)
2360: ^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+10;360-10;0xff0000)
2361: $response:body[^pict.gif[]]
2362:
2363:
2364:
2365: @mail2[]
2366: ^mail:send[
1.139 paf 2367: $.message-id[<6615%1@parser.ru>]
1.15 paf 2368: $.content-type[$.value[text/plain] $.charset[windows-1251]]
2369: $.from[Александр Петросян <paf@design.ru>]
2370: $.to[Александр Петросян <paf@design.ru>]
1.134 paf 2371: $.subject[проверка проверка]
2372: $.text[проверка]
1.15 paf 2373: ]
2374:
2375: @cookie[]
1.115 paf 2376: #$env:HTTP_COOKIE<br>
1.15 paf 2377:
2378: #$cookie:переменная[test тест ТЕСТ2]
2379: =$cookie:переменная=<br>
2380: #$cookie:переменная2[test тест ТЕСТ3]
2381: =$cookie:переменная2=<br>
2382: =$cookie:CLASS.переменная2=<br>
2383:
2384: @response[]
2385: #^if($form:reload){
2386: $response:refresh[$.value[0] $.url[./t.html?uri=$env:SERVER_NAME]]
2387: #}
2388:
2389: @xslt[]
2390: ^xdata[]
2391: $transformed[^xdoc.transform[global.xsl;$.param1[123/]]]
2392: ^show_xdoc2[$transformed]
2393:
2394: @regexp2[]
2395: $s[ select]
2396: $s[^s.match[^^\s*][]{!}]
2397: $s
2398:
2399: @header[]
2400: $response:refresh[
2401: $.value[0]
2402: $.url[http://design.ru?a=^taint[123]]
2403: ]
2404:
2405: @ttablerem[]
2406: $table[^table::load[a.cfg]]
2407: ^table.menu{$table.a}
2408:
2409: @tconnect[]
2410: ^connect[mysql://test:test@paf/test?charset=cp1251_koi8&compress=1&timeout=1&named_pipe=1]{
2411: $tables[^table::sql{show tables}]
2412: #$cols[^tables.columns[]]
2413: #$cols.column
2414: ^tables.menu{
2415: $tables.[Tables_in_test]<br>
2416: }
2417: }
2418:
2419: @pcre[]
2420: $s[1 2]
2421: ^s.match[\s;ig]{!}
2422: #^s.match[\d;ig]{!}
2423:
2424:
2425: @regexp[]
2426: $s[abcАБВ]
2427: ^if(^s.match[б][i]){y}{n}
2428:
2429: @mail[]
2430: #$ORIGINS(1)
2431: ^mail:send[
2432: $.from[paf@design.ru]
2433: $.to[paf@design.ru]
2434: $.body[1
2435:
2436: 2
2437:
2438:
2439: 3]
2440: ]
2441:
2442: @fori[][i]
2443: ^for[i](1;3){... =$i= ...}
2444:
2445: @xdata0[]
2446: #$response:content-type[$.value[text/html] $.charset[windows-1251]]
2447: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
2448: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
2449: <people>
2450: <man id="1" имя="word слово">
2451: <name>P«^;AF B</name>
2452: </man>
2453: <man id="2">
2454: <name>ПИФ^taint[&]</name>
2455: </man>
2456: </people>
2457: }]
2458:
2459: @xdata[]
2460: #$response:content-type[$.value[text/html] $.charset[windows-1251]]
1.156 paf 2461: $xdoc[^xdoc::create{<?xml version="1.0" encoding="windows-1251"?>
1.15 paf 2462: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
2463: <people>
2464: <man id="1" имя="word слово">
2465: <name>P«^;AF B</name>
2466: </man>
2467: <man id="2">
2468: <name>ПИФ^taint[&]</name>
2469: </man>
2470: </people>
1.156 paf 2471: }]
1.15 paf 2472:
2473: @xml[]
2474: ^xdata[]
2475:
2476: ^show_xdoc2[$xdoc]<hr>
2477: #^show_xnode1[$xdoc]<hr>
2478: $people[^xdoc.select[*/man]]
2479: #^show1[]
2480: ^show_xnodes1[$people]<hr>
2481: #^people.0.owner.hren[]
2482:
2483: ^show_xnode1[^xdoc.selectSingle[*/man[2]/name];0;1]<hr>
2484:
2485: by id:
2486: ^show_xnode1[^xdoc.getElementById[1];0;1]
2487: <hr>
2488:
2489: @show1[array]
2490: ^for[i](0;^array._count[]-1){
2491: $x[$array.$i]
2492: $x.firstChild.nodeValue:
2493: $pattributes[$x.parentNode.attributes]
2494: ^if(^pattributes._count[]){
2495: $pattributes.id.name=$pattributes.id.nodeValue
2496: }
2497: <br>
2498: }
2499:
2500: @show_xnodes1[array][i]
2501: ^for[i](0;^array._count[]-1){
2502: ^show_xnode1[$array.$i;0;1]
2503: }
2504:
2505: @show_xnode1[x;level;single][l]
2506: ^if(def $x){
2507: ^for[l](0;$level-1){ ^; ^; ^; ^;}
2508: ^if($x.nodeType == $xnode:ELEMENT_NODE){
2509: <^;$x.nodeName
2510: $pairs[$x.attributes]
2511: ^if(def $pairs){
2512: $names[^pairs._keys[]]
2513: ^names.menu{ $names.key="$pairs.[$names.key].nodeValue"}
2514: }
2515: >^;
2516: }{
2517: [$x.nodeType]
2518: }
2519:
2520: ^if(def $x.nodeValue){$x.nodeValue}<br>
2521: ^show_xnode1[$x.firstChild]($level+1)
2522: ^if(!$single){
2523: ^show_xnode1[$x.nextSibling]($level)
2524: }
2525:
2526: ^if($x.nodeType == $xnode:ELEMENT_NODE){
2527: ^for[l](0;$level-1){ ^; ^; ^; ^;}<^;/$x.nodeName>^;<br>
2528: }
2529: }
2530:
2531: @show_xdoc2[xdoc]
2532: ^xdoc.save[out/save.xml;
2533: # $.encoding[utf-8]
2534: $.method[xml]
2535: ]
2536: $file[^xdoc.file[
2537: $.encoding[utf-8]
2538: $.method[html]
2539: ]]
2540: ^file.save[text;out/save_file.html]
2541: #$response:body[^xdoc.file[ $.media-type[text/paf] ]]
2542: <pre>^taint[html][^xdoc.string[
2543: $.method[html]
2544: # $.encoding[utF-8]
2545: # $.omit-xml-declaration[yes]
2546: # $.standalone[no]
2547: # -$.doctype-public[-//W3C//DTD XHTML]
2548: # -$.doctype-system[/a/b/c/]
2549: # $.indent[yes]
2550: # $.media-type[text/paf]
2551: ]]
2552: </pre>
E-mail: