--- parser3/operators.txt 2002/03/26 08:51:00 1.24
+++ parser3/operators.txt 2002/04/12 11:44:27 1.33
@@ -15,7 +15,7 @@ Xне сделано, видимо, не будет сделано
пустая таблица не defined
пустой hash не defined
!eq ne lt gt le ge для сравнения строк,
- !in "/dir/" для проверки[раньше ^start]
+ !in "/dir/" для проверки
["внутри не допустимы, если надо сравнить со сложным,
пусть это будет переменная].
!is 'type' для проверки типа левого операнда,
@@ -68,7 +68,6 @@ Xне сделано, видимо, не будет сделано
$exception.file $exception.lineno [если не запрещены при компиляции]
$exception.source = вася
$exception.comment = болван
- ^if($exception.type eq connect){^cache[read]}
}
^case[_default]{
код, обрабатывающий другую ошибку
@@ -86,7 +85,7 @@ Xне сделано, видимо, не будет сделано
default as-is
!^taint[[lang]][код]
default "just tainted, language unknown"
- !^process[строка, которая будет process-ed, как код]
+ !^process{строка, которая будет process-ed, как код}
!^connect[protocol://строка соединения]]{код с ^sql[...]-ями}
!mysql://user:pass@{host[:port]|[/unix/socket]}/database?
charset=cp1251_koi8&
@@ -142,17 +141,24 @@ odbc c:\drives\y\parser3project\odbc\
/**имя_поля**/'literal'
!^rem{}
!^cache[файл](секунд){код}
+ !относительное задание времени
!скэшировать строку, которая получается при выполнении кода на 'секунд' секунд
!если 0секунд, значит не кэшировать, а старый такой стереть
- ^cache[delete]
- сигнализирует вышестоящему ^cache "не кэшировать, старое забыть"
- ^cache[read]
- сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires",
- выдаёт bool "получилось/нет"
+ !^cache[файл][expires date]{код}
+ !абсолютное задание времени
+ X^cache[файл] удалить файл [не ругает, если его нет] // такое было, больше не будет, делать ^cache(0)
+ !^cache(секунд)
+ !^cache[expires date]
+ !сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'"
+ !в пределе: ^cache(0) отменить кэширование
+ X^cache[read]
+ сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires",
+ выдаёт bool "получилось/нет"
Xесть глобальный флажок в свойствах/командной строке "не оптимизировать"
- !и есть исключение: ^untaint[html]{код} не оптимизируется безотностительно флажка
+ !и есть исключение: ^untaint[html]{код} не оптимизируется
+ Xбезотностительно флажка
!у всех макросов есть локальная переменная $result, если в неё что положить,
!то _это_ будет результатом макроса, а не его тело
@@ -303,6 +309,10 @@ odbc c:\drives\y\parser3project\odbc\
значением $hash.ключ будет hash в котором поля значений будут ключами
поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой
!^таблица.columns[]+ таблица из одного столбца $column
+ !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало
+ $adults[^man.select($man.age>=18)]
+
+
!hash
!в выражении
@@ -526,7 +536,7 @@ Xhashfile
блокируется
выполняется код
разблокируется
- chmod НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod.
+ Xchmod[...] НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod.
!math
!$math:PI
@@ -545,10 +555,13 @@ Xhashfile
!всё происходит в localtime,
!временная зона задаётся вне parser средствами OS
!^date::now[]
+ !^date::now(смещение в днях) выдаёт сейчас+смещение
!^date::create(дней с epoch) // старое имя set
- !^date::create(year;month;day[;hour[;minute[;second]]]) // старое имя set
+ !^date::create(year;month[;day[;hour[;minute[;second]]]]) // старое имя set
+ ^date::sql-create[дата в формате %Y-%m-%d %H:%M:%S]
+ для удобного создания по значению из базы
!$date.year month day hour minute second weekday read-only
- !^date.roll[year|month|day](+/- 1) сдвигает дату
+ !^date.roll[year|month|day](+-смещение) сдвигает дату
!^date.sql-string[] %Y-%m-%d %H:%M:%S
where published='$дата.sql-string[]'
!^date:calendar[rus|eng;год;месяц] выдаёт неименованную таблицу
@@ -603,6 +616,7 @@ xdoc(xnode)
!cdata-section-elements = qnames
!indent = "yes" | "no"
!media-type = string />
+ !параметры передаются как есть, не xpath выражения
!.string[output options]
!.save[file.xml;output options] с шапкой
@@ -763,6 +777,8 @@ xdoc(xnode)
!idrss integral unshared data size
!isrss integral unshared stack size
+!DATA::=string | file
+
!MAIN
это класс, загружаемый на автомате из parser3.conf,
кучи auto.p и запрашиваемого документа:
@@ -784,7 +800,7 @@ xdoc(xnode)
!результат которого передаётся в его @post-process[data] if($data is string) ...
!результат которого отдаётся пользователю
- !если встречается ошибка и try не задан, её можно красиво сообщить пользователю,
+!если встречается ошибка и try не задан, её можно красиво сообщить пользователю,
!определив
!@unhandled_exception[exception;stack]
!$exception.type строка "тип проблемы"
@@ -795,11 +811,22 @@ xdoc(xnode)
там лежат в обратном порядке имена[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{} 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) то вместо обычного вывода страницы будет
выдан список фрагментов результата с указанием их происхождения