--- parser3/operators.ru.txt 2003/11/04 10:49:33 1.124 +++ parser3/operators.ru.txt 2003/12/10 14:17:43 1.146 @@ -86,8 +86,8 @@ Xне сделано, видимо, не будет сделано удобно сделать после выставления 401 ошибки ^return[результат] + - отваливает из выполнения метода, выдавая нестандартный результат - ^break[] + - обрывает цикл - ^continue[] + - обрывает итерацию цикла + X^break[] + - обрывает цикл + X^continue[] + - обрывает итерацию цикла !^untaint[[as-is|file-spec|http-header|mail-header|uri|table|sql|js|xml|html|optimized-html]]{код} default as-is !^taint[[lang]][код] @@ -100,7 +100,9 @@ Xне сделано, видимо, не будет сделано charset=cp1251_koi8& timeout=3& compress=1& - named_pipe=1 + named_pipe=1& + autocommit=1 + autocommit если выставить в 0, будет делать commit/rollback !pgsql://user:pass@{host[:port]|[local]}/database? client_encoding=win,[to-find-out]& @@ -149,10 +151,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) @@ -312,7 +315,7 @@ odbc c:\drives\y\parser3project\odbc\ !$.separator[^#09] !$.encloser["] по-умолчанию, нет. !^table::sql{query}[[$.limit(2) $.offset(4) todo:$.default{ ^table::create[...] }]] - !^таблица.save[[nameless|append;]путь] + !^таблица.save[[nameless|append;]путь[;опции, см. load]] !$таблица.поле !$таблица.fields из named таблицы выдаёт текущую запись как Hash !^таблица.menu{тело}[разделитель] @@ -354,7 +357,7 @@ odbc c:\drives\y\parser3project\odbc\ !_default - специальный ключ, если задан, то при обращении по ключу, которому нет соответствия, выдаётся _default значение !$hash.fields выдает $hash. чтобы класс hash был чуть больше похож на класс table - !^hash::create[[!copy_from_hash|Xcopy_from_hashfile]] + !^hash::create[[!copy_from_hash|copy_from_hashfile]] создаёт новый hash, копию старого !^hash.add[слагаемое] перезаписывает одноимённые @@ -372,6 +375,28 @@ odbc c:\drives\y\parser3project\odbc\ !^foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] !^delete[ключ] удалить ключ +!hashfile + !^hashfile::open[filename] + !^hashfile.clear[] забыть всё + !.ключ[значение] положить значение + !.ключ[$.value[значение] $.expires ЗНАЧЕНИЕ} + положить значение до expires + значение поля expires может быть date, или число дней(0дней=на вечно) + !.ключ достать + !^delete[ключ] удалить ключ + !^delete[] удалить файлы, содержащие данные + !^hash[] + преобразовать в обычный hash + попутно стирает устаревшие пары + !^foreach[key|value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] + + пример: + $uids[^hashfile::open[/db/uids]] + + $random[23847387taduigh345XGHWElxjgdjg] + $uids.$random[$.value[$uid] $.expires(1)] + $uid[$persistent.logins.$random] + !form [берётся первый элемент из одноимённых из GET, потом первый из POST] !$form:поле = string/file @@ -430,36 +455,6 @@ odbc c:\drives\y\parser3project\odbc\ ПРЕДУПРЕЖДЕНИЕ: класс form получает свои поля после обработки всех auto класса MAIN поэтому необходимо задать $request/response:charset в одном из них. не после. -Xhashfile - !^hashfile::open[$DB_HOME;filename] - !^hashfile.clear[] - забыть всё - !.ключ[значение] положить значение навечно - !.ключ[$.value[значение] $.expires(секунд)} положить значение на expires секунд - !.ключ достать - !^cache[ключ](секунд){код} - !суть то же, что и "положить+достать", но за один раз и компактнее - !если 0секунд, значит не кэшировать, а старый такой стереть - !внутри {кода} может быть вызван ^delete[] - !^delete[[ключ]] удалить ключ - !буде вызван без параметра изнутри cache, отменяет кэширование блока: - !блок не будет скэширован, его старое значение будет стёрто - !^hash[] - преобразовать в обычный hash - !^foreach[key|value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] - - - примеры: - $uids[^hashfile::assign[/db/uids]] - $code:clear[/db/cache]] - $code[^hashfile::assign[/db/cache]] - - $random[23847387taduigh345XGHWElxjgdjg] - $uids.$random[$.value[$uid] $.expires(60*30)] - $uid[$persistent.logins.$random] - - ^code.cache[заголовки новостей](35){....} - !mail !$mail.received=MESSAGE: .from @@ -488,6 +483,10 @@ Xhashfile $.message#[MESSAGE] (message, message2, ...) !^mail:send[ + $.options[-odd] + unix: строка, которая будет добавлена к команде запуска sendmail + -odd означает "быстро поставь в очередь без проверки email" + win32: игнорируется $.charset[кодировка заголовка и текстовых блоков] $.any-header-field $.text[string] @@ -779,10 +778,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 @@ -916,12 +922,12 @@ xdoc(xnode) url time url time url time - !$status:stylesheet + $status:stylesheet !cache table file time file time file time - !$status:charset hash + $status:charset hash !cache table file file @@ -952,6 +958,10 @@ xdoc(xnode) Return the total number of bytes [EVER(c)PAF] allocated in this process. Never decreases. +console + $console:timeout + !$console:line + read/write строку !DATA::=string | file