Annotation of parser3/www/htdocs/index.html, revision 1.35
1.15 paf 1: #@USE
2: #z/t.p
3:
4: @autoz[]
5: $request:charset[windows-1251]
6: $response:charset[windows-1251]
7: $response:content-type[$.value[text/html]$.charset[$response:charset]]
8:
9: @main[]
1.35 ! paf 10: ^casehashtext[]
! 11: #^subjvaltest[]
! 12: #^tableselect0[]
1.34 paf 13: #^memnotest1[]
1.33 paf 14: #^transparams[]
1.32 paf 15: #^voidparams[]
1.31 paf 16: #^rolls2[]
1.30 paf 17: #^cacheexpireschanging[]
1.29 paf 18: #^cacheexpiresfixed[]
19: #^dateoffsets[]
20: #^exceptionTypes[]
1.28 paf 21: #^roll2[]
1.27 paf 22: #^rolls[]
1.25 paf 23: #^exceptions1[]
1.22 paf 24: #^locate_by_expr[]
1.18 paf 25: #^method_junction_params{...}
1.17 paf 26: #^verifyCookie[paf]
1.21 paf 27: #^execlangs[]
1.16 paf 28: #$t[^tobjeresult[]]$t.a
29: #^xmlprobs[]
1.15 paf 30: #^doubleprobs[]
31: #^math:random(-10)
32: #^divnamestop[]
33: #^arrayclone[]
34: #^operator_tricks[]
35: #^xoutputrusattr[]
36: #^xdocset1[]
37: #^regexp3[]
38: #^exec2[]
39: #^tlock[]
40: #^xmloutattrwithoutvalue[]
41: #^precisionProblem[]
42: #^xpath[]
43: #^ttablesetlang[]
44: #^mail3[]
45: #^ttime[]
46: #^tupper[]
47: #^treplace[]
48: #^xslt2[]
49: #^tcache2[]
50: #$ORIGINS(1)
51: #$t[^table::set{a b} ^table::set{c d}]
52: #^ttaintuntaint[]
53: #^tappend2[]
54: #^badvsnprintf[]
55: #^badoracequoting[]
56: #^badconstructors[]
57: #^xloadwrongtable[]
58: #^xsetwrongtable[]
59: #^if($form:test){y}{n}
60: #^tablecolumnerror[]
61: #^roll[]
62: #^cookie2[]
63: #^tableset[]
64: #^math:PI.format{%.30f}
65: #^xchildren[]
66: #^thashforeach3[]
67: #^thashforeach2[]
68: #^thashforeach[]
69: #^thashdelete[]
70: #^connect[mysql://user:pass@cd.rinet.ru/db]{^void:sql{z} }
71: #^tappend[]
72: #^sappend[]
73: #^eval(10\3)<br>
74: #^tform[]
75: #^formattest[]
76: #^filelist[]
77: #^connect[mysql://user:pass@host]{ }
78: #^безнадёжна_попытка_поправить_непоправимое[]
79: #^tcache[]
80: #^thashfileexp[]
81: #^tcounter[]
82: #^tablehash[]
83: #j^hashfile[]
84: #^formclass[]
85: #^hren[]
86: #^domedit[]
87: #^domxslt[]
88: #^lsplit2[]
89: #^faceesize[]
90: #^imageresize[]
91: #^ifassignhash[]
92: #^tintdefault[]
93: #$response:status[404]
94: #^ifpasshash[]
95: #^movedir[]
96: #^replace[]
97: #^set[]
98: #^hash[]<hr>
99: #$t[^methresult[]] ->$t
100: #^terror[]
101: #^ssave[]
102: #^calendar[]
103: #^thash[]
104: #^tdef[]
105: #^ford[]
106: #^tif[]
107: #^image[]
108: #^mail2[]
109: #^cookie[]
110: #^response[]
111: #^regexp2[]
112: #^ttablerem[]
113: #^pcre[]
114: #^regexp[]<hr>
115: #^mail[]
116: #^exec[]
117: #^fori[]
118: #^tconnect[]
119: #^xslt[]
120: #^xml[]
121: #^header[]
122: <hr>
123: OK
1.34 paf 124:
1.35 ! paf 125: @casehashtext[]
! 126: $tt[1]
! 127: $tmp[
! 128: ^switch[$tt]{
! 129: ^case[1]{
! 130: $.aaa[123]
! 131: }
! 132: ^case[DEFAULT]{
! 133: $.bbb[456]
! 134: }
! 135: }
! 136: ]
! 137:
! 138: $tmp.aaa
! 139:
! 140: @subjvaltest[]
! 141: $a12[val]
! 142: $b[12]
! 143: $a$b
! 144:
1.34 paf 145: @tableselect0[]
146: $person[^table::create{name height
147: paf 1.77
148: шохин 2.07
149: moko 1.77
150: }]
151: $nottoohigh[^person.select($person.height<2)]
152: ^nottoohigh.menu{$nottoohigh.name<br>}
1.32 paf 153:
154: @transparams[]
155: $idoc[^xdoc::create{<?xml version="1.0" ?><doc/>}]
156: $odoc[^idoc.transform[global.xsl;
157: $.param1['1']
158: $.param2['2']
159: ]]
160: <pre>^taint[^odoc.string[$.method[html]]]
161:
162: @memnotest1[]
163: ^for[i](0;4000){
164:
165: $xxxx[$i]
166: $xxxx
167:
168: }
169:
170: @memnotest1notes[]
171: одна итерация цикла:
172: [Mon Apr 8 20:12:02 2002] execution-------------------------|
1.35 ! paf 173: '469641+=28 wcodeframe -> 0 !optimize[3]''469669+=49 string от {} -> 0 optimize[3]'
1.32 paf 174: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
175: [Mon Apr 8 20:12:02 2002] "|| "
176: [Mon Apr 8 20:12:02 2002] 12:WITH_ROOT
177: [Mon Apr 8 20:12:02 2002] 13:VALUE
178: [Mon Apr 8 20:12:02 2002] "xxxx" string
1.35 ! paf 179: [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 180: [Mon Apr 8 20:12:02 2002] 16:WITH_READ
181: [Mon Apr 8 20:12:02 2002] 17:VALUE
182: [Mon Apr 8 20:12:02 2002] "i" string
183: [Mon Apr 8 20:12:02 2002] 18:GET_ELEMENT
1.35 ! paf 184: [Mon Apr 8 20:12:02 2002] 17:WRITE_VALUE'469452+=40 MAX_NUMBER -> !~2 actual digits''469492+=49 -> 41 !'
! 185: [Mon Apr 8 20:12:02 2002] 16:REDUCE_EWPOOL'469541+=24 VString -> 0 optimize[5]'
1.32 paf 186: [Mon Apr 8 20:12:02 2002] 15:CONSTRUCT_VALUE
187: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
188: [Mon Apr 8 20:12:02 2002] "| "
189: [Mon Apr 8 20:12:02 2002] 12:WITH_READ
190: [Mon Apr 8 20:12:02 2002] 13:VALUE
191: [Mon Apr 8 20:12:02 2002] "xxxx" string
192: [Mon Apr 8 20:12:02 2002] 14:GET_ELEMENT
193: [Mon Apr 8 20:12:02 2002] 13:WRITE_VALUE'469573+=41 string expand nothing for now'
194: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
1.35 ! paf 195: [Mon Apr 8 20:12:02 2002] "||"'469617+=24 VString -> 0 !optimize[6]'
1.32 paf 196: [Mon Apr 8 20:12:02 2002] <-ja returned
197: [Mon Apr 8 20:12:02 2002] ja->
198:
199: 201/328=0.612804878049 %%optimized
200:
201: 1.
202: CREATE_*POOL
203: сделать
204: *POOL_POOLED+CODE
205: где
206: wwrapper
207: и(возможно) wcodeframe
208: +string
209: стековая переменная
210:
211: 2.
212: избавиться от обёртки при возврате результата process [см. тело _for]
213:
214: 3.
215: сделать callback для process, чтобы вынести invariants из _for & co.
216:
217: 4.
218: @todo склеить get_element и write_value (при вставлении? write_value)
219:
220: 5.
221: reduce_*pool -> вариант получить именно string, без VString обёртки [часто
222: обёртка сразу выбрасывается = не нужна]
223:
224: 6.
225: process вариант получить именно string, без VString обёртки [часто обёртка
226: сразу выбрасывается = не нужна]
227:
228: 7.
229: string head, убить 8 байт неправильной link
1.31 paf 230:
231: @voidparams[]
232: ^voidparamsm[$form:field]
233:
234: @voidparamsm[p]
235: ^p.int(123)
1.29 paf 236:
1.30 paf 237: @rolls2[]
238: $now[^date::now[]]
239: $d[^date::create($now.year;$now.month)] ^d.sql-string[]<br>
240: ^for[i](1;12){
241: ^d.roll[month](-1) ^d.sql-string[]<br>
242: }
243:
1.29 paf 244: @cacheexpireschanging[]
245: ^cache[$DB_HOME/keyключ][^date::now(+1)]{ ^rem{1 day}
246: ^cache[^date::now(+4/24/60/60)]
247: # ^cache(2)
1.30 paf 248: # ^cache(0)
1.29 paf 249: ^math:random(100)
250: }
251:
252:
253:
254: @cacheexpiresfixed[]
255: ^cache[$DB_HOME/keyключ][^date::now(+2/24/60/60)]{
256: ^math:random(100)
257: }
258:
259: @dateoffsets[]
260: $d[^date::create(^date::now[]+1/24/60)]
261: #$d[^date::now(+1/24/60)]
262: ^d.sql-string[]
263: #$d
1.26 paf 264:
1.28 paf 265: @exceptionTypes[]
266: # parser.compile ^test[} компиляция (непарная скобка, ...)
267: # parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...)
268: # number.zerodivision ^eval(1/0) ^eval(1%0)
269: # number.format ^eval(abc*5)
270: # file.missing ^file:delete[delme] not found
271: # file.access ^table::load[.] no rights
272: # image.format ^image::measure[index.html] not gif/jpg
273: # sql.connect ^connect[mysql://baduser:pass@host/db]{} not found/timeout
274: # sql.execute ^connect[mysql://okuser:pass@host/db]{^void:sql{select bad}} syntax error
275: # xml ^xdoc::create{<forgot?>} any error in xml/xslt libs
276: # smtp.connect not found/timeout
277: # smtp.execute communication error
278:
1.26 paf 279: @roll2[]
280: $d[^date::create(2002;4;2;2;2;3)] ^d.sql-string[]<br>
1.27 paf 281: ^d.roll[day](+365*3+1) ^d.sql-string[]<br>
1.26 paf 282:
1.25 paf 283:
284: @rolls[]
285: $d[^date::create(2002;4;4)]
286: ^d.sql-string[]<br>
287: ^for[i](1;7){
288: ^d.roll[day](-1)
289: ^d.sql-string[]<br>
290: }
291: <hr>
292: $d[^date::create(2002;3;28)]
293: ^d.sql-string[]<br>
294: ^for[i](1;7){
295: ^d.roll[day](+1)
296: ^d.sql-string[]<br>
297: }
298: <hr>
299: $d[^date::create(2002;12;3)]
300: ^d.sql-string[]<br>
301: ^for[i](1;14){
302: ^d.roll[day](-1)
303: ^d.sql-string[]<br>
304: }
305: <hr>
306: $d[^date::create(2002;10;19)]
307: ^d.sql-string[]<br>
308: ^for[i](1;14){
309: ^d.roll[day](+1)
310: ^d.sql-string[]<br>
311: }
312:
313:
314:
315:
316:
1.22 paf 317:
318: @exceptions1[]
319: ^try{
320: aaa
1.24 paf 321: ^throw[custom1;paf;is stupid]
1.22 paf 322: }{
1.24 paf 323: ^if($exception.type eq custom1){
1.28 paf 324: # $exception.handled(1)
325: ^throw[$exception]
1.24 paf 326: type=$exception.type<br>
327: source=$exception.source<br>
328: file=$exception.file<br>
329: lineno=$exception.lineno<br>
330: comment=$exception.comment<br>
331: }
1.22 paf 332: }
1.21 paf 333:
334: @locate_by_expr[]
335: $t[^table::create{a b
336: 1 nok
337: 2 ok
338: 3 nok
339: }]
340: ^if(^t.locate($t.a==2)){$t.b}{n}
1.17 paf 341:
342: @method_junction_params[param]
343: ^if($param is junction){junction}{ne junction}
344:
345: @verifyCookie[value]
346: ^if($cookie:dummyvote eq $value){
347: $result(1)
348: }{
349: $cookie:dummyvote[$value]
350: $result(0)
351: }
1.16 paf 352:
353: @execlangs[]
1.20 paf 354: $f[^file::exec[test.pl]]
1.16 paf 355: ^process{$f.text}
356: #$c[^t.columns[]]
357: #^c.menu{
358: #* $c.column<br>
359: #}
360: =$t.c=
361:
362: @tobjeresult[]
363: ^table::create{a
364: 12}
1.15 paf 365:
366: @xmlprobs[]
367: $xmlDataType[^xdoc::load[program.xml]]
368: #<pre>^taint[^xmlDataType.string[]]
369: $xmlDataTypes[^xmlDataType.select[programs/program[@id=4]/data]]
370: #=^xmlDataTypes._count[]=
371: =^xmlDataTypes.0.getAttribute[type-id]=
372:
373: @doubleprobs[]
374: $1(^math:radians(180))
375: $2($math:PI)
376: ^if(^1.format[%.10f]==^2.format[%.10f]){y;n}
377: ^if($1==$2){y;n}
378: ^if(^math:radians(180)==$math:PI){y;n}
379:
380:
381: @divnamestop[]
382: $a(10)
383: ^eval($a\3)
384:
385: @arrayclone[]
386: $t[^table::create{a b
387: 1 11
388: 2 22
389: }]
390: $c[^table::create[$t]]
391: ^c.append{2 33}
392: ^t.count[]
393: ^c.count[]
394:
395: @operator_tricks[]
396: ^if(1){$a[^t[]]}
397: $a!
398: $a($b)
399: ^if(1){y}{n}
400: $MAIN:a(^t[] eq OK)
401: #$MAIN:a(1)
402: ^if($a){y}{n}
403: #^if(1){y}{n}
404: $form:if
405: $a[$.n[1]]
406: $a.if
407:
408: @xoutputrusattr[]
409: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d attr="привет"/>}]
410: ^show_xdoc2[$d]
411:
412: @xdocset1[]
413: $d[^xdoc::set{<?xml version="1.0"?><d>=^taint[&]=</d>}]
414: ^show_xdoc2[$d]
415:
416: @regexp3[]
417: $s[abcАБВ]
418: ^if(^s.match[][i]){y}{n}
419:
420:
421: @exec2[]
422: $a[^file::exec[bin/t.cmd]]
423: <pre>^taint[$a.text]</pre>|$a.status|$a.stderr<hr>
424:
425:
426: @tlock[]
427: ^file:lock[lockfile]{
428: code
429: }
430:
431: @xmloutattrwithoutvalue[]
432: #$ORIGINS(1)
433: $doc[^xdoc::set{<?xml version="1.0"?><doc background="">zz</doc>}]
434: $doc[^doc.transform[global.xsl]]
435: =^taint[html][^doc.string[$.method[html]]]=
436:
437:
438:
439: @precisionProblem[]
440: $a[123456789012345678901234567890]
441: $b(^a.double[])
442: ^b.format{%.20E}
443: <hr>
444: ^eval(2*2)
445:
446: @xpath[]
447: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
448: <document><block><p>привет</p></block></document>
449: }]
450: #^show_xdoc2[$xdoc]
451: $node[^xdoc.selectSingle[/document/block/p]]
452: ^if(def $node){
453: ^if($node is string){
454: $node
455: }{
456: ^if($node is hash){
457: ^node._count[]
458: }{
459: $node.nodeType
460: }
461: }
462: #$node.firstChild.nodeValue
463: }{
464: node not found
465: }
466:
467:
468: @ttablesetlang[]
469: $a-tab-b[a b
470: 1 2]
471:
472: $t[^table::set{$a-tab-b}]
473: =$t.a=
474: <hr>
475:
476: $t[^table::set[nameless]{^taint[$a-tab-b]}]
477: =$t.0=
478: <hr>
479:
480: $t[^table::set{^untaint{^taint[$a-tab-b]}}]
481: =$t.a=
482:
483: #^t.append{1 2}
484:
485: @mail3[]
486: ^mail:send[
487: $.from[Александр Петросян <paf@design.ru>]
488: $.to[Александр Петросян <paf@design.ru>]
489: $.subject[проверка4]
490: $.body[
491: $.text[
492: $.content-type[$.value[text/plain] $.charset[windows-1251]]
493: $.body[проверка]
494: ]
495: $.attachment[
496: $.value[^file::load[text;index.html]]
497: $.file-name[привет всем.html]
498: ]
499: ]
500: ]
501:
502:
503: @ttime[]
504: $now[^date::now[]]
505: $now.hour:$now.minute
506:
507: @tupper[]
508: $t[abcABCабвАБВ]
509: $t<br>
510: ^t.upper[]
511:
512: @treplace[]
513: $copy-paste-clean[^table::set{a b
514: . _
515: , _
516: + _
517: & _
518: ? _
519: = _}]
520:
521: $cache_key[^taint[в.а,с+я]&был?тут=недавно.cache]
522: # почему-то этот replace роняет апач в 500 ошибку :(
523: #^cache_key.replace[$copy-paste-clean]
524: $test[abc]
525: ^test.save[$cache_key]saved<br>
526: $cache[^file:list[.;\.cache^$]]
527: ^file:delete[$cache_key]deleted($cache.name)<br>
528:
529:
530:
531: @xslt2[]
532: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
533: <document><block><p>привет</p></block></document>
534: }]
535: ^show_xdoc2[$xdoc]
536: ^show_xdoc2[^xdoc.transform[templates/_document.xslt]]
537: <hr>
538:
539:
540: @tcache2[]
541: ^cache[$DB_HOME/keyключ](2){
542: ^math:random(100)
543: }
544:
545: @ttaintuntaint[]
546: <!-- некий панковский заголовок с буковкой C в круглых скобках -->^taint[html][
547:
548: ]zz
549: <hr>
550: ^untaint[html]{1^taint[ ]2 3}
551:
552:
553: @tappend2[]
554: $t[^table::set{a b}]^t.append{1 2}$t.a
555:
556: @badvsnprintf[]
557: ^connect[zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz]{
558: }
559:
560:
561: @badoracequoting[]
562: $SQL.connect-string[oracle://webspb:webpwd@mts?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]
563: ^connect[$SQL.connect-string]{
564: ^void:sql{delete from paf}
565: ^void:sql{insert into paf values (1, '$form:text')}
566: $paf[^table::sql{select * from paf}]
567: ^paf.menu{
568: $paf.id: ^untaint{$paf.block}<hr>
569:
570: }
571: <hr>
572:
573:
574: ^rem{
575: $news[^table::sql{select description from news}[$.limit(3)]]
576: ^news.menu{
577: ^untaint{$news.description}<hr>
578:
579: }
580: <hr>
581: }
582:
583: $tables[^table::sql{select table_name from user_tables}]
584: ^tables.menu{
585: $tables.table_name<br>
586: }
587:
588: }
589: <hr>
590: $env:PATH
591:
592: @badconstructors[]
593: $bred[^string::length[]]
594: $bred[^response::clear[]]
595: $bred[^int::int[]]
596:
597:
598: @xloadwrongtable[]
599: $constr[^xdoc::load[wrongtable.xml]]
600: ^show_xdoc2[$constr]
601:
602: @xsetwrongtable[]
603: $constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251z" ?>
604: <block-list>^untaint[as-is]{$constructor}</block-list>}]
605:
606:
607: @tablecolumnerror[]
608: $t[^table::set{a}]
609: $t.$a
610:
611: @roll[]
612: #$date[^date::set(1970;1;2)]
613: #^date.roll[month](-1)
614: $date[^date::set(2038;1;1)]
615: ^date.roll[month](+1)
616: $date.year $date.month $date.day
617:
618: @cookie2[]
619: #=$cookie:clientType[$.value[test]]=<br>
620: =$cookie:clientType=<br>
621:
622:
623: @tableset[]
624: $a[^table::set{a
625: 1
626: 2}]
627: ^eval(100\$a)
628:
629:
630:
631: @zzz[]
632:
633:
634: $constructor[
635: <block1 name="main_srvr" type="0" label="Основное тело" />
636: <block2 name="main_srvr2" type="0" label="Основное тело" />
637: ]
638:
639: $constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
640: <block-list>^untaint[as-is]{$constructor}</block-list>}]
641:
642: $children[$constr.documentElement.childNodes]
643: ^if($children){
644: ^for[i](1;^children._count[]){
645: $node[$children.$i]
646: $node.nodeName<br>
647: }
648: }
649:
650:
651: @thashforeach3[]
652: $h[
653: $.a[1]
654: $.b[2]
655: ]
656: $c[^table::set{a
657: ^h.foreach[key;value]{$value
658: }}]
659: $c.a
660:
661: @thashforeach2[]
662: $h[
663: $.a[1]
664: $.b[2]
665: ]
666: $c[
667: ^h.foreach[key;value]{
668: $.$key[$value]
669: }
670: ]
671: $c.b
672:
673: @thashforeach[]
674: $h[
675: $.a[1]
676: $.b[2]
677: ]
678: ^h.foreach[key;value]{
679: $key=$value<br>
680: }
681:
682: @thashdelete[]
683: $h[$.a[1] $.b[2]]
684: was:<br>
685: count=^h._count[] <br>
686: b='$h.b' <br>
687:
688: ^h.delete[b]
689:
690: now:<br>
691: count=^h._count[] <br>
692: b='$h.b'
693:
694: @sappend[]
695: $test[123]
696: ^test.save[test]
697: ^test.save[append;test]
698:
699: @tappend[]
700: $test[^table::set{a b
701: a1 b1}]
702: ^test.save[test]
703: $test[^table::set{a b
704: a2 b2}]
705: ^test.save[append;test]
706:
707:
708: @tform[]
709: ^if(def $form:new_file){y}{n}
710: <form method="post" enctype="multipart/form-data">
711: <input type="file" name="new_file" />
712: <input type=submit>
713: </input>
714:
715: @formattest[]
716: $size(15.124)
717:
718: ^size.format{%.2f}
719:
720: @filelist[]
721: $html[^file:list[.;\.html^$]]
722: ^html.menu{
723: $html.name<br>
724: }
725: <hr>
726:
727: @безнадёжна_попытка_поправить_непоправимое[]
728: $dom_from_disk[^xdoc::load[input.xml]]
729: $dom_created_in_air[^xdoc::create[doc]]
730: ^dom_created_in_air.documentElement.appendChild[^dom_from_disk.documentElement.cloneNode(1)]
731: ^show_xdoc2[$dom_created_in_air]
732:
733:
734: @tcache[]
735: #^hashfile:clear[cache]
736: $code[^hashfile::open[$DB_HOME;cache]]
737: ^code.cache[key](2){
738: ^math:random(100)
739: # ^code.delete[]
740: }
741:
742: @thashfileexp[]
743: $hf[^hashfile::open[$DB_HOME;hashfile]]
744: $hf.paf[$.value[крут] $.expires(3)]
745: paf=$hf.paf
746: <hr>
747: ^hf.foreach[key;value]{
748: $key=$value<br>
749: }
750: <hr>
751: $hash[^hf.hash[]]
752: =$hash.paf=
753: <hr>
754:
755: @tcounter[]
756: ^tcounterone[$DB_HOME]
757: other root:
758: ^tcounterone[${DB_HOME}2]
759: again, first:
760: ^tcounterone[$DB_HOME]
761:
762: @tcounterone[DB_HOME]
763: $counter[^hashfile::open[$DB_HOME;counter]]
764: #^counter.clear[]
765: ^counter.transaction{
766: # $counter.value(10)
767: $counter.value($counter.value+1)
768: # ^counter.delete[value]
769: $counter.value
770: }
771: <hr>
772: ^rem{
773: $hash[^counter.hash[]]
774: =$hash.value=
775: <hr>
776: }
777:
778: @tablehash[]
779: $productList[^table::set{id name
780: 1 носки
781: 2 валенки
782: 3 ушанка
783: }]
784:
785: #скажем, у первого дилера
786: $firstPriceList[^table::set{id price
787: 1 0.3
788: 3 1000
789: }]
790:
791: $firstPriceHash[^firstPriceList.hash[id]]
792:
793: ^productList.menu{
794: продукт "$productList.name" | цена у first: $firstPriceHash.[$productList.id].price<br>
795: }
796:
797:
798: @hashfile[]
799: $hf[^hashfile::assign[hashfile]]
800: #$hf.paf[крут5]
801: paf=$hf.paf
802:
803: @formclass[]
804: ^$form:CLASS.a=$form:CLASS.a
805:
806: @domdata[]
807: ^if(1){
808: # $a{^hren[]}
809: }
810: $a
811: $xdoc[^xdoc::create[doc]]
812: $doc[$xdoc.documentElement]
813: $name[^doc.appendChild[^xdoc.createElement[name]]]
814: $text[^name.appendChild[^xdoc.createTextNode[петросян&coz]]]
815: ^untaint[as-is]{=$text.nodeValue=}
816:
817: @domedit[]
818: ^domdata[]
819: #$paf.nodeName<br>
820: #$doc.documentElement.nodeName<br>
821:
822: ^show_xnode1[$xdoc.documentElement;0;1]
823: <hr>
824: ^show_xdoc2[$xdoc]
825: <hr>
826:
827: @domxslt[]
828: ^domdata[]
829: ^show_xdoc2[^xdoc.transform[global.xsl;$.param1[123/]]]
830: <hr>
831:
832: @lsplit2[]
833: $path[/optics/]
834: $pathTable[^path.lsplit[/]]
835: ^pathTable.menu{
836: ^if(def $pathTable.piece){
837: =$pathTable.piece=
838: }
839: }
840:
841:
842: @faceesize[]
843: $k(2)
844: $pict[^image::load[paf.gif]]
845: $small[^image::create($pict.width/$k;$pict.height/$k)]
846: ^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;250)
847: $response:body[^small.gif[]]
848:
849: @imageresize[]
850: $k(2)
851: $pict[^image::create(400*$k;200*$k)]
852: $pict.line-width(2)
853: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
854: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-20;$pict.height-20;0+20;360-20;0xff0000)
855: #^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
856: ^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-20;0x0000ff)
857: ^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+20;360-20;0xff0000)
858: $response:body[^pict.gif[]]
859:
860: #$small[^image::create($pict.width/$k;$pict.height/$k)]
861: #^small.copy[$pict](0;0;$pict.width;$pict.height;0;0)
862: #^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;0)
863:
864: #$response:body[^small.gif[]]
865:
866:
867: @tintdefault[]
868: #$abc[abc]
869: $abc[33]
870: ^abc.int[z]
871: #^abc.int(123)
872:
873: @ifassignhash[]
874: $h[^if(1){$.a(1);$.a(2)}]
875: $h.a
876:
877: @ifpasshash[]
878: $a[$.e[a]]
879: $b[$.e[b]]
880: ^ifpasshashdest[^if(1){$a;$b}]
881: #$x[^if(1){$a}{$b}]
882: #^ifpasshashdest[$x]
883:
884: @ifpasshashdest[p]
885: $p.e
886:
887: @movedir[]
888: ^file:move[a;deeper/a]
889:
890: @replace[]
891: $a[12^;3]
892: ^a.replace[^table::set{from to
893: 2^; !
894: }]
895:
896:
897: @set[]
898: ^setdata[]
899: ^a.add[$b]
900: add:$a.3<br>
901:
902: ^setdata[]
903: ^a.sub[$b]
904: sub2:$a.2<br>
905: sub1:$a.1<br>
906:
907: ^setdata[]
908: $c[^a.union[$b]]
909: union3:$c.3<br>
910: union2:$c.2<br>
911:
912: ^setdata[]
913: $c[^a.intersection[$b]]
914: intersection3:$c.3<br>
915: intersection2:$c.2<br>
916:
917: ^setdata[]
918: intersects:^if(^a.intersects[$b]){y;n}<br>
919: intersects2:^if(^a.intersects[ ]){y;n}<br>
920:
921:
922: <hr>
923:
924: @setdata[]
925: $a[$.1[a1] $.2[a2]]
926: $b[ $.2[b2] $.3[b3]]
927:
928:
929: @hash[]
930: $h[^hash::create[$._default[123]]]
931: $h.paf[not kretin]
932: $h.paf<br>
933: =$h.that=<br>
934:
935: @methresult[]
936: $result[^table::set{1}]
937:
938: @terror[]
939: ^error[method z must be called with z]
940:
941: @syntax1[]
942: #^a[^b]
943:
944: @syntax2[]
945: #^a[
946:
947: @ssave[]
948: $abc[abc]
949: ^abc.save[abc]
950:
951: @calendar[]
952: 2001;11:<br>
953: $week_days[^date:calendar[rus](2001;11)]
954: <pre>
955: ^week_days.menu{^for[wday](0;7){^if($week_days.$wday){$week_days.$wday; ^; ^;} }<br>}
956: </pre>
957:
958: @thash[]
959: $table[^table::set{id name age
960: 1 paf 278
961: 2 пиф 234
962: }]
963: $hash[^table.hash[id;^table::set[nameless]{id
964: name}]]
965: $hash.2.id $hash.2.name $hash.2.age
966:
967: @tdef[]
968: $s[0]
969: if 0=^if($s){}{n}<br>
970: if def 0=^if(def $s){y}{}<br>
971: <hr>
972:
973: @ford[]
974: ^for[i](0;5){$i}{($i)}
975:
976: @tif[]
977: ^if[def]{y;n}
978:
979: @image[]
980: $pict[^image::create(400;200)]
981: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
982: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-10;$pict.height-10;0+10;360-10;0xff0000)
983: #^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
984: ^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-10;0x0000ff)
985: ^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+10;360-10;0xff0000)
986: $response:body[^pict.gif[]]
987:
988:
989:
990: @mail2[]
991: ^mail:send[
992: $.content-type[$.value[text/plain] $.charset[windows-1251]]
993: $.from[Александр Петросян <paf@design.ru>]
994: $.to[Александр Петросян <paf@design.ru>]
995: $.subject[проверка]
996: $.body[проверка]
997: ]
998:
999: @cookie[]
1000: $env:HTTP_COOKIE<br>
1001:
1002: #$cookie:переменная[test тест ТЕСТ2]
1003: =$cookie:переменная=<br>
1004: #$cookie:переменная2[test тест ТЕСТ3]
1005: =$cookie:переменная2=<br>
1006: =$cookie:CLASS.переменная2=<br>
1007:
1008: @response[]
1009: #^if($form:reload){
1010: $response:refresh[$.value[0] $.url[./t.html?uri=$env:SERVER_NAME]]
1011: #}
1012:
1013: @xslt[]
1014: ^xdata[]
1015: $transformed[^xdoc.transform[global.xsl;$.param1[123/]]]
1016: ^show_xdoc2[$transformed]
1017:
1018: @regexp2[]
1019: $s[ select]
1020: $s[^s.match[^^\s*][]{!}]
1021: $s
1022:
1023: @header[]
1024: $response:refresh[
1025: $.value[0]
1026: $.url[http://design.ru?a=^taint[123]]
1027: ]
1028:
1029: @ttablerem[]
1030: $table[^table::load[a.cfg]]
1031: ^table.menu{$table.a}
1032:
1033: @tconnect[]
1034: ^connect[mysql://test:test@paf/test?charset=cp1251_koi8&compress=1&timeout=1&named_pipe=1]{
1035: $tables[^table::sql{show tables}]
1036: #$cols[^tables.columns[]]
1037: #$cols.column
1038: ^tables.menu{
1039: $tables.[Tables_in_test]<br>
1040: }
1041: }
1042:
1043: @pcre[]
1044: $s[1 2]
1045: ^s.match[\s;ig]{!}
1046: #^s.match[\d;ig]{!}
1047:
1048:
1049: @regexp[]
1050: $s[abcАБВ]
1051: ^if(^s.match[б][i]){y}{n}
1052:
1053: @mail[]
1054: #$ORIGINS(1)
1055: ^mail:send[
1056: $.from[paf@design.ru]
1057: $.to[paf@design.ru]
1058: $.body[1
1059:
1060: 2
1061:
1062:
1063: 3]
1064: ]
1065:
1066: @exec[]
1067: $a[^file::exec[fc.exe;;a;b]]
1068: $a.status|$a.stderr<hr>
1069:
1070: @fori[][i]
1071: ^for[i](1;3){... =$i= ...}
1072:
1073: @xdata0[]
1074: #$response:content-type[$.value[text/html] $.charset[windows-1251]]
1075: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
1076: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
1077: <people>
1078: <man id="1" имя="word слово">
1079: <name>P«^;AF B</name>
1080: </man>
1081: <man id="2">
1082: <name>ПИФ^taint[&]</name>
1083: </man>
1084: </people>
1085: }]
1086:
1087: @xdata[]
1088: #$response:content-type[$.value[text/html] $.charset[windows-1251]]
1089: $xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
1090: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
1091: <people>
1092: <man id="1" имя="word слово">
1093: <name>P«^;AF B</name>
1094: </man>
1095: <man id="2">
1096: <name>ПИФ^taint[&]</name>
1097: </man>
1098: </people>
1099: }}]
1100:
1101: @xml[]
1102: ^xdata[]
1103:
1104: ^show_xdoc2[$xdoc]<hr>
1105: #^show_xnode1[$xdoc]<hr>
1106: $people[^xdoc.select[*/man]]
1107: #^show1[]
1108: ^show_xnodes1[$people]<hr>
1109: #^people.0.owner.hren[]
1110:
1111: ^show_xnode1[^xdoc.selectSingle[*/man[2]/name];0;1]<hr>
1112:
1113: by id:
1114: ^show_xnode1[^xdoc.getElementById[1];0;1]
1115: <hr>
1116:
1117: @show1[array]
1118: ^for[i](0;^array._count[]-1){
1119: $x[$array.$i]
1120: $x.firstChild.nodeValue:
1121: $pattributes[$x.parentNode.attributes]
1122: ^if(^pattributes._count[]){
1123: $pattributes.id.name=$pattributes.id.nodeValue
1124: }
1125: <br>
1126: }
1127:
1128: @show_xnodes1[array][i]
1129: ^for[i](0;^array._count[]-1){
1130: ^show_xnode1[$array.$i;0;1]
1131: }
1132:
1133: @show_xnode1[x;level;single][l]
1134: ^if(def $x){
1135: ^for[l](0;$level-1){ ^; ^; ^; ^;}
1136: ^if($x.nodeType == $xnode:ELEMENT_NODE){
1137: <^;$x.nodeName
1138: $pairs[$x.attributes]
1139: ^if(def $pairs){
1140: $names[^pairs._keys[]]
1141: ^names.menu{ $names.key="$pairs.[$names.key].nodeValue"}
1142: }
1143: >^;
1144: }{
1145: [$x.nodeType]
1146: }
1147:
1148: ^if(def $x.nodeValue){$x.nodeValue}<br>
1149: ^show_xnode1[$x.firstChild]($level+1)
1150: ^if(!$single){
1151: ^show_xnode1[$x.nextSibling]($level)
1152: }
1153:
1154: ^if($x.nodeType == $xnode:ELEMENT_NODE){
1155: ^for[l](0;$level-1){ ^; ^; ^; ^;}<^;/$x.nodeName>^;<br>
1156: }
1157: }
1158:
1159: @show_xdoc2[xdoc]
1160: ^xdoc.save[out/save.xml;
1161: # $.encoding[utf-8]
1162: $.method[xml]
1163: ]
1164: $file[^xdoc.file[
1165: $.encoding[utf-8]
1166: $.method[html]
1167: ]]
1168: ^file.save[text;out/save_file.html]
1169: #$response:body[^xdoc.file[ $.media-type[text/paf] ]]
1170: <pre>^taint[html][^xdoc.string[
1171: $.method[html]
1172: # $.encoding[utF-8]
1173: # $.omit-xml-declaration[yes]
1174: # $.standalone[no]
1175: # -$.doctype-public[-//W3C//DTD XHTML]
1176: # -$.doctype-system[/a/b/c/]
1177: # $.indent[yes]
1178: # $.media-type[text/paf]
1179: ]]
1180: </pre>
E-mail: