Annotation of parser3/www/htdocs/index.html, revision 1.105
1.104 paf 1: @USE
1.105 ! paf 2: /derived.p
1.15 paf 3:
1.72 paf 4: @auto[filespec]
5: $selffilespec[$filespec]
1.63 paf 6: #$form:here
1.84 paf 7: #$request:charset[UTF-8]
8: #$response:charset[windows-1251]
9: #$response:content-type[$.value[text/html]$.charset[$response:charset]]
1.15 paf 10:
1.60 paf 11: #@postprocess[body]
12: #<b>$body</b>
13: #$result[123]
1.37 paf 14:
1.15 paf 15: @main[]
1.72 paf 16: #$a(123)
17: #^a.format[%.10u]
1.71 paf 18: #$result[111]
1.70 paf 19: #^f[a]
1.97 paf 20: #^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
1.88 paf 21: # ^int:sql{select news_id from news where news_id=-1}[
22: ## $.default{2}
23: # ]<br>
24: # ^string:sql{select news_id from news where news_id=-1}[$.default{2}]
1.95 paf 25: # ^file::load[text;^string:sql{select '^^hello[]' }]
26: # ^string:sql{select '^^hello[]' }] $ORIGINS(1)
1.96 paf 27: # ^process{ ^^h[]}
1.97 paf 28: # ^process{^string:sql{select '1
29: # ^^hello[]' }] }
30: #}
1.49 paf 31: #^eval(2)
1.48 paf 32: #^tcrashlocaljunctionsv2[]
1.49 paf 33: #^tcrashlocaljunctions[]
1.50 paf 34: #^tjunctions[]
1.47 paf 35: #^replacetest[]
1.48 paf 36: #^matchoptionpp[]
1.46 paf 37: #^txdocxnodechild[]
1.44 paf 38: #^tclasses[]
1.43 paf 39: #$math:PI
40: #^b:method[]
1.42 paf 41: #^main[]
1.41 paf 42: #^errort[]
1.44 paf 43: #^tselectNumber[]
1.39 paf 44: #$result[hello]
1.36 paf 45: #^invaliddate2[]
46: #^process2[]
47: #^casehashtext[]
1.35 paf 48: #^subjvaltest[]
49: #^tableselect0[]
1.34 paf 50: #^memnotest1[]
1.32 paf 51: #^voidparams[]
1.31 paf 52: #^rolls2[]
1.30 paf 53: #^cacheexpireschanging[]
1.29 paf 54: #^cacheexpiresfixed[]
55: #^dateoffsets[]
56: #^exceptionTypes[]
1.28 paf 57: #^roll2[]
1.27 paf 58: #^rolls[]
1.25 paf 59: #^exceptions1[]
1.22 paf 60: #^locate_by_expr[]
1.18 paf 61: #^method_junction_params{...}
1.17 paf 62: #^verifyCookie[paf]
1.37 paf 63: #^execlangs[]
1.16 paf 64: #$t[^tobjeresult[]]$t.a
65: #^xmlprobs[]
1.15 paf 66: #^doubleprobs[]
67: #^math:random(-10)
68: #^divnamestop[]
69: #^arrayclone[]
70: #^operator_tricks[]
71: #^xoutputrusattr[]
72: #^xdocset1[]
73: #^regexp3[]
74: #^exec2[]
75: #^tlock[]
76: #^xmloutattrwithoutvalue[]
77: #^precisionProblem[]
78: #^xpath[]
79: #^ttablesetlang[]
80: #^ttime[]
81: #^tupper[]
82: #^treplace[]
83: #^xslt2[]
84: #^tcache2[]
85: #$ORIGINS(1)
86: #$t[^table::set{a b} ^table::set{c d}]
87: #^ttaintuntaint[]
88: #^tappend2[]
89: #^badvsnprintf[]
90: #^badoracequoting[]
91: #^badconstructors[]
92: #^xloadwrongtable[]
93: #^xsetwrongtable[]
94: #^if($form:test){y}{n}
95: #^tablecolumnerror[]
96: #^roll[]
97: #^cookie2[]
98: #^tableset[]
99: #^math:PI.format{%.30f}
100: #^xchildren[]
101: #^thashforeach3[]
102: #^thashforeach2[]
103: #^thashforeach[]
104: #^thashdelete[]
105: #^connect[mysql://user:pass@cd.rinet.ru/db]{^void:sql{z} }
106: #^tappend[]
107: #^sappend[]
108: #^eval(10\3)<br>
109: #^tform[]
110: #^formattest[]
111: #^filelist[]
112: #^connect[mysql://user:pass@host]{ }
113: #^безнадёжна_попытка_поправить_непоправимое[]
114: #^tcache[]
115: #^thashfileexp[]
116: #^tcounter[]
117: #^tablehash[]
118: #j^hashfile[]
119: #^formclass[]
120: #^hren[]
121: #^domedit[]
122: #^domxslt[]
123: #^lsplit2[]
124: #^faceesize[]
125: #^imageresize[]
126: #^ifassignhash[]
127: #^tintdefault[]
128: #$response:status[404]
129: #^ifpasshash[]
130: #^movedir[]
131: #^replace[]
132: #^set[]
133: #^hash[]<hr>
134: #$t[^methresult[]] ->$t
135: #^terror[]
136: #^ssave[]
137: #^thash[]
138: #^tdef[]
139: #^ford[]
140: #^tif[]
1.84 paf 141: #^image[]
1.15 paf 142: #^mail2[]
143: #^cookie[]
144: #^response[]
145: #^regexp2[]
146: #^ttablerem[]
147: #^pcre[]
148: #^regexp[]<hr>
149: #^mail[]
150: #^exec[]
151: #^fori[]
152: #^tconnect[]
153: #^xslt[]
154: #^xml[]
155: #^header[]
1.53 paf 156: #^tablehasht[]
1.54 paf 157: #^datecreatestring[]
1.56 paf 158: #^mssqltypes1[]
159: #^badthrows[]
1.57 paf 160: #^xmlspace[]
161: #^counter[main.counter]
162: #^xpath2[]
163: #^callindirect[]
164: #^junctionprob[]
1.59 paf 165: #^datecreatestring2[]
166: #^tstoredproc[]
167: #^tstoredproc2[]
168: #^forkeys[]
1.60 paf 169: #^pngsize[]
1.61 paf 170: #^checkList[]
1.63 paf 171: #^datetest[]
1.65 paf 172: #^tserge[]
1.69 paf 173: #^envt[]
1.67 paf 174: #^selectt[]
175: #^select2[]
176: #^selectSingle2[]
177: #^selectString2[]
178: #^selectNumber2[]
179: #^selectBool2[]
180: #^xdoccreate[]
181: #^xdoccreatetag[]
1.70 paf 182: #^xdocload[]
1.67 paf 183: #^xdocstring[]
184: #^xdocsave[]
1.68 paf 185: #^div[]
186: #^datecreatestring3[]
1.73 paf 187: #^tfilespec[]
1.77 paf 188: #^tcrypt[]
1.74 paf 189: #^cryptdocsample[]
1.78 paf 190: #^tnormalize[]
1.83 paf 191: #^xmltransformbyxdoc[]
1.81 paf 192: #^sergestrandef[]
1.83 paf 193: #^tstdin[]
194: #^tfind[]
1.86 paf 195: #^mimet[]
1.88 paf 196: #^cgit[]
1.92 paf 197: #^joinlimit[]
1.89 paf 198: #^tableclonelimit[]
1.91 paf 199: #^transparams[]
200: #^sendtests[]
1.93 paf 201: #^wwrapperpass[]
1.95 paf 202: #^badpos[]
1.98 paf 203: #^processtest[]
204: #^mail3[]
1.99 paf 205: #^mail4[]
1.100 paf 206: #^datesaving[]
1.101 paf 207: #^badconstructor[]
1.103 paf 208: #^calendar[]
1.104 paf 209: #^monthdays(8)
210: #^xdoctypetest[]
1.105 ! paf 211: #^xtabletest[]
! 212: ^staticstest[]
1.77 paf 213: <hr>
1.74 paf 214: OK
1.104 paf 215:
1.105 ! paf 216: @staticstest[]
! 217: $derived[^derived::create[]]
! 218: ^derived.test[]
! 219:
1.104 paf 220: @xdoctypetest[]
221: $xdoc[^xdoc::create[x]]
222: ^if($xdoc is xdoc){y}{n}
223:
224: @xtabletest[]
225: $xtableo[^xtable::create[]]
226: ^if($xtableo is table){y}{n}
1.105 ! paf 227: #^xtableo.columns[]
1.100 paf 228:
1.103 paf 229: @monthdays[month]
230: $from[^date::create(2000;$month;1)]
231: $to[^date::create($from)] ^to.roll[month](+1)
232: $result($to-$from)
233:
1.100 paf 234: @badconstructor[]
235: ^date::now[]
1.99 paf 236:
237: @datesaving[]
238: $now[^date::now[]]
239: $now.daylightsaving<br>
240: $now.yearday<br>
241: #
242: $date[^date::create(2002;1;3)]
243: $date.daylightsaving<br>
244: $date.yearday
1.97 paf 245:
1.98 paf 246: @mail4[]
247: ^mail:send[
248: $.from[paf@mail.design.ru]
249: $.to[paf@mail.design.ru]
250: $.subject[^taint[uri][москва]=2]
251: $.text[^taint[uri][москва]=]
252: $.html{<a href=http://there.ru/?city=^taint[uri][Москва]>link</a>}
253: ]
1.97 paf 254: @processtest[]
255: $f[^file::load[text;piece.p]] ^process{$f.text}
256: $ORIGINS(1)
1.93 paf 257:
258:
259: @badpos[]
260: $s[123]
1.94 paf 261: ^s.mid(0;2)
1.92 paf 262:
263: @wwrapperpass[]
264: $h[^hash::create[]]
265: $h.a(1)
266: ^my_method[^if(1){$h}]
267: работает. так и должно быть?
268:
269: @my_method[p]
270: ^p._count[]
271:
1.88 paf 272:
273: @tableclonelimit[]
274: $source[^table::create{a
275: aa
276: bb
277: cc}]
278: ^source.offset(1)
279: #$dest[^table::create[$source]]
280: $dest[^table::create[$source;$.offset(2)]]
281: $dest[^table::create[$source;$.limit(2)]]
282: $dest[^table::create[$source;$.offset(1)$.limit(1)]]
283: $dest[^table::create[$source;$.offset(1)$.limit(2)]]
284: $dest[^table::create[$source;$.offset[cur]$.limit(2)]]
285:
286: ^dest.menu{$dest.a}[,]<br>
287:
288: @joinlimit[]
289: $source[^table::create{a
290: aa
291: bb
292: cc}]
293: ^source.offset(2)
294: $dest[^table::create{a
295: xx
296: }]
297: #^dest.join[$source]
298: #^dest.join[$source;$.offset(2)]
299: #^dest.join[$source;$.limit(2)]
300: #^dest.join[$source;$.offset(1)$.limit(1)]
301: #^dest.join[$source;$.offset(1)$.limit(2)]
1.91 paf 302: #^dest.join[$source;$.offset[cur]$.limit(1)]
303: ^dest.join[$source;$.limit(0)]
1.88 paf 304:
305: ^dest.menu{$dest.a}[,]<br>
1.86 paf 306:
307: @cgit[]
308: $f[^file::cgi[showenv.cmd]]
309: $f.HELLO=<br>
310: $f.CONTENT-TYPE=<br>
311: $f.content-type=<br>
312:
1.83 paf 313:
1.84 paf 314: @mimet[]
1.85 paf 315: $f[^file::stat[a.GIF]]
316: $f.content-type
1.84 paf 317:
318:
1.83 paf 319: @tfind[]
320: ^file:find[index.html]
321:
322: @tstdin[]
323: $f[^file::exec[test.pl;$.stdin[проверка stdin потока]]]
324: <pre>$f.text</pre>
1.80 paf 325:
326: @sergestrandef[]
327: $sQuantity[ ]
328: ^sQuantity.int(10)
1.78 paf 329:
330: @xmltransformbyxdoc[]
331: $xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
332: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
333: <people>
334: <man id="1" имя="word слово">
335: <name>1 2</name>
336: </man>
337: </people>
338: }}]
339: $sheet[^xdoc::create{<?xml version="1.0"?>
1.79 paf 340: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
341:
342: >
1.78 paf 343: <!--<xsl:output doctype-public ="-//W3C//DTD XHTML" indent="yes"/>-->
344:
1.79 paf 345: <!--<xsl:import href="http://localhost/html.xsl"/>-->
346: <xsl:import href="html.xsl"/>
347:
1.78 paf 348: <xsl:param name="param1">defparam1</xsl:param>
349: <xsl:param name="param2">defparam2</xsl:param>
1.79 paf 350:
1.78 paf 351:
352: <xsl:template match="doc">
353: param1=<xsl:value-of select="^$param1"/><br/>
354: param2=<xsl:value-of select="^$param2"/><br/>
355:
356: test return <something background=""/>
357: </xsl:template>
358:
359: <xsl:template name="test">
1.81 paf 360: test return3
1.78 paf 361: </xsl:template>
362:
363: <xsl:template match="people">
364: <html>
365: <head>z</head>
366: para1=<xsl:copy-of select="^$param1"/>
367: <xsl:apply-templates/>
368: <hr/>
369: <xsl:call-template name="test"/>
370: </html>
371: </xsl:template>
372:
373: <xsl:template match="name">
374: <b><xsl:value-of select="."/></b>
375: </xsl:template>
376: </xsl:stylesheet>
377: }]
378:
379:
380: $xdoc[^xdoc.transform[$sheet]]
381: $string[^xdoc.string[$.method[html]]]
382: ^string.save[a]
383: ^untaint[html]{$string}
384:
385:
1.77 paf 386:
387: @tnormalize[]
388: #s состоит из 1000 фрагментов
389: $s[^for[i](0;999){фрагмент }]
390: #это займет много ресурсов
391: ^s.match[фраг][g]{перга}
392: #это займет меньше ресурсов
393: #$normalized[^s.normalize[]]
394: #^normalized.match[фраг][g]{перга}
1.74 paf 395:
396: @sendtests[]
1.89 paf 397: ^text[]
1.74 paf 398: #^html[]
399: #^text-n-html[]
400: #^file[]
401: #^text-n-file[]
1.89 paf 402: #^text-n-html-n-file[]
1.74 paf 403: #^backwardcomp[]
404:
405: @backwardcomp[]
406: ^mail:send[
407: $.from[paf]
408: $.to[paf]
409: $.body[this is text value]
410: ]
411:
412: @text[]
413: ^mail:send[
414: $.from[paf]
1.90 paf 415: $.to[paf]
1.74 paf 416: $.text[
417: $.value[this is text value]
418: ]
419: ]
420:
421: @html[]
422: ^mail:send[
423: $.from[paf]
424: $.to[paf]
425: $.html{this is <b>html</b> value ^taint[<] 10}
426: ]
427:
428: @text-n-html[]
429: ^mail:send[
430: $.from[paf]
431: $.to[paf]
432: $.text[
433: $.value[this is text value]
434: ]
435: $.html[
436: $.value{this is <b>html</b> value ^taint[<] 10}
437: ]
438: ]
439:
440: @file[]
441: ^mail:send[
442: $.from[paf]
443: $.to[paf]
444: $.file[^file::load[binary;image.jpg]]
445: ]
446:
447: @text-n-file[]
448: ^mail:send[
449: $.from[paf]
450: $.to[paf]
451: $.text[
452: $.value[this is text value]
453: ]
454: $.file[^file::load[binary;image.jpg]]
455: ]
456:
457: @text-n-html-n-file[]
458: ^mail:send[
459: $.from[paf]
460: $.to[paf]
461: $.text[
462: $.value[this is text value]
463: ]
464: $.html[
465: $.COntent-type[$.value[text/html]$.charset[windows-1251xx]]
466: $.value{this is <b>html</b> value ^taint[<] 10}
467: ]
468: $.file[^file::load[binary;image.jpg]]
469: ]
470:
471:
472:
473: @md5salt[]
474: 1234
475:
476: @cryptdocsample[]
477: $users[^table::create{name password
478: alice ***
479: bob ***
480: }]
481:
482: $htpasswd[^table::create[nameless]{}]
483: ^users.menu{
484: ^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$^md5salt[]]}
485: }
486:
487: ^htpasswd.save[nameless;.htpasswd-parser-test]
488:
1.73 paf 489:
490: @tcrypt[]
1.76 paf 491: #^math:crypt[123;^$apr1^$1234567890abcdef]<br>
492: ^math:crypt[123;^$apr1^$]<br>
1.72 paf 493:
494: @tfilespec[]
495: src=$selffilespec<br>
496: dirname=^file:dirname[$selffilespec]<br>
497: basename=^file:basename[$selffilespec]<br>
498: justname=^file:justname[$selffilespec]<br>
499: justext=^file:justext[$selffilespec]<br>
1.68 paf 500:
501: @datecreatestring3[]
502: $new_after[^date::now(-3)]
503: $articles[^table::create{id title last_update
504: 1 привет 2002-07-03}]
505: ^articles.menu{
506: $last_update[^date::create[$articles.last_update]]
507: <a href=${articles.id}.html>$articles.title</a>
508: ^if($last_update > $new_after){новая}
509: <br>
510: }
1.67 paf 511:
512: @div[]
513: $var(5)
514: ^var.inc(7)
515: ^var.dec(3)
516: ^var.div(4)
517: ^var.mul(2)
518: $var
519:
520:
521: @xdocsave[]
522: $document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
523: <document>
524: строка1<br/>
525: строка2<br/>
526: </document>}]
527: ^document.save[test.xml]
528:
529: @xdocstring[]
530: $document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
531: <document>
532: строка1<br/>
533: строка2<br/>
534: </document>}]
535: ^document.string[
536: $.method[html]
537: ]
538:
539:
540: @xdocload[]
541: $document[^xdoc::load[article.xml]]
542: $response:body[^document.file[$.media-type[text/xml]]]
543:
544:
545: @xdoccreatetag[]
546: $document[^xdoc::create[document]]
547: $paraNode[^document.createElement[para]]
548: $dummy[^document.documentElement.appendChild[$paraNode]]
549: $response:body[^document.file[$.media-type[text/xml]]]
550:
551:
552: @xdoccreate[]
553: $document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
554: <document>
555: текст
556: </document>}]
557: $response:body[^document.file[$.media-type[text/xml]]]
558:
559: @selectBool2[]
560: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
561: <t attr="привет" n="123"/>}]
562: ^if(^d.selectBool[/t/@n > 10]){
563: /t/@n больше 10
564: }{
565: не больше
566: }
567:
568:
569: @selectNumber2[]
570: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
571: <t attr="привет" n="123"/>}]
572: ^d.selectNumber[number(/t/@n)+1]<br>
573: ^d.selectNumber[2*2]<br>
574:
575:
576: @selectString2[]
577: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
578: <t attr="привет" n="123"/>}]
579: # результат=привет
580: ^d.selectString[string(t/@attr)]
581:
582:
583: @selectSingle2[]
584: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
585: <t attr="привет" n="123"/>}]
586: # результат=один элемент "t"
587: $element[^d.selectSingle[t]]
588: # результат=2 (количество атрибутов <t>)
589: Количество атрибутов: ^element.attributes._count[]<br>
590: # результат=не существует (нет <x>)
591: ^if(^d.select[x]){
592: x существует
593: }{
594: x не существует
595: }
596:
597: @select2[]
598: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><t attr="привет" n="123"/>}]
599: # результат: список из одного элемента "t"
600: $list[^d.select[t]]
601: # результат: 2 = количество атрибутов <t>
602: ^list.0.attributes._count[]<br>
603: ^for[i](0;$list-1){
604: $attr[$list.$i]
605: $attr.nodeName = $attr.nodeType<br>
606: }
607:
608:
609: @selectt[]
610: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><t attr="привет" n="123"/>}]
611: $list[^d.select[t]]
612: ^list.0.attributes._count[]
1.65 paf 613:
614: @envt[]
1.66 paf 615: $f[^file::exec[showenv.cmd;
616: $.bad[value]
617: $.CGI_good[value]
618: ]]
1.65 paf 619: $f.status<br>
620: $f.stderr<br>
621: <pre>$f.text</pre>
622:
1.63 paf 623:
624: @tserge[]
1.64 paf 625: ^if(" 09 "){y}
1.61 paf 626:
627: @datetest[]
628: $f[^file::stat[some.zip]]
629: Размер в байтах: $f.size<br>
630: Год создания: $f.cdate.year<br>
631: $now[^date::now[]]
632: $DAYS_CONSIDERED_NEW(3)
633: Статус: ^if($f.mdate >= $now-$DAYS_CONSIDERED_NEW){новый;старый}
634:
1.60 paf 635:
636: @checkList[]
637: ...^oneOf[a;a,b,c]...<br>
638: #...^oneOf[a;ax,b,c]...<br>
639: ...^oneWord[word]...<br>
640: #...^oneWord[wo rd]...<br>
641:
642:
643: @oneOf[s;list][t] выдаёт строку, если строка она есть в списке(разделенном запятыми)
644: $t[^list.lsplit[,]]
645: ^if(!^t.locate[piece;$s]){^throw[user;$s;unknown]}
646: $result[$s]
647:
648: @oneWord[s]
649: ^if(^s.match[\W]){^throw[user.data;$s;not word]}{$s}
1.59 paf 650:
651: @pngsize[]
652: $i[^image::measure[test.png]]
653: ^i.html[]
654:
655:
656: @forkeys[]
657: $text[^form:fields.foreach[key;val]{$key=$val
658: }]
659: ^text.save[ttt.txt]
660: =$text=
661:
662:
663: @tstoredproc2[]
664: ^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
665: ^void:sql{exec pafvoid}
666: }
667:
668: @tstoredproc[]
669: ^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
670: $t[^table::sql{exec pafproc}]
671: # $t[^table::sql{{call pafproc}}]
672: $c[^t.columns[]]
673: ^c.menu{$c.column}[<br>]
674: }
1.57 paf 675:
676: @datecreatestring2[]
1.58 paf 677: <table border=1>
678: ^datecreatestring2show[2000]
679: ^datecreatestring2show[2000-02]
1.59 paf 680: ^datecreatestring2show[2000-2-03]
1.58 paf 681: ^datecreatestring2show[2000-02-03 15]
682: ^datecreatestring2show[2000-02-03 15:30]
683: ^datecreatestring2show[2000-02-03 15:30:04]
684: ^datecreatestring2show[2000-02-03 15:30:04 hren]
685: ^datecreatestring2show[15:30]
686: ^datecreatestring2show[15:30:05]
687: ^datecreatestring2show[15:30:05 hren]
688: </table>
689:
690: @datecreatestring2show[s]
691: $date[^date::create[$s]]
692: <tr>
693: <td>$s</td><td align=right>^date.sql-string[]</td>
694: </tr>
695:
1.57 paf 696:
697: @junctionprob[][l]
698: $l[123]
699: $a{$l}
700: ^junctionprobnested[$a]
701: @junctionprobnested[p]
702: $p
703:
704:
705: @callindirecttarget[]
706: callindirecttarget called
707: @callindirect[]
708: $f[$callindirecttarget]
709: ^f[]
710:
711: @xpath2[]
712: $xdoc[^xdoc::create{<?xml version="1.0" encoding="windows-1251"?>
713: <doc>
714: <field-list>
715: <field name="aa"/>
716: <field name="bb"/>
717: </field-list>
718: </doc>
719: }]
720:
721: #^xdoc.string[]
722:
723: $fieldList[^xdoc.selectSingle[/doc/field-list]]
724: #^fieldList.childNodes._count[]
725: $fields[^fieldList.select[field]]
726: #^fields._count[]
727: ^fields.foreach[k;node]{
728: $node.nodeName<br>
729: }
730: @counter[filespec][f;s]
731: ^file:lock[$filespec]{
732: $f[^file::load[text;$filespec]]
733: $s[^eval($f.text+1)]
734: ^s.save[$filespec]
735: }
736: $s
1.56 paf 737:
738: @xmlspace[]
739: $xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
740: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
741: <people>
742: <man id="1" имя="word слово">
743: <name>1 2</name>
744: </man>
745: </people>
746: }}]
747: $xdoc[^xdoc.transform[global.xsl]]
748: $string[^xdoc.string[$.method[html]]]
749: ^string.save[a]
750: ^untaint[html]{$string}
751:
752: @badthrows[]
753: #^throw[a;b;]
754: ^throw[a;]
1.54 paf 755:
756: @mssqltypes1[]
757: ^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
1.55 paf 758: # ^string:sql{select { ts '1998-05-02 01:23:56.123' }}
759: # ^string:sql{select CAST({ ts '1998-05-02 01:23:56.123' }AS smalldatetime)}
760: # ^string:sql{select CAST({ts '2002-04-28 00:00:00.000'} AS smalldatetime)}
761: $t[^table::sql{select a from paf}]
762: ^t.count[]
1.54 paf 763: }
1.51 paf 764:
1.53 paf 765: @datecreatestring[]
1.54 paf 766: $d[^date::create[2002-04-33 01:03:04]]
1.53 paf 767: ^d.sql-string[]
1.52 paf 768:
769: @method[hash]
770: $hash.key
771: @mainZ[]
772: ^method[
773: $.key{code}
774: ]
775:
1.51 paf 776: @tablehasht[]
777: $t[^table::create{p
778: 1
779: 3
780: 2
781: 4}]
782:
783: $h[^t.hash[p]]
784:
785: =^h._count[]=
786:
787:
788: @sqldefaults[]
789: ^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
790: ^int:sql{select news_id from news where news_id=-1}[$.default{2}]<br>
791: ^string:sql{select news_id from news where news_id=-1}[$.default{2}]
792: }
1.60 paf 793: =======
794: <hr>
795: OK
796: >>>>>>> 1.50
1.48 paf 797:
798: @tcrashlocaljunctionsv2[]
799: $a[
800: $b{ $c[1] }
801: ]
802: $b
803: $c
804:
805: @tcrashlocaljunctions[]
806: $var[aaa]
807: ^if(1){
808: ^tcrashlocaljunctions1[]
809: }
810:
811: $j
812:
1.49 paf 813: @tcrashlocaljunctions1[][var]
814: $var[varvalue]
1.48 paf 815: $j{
816: $var
817: }
1.49 paf 818: $j
1.48 paf 819:
820: @tjunctions[][tl]
821: $t[^t::create[]]
822: ^tjunctionsi[]
823:
824: @tjunctionsi[][tl]
825: $tl[12345]
826: ^t.tjunctionsm[
827: $.key{
828: $tl
829: }
830: ]
1.46 paf 831:
1.47 paf 832: @replacetest[]
833: $b[b]
834: $s[
835: aaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
836: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
837: ]
838: ^s.replace[^table::create{from to
839: ba !_}]
840:
841:
1.46 paf 842: @matchoptionpp[]
1.47 paf 843: #$ORIGINS(1)
1.46 paf 844: $s[
845: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1.47 paf 846: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
847: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
848: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
849: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
850: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
851: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
852: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
853: aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
854: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1.46 paf 855: ]
856: ^s.match[b;g']{($match.prematch|$match.match|$match.postmatch)}
857:
1.44 paf 858:
859: @txdocxnodechild[]
860: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?><d/>}]
861: $xdoc.nodeName
862: ^xdoc.selectNumber[2*2]
1.45 paf 863: $xdoc:ELEMENT_NODE
1.44 paf 864:
865:
866: @tclasses[]
867: $t[^t::create[]]
868: ^t.method[]
869: <hr>
870: ^t.base_method[]
871:
1.40 paf 872:
873: @errort[]
1.42 paf 874: ^xdoc::create[a]
1.40 paf 875: #^throw[user;here;this]
876:
877: @tselectNumber[]
878: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d attr="привет" n="123"/>}]
879: ^d.selectString[string(d/@attr)]<br>
880: ^d.selectNumber[2*2]<br>
881: ^d.selectNumber[number(/d/@n)+1]<br>
882:
1.34 paf 883:
1.36 paf 884: @invaliddate2[]
885: $d[^date::create(1018946575/60/60)] ^d.sql-string[]
886:
887: @process2[]
888: ^^process{
889: ^process{
890: ^$a[^^if(0){^$.k[y]}{^$.k[^^hren[]n]}] ^$a.k
891: }
892: }
893:
1.35 paf 894: @casehashtext[]
895: $tt[1]
896: $tmp[
897: ^switch[$tt]{
898: ^case[1]{
899: $.aaa[123]
900: }
901: ^case[DEFAULT]{
902: $.bbb[456]
903: }
904: }
1.36 paf 905: shit!
1.35 paf 906: ]
1.36 paf 907: #$tmp
1.35 paf 908: $tmp.aaa
909:
910: @subjvaltest[]
911: $a12[val]
912: $b[12]
913: $a$b
914:
1.34 paf 915: @tableselect0[]
916: $person[^table::create{name height
917: paf 1.77
918: шохин 2.07
919: moko 1.77
920: }]
921: $nottoohigh[^person.select($person.height<2)]
922: ^nottoohigh.menu{$nottoohigh.name<br>}
1.32 paf 923:
924: @transparams[]
925: $idoc[^xdoc::create{<?xml version="1.0" ?><doc/>}]
926: $odoc[^idoc.transform[global.xsl;
927: $.param1['1']
928: $.param2['2']
929: ]]
930: <pre>^taint[^odoc.string[$.method[html]]]
931:
932: @memnotest1[]
933: ^for[i](0;4000){
934:
935: $xxxx[$i]
936: $xxxx
937:
938: }
939:
940: @memnotest1notes[]
941: одна итерация цикла:
942: [Mon Apr 8 20:12:02 2002] execution-------------------------|
1.35 paf 943: '469641+=28 wcodeframe -> 0 !optimize[3]''469669+=49 string от {} -> 0 optimize[3]'
1.32 paf 944: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
945: [Mon Apr 8 20:12:02 2002] "|| "
946: [Mon Apr 8 20:12:02 2002] 12:WITH_ROOT
947: [Mon Apr 8 20:12:02 2002] 13:VALUE
948: [Mon Apr 8 20:12:02 2002] "xxxx" string
1.35 paf 949: [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 950: [Mon Apr 8 20:12:02 2002] 16:WITH_READ
951: [Mon Apr 8 20:12:02 2002] 17:VALUE
952: [Mon Apr 8 20:12:02 2002] "i" string
953: [Mon Apr 8 20:12:02 2002] 18:GET_ELEMENT
1.35 paf 954: [Mon Apr 8 20:12:02 2002] 17:WRITE_VALUE'469452+=40 MAX_NUMBER -> !~2 actual digits''469492+=49 -> 41 !'
955: [Mon Apr 8 20:12:02 2002] 16:REDUCE_EWPOOL'469541+=24 VString -> 0 optimize[5]'
1.32 paf 956: [Mon Apr 8 20:12:02 2002] 15:CONSTRUCT_VALUE
957: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
958: [Mon Apr 8 20:12:02 2002] "| "
959: [Mon Apr 8 20:12:02 2002] 12:WITH_READ
960: [Mon Apr 8 20:12:02 2002] 13:VALUE
961: [Mon Apr 8 20:12:02 2002] "xxxx" string
962: [Mon Apr 8 20:12:02 2002] 14:GET_ELEMENT
963: [Mon Apr 8 20:12:02 2002] 13:WRITE_VALUE'469573+=41 string expand nothing for now'
964: [Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
1.35 paf 965: [Mon Apr 8 20:12:02 2002] "||"'469617+=24 VString -> 0 !optimize[6]'
1.32 paf 966: [Mon Apr 8 20:12:02 2002] <-ja returned
967: [Mon Apr 8 20:12:02 2002] ja->
968:
969: 201/328=0.612804878049 %%optimized
970:
971: 1.
972: CREATE_*POOL
973: сделать
974: *POOL_POOLED+CODE
975: где
976: wwrapper
977: и(возможно) wcodeframe
978: +string
979: стековая переменная
980:
981: 2.
982: избавиться от обёртки при возврате результата process [см. тело _for]
983:
984: 3.
985: сделать callback для process, чтобы вынести invariants из _for & co.
986:
987: 4.
988: @todo склеить get_element и write_value (при вставлении? write_value)
989:
990: 5.
991: reduce_*pool -> вариант получить именно string, без VString обёртки [часто
992: обёртка сразу выбрасывается = не нужна]
993:
994: 6.
995: process вариант получить именно string, без VString обёртки [часто обёртка
996: сразу выбрасывается = не нужна]
997:
998: 7.
999: string head, убить 8 байт неправильной link
1.31 paf 1000:
1001: @voidparams[]
1002: ^voidparamsm[$form:field]
1003:
1004: @voidparamsm[p]
1005: ^p.int(123)
1.29 paf 1006:
1.30 paf 1007: @rolls2[]
1008: $now[^date::now[]]
1009: $d[^date::create($now.year;$now.month)] ^d.sql-string[]<br>
1010: ^for[i](1;12){
1011: ^d.roll[month](-1) ^d.sql-string[]<br>
1012: }
1013:
1.29 paf 1014: @cacheexpireschanging[]
1015: ^cache[$DB_HOME/keyключ][^date::now(+1)]{ ^rem{1 day}
1016: ^cache[^date::now(+4/24/60/60)]
1017: # ^cache(2)
1.30 paf 1018: # ^cache(0)
1.29 paf 1019: ^math:random(100)
1020: }
1021:
1022:
1023:
1024: @cacheexpiresfixed[]
1025: ^cache[$DB_HOME/keyключ][^date::now(+2/24/60/60)]{
1026: ^math:random(100)
1027: }
1028:
1029: @dateoffsets[]
1030: $d[^date::create(^date::now[]+1/24/60)]
1031: #$d[^date::now(+1/24/60)]
1032: ^d.sql-string[]
1033: #$d
1.26 paf 1034:
1.28 paf 1035: @exceptionTypes[]
1036: # parser.compile ^test[} компиляция (непарная скобка, ...)
1037: # parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...)
1038: # number.zerodivision ^eval(1/0) ^eval(1%0)
1039: # number.format ^eval(abc*5)
1040: # file.missing ^file:delete[delme] not found
1041: # file.access ^table::load[.] no rights
1042: # image.format ^image::measure[index.html] not gif/jpg
1043: # sql.connect ^connect[mysql://baduser:pass@host/db]{} not found/timeout
1044: # sql.execute ^connect[mysql://okuser:pass@host/db]{^void:sql{select bad}} syntax error
1045: # xml ^xdoc::create{<forgot?>} any error in xml/xslt libs
1046: # smtp.connect not found/timeout
1047: # smtp.execute communication error
1048:
1.26 paf 1049: @roll2[]
1050: $d[^date::create(2002;4;2;2;2;3)] ^d.sql-string[]<br>
1.27 paf 1051: ^d.roll[day](+365*3+1) ^d.sql-string[]<br>
1.26 paf 1052:
1.25 paf 1053:
1054: @rolls[]
1055: $d[^date::create(2002;4;4)]
1056: ^d.sql-string[]<br>
1057: ^for[i](1;7){
1058: ^d.roll[day](-1)
1059: ^d.sql-string[]<br>
1060: }
1061: <hr>
1062: $d[^date::create(2002;3;28)]
1063: ^d.sql-string[]<br>
1064: ^for[i](1;7){
1065: ^d.roll[day](+1)
1066: ^d.sql-string[]<br>
1067: }
1068: <hr>
1069: $d[^date::create(2002;12;3)]
1070: ^d.sql-string[]<br>
1071: ^for[i](1;14){
1072: ^d.roll[day](-1)
1073: ^d.sql-string[]<br>
1074: }
1075: <hr>
1076: $d[^date::create(2002;10;19)]
1077: ^d.sql-string[]<br>
1078: ^for[i](1;14){
1079: ^d.roll[day](+1)
1080: ^d.sql-string[]<br>
1081: }
1082:
1083:
1084:
1085:
1086:
1.22 paf 1087:
1088: @exceptions1[]
1089: ^try{
1090: aaa
1.24 paf 1091: ^throw[custom1;paf;is stupid]
1.22 paf 1092: }{
1.24 paf 1093: ^if($exception.type eq custom1){
1.28 paf 1094: # $exception.handled(1)
1095: ^throw[$exception]
1.24 paf 1096: type=$exception.type<br>
1097: source=$exception.source<br>
1098: file=$exception.file<br>
1099: lineno=$exception.lineno<br>
1100: comment=$exception.comment<br>
1101: }
1.22 paf 1102: }
1.21 paf 1103:
1104: @locate_by_expr[]
1105: $t[^table::create{a b
1106: 1 nok
1107: 2 ok
1108: 3 nok
1109: }]
1110: ^if(^t.locate($t.a==2)){$t.b}{n}
1.17 paf 1111:
1112: @method_junction_params[param]
1113: ^if($param is junction){junction}{ne junction}
1114:
1115: @verifyCookie[value]
1116: ^if($cookie:dummyvote eq $value){
1117: $result(1)
1118: }{
1119: $cookie:dummyvote[$value]
1120: $result(0)
1121: }
1.16 paf 1122:
1123: @execlangs[]
1.20 paf 1124: $f[^file::exec[test.pl]]
1.36 paf 1125: err:$f.stderr<br>
1.16 paf 1126: ^process{$f.text}
1127: #$c[^t.columns[]]
1128: #^c.menu{
1129: #* $c.column<br>
1130: #}
1.36 paf 1131: c:$t.c<br>
1.16 paf 1132:
1133: @tobjeresult[]
1134: ^table::create{a
1135: 12}
1.15 paf 1136:
1137: @xmlprobs[]
1138: $xmlDataType[^xdoc::load[program.xml]]
1139: #<pre>^taint[^xmlDataType.string[]]
1140: $xmlDataTypes[^xmlDataType.select[programs/program[@id=4]/data]]
1141: #=^xmlDataTypes._count[]=
1142: =^xmlDataTypes.0.getAttribute[type-id]=
1143:
1144: @doubleprobs[]
1145: $1(^math:radians(180))
1146: $2($math:PI)
1147: ^if(^1.format[%.10f]==^2.format[%.10f]){y;n}
1148: ^if($1==$2){y;n}
1149: ^if(^math:radians(180)==$math:PI){y;n}
1150:
1151:
1152: @divnamestop[]
1153: $a(10)
1154: ^eval($a\3)
1155:
1156: @arrayclone[]
1157: $t[^table::create{a b
1158: 1 11
1159: 2 22
1160: }]
1161: $c[^table::create[$t]]
1162: ^c.append{2 33}
1163: ^t.count[]
1164: ^c.count[]
1165:
1166: @operator_tricks[]
1167: ^if(1){$a[^t[]]}
1168: $a!
1169: $a($b)
1170: ^if(1){y}{n}
1171: $MAIN:a(^t[] eq OK)
1172: #$MAIN:a(1)
1173: ^if($a){y}{n}
1174: #^if(1){y}{n}
1175: $form:if
1176: $a[$.n[1]]
1177: $a.if
1178:
1179: @xoutputrusattr[]
1180: $d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d attr="привет"/>}]
1181: ^show_xdoc2[$d]
1182:
1183: @xdocset1[]
1184: $d[^xdoc::set{<?xml version="1.0"?><d>=^taint[&]=</d>}]
1185: ^show_xdoc2[$d]
1186:
1187: @regexp3[]
1188: $s[abcАБВ]
1189: ^if(^s.match[][i]){y}{n}
1190:
1191:
1192: @exec2[]
1193: $a[^file::exec[bin/t.cmd]]
1194: <pre>^taint[$a.text]</pre>|$a.status|$a.stderr<hr>
1195:
1196:
1197: @tlock[]
1198: ^file:lock[lockfile]{
1199: code
1200: }
1201:
1202: @xmloutattrwithoutvalue[]
1203: #$ORIGINS(1)
1204: $doc[^xdoc::set{<?xml version="1.0"?><doc background="">zz</doc>}]
1205: $doc[^doc.transform[global.xsl]]
1206: =^taint[html][^doc.string[$.method[html]]]=
1207:
1208:
1209:
1210: @precisionProblem[]
1211: $a[123456789012345678901234567890]
1212: $b(^a.double[])
1213: ^b.format{%.20E}
1214: <hr>
1215: ^eval(2*2)
1216:
1217: @xpath[]
1218: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
1219: <document><block><p>привет</p></block></document>
1220: }]
1221: #^show_xdoc2[$xdoc]
1222: $node[^xdoc.selectSingle[/document/block/p]]
1223: ^if(def $node){
1224: ^if($node is string){
1225: $node
1226: }{
1227: ^if($node is hash){
1228: ^node._count[]
1229: }{
1230: $node.nodeType
1231: }
1232: }
1233: #$node.firstChild.nodeValue
1234: }{
1235: node not found
1236: }
1237:
1238:
1239: @ttablesetlang[]
1240: $a-tab-b[a b
1241: 1 2]
1242:
1243: $t[^table::set{$a-tab-b}]
1244: =$t.a=
1245: <hr>
1246:
1247: $t[^table::set[nameless]{^taint[$a-tab-b]}]
1248: =$t.0=
1249: <hr>
1250:
1251: $t[^table::set{^untaint{^taint[$a-tab-b]}}]
1252: =$t.a=
1253:
1254: #^t.append{1 2}
1255:
1256: @mail3[]
1257: ^mail:send[
1.98 paf 1258: $.from[Александр Петросян <paf@mail.design.ru>]
1259: $.to[Александр Петросян <paf@mail.design.ru>]
1260: $.subject[проверка2]
1.15 paf 1261: $.body[
1262: $.text[
1263: $.content-type[$.value[text/plain] $.charset[windows-1251]]
1.98 paf 1264: $.body[проверка^taint[uri][москва]=]
1.15 paf 1265: ]
1266: $.attachment[
1267: $.value[^file::load[text;index.html]]
1268: $.file-name[привет всем.html]
1269: ]
1270: ]
1271: ]
1272:
1273:
1274: @ttime[]
1275: $now[^date::now[]]
1276: $now.hour:$now.minute
1277:
1278: @tupper[]
1279: $t[abcABCабвАБВ]
1280: $t<br>
1281: ^t.upper[]
1282:
1283: @treplace[]
1284: $copy-paste-clean[^table::set{a b
1285: . _
1286: , _
1287: + _
1288: & _
1289: ? _
1290: = _}]
1291:
1292: $cache_key[^taint[в.а,с+я]&был?тут=недавно.cache]
1293: # почему-то этот replace роняет апач в 500 ошибку :(
1294: #^cache_key.replace[$copy-paste-clean]
1295: $test[abc]
1296: ^test.save[$cache_key]saved<br>
1297: $cache[^file:list[.;\.cache^$]]
1298: ^file:delete[$cache_key]deleted($cache.name)<br>
1299:
1300:
1301:
1302: @xslt2[]
1303: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
1304: <document><block><p>привет</p></block></document>
1305: }]
1306: ^show_xdoc2[$xdoc]
1307: ^show_xdoc2[^xdoc.transform[templates/_document.xslt]]
1308: <hr>
1309:
1310:
1311: @tcache2[]
1312: ^cache[$DB_HOME/keyключ](2){
1313: ^math:random(100)
1314: }
1315:
1316: @ttaintuntaint[]
1317: <!-- некий панковский заголовок с буковкой C в круглых скобках -->^taint[html][
1318:
1319: ]zz
1320: <hr>
1321: ^untaint[html]{1^taint[ ]2 3}
1322:
1323:
1324: @tappend2[]
1325: $t[^table::set{a b}]^t.append{1 2}$t.a
1326:
1327: @badvsnprintf[]
1328: ^connect[zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz]{
1329: }
1330:
1331:
1332: @badoracequoting[]
1333: $SQL.connect-string[oracle://webspb:webpwd@mts?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]
1334: ^connect[$SQL.connect-string]{
1335: ^void:sql{delete from paf}
1336: ^void:sql{insert into paf values (1, '$form:text')}
1337: $paf[^table::sql{select * from paf}]
1338: ^paf.menu{
1339: $paf.id: ^untaint{$paf.block}<hr>
1340:
1341: }
1342: <hr>
1343:
1344:
1345: ^rem{
1346: $news[^table::sql{select description from news}[$.limit(3)]]
1347: ^news.menu{
1348: ^untaint{$news.description}<hr>
1349:
1350: }
1351: <hr>
1352: }
1353:
1354: $tables[^table::sql{select table_name from user_tables}]
1355: ^tables.menu{
1356: $tables.table_name<br>
1357: }
1358:
1359: }
1360: <hr>
1361: $env:PATH
1362:
1363: @badconstructors[]
1364: $bred[^string::length[]]
1365: $bred[^response::clear[]]
1366: $bred[^int::int[]]
1367:
1368:
1369: @xloadwrongtable[]
1370: $constr[^xdoc::load[wrongtable.xml]]
1371: ^show_xdoc2[$constr]
1372:
1373: @xsetwrongtable[]
1374: $constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251z" ?>
1375: <block-list>^untaint[as-is]{$constructor}</block-list>}]
1376:
1377:
1378: @tablecolumnerror[]
1379: $t[^table::set{a}]
1380: $t.$a
1381:
1382: @roll[]
1383: #$date[^date::set(1970;1;2)]
1384: #^date.roll[month](-1)
1385: $date[^date::set(2038;1;1)]
1386: ^date.roll[month](+1)
1387: $date.year $date.month $date.day
1388:
1389: @cookie2[]
1390: #=$cookie:clientType[$.value[test]]=<br>
1391: =$cookie:clientType=<br>
1392:
1393:
1394: @tableset[]
1395: $a[^table::set{a
1396: 1
1397: 2}]
1398: ^eval(100\$a)
1399:
1400:
1401:
1402: @zzz[]
1403:
1404:
1405: $constructor[
1406: <block1 name="main_srvr" type="0" label="Основное тело" />
1407: <block2 name="main_srvr2" type="0" label="Основное тело" />
1408: ]
1409:
1410: $constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
1411: <block-list>^untaint[as-is]{$constructor}</block-list>}]
1412:
1413: $children[$constr.documentElement.childNodes]
1414: ^if($children){
1415: ^for[i](1;^children._count[]){
1416: $node[$children.$i]
1417: $node.nodeName<br>
1418: }
1419: }
1420:
1421:
1422: @thashforeach3[]
1423: $h[
1424: $.a[1]
1425: $.b[2]
1426: ]
1427: $c[^table::set{a
1428: ^h.foreach[key;value]{$value
1429: }}]
1430: $c.a
1431:
1432: @thashforeach2[]
1433: $h[
1434: $.a[1]
1435: $.b[2]
1436: ]
1437: $c[
1438: ^h.foreach[key;value]{
1439: $.$key[$value]
1440: }
1441: ]
1442: $c.b
1443:
1444: @thashforeach[]
1445: $h[
1446: $.a[1]
1447: $.b[2]
1448: ]
1449: ^h.foreach[key;value]{
1450: $key=$value<br>
1451: }
1452:
1453: @thashdelete[]
1454: $h[$.a[1] $.b[2]]
1455: was:<br>
1456: count=^h._count[] <br>
1457: b='$h.b' <br>
1458:
1459: ^h.delete[b]
1460:
1461: now:<br>
1462: count=^h._count[] <br>
1463: b='$h.b'
1464:
1465: @sappend[]
1466: $test[123]
1467: ^test.save[test]
1468: ^test.save[append;test]
1469:
1470: @tappend[]
1471: $test[^table::set{a b
1472: a1 b1}]
1473: ^test.save[test]
1474: $test[^table::set{a b
1475: a2 b2}]
1476: ^test.save[append;test]
1477:
1478:
1479: @tform[]
1480: ^if(def $form:new_file){y}{n}
1481: <form method="post" enctype="multipart/form-data">
1482: <input type="file" name="new_file" />
1483: <input type=submit>
1484: </input>
1485:
1486: @formattest[]
1487: $size(15.124)
1488:
1489: ^size.format{%.2f}
1490:
1491: @filelist[]
1492: $html[^file:list[.;\.html^$]]
1493: ^html.menu{
1494: $html.name<br>
1495: }
1496: <hr>
1497:
1498: @безнадёжна_попытка_поправить_непоправимое[]
1499: $dom_from_disk[^xdoc::load[input.xml]]
1500: $dom_created_in_air[^xdoc::create[doc]]
1501: ^dom_created_in_air.documentElement.appendChild[^dom_from_disk.documentElement.cloneNode(1)]
1502: ^show_xdoc2[$dom_created_in_air]
1503:
1504:
1505: @tcache[]
1506: #^hashfile:clear[cache]
1507: $code[^hashfile::open[$DB_HOME;cache]]
1508: ^code.cache[key](2){
1509: ^math:random(100)
1510: # ^code.delete[]
1511: }
1512:
1513: @thashfileexp[]
1514: $hf[^hashfile::open[$DB_HOME;hashfile]]
1515: $hf.paf[$.value[крут] $.expires(3)]
1516: paf=$hf.paf
1517: <hr>
1518: ^hf.foreach[key;value]{
1519: $key=$value<br>
1520: }
1521: <hr>
1522: $hash[^hf.hash[]]
1523: =$hash.paf=
1524: <hr>
1525:
1526: @tcounter[]
1527: ^tcounterone[$DB_HOME]
1528: other root:
1529: ^tcounterone[${DB_HOME}2]
1530: again, first:
1531: ^tcounterone[$DB_HOME]
1532:
1533: @tcounterone[DB_HOME]
1534: $counter[^hashfile::open[$DB_HOME;counter]]
1535: #^counter.clear[]
1536: ^counter.transaction{
1537: # $counter.value(10)
1538: $counter.value($counter.value+1)
1539: # ^counter.delete[value]
1540: $counter.value
1541: }
1542: <hr>
1543: ^rem{
1544: $hash[^counter.hash[]]
1545: =$hash.value=
1546: <hr>
1547: }
1548:
1549: @tablehash[]
1550: $productList[^table::set{id name
1551: 1 носки
1552: 2 валенки
1553: 3 ушанка
1554: }]
1555:
1556: #скажем, у первого дилера
1557: $firstPriceList[^table::set{id price
1558: 1 0.3
1559: 3 1000
1560: }]
1561:
1562: $firstPriceHash[^firstPriceList.hash[id]]
1563:
1564: ^productList.menu{
1565: продукт "$productList.name" | цена у first: $firstPriceHash.[$productList.id].price<br>
1566: }
1567:
1568:
1569: @hashfile[]
1570: $hf[^hashfile::assign[hashfile]]
1571: #$hf.paf[крут5]
1572: paf=$hf.paf
1573:
1574: @formclass[]
1575: ^$form:CLASS.a=$form:CLASS.a
1576:
1577: @domdata[]
1578: ^if(1){
1579: # $a{^hren[]}
1580: }
1581: $a
1582: $xdoc[^xdoc::create[doc]]
1583: $doc[$xdoc.documentElement]
1584: $name[^doc.appendChild[^xdoc.createElement[name]]]
1585: $text[^name.appendChild[^xdoc.createTextNode[петросян&coz]]]
1586: ^untaint[as-is]{=$text.nodeValue=}
1587:
1588: @domedit[]
1589: ^domdata[]
1590: #$paf.nodeName<br>
1591: #$doc.documentElement.nodeName<br>
1592:
1593: ^show_xnode1[$xdoc.documentElement;0;1]
1594: <hr>
1595: ^show_xdoc2[$xdoc]
1596: <hr>
1597:
1598: @domxslt[]
1599: ^domdata[]
1600: ^show_xdoc2[^xdoc.transform[global.xsl;$.param1[123/]]]
1601: <hr>
1602:
1603: @lsplit2[]
1604: $path[/optics/]
1605: $pathTable[^path.lsplit[/]]
1606: ^pathTable.menu{
1607: ^if(def $pathTable.piece){
1608: =$pathTable.piece=
1609: }
1610: }
1611:
1612:
1613: @faceesize[]
1614: $k(2)
1615: $pict[^image::load[paf.gif]]
1616: $small[^image::create($pict.width/$k;$pict.height/$k)]
1617: ^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;250)
1618: $response:body[^small.gif[]]
1619:
1620: @imageresize[]
1621: $k(2)
1622: $pict[^image::create(400*$k;200*$k)]
1623: $pict.line-width(2)
1624: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
1625: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-20;$pict.height-20;0+20;360-20;0xff0000)
1626: #^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
1627: ^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-20;0x0000ff)
1628: ^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+20;360-20;0xff0000)
1629: $response:body[^pict.gif[]]
1630:
1631: #$small[^image::create($pict.width/$k;$pict.height/$k)]
1632: #^small.copy[$pict](0;0;$pict.width;$pict.height;0;0)
1633: #^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;0)
1634:
1635: #$response:body[^small.gif[]]
1636:
1637:
1638: @tintdefault[]
1639: #$abc[abc]
1640: $abc[33]
1641: ^abc.int[z]
1642: #^abc.int(123)
1643:
1644: @ifassignhash[]
1645: $h[^if(1){$.a(1);$.a(2)}]
1646: $h.a
1647:
1648: @ifpasshash[]
1649: $a[$.e[a]]
1650: $b[$.e[b]]
1651: ^ifpasshashdest[^if(1){$a;$b}]
1652: #$x[^if(1){$a}{$b}]
1653: #^ifpasshashdest[$x]
1654:
1655: @ifpasshashdest[p]
1656: $p.e
1657:
1658: @movedir[]
1659: ^file:move[a;deeper/a]
1660:
1661: @replace[]
1662: $a[12^;3]
1663: ^a.replace[^table::set{from to
1664: 2^; !
1665: }]
1666:
1667:
1668: @set[]
1669: ^setdata[]
1670: ^a.add[$b]
1671: add:$a.3<br>
1672:
1673: ^setdata[]
1674: ^a.sub[$b]
1675: sub2:$a.2<br>
1676: sub1:$a.1<br>
1677:
1678: ^setdata[]
1679: $c[^a.union[$b]]
1680: union3:$c.3<br>
1681: union2:$c.2<br>
1682:
1683: ^setdata[]
1684: $c[^a.intersection[$b]]
1685: intersection3:$c.3<br>
1686: intersection2:$c.2<br>
1687:
1688: ^setdata[]
1689: intersects:^if(^a.intersects[$b]){y;n}<br>
1690: intersects2:^if(^a.intersects[ ]){y;n}<br>
1691:
1692:
1693: <hr>
1694:
1695: @setdata[]
1696: $a[$.1[a1] $.2[a2]]
1697: $b[ $.2[b2] $.3[b3]]
1698:
1699:
1700: @hash[]
1701: $h[^hash::create[$._default[123]]]
1702: $h.paf[not kretin]
1703: $h.paf<br>
1704: =$h.that=<br>
1705:
1706: @methresult[]
1707: $result[^table::set{1}]
1708:
1709: @terror[]
1710: ^error[method z must be called with z]
1711:
1712: @syntax1[]
1713: #^a[^b]
1714:
1715: @syntax2[]
1716: #^a[
1717:
1718: @ssave[]
1719: $abc[abc]
1720: ^abc.save[abc]
1721:
1722: @calendar[]
1.103 paf 1723: $year(2002)
1724: $month(12)
1.84 paf 1725: ${year}-${month}:<br>
1726: $week_days[^date:calendar[rus]($year;$month)]
1.15 paf 1727: <pre>
1.101 paf 1728: ^week_days.menu{^for[wday](0;6){^if($week_days.$wday){$week_days.$wday; ^; ^;} }=$week_days.week,$week_days.year=<br>}
1.15 paf 1729: </pre>
1730:
1731: @thash[]
1732: $table[^table::set{id name age
1733: 1 paf 278
1734: 2 пиф 234
1735: }]
1736: $hash[^table.hash[id;^table::set[nameless]{id
1737: name}]]
1738: $hash.2.id $hash.2.name $hash.2.age
1739:
1740: @tdef[]
1741: $s[0]
1742: if 0=^if($s){}{n}<br>
1743: if def 0=^if(def $s){y}{}<br>
1744: <hr>
1745:
1746: @ford[]
1747: ^for[i](0;5){$i}{($i)}
1748:
1749: @tif[]
1750: ^if[def]{y;n}
1751:
1752: @image[]
1753: $pict[^image::create(400;200)]
1754: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
1755: ^pict.arc($pict.width/2;$pict.height/2;$pict.width-10;$pict.height-10;0+10;360-10;0xff0000)
1756: #^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
1757: ^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-10;0x0000ff)
1758: ^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+10;360-10;0xff0000)
1759: $response:body[^pict.gif[]]
1760:
1761:
1762:
1763: @mail2[]
1764: ^mail:send[
1765: $.content-type[$.value[text/plain] $.charset[windows-1251]]
1766: $.from[Александр Петросян <paf@design.ru>]
1767: $.to[Александр Петросян <paf@design.ru>]
1768: $.subject[проверка]
1769: $.body[проверка]
1770: ]
1771:
1772: @cookie[]
1773: $env:HTTP_COOKIE<br>
1774:
1775: #$cookie:переменная[test тест ТЕСТ2]
1776: =$cookie:переменная=<br>
1777: #$cookie:переменная2[test тест ТЕСТ3]
1778: =$cookie:переменная2=<br>
1779: =$cookie:CLASS.переменная2=<br>
1780:
1781: @response[]
1782: #^if($form:reload){
1783: $response:refresh[$.value[0] $.url[./t.html?uri=$env:SERVER_NAME]]
1784: #}
1785:
1786: @xslt[]
1787: ^xdata[]
1788: $transformed[^xdoc.transform[global.xsl;$.param1[123/]]]
1789: ^show_xdoc2[$transformed]
1790:
1791: @regexp2[]
1792: $s[ select]
1793: $s[^s.match[^^\s*][]{!}]
1794: $s
1795:
1796: @header[]
1797: $response:refresh[
1798: $.value[0]
1799: $.url[http://design.ru?a=^taint[123]]
1800: ]
1801:
1802: @ttablerem[]
1803: $table[^table::load[a.cfg]]
1804: ^table.menu{$table.a}
1805:
1806: @tconnect[]
1807: ^connect[mysql://test:test@paf/test?charset=cp1251_koi8&compress=1&timeout=1&named_pipe=1]{
1808: $tables[^table::sql{show tables}]
1809: #$cols[^tables.columns[]]
1810: #$cols.column
1811: ^tables.menu{
1812: $tables.[Tables_in_test]<br>
1813: }
1814: }
1815:
1816: @pcre[]
1817: $s[1 2]
1818: ^s.match[\s;ig]{!}
1819: #^s.match[\d;ig]{!}
1820:
1821:
1822: @regexp[]
1823: $s[abcАБВ]
1824: ^if(^s.match[б][i]){y}{n}
1825:
1826: @mail[]
1827: #$ORIGINS(1)
1828: ^mail:send[
1829: $.from[paf@design.ru]
1830: $.to[paf@design.ru]
1831: $.body[1
1832:
1833: 2
1834:
1835:
1836: 3]
1837: ]
1838:
1839: @exec[]
1840: $a[^file::exec[fc.exe;;a;b]]
1841: $a.status|$a.stderr<hr>
1842:
1843: @fori[][i]
1844: ^for[i](1;3){... =$i= ...}
1845:
1846: @xdata0[]
1847: #$response:content-type[$.value[text/html] $.charset[windows-1251]]
1848: $xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
1849: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
1850: <people>
1851: <man id="1" имя="word слово">
1852: <name>P«^;AF B</name>
1853: </man>
1854: <man id="2">
1855: <name>ПИФ^taint[&]</name>
1856: </man>
1857: </people>
1858: }]
1859:
1860: @xdata[]
1861: #$response:content-type[$.value[text/html] $.charset[windows-1251]]
1862: $xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
1863: <!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
1864: <people>
1865: <man id="1" имя="word слово">
1866: <name>P«^;AF B</name>
1867: </man>
1868: <man id="2">
1869: <name>ПИФ^taint[&]</name>
1870: </man>
1871: </people>
1872: }}]
1873:
1874: @xml[]
1875: ^xdata[]
1876:
1877: ^show_xdoc2[$xdoc]<hr>
1878: #^show_xnode1[$xdoc]<hr>
1879: $people[^xdoc.select[*/man]]
1880: #^show1[]
1881: ^show_xnodes1[$people]<hr>
1882: #^people.0.owner.hren[]
1883:
1884: ^show_xnode1[^xdoc.selectSingle[*/man[2]/name];0;1]<hr>
1885:
1886: by id:
1887: ^show_xnode1[^xdoc.getElementById[1];0;1]
1888: <hr>
1889:
1890: @show1[array]
1891: ^for[i](0;^array._count[]-1){
1892: $x[$array.$i]
1893: $x.firstChild.nodeValue:
1894: $pattributes[$x.parentNode.attributes]
1895: ^if(^pattributes._count[]){
1896: $pattributes.id.name=$pattributes.id.nodeValue
1897: }
1898: <br>
1899: }
1900:
1901: @show_xnodes1[array][i]
1902: ^for[i](0;^array._count[]-1){
1903: ^show_xnode1[$array.$i;0;1]
1904: }
1905:
1906: @show_xnode1[x;level;single][l]
1907: ^if(def $x){
1908: ^for[l](0;$level-1){ ^; ^; ^; ^;}
1909: ^if($x.nodeType == $xnode:ELEMENT_NODE){
1910: <^;$x.nodeName
1911: $pairs[$x.attributes]
1912: ^if(def $pairs){
1913: $names[^pairs._keys[]]
1914: ^names.menu{ $names.key="$pairs.[$names.key].nodeValue"}
1915: }
1916: >^;
1917: }{
1918: [$x.nodeType]
1919: }
1920:
1921: ^if(def $x.nodeValue){$x.nodeValue}<br>
1922: ^show_xnode1[$x.firstChild]($level+1)
1923: ^if(!$single){
1924: ^show_xnode1[$x.nextSibling]($level)
1925: }
1926:
1927: ^if($x.nodeType == $xnode:ELEMENT_NODE){
1928: ^for[l](0;$level-1){ ^; ^; ^; ^;}<^;/$x.nodeName>^;<br>
1929: }
1930: }
1931:
1932: @show_xdoc2[xdoc]
1933: ^xdoc.save[out/save.xml;
1934: # $.encoding[utf-8]
1935: $.method[xml]
1936: ]
1937: $file[^xdoc.file[
1938: $.encoding[utf-8]
1939: $.method[html]
1940: ]]
1941: ^file.save[text;out/save_file.html]
1942: #$response:body[^xdoc.file[ $.media-type[text/paf] ]]
1943: <pre>^taint[html][^xdoc.string[
1944: $.method[html]
1945: # $.encoding[utF-8]
1946: # $.omit-xml-declaration[yes]
1947: # $.standalone[no]
1948: # -$.doctype-public[-//W3C//DTD XHTML]
1949: # -$.doctype-system[/a/b/c/]
1950: # $.indent[yes]
1951: # $.media-type[text/paf]
1952: ]]
1953: </pre>
E-mail: