Diff for /parser3/operators.ru.txt between versions 1.47 and 1.82

version 1.47, 2002/06/14 15:22:45 version 1.82, 2002/09/13 14:11:43
Line 5  Xне сделано, видимо, не будет сделано Line 5  Xне сделано, видимо, не будет сделано
   
 операторы  операторы
     !^eval(выражение)[формат] выражение, кроме обычных функций::      !^eval(выражение)[формат] выражение, кроме обычных функций::
           !допустимы #комментарии
                   работают до конца строки или закрывающейся круглой скобки
                   внутри комментария допустимы вложенные круглые скобки
         !из неочевидных операторов:          !из неочевидных операторов:
             # побитный xor              !| побитный xor
             ## логический xor              !|| логический xor
             ~ побитное отрицание              ~ побитное отрицание
             \ целочисленное деление 10\3=3              \ целочисленное деление 10\3=3
         !def для проверки defined,          !def для проверки defined,
Line 27  Xне сделано, видимо, не будет сделано Line 30  Xне сделано, видимо, не будет сделано
         !числовой литерал бывает 0xABC          !числовой литерал бывает 0xABC
         !приоритеты:          !приоритеты:
            /* logical */             /* logical */
            %left "##"             %left "!||"
            %left "||"             %left "||"
            %left "&&"             %left "&&"
            %left '<' '>' "<=" ">="   "lt" "gt" "le" "ge"             %left '<' '>' "<=" ">="   "lt" "gt" "le" "ge"
            %left "==" "!="  "eq" "ne"             %left "==" "!="  "eq" "ne"
            %left "is" "def" "in" "-f" "-d"             %left "is" "def" "in" "-f" "-d"
            %left '!'             %left '!'
              условие ? когдаДа: когдаНет
   
            /* bitwise */             /* bitwise */
            %left '#'             %left '!|'
            %left '|'             %left '|'
            %left '&'              %left '&' 
            %left '~'             %left '~'
Line 45  Xне сделано, видимо, не будет сделано Line 49  Xне сделано, видимо, не будет сделано
            %left '-' '+'             %left '-' '+'
            %left '*' '/' '%' '\\'             %left '*' '/' '%' '\\'
            %left NEG     /* negation: unary - */             %left NEG     /* negation: unary - */
   
              
     !^if(условие){когда да}{когда нет}      !^if(условие){когда да}{когда нет}
     !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}}      !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}}
     !^while(условие){тело}      !^while(условие){тело}
Line 216  odbc    c:\drives\y\parser3project\odbc\ Line 222  odbc    c:\drives\y\parser3project\odbc\
   
   
 !void  !void
           !^имя.length[]
                   0
           !^имя.pos[...]
                   -1
     !^имя.int[]  (default)       !^имя.int[]  (default) 
         0 или default          0 или default
     !^имя.double[] (default)      !^имя.double[] (default)
Line 260  odbc    c:\drives\y\parser3project\odbc\ Line 270  odbc    c:\drives\y\parser3project\odbc\
     !^строка.match[шаблон][опции поиска]{замена}      !^строка.match[шаблон][опции поиска]{замена}
         опции поиска+=          опции поиска+=
         g заменить все вхождения, а не одно          g заменить все вхождения, а не одно
       !^строка.split[разделитель][[lrhv]]
           l слева направо [default]
           r справа налево
           h nameless таблица
           v таблица из столбца piece [default]
     !^строка.{l|r}split[разделитель] таблица из столбца $piece      !^строка.{l|r}split[разделитель] таблица из столбца $piece
           оставлен для совместимости
     !^строка.upper|lower[]       !^строка.upper|lower[] 
     X^строка.truncate(предел терпенья) стиль :(      X^строка.truncate(предел терпенья) стиль :(
     !^строка.length[]      !^строка.length[]
Line 272  odbc    c:\drives\y\parser3project\odbc\ Line 288  odbc    c:\drives\y\parser3project\odbc\
         <0 = не найдено          <0 = не найдено
     !^строка.replace[$таблица_подстановок_строка_на_строку]      !^строка.replace[$таблица_подстановок_строка_на_строку]
     !^строка.save[[append;]путь]      !^строка.save[[append;]путь]
       !^строка.normalize[] выдает другую строку, в которой фрагменты на одном языке объединены
           полезно делать перед сложными match операциями, если вы знаете, что входная строка
           состоит из большого числа фрагментов
   
 !table  !table
     в выражении       в выражении 
         логическое значение равно "не пуста?"          логическое значение равно "не пуста?"
         числовое значение равно count[]          числовое значение равно count[]
     !^table::create[[nameless]]{данные} старое имя "set"      !^table::create[[nameless]]{данные} старое имя "set"
     !^table::create[table]      !^table::create[table][[$.limit(1) $.offset(5) $.offset[cur]]]
         клонирует таблицу          клонирует таблицу    
     !^table::load[[nameless;]путь]      !^table::load[[nameless;]путь]
         !если не nameless, названия колонок берутся из первой строки          !если не nameless, названия колонок берутся из первой строки
         !пустые строки, и строки в первой колонке содержащие '#', игнорируются                  !пустые строки, и строки в первой колонке содержащие '#', игнорируются        
Line 300  odbc    c:\drives\y\parser3project\odbc\ Line 319  odbc    c:\drives\y\parser3project\odbc\
     X^таблица.remove(position[;count]) - стирает запись       X^таблица.remove(position[;count]) - стирает запись 
         из текущей позиции [стирает запись из конкретной позиции]           из текущей позиции [стирает запись из конкретной позиции] 
             [стирает count записей]              [стирает count записей]
     !^таблица.join[таблица] - добавляет записи из таблицы.       !^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]]        - добавляет записи из таблицы. 
         таблицы должны иметь одинаковую структуру.          таблицы должны иметь одинаковую структуру.
     !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать      !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать
     !^таблица.locate[поле;значение] передвигает текущую строку, если найдёт. выдаёт bool      !^таблица.locate[поле;значение] передвигает текущую строку, если найдёт. выдаёт bool
Line 355  odbc    c:\drives\y\parser3project\odbc\ Line 374  odbc    c:\drives\y\parser3project\odbc\
   
 !request  !request
     !$request:query          !$request:query    
       !$request:body unprocessed POST request body
     !$request:uri      !$request:uri
     X!$request:browser  это hash, поля:      X!$request:browser  это hash, поля:
         !$type = ie/nn и !$version = номер, скажем 5.5                 !$type = ie/nn и !$version = номер, скажем 5.5       
Line 371  odbc    c:\drives\y\parser3project\odbc\ Line 391  odbc    c:\drives\y\parser3project\odbc\
         !значение может быть string а может быть hash:          !значение может быть string а может быть hash:
         ! $value[abc] field: {abc}<<часть          ! $value[abc] field: {abc}<<часть
         ! $attribute[zzz] field: abc; {attribute=zzz}<<часть          ! $attribute[zzz] field: abc; {attribute=zzz}<<часть
           !значение поля или атрибута может быть string или date
           ! если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT"
     !$response:body[DATA]  замещает стандартный ответ      !$response:body[DATA]  замещает стандартный ответ
     !$response:status      !$response:status
     !^response:clear[] забыть все заданные response поля      !^response:clear[] забыть все заданные response поля
Line 414  Xhashfile Line 436  Xhashfile
     ^code.cache[заголовки новостей](35){....}      ^code.cache[заголовки новостей](35){....}
   
 !mail  !mail
       !$mail.received=MESSAGE:
           .from
           .reply-to
           .subject
           .date класса date
           .message-id
           .raw[
               .СЫРОЕ_ПОЛЬЗОВАТЕЛЬСКОЕ-ПОЛЕ-ЗАГОЛОВКА
           ]
           $.{text|html|file#}[ << нумеруется как и в mail:send (text, text2, ...) (file, file2, ...)
               $.content-type[
                   $.value[{text|...|x-unknown}/{plain|html|...|x-unknown}]
                   [$.charset[windows-1251]] << в каком пришло, сейчас уже перекодировано
                   $.ПОЛЬЗОВАТЕЛЬСКИЙ-ПАРАМЕТР-ЗАГОЛОВКА
               ]
               $.description
               $.content-id
               $.content-md5
               $.content-location
               .raw[
                   .СЫРОЕ_ПОЛЬЗОВАТЕЛЬСКОЕ-ПОЛЕ-ЗАГОЛОВКА
               ]
               $.value[строка|FILE]
           ]
           $.message#[MESSAGE] (message, message2, ...)
   
       !^mail:send[
           $.charset[кодировка заголовка и текстовых блоков] 
           $.any-header-field 
           $.text[string]
           $.text[
              $.any-header-field 
              $.value[string]
           ]
           $.html{string}
           $.html[
               $.any-header-field 
               $.value{string}
           ]
           $.file#[FILE]
           $.file#[
               $.any-header-field 
               $value[FILE]
           ]
       ]
       !если charset указан, письмо перекодируется в этот charset
       !content-type.charset не влияет на перекодирование
       !после имени части может идти # число
           ^mail:send[
   #           по-умолчанию, совпадает с source encoding.
   #           задаёт кодировку body
               $.charset[windows-1251] 
   #           нет умолчания
               $.content-type[$.value[text/plain] $.charset[windows-1251]]
               $.from["вася" <vasya@design.ru>]
               $.to["петя" <petya@design.ru>]
               $.subject[пойдём пивка]
               $.body[
                   слова
               ]
           ]
     !:send[$.header-field[] $.charset[кодировка письма] $.body[когда body не строка,       !:send[$.header-field[] $.charset[кодировка письма] $.body[когда body не строка, 
         а hash, отсылается multipart письмо]]          а hash, отсылается multipart письмо]]
     !если charset указан, письмо перекодируется в этот charset      !если charset указан, письмо перекодируется в этот charset
     !content-type.charset не влияет на перекодирование      !content-type.charset не влияет на перекодирование
       !после имени части может идти целое число, части пойдут в порядке чисел.
     !если body указан строкой, то это текст письма, никаких вложений.      !если body указан строкой, то это текст письма, никаких вложений.
     !если body указан hash, то это части, будут собраны текстовые блоки, затем вложения      !если body указан hash, то это части, будут собраны текстовые блоки, затем вложения
       !это старый формат, поддерживается для обратной совместимости
     !если имя части начинается со слова text, то это текстовый блок.      !если имя части начинается со слова text, то это текстовый блок.
     !если имя части начинается со слова attach, то это вложение, формат задания::      !если имя части начинается со слова attach, то это вложение, формат задания::
         !$attach[$.format[!uue|Xbase64] $.value[DATA] $.file-name[user-file-name]]          !$attach[$.format[!uue|Xbase64] $.value[DATA] $.file-name[user-file-name]]
     !после имени части может идти целое число, части пойдут в порядке чисел.  
     !важно: при multipart не указывать content-type      !важно: при multipart не указывать content-type
         ^mail:send[          ^mail:send[
 #           по-умолчанию, совпадает с source encoding.  #           по-умолчанию, совпадает с source encoding.
Line 526  Xhashfile Line 610  Xhashfile
         возвращённый заголовок рассыпается на $поля          возвращённый заголовок рассыпается на $поля
         $status          $status
         $stderr          $stderr
     !^file::exec[имя файла[;env hash[;1cmd[;2line[;3ar[;4g[;5s;...under win32 max 10 args]]]]]]]      !^file::exec[имя файла[;env hash $.stdin[текст][;1cmd[;2line[;3ar[;4g[;5s;...under win32 max 10 args]]]]]]]
     !^file:move[старое имя файла;новое имя файла]       !^file:move[старое имя файла;новое имя файла] 
         можно переименовывать и двигать каталоги[win32: но не через границу дисков]          можно переименовывать и двигать каталоги[win32: но не через границу дисков]
         каталоги для dest создаются с правами 775          каталоги для dest создаются с правами 775
Line 537  Xhashfile Line 621  Xhashfile
         выполняется код          выполняется код
         разблокируется          разблокируется
     Xchmod[...] НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod.      Xchmod[...] НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod.
       !^file:dirname[/a/some.tar.gz]=/a
       !^file:dirname[/a/b/]=/a
       !^file:basename[/a/some.tar.gz]=some.tar.gz
       !^file:justname[/a/some.tar.gz]=some.tar
       !^file:justext[/a/some.tar.gz]=gz
   
 math  math
     !$math:PI      !$math:PI
Line 548  math Line 637  math
     !^math:degrees radians      !^math:degrees radians
     !^math:pow sqrt      !^math:pow sqrt
     !^math:random(ширина диапазона)      !^math:random(ширина диапазона)
     ^math:{C2C0983C-E26E-4169-BD07-77ECE9405BA5}      ^math:GUID {C2C0983C-E26E-4169-BD07-77ECE9405BA5}
       !^math:crypt[password;salt]
          salt prefix $apr1$ вызывает встроенный MD5 алгоритм, 
            если нет тела salt, оно создаётся случайным
          $1$ вызывает MD5 алгоритм функции OS 'crypt', если поддерживается [заведомо нет на solaris].
          другие salt читайте документацию по функции OS 'crypt'.
   
 !date  !date
     !время типа time можно использовать в выражениях, подставляет       !время типа time можно использовать в выражениях, подставляет 
         количество дней с epoch [1 января 1970 (UTC)], дробное          количество дней с epoch [1 января 1970 (UTC)], дробное
     !всё происходит в localtime,       !всё происходит в localtime, 
     !временная зона задаётся вне parser средствами OS      !временная зона задаётся вне parser средствами OS
       $date:UTC-offset  сколько дней надо прибавить,чтобы попасть в local время
       $date:TZ  наш часовой пояс, дробное, в часах (где-то есть с точностью до получаса)
     !^date::now[]      !^date::now[]
     !^date::now(смещение в днях) выдаёт сейчас+смещение      !^date::now(смещение в днях) выдаёт сейчас+смещение
     !^date::create(дней с epoch) // старое имя set      !^date::create(дней с epoch) // старое имя set
Line 564  math Line 659  math
         для удобного создания по значению из базы          для удобного создания по значению из базы
         формат1: %Y[-%m[-%d[ %H[:%M[:%S]]]]]          формат1: %Y[-%m[-%d[ %H[:%M[:%S]]]]]
         формат2: %H:%M[:%S]          формат2: %H:%M[:%S]
     !$date.year month day  hour minute second  weekday todo:yearday      !$date.year month day  hour minute second  weekday yearday(0...) daylightsaving
         read-only          read-only
     !^date.roll[year|month|day](+-смещение) сдвигает дату      !^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, week, weekyear
     !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу      !^date:calendar[rus|eng;год;месяц;день] выдаёт именнованную таблицу
         столбцы: year, month, day, weekday          столбцы: year, month, day, weekday
           
Line 602  xdoc(xnode) Line 697  xdoc(xnode)
     !равно текущей кодировке выходной страницы,      !равно текущей кодировке выходной страницы,
         $response:charset          $response:charset
     ::sql{...}      ::sql{...}
     !::create{<?xml?><string/>} старое имя 'set'      !::create[[URI]]{<?xml?><string/>} старое имя 'set'
     !::create[qualifiedName]      !::create[[URI]][qualifiedName]
         URI default = disk path to requested document
         для каталогов конечный / обязателен
     !::load[file.xml]      !::load[file.xml]
     !.transform[rules.xsl][[params hash]] выдаёт dom      !.transform[rules.xsl|xdoc][[params hash]] выдаёт dom
         шаблон кэшируется, кэш обновляется при изменении даты файла шаблона,          шаблон кэшируется, кэш обновляется при изменении даты файла шаблона,
         или изменении даты файла "имя шаблона.stamp"[проверка даты stamp приоритетнее]          или изменении даты файла "имя шаблона.stamp"[проверка даты stamp приоритетнее]
         <xsl:output          <xsl:output
Line 829  xdoc(xnode) Line 926  xdoc(xnode)
     !image.format         ^image::measure[index.html]                 not gif/jpg      !image.format         ^image::measure[index.html]                 not gif/jpg
     !sql.connect          ^connect[mysql://baduser:pass@host/db]{}    not found/timeout      !sql.connect          ^connect[mysql://baduser:pass@host/db]{}    not found/timeout
     !sql.execute          ^void:sql{select bad}                       syntax error      !sql.execute          ^void:sql{select bad}                       syntax error
       sql.duplicate
       sql.access
       sql.missing
       sql.xxx [serge asked]
     !xml                  ^xdoc::create{<forgot?>}                    any error in xml/xslt libs      !xml                  ^xdoc::create{<forgot?>}                    any error in xml/xslt libs
     !smtp.connect                                                     not found/timeout      !smtp.connect                                                     not found/timeout
     !smtp.execute                                                     communication error      !smtp.execute                                                     communication error
       !email.format         hren tam@null.ru                            wrong email format(bad chars/empty)
       !email.send           $MAIL.sendmail[/shit]                       sendmail not executable
       
 !нужно выключить русский apache: CharsetDisable on  !нужно выключить русский apache: CharsetDisable on
   
 !если в MAIN будет определён флаг $ORIGINS(1) то вместо обычного вывода страницы будет  !если в MAIN будет определён флаг $ORIGINS(1) то вместо обычного вывода страницы будет

Removed from v.1.47  
changed lines
  Added in v.1.82


E-mail: