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