Diff for /parser3/operators.ru.txt between versions 1.20 and 1.28

version 1.20, 2002/03/18 15:29:45 version 1.28, 2002/03/27 15:30:33
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 51  Xне сделано, видимо, не будет сделано Line 51  Xне сделано, видимо, не будет сделано
     !^for[i](0;4){тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]      !^for[i](0;4){тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]
     !^use[модуль]      !^use[модуль]
     !^try{      !^try{
         ...          ...
         !^throw[sql.connect;вася;болван] // был ^error[текст]          !^throw[sql.connect;вася;болван] // был ^error[текст]
         ...          ...
     }{      }{
         ^if($exception.type eq sql){          ^if($exception.type eq sql){
                 $exception.handled(1)  ^rem{флаг, что exception обработан}              $exception.handled(1)  ^rem{флаг, что exception обработан}
                 ....              ....
         }          }
                   
         ^switch($exception.type){          ^switch($exception.type){
                 ^case[sql;mail]{              ^case[sql;mail]{
                         $exception.handled(1)                  $exception.handled(1)
                 код, обрабатывающий sql ошибку                  код, обрабатывающий sql ошибку
                         $exception.type = sql.connect                  $exception.type = sql.connect
                             $exception.file $exception.lineno [если не запрещены при компиляции]                  $exception.file $exception.lineno [если не запрещены при компиляции]
                         $exception.source = вася                  $exception.source = вася
                         $exception.comment = болван                  $exception.comment = болван
                         ^if($exception.type eq connect){^cache[read]}                  ^if($exception.type eq connect){^cache[read]}
                 }              }
                 ^case[_default]{              ^case[_default]{
                         код, обрабатывающий другую ошибку                  код, обрабатывающий другую ошибку
                         ^throw[$exception] << re-throw                  ^throw[$exception] << re-throw
                 }              }
             }          }
     }      }
     ^exit[] + - прекращяет обработку запроса.       ^exit[] + - прекращяет обработку запроса. 
         удобно сделать после выставления 401 ошибки          удобно сделать после выставления 401 ошибки
Line 94  Xне сделано, видимо, не будет сделано Line 94  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 142  odbc    c:\drives\y\parser3project\odbc\ Line 144  odbc    c:\drives\y\parser3project\odbc\
     !^cache[файл](секунд){код}      !^cache[файл](секунд){код}
         !скэшировать строку, которая получается при выполнении кода на 'секунд' секунд          !скэшировать строку, которая получается при выполнении кода на 'секунд' секунд
         !если 0секунд, значит не кэшировать, а старый такой стереть          !если 0секунд, значит не кэшировать, а старый такой стереть
         ^cache[delete] << не кэшировать, старое забыть      ^cache[delete] 
         ^cache[read] << взять скэшированное насильно, игнорируя expires          сигнализирует вышестоящему ^cache "не кэшировать, старое забыть"
       ^cache[read] 
           сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires", <br>
           выдаёт bool "получилось/нет"
   
   
     Xесть глобальный флажок в свойствах/командной строке "не оптимизировать"      Xесть глобальный флажок в свойствах/командной строке "не оптимизировать"
Line 240  odbc    c:\drives\y\parser3project\odbc\ Line 245  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 268  odbc    c:\drives\y\parser3project\odbc\ Line 273  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, названия колонок берутся из первой строки
         !пустые строки, и строки в первой колонке содержащие '#', игнорируются                  !пустые строки, и строки в первой колонке содержащие '#', игнорируются        
Line 312  odbc    c:\drives\y\parser3project\odbc\ Line 317  odbc    c:\drives\y\parser3project\odbc\
         перезаписывает одноимённые          перезаписывает одноимённые
     !^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)]]
         получается hash(ключи=значения первая колонка ответа)          получается hash(ключи=значения первая колонка ответа)
Line 446  Xhashfile Line 453  Xhashfile
         ]          ]
     !для отправки       !для отправки 
     под unix используется программа с параметрами, задаваемая       под unix используется программа с параметрами, задаваемая 
         $MAIL.sendmail[команда]          $MAIL.sendmail[команда]
         если не будет задана, проверяется, доступна ли           если не будет задана, проверяется, доступна ли 
         /usr/sbin/sendmail или          /usr/sbin/sendmail или
         /usr/lib/sendmail          /usr/lib/sendmail
         и, если доступна, то запускается с параметром "-t".               и, если доступна, то запускается с параметром "-t".    
     под win32 используется SMTP протокол, сервер задаётся       под win32 используется SMTP протокол, сервер задаётся 
         $MAIL.SMTP[smtp.domain.ru]          $MAIL.SMTP[smtp.domain.ru]
   
 !image  !image
     !$картинка[^image::measure[DATA]]      !$картинка[^image::measure[DATA]]
Line 515  Xhashfile Line 522  Xhashfile
         каталоги для dest создаются с правами 775          каталоги для dest создаются с правами 775
         каталог старого файла стирается, если после move он остаётся пуст          каталог старого файла стирается, если после move он остаётся пуст
     !^file:lock[имя файла]{код}      !^file:lock[имя файла]{код}
         файл при необходимости создаётся          файл при необходимости создаётся
         блокируется          блокируется
         выполняется код          выполняется код
         разблокируется          разблокируется
       chmod НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod.
   
 !math  !math
     !$math:PI      !$math:PI
Line 533  Xhashfile Line 541  Xhashfile
   
 !date  !date
     !время типа time можно использовать в выражениях, подставляет       !время типа time можно использовать в выражениях, подставляет 
         количество дней с epoch [1 января 1970 (UTC)], дробное          количество дней с epoch [1 января 1970 (UTC)], дробное
     !всё происходит в localtime,       !всё происходит в localtime, 
     !временная зона задаётся вне parser средствами OS      !временная зона задаётся вне parser средствами OS
     !^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.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      !^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;год;месяц] выдаёт неименованную таблицу 
         столбцы: 0..6           столбцы: 0..6 
     !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу      !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу
         столбцы: year, month, day, weekday          столбцы: year, month, day, weekday
           
 xdoc(xnode)  xdoc(xnode)
     DOM1 attributes:      DOM1 attributes:
Line 600  xdoc(xnode) Line 608  xdoc(xnode)
     !.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 676  xdoc(xnode) Line 684  xdoc(xnode)
   
     !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 748  xdoc(xnode) Line 756  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.0) полный путь из переменной окружения PARSER_ROOT_CONFIG                  1. или полный путь из переменной окружения HTTP_PARSER_ROOT_CONFIG
                 1.1) configure sysconfdir|windows directory                      или configure sysconfdir|windows directory 
                 2)рядом с бинарником parser'а                   2. или полный путь из переменной окружения HTTP_PARSER_SITE_CONFIG
                      или рядом с бинарником parser'а 
             isapi: windows directory              isapi: windows directory
             apache module:               apache module: 
                 1) ParserRootConfig [httpd.conf only]                   1) ParserRootConfig [httpd.conf only] 
Line 775  xdoc(xnode) Line 786  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 786  xdoc(xnode) Line 797  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          ^connect[mysql://okuser:pass@host/db]{^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.20  
changed lines
  Added in v.1.28


E-mail: