#@USE
#t.p
@auto[filespec]
$selffilespec[$filespec]
#$form:here
$request:charset[windows-1251]
$response:charset[windows-1251]
$response:content-type[$.value[text/html]$.charset[$response:charset]]
#@postprocess[body]
#<b>$body</b>
#$result[123]
@main[]
#$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}]<br>
# ^string:sql{select news_id from news where news_id=-1}[$.default{2}]
#}
#^eval(2)
#^tcrashlocaljunctionsv2[]
#^tcrashlocaljunctions[]
#^tjunctions[]
#^replacetest[]
#^matchoptionpp[]
#^txdocxnodechild[]
#^tclasses[]
#$math:PI
#^b:method[]
#^main[]
#^errort[]
#^tselectNumber[]
#$result[hello]
#^invaliddate2[]
#^process2[]
#^casehashtext[]
#^subjvaltest[]
#^tableselect0[]
#^memnotest1[]
#^transparams[]
#^voidparams[]
#^rolls2[]
#^cacheexpireschanging[]
#^cacheexpiresfixed[]
#^dateoffsets[]
#^exceptionTypes[]
#^roll2[]
#^rolls[]
#^exceptions1[]
#^locate_by_expr[]
#^method_junction_params{...}
#^verifyCookie[paf]
#^execlangs[]
#$t[^tobjeresult[]]$t.a
#^xmlprobs[]
#^doubleprobs[]
#^math:random(-10)
#^divnamestop[]
#^arrayclone[]
#^operator_tricks[]
#^xoutputrusattr[]
#^xdocset1[]
#^regexp3[]
#^exec2[]
#^tlock[]
#^xmloutattrwithoutvalue[]
#^precisionProblem[]
#^xpath[]
#^ttablesetlang[]
#^mail3[]
#^ttime[]
#^tupper[]
#^treplace[]
#^xslt2[]
#^tcache2[]
#$ORIGINS(1)
#$t[^table::set{a b} ^table::set{c d}]
#^ttaintuntaint[]
#^tappend2[]
#^badvsnprintf[]
#^badoracequoting[]
#^badconstructors[]
#^xloadwrongtable[]
#^xsetwrongtable[]
#^if($form:test){y}{n}
#^tablecolumnerror[]
#^roll[]
#^cookie2[]
#^tableset[]
#^math:PI.format{%.30f}
#^xchildren[]
#^thashforeach3[]
#^thashforeach2[]
#^thashforeach[]
#^thashdelete[]
#^connect[mysql://user:pass@cd.rinet.ru/db]{^void:sql{z} }
#^tappend[]
#^sappend[]
#^eval(10\3)<br>
#^tform[]
#^formattest[]
#^filelist[]
#^connect[mysql://user:pass@host]{ }
#^безнадёжна_попытка_поправить_непоправимое[]
#^tcache[]
#^thashfileexp[]
#^tcounter[]
#^tablehash[]
#j^hashfile[]
#^formclass[]
#^hren[]
#^domedit[]
#^domxslt[]
#^lsplit2[]
#^faceesize[]
#^imageresize[]
#^ifassignhash[]
#^tintdefault[]
#$response:status[404]
#^ifpasshash[]
#^movedir[]
#^replace[]
#^set[]
#^hash[]<hr>
#$t[^methresult[]] ->$t
#^terror[]
#^ssave[]
#^calendar[]
#^thash[]
#^tdef[]
#^ford[]
#^tif[]
#^image[]
#^mail2[]
#^cookie[]
#^response[]
#^regexp2[]
#^ttablerem[]
#^pcre[]
#^regexp[]<hr>
#^mail[]
#^exec[]
#^fori[]
#^tconnect[]
#^xslt[]
#^xml[]
#^header[]
#^tablehasht[]
#^datecreatestring[]
#^mssqltypes1[]
#^badthrows[]
#^xmlspace[]
#^counter[main.counter]
#^xpath2[]
#^callindirect[]
#^junctionprob[]
#^datecreatestring2[]
#^tstoredproc[]
#^tstoredproc2[]
#^forkeys[]
#^pngsize[]
#^checkList[]
#^datetest[]
#^tserge[]
#^envt[]
#^selectt[]
#^select2[]
#^selectSingle2[]
#^selectString2[]
#^selectNumber2[]
#^selectBool2[]
#^xdoccreate[]
#^xdoccreatetag[]
#^xdocload[]
#^xdocstring[]
#^xdocsave[]
#^div[]
#^datecreatestring3[]
#^tfilespec[]
#^tcrypt[]
#^cryptdocsample[]
#^sendtests[]
#^tnormalize[]
^xmltransformbyxdoc[]
#^sergestrandef[]
<hr>
OK
@sergestrandef[]
$sQuantity[ ]
^sQuantity.int(10)
@xmltransformbyxdoc[]
$xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
<!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
<people>
<man id="1" имя="word слово">
<name>1 2</name>
</man>
</people>
}}]
$sheet[^xdoc::create{<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
>
<!--<xsl:output doctype-public ="-//W3C//DTD XHTML" indent="yes"/>-->
<!--<xsl:import href="http://localhost/html.xsl"/>-->
<xsl:import href="html.xsl"/>
<xsl:param name="param1">defparam1</xsl:param>
<xsl:param name="param2">defparam2</xsl:param>
<xsl:template match="doc">
param1=<xsl:value-of select="^$param1"/><br/>
param2=<xsl:value-of select="^$param2"/><br/>
test return <something background=""/>
</xsl:template>
<xsl:template name="test">
test return3
</xsl:template>
<xsl:template match="people">
<html>
<head>z</head>
para1=<xsl:copy-of select="^$param1"/>
<xsl:apply-templates/>
<hr/>
<xsl:call-template name="test"/>
</html>
</xsl:template>
<xsl:template match="name">
<b><xsl:value-of select="."/></b>
</xsl:template>
</xsl:stylesheet>
}]
$xdoc[^xdoc.transform[$sheet]]
$string[^xdoc.string[$.method[html]]]
^string.save[a]
^untaint[html]{$string}
@tnormalize[]
#s состоит из 1000 фрагментов
$s[^for[i](0;999){фрагмент }]
#это займет много ресурсов
^s.match[фраг][g]{перга}
#это займет меньше ресурсов
#$normalized[^s.normalize[]]
#^normalized.match[фраг][g]{перга}
@sendtests[]
#^text[]
#^html[]
#^text-n-html[]
#^file[]
#^text-n-file[]
^text-n-html-n-file[]
#^backwardcomp[]
@backwardcomp[]
^mail:send[
$.from[paf]
$.to[paf]
$.body[this is text value]
]
@text[]
^mail:send[
$.from[paf]
$.to[paf]
$.text[
$.value[this is text value]
]
]
@html[]
^mail:send[
$.from[paf]
$.to[paf]
$.html{this is <b>html</b> value ^taint[<] 10}
]
@text-n-html[]
^mail:send[
$.from[paf]
$.to[paf]
$.text[
$.value[this is text value]
]
$.html[
$.value{this is <b>html</b> value ^taint[<] 10}
]
]
@file[]
^mail:send[
$.from[paf]
$.to[paf]
$.file[^file::load[binary;image.jpg]]
]
@text-n-file[]
^mail:send[
$.from[paf]
$.to[paf]
$.text[
$.value[this is text value]
]
$.file[^file::load[binary;image.jpg]]
]
@text-n-html-n-file[]
^mail:send[
$.from[paf]
$.to[paf]
$.text[
$.value[this is text value]
]
$.html[
$.COntent-type[$.value[text/html]$.charset[windows-1251xx]]
$.value{this is <b>html</b> value ^taint[<] 10}
]
$.file[^file::load[binary;image.jpg]]
]
@md5salt[]
1234
@cryptdocsample[]
$users[^table::create{name password
alice ***
bob ***
}]
$htpasswd[^table::create[nameless]{}]
^users.menu{
^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$^md5salt[]]}
}
^htpasswd.save[nameless;.htpasswd-parser-test]
@tcrypt[]
#^math:crypt[123;^$apr1^$1234567890abcdef]<br>
^math:crypt[123;^$apr1^$]<br>
@tfilespec[]
src=$selffilespec<br>
dirname=^file:dirname[$selffilespec]<br>
basename=^file:basename[$selffilespec]<br>
justname=^file:justname[$selffilespec]<br>
justext=^file:justext[$selffilespec]<br>
@datecreatestring3[]
$new_after[^date::now(-3)]
$articles[^table::create{id title last_update
1 привет 2002-07-03}]
^articles.menu{
$last_update[^date::create[$articles.last_update]]
<a href=${articles.id}.html>$articles.title</a>
^if($last_update > $new_after){новая}
<br>
}
@div[]
$var(5)
^var.inc(7)
^var.dec(3)
^var.div(4)
^var.mul(2)
$var
@xdocsave[]
$document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
<document>
строка1<br/>
строка2<br/>
</document>}]
^document.save[test.xml]
@xdocstring[]
$document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
<document>
строка1<br/>
строка2<br/>
</document>}]
^document.string[
$.method[html]
]
@xdocload[]
$document[^xdoc::load[article.xml]]
$response:body[^document.file[$.media-type[text/xml]]]
@xdoccreatetag[]
$document[^xdoc::create[document]]
$paraNode[^document.createElement[para]]
$dummy[^document.documentElement.appendChild[$paraNode]]
$response:body[^document.file[$.media-type[text/xml]]]
@xdoccreate[]
$document[^xdoc::create{<?xml version="1.0" encoding="windows-1251" ?>
<document>
текст
</document>}]
$response:body[^document.file[$.media-type[text/xml]]]
@selectBool2[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
<t attr="привет" n="123"/>}]
^if(^d.selectBool[/t/@n > 10]){
/t/@n больше 10
}{
не больше
}
@selectNumber2[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
<t attr="привет" n="123"/>}]
^d.selectNumber[number(/t/@n)+1]<br>
^d.selectNumber[2*2]<br>
@selectString2[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
<t attr="привет" n="123"/>}]
# результат=привет
^d.selectString[string(t/@attr)]
@selectSingle2[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
<t attr="привет" n="123"/>}]
# результат=один элемент "t"
$element[^d.selectSingle[t]]
# результат=2 (количество атрибутов <t>)
Количество атрибутов: ^element.attributes._count[]<br>
# результат=не существует (нет <x>)
^if(^d.select[x]){
x существует
}{
x не существует
}
@select2[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><t attr="привет" n="123"/>}]
# результат: список из одного элемента "t"
$list[^d.select[t]]
# результат: 2 = количество атрибутов <t>
^list.0.attributes._count[]<br>
^for[i](0;$list-1){
$attr[$list.$i]
$attr.nodeName = $attr.nodeType<br>
}
@selectt[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><t attr="привет" n="123"/>}]
$list[^d.select[t]]
^list.0.attributes._count[]
@envt[]
$f[^file::exec[showenv.cmd;
$.bad[value]
$.CGI_good[value]
]]
$f.status<br>
$f.stderr<br>
<pre>$f.text</pre>
@tserge[]
^if(" 09 "){y}
@datetest[]
$f[^file::stat[some.zip]]
Размер в байтах: $f.size<br>
Год создания: $f.cdate.year<br>
$now[^date::now[]]
$DAYS_CONSIDERED_NEW(3)
Статус: ^if($f.mdate >= $now-$DAYS_CONSIDERED_NEW){новый;старый}
@checkList[]
...^oneOf[a;a,b,c]...<br>
#...^oneOf[a;ax,b,c]...<br>
...^oneWord[word]...<br>
#...^oneWord[wo rd]...<br>
@oneOf[s;list][t] выдаёт строку, если строка она есть в списке(разделенном запятыми)
$t[^list.lsplit[,]]
^if(!^t.locate[piece;$s]){^throw[user;$s;unknown]}
$result[$s]
@oneWord[s]
^if(^s.match[\W]){^throw[user.data;$s;not word]}{$s}
@pngsize[]
$i[^image::measure[test.png]]
^i.html[]
@forkeys[]
$text[^form:fields.foreach[key;val]{$key=$val
}]
^text.save[ttt.txt]
=$text=
@tstoredproc2[]
^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
^void:sql{exec pafvoid}
}
@tstoredproc[]
^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
$t[^table::sql{exec pafproc}]
# $t[^table::sql{{call pafproc}}]
$c[^t.columns[]]
^c.menu{$c.column}[<br>]
}
@datecreatestring2[]
<table border=1>
^datecreatestring2show[2000]
^datecreatestring2show[2000-02]
^datecreatestring2show[2000-2-03]
^datecreatestring2show[2000-02-03 15]
^datecreatestring2show[2000-02-03 15:30]
^datecreatestring2show[2000-02-03 15:30:04]
^datecreatestring2show[2000-02-03 15:30:04 hren]
^datecreatestring2show[15:30]
^datecreatestring2show[15:30:05]
^datecreatestring2show[15:30:05 hren]
</table>
@datecreatestring2show[s]
$date[^date::create[$s]]
<tr>
<td>$s</td><td align=right>^date.sql-string[]</td>
</tr>
@junctionprob[][l]
$l[123]
$a{$l}
^junctionprobnested[$a]
@junctionprobnested[p]
$p
@callindirecttarget[]
callindirecttarget called
@callindirect[]
$f[$callindirecttarget]
^f[]
@xpath2[]
$xdoc[^xdoc::create{<?xml version="1.0" encoding="windows-1251"?>
<doc>
<field-list>
<field name="aa"/>
<field name="bb"/>
</field-list>
</doc>
}]
#^xdoc.string[]
$fieldList[^xdoc.selectSingle[/doc/field-list]]
#^fieldList.childNodes._count[]
$fields[^fieldList.select[field]]
#^fields._count[]
^fields.foreach[k;node]{
$node.nodeName<br>
}
@counter[filespec][f;s]
^file:lock[$filespec]{
$f[^file::load[text;$filespec]]
$s[^eval($f.text+1)]
^s.save[$filespec]
}
$s
@xmlspace[]
$xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
<!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
<people>
<man id="1" имя="word слово">
<name>1 2</name>
</man>
</people>
}}]
$xdoc[^xdoc.transform[global.xsl]]
$string[^xdoc.string[$.method[html]]]
^string.save[a]
^untaint[html]{$string}
@badthrows[]
#^throw[a;b;]
^throw[a;]
@mssqltypes1[]
^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
# ^string:sql{select { ts '1998-05-02 01:23:56.123' }}
# ^string:sql{select CAST({ ts '1998-05-02 01:23:56.123' }AS smalldatetime)}
# ^string:sql{select CAST({ts '2002-04-28 00:00:00.000'} AS smalldatetime)}
$t[^table::sql{select a from paf}]
^t.count[]
}
@datecreatestring[]
$d[^date::create[2002-04-33 01:03:04]]
^d.sql-string[]
@method[hash]
$hash.key
@mainZ[]
^method[
$.key{code}
]
@tablehasht[]
$t[^table::create{p
1
3
2
4}]
$h[^t.hash[p]]
=^h._count[]=
@sqldefaults[]
^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
^int:sql{select news_id from news where news_id=-1}[$.default{2}]<br>
^string:sql{select news_id from news where news_id=-1}[$.default{2}]
}
=======
<hr>
OK
>>>>>>> 1.50
@tcrashlocaljunctionsv2[]
$a[
$b{ $c[1] }
]
$b
$c
@tcrashlocaljunctions[]
$var[aaa]
^if(1){
^tcrashlocaljunctions1[]
}
$j
@tcrashlocaljunctions1[][var]
$var[varvalue]
$j{
$var
}
$j
@tjunctions[][tl]
$t[^t::create[]]
^tjunctionsi[]
@tjunctionsi[][tl]
$tl[12345]
^t.tjunctionsm[
$.key{
$tl
}
]
@replacetest[]
$b[b]
$s[
aaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
]
^s.replace[^table::create{from to
ba !_}]
@matchoptionpp[]
#$ORIGINS(1)
$s[
aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
]
^s.match[b;g']{($match.prematch|$match.match|$match.postmatch)}
@txdocxnodechild[]
$xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?><d/>}]
$xdoc.nodeName
^xdoc.selectNumber[2*2]
$xdoc:ELEMENT_NODE
@tclasses[]
$t[^t::create[]]
^t.method[]
<hr>
^t.base_method[]
@errort[]
^xdoc::create[a]
#^throw[user;here;this]
@tselectNumber[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d attr="привет" n="123"/>}]
^d.selectString[string(d/@attr)]<br>
^d.selectNumber[2*2]<br>
^d.selectNumber[number(/d/@n)+1]<br>
@invaliddate2[]
$d[^date::create(1018946575/60/60)] ^d.sql-string[]
@process2[]
^^process{
^process{
^$a[^^if(0){^$.k[y]}{^$.k[^^hren[]n]}] ^$a.k
}
}
@casehashtext[]
$tt[1]
$tmp[
^switch[$tt]{
^case[1]{
$.aaa[123]
}
^case[DEFAULT]{
$.bbb[456]
}
}
shit!
]
#$tmp
$tmp.aaa
@subjvaltest[]
$a12[val]
$b[12]
$a$b
@tableselect0[]
$person[^table::create{name height
paf 1.77
шохин 2.07
moko 1.77
}]
$nottoohigh[^person.select($person.height<2)]
^nottoohigh.menu{$nottoohigh.name<br>}
@transparams[]
$idoc[^xdoc::create{<?xml version="1.0" ?><doc/>}]
$odoc[^idoc.transform[global.xsl;
$.param1['1']
$.param2['2']
]]
<pre>^taint[^odoc.string[$.method[html]]]
@memnotest1[]
^for[i](0;4000){
$xxxx[$i]
$xxxx
}
@memnotest1notes[]
одна итерация цикла:
[Mon Apr 8 20:12:02 2002] execution-------------------------|
'469641+=28 wcodeframe -> 0 !optimize[3]''469669+=49 string от {} -> 0 optimize[3]'
[Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
[Mon Apr 8 20:12:02 2002] "|| "
[Mon Apr 8 20:12:02 2002] 12:WITH_ROOT
[Mon Apr 8 20:12:02 2002] 13:VALUE
[Mon Apr 8 20:12:02 2002] "xxxx" string
[Mon Apr 8 20:12:02 2002] 14:CREATE_EWPOOL'469377+=24 wcodeframe -> 0 !optimize[1]''469401+=49 string -> 41 !optimize[7]'
[Mon Apr 8 20:12:02 2002] 16:WITH_READ
[Mon Apr 8 20:12:02 2002] 17:VALUE
[Mon Apr 8 20:12:02 2002] "i" string
[Mon Apr 8 20:12:02 2002] 18:GET_ELEMENT
[Mon Apr 8 20:12:02 2002] 17:WRITE_VALUE'469452+=40 MAX_NUMBER -> !~2 actual digits''469492+=49 -> 41 !'
[Mon Apr 8 20:12:02 2002] 16:REDUCE_EWPOOL'469541+=24 VString -> 0 optimize[5]'
[Mon Apr 8 20:12:02 2002] 15:CONSTRUCT_VALUE
[Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
[Mon Apr 8 20:12:02 2002] "| "
[Mon Apr 8 20:12:02 2002] 12:WITH_READ
[Mon Apr 8 20:12:02 2002] 13:VALUE
[Mon Apr 8 20:12:02 2002] "xxxx" string
[Mon Apr 8 20:12:02 2002] 14:GET_ELEMENT
[Mon Apr 8 20:12:02 2002] 13:WRITE_VALUE'469573+=41 string expand nothing for now'
[Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
[Mon Apr 8 20:12:02 2002] "||"'469617+=24 VString -> 0 !optimize[6]'
[Mon Apr 8 20:12:02 2002] <-ja returned
[Mon Apr 8 20:12:02 2002] ja->
201/328=0.612804878049 %%optimized
1.
CREATE_*POOL
сделать
*POOL_POOLED+CODE
где
wwrapper
и(возможно) wcodeframe
+string
стековая переменная
2.
избавиться от обёртки при возврате результата process [см. тело _for]
3.
сделать callback для process, чтобы вынести invariants из _for & co.
4.
@todo склеить get_element и write_value (при вставлении? write_value)
5.
reduce_*pool -> вариант получить именно string, без VString обёртки [часто
обёртка сразу выбрасывается = не нужна]
6.
process вариант получить именно string, без VString обёртки [часто обёртка
сразу выбрасывается = не нужна]
7.
string head, убить 8 байт неправильной link
@voidparams[]
^voidparamsm[$form:field]
@voidparamsm[p]
^p.int(123)
@rolls2[]
$now[^date::now[]]
$d[^date::create($now.year;$now.month)] ^d.sql-string[]<br>
^for[i](1;12){
^d.roll[month](-1) ^d.sql-string[]<br>
}
@cacheexpireschanging[]
^cache[$DB_HOME/keyключ][^date::now(+1)]{ ^rem{1 day}
^cache[^date::now(+4/24/60/60)]
# ^cache(2)
# ^cache(0)
^math:random(100)
}
@cacheexpiresfixed[]
^cache[$DB_HOME/keyключ][^date::now(+2/24/60/60)]{
^math:random(100)
}
@dateoffsets[]
$d[^date::create(^date::now[]+1/24/60)]
#$d[^date::now(+1/24/60)]
^d.sql-string[]
#$d
@exceptionTypes[]
# parser.compile ^test[} компиляция (непарная скобка, ...)
# parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...)
# number.zerodivision ^eval(1/0) ^eval(1%0)
# number.format ^eval(abc*5)
# file.missing ^file:delete[delme] not found
# file.access ^table::load[.] no rights
# image.format ^image::measure[index.html] not gif/jpg
# sql.connect ^connect[mysql://baduser:pass@host/db]{} not found/timeout
# sql.execute ^connect[mysql://okuser:pass@host/db]{^void:sql{select bad}} syntax error
# xml ^xdoc::create{<forgot?>} any error in xml/xslt libs
# smtp.connect not found/timeout
# smtp.execute communication error
@roll2[]
$d[^date::create(2002;4;2;2;2;3)] ^d.sql-string[]<br>
^d.roll[day](+365*3+1) ^d.sql-string[]<br>
@rolls[]
$d[^date::create(2002;4;4)]
^d.sql-string[]<br>
^for[i](1;7){
^d.roll[day](-1)
^d.sql-string[]<br>
}
<hr>
$d[^date::create(2002;3;28)]
^d.sql-string[]<br>
^for[i](1;7){
^d.roll[day](+1)
^d.sql-string[]<br>
}
<hr>
$d[^date::create(2002;12;3)]
^d.sql-string[]<br>
^for[i](1;14){
^d.roll[day](-1)
^d.sql-string[]<br>
}
<hr>
$d[^date::create(2002;10;19)]
^d.sql-string[]<br>
^for[i](1;14){
^d.roll[day](+1)
^d.sql-string[]<br>
}
@exceptions1[]
^try{
aaa
^throw[custom1;paf;is stupid]
}{
^if($exception.type eq custom1){
# $exception.handled(1)
^throw[$exception]
type=$exception.type<br>
source=$exception.source<br>
file=$exception.file<br>
lineno=$exception.lineno<br>
comment=$exception.comment<br>
}
}
@locate_by_expr[]
$t[^table::create{a b
1 nok
2 ok
3 nok
}]
^if(^t.locate($t.a==2)){$t.b}{n}
@method_junction_params[param]
^if($param is junction){junction}{ne junction}
@verifyCookie[value]
^if($cookie:dummyvote eq $value){
$result(1)
}{
$cookie:dummyvote[$value]
$result(0)
}
@execlangs[]
$f[^file::exec[test.pl]]
err:$f.stderr<br>
^process{$f.text}
#$c[^t.columns[]]
#^c.menu{
#* $c.column<br>
#}
c:$t.c<br>
@tobjeresult[]
^table::create{a
12}
@xmlprobs[]
$xmlDataType[^xdoc::load[program.xml]]
#<pre>^taint[^xmlDataType.string[]]
$xmlDataTypes[^xmlDataType.select[programs/program[@id=4]/data]]
#=^xmlDataTypes._count[]=
=^xmlDataTypes.0.getAttribute[type-id]=
@doubleprobs[]
$1(^math:radians(180))
$2($math:PI)
^if(^1.format[%.10f]==^2.format[%.10f]){y;n}
^if($1==$2){y;n}
^if(^math:radians(180)==$math:PI){y;n}
@divnamestop[]
$a(10)
^eval($a\3)
@arrayclone[]
$t[^table::create{a b
1 11
2 22
}]
$c[^table::create[$t]]
^c.append{2 33}
^t.count[]
^c.count[]
@operator_tricks[]
^if(1){$a[^t[]]}
$a!
$a($b)
^if(1){y}{n}
$MAIN:a(^t[] eq OK)
#$MAIN:a(1)
^if($a){y}{n}
#^if(1){y}{n}
$form:if
$a[$.n[1]]
$a.if
@xoutputrusattr[]
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d attr="привет"/>}]
^show_xdoc2[$d]
@xdocset1[]
$d[^xdoc::set{<?xml version="1.0"?><d>=^taint[&]=</d>}]
^show_xdoc2[$d]
@regexp3[]
$s[abcАБВ]
^if(^s.match[][i]){y}{n}
@exec2[]
$a[^file::exec[bin/t.cmd]]
<pre>^taint[$a.text]</pre>|$a.status|$a.stderr<hr>
@tlock[]
^file:lock[lockfile]{
code
}
@xmloutattrwithoutvalue[]
#$ORIGINS(1)
$doc[^xdoc::set{<?xml version="1.0"?><doc background="">zz</doc>}]
$doc[^doc.transform[global.xsl]]
=^taint[html][^doc.string[$.method[html]]]=
@precisionProblem[]
$a[123456789012345678901234567890]
$b(^a.double[])
^b.format{%.20E}
<hr>
^eval(2*2)
@xpath[]
$xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
<document><block><p>привет</p></block></document>
}]
#^show_xdoc2[$xdoc]
$node[^xdoc.selectSingle[/document/block/p]]
^if(def $node){
^if($node is string){
$node
}{
^if($node is hash){
^node._count[]
}{
$node.nodeType
}
}
#$node.firstChild.nodeValue
}{
node not found
}
@ttablesetlang[]
$a-tab-b[a b
1 2]
$t[^table::set{$a-tab-b}]
=$t.a=
<hr>
$t[^table::set[nameless]{^taint[$a-tab-b]}]
=$t.0=
<hr>
$t[^table::set{^untaint{^taint[$a-tab-b]}}]
=$t.a=
#^t.append{1 2}
@mail3[]
^mail:send[
$.from[Александр Петросян <paf@design.ru>]
$.to[Александр Петросян <paf@design.ru>]
$.subject[проверка4]
$.body[
$.text[
$.content-type[$.value[text/plain] $.charset[windows-1251]]
$.body[проверка]
]
$.attachment[
$.value[^file::load[text;index.html]]
$.file-name[привет всем.html]
]
]
]
@ttime[]
$now[^date::now[]]
$now.hour:$now.minute
@tupper[]
$t[abcABCабвАБВ]
$t<br>
^t.upper[]
@treplace[]
$copy-paste-clean[^table::set{a b
. _
, _
+ _
& _
? _
= _}]
$cache_key[^taint[в.а,с+я]&был?тут=недавно.cache]
# почему-то этот replace роняет апач в 500 ошибку :(
#^cache_key.replace[$copy-paste-clean]
$test[abc]
^test.save[$cache_key]saved<br>
$cache[^file:list[.;\.cache^$]]
^file:delete[$cache_key]deleted($cache.name)<br>
@xslt2[]
$xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
<document><block><p>привет</p></block></document>
}]
^show_xdoc2[$xdoc]
^show_xdoc2[^xdoc.transform[templates/_document.xslt]]
<hr>
@tcache2[]
^cache[$DB_HOME/keyключ](2){
^math:random(100)
}
@ttaintuntaint[]
<!-- некий панковский заголовок с буковкой C в круглых скобках -->^taint[html][
]zz
<hr>
^untaint[html]{1^taint[ ]2 3}
@tappend2[]
$t[^table::set{a b}]^t.append{1 2}$t.a
@badvsnprintf[]
^connect[zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz]{
}
@badoracequoting[]
$SQL.connect-string[oracle://webspb:webpwd@mts?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]
^connect[$SQL.connect-string]{
^void:sql{delete from paf}
^void:sql{insert into paf values (1, '$form:text')}
$paf[^table::sql{select * from paf}]
^paf.menu{
$paf.id: ^untaint{$paf.block}<hr>
}
<hr>
^rem{
$news[^table::sql{select description from news}[$.limit(3)]]
^news.menu{
^untaint{$news.description}<hr>
}
<hr>
}
$tables[^table::sql{select table_name from user_tables}]
^tables.menu{
$tables.table_name<br>
}
}
<hr>
$env:PATH
@badconstructors[]
$bred[^string::length[]]
$bred[^response::clear[]]
$bred[^int::int[]]
@xloadwrongtable[]
$constr[^xdoc::load[wrongtable.xml]]
^show_xdoc2[$constr]
@xsetwrongtable[]
$constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251z" ?>
<block-list>^untaint[as-is]{$constructor}</block-list>}]
@tablecolumnerror[]
$t[^table::set{a}]
$t.$a
@roll[]
#$date[^date::set(1970;1;2)]
#^date.roll[month](-1)
$date[^date::set(2038;1;1)]
^date.roll[month](+1)
$date.year $date.month $date.day
@cookie2[]
#=$cookie:clientType[$.value[test]]=<br>
=$cookie:clientType=<br>
@tableset[]
$a[^table::set{a
1
2}]
^eval(100\$a)
@zzz[]
$constructor[
<block1 name="main_srvr" type="0" label="Основное тело" />
<block2 name="main_srvr2" type="0" label="Основное тело" />
]
$constr[^xdoc::set{<?xml version="1.0" encoding="windows-1251" ?>
<block-list>^untaint[as-is]{$constructor}</block-list>}]
$children[$constr.documentElement.childNodes]
^if($children){
^for[i](1;^children._count[]){
$node[$children.$i]
$node.nodeName<br>
}
}
@thashforeach3[]
$h[
$.a[1]
$.b[2]
]
$c[^table::set{a
^h.foreach[key;value]{$value
}}]
$c.a
@thashforeach2[]
$h[
$.a[1]
$.b[2]
]
$c[
^h.foreach[key;value]{
$.$key[$value]
}
]
$c.b
@thashforeach[]
$h[
$.a[1]
$.b[2]
]
^h.foreach[key;value]{
$key=$value<br>
}
@thashdelete[]
$h[$.a[1] $.b[2]]
was:<br>
count=^h._count[] <br>
b='$h.b' <br>
^h.delete[b]
now:<br>
count=^h._count[] <br>
b='$h.b'
@sappend[]
$test[123]
^test.save[test]
^test.save[append;test]
@tappend[]
$test[^table::set{a b
a1 b1}]
^test.save[test]
$test[^table::set{a b
a2 b2}]
^test.save[append;test]
@tform[]
^if(def $form:new_file){y}{n}
<form method="post" enctype="multipart/form-data">
<input type="file" name="new_file" />
<input type=submit>
</input>
@formattest[]
$size(15.124)
^size.format{%.2f}
@filelist[]
$html[^file:list[.;\.html^$]]
^html.menu{
$html.name<br>
}
<hr>
@безнадёжна_попытка_поправить_непоправимое[]
$dom_from_disk[^xdoc::load[input.xml]]
$dom_created_in_air[^xdoc::create[doc]]
^dom_created_in_air.documentElement.appendChild[^dom_from_disk.documentElement.cloneNode(1)]
^show_xdoc2[$dom_created_in_air]
@tcache[]
#^hashfile:clear[cache]
$code[^hashfile::open[$DB_HOME;cache]]
^code.cache[key](2){
^math:random(100)
# ^code.delete[]
}
@thashfileexp[]
$hf[^hashfile::open[$DB_HOME;hashfile]]
$hf.paf[$.value[крут] $.expires(3)]
paf=$hf.paf
<hr>
^hf.foreach[key;value]{
$key=$value<br>
}
<hr>
$hash[^hf.hash[]]
=$hash.paf=
<hr>
@tcounter[]
^tcounterone[$DB_HOME]
other root:
^tcounterone[${DB_HOME}2]
again, first:
^tcounterone[$DB_HOME]
@tcounterone[DB_HOME]
$counter[^hashfile::open[$DB_HOME;counter]]
#^counter.clear[]
^counter.transaction{
# $counter.value(10)
$counter.value($counter.value+1)
# ^counter.delete[value]
$counter.value
}
<hr>
^rem{
$hash[^counter.hash[]]
=$hash.value=
<hr>
}
@tablehash[]
$productList[^table::set{id name
1 носки
2 валенки
3 ушанка
}]
#скажем, у первого дилера
$firstPriceList[^table::set{id price
1 0.3
3 1000
}]
$firstPriceHash[^firstPriceList.hash[id]]
^productList.menu{
продукт "$productList.name" | цена у first: $firstPriceHash.[$productList.id].price<br>
}
@hashfile[]
$hf[^hashfile::assign[hashfile]]
#$hf.paf[крут5]
paf=$hf.paf
@formclass[]
^$form:CLASS.a=$form:CLASS.a
@domdata[]
^if(1){
# $a{^hren[]}
}
$a
$xdoc[^xdoc::create[doc]]
$doc[$xdoc.documentElement]
$name[^doc.appendChild[^xdoc.createElement[name]]]
$text[^name.appendChild[^xdoc.createTextNode[петросян&coz]]]
^untaint[as-is]{=$text.nodeValue=}
@domedit[]
^domdata[]
#$paf.nodeName<br>
#$doc.documentElement.nodeName<br>
^show_xnode1[$xdoc.documentElement;0;1]
<hr>
^show_xdoc2[$xdoc]
<hr>
@domxslt[]
^domdata[]
^show_xdoc2[^xdoc.transform[global.xsl;$.param1[123/]]]
<hr>
@lsplit2[]
$path[/optics/]
$pathTable[^path.lsplit[/]]
^pathTable.menu{
^if(def $pathTable.piece){
=$pathTable.piece=
}
}
@faceesize[]
$k(2)
$pict[^image::load[paf.gif]]
$small[^image::create($pict.width/$k;$pict.height/$k)]
^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;250)
$response:body[^small.gif[]]
@imageresize[]
$k(2)
$pict[^image::create(400*$k;200*$k)]
$pict.line-width(2)
^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
^pict.arc($pict.width/2;$pict.height/2;$pict.width-20;$pict.height-20;0+20;360-20;0xff0000)
#^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-20;0x0000ff)
^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+20;360-20;0xff0000)
$response:body[^pict.gif[]]
#$small[^image::create($pict.width/$k;$pict.height/$k)]
#^small.copy[$pict](0;0;$pict.width;$pict.height;0;0)
#^small.copy[$pict](0;0;$pict.width;$pict.height;0;0;$small.width;$small.height;0)
#$response:body[^small.gif[]]
@tintdefault[]
#$abc[abc]
$abc[33]
^abc.int[z]
#^abc.int(123)
@ifassignhash[]
$h[^if(1){$.a(1);$.a(2)}]
$h.a
@ifpasshash[]
$a[$.e[a]]
$b[$.e[b]]
^ifpasshashdest[^if(1){$a;$b}]
#$x[^if(1){$a}{$b}]
#^ifpasshashdest[$x]
@ifpasshashdest[p]
$p.e
@movedir[]
^file:move[a;deeper/a]
@replace[]
$a[12^;3]
^a.replace[^table::set{from to
2^; !
}]
@set[]
^setdata[]
^a.add[$b]
add:$a.3<br>
^setdata[]
^a.sub[$b]
sub2:$a.2<br>
sub1:$a.1<br>
^setdata[]
$c[^a.union[$b]]
union3:$c.3<br>
union2:$c.2<br>
^setdata[]
$c[^a.intersection[$b]]
intersection3:$c.3<br>
intersection2:$c.2<br>
^setdata[]
intersects:^if(^a.intersects[$b]){y;n}<br>
intersects2:^if(^a.intersects[ ]){y;n}<br>
<hr>
@setdata[]
$a[$.1[a1] $.2[a2]]
$b[ $.2[b2] $.3[b3]]
@hash[]
$h[^hash::create[$._default[123]]]
$h.paf[not kretin]
$h.paf<br>
=$h.that=<br>
@methresult[]
$result[^table::set{1}]
@terror[]
^error[method z must be called with z]
@syntax1[]
#^a[^b]
@syntax2[]
#^a[
@ssave[]
$abc[abc]
^abc.save[abc]
@calendar[]
2001;11:<br>
$week_days[^date:calendar[rus](2001;11)]
<pre>
^week_days.menu{^for[wday](0;7){^if($week_days.$wday){$week_days.$wday; ^; ^;} }<br>}
</pre>
@thash[]
$table[^table::set{id name age
1 paf 278
2 пиф 234
}]
$hash[^table.hash[id;^table::set[nameless]{id
name}]]
$hash.2.id $hash.2.name $hash.2.age
@tdef[]
$s[0]
if 0=^if($s){}{n}<br>
if def 0=^if(def $s){y}{}<br>
<hr>
@ford[]
^for[i](0;5){$i}{($i)}
@tif[]
^if[def]{y;n}
@image[]
$pict[^image::create(400;200)]
^pict.arc($pict.width/2;$pict.height/2;$pict.width-1;$pict.height-1;0;360;0x000000)
^pict.arc($pict.width/2;$pict.height/2;$pict.width-10;$pict.height-10;0+10;360-10;0xff0000)
#^pict.arc($pict.width/2;$pict.height/2;$pict.width;$pict.height;0;360;0xff0000)
^pict.circle($pict.width/2;$pict.height/2;$pict.height/2-10;0x0000ff)
^pict.arc($pict.width/2;$pict.height/2;$pict.height-26;$pict.height-26;0+10;360-10;0xff0000)
$response:body[^pict.gif[]]
@mail2[]
^mail:send[
$.content-type[$.value[text/plain] $.charset[windows-1251]]
$.from[Александр Петросян <paf@design.ru>]
$.to[Александр Петросян <paf@design.ru>]
$.subject[проверка]
$.body[проверка]
]
@cookie[]
$env:HTTP_COOKIE<br>
#$cookie:переменная[test тест ТЕСТ2]
=$cookie:переменная=<br>
#$cookie:переменная2[test тест ТЕСТ3]
=$cookie:переменная2=<br>
=$cookie:CLASS.переменная2=<br>
@response[]
#^if($form:reload){
$response:refresh[$.value[0] $.url[./t.html?uri=$env:SERVER_NAME]]
#}
@xslt[]
^xdata[]
$transformed[^xdoc.transform[global.xsl;$.param1[123/]]]
^show_xdoc2[$transformed]
@regexp2[]
$s[ select]
$s[^s.match[^^\s*][]{!}]
$s
@header[]
$response:refresh[
$.value[0]
$.url[http://design.ru?a=^taint[123]]
]
@ttablerem[]
$table[^table::load[a.cfg]]
^table.menu{$table.a}
@tconnect[]
^connect[mysql://test:test@paf/test?charset=cp1251_koi8&compress=1&timeout=1&named_pipe=1]{
$tables[^table::sql{show tables}]
#$cols[^tables.columns[]]
#$cols.column
^tables.menu{
$tables.[Tables_in_test]<br>
}
}
@pcre[]
$s[1 2]
^s.match[\s;ig]{!}
#^s.match[\d;ig]{!}
@regexp[]
$s[abcАБВ]
^if(^s.match[б][i]){y}{n}
@mail[]
#$ORIGINS(1)
^mail:send[
$.from[paf@design.ru]
$.to[paf@design.ru]
$.body[1
2
3]
]
@exec[]
$a[^file::exec[fc.exe;;a;b]]
$a.status|$a.stderr<hr>
@fori[][i]
^for[i](1;3){... =$i= ...}
@xdata0[]
#$response:content-type[$.value[text/html] $.charset[windows-1251]]
$xdoc[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?>
<!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
<people>
<man id="1" имя="word слово">
<name>P«^;AF B</name>
</man>
<man id="2">
<name>ПИФ^taint[&]</name>
</man>
</people>
}]
@xdata[]
#$response:content-type[$.value[text/html] $.charset[windows-1251]]
$xdoc[^xdoc::set{^process{<?xml version="1.0" encoding="windows-1251"?>
<!--DOCTYPE people SYSTEM "D:\Y\parser3project\parser3\src\www\htdocs\people.dtd"-->
<people>
<man id="1" имя="word слово">
<name>P«^;AF B</name>
</man>
<man id="2">
<name>ПИФ^taint[&]</name>
</man>
</people>
}}]
@xml[]
^xdata[]
^show_xdoc2[$xdoc]<hr>
#^show_xnode1[$xdoc]<hr>
$people[^xdoc.select[*/man]]
#^show1[]
^show_xnodes1[$people]<hr>
#^people.0.owner.hren[]
^show_xnode1[^xdoc.selectSingle[*/man[2]/name];0;1]<hr>
by id:
^show_xnode1[^xdoc.getElementById[1];0;1]
<hr>
@show1[array]
^for[i](0;^array._count[]-1){
$x[$array.$i]
$x.firstChild.nodeValue:
$pattributes[$x.parentNode.attributes]
^if(^pattributes._count[]){
$pattributes.id.name=$pattributes.id.nodeValue
}
<br>
}
@show_xnodes1[array][i]
^for[i](0;^array._count[]-1){
^show_xnode1[$array.$i;0;1]
}
@show_xnode1[x;level;single][l]
^if(def $x){
^for[l](0;$level-1){ ^; ^; ^; ^;}
^if($x.nodeType == $xnode:ELEMENT_NODE){
<^;$x.nodeName
$pairs[$x.attributes]
^if(def $pairs){
$names[^pairs._keys[]]
^names.menu{ $names.key="$pairs.[$names.key].nodeValue"}
}
>^;
}{
[$x.nodeType]
}
^if(def $x.nodeValue){$x.nodeValue}<br>
^show_xnode1[$x.firstChild]($level+1)
^if(!$single){
^show_xnode1[$x.nextSibling]($level)
}
^if($x.nodeType == $xnode:ELEMENT_NODE){
^for[l](0;$level-1){ ^; ^; ^; ^;}<^;/$x.nodeName>^;<br>
}
}
@show_xdoc2[xdoc]
^xdoc.save[out/save.xml;
# $.encoding[utf-8]
$.method[xml]
]
$file[^xdoc.file[
$.encoding[utf-8]
$.method[html]
]]
^file.save[text;out/save_file.html]
#$response:body[^xdoc.file[ $.media-type[text/paf] ]]
<pre>^taint[html][^xdoc.string[
$.method[html]
# $.encoding[utF-8]
# $.omit-xml-declaration[yes]
# $.standalone[no]
# -$.doctype-public[-//W3C//DTD XHTML]
# -$.doctype-system[/a/b/c/]
# $.indent[yes]
# $.media-type[text/paf]
]]
</pre>
E-mail: