|
version 1.111, 2003/04/11 15:00:04
|
version 1.129, 2003/11/06 10:09:33
|
|
Line 92 Xне сделано, видимо, не будет сделано
|
Line 92 Xне сделано, видимо, не будет сделано
|
| default as-is |
default as-is |
| !^taint[[lang]][код] |
!^taint[[lang]][код] |
| default "just tainted, language unknown" |
default "just tainted, language unknown" |
| !^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код} |
!^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}[во что переименовать @main] |
| |
!^process..[путь][во что переименовать @main] |
| по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS] |
по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS] |
| !^connect[protocol://строка соединения]]{код с ^sql[...]-ями} |
!^connect[protocol://строка соединения]]{код с ^sql[...]-ями} |
| !mysql://user:pass@{host[:port]|[/unix/socket]}/database? |
!mysql://user:pass@{host[:port]|[/unix/socket]}/database? |
|
Line 271 odbc c:\drives\y\parser3project\odbc\
|
Line 272 odbc c:\drives\y\parser3project\odbc\
|
| s singleline = $ считается концом всего текста |
s singleline = $ считается концом всего текста |
| m multiline = $ считается концом строки[\n], не концом всего текста |
m multiline = $ считается концом строки[\n], не концом всего текста |
| g найти все вхождения, а не одно |
g найти все вхождения, а не одно |
| |
' создавать столбцы prematch, match, postmatch |
| !^строка.match[шаблон][опции поиска]{замена} |
!^строка.match[шаблон][опции поиска]{замена} |
| опции поиска+= |
опции поиска+= |
| g заменить все вхождения, а не одно |
g заменить все вхождения, а не одно |
|
Line 307 odbc c:\drives\y\parser3project\odbc\
|
Line 309 odbc c:\drives\y\parser3project\odbc\
|
| !^table::load[[nameless;]путь[;опции]] |
!^table::load[[nameless;]путь[;опции]] |
| !если не nameless, названия колонок берутся из первой строки |
!если не nameless, названия колонок берутся из первой строки |
| !пустые строки, и строки в первой колонке содержащие '#', игнорируются |
!пустые строки, и строки в первой колонке содержащие '#', игнорируются |
| |
!$.separator[^#09] |
| |
!$.encloser["] по-умолчанию, нет. |
| !^table::sql{query}[[$.limit(2) $.offset(4) todo:$.default{ ^table::create[...] }]] |
!^table::sql{query}[[$.limit(2) $.offset(4) todo:$.default{ ^table::create[...] }]] |
| !^таблица.save[[nameless|append;]путь] |
!^таблица.save[[nameless|append;]путь[;опции, см. load]] |
| !$таблица.поле |
!$таблица.поле |
| !$таблица.fields из named таблицы выдаёт текущую запись как Hash |
!$таблица.fields из named таблицы выдаёт текущую запись как Hash |
| !^таблица.menu{тело}[разделитель] |
!^таблица.menu{тело}[разделитель] |
|
Line 350 odbc c:\drives\y\parser3project\odbc\
|
Line 354 odbc c:\drives\y\parser3project\odbc\
|
| !_default - специальный ключ, если задан, |
!_default - специальный ключ, если задан, |
| то при обращении по ключу, которому нет соответствия, выдаётся _default значение |
то при обращении по ключу, которому нет соответствия, выдаётся _default значение |
| !$hash.fields выдает $hash. чтобы класс hash был чуть больше похож на класс table |
!$hash.fields выдает $hash. чтобы класс hash был чуть больше похож на класс table |
| !^hash::create[[!copy_from_hash|Xcopy_from_hashfile]] |
!^hash::create[[!copy_from_hash|copy_from_hashfile]] |
| создаёт новый hash, копию старого |
создаёт новый hash, копию старого |
| !^hash.add[слагаемое] |
!^hash.add[слагаемое] |
| перезаписывает одноимённые |
перезаписывает одноимённые |
|
Line 384 odbc c:\drives\y\parser3project\odbc\
|
Line 388 odbc c:\drives\y\parser3project\odbc\
|
| !cookie |
!cookie |
| !$cookie:имя считать старое или свежезаданное |
!$cookie:имя считать старое или свежезаданное |
| !$cookie:имя[значение] на 90 дней |
!$cookie:имя[значение] на 90 дней |
| !$cookie:имя[$.value[значение] $.expires(дней, 0дней=session)] |
!$cookie:имя[$.value[значение] $.expires ЗНАЧЕНИЕ ] |
| |
!значение поля expires может быть 'session', date, или число дней(0дней=session) |
| |
! если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" |
| |
|
| !request |
!request |
| !$request:query |
!$request:query |
| !$request:body unprocessed POST request body |
!$request:body unprocessed POST request body |
| !$request:uri |
!$request:uri |
| |
!$request:document-root |
| |
каталог, относительно которого считаются пути в parser, по-умолчанию = $env:DOCUMENT_ROOT |
| |
можно изменить, если на hosting что-то неудобно настроено |
| X!$request:browser это hash, поля: |
X!$request:browser это hash, поля: |
| !$type = ie/nn и !$version = номер, скажем 5.5 |
!$type = ie/nn и !$version = номер, скажем 5.5 |
| X$request:user |
X$request:user |
|
Line 421 odbc c:\drives\y\parser3project\odbc\
|
Line 430 odbc c:\drives\y\parser3project\odbc\
|
| ПРЕДУПРЕЖДЕНИЕ: класс form получает свои поля после обработки всех auto класса MAIN |
ПРЕДУПРЕЖДЕНИЕ: класс form получает свои поля после обработки всех auto класса MAIN |
| поэтому необходимо задать $request/response:charset в одном из них. не после. |
поэтому необходимо задать $request/response:charset в одном из них. не после. |
| |
|
| Xhashfile |
hashfile |
| !^hashfile::open[$DB_HOME;filename] |
!^hashfile::open[filename] |
| !^hashfile.clear[] |
^hashfile.clear[] забыть всё |
| забыть всё |
!.ключ[значение] положить значение |
| !.ключ[значение] положить значение навечно |
.ключ[$.value[значение] $.expires(секунд)} положить значение на expires секунд |
| !.ключ[$.value[значение] $.expires(секунд)} положить значение на expires секунд |
|
| !.ключ достать |
!.ключ достать |
| !^cache[ключ](секунд){код} |
!^delete[ключ] удалить ключ |
| !суть то же, что и "положить+достать", но за один раз и компактнее |
^hash[] |
| !если 0секунд, значит не кэшировать, а старый такой стереть |
|
| !внутри {кода} может быть вызван ^delete[] |
|
| !^delete[[ключ]] удалить ключ |
|
| !буде вызван без параметра изнутри cache, отменяет кэширование блока: |
|
| !блок не будет скэширован, его старое значение будет стёрто |
|
| !^hash[] |
|
| преобразовать в обычный hash |
преобразовать в обычный hash |
| !^foreach[key|value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] |
^foreach[key|value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] |
| |
|
| |
|
| примеры: |
пример: |
| $uids[^hashfile::assign[/db/uids]] |
$uids[^hashfile::assign[/db/uids]] |
| $code:clear[/db/cache]] |
|
| $code[^hashfile::assign[/db/cache]] |
|
| |
|
| $random[23847387taduigh345XGHWElxjgdjg] |
$random[23847387taduigh345XGHWElxjgdjg] |
| $uids.$random[$.value[$uid] $.expires(60*30)] |
$uids.$random[$.value[$uid] $.expires(60*30)] |
| $uid[$persistent.logins.$random] |
$uid[$persistent.logins.$random] |
| |
|
| ^code.cache[заголовки новостей](35){....} |
|
| |
|
| !mail |
!mail |
| !$mail.received=MESSAGE: |
!$mail.received=MESSAGE: |
| .from |
.from |
|
Line 479 Xhashfile
|
Line 476 Xhashfile
|
| $.message#[MESSAGE] (message, message2, ...) |
$.message#[MESSAGE] (message, message2, ...) |
| |
|
| !^mail:send[ |
!^mail:send[ |
| |
$.options[-odd] |
| |
unix: строка, которая будет добавлена к команде запуска sendmail |
| |
-odd означает "быстро поставь в очередь без проверки email" |
| |
win32: игнорируется |
| $.charset[кодировка заголовка и текстовых блоков] |
$.charset[кодировка заголовка и текстовых блоков] |
| $.any-header-field |
$.any-header-field |
| $.text[string] |
$.text[string] |
|
Line 601 Xhashfile
|
Line 602 Xhashfile
|
| если указана ширина_символа, то monospaced, если 0, то ширина_символа = ширине gif |
если указана ширина_символа, то monospaced, если 0, то ширина_символа = ширине gif |
| !^картинка.text(x;y)[текст_надписи] AS_IS |
!^картинка.text(x;y)[текст_надписи] AS_IS |
| !^картинка.length[текст_надписи] AS_IS |
!^картинка.length[текст_надписи] AS_IS |
| !^картинка.gif[] -- кодирует в FILE с content-type=image/gif |
!^картинка.gif[возможно, имя файла] -- кодирует в FILE с content-type=image/gif |
| |
имя файла будет использовано при $response:download |
| !^картинка.arc(center x;center y;width;height;start in degrees;end in degrees;color) |
!^картинка.arc(center x;center y;width;height;start in degrees;end in degrees;color) |
| !^картинка.sector(center x;center y;width;height;start in degrees;end in degrees;color) |
!^картинка.sector(center x;center y;width;height;start in degrees;end in degrees;color) |
| !^картинка.circle(center x;center y;r;color) |
!^картинка.circle(center x;center y;r;color) |
|
Line 653 Xhashfile
|
Line 655 Xhashfile
|
| !/some/page.html: ^file:fullpath[a.gif] => /some/a.gif |
!/some/page.html: ^file:fullpath[a.gif] => /some/a.gif |
| |
|
| |
|
| math |
!math |
| !$math:PI |
!$math:PI |
| !^math:round floor ceiling |
!^math:round floor ceiling |
| !^math:trunc frac |
!^math:trunc frac |
|
Line 663 math
|
Line 665 math
|
| !^math:degrees radians |
!^math:degrees radians |
| !^math:pow sqrt |
!^math:pow sqrt |
| !^math:random(ширина диапазона) |
!^math:random(ширина диапазона) |
| ^math:GUID {C2C0983C-E26E-4169-BD07-77ECE9405BA5} |
!^math:uuid[] |
| |
22C0983C-E26E-4169-BD07-77ECE9405BA5 |
| |
win32: пользуется cryptapi |
| |
unix: пользуется /dev/urandom, |
| |
если нет, /dev/random, |
| |
если нет, rand |
| |
[на solaris /dev/random можно добавить] |
| |
!^math:uid64[] |
| |
BA39BAB6340BE370 |
| |
!^math:md5[string] |
| |
выдает digest строки, длиной 16 байт в виде строки, |
| |
где байты digest выданы в hex виде, впритык, в нижнем регистре |
| !^math:crypt[password;salt] |
!^math:crypt[password;salt] |
| salt prefix $apr1$ вызывает встроенный MD5 алгоритм, |
salt prefix $apr1$ вызывает встроенный MD5 алгоритм, |
| если нет тела salt, оно создаётся случайным |
если нет тела salt, оно создаётся случайным |
|
Line 685 math
|
Line 698 math
|
| для удобного создания по значению из базы |
для удобного создания по значению из базы |
| формат1: %Y[-%m[-%d[ %H[:%M[:%S]]]]] |
формат1: %Y[-%m[-%d[ %H[:%M[:%S]]]]] |
| формат2: %H:%M[:%S] |
формат2: %H:%M[:%S] |
| !$date.year month day hour minute second weekday yearday(0...) daylightsaving |
!^date::unix-timestamp() |
| |
!^date.unix-timestamp[] |
| |
!$date.year month day hour minute second weekday yearday(0...) daylightsaving TZ |
| read-only |
read-only |
| |
TZ="" << локальная зона |
| !^date.roll[year|month|day](+-смещение) сдвигает дату |
!^date.roll[year|month|day](+-смещение) сдвигает дату |
| |
!^date.roll[TZ;Новая зона] говорит, что дата в таком-то часовом поясе: влияет на .hour&co |
| !^date.sql-string[] %Y-%m-%d %H:%M:%S |
!^date.sql-string[] %Y-%m-%d %H:%M:%S |
| where published='$дата.sql-string[]' |
where published='$дата.sql-string[]' |
| !^date:calendar[rus|eng;год;месяц] выдаёт неименованную таблицу |
!^date:calendar[rus|eng;год;месяц] выдаёт неименованную таблицу |
|
Line 873 xdoc(xnode)
|
Line 890 xdoc(xnode)
|
| attribute that is already inuse |
attribute that is already inuse |
| elsewhere |
elsewhere |
| |
|
| |
!memory |
| |
!^memory:compact[] собрать мусор, освободив место под новые данные |
| |
(предупреждение: память процесса никогда не освобождается) |
| |
полезно делать перед XSL transform. |
| |
|
| !status |
!status |
| !чтобы класс был доступен, в apache нужно сказать |
!чтобы класс был доступен, в apache нужно сказать |
| <Location /parser-status.html> |
<Location /parser-status.html> |
|
Line 909 xdoc(xnode)
|
Line 931 xdoc(xnode)
|
| $s[$status:rusage] |
$s[$status:rusage] |
| ^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f] |
^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f] |
| |
|
| |
!$status:memory hash |
| |
!used |
| |
Includes some pages that were allocated but never written. |
| |
|
| |
!free |
| |
|
| |
!ever_allocated_since_compact |
| |
Return the number of bytes allocated since the last collection. |
| |
|
| |
!ever_allocated_since_start |
| |
Return the total number of bytes [EVER(c)PAF] allocated in this process. |
| |
Never decreases. |
| |
|
| |
|
| !DATA::=string | file |
!DATA::=string | file |
| |
|
|
Line 953 xdoc(xnode)
|
Line 988 xdoc(xnode)
|
| !по-умолчанию, получение http status != 200 >> создает http.status ошибку, |
!по-умолчанию, получение http status != 200 >> создает http.status ошибку, |
| !это можно отключить, передав |
!это можно отключить, передав |
| !$.any-status(1) |
!$.any-status(1) |
| !file::load в дополнительные поля записывает ПОЛЕ:значение (имена полей ответа заглавными буквами) |
!$.charset[кодировка удалённых докуметов по-умолчанию] << если сервер вернёт content-type:charset=ОНА_ПЕРЕБИВАЕТ |
| |
!file::load в дополнительные поля записывает |
| |
!ПОЛЕ:значение (имена полей ответа заглавными буквами) |
| |
!tables << хеш их ПОЛЕ->table с единственным столбцом "value". |
| |
в таких таблицах можно брать повторяющиеся заголовки. например, несколько set-cookies |
| |
todo:сделать отдельный cookies |
| |
|
| !системные типы ошибок: |
!системные типы ошибок: |
| !parser.compile ^test[} компиляция (непарная скобка, ...) |
!parser.compile ^test[} компиляция (непарная скобка, ...) |