|
|
| version 1.257, 2024/12/19 23:17:54 | version 1.259, 2024/12/20 17:17:47 |
|---|---|
| Line 14 | Line 14 |
| пустой hash не defined | пустой hash не defined |
| eq ne lt gt le ge для сравнения строк, | eq ne lt gt le ge для сравнения строк, |
| in "/dir/" для проверки, находится ли текущий документ в каталоге | in "/dir/" для проверки, находится ли текущий документ в каталоге |
| ["внутри не допустимы выражения, если надо сравнить со сложным, | ["внутри не допустимы выражения, если надо сравнить со сложным, пусть это будет переменная] |
| пусть это будет переменная] | |
| is 'type' для проверки типа левого операнда, | is 'type' для проверки типа левого операнда, |
| можно проверить, "не hash ли параметр метода?" | можно проверить, "не hash ли параметр метода?" |
| -f для проверки существования файла на диске, | -f для проверки существования файла на диске, |
| -d для проверки существования каталога на диске, | -d для проверки существования каталога на диске, |
| строка в кавычках или апострофах - строка, без кавычек или апострофов строка до | строка в кавычках или апострофах - строка, без кавычек или апострофов строка до ближайшего whitespace |
| ближайшего whitespace | |
| числовой литерал бывает 0xABC | числовой литерал бывает 0xABC |
| приоритеты: | приоритеты: |
| /* logical */ | /* logical */ |
| Line 33 | Line 31 |
| %left "is" "def" "in" "-f" "-d" | %left "is" "def" "in" "-f" "-d" |
| %left '!' | %left '!' |
| /* bitwise */ | /* bitwise */ |
| %left '!|' | %left '!|' |
| %left '|' | %left '|' |
| %left '&' | %left '&' |
| %left '~' | %left '~' |
| /* numerical */ | /* numerical */ |
| %left '-' '+' | %left '-' '+' |
| %left '*' '/' '%' '\\' | %left '*' '/' '%' '\\' |
| %left '~' /* negation: unary */ | %left '~' /* negation: unary */ |
| литералы | |
| литералы: | |
| true | true |
| false | false |
| ^if(условие){когда да}{когда нет} | ^if(условие){когда да}{когда нет} |
| ^if(условие1){да}[(условие2){да}[(условие2){да}[...]]]{нет} -- количество доп. условий не ограничено (в общем elseif это :) | ^if(условие1){да}[(условие2){да}[(условие2){да}[...]]]{нет} |
| количество доп. условий не ограничено (в общем elseif это :) | |
| ^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}} | ^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}} |
| Line 58 | Line 58 |
| ^try{ | ^try{ |
| ... | ... |
| ^throw[sql.connect[;вася[;болван]]] // был ^error[текст] | ^throw[sql.connect[;вася[;ошибся]]] // был ^error[текст] |
| ^throw[ | ^throw[ |
| $.type[sql.connect] | $.type[sql.connect] |
| $.source[вася] | $.source[вася] |
| $.comment[болван] | $.comment[ошибся] |
| ] | ] |
| ... | ... |
| }{ | }{ |
| Line 77 | Line 77 |
| $exception.type = sql.connect | $exception.type = sql.connect |
| $exception.file $exception.lineno $exception.colno [если не запрещены при компиляции] | $exception.file $exception.lineno $exception.colno [если не запрещены при компиляции] |
| $exception.source = вася | $exception.source = вася |
| $exception.comment = болван | $exception.comment = ошибся |
| } | } |
| ^case[DEFAULT]{ | ^case[DEFAULT]{ |
| код, обрабатывающий другую ошибку | код, обрабатывающий другую ошибку |
| Line 86 | Line 86 |
| } | } |
| } | } |
| ^break[] - обрывает цикл | ^break[] |
| ^break(true|false) - обрывает цикл, если true | обрывает цикл |
| ^break(true|false) | |
| ^continue[] - обрывает итерацию цикла | обрывает цикл, если true |
| ^continue(true|false) - обрывает итерацию цикла, если true | |
| ^continue[] | |
| ^return[] - обрывает выполнение метода | обрывает итерацию цикла |
| ^return[value] - присваивает $result значение value и обрывает выполнение метода | ^continue(true|false) |
| обрывает итерацию цикла, если true | |
| ^return[] | |
| обрывает выполнение метода | |
| ^return[value] | |
| присваивает $result значение value и обрывает выполнение метода | |
| ^untaint[[as-is|file-spec|uri|http-header|mail-header|sql|js|json|parser-code|regex|xml|html|optimized-[as-is|xml|html]]]{код} | ^untaint[[as-is|file-spec|uri|http-header|mail-header|sql|js|json|parser-code|regex|xml|html|optimized-[as-is|xml|html]]]{код} |
| default as-is | default as-is |
| Line 107 | Line 113 |
| ^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}[ | ^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}[ |
| $.main[во что переименовать @main] | $.main[во что переименовать @main] |
| $.file[имя файла из которого, якобы, данный текст] | $.file[имя файла из которого, якобы, данный текст] |
| $.lineno(номер строки в файле, откуда данный текст. можно отрицательный) | $.lineno(номер строки в файле, откуда данный текст, можно отрицательный) |
| ] | ] |
| ^process..[путь][во что переименовать @main] | ^process..[путь][во что переименовать @main] |
| по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS] | по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS] |
| Line 137 | Line 143 |
| ClientCharset=parser-charset& << charset in which parser thinks client works | ClientCharset=parser-charset& << charset in which parser thinks client works |
| autocommit=1 | autocommit=1 |
| для работы connect нужно, чтобы заранее(рекомендуется в системном конфигурационном auto.p) | для работы connect нужно, чтобы заранее (рекомендуется в системном конфигурационном auto.p) была определена таблица |
| была определена таблица | |
| #sql drivers | #sql drivers |
| $SQL[ | $SQL[ |
| $.drivers[^table::create{protocol driver client | $.drivers[^table::create{protocol driver client |
| mysql /www/parser3/libparser3mysql.so libmysqlclient.so | mysql $prefix/libparser3mysql.so libmysqlclient.so |
| pgsql /www/parser3/libparser3pgsql.so libpq.so | pgsql $prefix/libparser3pgsql.so libpq.so |
| sqlite /www/parser3/libparser3sqlite.so sqlite3.so | sqlite $prefix/libparser3sqlite.so sqlite3.so |
| odbc parser3odbc.dll | odbc parser3odbc.dll |
| }] | }] |
| ] | ] |
| Line 158 odbc parser3odbc.dll | Line 163 odbc parser3odbc.dll |
| в catch коде $exception.handled[cache] ^rem{флаг, что exception обработан} | в catch коде $exception.handled[cache] ^rem{флаг, что exception обработан} |
| ^cache[файл][expires date]{код}[{catch код}] | ^cache[файл][expires date]{код}[{catch код}] |
| абсолютное задание времени | абсолютное задание времени |
| ^cache[файл] удалить файл [не ругает, если его нет] | ^cache[файл] |
| удалить файл [не ругает, если его нет] | |
| ^cache(секунд) | ^cache(секунд) |
| ^cache[expires date] | ^cache[expires date] |
| сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'" | сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'" |
| в пределе: ^cache(0) отменить кеширование | в пределе: ^cache(0) отменить кеширование |
| ^cache[] выдаёт текущую expires date | ^cache[] |
| выдаёт текущую expires date | |
| у всех методов есть локальная переменная $result, если в неё что положить, | у всех методов есть локальная переменная $result, если в неё что положить, |
| то это будет результатом метода, а не его тело | то это будет результатом метода, а не его тело |
| Line 173 odbc parser3odbc.dll | Line 180 odbc parser3odbc.dll |
| use(^use или @USE) ищет и подключает файл: | use(^use или @USE) ищет и подключает файл: |
| 1. если путь начинается с /, то считается, что это путь от корня веб пространства | 1. если путь начинается с /, то считается, что это путь от корня веб пространства |
| 2. относительно текущей директории. | 2. относительно текущей директории |
| 3. относительно строк из table $MAIN:CLASS_PATH, снизу вверх. | 3. относительно строк из table $MAIN:CLASS_PATH, снизу вверх |
| $MAIN:CLASS_PATH - глобальная строка или таблица с путём или путями к каталогу | $MAIN:CLASS_PATH - глобальная строка или таблица с путём или путями к каталогу |
| с классами (от корня веб пространства), задавайте её в конфигурационном auto.p | с классами (от корня веб пространства), задавайте её в конфигурационном auto.p |
| глобальная табличка $CHARSETS[$.название[имя файла]] | глобальная табличка $CHARSETS[$.название[имя файла]] |
| задаёт какие буквы считаются какими(whitespace, letter, etc), а также их unicode | задаёт какие буквы считаются какими (whitespace, letter, etc), а также их unicode |
| формат: tab delimited файл, с заголовком: | формат: tab delimited файл, с заголовком: |
| char white-space digit hex-digit letter word lowercase unicode1 unicode2 | char white-space digit hex-digit letter word lowercase unicode1 unicode2 |
| A x x x a 0x0041 0xFF21 | A x x x a 0x0041 0xFF21 |
| Line 193 odbc parser3odbc.dll | Line 200 odbc parser3odbc.dll |
| $имя[новое значение] | $имя[новое значение] |
| $имя(математическое выражение нового значения) | $имя(математическое выражение нового значения) |
| $имя{код нового значения} | $имя{код нового значения} |
| $имя whitespace или ${имя}неважно подстановка значения | $имя whitespace или ${имя}неважно - вывод значения переменой |
| ^имя параметры вызов | ^имя параметры - вызов |
| $имя.CLASS класс значения | $имя.CLASS - класс значения |
| $имя.CLASS_NAME имя класса | $имя.CLASS_NAME - имя класса |
| $имя[$.key[] () {}] конструктор элемента переменной-хеша $имя.key | $имя[$.key[] () {}] - конструктор переменной-хеша с элементом $имя.key |
| ^method[$.key[] () {}] конструктор элемента параметра-хеша $parameter.key | ^method[$.key[] () {}] - конструктор параметра-хеша с элементом $parameter.key |
| $CLASS.имя обращение к переменной класса | $CLASS.имя обращение к переменной класса |
| имя заканчивается перед: пробел tab linefeed ; ] } ) " < > + * / % & | = ! ' , ? {уточнить} | имя заканчивается перед: пробел tab linefeed ; ] } ) " < > + * / % & | = ! ' , ? |
| т.е. можно $имя,aaaa | т.е. можно $имя,aaaa |
| но если нужно после имени букву, скажем -, то ${имя}- | но если нужно после имени символ, скажем -, то ${имя}- |
| в выражениях + и - являются дополнительными концами имени | в выражениях + и - являются дополнительными концами имени |
| Line 219 odbc parser3odbc.dll | Line 226 odbc parser3odbc.dll |
| (математическое выражение) вычисляется много раз внутри вызова, | (математическое выражение) вычисляется много раз внутри вызова, |
| | [код] вычисляется один раз перед вызовом, | | [код] вычисляется один раз перед вызовом, |
| | {код} вычисляется 0 или много раз внутри вызова, | | {код} вычисляется 0 или много раз внутри вызова, |
| везде допустимы ; внутри - делает много параметров в одних скобках | допустимы ';' чтобы сделать много параметров в одних скобках |
| void | void |
| доступны все методы, присутствующие у объекта класса string, результат как у пустой строки | доступны все методы, присутствующие у объекта класса string, результат как у пустой строки |
| ^void:sql{запрос без результата}{$.bind[см. table::sql]} | ^void:sql{запрос без результата}{$.bind[см. table::sql]} |
| int,double | int,double |
| ^имя.int[] целочисленное значение | ^имя.int[] |
| ^имя.double[] double значение | целочисленное значение |
| ^имя.bool[] .bool(true|false) bool значение | ^имя.double[] |
| double значение | |
| ^имя.bool[] ^name.bool(true|false) | |
| bool значение | |
| ^имя.inc(на сколько +) | ^имя.inc(на сколько +) |
| ^имя.dec(на сколько -) | ^имя.dec(на сколько -) |
| ^имя.mul(на сколько *) | ^имя.mul(на сколько *) |
| Line 292 string | Line 302 string |
| сохраняет строку в файл | сохраняет строку в файл |
| ^строка.trim[start|both|end|left|right[;chars]] | ^строка.trim[start|both|end|left|right[;chars]] |
| выкидывает chars из начала/конца/и начала и конца | выкидывает chars из начала/конца/и начала и конца |
| default 'chars' -- whitespace chars | default 'chars' = whitespace chars |
| ^строка.trim[chars] | ^строка.trim[chars] |
| выкидывает chars из начала и конца | выкидывает chars из начала и конца |
| ^строка.base64[ $.pad(bool) $.wrap(bool) $.url-safe(bool) ] encode | ^строка.base64[ $.pad(bool) $.wrap(bool) $.url-safe(bool) ] encode |
| ^string:base64[encoded[; $.pad(bool) $.strict(bool) url-safe(bool) ]] decode | ^string:base64[encoded[; $.pad(bool) $.strict(bool) $.url-safe(bool) ]] decode |
| ^строка.idna[] | ^строка.idna[] |
| IDNA кодирование, поддержка кириллических доменов | IDNA кодирование, поддержка кириллических доменов |
| ^string:idna[encoded] | ^string:idna[encoded] |
| Line 326 table | Line 336 table |
| если не nameless, названия колонок берутся из первой строки | если не nameless, названия колонок берутся из первой строки |
| пустые строки, и строки в первой колонке содержащие '#', игнорируются | пустые строки, и строки в первой колонке содержащие '#', игнорируются |
| $.separator[^#09] | $.separator[^#09] |
| $.encloser["] по-умолчанию, нет. | $.encloser["] по-умолчанию, нет |
| ^table::sql{query}[[$.limit(2) $.offset(4) $.bind[hash]]] | ^table::sql{query}[[$.limit(2) $.offset(4) $.bind[hash]]] |
| bind привязывает переменные в запросе к их значениям | bind привязывает переменные в запросе к их значениям |
| пока реализован только для oracle | пока реализован только для oracle |
| Line 354 table | Line 364 table |
| ^таблица.append[ $.имя столбца[значение столбца] ] | ^таблица.append[ $.имя столбца[значение столбца] ] |
| ^таблица.insert{данные} добавить запись на текущую позицию | ^таблица.insert{данные} добавить запись на текущую позицию |
| ^таблица.insert[ $.имя столбца[значение столбца] ] | ^таблица.insert[ $.имя столбца[значение столбца] ] |
| ^таблица.delete[] - стирает запись с текущей позиции | ^таблица.delete[] |
| стирает запись с текущей позиции | |
| ^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] | ^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] |
| добавляет записи из таблицы, таблицы должны иметь одинаковую структуру | добавляет записи из таблицы, таблицы должны иметь одинаковую структуру |
| ^таблица.flip[] | ^таблица.flip[] |
| Line 394 hash | Line 405 hash |
| $хеш.ключ | $хеш.ключ |
| _default - специальный ключ, если задан, | _default - специальный ключ, если задан, |
| то при обращении по ключу, которому нет соответствия, выдаётся _default значение | то при обращении по ключу, которому нет соответствия, выдаётся _default значение |
| $хеш.fields выдает $hash. чтобы класс hash был чуть больше похож на класс table | $хеш.fields |
| выдает $hash, чтобы класс hash был чуть больше похож на класс table | |
| ^hash::create[[|copy_from_hash|copy_from_hashfile]] | ^hash::create[[|copy_from_hash|copy_from_hashfile]] |
| создаёт новый hash, копию старого | создаёт новый hash, копию старого |
| ^хеш.add[слагаемое] | ^хеш.add[слагаемое] |
| Line 409 hash | Line 421 hash |
| получается hash(ключи=значения первая колонка ответа) of hash(ключи=названия остальных колонкок ответа) или | получается hash(ключи=значения первая колонка ответа) of hash(ключи=названия остальных колонкок ответа) или |
| string=значение каждого элемента - строка, при этом надо указать ровно два столбца или | string=значение каждого элемента - строка, при этом надо указать ровно два столбца или |
| table=значение каждого элемента - таблица | table=значение каждого элемента - таблица |
| ^хеш.keys[[название колонки с ключами]] + таблица из одного столбца key или как передадут | ^хеш.keys[[название колонки с ключами]] |
| таблица из одного столбца key или как передадут | |
| ^хеш.count[] | ^хеш.count[] |
| ^хеш.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] | ^хеш.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] |
| ^хеш.delete[ключ] | ^хеш.delete[ключ] |
| Line 432 hash | Line 445 hash |
| hashfile | hashfile |
| ^hashfile::open[filename] | ^hashfile::open[filename] |
| ^хешфайл.clear[] забыть всё | ^хешфайл.clear[] |
| $хешфайл.ключ[значение] положить значение | забыть всё |
| $хешфайл.ключ[значение] | |
| положить значение | |
| $хешфайл.ключ[$.value[значение] $.expires[ЗНАЧЕНИЕ]} | $хешфайл.ключ[$.value[значение] $.expires[ЗНАЧЕНИЕ]} |
| положить значение до expires | положить значение до expires |
| значение поля expires может быть date, или число дней(0дней=на вечно) | значение поля expires может быть date, или число дней(0дней=на вечно) |
| $хешфайл.ключ достать | $хешфайл.ключ достать |
| ^хешфайл.delete[ключ] удалить ключ | ^хешфайл.delete[ключ] удалить ключ |
| ^хешфайл.delete[] удалить файлы, содержащие данные | ^хешфайл.delete[] удалить файлы, содержащие данные |
| Line 445 hashfile | Line 460 hashfile |
| попутно стирает устаревшие пары | попутно стирает устаревшие пары |
| ^хешфайл.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] | ^хешфайл.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] |
| ^хешфайл.release[] | ^хешфайл.release[] |
| записать данные и снять блокировки. | записать данные и снять блокировки |
| при повторном обращении к элементам откроется автоматически. | при повторном обращении к элементам откроется автоматически |
| ^хешфайл.cleanup[] пробежаться по всем элементам и удалить устаревшие. | ^хешфайл.cleanup[] |
| пробежаться по всем элементам и удалить устаревшие. | |
| пример: | пример: |
| $sessions[^hashfile::open[/db/sessions]] | $sessions[^hashfile::open[/db/sessions]] |
| $sid[^math:uuid[]] | $sid[^math:uuid[]] |
| $sessions.$sid[$.value[$uid] $.expires(1)] | $sessions.$sid[$.value[$uid] $.expires(1)] |
| $uid[$sessions.$sid] | $uid[$sessions.$sid] |
| Line 502 array | Line 517 array |
| $.sparse(true) - создать разреженный массив. Первая колонка данных должна содержать индексы, | $.sparse(true) - создать разреженный массив. Первая колонка данных должна содержать индексы, |
| по которым будут размещены значения (аналогично ^hash::sql{}) | по которым будут размещены значения (аналогично ^hash::sql{}) |
| получается array of hash (ключи=названия остальных колонкок ответа) или | получается array of hash (ключи=названия остальных колонкок ответа) или |
| string=значение каждого элемента - строка, при этом надо указать ровно два столбца или | string = значение каждого элемента - строка, при этом надо указать ровно два столбца или |
| table=значение каждого элемента - таблица | table = значение каждого элемента - таблица |
| ^массив.keys[[название колонки с ключами]] | ^массив.keys[[название колонки с ключами]] |
| таблица из одного столбца key или переданного названия с индексами инициализированных элементов массива | таблица из одного столбца key или переданного названия с индексами инициализированных элементов массива |
| ^массив.count[] | ^массив.count[] |
| Line 559 cookie | Line 574 cookie |
| $cookie:имя считать старое или свежезаданное | $cookie:имя считать старое или свежезаданное |
| $cookie:имя[значение] на 90 дней | $cookie:имя[значение] на 90 дней |
| $cookie:имя[$.value[значение] $.expires[ЗНАЧЕНИЕ] $.secure(true) $.domain[имя домена] $.httponly(true)] | $cookie:имя[$.value[значение] $.expires[ЗНАЧЕНИЕ] $.secure(true) $.domain[имя домена] $.httponly(true)] |
| значение поля expires может быть 'session', date, или число дней(0дней=session) | значение поля expires может быть 'session', date, или число дней (0дней=session) |
| если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" | если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" |
| $cookie:fields | $cookie:fields |
| hash со всеми cookies | hash со всеми cookies |
| Line 593 response | Line 608 response |
| $attribute[zzz] field: abc; {attribute=zzz}<<часть | $attribute[zzz] field: abc; {attribute=zzz}<<часть |
| значение поля или атрибута может быть string или date | значение поля или атрибута может быть string или date |
| если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" | если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" |
| $response:headers накопленные поля | $response:headers |
| $response:body[DATA] замещает стандартный ответ | накопленные поля |
| $response:download[DATA] замещает стандартный ответ, | $response:body[DATA] |
| выставляет флаг, заставляющий browser предложить download | замещает стандартный ответ |
| $response:download[DATA] | |
| замещает стандартный ответ, выставляет флаг, заставляющий browser предложить download | |
| $response:status | $response:status |
| ^response:clear[] забыть все заданные response поля | ^response:clear[] забыть все заданные response поля |
| $response:charset | $response:charset |
| Line 607 response | Line 624 response |
| не добавляет к content-type ничего, если хочется, это надо сделать вручную | не добавляет к content-type ничего, если хочется, это надо сделать вручную |
| ПРЕДУПРЕЖДЕНИЕ: необходимо задать $request/response:charset до использования полей класса form | ПРЕДУПРЕЖДЕНИЕ: необходимо задать $request/response:charset до использования полей класса form |
| regex | regex |
| в выражении | в выражении |
| логическое значение всегда равно true | логическое значение всегда равно true |
| числовое значение равно количеству байт скомпилированного шаблона. | числовое значение равно количеству байт скомпилированного шаблона |
| ^regex::create[шаблон-строка|regex][[опции поиска]] | ^regex::create[шаблон-строка|regex][[опции поиска]] |
| ^шаблон.size[] количество байт скомпилированного шаблона | ^шаблон.size[] |
| если значение очень большое - стоит почитать документацию по pcre и, возможно, переписать шаблон. | количество байт скомпилированного шаблона |
| ^шаблон.study_size[] размер study-структуры. если==0 - шаблон не может быть "изучен" | если значение очень большое - стоит почитать документацию по pcre и, возможно, переписать шаблон |
| $шаблон.pattern текст шаблона | ^шаблон.study_size[] |
| $шаблон.options строка с исходным текстом опций | размер study-структуры. если==0 - шаблон не может быть "изучен" |
| $шаблон.pattern | |
| текст шаблона | |
| $шаблон.options | |
| строка с исходным текстом опций | |
| reflection | reflection |
| ^reflection:create[класс;конструктор[;пара;[мет[;ры]]]] вызывает указанный конструктор класса (не более 100 параметров) | ^reflection:create[класс;конструктор[;пара[;мет[;ры]]]] |
| ^reflection:create[ $.class[name] $.constructor[name] $.arguments[ $.1[па] $.2[рам] $.3[етры] ] ] вызывает указанный конструктор класса | вызывает указанный конструктор класса (не более 100 параметров) |
| ^reflection:classes[] хеш со всеми классами. ключ -- имя класса, значение бывает methoded (класс с методами) или void | ^reflection:create[ $.class[name] $.constructor[name] $.arguments[ $.1[па] $.2[рам] $.3[етры] ] ] |
| ^reflection:class[объект] класс переданного объекта | вызывает указанный конструктор класса |
| ^reflection:class_name[объект] имя класса переданного объекта | ^reflection:classes[] |
| ^reflection:base[объект] родительский класс переданного объекта | хеш со всеми классами. ключ = имя класса, значение бывает methoded (класс с методами) или void |
| ^reflection:base_name[объект] имя родительского класса переданного объекта | ^reflection:class[объект] |
| ^reflection:class_by_name[имя класса] получение класса по имени | класс переданного объекта |
| ^reflection:class_alias[имя класса;новое имя класса] задает псевдоним для указанного класса | ^reflection:class_name[объект] |
| ^reflection:def[class;имя класса] проверка класса на существование | имя класса переданного объекта |
| ^reflection:methods[класс] хеш со списком методов указанного класса, значения -- строки 'native' или 'parser' | ^reflection:base[объект] |
| ^reflection:method[класс или объект;имя метода] возвращает junction-method класса или объекта | родительский класс переданного объекта |
| ^reflection:filename[объект или класс или метод] возвращает имя файла, где определен объект, класс или метод | ^reflection:base_name[объект] |
| ^reflection:fields[класс или объект] хеш со списком статических полей указанного класса или динамических полей указанного объекта | имя родительского класса переданного объекта |
| ^reflection:fields_reference[объект] редактируемый хеш динамических полей указанного объекта | ^reflection:class_by_name[имя класса] |
| ^reflection:field[класс или объект;имя поля] возвращает значение указанного поля класса или объекта. getter-ы игнорируются. | получение класса по имени |
| ^reflection:copy[источник;назначение] копирует поля из одного объекта или класса в другой | ^reflection:class_alias[имя класса;новое имя класса] |
| ^reflection:uid[класс или объект] возвращает идентификатор объекта или класса | задает псевдоним для указанного класса |
| ^reflection:method_info[класс;метод] хеш с параметрами указанного метода класса | ^reflection:def[class;имя класса] |
| $.inherited[класс] имя класса, где метод был определён (возвращается только если метод был определён в предке) | проверка класса на существование |
| $.overridden[класс] имя класса, где метод был определён (возвращается только если метод был определён в предке) | ^reflection:methods[класс] |
| хеш со списком методов указанного класса, значения - строки 'native' или 'parser' | |
| ^reflection:method[класс или объект;имя метода] | |
| возвращает junction-method класса или объекта | |
| ^reflection:filename[объект или класс или метод] | |
| возвращает имя файла, где определен объект, класс или метод | |
| ^reflection:fields[класс или объект] | |
| хеш со списком статических полей указанного класса или динамических полей указанного объекта | |
| ^reflection:fields_reference[объект] | |
| редактируемый хеш динамических полей указанного объекта | |
| ^reflection:field[класс или объект;имя поля] | |
| возвращает значение указанного поля класса или объекта. getter-ы игнорируются. | |
| ^reflection:copy[источник;назначение] | |
| копирует поля из одного объекта или класса в другой | |
| ^reflection:uid[класс или объект] | |
| возвращает идентификатор объекта или класса | |
| ^reflection:method_info[класс;метод] | |
| хеш с параметрами указанного метода класса | |
| $.inherited[класс] имя класса, где метод был определён (возвращается только если метод был определён в предке) | |
| $.overridden[класс] имя класса, где метод был определён (возвращается только если метод был определён в предке) | |
| для native классов возвращается хеш: | для native классов возвращается хеш: |
| .min_params(минимально необходимое число параметров) | .min_params(минимально необходимое число параметров) |
| .max_params(максимально возможное число параметров) | .max_params(максимально возможное число параметров) |
| .call_type[dynamic|static|any] | .call_type[dynamic|static|any] |
| для parser классов возвращается хеш: | для parser классов возвращается хеш: |
| ключ -- номер параметра (0, 1, ...), значение - имя параметра | ключ - номер параметра (0, 1, ...), значение - имя параметра |
| ^reflection:dynamical[[object or class, caller if absent]] | ^reflection:dynamical[[object or class, caller if absent]] |
| возвращает true, если метод был вызван из динамического контекста при передаче | возвращает true, если метод был вызван из динамического контекста при передаче |
| параметра возвращает true, если передан динамический объект, false если класс | параметра возвращает true, если передан динамический объект, false если класс |
| ^reflection:delete[класс или объект;имя переменной] удаляет переменную с указанным именем в указанном классе или объекте | ^reflection:delete[класс или объект;имя переменной] |
| ^reflection:is[имя элемента;имя класса][[контекст]] аналог оператора is, позволяющий определить, является ли элемент кодом. | удаляет переменную с указанным именем в указанном классе или объекте |
| ^reflection:tainting[[язык|tainted|optimized];строка] строка, в которой каждому символу исходной строки соотвествует символ с кодом преобразования | ^reflection:is[имя элемента;имя класса][[контекст]] |
| ^reflection:stack[ $.args(false/true) $.locals(false/true) $.limit(n) $.offset(o)] текущее состояние стека вызовов методов на парсере | аналог оператора 'is', позволяющий определить, является ли элемент кодом. |
| ^reflection:tainting[[язык|tainted|optimized];строка] | |
| строка, в которой каждому символу исходной строки соотвествует символ с кодом преобразования | |
| ^reflection:stack[ $.args(false/true) $.locals(false/true) $.limit(n) $.offset(o)] | |
| текущее состояние стека вызовов методов на парсере | |
| ^reflection:mixin[источник; $.to[получатель] $.name[имя] $.methods(true/false) $.fields(true/false) $.overwrite(false/true) ] | ^reflection:mixin[источник; $.to[получатель] $.name[имя] $.methods(true/false) $.fields(true/false) $.overwrite(false/true) ] |
| копирует в класс методы и поля другого класса | копирует в класс методы и поля другого класса |
| Line 720 mail | Line 762 mail |
| $.content-type[$.value[text/plain] $.charset[windows-1251]] | $.content-type[$.value[text/plain] $.charset[windows-1251]] |
| $.from["вася" <vasya@design.ru>] | $.from["вася" <vasya@design.ru>] |
| $.to["петя" <petya@design.ru>] | $.to["петя" <petya@design.ru>] |
| $.subject[пойдём пивка] | $.subject[тема] |
| $.body[ | $.body[ |
| слова | слова |
| ] | ] |
| Line 734 mail | Line 776 mail |
| если body указан hash, то это части, будут собраны текстовые блоки, затем вложения | если body указан hash, то это части, будут собраны текстовые блоки, затем вложения |
| это старый формат, поддерживается для обратной совместимости | это старый формат, поддерживается для обратной совместимости |
| если имя части начинается со слова text, то это текстовый блок. | если имя части начинается со слова text, то это текстовый блок. |
| если имя части начинается со слова file, то это вложение, формат задания:: | если имя части начинается со слова file, то это вложение, формат задания: |
| $file[$.format[uue|base64] $.value[DATA] $.name[user-file-name]] | $file[$.format[uue|base64] $.value[DATA] $.name[user-file-name]] |
| важно: при multipart не указывать content-type | важно: при multipart не указывать content-type |
| ^mail:send[ | ^mail:send[ |
| # по-умолчанию, совпадает с source encoding. | # по-умолчанию, совпадает с source encoding |
| # задаёт кодировку body | # задаёт кодировку body |
| $.charset[windows-1251] | $.charset[windows-1251] |
| # нет умолчания | # нет умолчания |
| $.content-type[$.value[text/plain] $.charset[windows-1251]] | $.content-type[$.value[text/plain] $.charset[windows-1251]] |
| $.from["вася" <vasya@design.ru>] | $.from["вася" <vasya@design.ru>] |
| $.to["петя" <petya@design.ru>] | $.to["петя" <petya@design.ru>] |
| $.subject[пойдём пивка] | $.subject[тема] |
| $.body[ | $.body[ |
| слова | слова |
| ] | ] |
| Line 755 mail | Line 797 mail |
| ^mail:send[ | ^mail:send[ |
| $.from["вася" <vasya@design.ru>] | $.from["вася" <vasya@design.ru>] |
| $.to["петя" <petya@design.ru>] | $.to["петя" <petya@design.ru>] |
| $.subject[пойдём пивка] | $.subject[тема] |
| $.body[ | $.body[ |
| $.text[ | $.text[ |
| # задаёт кодировку body | # задаёт кодировку body |
| Line 766 mail | Line 808 mail |
| ] | ] |
| # для удобства можно указать только одну часть, при этом не будет multipart | # для удобства можно указать только одну часть, при этом не будет multipart |
| $.file[ | $.file[ |
| $.value[^file::load[my beloved.doc]] | $.value[^file::load[my beloved.doc]] |
| $.name[мой любимый.doc] | $.name[my beloved.doc] |
| $.format[base64] | $.format[base64] |
| ] | ] |
| $.file2[ | $.file2[ |
| $.value[^file::load[my beloved.doc]] | $.value[^file::load[my beloved.doc]] |
| $.name[мой любимый.doc] | $.name[my beloved.doc] |
| ] | ] |
| ] | ] |
| ] | ] |
| для отправки под unix используется программа с параметрами, задаваемая | для отправки под unix используется программа с параметрами, задаваемая |
| Line 781 mail | Line 823 mail |
| если не будет задана, проверяется, доступна ли /usr/sbin/sendmail или | если не будет задана, проверяется, доступна ли /usr/sbin/sendmail или |
| /usr/lib/sendmail и, если доступна, то запускается с параметром "-t". | /usr/lib/sendmail и, если доступна, то запускается с параметром "-t". |
| под win32 используется SMTP протокол, сервер задаётся | под Windows используется SMTP протокол, сервер задаётся |
| $MAIL.SMTP[smtp.domain.ru] | $MAIL.SMTP[smtp.domain.ru] |
| image | image |
| $картинка[^image::measure[DATA[; $.exif(bool) $.xmp(bool) $.xmp-charset[] $.video(bool) ]]] | $картинка[^image::measure[DATA[; $.exif(bool) $.xmp(bool) $.xmp-charset[] $.video(bool) ]]] |
| смотрит на .ext case insensitive, | смотрит на .ext case insensitive, |
| умеет мерить .gif, .jpg, tiff, bmp, webp и mp4 (mov) | умеет мерить gif, jpg, tiff, bmp, webp и mp4 (mov) |
| $картинка.exif << hash после measure jpeg с exif информацией и $.exif(true) | $картинка.exif << hash после measure jpeg с exif информацией и $.exif(true) |
| $image.exif.DateTime & co | $image.exif.DateTime & co |
| [полный список см. http://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html] | [полный список см. https://exiftool.org/TagNames/EXIF.html] |
| числа типа int/double, | числа типа int/double, |
| даты типа date | даты типа dateб |
| перечисления в виде hash с ключами 0..count-1 | перечисления в виде hash с ключами 0..count-1 |
| $картинка.src .width .height | $картинка.src .width .height |
| $картинка.line-width число=ширина линий | $картинка.line-width число=ширина линий |
| Line 814 image | Line 856 image |
| высота символа = высота картинки/количество букв в наборе | высота символа = высота картинки/количество букв в наборе |
| если указана ширина_символа, то monospaced, если 0, то ширина_символа = ширине gif | если указана ширина_символа, то monospaced, если 0, то ширина_символа = ширине gif |
| ^картинка.font[набор_букв;имя_файла_шрифта.gif; | ^картинка.font[набор_букв;имя_файла_шрифта.gif; |
| $.space(ширина_пробела) // по умолчанию = ширине gif | $.space(ширина_пробела) // по умолчанию = ширине gif |
| $.width(ширина_символа) // см. выше, по умолчанию proportional | $.width(ширина_символа) // см. выше, по умолчанию proportional |
| $.spacing(расстояние между буквами) // по умолчанию = 1 | $.spacing(расстояние между буквами) // по умолчанию = 1 |
| ] | ] |
| ^картинка.text(x;y)[текст_надписи] AS_IS | ^картинка.text(x;y)[текст_надписи] AS_IS |
| ^картинка.length[текст_надписи] AS_IS | ^картинка.length[текст_надписи] AS_IS |
| Line 829 image | Line 871 image |
| при заданных dest_w/dest_h делает изменение размера кусочка | при заданных dest_w/dest_h делает изменение размера кусочка |
| при уменьшении делает resample | при уменьшении делает resample |
| годится только для уменьшения простой[малоцветной] дребедени вроде графиков/pie, | годится только для уменьшения простой[малоцветной] дребедени вроде графиков/pie, |
| для thumbnais не годится. | для thumbnais не годится |
| при не указанном dest_h сохраняет aspect ratio | при не указанном dest_h сохраняет aspect ratio |
| tolerance - некое число[квадрат расстояния в RGB пространстве до искомого цвета], | tolerance - некое число[квадрат расстояния в RGB пространстве до искомого цвета], |
| определяющее прожорливость выделялки цветов из палитры [default=150] | определяющее прожорливость выделялки цветов из палитры [default=150] |
| меньше - точнее приближает цвета, но они быстро кончаются | меньше - точнее приближает цвета, но они быстро кончаются |
| больше - неточно приближает цвет, но бОльшей части хватит | больше - неточно приближает цвет, но большей части хватит |
| ^картинка.pixel(x;y)[(color)] | ^картинка.pixel(x;y)[(color)] |
| узнать или задать цвет пиксела | узнать или задать цвет пиксела |
| file | file |
| $файл_из_post.name | $файл_из_post.name |
| $файл_из_post.size | $файл_из_post.size |
| Line 866 file | Line 907 file |
| ^file::exec[[text|binary;]имя файла[;env hash[;1cmd[;2line[;3ar[;4g[;5s;...under unix max 50 args]]]]]]] | ^file::exec[[text|binary;]имя файла[;env hash[;1cmd[;2line[;3ar[;4g[;5s;...under unix max 50 args]]]]]]] |
| любой аргумент может быть строкой или массивом строк | любой аргумент может быть строкой или массивом строк |
| options: | options: |
| $.stdin[текст|файл] если пусто, отключается автоматическое пересовывание данных HTTP-POST | $.stdin[текст|файл] если пусто, отключается автоматическое пересовывание данных HTTP-POST |
| ^file:move[старое имя файла;новое имя файла] | ^file:move[старое имя файла;новое имя файла] |
| можно переименовывать и двигать каталоги[win32: но не через границу дисков] | можно переименовывать и двигать каталоги[win32: но не через границу дисков] |
| каталоги для dest создаются с правами 775 | каталоги для dest создаются с правами 775 |
| Line 885 file | Line 926 file |
| ^file:justname[/a/some.tar.gz|file]=some.tar | ^file:justname[/a/some.tar.gz|file]=some.tar |
| ^file:justext[/a/some.tar.gz|file]=gz | ^file:justext[/a/some.tar.gz|file]=gz |
| /some/page.html: ^file:fullpath[a.gif] => /some/a.gif | /some/page.html: ^file:fullpath[a.gif] => /some/a.gif |
| ^файл.sql-string[] внутри ^connect даст правильно escaped строку, которую можно в запрос отдать | ^файл.sql-string[] |
| внутри ^connect даст правильно escaped строку, которую можно в запрос отдать | |
| ^file::sql{query}[[ $.name[имя_файла_для_download] $.content-type[пользовательский content-type] ]] | ^file::sql{query}[[ $.name[имя_файла_для_download] $.content-type[пользовательский content-type] ]] |
| результат запроса должен быть "одна строка". | результат запроса должен быть "одна строка". |
| колонки: | колонки: |
| первая колонка - данные | первая колонка - данные |
| если есть вторая - это имя файла | если есть вторая - это имя файла |
| если есть третья - это content-type | если есть третья - это content-type |
| ^файл.base64[ $.pad(bool) $.wrap(bool) $.url-safe(bool) ] encode | ^файл.base64[ $.pad(bool) $.wrap(bool) $.url-safe(bool) ] |
| encode | |
| ^file:base64[имя файла[; $.pad(bool) $.wrap(bool) $.url-safe(bool) ]] | ^file:base64[имя файла[; $.pad(bool) $.wrap(bool) $.url-safe(bool) ]] |
| encode | encode |
| ^file::base64[encoded string[; $.pad(bool) $.strict(bool) url-safe(bool) ]] | ^file::base64[encoded string[; $.pad(bool) $.strict(bool) url-safe(bool) ]] |
| decode | |
| ^file::base64[mode;имя файла;encoded string[; $.content-type[...] $.pad(bool) $.strict(bool) url-safe(bool) ]] | ^file::base64[mode;имя файла;encoded string[; $.content-type[...] $.pad(bool) $.strict(bool) url-safe(bool) ]] |
| decode | decode |
| ^file:crc32[имя файла] | ^file:crc32[имя файла] |
| вычисляет crc32 файла с указанным именем | вычисляет crc32 файла с указанным именем |
| ^файл.crc32[] | ^файл.crc32[] |
| вычисляет crc32 объекта | вычисляет crc32 объекта |
| ^файл.md5[] | ^файл.md5[], ^file:md5[имя файла] |
| ^file:md5[имя файла] | выдает digest файла, длиной 16 байт в виде строки, |
| выдает digest файла, длиной 16 байт в виде строки, | |
| где байты digest выданы в hex виде, впритык, в нижнем регистре | где байты digest выданы в hex виде, впритык, в нижнем регистре |
| math | math |
| Line 928 math | Line 971 math |
| unix: пользуется /dev/urandom, | unix: пользуется /dev/urandom, |
| если нет, /dev/random, | если нет, /dev/random, |
| если нет, rand | если нет, rand |
| [на solaris /dev/random можно добавить] | |
| ^math:uuid7[ $.lower(bool) $.solid(bool) ] | ^math:uuid7[ $.lower(bool) $.solid(bool) ] |
| 0193CBF0-7898-7000-A391-AC513CC15658 | 0193CBF0-7898-7000-A391-AC513CC15658 |
| https://www.rfc-editor.org/rfc/rfc9562.html#name-uuid-version-7 | https://www.rfc-editor.org/rfc/rfc9562.html#name-uuid-version-7 |
| Line 940 math | Line 982 math |
| ^math:crypt[password;salt] | ^math:crypt[password;salt] |
| salt prefix $apr1$ вызывает встроенный MD5 алгоритм, | salt prefix $apr1$ вызывает встроенный MD5 алгоритм, |
| если нет тела salt, оно создаётся случайным | если нет тела salt, оно создаётся случайным |
| $1$ вызывает MD5 алгоритм функции OS 'crypt', если поддерживается [заведомо нет на solaris]. | $1$ вызывает MD5 алгоритм функции OS 'crypt', если поддерживается. |
| другие salt читайте документацию по функции OS 'crypt'. | другие salt читайте документацию по функции OS 'crypt'. |
| ^math:crc32[string] | ^math:crc32[string] |
| вычисляет crc32 строки | вычисляет crc32 строки |
| Line 967 json | Line 1009 json |
| $.int(false) отключить встроенный парсинг целых чисел (по умолчанию включен) | $.int(false) отключить встроенный парсинг целых чисел (по умолчанию включен) |
| в этом случае они попадут в результирующий объект как строки | в этом случае они попадут в результирующий объект как строки |
| $.distinct[first|last|all] как будет происходить разбор дублирующихся ключей у объектов | $.distinct[first|last|all] как будет происходить разбор дублирующихся ключей у объектов |
| first -- будет оставлен первый встретившийся элемент | first - будет оставлен первый встретившийся элемент |
| last -- будет оставлен последний встретившийся элемент | last - будет оставлен последний встретившийся элемент |
| all -- будут оставлены все элементы. при этом элементы, начиная со 2 | all - будут оставлены все элементы. при этом элементы, начиная со 2 |
| получат числовые суффиксы (key_2 итд) | получат числовые суффиксы (key_2 итд) |
| по умолчанию дублирующиеся ключи приведут к exception | по умолчанию дублирующиеся ключи приведут к exception |
| $.object[method-junction] пользовательский метод[ключ;объект], которому будут передаваться все разобранные | $.object[method-junction] пользовательский метод[ключ;объект], которому будут передаваться все разобранные |
| Line 983 json | Line 1025 json |
| $.skip-unknown(false) отключить exception и выдавать 'null' при сериализации объектов с типами | $.skip-unknown(false) отключить exception и выдавать 'null' при сериализации объектов с типами |
| отличных от void, bool, string, int, double, date, table, hash и file | отличных от void, bool, string, int, double, date, table, hash и file |
| $.indent(true) форматировать результирующую строку табуляциями по глубине вложенности | $.indent(true) форматировать результирующую строку табуляциями по глубине вложенности |
| $.date[sql-string|gmt-string|iso-string|unix-timestamp] формат вывода даты, по умолчанию -- sql-string | $.date[sql-string|gmt-string|iso-string|unix-timestamp] |
| $.table[object|array|compact] формат вывода таблицы, по умолчанию -- object | формат вывода даты, по умолчанию -- sql-string |
| $.table[object|array|compact] | |
| формат вывода таблицы, по умолчанию -- object | |
| object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...] | object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...] |
| array: [["c1","c2",...] || null (for nameless),["v11","v12",...],...] | array: [["c1","c2",...] || null (for nameless),["v11","v12",...],...] |
| compact: ["v11" || ["v11","v12",...],...] | compact: ["v11" || ["v11","v12",...],...] |
| Line 994 json | Line 1038 json |
| $.тип[method-junction] любой тип можно вывести с помощью пользовательского метода, который | $.тип[method-junction] любой тип можно вывести с помощью пользовательского метода, который |
| должен принимать 3 параметра: ключ, объект данного типа и опции | должен принимать 3 параметра: ключ, объект данного типа и опции |
| вызова ^json:string[] | вызова ^json:string[] |
| $._default[метод] пользовательский метод, будет вызываться для вывода всех объектов пользовательских | $._default[метод] пользовательский метод, будет вызываться для вывода всех объектов пользовательских |
| классов. Метод должен принимать 3 параметра: ключ, объект и опции вызова. | классов. Метод должен принимать 3 параметра: ключ, объект и опции вызова. |
| $._default[имя метода] имя пользователького метода, при его наличии он будет вызван для | $._default[имя метода] имя пользователького метода, при его наличии он будет вызван для сериализации |
| сериализации | |
| $.void[null|string] неопределенное значение будет выдано в виде null (по умолчанию) | $.void[null|string] неопределенное значение будет выдано в виде null (по умолчанию) |
| или пустой строки | или пустой строки |
| ]] | ]] |
| сериализует системный или пользовательский объект в json-строку | сериализует системный или пользовательский объект в json-строку |
| date | date |
| время типа time можно использовать в выражениях, подставляет количество дней с epoch [1 января 1970 (UTC)], дробное. | время типа date можно использовать в выражениях, подставляет количество дней с epoch [1 января 1970 (UTC)], дробное |
| Строковое значение в местном времени, численное в UTC, диапазон от 0000-00-00 00:00:00 до 9999-12-31 23:59:59. | строковое значение в местном времени, численное в UTC, диапазон от 0000-00-00 00:00:00 до 9999-12-31 23:59:59 |
| по умолчанию используется установленная средствами OS временная зона | по умолчанию используется установленная средствами OS временная зона |
| ^date::now[] | ^date::now[] |
| ^date::now(смещение в днях) | ^date::now(смещение в днях) |
| выдаёт сейчас+смещение | выдаёт сейчас+смещение |
| Line 1029 date | Line 1072 date |
| $дата.year month day hour minute second weekday yearday(0...) daylightsaving TZ weekyear | $дата.year month day hour minute second weekday yearday(0...) daylightsaving TZ weekyear |
| TZ="" << локальная зона | TZ="" << локальная зона |
| $дата.year month day hour minute second можно задать новое значение, остальные read only | $дата.year month day hour minute second можно задать новое значение, остальные read only |
| ^дата.double[] ^дата.int[] | |
| количество дней с epoch [1 января 1970 (UTC)], дробное или целое | |
| ^дата.roll[year|month|day](+-смещение) | ^дата.roll[year|month|day](+-смещение) |
| сдвигает дату | сдвигает дату |
| ^дата.roll[TZ;Новая зона] | ^дата.roll[TZ;Новая зона] |
| Line 1036 date | Line 1081 date |
| ^date:roll[TZ;Новая зона] | ^date:roll[TZ;Новая зона] |
| говорит, что по умолчанию все даты в таком-то часовом поясе | говорит, что по умолчанию все даты в таком-то часовом поясе |
| ^дата.sql-string[[datetime|date|time]] | ^дата.sql-string[[datetime|date|time]] |
| datetime или без параметра -- %Y-%m-%d %H:%M:%S | datetime или без параметра - %Y-%m-%d %H:%M:%S |
| date -- %Y-%m-%d | date - %Y-%m-%d |
| time -- %H:%M:%S | time - %H:%M:%S |
| where published='^дата.sql-string[]' | where published='^дата.sql-string[]' |
| ^date:calendar[rus|eng](год;месяц) | ^date:calendar[rus|eng](год;месяц) |
| выдаёт неименованную таблицу, столбцы: 0..6, week, year | выдаёт неименованную таблицу, столбцы: 0..6, week, year |
| Line 1048 date | Line 1093 date |
| вернёт последний день месяца | вернёт последний день месяца |
| ^дата.last-day[] | ^дата.last-day[] |
| вернёт последний день месяца $дата | вернёт последний день месяца $дата |
| ^дата.gmt-string[] Fri, 23 Mar 2001 09:32:23 GMT | ^дата.gmt-string[] |
| ^дата.iso-string[] 2001-03-23T12:32:23+03 | Fri, 23 Mar 2001 09:32:23 GMT |
| ^дата.iso-string[] | |
| 2001-03-23T12:32:23+03 | |
| xdoc(xnode) | xdoc(xnode) |
| $xdoc.search-namespaces hash, where keys=prefixes, values=urls | $xdoc.search-namespaces hash, where keys=prefixes, values=urls |
| Line 1077 xdoc(xnode) | Line 1123 xdoc(xnode) |
| Implementations that do not know whether attributes are of type ID or not | Implementations that do not know whether attributes are of type ID or not |
| are expected to return null. | are expected to return null. |
| кодировка строк и умолчание для $.encoding | кодировка строк и умолчание для $.encoding равно текущей кодировке выходной страницы, $response:charset |
| равно текущей кодировке выходной страницы, | |
| $response:charset | |
| ::sql{...} | ::sql{...} |
| ::create[[URI]]{<?xml?><string/>} старое имя 'set' | ::create[[URI]]{<?xml?><string/>} старое имя 'set' |
| ::create[[URI]][qualifiedName] | ::create[[URI]][qualifiedName] |
| Line 1094 xdoc(xnode) | Line 1139 xdoc(xnode) |
| или изменении даты файла "имя шаблона.stamp"[проверка даты stamp приоритетнее] | или изменении даты файла "имя шаблона.stamp"[проверка даты stamp приоритетнее] |
| <xsl:output | <xsl:output |
| method = "xml" | "html" | "text" | method = "xml" | "html" | "text" |
| version = nmtoken | version = nmtoken |
| encoding = string | encoding = string |
| omit-xml-declaration = "yes" | "no" | omit-xml-declaration = "yes" | "no" |
| standalone = "yes" | "no" | standalone = "yes" | "no" |
| cdata-section-elements = qnames | cdata-section-elements = qnames |
| indent = "yes" | "no" | indent = "yes" | "no" |
| media-type = string /> | media-type = string /> |
| параметры передаются как есть, не xpath выражения | параметры передаются как есть, не xpath выражения |
| .string[[output options]] | .string[[output options]] |
| Line 1115 xdoc(xnode) | Line 1160 xdoc(xnode) |
| то в качестве документа используется ^MAIN:method[/param/to/that/method] | то в качестве документа используется ^MAIN:method[/param/to/that/method] |
| [примечание: в параметр всегда приходит лидирующая /, даже, если параметров вообще не было] | [примечание: в параметр всегда приходит лидирующая /, даже, если параметров вообще не было] |
| xnode | xnode |
| DOM1 attributes: | DOM1 attributes: |
| $node.nodeName | $node.nodeName |
| Line 1149 xnode | Line 1193 xnode |
| $element_node.tagName | $element_node.tagName |
| $attribute_node.specified = boolean | $attribute_node.specified = boolean |
| true if the attribute received its value explicitly in the XML document, | true if the attribute received its value explicitly in the XML document, |
| or if a value was assigned programatically with the setValue function. | or if a value was assigned programmatically with the setValue function. |
| false if the attribute value came from the default value declared in the document's DTD. | false if the attribute value came from the default value declared in the document's DTD. |
| $attribute_node.name | $attribute_node.name |
| $attribute_node.value | $attribute_node.value |
| $text_node/cdata_node/comment_node.substringData | $text_node/cdata_node/comment_node.substringData |
| $pi_node.target = target of this processing instruction | $pi_node.target = target of this processing instruction |
| XML defines this as being the first token following the markup | XML defines this as the first token following the markup |
| that begins the processing instruction. | that begins the processing instruction. |
| $pi_node.data = The content of this processing instruction | $pi_node.data = The content of this processing instruction |
| This is from the first non white space character after the target | From the first non-whitespace character after the target |
| to the character immediately preceding the ?>. | to the character immediately preceding the ?>. |
| document_node. | document_node. |
| readonly attribute DocumentType doctype | readonly attribute DocumentType doctype |
| Line 1190 xnode | Line 1234 xnode |
| NodeList getElementsByTagName(in DOMString name) | NodeList getElementsByTagName(in DOMString name) |
| void normalize() | void normalize() |
| Introduced in DOM Level 2: | Introduced in DOM Level 2: |
| Node importNode(in Node importedNode, in boolean deep) raises(DOMException) | Node importNode(in Node importedNode, in boolean deep) raises(DOMException) |
| NodeList getElementsByTagNameNS(in DOMString namespaceURI, in DOMString localName) | NodeList getElementsByTagNameNS(in DOMString namespaceURI, in DOMString localName) |
| Line 1204 xnode | Line 1247 xnode |
| ^node.selectNumber[xpath/query/expression] = double if any or die | ^node.selectNumber[xpath/query/expression] = double if any or die |
| ^node.selectString[xpath/query/expression] = string if any or die | ^node.selectString[xpath/query/expression] = string if any or die |
| memory | memory |
| ^memory:compact[] собрать мусор, освободив место под новые данные | ^memory:compact[] |
| (предупреждение: память процесса никогда не освобождается) | собрать мусор, освободив место под новые данные (предупреждение: память процесса никогда не освобождается) |
| полезно делать перед XSL transform. | полезно делать перед XSL transform |
| ^memory:auto-compact(частота сборки) | |
| задает режим автоматической сборки мусора, от 0 (выключена) до 5 (максимальная) | |
| status | status |
| $status:sql | $status:sql |
| Line 1235 status | Line 1278 status |
| ^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 | $status:memory hash |
| used | used |
| Includes some pages that were allocated but never written. | includes some pages that were allocated but never written |
| free | free |
| ever_allocated_since_compact | ever_allocated_since_compact |
| Return the number of bytes allocated since the last collection. | return the number of bytes allocated since the last collection |
| ever_allocated_since_start | ever_allocated_since_start |
| Return the total number of bytes [EVER(c)PAF] allocated in this process. | return the total number of bytes [EVER(c)PAF] allocated in this process, |
| Never decreases. | never decreases |
| $status:pid | $status:pid |
| process id | process id |
| $status:tid | $status:tid |
| Line 1256 console | Line 1299 console |
| $console:line | $console:line |
| read/write строку | read/write строку |
| DATA::=string | file | hash | DATA::=string | file | hash |
| hash вида | hash вида |
| [ | [ |
| $.file[имя файла на диске] | $.file[имя файла на диске] |
| Line 1266 DATA::=string | file | hash | Line 1307 DATA::=string | file | hash |
| $.mdate[date] | $.mdate[date] |
| ] | ] |
| MAIN | MAIN |
| это класс, загружаемый на автомате из конфигурационного auto.p, кучи auto.p и запрашиваемого документа: | это класс, загружаемый на автомате из конфигурационного auto.p, кучи auto.p и запрашиваемого документа: |
| конфигурационный auto.p | конфигурационный auto.p |
| Line 1290 MAIN | Line 1330 MAIN |
| $exception.source строка, из-за которой случилась проблема | $exception.source строка, из-за которой случилась проблема |
| $exception.comment комментарий english | $exception.comment комментарий english |
| stack табличка из колонок file line name, | stack табличка из колонок file line name, |
| там лежат в обратном порядке имена[name] и места вызовов[file line] | там лежат в обратном порядке имена[name] и места вызовов[file line] операторов/методов, приведших к ошибке. |
| операторов/методов, приведших к ошибке. | |
| при загрузке файла (file::load, table::load, xdoc::load) можно указать такое имя файла: | при загрузке файла (file::load, table::load, xdoc::load) можно указать такое имя файла: |
| http://domain/document[?params<<deprecated, use $.form[...]] | http://domain/document[?params<<deprecated, use $.form[...]] |
| Line 1313 MAIN | Line 1352 MAIN |
| $.body[string|file] | $.body[string|file] |
| по-умолчанию, user-agent=parser3 | по-умолчанию, user-agent=parser3 |
| по-умолчанию, получение http status != 200 >> создает http.status ошибку, это можно отключить, передав $.any-status(1) | по-умолчанию, получение http status != 200 >> создает http.status ошибку, это можно отключить, передав $.any-status(1) |
| $.charset[кодировка удалённых документов по-умолчанию], если сервер вернёт content-type:charset - ОНА_ПЕРЕБИВАЕТ | $.charset[кодировка удалённых документов по-умолчанию], если сервер вернёт content-type:charset - ОНА ПЕРЕБИВАЕТ |
| $.response-charset[кодировка удалённых документов], не перебиваеся content-type:charset | $.response-charset[кодировка удалённых документов], не перебиваеся content-type:charset |
| $.user[пользователь] | $.user[пользователь] |
| $.password[пароль] | $.password[пароль] |
| file::load в дополнительные поля записывает | file::load в дополнительные поля записывает |
| ПОЛЕ:значение (имена полей ответа заглавными буквами) | ПОЛЕ:значение (имена полей ответа заглавными буквами) |
| tables << хеш их ПОЛЕ->table с единственным столбцом "value". | tables << хеш их ПОЛЕ->table с единственным столбцом "value" |
| в таких таблицах можно брать повторяющиеся заголовки. например, несколько set-cookies | в таких таблицах можно брать повторяющиеся заголовки. например, несколько set-cookies |
| todo:сделать отдельный cookies | todo:сделать отдельный cookies |
| Line 1343 MAIN | Line 1382 MAIN |
| xml ^xdoc::create{<forgot?>} any error in xml/xslt libs | xml ^xdoc::create{<forgot?>} any error in xml/xslt libs |
| smtp.connect not found/timeout | smtp.connect not found/timeout |
| smtp.execute communication error | smtp.execute communication error |
| email.format hren tam@null.ru wrong email format(bad chars/empty) | email.format hren tam@null.ru wrong email format (bad chars/empty) |
| email.send $MAIL.sendmail[/shit] sendmail not executable | email.send $MAIL.sendmail[/shit] sendmail not executable |
| http.host ^file::load[http://notfound/there] host not found | 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.connect ^file::load[http://not_accepting/there] host found, but does not accept connections |
| http.timeout ^file::load[http://host/doc] whole load operation failed to complete in # seconds | http.timeout ^file::load[http://host/doc] load operation failed to complete in # seconds |
| http.response ^file::load[http://ok/there] host found, connection accepted, bad answer | 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 | http.status ^file::load[http://ok/there] host found, connection accepted, status!=200 |
| date.range ^date::create(10000;1;1) date out of valid range | date.range ^date::create(10000;1;1) date out of valid range |
| Line 1356 MAIN | Line 1395 MAIN |
| об этом будет записано в parser3.log | об этом будет записано в parser3.log |
| если описание метода содержит локальную переменную result в явном виде (есть и неявная переменная) | если описание метода содержит локальную переменную result в явном виде (есть и неявная переменная) |
| то код вывода пробельных литералов не попадает в конечный байт-код. | то код вывода пробельных литералов не попадает в конечный байт-код |