Diff for /parser3/operators.ru.txt between versions 1.237 and 1.248

version 1.237, 2010/11/25 14:17:51 version 1.248, 2015/10/29 18:33:00
Line 91  Xне сделано, видимо, не будет сделано Line 91  Xне сделано, видимо, не будет сделано
             }              }
         }          }
     }      }
     ^exit[] + - прекращяет обработку запроса.   
         удобно сделать после выставления 401 ошибки  
     ^return[результат] + - отваливает из выполнения метода,   
         выдавая нестандартный результат  
     !^break[] + - обрывает цикл      !^break[] + - обрывает цикл
     !^continue[] + - обрывает итерацию цикла      !^continue[] + - обрывает итерацию цикла
     !^untaint[[as-is|file-spec|http-header|mail-header|uri|sql|js|xml|html|optimized-html|regex|parser-code]]{код}      !^untaint[[as-is|file-spec|uri|http-header|mail-header|sql|js|json|parser-code|regex|xml|html|optimized-[as-is|xml|html]]]{код}
         default as-is          default as-is
     !^taint[[lang]][код]      !^taint[[lang]][код]
         default "just tainted, language unknown"          default "just tainted, language unknown"
Line 111  Xне сделано, видимо, не будет сделано Line 107  Xне сделано, видимо, не будет сделано
     !^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              ClientCharset=parser-charset << charset in which parser thinks client works
             charset=cp1251_koi8&              charset=UTF-8&
             timeout=3&              timeout=3&
             compress=0&              compress=0&
             named_pipe=1&              named_pipe=1&
Line 149  Xне сделано, видимо, не будет сделано Line 145  Xне сделано, видимо, не будет сделано
 #sql drivers  #sql drivers
 $SQL[  $SQL[
     $.drivers[^table::create{protocol   driver  client      $.drivers[^table::create{protocol   driver  client
 mysql   /www/parser3/libparser3mysql.so /usr/local/lib/mysql/libmysqlclient.so  mysql   /www/parser3/libparser3mysql.so libmysqlclient.so
 pgsql   /www/parser3/libparser3pgsql.so /usr/local/pgsql/lib/libpq.so  pgsql   /www/parser3/libparser3pgsql.so libpq.so
 oracle  /www/parser3/libparser3oracle.so        /u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data  oracle  /www/parser3/libparser3oracle.so        /u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data
 sqlite  /www/parser3/libparser3sqlite.so        /usr/local/sqlite/lib/sqlite3.so  sqlite  /www/parser3/libparser3sqlite.so        sqlite3.so
 odbc    c:\drives\y\parser3project\odbc\debug\parser3odbc.dll  odbc    c:\drives\y\parser3project\odbc\debug\parser3odbc.dll
 }]  }]
 ]  ]
Line 187  odbc c:\drives\y\parser3project\odbc\deb Line 183  odbc c:\drives\y\parser3project\odbc\deb
         !сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'"          !сигнализирует вышестоящему ^cache "уменьши до стольких-то 'секунд'/'expires'"
         !в пределе: ^cache(0) отменить кэширование          !в пределе: ^cache(0) отменить кэширование
     !^cache[] выдаёт текущую expires date      !^cache[] выдаёт текущую expires date
     X^cache[read]   
         сигнализирует вышестоящему ^cache "взять скэшированное насильно, игнорируя expires",  
         выдаёт bool "получилось/нет"  
         !^sleep(seconds)  
   
   
     Xесть глобальный флажок в свойствах/командной строке "не оптимизировать"  
     !и есть исключение: ^untaint[html]{код} не оптимизируется   
         Xбезотностительно флажка  
   
     !у всех методов есть локальная переменная $result, если в неё что положить,      !у всех методов есть локальная переменная $result, если в неё что положить,
     !то _это_ будет результатом макроса, а не его тело      !то _это_ будет результатом макроса, а не его тело
Line 256  odbc c:\drives\y\parser3project\odbc\deb Line 243  odbc c:\drives\y\parser3project\odbc\deb
   
   
 !void  !void
     !^имя.length[]      !доступны все методы, присутствующие у объекта класса string, результат как у пустой строки
         0  
     !^имя.pos[...]  
         -1  
     !^имя.left(n)  
        ничего не выдаёт  
     !^имя.right(n)  
        ничего не выдаёт  
     !^имя.mid(p[;n])  
        ничего не выдаёт  
     !^имя.int[]  (default)   
         0 или default  
     !^имя.double[] (default)  
         0 или default  
     !^имя.bool[] (default)  
         false или default  
     !^void:sql{запрос без результата}{$.bind[см. table::sql]}      !^void:sql{запрос без результата}{$.bind[см. table::sql]}
   
   
Line 326  odbc c:\drives\y\parser3project\odbc\deb Line 298  odbc c:\drives\y\parser3project\odbc\deb
     !^строка.{l|r}split[разделитель] таблица из столбца $piece      !^строка.{l|r}split[разделитель] таблица из столбца $piece
         оставлен для совместимости          оставлен для совместимости
     !^строка.upper|lower[]       !^строка.upper|lower[] 
     X^строка.truncate(предел терпенья) стиль :(  
     !^строка.length[]      !^строка.length[]
     !^строка.mid(P[;N])      !^строка.mid(P[;N])
         без N - "до конца строки"          без N - "до конца строки"
     !^строка.left(N)      !^строка.left(N), -1 выдает всю строку
     !^строка.right(N)      !^строка.right(N)
     !^строка.pos[подстрока]      !^строка.pos[подстрока]
     !^строка.pos[подстрока](позиция, с которой ищем)      !^строка.pos[подстрока](позиция, с которой ищем)
         <0 = не найдено          <0 = не найдено
     !^строка.replace[$таблица_подстановок_строка_на_строку]      !^строка.replace[$таблица_подстановок_строка_на_строку]
       !^строка.replace[$что;$на-что]
     !^строка.save[[append;]путь]      !^строка.save[[append;]путь]
     !^строка.save[путь[;$.charset[в какой кодировке сохраняем] $.append(true)]]      !^строка.save[путь[;$.charset[в какой кодировке сохраняем] $.append(true)]]
     !^строка.normalize[] выдает другую строку, в которой фрагменты на одном языке объединены      !^строка.normalize[] выдает другую строку, в которой фрагменты на одном языке объединены
Line 343  odbc c:\drives\y\parser3project\odbc\deb Line 315  odbc c:\drives\y\parser3project\odbc\deb
         состоит из большого числа фрагментов          состоит из большого числа фрагментов
     !^строка.trim[start|both|end|left|right[;chars]] выкидывает chars из начала/конца/и начала и конца      !^строка.trim[start|both|end|left|right[;chars]] выкидывает chars из начала/конца/и начала и конца
         default 'chars' -- whitespace chars          default 'chars' -- whitespace chars
     !^строка.append[string]      !^строка.trim[chars] выкидывает chars из начала и конца
     !^строка.base64[] encode      !^строка.base64[] encode
     !^string:base64[encoded] decode      !^string:base64[encoded[;$.strict(true)]] decode
       !^строка.idna[] IDNA кодирование, поддержка кириллических доменов
       !^string:idna[encoded] IDNA декодирование, поддержка кириллических доменов
       !^строка.js-escape[] кодирование для передачи в JS (%uXXXX)
       !^string:js-unescape[escaped] декодирование переданного из js
       !^string:unescape[js|uri;escaped; $.charset[] ] декодирование переданного из js или uri
   
 !table  !table
     в выражении       в выражении 
Line 367  odbc c:\drives\y\parser3project\odbc\deb Line 344  odbc c:\drives\y\parser3project\odbc\deb
         в параметре bind передать hash, из которого возьмётся(или куда запишется) значение          в параметре bind передать hash, из которого возьмётся(или куда запишется) значение
     !^таблица.save[[nameless|append;]путь[;опции, см. load]]      !^таблица.save[[nameless|append;]путь[;опции, см. load]]
     !$таблица.поле      !$таблица.поле
       !$таблица.поле[новое значение]
     !$таблица.fields  из named таблицы выдаёт текущую запись как Hash      !$таблица.fields  из named таблицы выдаёт текущую запись как Hash
     !^таблица.menu{тело}[[разделитель]]      !^таблица.menu{тело}[[разделитель]]
     !^таблица.offset[] печатает offset      !^таблица.offset[] печатает offset
     !^таблица.offset[[whence]](5) сдвигает      !^таблица.offset[[whence]](5) сдвигает
         !whence=cur|set          !whence=cur|set
         !без whence - это cur          !без whence - это cur
     !^таблица.count[]      !^таблица.count[], ^таблица.count[rows] - количество строк в таблице
       !^таблица.count[columns] - количество столбцов таблицы
       !^таблица.count[cells] - количество ячеек в текущей строке таблицы
     !^таблица.line[] 1-based offset      !^таблица.line[] 1-based offset
     !^таблица.sort{{ключеделатель строка}|(ключеделатель число)}[{desc|asc}] default=asc      !^таблица.sort{{ключеделатель строка}|(ключеделатель число)}[{desc|asc}] default=asc
     !^таблица.append{данные}      !^таблица.append{данные}
     X^таблица.insert{данные}[(n)] добавить запись       !^таблица.append[ $.имя столбца[значение столбца] ]
         на текущую позицию [добавить запись на позицию n]      !^таблица.insert{данные} добавить запись на текущую позицию
     X^таблица.remove(position[;count]) - стирает запись       !^таблица.insert[ $.имя столбца[значение столбца] ]
         из текущей позиции [стирает запись из конкретной позиции]       !^таблица.delete[] - стирает запись с текущей позиции
             [стирает count записей]      !^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] - добавляет записи из таблицы.
     !^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] - добавляет записи из таблицы.   
         таблицы должны иметь одинаковую структуру.          таблицы должны иметь одинаковую структуру.
     !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать      !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать
     !^таблица.locate[поле;значение][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]]       !^таблица.locate[поле;значение][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] 
Line 421  odbc c:\drives\y\parser3project\odbc\deb Line 400  odbc c:\drives\y\parser3project\odbc\deb
     !^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(ключи=названия остальных колонкок ответа)
     !^хеш._keys[[название колонки с ключами]]+ таблица из одного столбца $key или как передадут      !^хеш.keys[[название колонки с ключами]]+ таблица из одного столбца key или как передадут
     !^хеш._count[]      !^хеш.count[]
     !^хеш.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]      !^хеш.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}]
     !^хеш.delete[ключ]  удалить ключ      !^хеш.delete[ключ]  удалить ключ
     !^хеш.contain[ключ] - существует ли в хеше ключ (bool)      !^хеш.contain[ключ] - существует ли в хеше ключ (bool)
     !^хэш._at[first|last]      !^хэш.at[first|last][[key|value|hash]]
     !^хэш._at([-]N)      !^хэш.at([-]N)[[key|value|hash]]
         доступ к заданным элементам упорядоченного хеша          доступ к заданным элементам упорядоченного хеша
       !^хэш.sort[key;value]{{ключеделатель строка}|(ключеделатель число)}[[desc|asc]] default=asc
   
 !hashfile  !hashfile
     !^hashfile::open[filename]      !^hashfile::open[filename]
Line 471  odbc c:\drives\y\parser3project\odbc\deb Line 451  odbc c:\drives\y\parser3project\odbc\deb
   
 !env  !env
     !$env:переменная      !$env:переменная
     !$env:PARSER то же самое, что показывается при запуске parser.cgi      !$env:fields хэш с переменными окружения
       !$env:PARSER_VERSION версия парсера
   
   
 !cookie  !cookie
Line 485  odbc c:\drives\y\parser3project\odbc\deb Line 466  odbc c:\drives\y\parser3project\odbc\deb
   
   
 !request  !request
     !$request:query          !$request:query
     !$request:body unprocessed POST request body  
     !$request:uri      !$request:uri
     !$request:document-root      !$request:document-root
         каталог, относительно которого считаются пути в parser, по-умолчанию = $env:DOCUMENT_ROOT          каталог, относительно которого считаются пути в parser, по-умолчанию = $env:DOCUMENT_ROOT
         можно изменить, если на hosting что-то неудобно настроено          можно изменить, если на hosting что-то неудобно настроено
     !$request:argv = hash с параметрами коммандной строки. ключи 0, 1, ... [0 -- имя обрабатываемого файла].      !$request:argv = hash с параметрами коммандной строки. ключи 0, 1, ... [0 -- имя обрабатываемого файла].
     X!$request:browser  это hash, поля:  
         !$type = ie/nn и !$version = номер, скажем 5.5         
     X$request:user  
     X$request:password  
     !$request:charset      !$request:charset
         Кодировка исходного документа           Кодировка исходного документа 
         !используется при upper/lower и match[][i]          !используется при upper/lower и match[][i]
         ПРЕДУПРЕЖДЕНИЕ: класс form получает свои поля после обработки всех auto класса MAIN          ПРЕДУПРЕЖДЕНИЕ: класс form получает свои поля после обработки всех auto класса MAIN
         поэтому необходимо задать $request/response:charset в одном из них. не после.          поэтому необходимо задать $request/response:charset в одном из них. не после.
       !$request:method метод запроса (GET|POST|PUT)
       !$request:body тело POST-запроса в виде текста
       !$request:body-file тело POST-запроса в виде файла
       !$request:body-charset кодировка POST-запроса
       !$request:headers хэш с заголовками запроса (без префикса HTTP_)
   
   
 !response  !response
Line 534  odbc c:\drives\y\parser3project\odbc\deb Line 515  odbc c:\drives\y\parser3project\odbc\deb
     !^шаблон.size[] количество байт скомпилированного шаблона      !^шаблон.size[] количество байт скомпилированного шаблона
         если значение очень большое -- стоит почитать документацию по pcre и, возможно, переписать шаблон.          если значение очень большое -- стоит почитать документацию по pcre и, возможно, переписать шаблон.
     !^шаблон.study_size[] размер study-структуры. если==0 -- шаблон не может быть "изучен"      !^шаблон.study_size[] размер study-структуры. если==0 -- шаблон не может быть "изучен"
     ^шаблон.save[filespec]  
     ^шаблон.load[filespec]  
   
   
 !reflection  !reflection
Line 545  odbc c:\drives\y\parser3project\odbc\deb Line 524  odbc c:\drives\y\parser3project\odbc\deb
     !^reflection:class_name[объект]        имя класса переданного объекта      !^reflection:class_name[объект]        имя класса переданного объекта
     !^reflection:base[объект]              родительский класс переданного объекта      !^reflection:base[объект]              родительский класс переданного объекта
     !^reflection:base_name[объект]         имя родительского класса переданного объекта      !^reflection:base_name[объект]         имя родительского класса переданного объекта
       !^reflection:class_by_name[имя класса] получение класса по имени
       !^reflection:def[class;имя класса]     проверка класса на существование
     !^reflection:methods[класс]            хеш со списком методов указанного класса, значения -- строки 'native' или 'parser'      !^reflection:methods[класс]            хеш со списком методов указанного класса, значения -- строки 'native' или 'parser'
       !^reflection:method[класс или объект;имя метода] возвращает junction-method класса или объекта
     !^reflection:fields[класс или объект]  хеш со списком статических полей указанного класса или динамических полей указанного объекта      !^reflection:fields[класс или объект]  хеш со списком статических полей указанного класса или динамических полей указанного объекта
       !^reflection:field[класс или объект;имя поля]  возвращает значение указанного поля класса или объекта. getter-ы игнорируются.
       !^reflection:uid[класс или объект]     возвращает идентификатор объекта или класса
     !^reflection:method_info[класс;метод]  хеш с параметрами указанного метода класса      !^reflection:method_info[класс;метод]  хеш с параметрами указанного метода класса
          $.inherited[класс]                имя класса, где метод был определён (возвращается только если метод был определён в предке)           $.inherited[класс]                имя класса, где метод был определён (возвращается только если метод был определён в предке)
            $.overridden[класс]               имя класса, где метод был определён (возвращается только если метод был определён в предке)
          для native классов возвращается хеш:           для native классов возвращается хеш:
              .min_params(минимально необходимое число параметров)               .min_params(минимально необходимое число параметров)
              .max_params(максимально возможное число параметров)               .max_params(максимально возможное число параметров)
