|
|
| version 1.9, 2002/02/18 08:36:49 | version 1.45, 2002/06/14 11:59:12 |
|---|---|
| Line 15 Xне сделано, видимо, не будет сделано | Line 15 Xне сделано, видимо, не будет сделано |
| пустая таблица не defined | пустая таблица не defined |
| пустой hash не defined | пустой hash не defined |
| !eq ne lt gt le ge для сравнения строк, | !eq ne lt gt le ge для сравнения строк, |
| !in "/dir/" для проверки[раньше ^start] | !in "/dir/" для проверки |
| ["внутри не допустимы, если надо сравнить со сложным, | ["внутри не допустимы, если надо сравнить со сложным, |
| пусть это будет переменная]. | пусть это будет переменная]. |
| !is 'type' для проверки типа левого операнда, | !is 'type' для проверки типа левого операнда, |
| Line 49 Xне сделано, видимо, не будет сделано | Line 49 Xне сделано, видимо, не будет сделано |
| !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}} | !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}} |
| !^while(условие){тело} | !^while(условие){тело} |
| !^for[i](0;4){тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] | !^for[i](0;4){тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] |
| X^exit[] + - прекращяет обработку запроса. | !^use[модуль] |
| !^try{ | |
| ... | |
| !^throw[sql.connect;вася;болван] // был ^error[текст] | |
| ... | |
| }{ | |
| ^if($exception.type eq sql){ | |
| $exception.handled(1) ^rem{флаг, что exception обработан} | |
| .... | |
| } | |
| ^switch($exception.type){ | |
| ^case[sql;mail]{ | |
| $exception.handled(1) | |
| код, обрабатывающий sql ошибку | |
| $exception.type = sql.connect | |
| $exception.file $exception.lineno [если не запрещены при компиляции] | |
| $exception.source = вася | |
| $exception.comment = болван | |
| } | |
| ^case[_default]{ | |
| код, обрабатывающий другую ошибку | |
| ^throw[$exception] << re-throw | |
| } | |
| } | |
| } | |
| ^exit[] + - прекращяет обработку запроса. | |
| удобно сделать после выставления 401 ошибки | удобно сделать после выставления 401 ошибки |
| X^return[результат] + - отваливает из выполнения метода, | ^return[результат] + - отваливает из выполнения метода, |
| выдавая нестандартный результат | выдавая нестандартный результат |
| X^break[] + - обрывает цикл | ^break[] + - обрывает цикл |
| X^continue[] + - обрывает итерацию цикла | ^continue[] + - обрывает итерацию цикла |
| !^use[модуль] | |
| X^try{код}{...catch...} пока не придумал, как лучше | |
| !^untaint[[as-is|file-spec|http-header|mail-header|uri|table|sql|js|xml|html|optimized-html]]{код} | !^untaint[[as-is|file-spec|http-header|mail-header|uri|table|sql|js|xml|html|optimized-html]]{код} |
| default as-is | default as-is |
| !^taint[[lang]][код] | !^taint[[lang]][код] |
| default "just tainted, language unknown" | default "just tainted, language unknown" |
| !^process[строка, которая будет process-ed, как код] | !^process{строка, которая будет process-ed, как код} |
| !^connect[protocol://строка соединения]]{код с ^sql[...]-ями} | !^connect[protocol://строка соединения]]{код с ^sql[...]-ями} |
| !mysql://user:pass@{host[:port]|[/unix/socket]}/database? | !mysql://user:pass@{host[:port]|[/unix/socket]}/database? |
| charset=cp1251_koi8& | charset=cp1251_koi8& |
| Line 69 Xне сделано, видимо, не будет сделано | Line 93 Xне сделано, видимо, не будет сделано |
| compress=1& | compress=1& |
| named_pipe=1 | named_pipe=1 |
| !pgsql://user:pass@{host[:port]|[local]}/database | !pgsql://user:pass@{host[:port]|[local]}/database? |
| client_encoding=win,[to-find-out]& | |
| datestyle=ISO,SQL,Postgres,European,NonEuropean=US,German,DEFAULT=ISO | |
| oracle://user:pass@service? | !oracle://user:pass@service? |
| NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251& | NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251& |
| NLS_LANGUAGE language-dependent conventions | NLS_LANGUAGE language-dependent conventions |
| NLS_TERRITORY territory-dependent conventions | NLS_TERRITORY territory-dependent conventions |
| Line 114 odbc c:\drives\y\parser3project\odbc\ | Line 140 odbc c:\drives\y\parser3project\odbc\ |
| ставить такой префикс перед открывающим апострофом, впритык, везде без проблелов | ставить такой префикс перед открывающим апострофом, впритык, везде без проблелов |
| /**имя_поля**/'literal' | /**имя_поля**/'literal' |
| !^rem{} | !^rem{} |
| !^error[текст] | |
| !^cache[файл](секунд){код} | !^cache[файл](секунд){код} |
| !относительное задание времени | |
| !скэшировать строку, которая получается при выполнении кода на 'секунд' секунд | !скэшировать строку, которая получается при выполнении кода на 'секунд' секунд |
| !если 0секунд, значит не кэшировать, а старый такой стереть | !если 0секунд, значит не кэшировать, а старый такой стереть |
| !^cache[файл][expires date]{код} | |
| !абсолютное задание времени | |
| X^cache[файл] удалить файл [не ругает, если его нет] // такое было, больше не будет, делать ^cache(0) | |
| !^cache(секунд) | |
| !^cache[expires date] | |
| !сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'" | |
| !в пределе: ^cache(0) отменить кэширование | |
| X^cache[read] | |
| сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires", <br> | |
| выдаёт bool "получилось/нет" | |
| Xесть глобальный флажок в свойствах/командной строке "не оптимизировать" | Xесть глобальный флажок в свойствах/командной строке "не оптимизировать" |
| !и есть исключение: ^untaint[html]{код} не оптимизируется безотностительно флажка | !и есть исключение: ^untaint[html]{код} не оптимизируется |
| Xбезотностительно флажка | |
| !у всех макросов есть локальная переменная $result, если в неё что положить, | !у всех макросов есть локальная переменная $result, если в неё что положить, |
| !то _это_ будет результатом макроса, а не его тело | !то _это_ будет результатом макроса, а не его тело |
| Line 193 odbc c:\drives\y\parser3project\odbc\ | Line 231 odbc c:\drives\y\parser3project\odbc\ |
| !^имя.div(на сколько /) | !^имя.div(на сколько /) |
| !^имя.mod(на сколько %) | !^имя.mod(на сколько %) |
| !^имя.format[формат] | !^имя.format[формат] |
| !^int/double:sql{query}[[$.limit(2) $.offset(4) $.default(0)]] | !^int/double:sql{query}[[$.limit(2) $.offset(4) $.default{0}]] |
| запрос, результат которого должен быть один столбец/одна строка | запрос, результат которого должен быть один столбец/одна строка |
| !string | !string |
| Line 205 odbc c:\drives\y\parser3project\odbc\ | Line 243 odbc c:\drives\y\parser3project\odbc\ |
| пример: | пример: |
| ^if(def $form:name) не пуста? | ^if(def $form:name) не пуста? |
| ^if($user.isAlive) истина? [автопреобразование к числу, не ноль?] | ^if($user.isAlive) истина? [автопреобразование к числу, не ноль?] |
| !^string::sql{query}[[$.limit(2) $.offset(4) $.default[n/a]]] | !^string::sql{query}[[$.limit(2) $.offset(4) $.default{n/a}]] |
| результат запроса должен быть один столбец/одна строка | результат запроса должен быть один столбец/одна строка |
| !^имя.int[] .int(default) целочисленное значение строки. | !^имя.int[] .int(default) целочисленное значение строки. |
| если ломается преобразование, берётся default | если ломается преобразование, берётся default |
| Line 213 odbc c:\drives\y\parser3project\odbc\ | Line 251 odbc c:\drives\y\parser3project\odbc\ |
| если ломается преобразование, берётся default | если ломается преобразование, берётся default |
| !^имя.format[формат] %d %.2f %02d... | !^имя.format[формат] %d %.2f %02d... |
| !^строка.match[шаблон][[опции поиска]] $prematch $match $postmatch $1 $2... | !^строка.match[шаблон][[опции поиска]] $prematch $match $postmatch $1 $2... |
| опции поиска= | опции поиска= |
| i CASELESS | i CASELESS |
| x whitespace in regex ignored | x whitespace in regex ignored |
| s singleline = $ считается концом всего текста | s singleline = $ считается концом всего текста |
| m multiline = $ считается концом строки[\n], не концом всего текста | m multiline = $ считается концом строки[\n], не концом всего текста |
| g найти все вхождения, а не одно | g найти все вхождения, а не одно |
| !^строка.match[шаблон][опции поиска]{замена} | !^строка.match[шаблон][опции поиска]{замена} |
| опции поиска+= | опции поиска+= |
| g заменить все вхождения, а не одно | g заменить все вхождения, а не одно |
| !^строка.{l|r}split[разделитель] таблица из столбца $piece | !^строка.{l|r}split[разделитель] таблица из столбца $piece |
| !^строка.upper|lower[] | !^строка.upper|lower[] |
| X^строка.truncate(предел терпенья) стиль :( | X^строка.truncate(предел терпенья) стиль :( |
| Line 241 odbc c:\drives\y\parser3project\odbc\ | Line 279 odbc c:\drives\y\parser3project\odbc\ |
| числовое значение равно count[] | числовое значение равно count[] |
| !^table::create[[nameless]]{данные} старое имя "set" | !^table::create[[nameless]]{данные} старое имя "set" |
| !^table::create[table] | !^table::create[table] |
| клонирует таблицу | клонирует таблицу |
| !^table::load[[nameless;]путь] | !^table::load[[nameless;]путь] |
| !если не nameless, названия колонок берутся из первой строки | !если не nameless, названия колонок берутся из первой строки |
| !пустые строки, и строки в первой колонке содержащие '#', игнорируются | !пустые строки, и строки в первой колонке содержащие '#', игнорируются |
| !^table::sql{query}[[$.limit(2) $.offset(4)]] | !^table::sql{query}[[$.limit(2) $.offset(4) todo:$.default{ ^table::create[...] }]] |
| !^таблица.save[[nameless|append;]путь] | !^таблица.save[[nameless|append;]путь] |
| !$таблица.поле | !$таблица.поле |
| !$таблица.fields+ из named таблицы выдаёт текущую запись как Hash | !$таблица.fields+ из named таблицы выдаёт текущую запись как Hash |
| Line 265 odbc c:\drives\y\parser3project\odbc\ | Line 303 odbc c:\drives\y\parser3project\odbc\ |
| !^таблица.join[таблица] - добавляет записи из таблицы. | !^таблица.join[таблица] - добавляет записи из таблицы. |
| таблицы должны иметь одинаковую структуру. | таблицы должны иметь одинаковую структуру. |
| !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать | !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать |
| !^таблица.locate[поле;значение] выдаёт bool | !^таблица.locate[поле;значение] передвигает текущую строку, если найдёт. выдаёт bool |
| !^таблица.locate(логическое выражение) передвигает текущую строку, если найдёт. выдаёт bool | |
| !^таблица.hash[поле, что будет ключом][[поле значений|table поля значений]]+ | !^таблица.hash[поле, что будет ключом][[поле значений|table поля значений]]+ |
| значением $hash.ключ будет hash в котором поля значений будут ключами | значением $hash.ключ будет hash в котором поля значений будут ключами |
| поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой | поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой |
| !^таблица.columns[]+ таблица из одного столбца $column | !^таблица.columns[]+ таблица из одного столбца $column |
| !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало | |
| $adults[^man.select($man.age>=18)] | |
| ^таблица.color[цвет1;цвет2] | |
| !hash | !hash |
| !в выражении | !в выражении |
| Line 278 odbc c:\drives\y\parser3project\odbc\ | Line 321 odbc c:\drives\y\parser3project\odbc\ |
| !$hash.ключ | !$hash.ключ |
| !_default - специальный ключ, если задан, | !_default - специальный ключ, если задан, |
| то при обращении по ключу, которому нет соответствия, выдаётся _default значение | то при обращении по ключу, которому нет соответствия, выдаётся _default значение |
| !^hash::create[[!copy_from_hash|!copy_from_hashfile]] | !^hash::create[[!copy_from_hash|Xcopy_from_hashfile]] |
| создаёт новый hash, копию старого | создаёт новый hash, копию старого |
| !^hash.add[слагаемое] | !^hash.add[слагаемое] |
| перезаписывает одноимённые | перезаписывает одноимённые |
| !^hash.sub[вычитаемое] | !^hash.sub[вычитаемое] |
| !^a.union[b] = объединение | !^a.union[b] = объединение |
| одноимённые остаются | |
| !^a.intersection[b] = пересечение | !^a.intersection[b] = пересечение |
| значения a | |
| !^a.intersects[b] = bool | !^a.intersects[b] = bool |
| !^hash::sql{запрос}[[$.limit(2) $.offset(4)]] | !^hash::sql{запрос}[[$.limit(2) $.offset(4) todo:$.default{$.field[]...}]] |
| получается hash(ключи=значения первая колонка ответа) | получается hash(ключи=значения первая колонка ответа) |
| of hash(ключи=названия остальных колонкок ответа) | of hash(ключи=названия остальных колонкок ответа) |
| !^hash._keys[]+ таблица из одного столбца $key | !^hash._keys[]+ таблица из одного столбца $key |
| Line 306 odbc c:\drives\y\parser3project\odbc\ | Line 351 odbc c:\drives\y\parser3project\odbc\ |
| !cookie | !cookie |
| !$cookie:имя считать старое или свежезаданное | !$cookie:имя считать старое или свежезаданное |
| !$cookie:имя[значение] на 90 дней | !$cookie:имя[значение] на 90 дней |
| !$cookie:имя[$.value[значение] $.expires(дней) или $.expires[session]] | !$cookie:имя[$.value[значение] $.expires(дней, 0дней=session)] |
| !request | !request |
| !$request:query | !$request:query |
| Line 327 odbc c:\drives\y\parser3project\odbc\ | Line 372 odbc c:\drives\y\parser3project\odbc\ |
| ! $value[abc] field: {abc}<<часть | ! $value[abc] field: {abc}<<часть |
| ! $attribute[zzz] field: abc; {attribute=zzz}<<часть | ! $attribute[zzz] field: abc; {attribute=zzz}<<часть |
| !$response:body[DATA] замещает стандартный ответ | !$response:body[DATA] замещает стандартный ответ |
| !$response:status | |
| !^response:clear[] забыть все заданные response поля | !^response:clear[] забыть все заданные response поля |
| !$response:charset | !$response:charset |
| кодировка клиента т.е. та, | кодировка клиента т.е. та, |
| Line 337 odbc c:\drives\y\parser3project\odbc\ | Line 383 odbc c:\drives\y\parser3project\odbc\ |
| ПРЕДУПРЕЖДЕНИЕ: класс form получает свои поля после обработки всех auto класса MAIN | ПРЕДУПРЕЖДЕНИЕ: класс form получает свои поля после обработки всех auto класса MAIN |
| поэтому необходимо задать $request/response:charset в одном из них. не после. | поэтому необходимо задать $request/response:charset в одном из них. не после. |
| !hashfile | Xhashfile |
| !^hashfile::open[$DB_HOME;filename] | !^hashfile::open[$DB_HOME;filename] |
| !^hashfile.clear[] | !^hashfile.clear[] |
| забыть всё | забыть всё |
| Line 415 odbc c:\drives\y\parser3project\odbc\ | Line 461 odbc c:\drives\y\parser3project\odbc\ |
| ] | ] |
| ] | ] |
| ] | ] |
| !для отправки используется программа с параметрами, задаваемая | !для отправки |
| $MAIL.sendmail[команда] | под unix используется программа с параметрами, задаваемая |
| если не будет задана, проверяется, доступна ли | $MAIL.sendmail[команда] |
| /usr/sbin/sendmail или | если не будет задана, проверяется, доступна ли |
| /usr/sbin/sendmail или | |
| /usr/lib/sendmail | /usr/lib/sendmail |
| и, если доступна, то запускается с параметром "-t". | и, если доступна, то запускается с параметром "-t". |
| под win32 используется SMTP протокол, сервер задаётся | |
| $MAIL.SMTP[smtp.domain.ru] | |
| !image | !image |
| !$картинка[^image::measure[DATA]] | !$картинка[^image::measure[DATA]] |
| Line 483 odbc c:\drives\y\parser3project\odbc\ | Line 532 odbc c:\drives\y\parser3project\odbc\ |
| каталоги для dest создаются с правами 775 | каталоги для dest создаются с правами 775 |
| каталог старого файла стирается, если после move он остаётся пуст | каталог старого файла стирается, если после move он остаётся пуст |
| !^file:lock[имя файла]{код} | !^file:lock[имя файла]{код} |
| файл при необходимости создаётся | файл при необходимости создаётся |
| блокируется | блокируется |
| выполняется код | выполняется код |
| разблокируется | разблокируется |
| Xchmod[...] НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod. | |
| !math | math |
| !$math:PI | !$math:PI |
| !^math:round floor ceiling | !^math:round floor ceiling |
| !^math:trunc frac | !^math:trunc frac |
| Line 498 odbc c:\drives\y\parser3project\odbc\ | Line 548 odbc c:\drives\y\parser3project\odbc\ |
| !^math:degrees radians | !^math:degrees radians |
| !^math:pow sqrt | !^math:pow sqrt |
| !^math:random(ширина диапазона) | !^math:random(ширина диапазона) |
| ^math:{C2C0983C-E26E-4169-BD07-77ECE9405BA5} | |
| !date | !date |
| !время типа time можно использовать в выражениях, подставляет | !время типа time можно использовать в выражениях, подставляет |
| количество дней с epoch [1 января 1970 (UTC)], дробное | количество дней с epoch [1 января 1970 (UTC)], дробное |
| !всё происходит в localtime, | !всё происходит в localtime, |
| !временная зона задаётся вне parser средствами OS | !временная зона задаётся вне parser средствами OS |
| !^date::now[] | !^date::now[] |
| !^date::set(дней с epoch) | !^date::now(смещение в днях) выдаёт сейчас+смещение |
| !^date::set(year;month;day[;hour[;minute[;second]]]) | !^date::create(дней с epoch) // старое имя set |
| !$date.year month day hour minute second weekday read-only | !^date::create(year;month[;day[;hour[;minute[;second]]]]) // старое имя set |
| !^date.roll[year|month|day](+/- 1) сдвигает дату | !^date::create[дата в формате %Y-%m-%d %H:%M:%S] |
| для удобного создания по значению из базы | |
| формат1: %Y[-%m[-%d[ %H[:%M[:%S]]]]] | |
| формат2: %H:%M[:%S] | |
| !$date.year month day hour minute second weekday todo:yearday | |
| read-only | |
| !^date.roll[year|month|day](+-смещение) сдвигает дату | |
| !^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;год;месяц] выдаёт неименованную таблицу |
| !^date:calendar[rus|eng;год;месяц;день] выдаёт таблицу | столбцы: 0..6 |
| !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу | |
| столбцы: year, month, day, weekday | |
| xdoc(xnode) | xdoc(xnode) |
| DOM1 attributes: | DOM1 attributes: |
| Line 537 xdoc(xnode) | Line 597 xdoc(xnode) |
| Attributes with the name "ID" are not of type ID unless so defined. | Attributes with the name "ID" are not of type ID unless so defined. |
| 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. |
| !^.getElementsByTagNameNS[namespaceURI;localName] = array of nodes | |
| !кодировка строк и умолчание для $.encoding | !кодировка строк и умолчание для $.encoding |
| !равно текущей кодировке выходной страницы, | !равно текущей кодировке выходной страницы, |
| Line 562 xdoc(xnode) | Line 621 xdoc(xnode) |
| !cdata-section-elements = qnames | !cdata-section-elements = qnames |
| !indent = "yes" | "no" | !indent = "yes" | "no" |
| !media-type = string /> | !media-type = string /> |
| !параметры передаются как есть, не xpath выражения | |
| !.string[output options] | !.string[output options] |
| !.save[file.xml;output options] с шапкой | !.save[file.xml;output options] с шапкой |
| !.file[output options] = file | !.file[output options] = file |
| output options идентичны атрибутам xsl:output | output options идентичны атрибутам xsl:output |
| [исключение: игнорируется cdata-section-elements, нужно будет, сделаю] | [исключение: игнорируется cdata-section-elements, нужно будет, сделаю] |
| выдаёт media-type при подстановке $response:body[сюда] | выдаёт media-type при подстановке $response:body[сюда] |
| Line 632 xdoc(xnode) | Line 692 xdoc(xnode) |
| !void removeAttribute(in DOMString name) raises(DOMException) | !void removeAttribute(in DOMString name) raises(DOMException) |
| !Attr getAttributeNode(in DOMString name) | !Attr getAttributeNode(in DOMString name) |
| !Attr setAttributeNode(in Attr newAttr) raises(DOMException) | !Attr setAttributeNode(in Attr newAttr) raises(DOMException) |
| !/*Attr*/ removeAttributeNode(in Attr oldAttr) raises(DOMException) | !Attr removeAttributeNode(in Attr oldAttr) raises(DOMException) |
| !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); | |
| !XPath: | !XPath: |
| !^node.select[xpath/query/expression] = array of nodes, | !^node.select[xpath/query/expression] = array of nodes, |
| empty array if nothing found | empty array if nothing found |
| !^node.selectSingle[xpath/query/expression] = first node if any | !^node.selectSingle[xpath/query/expression] = first node if any |
| !^node.selectBool[xpath/query/expression] = bool if any | !^node.selectBool[xpath/query/expression] = bool if any |
| !^node.selectNumber[xpath/query/expression] = double if any | !^node.selectNumber[xpath/query/expression] = double if any |
| Line 715 xdoc(xnode) | Line 775 xdoc(xnode) |
| file | file |
| !$status:rusage hash | !$status:rusage hash |
| !utime user time used | !utime user time used |
| !stime system time used | !stime system time used |
| !maxrss max resident set size | !maxrss max resident set size |
| !ixrss integral shared text memory size | !ixrss integral shared text memory size |
| !idrss integral unshared data size | !idrss integral unshared data size |
| !isrss integral unshared stack size | !isrss integral unshared stack size |
| !DATA::=string | file | |
| !MAIN | !MAIN |
| это класс, загружаемый на автомате из parser3.conf, | это класс, загружаемый на автомате из parser3.conf, |
| кучи auto.p и запрашиваемого документа: | кучи auto.p и запрашиваемого документа: |
| !parser3.conf | !parser3.conf |
| cgi: | cgi: |
| 1) configure sysconfdir|windows directory | 1. или полный путь из переменной окружения CGI_PARSER_SITE_CONFIG |
| 2)рядом с бинарником parser'а | или рядом с бинарником parser'а |
| isapi: windows directory | isapi: windows directory |
| apache module: | apache module: |
| 1) ParserRootConfig [httpd.conf only] | 1) ParserConfig [can be in .htaccess] |
| 2) ParserSiteConfig [can be in .htaccess] | |
| !auto.p вниз от DOCUMENT_ROOT/ по дереву до каталога с обрабатываемым файлом включительно | !auto.p вниз от DOCUMENT_ROOT/ по дереву до каталога с обрабатываемым файлом включительно |
| класс собирается из всех этих файлов, последующие становятся родителями предыдущих | класс собирается из всех этих файлов, последующие становятся родителями предыдущих |
| имя последнего загруженного MAIN, имён у предыдущих нет | имя последнего загруженного MAIN, имён у предыдущих нет |
| Line 741 xdoc(xnode) | Line 802 xdoc(xnode) |
| !результат которого передаётся в его @post-process[data] if($data is string) ... | !результат которого передаётся в его @post-process[data] if($data is string) ... |
| !результат которого отдаётся пользователю | !результат которого отдаётся пользователю |
| !если встречается ошибка, её можно красиво сообщить пользователю, | !если встречается ошибка и try не задан, её можно красиво сообщить пользователю, |
| !определив | !определив |
| !@exception[origin;source;comment;type;code;stack] | !@unhandled_exception[exception;stack] |
| !origin файл(строка) где случилась проблема | !$exception.type строка "тип проблемы" |
| !source строка, из-за которой случилась проблема | !$exception.file $exception.lineno файл и строка где случилась проблема [если не запрещены при компиляции] |
| !comment комментарий english | !$exception.source строка, из-за которой случилась проблема |
| !type строка "тип проблемы" (пока пусто) | !$exception.comment комментарий english |
| !code строка "код проблемы" (пока пусто) | !stack табличка из колонок file line name, |
| !stack табличка из колонок origin name, | там лежат в обратном порядке имена[name] и места вызовов[file line] |
| там лежат в обратном порядке имена[name] и места вызовов[origin] | |
| операторов/методов, приведших к ошибке. | операторов/методов, приведших к ошибке. |
| !нужно выключить русский apache: CharsetDisable on | !системные типы ошибок: |
| !parser.compile ^test[} компиляция (непарная скобка, ...) | |
| !parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...) | |
| !number.zerodivision ^eval(1/0) ^eval(1%0) | |
| !number.format ^eval(abc*5) | |
| !file.lock shared/exclusive lock error | |
| !file.missing ^file:delete[delme] not found | |
| !file.access ^table::load[.] no rights | |
| !image.format ^image::measure[index.html] not gif/jpg | |
| !sql.connect ^connect[mysql://baduser:pass@host/db]{} not found/timeout | |
| !sql.execute ^void:sql{select bad} syntax error | |
| !xml ^xdoc::create{<forgot?>} any error in xml/xslt libs | |
| !smtp.connect not found/timeout | |
| !smtp.execute communication error | |
| !DATA::=string | file | !нужно выключить русский apache: CharsetDisable on |
| --- | !если в MAIN будет определён флаг $ORIGINS(1) то вместо обычного вывода страницы будет |
| если в MAIN будет определён флаг $ORIGINS(1) то вместо обычного вывода страницы будет | |
| выдан список фрагментов результата с указанием их происхождения | выдан список фрагментов результата с указанием их происхождения |