|
|
| version 1.23, 2002/03/25 12:21:48 | version 1.41, 2002/06/10 11:28:55 |
|---|---|
| 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 68 Xне сделано, видимо, не будет сделано | Line 68 Xне сделано, видимо, не будет сделано |
| $exception.file $exception.lineno [если не запрещены при компиляции] | $exception.file $exception.lineno [если не запрещены при компиляции] |
| $exception.source = вася | $exception.source = вася |
| $exception.comment = болван | $exception.comment = болван |
| ^if($exception.type eq connect){^cache[read]} | |
| } | } |
| ^case[_default]{ | ^case[_default]{ |
| код, обрабатывающий другую ошибку | код, обрабатывающий другую ошибку |
| Line 86 Xне сделано, видимо, не будет сделано | Line 85 Xне сделано, видимо, не будет сделано |
| 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 142 odbc c:\drives\y\parser3project\odbc\ | Line 141 odbc c:\drives\y\parser3project\odbc\ |
| /**имя_поля**/'literal' | /**имя_поля**/'literal' |
| !^rem{} | !^rem{} |
| !^cache[файл](секунд){код} | !^cache[файл](секунд){код} |
| !относительное задание времени | |
| !скэшировать строку, которая получается при выполнении кода на 'секунд' секунд | !скэшировать строку, которая получается при выполнении кода на 'секунд' секунд |
| !если 0секунд, значит не кэшировать, а старый такой стереть | !если 0секунд, значит не кэшировать, а старый такой стереть |
| ^cache[delete] | !^cache[файл][expires date]{код} |
| сигнализирует вышестоящему ^cache "не кэшировать, старое забыть" | !абсолютное задание времени |
| ^cache[read] | X^cache[файл] удалить файл [не ругает, если его нет] // такое было, больше не будет, делать ^cache(0) |
| сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires", <br> | !^cache(секунд) |
| выдаёт bool "получилось/нет" | !^cache[expires date] |
| !сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'" | |
| !в пределе: ^cache(0) отменить кэширование | |
| X^cache[read] | |
| сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires", <br> | |
| выдаёт bool "получилось/нет" | |
| Xесть глобальный флажок в свойствах/командной строке "не оптимизировать" | Xесть глобальный флажок в свойствах/командной строке "не оптимизировать" |
| !и есть исключение: ^untaint[html]{код} не оптимизируется безотностительно флажка | !и есть исключение: ^untaint[html]{код} не оптимизируется |
| Xбезотностительно флажка | |
| !у всех макросов есть локальная переменная $result, если в неё что положить, | !у всех макросов есть локальная переменная $result, если в неё что положить, |
| !то _это_ будет результатом макроса, а не его тело | !то _это_ будет результатом макроса, а не его тело |
| Line 225 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 237 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 277 odbc c:\drives\y\parser3project\odbc\ | Line 283 odbc c:\drives\y\parser3project\odbc\ |
| !^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 303 odbc c:\drives\y\parser3project\odbc\ | Line 309 odbc c:\drives\y\parser3project\odbc\ |
| значением $hash.ключ будет hash в котором поля значений будут ключами | значением $hash.ключ будет hash в котором поля значений будут ключами |
| поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой | поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой |
| !^таблица.columns[]+ таблица из одного столбца $column | !^таблица.columns[]+ таблица из одного столбца $column |
| !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало | |
| $adults[^man.select($man.age>=18)] | |
| ^таблица.color[цвет1;цвет2] | |
| !hash | !hash |
| !в выражении | !в выражении |
| Line 321 odbc c:\drives\y\parser3project\odbc\ | Line 331 odbc c:\drives\y\parser3project\odbc\ |
| !^a.intersection[b] = пересечение | !^a.intersection[b] = пересечение |
| значения a | значения 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 526 Xhashfile | Line 536 Xhashfile |
| блокируется | блокируется |
| выполняется код | выполняется код |
| разблокируется | разблокируется |
| Xchmod[...] НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod. | |
| !math | !math |
| !$math:PI | !$math:PI |
| Line 544 Xhashfile | Line 555 Xhashfile |
| !всё происходит в localtime, | !всё происходит в localtime, |
| !временная зона задаётся вне parser средствами OS | !временная зона задаётся вне parser средствами OS |
| !^date::now[] | !^date::now[] |
| !^date::now(смещение в днях) выдаёт сейчас+смещение | |
| !^date::create(дней с epoch) // старое имя set | !^date::create(дней с epoch) // старое имя set |
| !^date::create(year;month;day[;hour[;minute[;second]]]) // старое имя set | !^date::create(year;month[;day[;hour[;minute[;second]]]]) // старое имя set |
| !$date.year month day hour minute second weekday read-only | ^date::sql-create[дата в формате %Y-%m-%d %H:%M:%S] |
| !^date.roll[year|month|day](+/- 1) сдвигает дату | для удобного создания по значению из базы |
| формат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;год;месяц] выдаёт неименованную таблицу |
| Line 602 xdoc(xnode) | Line 619 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] с шапкой |
| Line 762 xdoc(xnode) | Line 780 xdoc(xnode) |
| !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 и запрашиваемого документа: |
| Line 783 xdoc(xnode) | Line 803 xdoc(xnode) |
| !результат которого передаётся в его @post-process[data] if($data is string) ... | !результат которого передаётся в его @post-process[data] if($data is string) ... |
| !результат которого отдаётся пользователю | !результат которого отдаётся пользователю |
| !если встречается ошибка и try не задан, её можно красиво сообщить пользователю, | !если встречается ошибка и try не задан, её можно красиво сообщить пользователю, |
| !определив | !определив |
| !@unhandled_exception[exception;stack] | !@unhandled_exception[exception;stack] |
| !$exception.type строка "тип проблемы" | !$exception.type строка "тип проблемы" |
| Line 794 xdoc(xnode) | Line 814 xdoc(xnode) |
| там лежат в обратном порядке имена[name] и места вызовов[file line] | там лежат в обратном порядке имена[name] и места вызовов[file line] |
| операторов/методов, приведших к ошибке. | операторов/методов, приведших к ошибке. |
| !нужно выключить русский apache: CharsetDisable on | !системные типы ошибок: |
| !parser.compile ^test[} компиляция (непарная скобка, ...) | |
| !parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...) | |
| !number.zerodivision ^eval(1/0) ^eval(1%0) | |
| !number.format ^eval(abc*5) | |
| !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) то вместо обычного вывода страницы будет | |
| выдан список фрагментов результата с указанием их происхождения | выдан список фрагментов результата с указанием их происхождения |