Diff for /parser3/operators.ru.txt between versions 1.260 and 1.262

version 1.260, 2024/12/20 18:45:23 version 1.262, 2024/12/20 19:20:02
Line 471  hashfile Line 471  hashfile
     $sessions.$sid[$.value[$uid] $.expires(1)]      $sessions.$sid[$.value[$uid] $.expires(1)]
     $uid[$sessions.$sid]      $uid[$sessions.$sid]
   
   
 array  array
     в выражении      в выражении
         логическое значение равно "не пуст?"          логическое значение равно "не пуст?"
Line 546  array Line 545  array
     $отобранное[^массив.select[key;value](выражение)[ $.limit(N) $.reverse(bool) ]]      $отобранное[^массив.select[key;value](выражение)[ $.limit(N) $.reverse(bool) ]]
         отбор элементов массива, для которых условие истинно          отбор элементов массива, для которых условие истинно
   
   date
       время типа date можно использовать в выражениях, подставляет количество дней с epoch [1 января 1970 (UTC)], дробное
       строковое значение в местном времени, численное в UTC, диапазон от 0000-00-00 00:00:00 до 9999-12-31 23:59:59
       по умолчанию используется установленная средствами OS временная зона
   
       ^date::now[]
       ^date::now(смещение в днях)
           выдаёт сейчас+смещение
       ^date::today[]
           дата на 00:00:00 текущего дня
       ^date::today(целочисленное смещение в днях)
           дата на 00:00:00 текущего дня+смещение
       ^date::create(дней с epoch)
       ^date::create(year;month[;day[;hour[;minute[;second[;TZ]]]]])
       ^date::create[дата в формате %Y-%m-%d %H:%M:%S]
           для удобного создания по значению из базы
           формат1: %Y[-%m[-%d[ %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()
       ^дата.unix-timestamp[]
       $дата.year month day hour minute second weekday yearday(0...) daylightsaving TZ weekyear
           TZ="" << локальная зона
       $дата.year month day hour minute second можно задать новое значение, остальные read only
       ^дата.double[] ^дата.int[]
           количество дней с epoch [1 января 1970 (UTC)], дробное или целое
       ^дата.roll[year|month|day](+-смещение)
           сдвигает дату
       ^дата.roll[TZ;Новая зона]
           говорит, что дата в таком-то часовом поясе: влияет на .hour & Co
       ^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[]'
       ^date:calendar[rus|eng](год;месяц)
           выдаёт неименованную таблицу, столбцы: 0..6, week, year
       ^date:calendar[rus|eng](год;месяц;день)
           выдаёт именнованную таблицу, столбцы: year, month, day, weekday
       ^date:last-day(год;месяц)
           вернёт последний день месяца
       ^дата.last-day[]
           вернёт последний день месяца $дата
       ^дата.gmt-string[]
           Fri, 23 Mar 2001 09:32:23 GMT
       ^дата.iso-string[]
           2001-03-23T12:32:23+03
   
   file
       $файл_из_post.name
       $файл_из_post.size
       $файлt_из_post.text
       ^файл.save[text|binary;имя файла[;$.charset[в какой кодировке сохраняем]]]
       ^file:delete[имя файла]
       ^file:find[имя файла][{когда не нашли}]
       ^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::create[text|binary;имя;data]
       ^file::create[text|binary;имя;data[;$.charset[кодировка букв в создаваемом файле] $.content-type[...]]]
       ^file::create[string-or-file-content[;$.name[имя] $.mode[text|binary] $.content-type[...] $.charset[...]]]
       $файл_который_был_loaded.size
       $файл_который_был_loaded_или_created.mode = text/binary
       ^file::stat[имя файла]
       $файл_который_был_stated_или_loaded.size .adate .mdate .cdate
       ^file::cgi[[text|binary;]имя файла[;env hash +options[;1cmd[;2line[;3ar[;4g[;5s]]]]]]]
           любой аргумент может быть строкой или массивом строк
           возвращённый заголовок рассыпается на $поля
           $status
           $stderr
       ^file::exec[[text|binary;]имя файла[;env hash[;1cmd[;2line[;3ar[;4g[;5s;...under unix max 50 args]]]]]]]
           любой аргумент может быть строкой или массивом строк
           options:
               $.stdin[текст|файл] если пусто, отключается автоматическое пересовывание данных HTTP-POST
       ^file:move[старое имя файла;новое имя файла]
           можно переименовывать и двигать каталоги[win32: но не через границу дисков]
           каталоги для dest создаются с правами 775
           каталог старого файла стирается, если после move он остаётся пуст
       ^file:copy[имя файла;имя копии файла[; $.append(1) ]]
           можно копировать только файлы
       ^file:lock[имя файла]{код}
           файл при необходимости создаётся
           блокируется
           выполняется код
           разблокируется
       ^file:dirname[/a/some.tar.gz|file]=/a (работает аналогично комманде *nix)
       ^file:dirname[/a/b/|file]=/a (работает аналогично комманде *nix)
       ^file:basename[/a/some.tar.gz|file]=some.tar.gz (работает аналогично комманде *nix)
       ^file:basename[/a/b/|file]=b (работает аналогично комманде *nix)
       ^file:justname[/a/some.tar.gz|file]=some.tar
       ^file:justext[/a/some.tar.gz|file]=gz
       /some/page.html: ^file:fullpath[a.gif] => /some/a.gif
       ^файл.sql-string[]
           внутри ^connect даст правильно escaped строку, которую можно в запрос отдать
       ^file::sql{query}[[ $.name[имя_файла_для_download] $.content-type[пользовательский content-type] ]]
           результат запроса должен быть "одна строка".
           колонки:
           первая колонка - данные
           если есть вторая - это имя файла
           если есть третья - это content-type
       ^файл.base64[ $.pad(bool) $.wrap(bool) $.url-safe(bool) ]
           encode
       ^file:base64[имя файла[; $.pad(bool) $.wrap(bool) $.url-safe(bool) ]]
           encode
       ^file::base64[encoded string[; $.pad(bool) $.strict(bool) url-safe(bool) ]]
           decode
       ^file::base64[mode;имя файла;encoded string[; $.content-type[...] $.pad(bool) $.strict(bool) url-safe(bool) ]]
           decode
       ^file:crc32[имя файла]
           вычисляет crc32 файла с указанным именем
       ^файл.crc32[]
           вычисляет crc32 объекта
       ^файл.md5[], ^file:md5[имя файла]
           выдает digest файла, длиной 16 байт в виде строки,
           где байты digest выданы в hex виде, впритык, в нижнем регистре
   
   image
       $картинка[^image::measure[DATA[; $.exif(bool) $.xmp(bool) $.xmp-charset[] $.video(bool) ]]]
           смотрит на .ext case insensitive,
           умеет мерить gif, jpg, tiff, bmp, webp и mp4 (mov)
       $картинка.exif << hash после measure jpeg с exif информацией и $.exif(true)
           $image.exif.DateTime & co
               [полный список см. https://exiftool.org/TagNames/EXIF.html]
           числа типа int/double,
           даты типа dateб
           перечисления в виде hash с ключами 0..count-1
       $картинка.src .width .height
       $картинка.line-width  число=ширина линий
           $картинка.line-style строка=стиль линий '*** * '='*** * *** * *** * '
       ^картинка.html[[hash]]
           <img ...>
       ^image::load[фон.gif]
           только gif пока
       ^image::create(размер X;размер Y[;цвет фона default белый]])
       ^картинка.line(x0;y0;x1;y1;0xffFFff)
       ^картинка.fill(x;y;0xffFFff)
       ^картинка.rectangle(x0;y0;x1;y1;0xffFFff)
       ^картинка.bar(x0;y0;x1;y1;0xffFFff)
       ^картинка.replace(hex-цвет1;hex-цвет2)[table x:y вершины_многоугольника]
       ^картинка.polyline(цвет)[table x:y точки]
       ^картинка.polygon(цвет)[table x:y вершины_многоугольника]
       ^картинка.polybar(цвет)[table x;y вершины_многоугольника]
       ^картинка.font[набор_букв;имя_файла_шрифта.gif][(ширина_пробела[;ширина_символа])]
           высота символа = высота картинки/количество букв в наборе
           если указана ширина_символа, то monospaced, если 0, то ширина_символа = ширине gif
       ^картинка.font[набор_букв;имя_файла_шрифта.gif;
           $.space(ширина_пробела)             // по умолчанию = ширине gif
           $.width(ширина_символа)             // см. выше, по умолчанию proportional
           $.spacing(расстояние между буквами) // по умолчанию = 1
       ]
       ^картинка.text(x;y)[текст_надписи] AS_IS
       ^картинка.length[текст_надписи] AS_IS
       ^картинка.gif[возможно, имя файла]
           кодирует в FILE с content-type=image/gif имя файла будет использовано при $response:download
       ^картинка.arc(center x;center y;width;height;start in degrees;end in degrees;color)
       ^картинка.sector(center x;center y;width;height;start in degrees;end in degrees;color)
       ^картинка.circle(center x;center y;r;color)
       ^картинка.copy[source](src x;src y;src w;src h;dst x;dst y[;dest w[;dest h[;tolerance]]])
           при заданных dest_w/dest_h делает изменение размера кусочка
               при уменьшении делает resample
               годится только для уменьшения простой[малоцветной] дребедени вроде графиков/pie,
               для thumbnais не годится
           при не указанном dest_h сохраняет aspect ratio
           tolerance - некое число[квадрат расстояния в RGB пространстве до искомого цвета],
           определяющее прожорливость выделялки цветов из палитры [default=150]
               меньше - точнее приближает цвета, но они быстро кончаются
               больше - неточно приближает цвет, но большей части хватит
       ^картинка.pixel(x;y)[(color)]
           узнать или задать цвет пиксела
   
   regex
       в выражении
           логическое значение всегда равно true
           числовое значение равно количеству байт скомпилированного шаблона
       ^regex::create[шаблон-строка|regex][[опции поиска]]
       ^шаблон.size[]
           количество байт скомпилированного шаблона
           если значение очень большое - стоит почитать документацию по pcre и, возможно, переписать шаблон
       ^шаблон.study_size[]
           размер study-структуры. если==0 - шаблон не может быть "изучен"
       $шаблон.pattern
           текст шаблона
       $шаблон.options
           строка с исходным текстом опций
   
   console
       $console:timeout
       $console:line
           read/write строку
   
   cookie
       $cookie:имя считать старое или свежезаданное
       $cookie:имя[значение] на 90 дней
       $cookie:имя[$.value[значение] $.expires[ЗНАЧЕНИЕ] $.secure(true) $.domain[имя домена] $.httponly(true)]
           значение поля expires может быть 'session', date, или число дней (0дней=session)
           если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT"
       $cookie:fields
           hash со всеми cookies
   
   curl
       ^curl:load[[
           $.url[http://URL]
           $.timeout(N)
           $.ssl_verifypeer(0)
           $.mode[text|binary] тип создаваемого файла
       ]]
           загружает файл с удалённого сервера, можно вызывать многократно в одной сессии,
           можно указать любую опцию libcurl, имена опций строчными буквами без префикса CURLOPT_
       ^curl:options[[
           $.library[libcurl.so.4]
           $.charset[UTF-8]
           ...
       ]]
           последующие вызовы ^curl:load наследуют заданные опции, путь к libcurl задаётся до начала использования curl
       ^curl:session{код}
           создаёт cURL-сессию, можно задать общие опции, сделать несколько загрузок
       ^curl:info[название], ^curl:info[]
           информация о последнем запросе (значение или хеш)
       ^curl:version[]
           версия используемой библиотеки cURL
   
   env
       $env:переменная
       $env:fields хеш с переменными окружения
       $env:PARSER_VERSION версия парсера
   
 form  form
     [берётся первый элемент из одноимённых из GET, потом первый из POST]      [берётся первый элемент из одноимённых из GET, потом первый из POST]
     $form:поле      $form:поле
Line 565  form Line 796  form
     $form:imap      $form:imap
         хеш с ключами 'x' и 'y' со значением ?1,2 приписки при использовании server-site image map          хеш с ключами 'x' и 'y' со значением ?1,2 приписки при использовании server-site image map
   
 env  inet
     $env:переменная      ^inet:ntoa(long)
     $env:fields хеш с переменными окружения      ^inet:aton[IP]
     $env:PARSER_VERSION версия парсера      ^inet:name2ip[name][[ $.ipv[4|6|any] $.table(true) ]]
           прямое преобразование имени в IP адрес
 cookie      ^inet:ip2name[ip][ $.ipv[4|6|any] ]]
     $cookie:имя считать старое или свежезаданное          обратное преобразование из IP адреса в имя
     $cookie:имя[значение] на 90 дней      ^inet:hostname[]
     $cookie:имя[$.value[значение] $.expires[ЗНАЧЕНИЕ] $.secure(true) $.domain[имя домена] $.httponly(true)]          имя хоста
         значение поля expires может быть 'session', date, или число дней (0дней=session)  
         если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT"  
     $cookie:fields  
         hash со всеми cookies  
   
 request  
     $request:query  
     $request:uri  
     $request:document-root  
         каталог, относительно которого считаются пути в parser, по-умолчанию = $env:DOCUMENT_ROOT  
     $request:argv  
         hash с параметрами коммандной строки. ключи 0, 1, ... [0 -- имя обрабатываемого файла]  
     $request:charset  
         кодировка исходного документа   
         используется при upper/lower и match[][i]  
         ПРЕДУПРЕЖДЕНИЕ: необходимо задать $request/response:charset до использования полей класса form  
     $request:method  
         метод запроса (GET|POST|PUT)  
     $request:body  
         тело POST-запроса в виде текста  
     $request:body-file  
         тело POST-запроса в виде файла  
     $request:body-charset  
         кодировка POST-запроса  
     $request:headers  
         хеш с заголовками запроса (без префикса HTTP_)  
   
 response  
     $response:поле[значение]  и можно считать старое - $response:поле  
         значение может быть string а может быть hash:  
             $value[abc] field: {abc}<<часть  
             $attribute[zzz] field: abc; {attribute=zzz}<<часть  
         значение поля или атрибута может быть string или date  
             если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT"  
     $response:headers  
         накопленные поля  
     $response:body[DATA]  
         замещает стандартный ответ  
     $response:download[DATA]  
         замещает стандартный ответ, выставляет флаг, заставляющий browser предложить download  
     $response:status  
     ^response:clear[] забыть все заданные response поля  
     $response:charset  
         кодировка клиента т.е. та,  
         1) из которой будут перекодированы $form:поля после забирания из browser'а  
         2) в которую документ будет перекодирован перед отдаванием в browser  
         3) в которую будет перекодирован текст языка uri  
         не добавляет к content-type ничего, если хочется, это надо сделать вручную  
         ПРЕДУПРЕЖДЕНИЕ: необходимо задать $request/response:charset до использования полей класса form  
   
 regex  json
     в выражении      ^json:parse[-json-строка-[;
         логическое значение всегда равно true          $.depth(максимальная глубина, default == 19)
         числовое значение равно количеству байт скомпилированного шаблона          $.double(false)              отключить встроенный парсинг чисел с плавающей точкой (по умолчанию включен)
     ^regex::create[шаблон-строка|regex][[опции поиска]]                                       в этом случае они попадут в результирующий объект как строки
     ^шаблон.size[]          $.int(false)                 отключить встроенный парсинг целых чисел (по умолчанию включен)
         количество байт скомпилированного шаблона                                       в этом случае они попадут в результирующий объект как строки
         если значение очень большое - стоит почитать документацию по pcre и, возможно, переписать шаблон          $.distinct[first|last|all]   как будет происходить разбор дублирующихся ключей у объектов
     ^шаблон.study_size[]                                       first - будет оставлен первый встретившийся элемент
         размер study-структуры. если==0 - шаблон не может быть "изучен"                                       last  - будет оставлен последний встретившийся элемент
     $шаблон.pattern                                       all   - будут оставлены все элементы. при этом элементы, начиная со 2
         текст шаблона                                                получат числовые суффиксы (key_2 итд)
     $шаблон.options                                       по умолчанию дублирующиеся ключи приведут к exception
         строка с исходным текстом опций          $.object[method-junction]    пользовательский метод[ключ;объект], которому будут передаваться все разобранные 
                                        объекты и ключи объекта, метод возвращает новый объект
           $.array[method-junction]     пользовательский метод, которому будут передаваться массивы
           $.taint[язык преобразования] задаёт язык преобразования для всех строк результата
       ]]
           парсит json-строку в хеш
   
 reflection      ^json:string[system or user object[;
     ^reflection:create[класс;конструктор[;пара[;мет[;ры]]]]          $.skip-unknown(false)    отключить exception и выдавать 'null' при сериализации объектов с типами
         вызывает указанный конструктор класса (не более 100 параметров)                                   отличных от void, bool, string, int, double, date, table, hash и file
     ^reflection:create[ $.class[name] $.constructor[name] $.arguments[ $.1[па] $.2[рам] $.3[етры] ] ]          $.indent(true)           форматировать результирующую строку табуляциями по глубине вложенности
         вызывает указанный конструктор класса          $.date[sql-string|gmt-string|iso-string|unix-timestamp]
     ^reflection:classes[]                                   формат вывода даты, по умолчанию -- sql-string
         хеш со всеми классами. ключ = имя класса, значение бывает methoded (класс с методами) или void          $.table[object|array|compact]
     ^reflection:class[объект]                                   формат вывода таблицы, по умолчанию -- object
         класс переданного объекта                                   object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...]
     ^reflection:class_name[объект]                                   array:  [["c1","c2",...] || null (for nameless),["v11","v12",...],...]
         имя класса переданного объекта                                   compact:  ["v11" || ["v11","v12",...],...]
     ^reflection:base[объект]          $.file[text|base64|stat] вывести тело файла в указанном виде (по умолчание тело файла 
         родительский класс переданного объекта                                   не попадает в output)
     ^reflection:base_name[объект]          $.xdoc[hash]             параметры преобразования xdoc в строку (как в ^xdoc.string[])
         имя родительского класса переданного объекта          $.тип[method-junction]   любой тип можно вывести с помощью пользовательского метода, который 
     ^reflection:class_by_name[имя класса]                                   должен принимать 3 параметра: ключ, объект данного типа и опции 
         получение класса по имени                                   вызова ^json:string[]
     ^reflection:class_alias[имя класса;новое имя класса]          $._default[метод]        пользовательский метод, будет вызываться для вывода всех объектов пользовательских
         задает псевдоним для указанного класса                                   классов. Метод должен принимать 3 параметра: ключ, объект и опции вызова.
     ^reflection:def[class;имя класса]          $._default[имя метода]   имя пользователького метода, при его наличии он будет вызван для сериализации
         проверка класса на существование          $.void[null|string]      неопределенное значение будет выдано в виде null (по умолчанию)
     ^reflection:methods[класс]                                   или пустой строки
         хеш со списком методов указанного класса, значения - строки 'native' или 'parser'      ]]
     ^reflection:method[класс или объект;имя метода]          сериализует системный или пользовательский объект в json-строку
         возвращает junction-method класса или объекта  
     ^reflection:filename[объект или класс или метод]  
         возвращает имя файла, где определен объект, класс или метод  
     ^reflection:fields[класс или объект]  
         хеш со списком статических полей указанного класса или динамических полей указанного объекта  
     ^reflection:fields_reference[объект]  
         редактируемый хеш динамических полей указанного объекта  
     ^reflection:field[класс или объект;имя поля]  
         возвращает значение указанного поля класса или объекта. getter-ы игнорируются.  
     ^reflection:copy[источник;назначение]  
         копирует поля из одного объекта или класса в другой  
     ^reflection:uid[класс или объект]  
         возвращает идентификатор объекта или класса  
     ^reflection:method_info[класс;метод]  
         хеш с параметрами указанного метода класса  
         $.inherited[класс]  имя класса, где метод был определён (возвращается только если метод был определён в предке)  
         $.overridden[класс] имя класса, где метод был определён (возвращается только если метод был определён в предке)  
         для native классов возвращается хеш:  
             .min_params(минимально необходимое число параметров)  
             .max_params(максимально возможное число параметров)  
             .call_type[dynamic|static|any]  
         для parser классов возвращается хеш:  
             ключ - номер параметра (0, 1, ...), значение - имя параметра  
     ^reflection:dynamical[[object or class, caller if absent]]  
         возвращает true, если метод был вызван из динамического контекста при передаче  
         параметра возвращает true, если передан динамический объект, false если класс  
     ^reflection:delete[класс или объект;имя переменной]  
         удаляет переменную с указанным именем в указанном классе или объекте  
     ^reflection:is[имя элемента;имя класса][[контекст]]  
         аналог оператора 'is', позволяющий определить, является ли элемент кодом.  
     ^reflection:tainting[[язык|tainted|optimized];строка]  
         строка, в которой каждому символу исходной строки соотвествует символ с кодом преобразования  
     ^reflection:stack[ $.args(false/true) $.locals(false/true) $.limit(n) $.offset(o)]  
         текущее состояние стека вызовов методов на парсере  
     ^reflection:mixin[источник; $.to[получатель] $.name[имя] $.methods(true/false) $.fields(true/false) $.overwrite(false/true) ]  
         копирует в класс методы и поля другого класса  
   
 mail  mail
     $mail.received=MESSAGE:      $mail.received=MESSAGE:
Line 750  mail Line 901  mail
             $value[FILE]              $value[FILE]
         ]          ]
     ]      ]
     если charset указан, письмо перекодируется в этот charset          если charset указан, письмо перекодируется в этот charset
     content-type.charset не влияет на перекодирование          content-type.charset не влияет на перекодирование
     после имени части может идти # число          после имени части может идти # число
   
     ^mail:send[      ^mail:send[
 #       по-умолчанию, совпадает с source encoding.  #       по-умолчанию, совпадает с source encoding.
Line 826  mail Line 977  mail
     под Windows используется SMTP протокол, сервер задаётся      под Windows используется SMTP протокол, сервер задаётся
         $MAIL.SMTP[smtp.domain.ru]          $MAIL.SMTP[smtp.domain.ru]
   
 image  
     $картинка[^image::measure[DATA[; $.exif(bool) $.xmp(bool) $.xmp-charset[] $.video(bool) ]]]  
         смотрит на .ext case insensitive,  
         умеет мерить gif, jpg, tiff, bmp, webp и mp4 (mov)  
     $картинка.exif << hash после measure jpeg с exif информацией и $.exif(true)  
         $image.exif.DateTime & co  
             [полный список см. https://exiftool.org/TagNames/EXIF.html]  
         числа типа int/double,  
         даты типа dateб  
         перечисления в виде hash с ключами 0..count-1  
     $картинка.src .width .height  
     $картинка.line-width  число=ширина линий  
         $картинка.line-style строка=стиль линий '*** * '='*** * *** * *** * '  
     ^картинка.html[[hash]]  
         <img ...>  
     ^image::load[фон.gif]  
         только gif пока  
     ^image::create(размер X;размер Y[;цвет фона default белый]])  
     ^картинка.line(x0;y0;x1;y1;0xffFFff)  
     ^картинка.fill(x;y;0xffFFff)  
     ^картинка.rectangle(x0;y0;x1;y1;0xffFFff)  
     ^картинка.bar(x0;y0;x1;y1;0xffFFff)  
     ^картинка.replace(hex-цвет1;hex-цвет2)[table x:y вершины_многоугольника]  
     ^картинка.polyline(цвет)[table x:y точки]  
     ^картинка.polygon(цвет)[table x:y вершины_многоугольника]  
     ^картинка.polybar(цвет)[table x;y вершины_многоугольника]  
     ^картинка.font[набор_букв;имя_файла_шрифта.gif][(ширина_пробела[;ширина_символа])]  
         высота символа = высота картинки/количество букв в наборе  
         если указана ширина_символа, то monospaced, если 0, то ширина_символа = ширине gif  
     ^картинка.font[набор_букв;имя_файла_шрифта.gif;  
         $.space(ширина_пробела)             // по умолчанию = ширине gif  
         $.width(ширина_символа)             // см. выше, по умолчанию proportional  
         $.spacing(расстояние между буквами) // по умолчанию = 1  
     ]  
     ^картинка.text(x;y)[текст_надписи] AS_IS  
     ^картинка.length[текст_надписи] AS_IS  
     ^картинка.gif[возможно, имя файла]  
         кодирует в FILE с content-type=image/gif имя файла будет использовано при $response:download  
     ^картинка.arc(center x;center y;width;height;start in degrees;end in degrees;color)  
     ^картинка.sector(center x;center y;width;height;start in degrees;end in degrees;color)  
     ^картинка.circle(center x;center y;r;color)  
     ^картинка.copy[source](src x;src y;src w;src h;dst x;dst y[;dest w[;dest h[;tolerance]]])  
         при заданных dest_w/dest_h делает изменение размера кусочка  
             при уменьшении делает resample  
             годится только для уменьшения простой[малоцветной] дребедени вроде графиков/pie,  
             для thumbnais не годится  
         при не указанном dest_h сохраняет aspect ratio  
         tolerance - некое число[квадрат расстояния в RGB пространстве до искомого цвета],  
         определяющее прожорливость выделялки цветов из палитры [default=150]  
             меньше - точнее приближает цвета, но они быстро кончаются  
             больше - неточно приближает цвет, но большей части хватит  
     ^картинка.pixel(x;y)[(color)]  
         узнать или задать цвет пиксела  
   
 file  
     $файл_из_post.name  
     $файл_из_post.size  
     $файлt_из_post.text  
     ^файл.save[text|binary;имя файла[;$.charset[в какой кодировке сохраняем]]]  
     ^file:delete[имя файла]  
     ^file:find[имя файла][{когда не нашли}]  
     ^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::create[text|binary;имя;data]  
     ^file::create[text|binary;имя;data[;$.charset[кодировка букв в создаваемом файле] $.content-type[...]]]  
     ^file::create[string-or-file-content[;$.name[имя] $.mode[text|binary] $.content-type[...] $.charset[...]]]  
     $файл_который_был_loaded.size  
     $файл_который_был_loaded_или_created.mode = text/binary  
     ^file::stat[имя файла]  
     $файл_который_был_stated_или_loaded.size .adate .mdate .cdate  
     ^file::cgi[[text|binary;]имя файла[;env hash +options[;1cmd[;2line[;3ar[;4g[;5s]]]]]]]  
         любой аргумент может быть строкой или массивом строк  
         возвращённый заголовок рассыпается на $поля  
         $status  
         $stderr  
     ^file::exec[[text|binary;]имя файла[;env hash[;1cmd[;2line[;3ar[;4g[;5s;...under unix max 50 args]]]]]]]  
         любой аргумент может быть строкой или массивом строк  
         options:  
             $.stdin[текст|файл] если пусто, отключается автоматическое пересовывание данных HTTP-POST  
     ^file:move[старое имя файла;новое имя файла]  
         можно переименовывать и двигать каталоги[win32: но не через границу дисков]  
         каталоги для dest создаются с правами 775  
         каталог старого файла стирается, если после move он остаётся пуст  
     ^file:copy[имя файла;имя копии файла[; $.append(1) ]]  
         можно копировать только файлы  
     ^file:lock[имя файла]{код}  
         файл при необходимости создаётся  
         блокируется  
         выполняется код  
         разблокируется  
     ^file:dirname[/a/some.tar.gz|file]=/a (работает аналогично комманде *nix)  
     ^file:dirname[/a/b/|file]=/a (работает аналогично комманде *nix)  
     ^file:basename[/a/some.tar.gz|file]=some.tar.gz (работает аналогично комманде *nix)  
     ^file:basename[/a/b/|file]=b (работает аналогично комманде *nix)  
     ^file:justname[/a/some.tar.gz|file]=some.tar  
     ^file:justext[/a/some.tar.gz|file]=gz  
     /some/page.html: ^file:fullpath[a.gif] => /some/a.gif  
     ^файл.sql-string[]  
         внутри ^connect даст правильно escaped строку, которую можно в запрос отдать  
     ^file::sql{query}[[ $.name[имя_файла_для_download] $.content-type[пользовательский content-type] ]]  
         результат запроса должен быть "одна строка".  
         колонки:  
         первая колонка - данные  
         если есть вторая - это имя файла  
         если есть третья - это content-type  
     ^файл.base64[ $.pad(bool) $.wrap(bool) $.url-safe(bool) ]  
         encode  
     ^file:base64[имя файла[; $.pad(bool) $.wrap(bool) $.url-safe(bool) ]]  
         encode  
     ^file::base64[encoded string[; $.pad(bool) $.strict(bool) url-safe(bool) ]]  
         decode  
     ^file::base64[mode;имя файла;encoded string[; $.content-type[...] $.pad(bool) $.strict(bool) url-safe(bool) ]]  
         decode  
     ^file:crc32[имя файла]  
         вычисляет crc32 файла с указанным именем  
     ^файл.crc32[]  
         вычисляет crc32 объекта  
     ^файл.md5[], ^file:md5[имя файла]  
         выдает digest файла, длиной 16 байт в виде строки,  
         где байты digest выданы в hex виде, впритык, в нижнем регистре  
   
 math  math
     $math:PI      $math:PI
     ^math:round floor ceiling      ^math:round floor ceiling
Line 991  math Line 1018  math
         объединяет в себе возможность работы с разными алгоритмами криптографического хеширования.          объединяет в себе возможность работы с разными алгоритмами криптографического хеширования.
         $.hmac[ключ] для проверки целостности переданных данных          $.hmac[ключ] для проверки целостности переданных данных
   
 inet  memory
     ^inet:ntoa(long)      ^memory:compact[]
     ^inet:aton[IP]          собрать мусор, освободив место под новые данные (предупреждение: память процесса никогда не освобождается)
     ^inet:name2ip[name][[ $.ipv[4|6|any] $.table(true) ]]          полезно делать перед XSL transform
         прямое преобразование имени в IP адрес      ^memory:auto-compact(частота сборки)
     ^inet:ip2name[ip][ $.ipv[4|6|any] ]]          задает режим автоматической сборки мусора, от 0 (выключена) до 5 (максимальная)
         обратное преобразование из IP адреса в имя  
     ^inet:hostname[]  
         имя хоста  
   
 json  reflection
     ^json:parse[-json-строка-[;      ^reflection:create[класс;конструктор[;пара[;мет[;ры]]]]
         $.depth(максимальная глубина, default == 19)          вызывает указанный конструктор класса (не более 100 параметров)
         $.double(false)              отключить встроенный парсинг чисел с плавающей точкой (по умолчанию включен)      ^reflection:create[ $.class[name] $.constructor[name] $.arguments[ $.1[па] $.2[рам] $.3[етры] ] ]
                                      в этом случае они попадут в результирующий объект как строки          вызывает указанный конструктор класса
         $.int(false)                 отключить встроенный парсинг целых чисел (по умолчанию включен)      ^reflection:classes[]
                                      в этом случае они попадут в результирующий объект как строки          хеш со всеми классами. ключ = имя класса, значение бывает methoded (класс с методами) или void
         $.distinct[first|last|all]   как будет происходить разбор дублирующихся ключей у объектов      ^reflection:class[объект]
                                      first - будет оставлен первый встретившийся элемент          класс переданного объекта
                                      last  - будет оставлен последний встретившийся элемент      ^reflection:class_name[объект]
                                      all   - будут оставлены все элементы. при этом элементы, начиная со 2          имя класса переданного объекта
                                               получат числовые суффиксы (key_2 итд)      ^reflection:base[объект]
                                      по умолчанию дублирующиеся ключи приведут к exception          родительский класс переданного объекта
         $.object[method-junction]    пользовательский метод[ключ;объект], которому будут передаваться все разобранные       ^reflection:base_name[объект]
                                      объекты и ключи объекта, метод возвращает новый объект          имя родительского класса переданного объекта
         $.array[method-junction]     пользовательский метод, которому будут передаваться массивы      ^reflection:class_by_name[имя класса]
         $.taint[язык преобразования] задаёт язык преобразования для всех строк результата          получение класса по имени
     ]]      ^reflection:class_alias[имя класса;новое имя класса]
         парсит json-строку в хеш          задает псевдоним для указанного класса
       ^reflection:def[class;имя класса]
           проверка класса на существование
       ^reflection:methods[класс]
           хеш со списком методов указанного класса, значения - строки 'native' или 'parser'
       ^reflection:method[класс или объект;имя метода]
           возвращает junction-method класса или объекта
       ^reflection:filename[объект или класс или метод]
           возвращает имя файла, где определен объект, класс или метод
       ^reflection:fields[класс или объект]
           хеш со списком статических полей указанного класса или динамических полей указанного объекта
       ^reflection:fields_reference[объект]
           редактируемый хеш динамических полей указанного объекта
       ^reflection:field[класс или объект;имя поля]
           возвращает значение указанного поля класса или объекта. getter-ы игнорируются.
       ^reflection:copy[источник;назначение]
           копирует поля из одного объекта или класса в другой
       ^reflection:uid[класс или объект]
           возвращает идентификатор объекта или класса
       ^reflection:method_info[класс;метод]
           хеш с параметрами указанного метода класса
           $.inherited[класс]  имя класса, где метод был определён (возвращается только если метод был определён в предке)
           $.overridden[класс] имя класса, где метод был определён (возвращается только если метод был определён в предке)
           для native классов возвращается хеш:
               .min_params(минимально необходимое число параметров)
               .max_params(максимально возможное число параметров)
               .call_type[dynamic|static|any]
           для parser классов возвращается хеш:
               ключ - номер параметра (0, 1, ...), значение - имя параметра
       ^reflection:dynamical[[object or class, caller if absent]]
           возвращает true, если метод был вызван из динамического контекста при передаче
           параметра возвращает true, если передан динамический объект, false если класс
       ^reflection:delete[класс или объект;имя переменной]
           удаляет переменную с указанным именем в указанном классе или объекте
       ^reflection:is[имя элемента;имя класса][[контекст]]
           аналог оператора 'is', позволяющий определить, является ли элемент кодом.
       ^reflection:tainting[[язык|tainted|optimized];строка]
           строка, в которой каждому символу исходной строки соотвествует символ с кодом преобразования
       ^reflection:stack[ $.args(false/true) $.locals(false/true) $.limit(n) $.offset(o)]
           текущее состояние стека вызовов методов на парсере
       ^reflection:mixin[источник; $.to[получатель] $.name[имя] $.methods(true/false) $.fields(true/false) $.overwrite(false/true) ]
           копирует в класс методы и поля другого класса
   
     ^json:string[system or user object[;  request
         $.skip-unknown(false)    отключить exception и выдавать 'null' при сериализации объектов с типами      $request:query
                                  отличных от void, bool, string, int, double, date, table, hash и file      $request:uri
         $.indent(true)           форматировать результирующую строку табуляциями по глубине вложенности      $request:document-root
         $.date[sql-string|gmt-string|iso-string|unix-timestamp]          каталог, относительно которого считаются пути в parser, по-умолчанию = $env:DOCUMENT_ROOT
                                  формат вывода даты, по умолчанию -- sql-string      $request:argv
         $.table[object|array|compact]          hash с параметрами коммандной строки. ключи 0, 1, ... [0 -- имя обрабатываемого файла]
                                  формат вывода таблицы, по умолчанию -- object      $request:charset
                                  object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...]          кодировка исходного документа 
                                  array:  [["c1","c2",...] || null (for nameless),["v11","v12",...],...]          используется при upper/lower и match[][i]
                                  compact:  ["v11" || ["v11","v12",...],...]          ПРЕДУПРЕЖДЕНИЕ: необходимо задать $request/response:charset до использования полей класса form
         $.file[text|base64|stat] вывести тело файла в указанном виде (по умолчание тело файла       $request:method
                                  не попадает в output)          метод запроса (GET|POST|PUT)
         $.xdoc[hash]             параметры преобразования xdoc в строку (как в ^xdoc.string[])      $request:body
         $.тип[method-junction]   любой тип можно вывести с помощью пользовательского метода, который           тело POST-запроса в виде текста
                                  должен принимать 3 параметра: ключ, объект данного типа и опции       $request:body-file
                                  вызова ^json:string[]          тело POST-запроса в виде файла
         $._default[метод]        пользовательский метод, будет вызываться для вывода всех объектов пользовательских      $request:body-charset
                                  классов. Метод должен принимать 3 параметра: ключ, объект и опции вызова.          кодировка POST-запроса
         $._default[имя метода]   имя пользователького метода, при его наличии он будет вызван для сериализации      $request:headers
         $.void[null|string]      неопределенное значение будет выдано в виде null (по умолчанию)          хеш с заголовками запроса (без префикса HTTP_)
                                  или пустой строки  
     ]]  
         сериализует системный или пользовательский объект в json-строку  
   
 date  response
     время типа date можно использовать в выражениях, подставляет количество дней с epoch [1 января 1970 (UTC)], дробное      $response:поле[значение]  и можно считать старое - $response:поле
     строковое значение в местном времени, численное в UTC, диапазон от 0000-00-00 00:00:00 до 9999-12-31 23:59:59          значение может быть string а может быть hash:
     по умолчанию используется установленная средствами OS временная зона              $value[abc] field: {abc}<<часть
               $attribute[zzz] field: abc; {attribute=zzz}<<часть
           значение поля или атрибута может быть string или date
               если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT"
       $response:headers
           накопленные поля
       $response:body[DATA]
           замещает стандартный ответ
       $response:download[DATA]
           замещает стандартный ответ, выставляет флаг, заставляющий browser предложить download
       $response:status
       ^response:clear[] забыть все заданные response поля
       $response:charset
           кодировка клиента т.е. та,
           1) из которой будут перекодированы $form:поля после забирания из browser'а
           2) в которую документ будет перекодирован перед отдаванием в browser
           3) в которую будет перекодирован текст языка uri
           не добавляет к content-type ничего, если хочется, это надо сделать вручную
           ПРЕДУПРЕЖДЕНИЕ: необходимо задать $request/response:charset до использования полей класса form
   
     ^date::now[]  status
     ^date::now(смещение в днях)      $status:sql
         выдаёт сейчас+смещение          cache table
     ^date::today[]              url    time
         дата на 00:00:00 текущего дня              url    time
     ^date::today(целочисленное смещение в днях)              url    time
         дата на 00:00:00 текущего дня+смещение      $status:stylesheet
     ^date::create(дней с epoch)          cache table
     ^date::create(year;month[;day[;hour[;minute[;second[;TZ]]]]])              file    time
     ^date::create[дата в формате %Y-%m-%d %H:%M:%S]              file    time
         для удобного создания по значению из базы              file    time
         формат1: %Y[-%m[-%d[ %H[:%M[:%S]]]]]      $status:rusage hash
         формат2: %H:%M[:%S]          utime user time used
     ^date::create[дата в формате %Y-%m-%dT%H:%M[:%S]TZ]          stime system time used
         для создания по значению в формате ISO 8601          maxrss max resident set size
         формат TZ: Z(UTC) или +-hour[:minute] (смещение от UTC)          ixrss integral shared text memory size
     ^date::unix-timestamp()          idrss integral unshared data size
     ^дата.unix-timestamp[]          isrss integral unshared stack size
     $дата.year month day hour minute second weekday yearday(0...) daylightsaving TZ weekyear          tv_sec
         TZ="" << локальная зона          tv_usec
     $дата.year month day hour minute second можно задать новое значение, остальные read only             $s[$status:rusage]
     ^дата.double[] ^дата.int[]             ^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f]
         количество дней с epoch [1 января 1970 (UTC)], дробное или целое      $status:memory hash
     ^дата.roll[year|month|day](+-смещение)          used
         сдвигает дату              includes some pages that were allocated but never written
     ^дата.roll[TZ;Новая зона]          free
         говорит, что дата в таком-то часовом поясе: влияет на .hour & Co          ever_allocated_since_compact
     ^date:roll[TZ;Новая зона]              return the number of bytes allocated since the last collection
         говорит, что по умолчанию все даты в таком-то часовом поясе          ever_allocated_since_start
     ^дата.sql-string[[datetime|date|time]]              return the total number of bytes [EVER(c)PAF] allocated in this process,
         datetime или без параметра - %Y-%m-%d %H:%M:%S              never decreases
         date                       - %Y-%m-%d      $status:pid
         time                       - %H:%M:%S          process id
         where published='^дата.sql-string[]'      $status:tid
     ^date:calendar[rus|eng](год;месяц)          thread id
         выдаёт неименованную таблицу, столбцы: 0..6, week, year      $status:mode
     ^date:calendar[rus|eng](год;месяц;день)          режим работы, cgi|console|mail|httpd|apache|isapi
         выдаёт именнованную таблицу, столбцы: year, month, day, weekday      $status:log-filename
     ^date:last-day(год;месяц)          путь к журналу ошибок parser3.log
         вернёт последний день месяца  
     ^дата.last-day[]  
         вернёт последний день месяца $дата  
     ^дата.gmt-string[]  
         Fri, 23 Mar 2001 09:32:23 GMT  
     ^дата.iso-string[]  
         2001-03-23T12:32:23+03  
   
 xdoc(xnode)  xdoc(xnode)
     $xdoc.search-namespaces hash, where keys=prefixes, values=urls      $xdoc.search-namespaces hash, where keys=prefixes, values=urls
Line 1247  xnode Line 1320  xnode
     ^node.selectNumber[xpath/query/expression] = double if any or die      ^node.selectNumber[xpath/query/expression] = double if any or die
     ^node.selectString[xpath/query/expression] = string if any or die      ^node.selectString[xpath/query/expression] = string if any or die
   
 memory  
     ^memory:compact[]  
         собрать мусор, освободив место под новые данные (предупреждение: память процесса никогда не освобождается)  
         полезно делать перед XSL transform  
     ^memory:auto-compact(частота сборки)  
         задает режим автоматической сборки мусора, от 0 (выключена) до 5 (максимальная)  
   
 status  
     $status:sql  
         cache table  
             url    time  
             url    time  
             url    time  
     $status:stylesheet  
         cache table  
             file    time  
             file    time  
             file    time  
     $status:rusage hash  
         utime user time used  
         stime system time used  
         maxrss max resident set size  
         ixrss integral shared text memory size  
         idrss integral unshared data size  
         isrss integral unshared stack size  
         tv_sec  
         tv_usec  
            $s[$status:rusage]  
            ^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f]  
     $status:memory hash  
         used  
             includes some pages that were allocated but never written  
         free  
         ever_allocated_since_compact  
             return the number of bytes allocated since the last collection  
         ever_allocated_since_start  
             return the total number of bytes [EVER(c)PAF] allocated in this process,  
             never decreases  
     $status:pid  
         process id  
     $status:tid  
         thread id  
     $status:mode  
         режим работы, cgi|console|mail|httpd|apache|isapi  
     $status:log-filename  
         путь к журналу ошибок parser3.log  
   
 console  
     $console:timeout  
     $console:line  
         read/write строку  
   
 DATA::=string | file | hash  DATA::=string | file | hash
     hash вида      hash вида
     [      [

Removed from v.1.260  
changed lines
  Added in v.1.262


E-mail: