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