Diff for /parser3/operators.ru.txt between versions 1.23 and 1.41

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) то вместо обычного вывода страницы будет  
     выдан список фрагментов результата с указанием их происхождения      выдан список фрагментов результата с указанием их происхождения

Removed from v.1.23  
changed lines
  Added in v.1.41


E-mail: