--- parser3/operators.ru.txt 2006/11/13 13:47:26 1.182 +++ parser3/operators.ru.txt 2007/02/28 19:09:40 1.190 @@ -132,15 +132,18 @@ Xне сделано, видимо, не будет сделано !odbc://DSN=dsn^;UID=user^;PWD=password^;ClientCharset=parser-charset ClientCharset << charset in which parser thinks client works + + !sqlite://database для работы connect нужно, чтобы заранее(рекомендуется в системном parser3) была определена таблица #sql drivers $SQL[ - $.drivers[^table::set{protocol driver client + $.drivers[^table::create{protocol driver client mysql /www/parser3/libparser3mysql.so /usr/local/lib/mysql/libmysqlclient.so pgsql /www/parser3/libparser3pgsql.so /usr/local/pgsql/lib/libpq.so oracle /www/parser3/libparser3oracle.so /u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data +sqlite /www/parser3/libparser3sqlite.so /usr/local/sqlite/lib/sqlite3.so odbc c:\drives\y\parser3project\odbc\debug\parser3odbc.dll }] ] @@ -195,7 +198,7 @@ odbc c:\drives\y\parser3project\odbc\ !есть глобальная строка/таблица $MAIN:CLASS_PATH с путём/путями к каталогу с классами. !корень путя/путей считается от корня веб пространства. !2. ...относительно строчки из table $MAIN:CLASS_PATH, снизу вверх - задавайте её в parser3.conf вашего сайта + задавайте её в конфигурационном auto.p вашего сайта !глобальная табличка $CHARSETS[$.название[имя файла]] !задаёт какие буквы считаются какими(whitespace, letter, etc), а также их unicode @@ -216,6 +219,7 @@ odbc c:\drives\y\parser3project\odbc\ !$имя whitespace или ${имя}неважно подстановка значения !^имя параметры вызов !$имя.CLASS класс значения + !$имя.CLASS_NAME имя класса !$имя[$.key[] () {}] конструктор элемента переменной-хэша $имя.key !^method[$.key[] () {}] конструктор элемента параметра-хеша $parameter.key $CLASS.имя обращение к переменной класса @@ -257,12 +261,14 @@ odbc c:\drives\y\parser3project\odbc\ 0 или default !^имя.double[] (default) 0 или default + !^имя.bool[] + .bool(true|false) bool значение !^void:sql{запрос без результата}{$.bind[см. table::sql]} !int,double !^имя.int[] целочисленное значение !^имя.double[]+ double значение + !^имя.bool[] + .bool(true|false) bool значение !^имя.inc(на сколько +) !^имя.dec(на сколько -) !^имя.mul(на сколько *) @@ -286,6 +292,7 @@ odbc c:\drives\y\parser3project\odbc\ !^имя.int[] .int(default) целочисленное значение строки. если ломается преобразование, берётся default !^имя.double[]+ .double(default) double значение строки + !^имя.bool[] + .bool(default) bool значение строки если ломается преобразование, берётся default !^имя.format[формат] %d %.2f %02d... !^строка.match[шаблон][[опции поиска]] $prematch $match $postmatch $1 $2... @@ -443,9 +450,11 @@ odbc c:\drives\y\parser3project\odbc\ !cookie !$cookie:имя считать старое или свежезаданное !$cookie:имя[значение] на 90 дней - !$cookie:имя[$.value[значение] $.expires ЗНАЧЕНИЕ ] + !$cookie:имя[$.value[значение] $.expires[ЗНАЧЕНИЕ] $.secure(true)] !значение поля expires может быть 'session', date, или число дней(0дней=session) ! если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" + ! можно устанавливать bool свойства, например $.secure(true), $.httponly(true) + !request !$request:query @@ -561,8 +570,8 @@ odbc c:\drives\y\parser3project\odbc\ !если body указан hash, то это части, будут собраны текстовые блоки, затем вложения !это старый формат, поддерживается для обратной совместимости !если имя части начинается со слова text, то это текстовый блок. - !если имя части начинается со слова attach, то это вложение, формат задания:: - !$attach[$.format[!uue|!base64] $.value[DATA] $.file-name[user-file-name]] + !если имя части начинается со слова file, то это вложение, формат задания:: + !$file[$.format[!uue|!base64] $.value[DATA] $.name[user-file-name]] !важно: при multipart не указывать content-type ^mail:send[ # по-умолчанию, совпадает с source encoding. @@ -590,13 +599,14 @@ odbc c:\drives\y\parser3project\odbc\ $.body[слова] ] #для удобства скриптования можно указать только одну часть, при этом не будет multipart - $.attach[ + $.file[ $.value[^file::load[my beloved.doc]] - $.file-name[мой любимый.doc] + $.name[мой любимый.doc] + $.format[base64] ] - $.attach2[ + $.file2[ $.value[^file::load[my beloved.doc]] - $.file-name[мой любимый.doc] + $.name[мой любимый.doc] ] ] ] @@ -682,6 +692,8 @@ odbc c:\drives\y\parser3project\odbc\ можно переименовывать и двигать каталоги[win32: но не через границу дисков] каталоги для dest создаются с правами 775 каталог старого файла стирается, если после move он остаётся пуст + !^file:copy[имя файла;имя копии файла] + можно копировать только файлы !^file:lock[имя файла]{код} файл при необходимости создаётся блокируется @@ -706,11 +718,16 @@ odbc c:\drives\y\parser3project\odbc\ если есть вторая - это имя файла если есть третья - это content-type !^file.base64[] encode + !^file:base64[имя файла] encode !^file::base64[encoded string] decode !^file:crc32[имя файла] вычисляет crc32 файла с указанным именем !^file.crc32[] вычисляет crc32 объекта + !^file.md5[] + !^file:md5[имя файла] + выдает digest файла, длиной 16 байт в виде строки, + где байты digest выданы в hex виде, впритык, в нижнем регистре !math !$math:PI @@ -803,6 +820,7 @@ xdoc(xnode) ::sql{...} !::create[[URI]]{} старое имя 'set' !::create[[URI]][qualifiedName] + !::create[file] can be usable: $f[^file::load[binary;http://;some http options here...]]$x[^xdoc::create[$f]] URI default = disk path to requested document для каталогов конечный / обязателен !::load[file.xml[;опции]] @@ -1025,9 +1043,9 @@ DATA::=string | file | hash ] !MAIN - это класс, загружаемый на автомате из parser3.conf, + это класс, загружаемый на автомате из конфигурационного auto.p, кучи auto.p и запрашиваемого документа: - !parser3.conf + !конфигурационный auto.p cgi: 1. или полный путь из переменной окружения CGI_PARSER_SITE_CONFIG или рядом с бинарником parser'а @@ -1039,7 +1057,7 @@ DATA::=string | file | hash имя последнего загруженного MAIN, имён у предыдущих нет !после загрузки MAIN класса вызывается его @main[] - !результат которого передаётся в его @post-process[data] if($data is string) ... + !результат которого передаётся в его @postprocess[data] if($data is string) ... !результат которого отдаётся пользователю !если встречается ошибка и try не задан, её можно красиво сообщить пользователю,