--- parser3/www/htdocs/Attic/index.html 2002/08/15 12:05:37 1.115
+++ parser3/www/htdocs/Attic/index.html 2002/12/05 13:00:53 1.201
@@ -1,27 +1,33 @@
@USE
/derived.p
+/operators.p
@auto[filespec]
$selffilespec[$filespec]
#$form:here
#$request:charset[UTF-8]
-#$response:charset[windows-1251]
-#$request:charset[windows-1251]
+$request:charset[windows-1251]
+$response:charset[windows-1251]
#$response:charset[UTF-8]
+#$response:charset[empty]
#$response:content-type[$.value[text/html]$.charset[$response:charset]]
-#@postprocess[body]
+@postprocess[body]
#$body
#$result[123]
+$body
+
+OK
@main[]
+#$form:a=
#$a(123)
#^a.format[%.10u]
#$result[111]
#^f[a]
#^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
# ^int:sql{select news_id from news where news_id=-1}[
-## $.default{2}
+# $.default{2}
# ]
# ^hash::sql{bad}
# ^string:sql{select news_id from news where news_id=-1}[$.default{2}]
@@ -30,6 +36,9 @@ $selffilespec[$filespec]
# ^process{ ^^h[]}
# ^process{^string:sql{select '1
# ^^hello[]' }] }
+# ^double:sql{select '2*' ^; }
+#$card_sequence_expect_no(^double:sql{select 20020909131047 #card_sequence_expect_no from card_sequence})
+#^card_sequence_expect_no.format[%15.f]
#}
#^eval(2)
#^tcrashlocaljunctionsv2[]
@@ -97,7 +106,6 @@ $selffilespec[$filespec]
#^if($form:test){y}{n}
#^tablecolumnerror[]
#^roll[]
-#^cookie2[]
#^tableset[]
#^math:PI.format{%.30f}
#^xchildren[]
@@ -142,18 +150,15 @@ $selffilespec[$filespec]
#^ford[]
#^tif[]
#^image[]
-#^mail2[]
#^response[]
#^regexp2[]
#^ttablerem[]
#^pcre[]
#^regexp[]
#^mail[]
-#^exec[]
#^fori[]
#^tconnect[]
#^xslt[]
-#^xml[]
#^header[]
#^tablehasht[]
#^datecreatestring[]
@@ -195,7 +200,6 @@ $selffilespec[$filespec]
#^tstdin[]
#^tfind[]
#^mimet[]
-#^cgit[]
#^joinlimit[]
#^tableclonelimit[]
#^transparams[]
@@ -204,7 +208,6 @@ $selffilespec[$filespec]
#^badpos[]
#^processtest[]
#^mail3[]
-#^mail4[]
#^datesaving[]
#^badconstructor[]
#^calendar[]
@@ -215,10 +218,741 @@ $selffilespec[$filespec]
#^staticstest2[]
#^rbodytest[]
#^cookie[]
-^cookieexpirestest[]
+#^cookieexpirestest[]
+#^postest[]
+#^voidpostest[]
+#^badcolumntest[]
+#^delimiters[]
+#^новый-split[]
+#^грязные-cookie[]
+#^html-почта[]
+#^badswitchtest[]
+#^okswitchtest[]
+#^cgit[]
+#^ttransformsep[]
+#^calltest[]
+#^xpath3[]
+#^doubleliterals[]
+#^newxor[]
+#^mail2[]
+#^exec[]
+#^passpost[]
+#^fordelim[]
+#^duplicatetable2hashkey[]
+#^duplicatehashsqlkey[]
+#^longlreplace[]
+#^table2hash_onecolumn[]
+#^crossopvars[]
+#^three[]
+#^badLangAfterCatch[]
+#^zeroinstdin[]
+#^shifts[]
+#^jspace[]
+#^hashselfmodification[]
+#^emptyTransformResult[]
+#^badxdoccreate[]
+#^if(-d "CVS"){y}{n}
+#^badjunctioncall[]
+#^russianindex[]
+#^virtualtest[]
+#^xml[]
+#^mail4[]
+#^voidconstructorpass[]
+#^$form:CLASS.a=$form:CLASS.a
+#^cookie2[]
+#^menudelim[]
+#^touchittest[]
+#^touchittest2[]
+#^opauto[]
+#^trycontextt[]
+#^tfor[]
+#^user-foreach-test[]
+#^includet[]
+#^derived:includet[]
+#^fortestsep[]
+#^derived:inclass_process_test[]
+#$derived[^derived::create[]]^derived.inclass_process_test[]
+#^domorigint[]
+#^junctiontest2[]
+#^junctionselftest[]
+#^bad-compiletosystem[]
+#^steppedfor[i](1;10;2){$i }
+#^file:fullpath[a.gif]
+#^file:fullpath[/abs/a.gif]
+#$form:a/$form:image-map=
+#^foreachform[]
+#^selectSingleoct[]
+#^compilebug[]
+#^badhashcreate[]
+#^badsendmail[]
+#^keygenedhash[]
+#
[$env:HTTP_REFERER]
+#$response:Content-TypE[bad]
+#^emailhead2[]
+#^includet2overridedynamic[]
+#^includet2overridestatic[]
+#^virtualtest2[]
+#^message-id-test[]
+#^test_exif[jpg]
+#^http_prefix[]
+#^http_prefix_table[]
+#^http_prefix_xml[]
+#^imagefont[]
+#^downloadtest[]
+#^cachebug[]
+#^quickregexatend[]
+#^docsamplehttpfileload[]
+#^datecreatecolon[]
+#^exifdocsample[]
+#^rusagetv[]
+#^varmethnameconflict[]
+#^mimeold[]
+#^mimenew[]
+#^doctableclonesample[]
+^manyto[]
+
+@manyto[]
+^mail:send[
+ $.from[paf@design.ru]
+ $.to[паф , паф дома ]
+# $.bcc[pafhome@design.ru]
+ $.subject[проверка,тут2]
+ $.text[привет]
+]
+
+@doctableclonesample[]
+$orig[^table::create{name
+Вася
+Коля
+Лена
+Маша
+}]
+
+#сдвигает текущую запись таблицы from на <Коля>
+^orig.offset(1)
+
+#копирует начиная стекущей записи во from, 10 записей максимум
+$copy[^table::create[$orig;
+ $.offset[cur]
+ $.limit(10)
+]]
+
+^copy.menu{$copy.name}[,]
+
+@mimeold[]
+^mail:send[
+ $.from[paf@design.ru]
+ $.to[paf@design.ru]
+ $.text[1
+
+ 2
+
+
+ 3]
+]
+
+@mimenew[]
+^mail:send[
+ $.from[paf@design.ru]
+ $.to[paf@design.ru]
+ $.body[1
+
+ 2
+
+
+ 3]
+]
+
+@varmethnameconflict[]
+$varmethnameconflict[1]
+^varmethnameconflict.format[%03d]
+
+@rusagetv[]
+$s[$status:rusage]
+^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f]
+
+@exifdocsample[]
+$image[^image::measure[jpg/DSC00003.JPG]]
+$exif[$image.exif]
+^if($exif){
+ Производитель фотоаппарата, модель: $exif.Make $exif.Model
+ Время съемки: ^exif.DateTimeOriginal.sql-string[]
+ Выдержка: $exif.ExposureTime секунды
+ Диафрагма: F$exif.FNumber
+ Использовалась вспышка: ^if(def $exif.Flash){^if($exif.Flash){да;нет};неизвестно}
+}{
+ нет EXIF информации
+}
+
+@exif_value[value][i]
+^if($value is date){
+ ^value.sql-string[]
+}{
+ ^if($value is hash){
+ ^for[i](0;$value-1){$value.$i}[,]
+ }{
+ $value
+ }
+}
+
+
+
+
+@datecreatecolon[]
+#$date[^date::create[2002-12-02 14:30]]
+#$date[^date::create[2002-12-02]]
+#$date[^date::create[2002:12:02 13:30]]
+$date[^date::create[2002:12:02]]
+#$date[^date::create[12:02]]
+^date.sql-string[]
+
+@docsamplehttpfileload[]
+$file[^file::load[text;http://parser.ru/]]
+Программное обеспечение сервера: $file.SERVER
+
+$file.text
+
+@quickregexatend[]
+#$subject[xxxabcd]
+#^if(^subject.match[^(?>.*)(?<=abcd)]){y;n}
+$subject[^for[i](0;1000){xxxxxyyyyy} ]
+^for[j](0;1000){
+#$trimmed[^subject.match[\s+^$][]{}]
+#$table[^subject.match[^(.*\S)\s+^$]]
+$table[^subject.match[^(.*\S)\s+^$]]
+$trimmed[$table.1]
+}
+^untaint[html]{"$trimmed"}
+#$table[^subject.match[^(.*?)\s+^$]]
+#^untaint[html]{"$table.1"}
+
+
+@cachebug[]
+^cache[test](10){body}
+
+@downloadtest[]
+$response:body[^file::load[binary;index.html]]
+
+
+@imagefont[]
+$image[^image::create(200;30;0x00FFFF)]
+height(font)=1950
+$alph[ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя0123456789-+=!\"%:,.^;<>?@()^[^]'&*/]
+^^alph.length[]=^alph.length[]
+^eval(1950/^alph.length[])[%.10f]
+
+^image.font[$alph;font.gif](20)
+$text[AПривет*]
+^image.text(0;0)[$text]
+$length[^image.length[$text]]
+#^image.rectangle(0;50)(2;2)(0x000000)
+^image.rectangle(0;0)($length-1;5)(0x000000)
+$response:body[^image.gif[]]
+
+@http_prefix_xml[]
+$xdoc[^xdoc::load[http://www.cbr.ru/scripts/XML_daily.asp?^taint[сегодня];
+ $.headers[
+ $.user-agent[ПАФ]
+ $.accept-test[$.value[значение]$.with-option[опция]]
+ ]
+]]
+На ^xdoc.selectString[string(/ValCurs/@Date)]
+курс валюты
+$USD_node[^xdoc.selectSingle[/ValCurs/Valute[CharCode='USD']]]
+"^USD_node.selectString[string(Name)]" равен ^USD_node.selectString[string(Value)]
+
+
+^taint[^xdoc.string[]]
+
+@http_prefix_table[]
+$table[^table::load[nameless;http://www.artlebedev.ru;$.USER-AGENT[paf]]]
+^table.count[]
+
+$table.0
+
+@http_prefix[]
+#$file[^file::load[text;http://www.artlebedev.ru]]
+#$file[^file::load[text;http://www.artlebedev.ru;alt]]
+#$file[^file::load[text;http://parser3/exif.html;
+$file[^file::load[text;http://parser3/none;
+ $.headers[
+ $.USER-AGENT[paf]
+ ]
+]]
+server: $file.SERVER
+$file.status
+
+$file.text
+
+@test_exif[dir]
+$file[^file:list[$dir;\.(jpe?g|JPE?G)^$]]
+
+^file.menu{
+
+ $image[^image::measure[$dir/$file.name]]
+ | ^image.html[$.width(100)$.height(100)] |
+
+ $file.name
+ $exif[$image.exif]
+ ^if($exif){
+ $keys[^exif._keys[]] ^keys.sort{$keys.key}
+ ^keys.menu{
+ $key[$keys.key]
+ $value[$exif.$key]
+
+ ${key}: ^show_exif_value[$value]
+ }
+ }{
+ no EXIF info
+ }
+ |
+
+}
+
+
+@show_exif_value[value][i]
+^if($value is date){
+ ^value.sql-string[]
+}{
+ ^if($value is hash){
+ ^for[i](0;$value-1){$value.$i}[,]
+ }{
+ $value
+ }
+}
+
+@message-id-test[]
+^mail:send[
+ $.from[paf@mail]
+ $.to[paf@mail]
+ $.subject[test]
+# $.message-id[<1@parser.ru>]
+ $.Message-id[<2@parser.ru>]
+ $.subject[проверка]
+ $.text[мычит!]
+]
+
+@virtualtest2[]
+$derived[^derived::create[]]
+^derived.first[]
+
+
+@includet2overridedynamic[]
+includet2overridedynamic:
+shold say 'hello in some.p'
+
+$derived[^derived::create[]]
+^derived.includet2override[]
+
+@includet2overridestatic[]
+includet2overridestatic:
+shold say 'hello in derived.p'
+because in static classes there's no way to determine derived class (no virtual mech becase of no virtual table)
+
+^derived:includet2override[]
+
+@emailhead2[]
+^mail:send[
+ $.charset[koi8-r]
+ $.from[paf@design.ru]
+ $.to[paf@mail]
+# $.reply-to[^taint[agat] <^taint[ag_7k@mail.ru]>]
+$user[^taint[agat]]
+$email[^taint[ag_7k@mail.ru]]
+ $.reply-to[$user $email]
+ $.subject[test2]
+]
+
+@keygenedhash[]
+$table[^table::create{key value
+1 a
+2 b
+}]
+$hash[^table.hash($table.key*2)]
+'$hash.4.value' must be 'b'
+
+@badsendmail[]
+^mail:send[
+ $.from[hren < paf@design.ru
+ >]
+ $.to[paf@design.ru]
+ $.subject[test]
+]
+
+@badhashcreate[]
+$hash[
+ $.ok[1]
+]
+$.bad[1]
+
+@compilebug[]
+^a[]^#31=
+
+@selectSingleoct[]
+$d[^xdoc::create[doc]]
+$element[^d.selectSingle[$nothing]]
+
+
+@foreachform[]
+one
+two
+
+^form:fields.foreach[key;value]{
+ $key -- $value
+}[
]
+
+$nameless[$form:tables.nameless]
+^if(def $nameless){
+ nameless table -- ^nameless.menu{$nameless.field}[,]
+}
+^if(def $form:imap){
+
+ IMAP $form:imap.x : $form:imap.y
+}
+
+@steppedfor[name;from;to;step;code]
+$caller.$name($from)
+^while($caller.$name<=$to){
+ $code
+ ^caller.$name.inc($step)
+}
+
+@bad-compiletosystem[]
+^process[$string:CLASS]{@a[]
+}
+
+@junctionselftest[]
+$derived[^derived::create[]]^derived.explodejunction{$tomain[tomainOK]}
+^$tomain=$tomain
+
+@junctiontest2[]
+^if($if is junction){is junction;not junction}
+^if(def $if){defined;not defined}
+
+@domorigint[]
+$xdoc[^xdoc::create[вася]]
+^xdoc.firstChild.setAttribute[name;значение]
+$var[$xdoc.firstChild.nodeName]
+^throw[paf;$var]
+
+
+@fortestsep[][i]
+^for[i](1;3){$i}[,]
+
+@includet[]
+^include[some.p]
+^included_method[2]
+
+@user-foreach-test[][key;value]
+^user-foreach[key;value]{$key=$value
}
+
+@user-foreach[key;value;code]
+^for[i](1;10){
+ $caller.$key($i)
+ $caller.$value($i*2)
+ $code
+}
+
+
+@tfor[][i]
+^for[i](1;10){
+$i
+}
+
+@trycontextt[]
+^try{
+ ^trycontexttsub[]
+}{
+ $exception.handled(0)
+}
+
+
+@trycontexttsub[]
+^bad[]
+
+
+@opauto[]
+^reada[]
+
+
+@rusage2[]
OK
+@rusage2[]
+$s[$status:rusage]
+
+^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f]
+
+
+@voidconstructorpass[]
+$a[$form:a]
+=^form:a.int(1)=
+=^a.int(1)=
+
+
+@russianindex[]
+#dir with files with russian-lang names
+$where[dir]
+
+$dir[^file:list[$where;\.txt^$]]
+^dir.menu{
+ $dir.name
+}
+
+@badjunctioncall[]
+^badjunctioncallinside{code}
+
+@badjunctioncallinside[code]
+xx^code[]
+
+@badxdoccreate[]
+$xdoc[^xdoc::create[вася]]
+#$xdoc[^xdoc::create{вася}]
+
+^xdoc.firstChild.setAttribute[name;значение]
+^xdoc.string[]
+
+
+@emptyTransformResult[]
+$input[^xdoc::create[docBad]]
+$sheet[^xdoc::create{
+
+
+ output
+
+
+}]
+$output[^input.transform[$sheet]]
+$response:body[^output.file[]]
+
+@hashselfmodification[]
+$hash[
+ $.a[1]
+ $.b[2]
+]
+^hash.foreach[key;value]{
+# $hash.c[1]
+ $hash.a[1]
+}
+
+@touchittest[][i]
+$i[before]
+^touchit[]
+$i
+
+@touchittest2[]
+$i[before]
+^touchit[]
+$i
+
+
+@jspace[]
+$a(1)
+^jspace_call{^eval($a*2)}
+#$a(2)
+#$junction
+
+@jspace_call[param][a]
+$a[unrelcfgdfgated]
+$junction
+$junction.a(2)
+$junction
+
+@shifts[]
+^eval(1<<3)
+^eval(8>>2)
+#^if(1=1){y;n}
+
+
+@zeroinstdin[]
+#$f[^file::exec[a.pl;$.stdin[$.shit[]]]]
+$f[^file::exec[a.pl;$.stdin[^file::load[binary;1z2.txt]]]]
+=$f.text=
+^f.save[binary;1z2.out]
+
+@badLangAfterCatch[]
+^try{
+ $a[
+ тут язык сменился на pass_appended
+ ^throw[user;test]
+ и улетело с не тем языком
+ ]
+}{
+ $exception.handled(1)
+}
+1 2
+
+@crossopvars[]
+#^one[]
+^two[]
+
+@table2hash_onecolumn[]
+$t[^table::create{a
+1
+1
+}]
+#^t.hash[a]
+#^t.hash[a;b]
+$h[^t.hash[a][$.distinct(1)]]
+$h.1.a
+
+@longlreplace[]
+$str1[ мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла мыла ]
+$str2[ела]
+$str[Мама $str1 раму]
+
+^str.replace[^table::create[nameless]{мыла $str2}]
+
+@duplicatehashsqlkey[]
+^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
+ $t[^table::sql{select * from news}]
+ $c[^t.columns[]]
+ ^c.menu{$c.column}[,]
+
+ $h[^hash::sql{select news_type_id, name from news}[$.distinct(1)]]
+}
+
+@duplicatetable2hashkey[]
+$t[^table::create{a b
+1 2
+1 3
+}]
+#^t.hash[a]
+#^t.hash[a;b]
+^t.hash[a][$.distinct[1]]
+
+@menudelim[]
+$t[^table::create{a
+1
+2
+3
+4
+5
+}]
+
+^t.menu{^if($t.a<3){}{$t.a}}[,]
+
+@fordelim[]
+^for[a](0;6){^if($a<3){}{$a}}[,]
+
+
+@passpost[]
+
+
+^if(def $form:text){
+ $a[^file::cgi[a.pl]]
+ $a.text|$a.status|$a.stderr
+}
+
+@exec[]
+#$a[^file::exec[a.cmd]]
+$a[^file::cgi[a.cmd]]
+$a.text|$a.status|$a.stderr
+
+
+@newxor[]
+^eval(1!|2 #примечание()zzz
+|0x100)
+#^eval(1!||2)
+^if(1!|1){y}{n}
+
+#@method[$bad]
+
+@doubleliterals[]
+#^eval(1e-10)
+^eval("1e-20")
+
+@xpath3[]
+$constr[^xdoc::create{ }]
+$objectData[^constr.selectSingle[/constructor-data/object]]
+$objectData.nodeType
+$objectData.firstChild.nodeValue
+
+@calltest[]
+^calltest2[string]
+
+@calltest2[s]
+$s
+
+@ttransformsep[]
+$input[^xdoc::load[20020909131046.xml]]
+$output[^input.transform[generated.xsl]]
+^output.string[]
+
+@okswitchtest[]
+$local[local value]
+^switch[1]{
+ ^case[1]{1code $local}
+}
+
+@badswitchtest[]
+^switch[1]{
+ ^badswitchtestcase[]
+}
+@badswitchtestcase[][local]
+$local[local value]
+ ^case[1]{1code $local}
+
+@badjunction[]
+^badj1[]
+^badj2[]
+
+@html-почта[]
+$переменная[значение]
+^mail:send[
+ $.from[paf@mail]
+ $.to[paf@mail]
+ $.subject[htmltest1]
+ $.html{тест$переменная= !}
+]
+
+
+@грязные-cookie[]
+$cookie:a[&]
+$cookie:a
+
+@новый-split[]
+$abc[a.b.c]
+#$table[^abc.split[.]]
+#$table[^abc.split[.;l]]
+#$table[^abc.split[.;v]]
+$table[^abc.split[.;lv]]
+^table.menu{$table.piece}[,]
+
+#$table[^abc.split[.;h]]
+$table[^abc.split[.;hr]]
+$table.0,$table.1,$table.2
+
+@delimiters[]
+$a#1[1]
+$a#1=
+
+
+@badcolumntest[]
+$table[^table::load[ext.cfg]]
+$table.b
+
+
+@virtualtest[]
+$derived[^derived::create[derived create actual param]]
+^derived.test[]
+
+
+@voidpostest[]
+$s[]
+^s.pos[$nothing]
+
+@postest[]
+$s[$nothing]
+^s.pos[$nothing]
+
@cookieexpirestest[]
#$cookie:exptest[1]
#$cookie:exptest[$.value[2] $.expires(+1)]
@@ -283,7 +1017,7 @@ $date.yearday
^mail:send[
$.from[paf@mail.design.ru]
$.to[paf@mail.design.ru]
- $.subject[^taint[uri][москва]=2]
+ $.subject[^taint[uri][москва=E0_+ ]=2]
$.text[^taint[uri][москва]=]
$.html{link}
]
@@ -398,7 +1132,9 @@ $sheet[^xdoc::create{
- z
+
+
+z
para1=
@@ -1424,7 +2160,7 @@ $date.year $date.month $date.day
@cookie2[]
#=$cookie:clientType[$.value[test]]=
-=$cookie:clientType=
+=$cookie:CLASS.clientType=
@tableset[]
@@ -1798,11 +2534,12 @@ $response:body[^pict.gif[]]
@mail2[]
^mail:send[
+ $.message-id[<6615%1@parser.ru>]
$.content-type[$.value[text/plain] $.charset[windows-1251]]
$.from[Александр Петросян ]
$.to[Александр Петросян ]
- $.subject[проверка]
- $.body[проверка]
+ $.subject[проверка проверка]
+ $.text[проверка]
]
@cookie[]
@@ -1872,10 +2609,6 @@ $s[abcАБВ]
3]
]
-@exec[]
-$a[^file::exec[fc.exe;;a;b]]
-$a.status|$a.stderr
-
@fori[][i]
^for[i](1;3){... =$i= ...}
@@ -1895,7 +2628,7 @@ $xdoc[^xdoc::set{
+$xdoc[^xdoc::create{
@@ -1905,7 +2638,7 @@ $xdoc[^xdoc::set{^process{ПИФ^taint[&]
-}}]
+}]
@xml[]
^xdata[]