--- parser3/operators.txt 2002/11/25 14:10:51 1.98 +++ parser3/operators.txt 2003/04/11 15:00:04 1.111 @@ -301,15 +301,16 @@ odbc c:\drives\y\parser3project\odbc\ логическое значение равно "не пуста?" числовое значение равно count[] !^table::create[[nameless]]{данные} старое имя "set" - !^table::create[table][[$.limit(1) $.offset(5) $.offset[cur]]] + !^table::create[table][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] клонирует таблицу - !^table::load[[nameless;]путь] + reverse << сзаду на перёд (работает пока только в locate, в table::create НЕ работает) + !^table::load[[nameless;]путь[;опции]] !если не nameless, названия колонок берутся из первой строки !пустые строки, и строки в первой колонке содержащие '#', игнорируются !^table::sql{query}[[$.limit(2) $.offset(4) todo:$.default{ ^table::create[...] }]] !^таблица.save[[nameless|append;]путь] !$таблица.поле - !$таблица.fields+ из named таблицы выдаёт текущую запись как Hash + !$таблица.fields из named таблицы выдаёт текущую запись как Hash !^таблица.menu{тело}[разделитель] !^таблица.offset[[whence]](5) сдвигает; без параметра - печатает offset !whence=cur|set @@ -326,11 +327,15 @@ odbc c:\drives\y\parser3project\odbc\ !^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] - добавляет записи из таблицы. таблицы должны иметь одинаковую структуру. !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать - !^таблица.locate[поле;значение] передвигает текущую строку, если найдёт. выдаёт bool - !^таблица.locate(логическое выражение) передвигает текущую строку, если найдёт. выдаёт bool - !^таблица.hash{[поле]|{код}|(выражение)}[[поле значений|table поля значений]][[$.distinct(1)]] + !^таблица.locate[поле;значение][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] + передвигает текущую строку, если найдёт. выдаёт bool + !^таблица.locate(логическое выражение)[[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] + передвигает текущую строку, если найдёт. выдаёт bool + !^таблица.hash{[поле]|{код}|(выражение)}[[поле значений|table поля значений]][[$.distinct(1) $.distinct[tables]]] значением $hash.ключ будет hash в котором поля значений будут ключами поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой + если distinct содержит true, то не будет ошибки при повторяющихся ключах + если distinct содержит tables, то будет создан hash из таблиц, содержащих строки с ключом !^таблица.columns[]+ таблица из одного столбца $column !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало $adults[^man.select($man.age>=18)] @@ -344,6 +349,7 @@ odbc c:\drives\y\parser3project\odbc\ !$hash.ключ !_default - специальный ключ, если задан, то при обращении по ключу, которому нет соответствия, выдаётся _default значение + !$hash.fields выдает $hash. чтобы класс hash был чуть больше похож на класс table !^hash::create[[!copy_from_hash|Xcopy_from_hashfile]] создаёт новый hash, копию старого !^hash.add[слагаемое] @@ -402,6 +408,8 @@ odbc c:\drives\y\parser3project\odbc\ !значение поля или атрибута может быть string или date ! если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" !$response:body[DATA] замещает стандартный ответ + !$response:download[DATA] замещает стандартный ответ, + выставляет флаг, заставляющий browser предложить download !$response:status !^response:clear[] забыть все заданные response поля !$response:charset @@ -568,10 +576,11 @@ Xhashfile смотрит на .ext case insensitive, умеет мерить пока только .gif и .jpg .jpeg !$image.exif << hash после measure jpeg с exif информацией - !$image.exif.DateTime & co - [полный список см. http://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html] - !числа типа int/double, - !перечисления в виде hash с ключами 0..count-1 + !$image.exif.DateTime & co + [полный список см. http://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html] + !числа типа int/double, + !даты типа date + !перечисления в виде hash с ключами 0..count-1 !$картинка.src .width .height !$картинка.line-width число=ширина линий !$картинка.line-style строка=стиль линий '*** * '='*** * *** * *** * ' @@ -615,7 +624,7 @@ Xhashfile !^file:delete[имя файла] !^file:find[имя файла][{когда не нашли}] !^file:list[путь[;шаблон]] = table с колонкой name - !^file::load[text|binary;!big.zip[;!domain_press_release_2001_03_01.zip]] + !^file::load[text|binary;!big.zip[;!domain_press_release_2001_03_01.zip][;опции]] !$файл_который_был_loaded.size !^file::stat[имя файла] !$файл_который_был_stated.size !.adate !.mdate !.cdate @@ -718,7 +727,7 @@ xdoc(xnode) !::create[[URI]][qualifiedName] URI default = disk path to requested document для каталогов конечный / обязателен - !::load[file.xml] + !::load[file.xml[;опции]] !.transform[rules.xsl|xdoc][[params hash]] выдаёт dom шаблон кэшируется, кэш обновляется при изменении даты файла шаблона, или изменении даты файла "имя шаблона.stamp"[проверка даты stamp приоритетнее] @@ -877,11 +886,6 @@ xdoc(xnode) url time url time url time - !$status:db hash - !cache hash db_home=>tables table - name time users - name time users - name time users !$status:stylesheet !cache table file time @@ -937,6 +941,20 @@ xdoc(xnode) там лежат в обратном порядке имена[name] и места вызовов[file line] операторов/методов, приведших к ошибке. +!при загрузке файла (file::load, table::load, xdoc::load) можно указать такое имя файла: + !http://domain/document?params + !а также, возможно, указать опции: + !$.method[GET|HEAD] + !$.timeout(3) << в секундах, по-умолчанию =2 + !$.headers[ + ! $поле[значение] << значение имеет формат, как $response:ЗАГОЛОВОК + !] + !по-умолчанию, user-agent=parser3 + !по-умолчанию, получение http status != 200 >> создает http.status ошибку, + !это можно отключить, передав + !$.any-status(1) + !file::load в дополнительные поля записывает ПОЛЕ:значение (имена полей ответа заглавными буквами) + !системные типы ошибок: !parser.compile ^test[} компиляция (непарная скобка, ...) !parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...) @@ -960,7 +978,9 @@ xdoc(xnode) !email.send $MAIL.sendmail[/shit] sendmail not executable !http.host ^file::load[http://notfound/there] host not found !http.connect ^file::load[http://not_accepting/there] host found, but do not accept connections + !http.timeout ^file::load[http://host/doc] whole load operation failed to complete in # seconds !http.response ^file::load[http://ok/there] host found, connection accepted, bad answer + !http.status ^file::load[http://ok/there] host found, connection accepted, status!=200 !нужно выключить русский apache: CharsetDisable on