Line 558  odbc c:\drives\y\parser3project\odbc\deb Line 543  odbc c:\drives\y\parser3project\odbc\deb
     !^reflection:dynamical[[object or class, caller if absent]]    возвращает true, если метод был вызван из динамического контекста      !^reflection:dynamical[[object or class, caller if absent]]    возвращает true, если метод был вызван из динамического контекста
                                                                    при передаче параметра возвращает true, если передан динамический объект,                                                                     при передаче параметра возвращает true, если передан динамический объект,
                                                                    false если класс                                                                     false если класс
       !^reflection:delete[класс или объект;имя переменной]           удаляет переменную с указанным именем в указанном классе или объекте
       !^reflection:is[имя элемента;имя класса][[контекст]]           аналог оператора is, позволяющий определить, является ли элемент кодом.
   
   
 !mail  !mail
Line 746  odbc c:\drives\y\parser3project\odbc\deb Line 733  odbc c:\drives\y\parser3project\odbc\deb
     !^файл.save[text|binary;имя файла[;$.charset[в какой кодировке сохраняем]]]      !^файл.save[text|binary;имя файла[;$.charset[в какой кодировке сохраняем]]]
     !^file:delete[имя файла]      !^file:delete[имя файла]
     !^file:find[имя файла][{когда не нашли}]      !^file:find[имя файла][{когда не нашли}]
     !^file:list[путь[;шаблон-строка|шаблон-regex]] = table с колонкой name      !^file:list[путь[;шаблон-строка|шаблон-regex]] = table с колонками name dir
       !^file:list[путь;$.filter[шаблон-строка|шаблон-regex] $.stat(true)] = table с колонками name dir size [mca]date
     !^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;имя;data]      !^file::create[text|binary;имя;data]
     !^file::create[text;имя;data[;$.charset[кодировка букв в создаваемом файле]]]      !^file::create[text|binary;имя;data[;$.charset[кодировка букв в создаваемом файле] $.content-type[...]]]
       !^file::create[string-or-file-content[;$.name[имя] $.mode[text|binary] $.content-type[...] $.charset[...]]]
     !$файл_который_был_loaded.size      !$файл_который_был_loaded.size
     !$файл_который_был_loaded_или_created.mode = text/binary      !$файл_который_был_loaded_или_created.mode = text/binary
     !^file::stat[имя файла]      !^file::stat[имя файла]
Line 773  odbc c:\drives\y\parser3project\odbc\deb Line 762  odbc c:\drives\y\parser3project\odbc\deb
         выполняется код          выполняется код
         разблокируется          разблокируется
     Xchmod[...] НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod.      Xchmod[...] НЕТ И НЕ БУДЕТ, ЧТОБЫ НЕ МОГЛИ СДЕЛАТЬ executable и запустить, даже если ftp запрещает chmod.
     !^file:dirname[/a/some.tar.gz]=/a      !^file:dirname[/a/some.tar.gz]=/a (работает аналогично комманде *nix)
     !^file:dirname[/a/b/]=/a      !^file:dirname[/a/b/]=/a (работает аналогично комманде *nix)
     !^file:basename[/a/some.tar.gz]=some.tar.gz      !^file:basename[/a/some.tar.gz]=some.tar.gz (работает аналогично комманде *nix)
       !^file:basename[/a/b/]=b (работает аналогично комманде *nix)
     !^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
     !^файл.sql-string[] внутри ^connect даст правильно escaped строку, которую можно в запрос отдать      !^файл.sql-string[] внутри ^connect даст правильно escaped строку, которую можно в запрос отдать
     X^file::sql[[имя_файла_для_download]]{}      !^file::sql{query}[[
     !^file::sql{}[[  
         $.name[имя_файла_для_download]          $.name[имя_файла_для_download]
         $.content-type[пользовательский content-type]          $.content-type[пользовательский content-type]
     ]]      ]]
Line 837  odbc c:\drives\y\parser3project\odbc\deb Line 826  odbc c:\drives\y\parser3project\odbc\deb
        вычисляет crc32 строки         вычисляет crc32 строки
     !^math:sha1[string]      !^math:sha1[string]
     !^math:convert[number](base-from;base-to) преобразует строку с числом из одной системы исчисления в другую      !^math:convert[number](base-from;base-to) преобразует строку с числом из одной системы исчисления в другую
       !^math:digest[[md5|sha1|sha256|sha512];строка или файл][[ $.format[hex|base64] $.hmac[ключ] ]]
          объединяет в себе возможность работы с разными алгоритмами криптографического хеширования.
          $.hmac[ключ] для проверки целостности переданных данных
   
   
 !inet  !inet
     !^inet:ntoa(long)      !^inet:ntoa(long)
     !^inet:aton[IP]      !^inet:aton[IP]
       !^inet:name2ip[name][[ $.ipv[4|6|any] $.table(true) ]] прямое преобразование имени в IP адрес
       !^inet:ip2name[ip][ $.ipv[4|6|any] ]] обратное преобразование из IP адреса в имя
   
   
 !json  !json
     !^json:parse[-json-строка-[;      !^json:parse[-json-строка-[;
         $.depth(максимальная глубина, default == 19)          $.depth(максимальная глубина, default == 19)
         $.double(false)              отключить встроенный парсинг чисел с плавающей точкой (по умолчанию включен)          $.double(false)              отключить встроенный парсинг чисел с плавающей точкой (по умолчанию включен)
                                      в этом случае они попадут в результирующий объект как строки                                       в этом случае они попадут в результирующий объект как строки
           $.int(false)                 отключить встроенный парсинг целых чисел (по умолчанию включен)
                                        в этом случае они попадут в результирующий объект как строки
         $.distinct[first|last|all]   как будет происходить разбор дублирующихся ключей у объектов          $.distinct[first|last|all]   как будет происходить разбор дублирующихся ключей у объектов
                                      first -- будет оставлен первый встретившийся элемент                                       first -- будет оставлен первый встретившийся элемент
                                      last  -- будет оставлен последний встретившийся элемент                                       last  -- будет оставлен последний встретившийся элемент
Line 856  odbc c:\drives\y\parser3project\odbc\deb Line 853  odbc c:\drives\y\parser3project\odbc\deb
                                      по умолчанию дублирующиеся ключи приведут к exception                                       по умолчанию дублирующиеся ключи приведут к exception
         $.object[method-junction]    пользовательский метод[ключ;объект], которому будут передаваться все разобранные           $.object[method-junction]    пользовательский метод[ключ;объект], которому будут передаваться все разобранные 
                                      объекты и ключи объекта, метод возвращает новый объект                                       объекты и ключи объекта, метод возвращает новый объект
           $.array[method-junction]     пользовательский метод, которому будут передаваться массивы
     ]]      ]]
         парсит json-строку в хэш          парсит json-строку в хэш
     !^json:string[system or user object[;      !^json:string[system or user object[;
         $.skip-unknown(false)    отключить exception и выдавать 'null' при сериализации объектов с типами          $.skip-unknown(false)    отключить exception и выдавать 'null' при сериализации объектов с типами
                                  отличных от void, bool, string, int, double, date, table, hash и file                                   отличных от void, bool, string, int, double, date, table, hash и file
         $.indent(true)           форматировать результирующую строку табуляциями по глубине вложенности          $.indent(true)           форматировать результирующую строку табуляциями по глубине вложенности
         $.date[sql-string|gmt-string|unix-timestamp]    формат вывода даты, по умолчанию -- sql-string          $.date[sql-string|gmt-string|iso-string|unix-timestamp]    формат вывода даты, по умолчанию -- sql-string
         $.table[object|array|compact]    формат вывода таблицы, по умолчанию -- object          $.table[object|array|compact]    формат вывода таблицы, по умолчанию -- object
                                  object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...]                                   object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...]
                                  array:  [["c1","c2",...] || null (for nameless),["v11","v12",...],...]                                   array:  [["c1","c2",...] || null (for nameless),["v11","v12",...],...]
                                  compact:  ["v11" || ["v11","v12",...],...]                                   compact:  ["v11" || ["v11","v12",...],...]
         $.file[text|base64]      вывести тело файла в указанном виде (по умолчание тело файла           $.file[text|base64|stat] вывести тело файла в указанном виде (по умолчание тело файла 
                                  не попадает в output)                                   не попадает в output)
           $.xdoc[hash]             параметры преобразования xdoc в строку (как в ^xdoc.string[])
         $.тип[method-junction]   любой тип можно вывести с помощью пользовательского метода, который           $.тип[method-junction]   любой тип можно вывести с помощью пользовательского метода, который 
                                  должен принимать 3 параметра: ключ, объект данного типа и опции                                    должен принимать 3 параметра: ключ, объект данного типа и опции 
                                  вызова ^json:string[]                                   вызова ^json:string[]
           $._default[имя метода]   имя пользователького метода, при его наличии он будет вызван для
                                    сериализации
           $.void[null|string]      неопределенное значение будет выдано в виде null (по умолчанию)
                                    или пустой строки
     ]]      ]]
         сериализует системный или пользовательский объект в json-строку          сериализует системный или пользовательский объект в json-строку
   
Line 879  odbc c:\drives\y\parser3project\odbc\deb Line 882  odbc c:\drives\y\parser3project\odbc\deb
 !date  !date
     !время типа time можно использовать в выражениях, подставляет       !время типа time можно использовать в выражениях, подставляет 
         количество дней с epoch [1 января 1970 (UTC)], дробное          количество дней с epoch [1 января 1970 (UTC)], дробное
     !всё происходит в localtime,       !строковое значение в местном времени, численное в UTC
     !временная зона задаётся вне parser средствами OS      !по умолчанию используется установленная средствами OS временная зона
     $date:UTC-offset  сколько дней надо прибавить,чтобы попасть в local время  
     $date:TZ  наш часовой пояс, дробное, в часах (где-то есть с точностью до получаса)  
     !^date::now[]      !^date::now[]
     !^date::now(смещение в днях) выдаёт сейчас+смещение      !^date::now(смещение в днях) выдаёт сейчас+смещение
     !^date::create(дней с epoch) // старое имя set      !^date::today[] дата на 00:00:00 текущего дня
     !^date::create(year;month[;day[;hour[;minute[;second]]]]) // старое имя set      !^date::create(дней с epoch)
       !^date::create(year;month[;day[;hour[;minute[;second]]]])
     !^date::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::create[дата в формате %Y-%m-%dT%H:%M[:%S]TZ]
           для создания по значению в формате ISO 8601
           формат TZ: Z(UTC) или +-hour[:minute] (смещение от UTC)
     !^date::unix-timestamp()      !^date::unix-timestamp()
     !^дата.unix-timestamp[]      !^дата.unix-timestamp[]
     !$дата.year month day  hour minute second  weekday yearday(0...) daylightsaving TZ weekyear      !$дата.year month day  hour minute second  weekday yearday(0...) daylightsaving TZ weekyear
Line 898  odbc c:\drives\y\parser3project\odbc\deb Line 903  odbc c:\drives\y\parser3project\odbc\deb
         TZ="" << локальная зона          TZ="" << локальная зона
     !^дата.roll[year|month|day](+-смещение) сдвигает дату      !^дата.roll[year|month|day](+-смещение) сдвигает дату
     !^дата.roll[TZ;Новая зона] говорит, что дата в таком-то часовом поясе: влияет на .hour & Co      !^дата.roll[TZ;Новая зона] говорит, что дата в таком-то часовом поясе: влияет на .hour & Co
     !^дата.sql-string[] %Y-%m-%d %H:%M:%S      !^date:roll[TZ;Новая зона] говорит, что по умолчанию все даты в таком-то часовом поясе
       !^дата.sql-string[[datetime|date|time]]
           datetime или без параметра -- %Y-%m-%d %H:%M:%S
           date                       -- %Y-%m-%d
           time                       -- %H:%M:%S
         where published='^дата.sql-string[]'          where published='^дата.sql-string[]'
     !^date:calendar[rus|eng](год;месяц) выдаёт неименованную таблицу       !^date:calendar[rus|eng](год;месяц) выдаёт неименованную таблицу 
         столбцы: 0..6, week, year          столбцы: 0..6, week, year
Line 907  odbc c:\drives\y\parser3project\odbc\deb Line 916  odbc c:\drives\y\parser3project\odbc\deb
     !^date:last-day(год;месяц) вернёт последний день месяца      !^date:last-day(год;месяц) вернёт последний день месяца
     !^дата.last-day[] вернёт последний день месяца $дата      !^дата.last-day[] вернёт последний день месяца $дата
     !^дата.gmt-string[]  Fri, 23 Mar 2001 09:32:23 GMT      !^дата.gmt-string[]  Fri, 23 Mar 2001 09:32:23 GMT
       !^дата.iso-string[]  2001-03-23T12:32:23+3
   
   
 xdoc(xnode)  xdoc(xnode)
Line 1220  DATA::=string | file | hash Line 1230  DATA::=string | file | hash
         !по-умолчанию, получение http status != 200 >> создает http.status ошибку,          !по-умолчанию, получение http status != 200 >> создает http.status ошибку,
         !это можно отключить, передав          !это можно отключить, передав
         !$.any-status(1)          !$.any-status(1)
         !$.charset[кодировка удалённых докуметов по-умолчанию] << если сервер вернёт content-type:charset=ОНА_ПЕРЕБИВАЕТ          !$.charset[кодировка удалённых документов по-умолчанию], если сервер вернёт content-type:charset - ОНА_ПЕРЕБИВАЕТ
           !$.response-charset[кодировка удалённых документов], не перебиваеся content-type:charset
         !$.user[пользователь]          !$.user[пользователь]
         !$.password[пароль]          !$.password[пароль]
     !file::load в дополнительные поля записывает      !file::load в дополнительные поля записывает
Line 1259  DATA::=string | file | hash Line 1270  DATA::=string | file | hash
     !http.status          ^file::load[http://ok/there]                host found, connection accepted, status!=200      !http.status          ^file::load[http://ok/there]                host found, connection accepted, status!=200
     !date.range           ^date::create(1950;1;1)                     date out of valid range      !date.range           ^date::create(1950;1;1)                     date out of valid range
   
 !нужно выключить русский apache: CharsetDisable on  
   
 Xесли в MAIN будет определён флаг $ORIGINS(1) то вместо обычного вывода страницы будет  
     выдан список фрагментов результата с указанием их происхождения  
   
 !если в MAIN определён $SIGPIPE(1) то в случае, если обработка была прервана пользователем, сообщение  !если в MAIN определён $SIGPIPE(1) то в случае, если обработка была прервана пользователем, сообщение
         об этом будет записано в parser3.log (раньше оно всегда писалось)          об этом будет записано в parser3.log (раньше оно всегда писалось)
   

Removed from v.1.237  
changed lines
  Added in v.1.248


E-mail: