--- 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 $