--- parser3/operators.txt 2003/11/10 09:28:14 1.138 +++ parser3/operators.txt 2004/03/02 16:56:57 1.160 @@ -92,7 +92,11 @@ Xне сделано, видимо, не будет сделано default as-is !^taint[[lang]][код] default "just tainted, language unknown" - !^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}[во что переименовать @main] + !^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}[ + $.main[во что переименовать @main] + $.file[имя файла из которого, якобы, данный текст] + $.lineno(номер строки в файле, откуда данный текст. можно отрицательный) + ] !^process..[путь][во что переименовать @main] по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS] !^connect[protocol://строка соединения]]{код с ^sql[...]-ями} @@ -119,6 +123,7 @@ Xне сделано, видимо, не будет сделано NLS_ISO_CURRENCY ISO currency symbol NLS_SORT sort sequence ORA_ENCRYPT_LOGIN=TRUE + ClientCharset=parser-charset << charset in which parser thinks client works !odbc://DSN=dsn^;UID=user^;PWD=password @@ -151,10 +156,11 @@ odbc c:\drives\y\parser3project\odbc\ ставить такой префикс перед открывающим апострофом, впритык, везде без проблелов /**имя_поля**/'literal' !^rem{} - !^cache[файл](секунд){код} + !^cache[файл](секунд){код}[{catch код}] !относительное задание времени !скэшировать строку, которая получается при выполнении кода на 'секунд' секунд !если 0секунд, значит не кэшировать, а старый такой стереть + !в catch коде $exception.handled[cache] ^rem{флаг, что exception обработан} !^cache[файл][expires date]{код} !абсолютное задание времени X^cache[файл] удалить файл [не ругает, если его нет] // такое было, больше не будет, делать ^cache(0) @@ -233,12 +239,19 @@ odbc c:\drives\y\parser3project\odbc\ 0 !^имя.pos[...] -1 + !^void.left(n) + ничего не выдаёт + !^void.right(n) + ничего не выдаёт + !^void.mid(p[;n]) + ничего не выдаёт !^имя.int[] (default) 0 или default !^имя.double[] (default) 0 или default !^void:sql{запрос без результата} + !int,double !^имя.int[] целочисленное значение !^имя.double[]+ double значение @@ -299,6 +312,8 @@ odbc c:\drives\y\parser3project\odbc\ !^строка.normalize[] выдает другую строку, в которой фрагменты на одном языке объединены полезно делать перед сложными match операциями, если вы знаете, что входная строка состоит из большого числа фрагментов + !^string.trim[start|both|end[;chars]] выкидывает charset из начала/конца/и начала и конца + default 'chars' -- whitespace chars !table в выражении @@ -369,7 +384,7 @@ odbc c:\drives\y\parser3project\odbc\ !^hash::sql{запрос}[[$.distinct(1) $.limit(2) $.offset(4) todo:$.default{$.field[]...}]] получается hash(ключи=значения первая колонка ответа) of hash(ключи=названия остальных колонкок ответа) - !^hash._keys[]+ таблица из одного столбца $key + !^hash._keys[[название колонки с ключами]]+ таблица из одного столбца $key или как передадут !^hash._count[] !^foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] !^delete[ключ] удалить ключ @@ -380,7 +395,7 @@ odbc c:\drives\y\parser3project\odbc\ !.ключ[значение] положить значение !.ключ[$.value[значение] $.expires ЗНАЧЕНИЕ} положить значение до expires - значение поля expires может быть date, или число дней(0дней=не вечно) + значение поля expires может быть date, или число дней(0дней=на вечно) !.ключ достать !^delete[ключ] удалить ключ !^delete[] удалить файлы, содержащие данные @@ -390,10 +405,10 @@ odbc c:\drives\y\parser3project\odbc\ !^foreach[key|value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] пример: - $uids[^hashfile::assign[/db/uids]] + $uids[^hashfile::open[/db/uids]] $random[23847387taduigh345XGHWElxjgdjg] - $uids.$random[$.value[$uid] $.expires(60*30)] + $uids.$random[$.value[$uid] $.expires(1)] $uid[$persistent.logins.$random] !form @@ -623,6 +638,8 @@ odbc c:\drives\y\parser3project\odbc\ определяющее прожорливость выделялки цветов из палитры [default=150] меньше - точнее приближает цвета, но они быстро кончаются больше - неточно приближает цвет, но бОльшей части хватит + !^картинка.pixel(x;y)[(color)] + узнать или задать цвет пиксела !file !$файл_из_post.name @@ -659,6 +676,13 @@ odbc c:\drives\y\parser3project\odbc\ !^file:justname[/a/some.tar.gz]=some.tar !^file:justext[/a/some.tar.gz]=gz !/some/page.html: ^file:fullpath[a.gif] => /some/a.gif + !^file.sql-string[] внутри ^connect даст правильно escaped строку, которую можно в запрос отдать + !^file::sql[[имя_файла_для_download]]{} + результат запроса должен быть "одна строка". + колонки: + первая колонка - данные + если есть вторая - это имя файла + если есть третья - это content-type !math @@ -714,7 +738,7 @@ odbc c:\drives\y\parser3project\odbc\ !^date.sql-string[] %Y-%m-%d %H:%M:%S where published='$дата.sql-string[]' !^date:calendar[rus|eng;год;месяц] выдаёт неименованную таблицу - столбцы: 0..6, week, weekyear + столбцы: 0..6, week, year !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу столбцы: year, month, day, weekday @@ -777,10 +801,17 @@ xdoc(xnode) выдаёт media-type при подстановке $response:body[сюда] + !если на документ ссылаются так: + parser://method/param/to/that/method + то в качестве документа используется ^MAIN:method[/param/to/that/method] + [примечание: в параметр всегда приходит лидирующая /, даже, если параметров вообще не было] + !xnode DOM1 attributes: !$node.nodeName !$node.nodeValue + !read + !write !$node.nodeType = int ELEMENT_NODE = 1 ATTRIBUTE_NODE = 2 @@ -919,11 +950,6 @@ xdoc(xnode) file time file time file time - !$status:charset hash - !cache table - file - file - file !$status:rusage hash !utime user time used @@ -950,6 +976,9 @@ xdoc(xnode) Return the total number of bytes [EVER(c)PAF] allocated in this process. Never decreases. + !$status:pid process id + !$status:tid thread id + console $console:timeout !$console:line