--- parser3/operators.ru.txt 2024/12/20 17:17:47 1.259 +++ parser3/operators.ru.txt 2024/12/20 18:59:22 1.261 @@ -471,7 +471,6 @@ hashfile $sessions.$sid[$.value[$uid] $.expires(1)] $uid[$sessions.$sid] - array в выражении логическое значение равно "не пуст?" @@ -546,6 +545,216 @@ array $отобранное[^массив.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]] + + ^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 + +env + $env:переменная + $env:fields хеш с переменными окружения + $env:PARSER_VERSION версия парсера + form [берётся первый элемент из одноимённых из GET, потом первый из POST] $form:поле @@ -565,140 +774,60 @@ form $form:imap хеш с ключами 'x' и 'y' со значением ?1,2 приписки при использовании server-site image map -env - $env:переменная - $env:fields хеш с переменными окружения - $env:PARSER_VERSION версия парсера - -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 - -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 +inet + ^inet:ntoa(long) + ^inet:aton[IP] + ^inet:name2ip[name][[ $.ipv[4|6|any] $.table(true) ]] + прямое преобразование имени в IP адрес + ^inet:ip2name[ip][ $.ipv[4|6|any] ]] + обратное преобразование из IP адреса в имя + ^inet:hostname[] + имя хоста -regex - в выражении - логическое значение всегда равно true - числовое значение равно количеству байт скомпилированного шаблона - ^regex::create[шаблон-строка|regex][[опции поиска]] - ^шаблон.size[] - количество байт скомпилированного шаблона - если значение очень большое - стоит почитать документацию по pcre и, возможно, переписать шаблон - ^шаблон.study_size[] - размер study-структуры. если==0 - шаблон не может быть "изучен" - $шаблон.pattern - текст шаблона - $шаблон.options - строка с исходным текстом опций +json + ^json:parse[-json-строка-[; + $.depth(максимальная глубина, default == 19) + $.double(false) отключить встроенный парсинг чисел с плавающей точкой (по умолчанию включен) + в этом случае они попадут в результирующий объект как строки + $.int(false) отключить встроенный парсинг целых чисел (по умолчанию включен) + в этом случае они попадут в результирующий объект как строки + $.distinct[first|last|all] как будет происходить разбор дублирующихся ключей у объектов + first - будет оставлен первый встретившийся элемент + last - будет оставлен последний встретившийся элемент + all - будут оставлены все элементы. при этом элементы, начиная со 2 + получат числовые суффиксы (key_2 итд) + по умолчанию дублирующиеся ключи приведут к exception + $.object[method-junction] пользовательский метод[ключ;объект], которому будут передаваться все разобранные + объекты и ключи объекта, метод возвращает новый объект + $.array[method-junction] пользовательский метод, которому будут передаваться массивы + $.taint[язык преобразования] задаёт язык преобразования для всех строк результата + ]] + парсит json-строку в хеш -reflection - ^reflection:create[класс;конструктор[;пара[;мет[;ры]]]] - вызывает указанный конструктор класса (не более 100 параметров) - ^reflection:create[ $.class[name] $.constructor[name] $.arguments[ $.1[па] $.2[рам] $.3[етры] ] ] - вызывает указанный конструктор класса - ^reflection:classes[] - хеш со всеми классами. ключ = имя класса, значение бывает methoded (класс с методами) или void - ^reflection:class[объект] - класс переданного объекта - ^reflection:class_name[объект] - имя класса переданного объекта - ^reflection:base[объект] - родительский класс переданного объекта - ^reflection:base_name[объект] - имя родительского класса переданного объекта - ^reflection:class_by_name[имя класса] - получение класса по имени - ^reflection:class_alias[имя класса;новое имя класса] - задает псевдоним для указанного класса - ^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[; + $.skip-unknown(false) отключить exception и выдавать 'null' при сериализации объектов с типами + отличных от void, bool, string, int, double, date, table, hash и file + $.indent(true) форматировать результирующую строку табуляциями по глубине вложенности + $.date[sql-string|gmt-string|iso-string|unix-timestamp] + формат вывода даты, по умолчанию -- sql-string + $.table[object|array|compact] + формат вывода таблицы, по умолчанию -- object + object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...] + array: [["c1","c2",...] || null (for nameless),["v11","v12",...],...] + compact: ["v11" || ["v11","v12",...],...] + $.file[text|base64|stat] вывести тело файла в указанном виде (по умолчание тело файла + не попадает в output) + $.xdoc[hash] параметры преобразования xdoc в строку (как в ^xdoc.string[]) + $.тип[method-junction] любой тип можно вывести с помощью пользовательского метода, который + должен принимать 3 параметра: ключ, объект данного типа и опции + вызова ^json:string[] + $._default[метод] пользовательский метод, будет вызываться для вывода всех объектов пользовательских + классов. Метод должен принимать 3 параметра: ключ, объект и опции вызова. + $._default[имя метода] имя пользователького метода, при его наличии он будет вызван для сериализации + $.void[null|string] неопределенное значение будет выдано в виде null (по умолчанию) + или пустой строки + ]] + сериализует системный или пользовательский объект в json-строку mail $mail.received=MESSAGE: @@ -826,130 +955,6 @@ mail под Windows используется SMTP протокол, сервер задаётся $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]] - - ^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:PI ^math:round floor ceiling @@ -991,112 +996,158 @@ math объединяет в себе возможность работы с разными алгоритмами криптографического хеширования. $.hmac[ключ] для проверки целостности переданных данных -inet - ^inet:ntoa(long) - ^inet:aton[IP] - ^inet:name2ip[name][[ $.ipv[4|6|any] $.table(true) ]] - прямое преобразование имени в IP адрес - ^inet:ip2name[ip][ $.ipv[4|6|any] ]] - обратное преобразование из IP адреса в имя - ^inet:hostname[] - имя хоста +memory + ^memory:compact[] + собрать мусор, освободив место под новые данные (предупреждение: память процесса никогда не освобождается) + полезно делать перед XSL transform + ^memory:auto-compact(частота сборки) + задает режим автоматической сборки мусора, от 0 (выключена) до 5 (максимальная) -json - ^json:parse[-json-строка-[; - $.depth(максимальная глубина, default == 19) - $.double(false) отключить встроенный парсинг чисел с плавающей точкой (по умолчанию включен) - в этом случае они попадут в результирующий объект как строки - $.int(false) отключить встроенный парсинг целых чисел (по умолчанию включен) - в этом случае они попадут в результирующий объект как строки - $.distinct[first|last|all] как будет происходить разбор дублирующихся ключей у объектов - first - будет оставлен первый встретившийся элемент - last - будет оставлен последний встретившийся элемент - all - будут оставлены все элементы. при этом элементы, начиная со 2 - получат числовые суффиксы (key_2 итд) - по умолчанию дублирующиеся ключи приведут к exception - $.object[method-junction] пользовательский метод[ключ;объект], которому будут передаваться все разобранные - объекты и ключи объекта, метод возвращает новый объект - $.array[method-junction] пользовательский метод, которому будут передаваться массивы - $.taint[язык преобразования] задаёт язык преобразования для всех строк результата - ]] - парсит json-строку в хеш +reflection + ^reflection:create[класс;конструктор[;пара[;мет[;ры]]]] + вызывает указанный конструктор класса (не более 100 параметров) + ^reflection:create[ $.class[name] $.constructor[name] $.arguments[ $.1[па] $.2[рам] $.3[етры] ] ] + вызывает указанный конструктор класса + ^reflection:classes[] + хеш со всеми классами. ключ = имя класса, значение бывает methoded (класс с методами) или void + ^reflection:class[объект] + класс переданного объекта + ^reflection:class_name[объект] + имя класса переданного объекта + ^reflection:base[объект] + родительский класс переданного объекта + ^reflection:base_name[объект] + имя родительского класса переданного объекта + ^reflection:class_by_name[имя класса] + получение класса по имени + ^reflection:class_alias[имя класса;новое имя класса] + задает псевдоним для указанного класса + ^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[; - $.skip-unknown(false) отключить exception и выдавать 'null' при сериализации объектов с типами - отличных от void, bool, string, int, double, date, table, hash и file - $.indent(true) форматировать результирующую строку табуляциями по глубине вложенности - $.date[sql-string|gmt-string|iso-string|unix-timestamp] - формат вывода даты, по умолчанию -- sql-string - $.table[object|array|compact] - формат вывода таблицы, по умолчанию -- object - object: [{"c1":"v11","c2":"v12",...},{"c1":"v21","c2":"v22",...},...] - array: [["c1","c2",...] || null (for nameless),["v11","v12",...],...] - compact: ["v11" || ["v11","v12",...],...] - $.file[text|base64|stat] вывести тело файла в указанном виде (по умолчание тело файла - не попадает в output) - $.xdoc[hash] параметры преобразования xdoc в строку (как в ^xdoc.string[]) - $.тип[method-junction] любой тип можно вывести с помощью пользовательского метода, который - должен принимать 3 параметра: ключ, объект данного типа и опции - вызова ^json:string[] - $._default[метод] пользовательский метод, будет вызываться для вывода всех объектов пользовательских - классов. Метод должен принимать 3 параметра: ключ, объект и опции вызова. - $._default[имя метода] имя пользователького метода, при его наличии он будет вызван для сериализации - $.void[null|string] неопределенное значение будет выдано в виде null (по умолчанию) - или пустой строки - ]] - сериализует системный или пользовательский объект в json-строку +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_) -date - время типа date можно использовать в выражениях, подставляет количество дней с epoch [1 января 1970 (UTC)], дробное - строковое значение в местном времени, численное в UTC, диапазон от 0000-00-00 00:00:00 до 9999-12-31 23:59:59 - по умолчанию используется установленная средствами OS временная зона +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 - ^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 +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 xdoc(xnode) $xdoc.search-namespaces hash, where keys=prefixes, values=urls @@ -1247,58 +1298,6 @@ xnode ^node.selectNumber[xpath/query/expression] = double 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 hash вида [ @@ -1396,3 +1395,5 @@ MAIN если описание метода содержит локальную переменную result в явном виде (есть и неявная переменная) то код вывода пробельных литералов не попадает в конечный байт-код + +$Id: operators.ru.txt,v 1.261 2024/12/20 18:59:22 moko Exp $