Diff for /parser3/operators.ru.txt between versions 1.148 and 1.180

version 1.148, 2003/12/11 11:53:04 version 1.180, 2006/04/09 13:38:46
Line 50  Xне сделано, видимо, не будет сделано Line 50  Xне сделано, видимо, не будет сделано
            %left '-' '+'             %left '-' '+'
            %left '*' '/' '%' '\\'             %left '*' '/' '%' '\\'
            %left NEG     /* negation: unary - */             %left NEG     /* negation: unary - */
           !литералы
              true
              false
   
                         
     !^if(условие){когда да}{когда нет}      !^if(условие){когда да}{когда нет}
     !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}}      !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}}
     !^while(условие){тело}      !^while(условие){тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]
     !^for[i](0;4){тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]      !^for[i](0;4){тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]
     !^use[модуль]      !^use[модуль]
     !^try{      !^try{
Line 86  Xне сделано, видимо, не будет сделано Line 89  Xне сделано, видимо, не будет сделано
         удобно сделать после выставления 401 ошибки          удобно сделать после выставления 401 ошибки
     ^return[результат] + - отваливает из выполнения метода,       ^return[результат] + - отваливает из выполнения метода, 
         выдавая нестандартный результат          выдавая нестандартный результат
     X^break[] + - обрывает цикл      !^break[] + - обрывает цикл
     X^continue[] + - обрывает итерацию цикла      !^continue[] + - обрывает итерацию цикла
     !^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|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[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}[во что переименовать @main]      !^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}[
           $.main[во что переименовать @main]
           $.file[имя файла из которого, якобы, данный текст]
           $.lineno(номер строки в файле, откуда данный текст. можно отрицательный) 
       ]
     !^process..[путь][во что переименовать @main]      !^process..[путь][во что переименовать @main]
       по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS]        по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS]
     !^connect[protocol://строка соединения]]{код с ^sql[...]-ями}      !^connect[protocol://строка соединения]]{код с ^sql[...]-ями}
         !mysql://user:pass@{host[:port]|[/unix/socket]}/database?          !mysql://user:pass@{host[:port]|[/unix/socket]}/database?
               ClientCharset=parser-charset << charset in which parser thinks client works
             charset=cp1251_koi8&              charset=cp1251_koi8&
             timeout=3&              timeout=3&
             compress=1&              compress=1&
Line 105  Xне сделано, видимо, не будет сделано Line 113  Xне сделано, видимо, не будет сделано
             autocommit если выставить в 0, будет делать commit/rollback              autocommit если выставить в 0, будет делать commit/rollback
   
         !pgsql://user:pass@{host[:port]|[local]}/database?          !pgsql://user:pass@{host[:port]|[local]}/database?
             client_encoding=win,[to-find-out]&              client_encoding=win,[to-find-out]
             datestyle=ISO,SQL,Postgres,European,NonEuropean=US,German,DEFAULT=ISO              &datestyle=ISO,SQL,Postgres,European,NonEuropean=US,German,DEFAULT=ISO
               &ClientCharset=parser-charset << charset in which parser thinks client works
                   
         !oracle://user:pass@service?          !oracle://user:pass@service?
             NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&              NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&
Line 119  Xне сделано, видимо, не будет сделано Line 128  Xне сделано, видимо, не будет сделано
             NLS_ISO_CURRENCY  ISO currency symbol              NLS_ISO_CURRENCY  ISO currency symbol
             NLS_SORT  sort sequence              NLS_SORT  sort sequence
             ORA_ENCRYPT_LOGIN=TRUE              ORA_ENCRYPT_LOGIN=TRUE
               ClientCharset=parser-charset << charset in which parser thinks client works
   
         !odbc://DSN=dsn^;UID=user^;PWD=password          !odbc://DSN=dsn^;UID=user^;PWD=password^;ClientCharset=parser-charset
               ClientCharset << charset in which parser thinks client works
   
         для работы connect нужно, чтобы заранее(рекомендуется в системном parser3)          для работы connect нужно, чтобы заранее(рекомендуется в системном parser3)
         была определена таблица          была определена таблица
Line 163  odbc    c:\drives\y\parser3project\odbc\ Line 174  odbc    c:\drives\y\parser3project\odbc\
     !^cache[expires date]      !^cache[expires date]
         !сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'"          !сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'"
         !в пределе: ^cache(0) отменить кэширование          !в пределе: ^cache(0) отменить кэширование
       !^cache[] выдаёт текущую expires date
     X^cache[read]       X^cache[read] 
         сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires", <br>          сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires", <br>
         выдаёт bool "получилось/нет"          выдаёт bool "получилось/нет"
           !^sleep(seconds)
   
   
     Xесть глобальный флажок в свойствах/командной строке "не оптимизировать"      Xесть глобальный флажок в свойствах/командной строке "не оптимизировать"
Line 234  odbc    c:\drives\y\parser3project\odbc\ Line 247  odbc    c:\drives\y\parser3project\odbc\
         0          0
     !^имя.pos[...]      !^имя.pos[...]
         -1          -1
       !^void.left(n)
          ничего не выдаёт
       !^void.right(n)
          ничего не выдаёт
       !^void.mid(p[;n])
          ничего не выдаёт
     !^имя.int[]  (default)       !^имя.int[]  (default) 
         0 или default          0 или default
     !^имя.double[] (default)      !^имя.double[] (default)
         0 или default          0 или default
     !^void:sql{запрос без результата}      !^void:sql{запрос без результата}{$.bind[см. table::sql]}
   
   
 !int,double  !int,double
     !^имя.int[]  целочисленное значение       !^имя.int[]  целочисленное значение 
Line 249  odbc    c:\drives\y\parser3project\odbc\ Line 269  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} $.bind[см. table::sql]]]
         запрос, результат которого должен быть один столбец/одна строка          запрос, результат которого должен быть один столбец/одна строка
   
 !string  !string
Line 261  odbc    c:\drives\y\parser3project\odbc\ Line 281  odbc    c:\drives\y\parser3project\odbc\
         пример:          пример:
         ^if(def $form:name) не пуста?          ^if(def $form:name) не пуста?
         ^if($user.isAlive) истина? [автопреобразование к числу, не ноль?]          ^if($user.isAlive) истина? [автопреобразование к числу, не ноль?]
     !^string::sql{query}[[$.limit(1) $.offset(4) $.default{n/a}]]      !^string::sql{query}[[$.limit(1) $.offset(4) $.default{n/a} $.bind[см. table::sql]]]
         результат запроса должен быть один столбец/одна строка          результат запроса должен быть один столбец/одна строка
     !^имя.int[] .int(default) целочисленное значение строки.       !^имя.int[] .int(default) целочисленное значение строки. 
         если ломается преобразование, берётся default          если ломается преобразование, берётся default
Line 300  odbc    c:\drives\y\parser3project\odbc\ Line 320  odbc    c:\drives\y\parser3project\odbc\
     !^строка.normalize[] выдает другую строку, в которой фрагменты на одном языке объединены      !^строка.normalize[] выдает другую строку, в которой фрагменты на одном языке объединены
         полезно делать перед сложными match операциями, если вы знаете, что входная строка          полезно делать перед сложными match операциями, если вы знаете, что входная строка
         состоит из большого числа фрагментов          состоит из большого числа фрагментов
       !^string.trim[start|both|end[;chars]] выкидывает charset из начала/конца/и начала и конца
           default 'chars' -- whitespace chars
       !^string.append[string]
       !^string.base64[] encode
       !^string:base64[encoded] decode
   
 !table  !table
     в выражении       в выражении 
Line 314  odbc    c:\drives\y\parser3project\odbc\ Line 339  odbc    c:\drives\y\parser3project\odbc\
         !пустые строки, и строки в первой колонке содержащие '#', игнорируются                  !пустые строки, и строки в первой колонке содержащие '#', игнорируются        
         !$.separator[^#09]          !$.separator[^#09]
         !$.encloser["] по-умолчанию, нет.          !$.encloser["] по-умолчанию, нет.
     !^table::sql{query}[[$.limit(2) $.offset(4) todo:$.default{ ^table::create[...] }]]      !^table::sql{query}[[$.limit(2) $.offset(4) $.bind[hash] todo:$.default{ ^table::create[...] }]]
           bind привязывает переменные в запросе к их значениям
           пока реализован только для oracle
           в запросе надо написать ":имя"
           в параметре bind передать hash, из которого возьмётся(или куда запишется) значение
     !^таблица.save[[nameless|append;]путь[;опции, см. load]]      !^таблица.save[[nameless|append;]путь[;опции, см. load]]
     !$таблица.поле      !$таблица.поле
     !$таблица.fields  из named таблицы выдаёт текущую запись как Hash      !$таблица.fields  из named таблицы выдаёт текущую запись как Hash
Line 370  odbc    c:\drives\y\parser3project\odbc\ Line 399  odbc    c:\drives\y\parser3project\odbc\
     !^hash::sql{запрос}[[$.distinct(1) $.limit(2) $.offset(4) todo:$.default{$.field[]...}]]      !^hash::sql{запрос}[[$.distinct(1) $.limit(2) $.offset(4) todo:$.default{$.field[]...}]]
         получается hash(ключи=значения первая колонка ответа)          получается hash(ключи=значения первая колонка ответа)
         of hash(ключи=названия остальных колонкок ответа)          of hash(ключи=названия остальных колонкок ответа)
     !^hash._keys[]+ таблица из одного столбца $key      !^hash._keys[[название колонки с ключами]]+ таблица из одного столбца $key или как передадут
     !^hash._count[]      !^hash._count[]
     !^foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]      !^foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]
     !^delete[ключ]  удалить ключ      !^delete[ключ]  удалить ключ
Line 391  odbc    c:\drives\y\parser3project\odbc\ Line 420  odbc    c:\drives\y\parser3project\odbc\
     !^foreach[key|value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]      !^foreach[key|value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]
   
     пример:      пример:
     $uids[^hashfile::open[/db/uids]]      $sessions[^hashfile::open[/db/sessions]]
          
     $random[23847387taduigh345XGHWElxjgdjg]      $sid[^math:uuid[]]
     $uids.$random[$.value[$uid] $.expires(1)]      $sessions.$sid[$.value[$uid] $.expires(1)]
     $uid[$persistent.logins.$random]      $uid[$sessions.$sid]
   
 !form  !form
     [берётся первый элемент из одноимённых из GET, потом первый из POST]      [берётся первый элемент из одноимённых из GET, потом первый из POST]
Line 409  odbc    c:\drives\y\parser3project\odbc\ Line 438  odbc    c:\drives\y\parser3project\odbc\
   
 !env  !env
     !$env:переменная      !$env:переменная
       !$env:PARSER было то же самое, что показывается при запуске parser.cgi
   
 !cookie  !cookie
     !$cookie:имя считать старое или свежезаданное      !$cookie:имя считать старое или свежезаданное
Line 441  odbc    c:\drives\y\parser3project\odbc\ Line 471  odbc    c:\drives\y\parser3project\odbc\
         ! $attribute[zzz] field: abc; {attribute=zzz}<<часть          ! $attribute[zzz] field: abc; {attribute=zzz}<<часть
         !значение поля или атрибута может быть string или date          !значение поля или атрибута может быть string или date
         ! если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT"          ! если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT"
       !$response:headers накопленные поля
     !$response:body[DATA]  замещает стандартный ответ      !$response:body[DATA]  замещает стандартный ответ
     !$response:download[DATA]  замещает стандартный ответ,       !$response:download[DATA]  замещает стандартный ответ, 
         выставляет флаг, заставляющий browser предложить download          выставляет флаг, заставляющий browser предложить download
Line 624  odbc    c:\drives\y\parser3project\odbc\ Line 655  odbc    c:\drives\y\parser3project\odbc\
         определяющее прожорливость выделялки цветов из палитры [default=150]          определяющее прожорливость выделялки цветов из палитры [default=150]
             меньше - точнее приближает цвета, но они быстро кончаются              меньше - точнее приближает цвета, но они быстро кончаются
             больше - неточно приближает цвет, но бОльшей части хватит              больше - неточно приближает цвет, но бОльшей части хватит
       !^картинка.pixel(x;y)[(color)]
           узнать или задать цвет пиксела
   
 !file  !file
     !$файл_из_post.name       !$файл_из_post.name 
Line 634  odbc    c:\drives\y\parser3project\odbc\ Line 667  odbc    c:\drives\y\parser3project\odbc\
     !^file:find[имя файла][{когда не нашли}]      !^file:find[имя файла][{когда не нашли}]
     !^file:list[путь[;шаблон]] = table с колонкой name      !^file:list[путь[;шаблон]] = table с колонкой name
     !^file::load[text|binary;!big.zip[;!domain_press_release_2001_03_01.zip][;опции]]      !^file::load[text|binary;!big.zip[;!domain_press_release_2001_03_01.zip][;опции]]
       !^file::create[text;имя;^untaint[xml]{data}]
     !$файл_который_был_loaded.size      !$файл_который_был_loaded.size
     !^file::stat[имя файла]      !^file::stat[имя файла]
     !$файл_который_был_stated.size !.adate !.mdate !.cdate      !$файл_который_был_stated.size !.adate !.mdate !.cdate
Line 660  odbc    c:\drives\y\parser3project\odbc\ Line 694  odbc    c:\drives\y\parser3project\odbc\
     !^file:justname[/a/some.tar.gz]=some.tar      !^file:justname[/a/some.tar.gz]=some.tar
     !^file:justext[/a/some.tar.gz]=gz      !^file:justext[/a/some.tar.gz]=gz
     !/some/page.html: ^file:fullpath[a.gif] => /some/a.gif      !/some/page.html: ^file:fullpath[a.gif] => /some/a.gif
       !^file.sql-string[] внутри ^connect даст правильно escaped строку, которую можно в запрос отдать
       X^file::sql[[имя_файла_для_download]]{}
       !^file::sql{}[[
           $.name[имя_файла_для_download]
           $.content-type[пользовательский content-type]
       ]]
           результат запроса должен быть "одна строка".
           колонки:
           первая колонка - данные
           если есть вторая - это имя файла
           если есть третья - это content-type
       !^file.base64[] encode
       !^file::base64[encoded string] decode
   
 !math  !math
     !$math:PI      !$math:PI
Line 715  odbc    c:\drives\y\parser3project\odbc\ Line 761  odbc    c:\drives\y\parser3project\odbc\
     !^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, week, weekyear          столбцы: 0..6, week, year
     !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу      !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу
         столбцы: year, month, day, weekday          столбцы: year, month, day, weekday
           
 xdoc(xnode)  xdoc(xnode)
       !$xdoc.search-namespaces hash, where keys=prefixes, values=urls
       
     DOM1 attributes:      DOM1 attributes:
     !readonly attribute DocumentType doctype      !readonly attribute DocumentType doctype
     Xreadonly attribute DOMImplementation implementation      Xreadonly attribute DOMImplementation implementation
Line 961  console Line 1009  console
     !$console:line      !$console:line
         read/write строку          read/write строку
   
 !DATA::=string | file  DATA::=string | file | hash
   
   !hash вида
   [
           $.file[имя файла на диске]
           $.name[имя файла для пользователя]
           $.mdate[date]
   ]
   
 !MAIN  !MAIN
     это класс, загружаемый на автомате из parser3.conf,       это класс, загружаемый на автомате из parser3.conf, 
Line 993  console Line 1048  console
         операторов/методов, приведших к ошибке.          операторов/методов, приведших к ошибке.
   
 !при загрузке файла (file::load, table::load, xdoc::load) можно указать такое имя файла:  !при загрузке файла (file::load, table::load, xdoc::load) можно указать такое имя файла:
     !http://domain/document?params      !http://domain/document[?params<<deprecated, use $.form[...]]
     !а также, возможно, указать опции:      !а также, возможно, указать опции:
         !$.method[GET|HEAD]          !$.method[GET|POST|HEAD]
         !$.timeout(3)  << в секундах, по-умолчанию =2          !$.timeout(3)  << в секундах, по-умолчанию =2
         !$.headers[          !$.headers[
         !    $поле[значение] << значение имеет формат, как $response:ЗАГОЛОВОК          !    $поле[значение] << значение имеет формат, как $response:ЗАГОЛОВОК
         !]          !]
           $.enctype[multipart/form-data]
           $.form[
               !$.field1[string]
               !$.field2[^table::create{one_column_only^#0Avalue1^#0Avalue2}]
               $.field3[file]
           ]
           !$.body[string]
                   |file
         !по-умолчанию, user-agent=parser3          !по-умолчанию, user-agent=parser3
         !по-умолчанию, получение http status != 200 >> создает http.status ошибку,          !по-умолчанию, получение http status != 200 >> создает http.status ошибку,
         !это можно отключить, передав          !это можно отключить, передав
         !$.any-status(1)          !$.any-status(1)
         !$.charset[кодировка удалённых докуметов по-умолчанию] << если сервер вернёт content-type:charset=ОНА_ПЕРЕБИВАЕТ          !$.charset[кодировка удалённых докуметов по-умолчанию] << если сервер вернёт content-type:charset=ОНА_ПЕРЕБИВАЕТ
           !$.user[пользователь]
           !$.password[пароль]
     !file::load в дополнительные поля записывает      !file::load в дополнительные поля записывает
         !ПОЛЕ:значение (имена полей ответа заглавными буквами)          !ПОЛЕ:значение (имена полей ответа заглавными буквами)
         !tables << хеш их ПОЛЕ->table с единственным столбцом "value".           !tables << хеш их ПОЛЕ->table с единственным столбцом "value". 
Line 1040  console Line 1105  console
           
 !нужно выключить русский apache: CharsetDisable on  !нужно выключить русский apache: CharsetDisable on
   
 !если в MAIN будет определён флаг $ORIGINS(1) то вместо обычного вывода страницы будет  Xесли в MAIN будет определён флаг $ORIGINS(1) то вместо обычного вывода страницы будет
     выдан список фрагментов результата с указанием их происхождения      выдан список фрагментов результата с указанием их происхождения
   
   !если описание метода содержит локальную переменную result в явном виде
       (есть и неявная переменная)
       то код вывода строковых литералов не попадает в конечный байт-код,
       а непробельные символы считаются синтаксической ошибкой
       для вывода чего бы то ни было надо пользоваться этой переменной
   

Removed from v.1.148  
changed lines
  Added in v.1.180


E-mail: