Diff for /parser3/operators.ru.txt between versions 1.49 and 1.80

version 1.49, 2002/06/20 15:42:28 version 1.80, 2002/09/02 14:59:48
Line 34  Xне сделано, видимо, не будет сделано Line 34  Xне сделано, видимо, не будет сделано
            %left "==" "!="  "eq" "ne"             %left "==" "!="  "eq" "ne"
            %left "is" "def" "in" "-f" "-d"             %left "is" "def" "in" "-f" "-d"
            %left '!'             %left '!'
              условие ? когдаДа: когдаНет
   
            /* bitwise */             /* bitwise */
            %left '#'             %left '#'
Line 45  Xне сделано, видимо, не будет сделано Line 46  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 219  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 267  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 285  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 316  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 371  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 388  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 433  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 607  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 553  math Line 634  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 569  math Line 656  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 607  xdoc(xnode) Line 694  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 834  xdoc(xnode) Line 923  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.49  
changed lines
  Added in v.1.80


E-mail: