Diff for /parser3/operators.ru.txt between versions 1.42 and 1.88

version 1.42, 2002/06/10 14:37:35 version 1.88, 2002/10/15 09:42:40
Line 5  Xне сделано, видимо, не будет сделано Line 5  Xне сделано, видимо, не будет сделано
   
 операторы  операторы
     !^eval(выражение)[формат] выражение, кроме обычных функций::      !^eval(выражение)[формат] выражение, кроме обычных функций::
           !допустимы #комментарии
                   работают до конца строки или закрывающейся круглой скобки
                   внутри комментария допустимы вложенные круглые скобки
         !из неочевидных операторов:          !из неочевидных операторов:
             # побитный xor              !| побитный xor
             ## логический xor              !|| логический xor
             ~ побитное отрицание              ~ побитное отрицание
             \ целочисленное деление 10\3=3              \ целочисленное деление 10\3=3
         !def для проверки defined,          !def для проверки defined,
             пустая строка не defined              пустая строка не defined
             пустая таблица не defined              пустая таблица не defined
             пустой hash не defined              пустой hash не defined
           ^if(method $hash.delete){yes}
         !eq ne lt gt le ge для сравнения строк,           !eq ne lt gt le ge для сравнения строк, 
         !in "/dir/" для проверки          !in "/dir/" для проверки
             ["внутри не допустимы, если надо сравнить со сложным,               ["внутри не допустимы, если надо сравнить со сложным, 
Line 27  Xне сделано, видимо, не будет сделано Line 31  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 50  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 85  Xне сделано, видимо, не будет сделано Line 92  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[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код}
         по умолчанию, методы компилируются в $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?
             charset=cp1251_koi8&              charset=cp1251_koi8&
Line 160  odbc    c:\drives\y\parser3project\odbc\ Line 168  odbc    c:\drives\y\parser3project\odbc\
     !и есть исключение: ^untaint[html]{код} не оптимизируется       !и есть исключение: ^untaint[html]{код} не оптимизируется 
         Xбезотностительно флажка          Xбезотностительно флажка
   
     !у всех макросов есть локальная переменная $result, если в неё что положить,      !у всех методов есть локальная переменная $result, если в неё что положить,
     !то _это_ будет результатом макроса, а не его тело      !то _это_ будет результатом макроса, а не его тело
       !у всех методов есть локальная переменная $caller, в ней лежит родительский stack frame,
       !если туда записать
   
     !use(^use или @USE) ищет файл...      !use(^use или @USE) ищет файл...
     !1. ...если путь начинается с /, то считается, что это путь от корня веб пространства      !1. ...если путь начинается с /, то считается, что это путь от корня веб пространства
Line 216  odbc    c:\drives\y\parser3project\odbc\ Line 226  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 274  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 292  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 323  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
     !^таблица.locate(логическое выражение) передвигает текущую строку, если найдёт. выдаёт bool      !^таблица.locate(логическое выражение) передвигает текущую строку, если найдёт. выдаёт bool
     !^таблица.hash[поле, что будет ключом][[поле значений|table поля значений]]+      !^таблица.hash[поле, что будет ключом][[поле значений|table поля значений]][[$.distinct(1)]]
         значением $hash.ключ будет hash в котором поля значений будут ключами          значением $hash.ключ будет hash в котором поля значений будут ключами
         поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой          поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой
     !^таблица.columns[]+ таблица из одного столбца $column      !^таблица.columns[]+ таблица из одного столбца $column
     !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало      !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало
             $adults[^man.select($man.age>=18)]          $adults[^man.select($man.age>=18)]
         ^таблица.color[цвет1;цвет2]      ^таблица.color[цвет1;цвет2]
   
   
 !hash  !hash
Line 331  odbc    c:\drives\y\parser3project\odbc\ Line 354  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) 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
Line 355  odbc    c:\drives\y\parser3project\odbc\ Line 378  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 395  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 440  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 614  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 625  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
     !^math:round floor ceiling       !^math:round floor ceiling 
     !^math:trunc frac      !^math:trunc frac
Line 548  Xhashfile Line 641  Xhashfile
     !^math:degrees radians      !^math:degrees radians
     !^math:pow sqrt      !^math:pow sqrt
     !^math:random(ширина диапазона)      !^math:random(ширина диапазона)
       ^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
     !^date::create(year;month[;day[;hour[;minute[;second]]]]) // старое имя set      !^date::create(year;month[;day[;hour[;minute[;second]]]]) // старое имя set
     ^date::sql-create[дата в формате %Y-%m-%d %H:%M:%S]      !^date::create[дата в формате %Y-%m-%d %H:%M:%S]
         для удобного создания по значению из базы          для удобного создания по значению из базы
         формат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 600  xdoc(xnode) Line 701  xdoc(xnode)
     !равно текущей кодировке выходной страницы,      !равно текущей кодировке выходной страницы,
         $response:charset          $response:charset
     ::sql{...}      ::sql{...}
     !::create{<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 621  xdoc(xnode) Line 724  xdoc(xnode)
         !media-type = string />           !media-type = string /> 
         !параметры передаются как есть, не xpath выражения          !параметры передаются как есть, не xpath выражения
   
     !.string[output options]      !.string[[output options]]
     !.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 660  xdoc(xnode) Line 763  xdoc(xnode)
         true if the attribute received its value explicitly in the XML document,           true if the attribute received its value explicitly in the XML document, 
         or if a value was assigned programatically with the setValue function.          or if a value was assigned programatically with the setValue function.
         false if the attribute value came from the default value declared in the document's DTD.           false if the attribute value came from the default value declared in the document's DTD. 
       !$attribute_node.name
       !$attribute_node.value
     $text_node/cdata_node/comment_node.substringData      $text_node/cdata_node/comment_node.substringData
     !$pi_node.target = target of this processing instruction      !$pi_node.target = target of this processing instruction
         XML defines this as being the first token following the markup           XML defines this as being the first token following the markup 
         that begins the processing instruction.          that begins the processing instruction.
       !$pi_node.data = The content of this processing instruction
           This is from the first non white space character after the target 
           to the character immediately preceding the ?>. 
     document_node.      document_node.
         readonly attribute DocumentType doctype          readonly attribute DocumentType doctype
         readonly attribute DOMImplementation implementation              readonly attribute DOMImplementation implementation    
Line 690  xdoc(xnode) Line 798  xdoc(xnode)
     !void removeAttribute(in DOMString name) raises(DOMException)      !void removeAttribute(in DOMString name) raises(DOMException)
     !Attr getAttributeNode(in DOMString name)      !Attr getAttributeNode(in DOMString name)
     !Attr setAttributeNode(in Attr newAttr) raises(DOMException)      !Attr setAttributeNode(in Attr newAttr) raises(DOMException)
     !/*Attr*/ removeAttributeNode(in Attr oldAttr) raises(DOMException)      !Attr removeAttributeNode(in Attr oldAttr) raises(DOMException)
     !NodeList getElementsByTagName(in DOMString name)      !NodeList getElementsByTagName(in DOMString name)
     !void normalize()      !void normalize()
   
Line 703  xdoc(xnode) Line 811  xdoc(xnode)
     !^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 or die
     !^node.selectNumber[xpath/query/expression] = double if any      !^node.selectNumber[xpath/query/expression] = double if any or die
     !^node.selectString[xpath/query/expression] = string if any      !^node.selectString[xpath/query/expression] = string if any or die
   
     !error codes(пока придут как текст в случае соответствующих ошибок):      !error codes(пока придут как текст в случае соответствующих ошибок):
         INDEX_SIZE_ERR          INDEX_SIZE_ERR
Line 729  xdoc(xnode) Line 837  xdoc(xnode)
         does not support data          does not support data
         NO_MODIFICATION_ALLOWED_ERR          NO_MODIFICATION_ALLOWED_ERR
         If an attempt is made to modify an          If an attempt is made to modify an
         object where modifications are not              object where modifications are not
         allowed          allowed
         NOT_FOUND_ERR          NOT_FOUND_ERR
         If an attempt was made to reference a          If an attempt was made to reference a
Line 779  xdoc(xnode) Line 887  xdoc(xnode)
         !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
           !tv_sec
           !tv_usec
              $s[$status:rusage]
              ^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f]
   
   
 !DATA::=string | file  !DATA::=string | file
   
Line 787  xdoc(xnode) Line 900  xdoc(xnode)
     кучи auto.p и запрашиваемого документа:      кучи auto.p и запрашиваемого документа:
         !parser3.conf           !parser3.conf 
             cgi:               cgi: 
                 1. или полный путь из переменной окружения HTTP_PARSER_ROOT_CONFIG                  1. или полный путь из переменной окружения CGI_PARSER_SITE_CONFIG
                    или configure sysconfdir|windows directory   
                 2. или полный путь из переменной окружения HTTP_PARSER_SITE_CONFIG  
                    или рядом с бинарником parser'а                      или рядом с бинарником parser'а 
             isapi: windows directory              isapi: windows directory
             apache module:               apache module: 
                 1) ParserRootConfig [httpd.conf only]                   1) ParserConfig [can be in .htaccess]
                 2) ParserSiteConfig [can be in .htaccess]  
         !auto.p вниз от DOCUMENT_ROOT/ по дереву до каталога с обрабатываемым файлом включительно          !auto.p вниз от DOCUMENT_ROOT/ по дереву до каталога с обрабатываемым файлом включительно
     класс собирается из всех этих файлов, последующие становятся родителями предыдущих      класс собирается из всех этих файлов, последующие становятся родителями предыдущих
     имя последнего загруженного MAIN, имён у предыдущих нет      имя последнего загруженного MAIN, имён у предыдущих нет
Line 825  xdoc(xnode) Line 935  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.42  
changed lines
  Added in v.1.88


E-mail: