--- parser3/operators.txt 2025/10/04 19:20:01 1.269 +++ parser3/operators.txt 2026/10/09 18:53:41 1.273 @@ -244,6 +244,8 @@ int,double boolean value ^name.inc(how much +) ^name.dec(how much -) + ^name.++[] output the value, then increment by 1 + ^name.--[] output the value, then decrement by 1 ^name.mul(how much *) ^name.div(how much /) ^name.mod(how much %) @@ -747,6 +749,45 @@ regex $pattern.options the string with the original text of the options +amqp + ^amqp::create[[ + $.host[localhost] $.port(5672) $.user[guest] $.password[guest] $.vhost[/] $.locale[en_US] + $.heartbeat(30) $.auto_reconnect(seconds) + $.tls[ $.ca[file] $.cert[file] $.key[file] $.verify(true) ] + ]] + connects to a RabbitMQ broker + auto_reconnect(N): after a lost connection reconnect before the next operation, waiting N seconds + tls: the server certificate is verified only if ca is specified + ^amqp.publish[message][[ + $.exchange[] $.routing_key[key]|$.queue[name] $.mandatory(false) + message properties: $.content_type[] $.content_encoding[] $.delivery_mode(1|2) $.priority(N) $.correlation_id[] $.reply_to[] + $.expiration[] $.message_id[] $.timestamp(N) $.type[] $.user_id[] $.app_id[] $.cluster_id[] $.headers[hash] + ]] + ^amqp.consume[ $.queue[name] $.ack(true) $.count(1) $.timeout(0) $.exclusive(false) $.consumer_tag[] ] + array of messages ready within timeout seconds (only the first one is waited for) + ^amqp.consume[ $.queue[name] $.callback[$method] ... ] + calls @method[message] for each message until ^amqp.stop_consume[], count messages or timeout seconds without messages + count and timeout are unlimited by default + message: hash with msg, delivery_tag, routing_key, exchange, redelivered, consumer_tag and the properties set + ^amqp.ack(delivery_tag) + with $.ack(true) (default) received messages must be acknowledged + ^amqp.nack(delivery_tag)[ $.requeue(false) ] + ^amqp.reject(delivery_tag)[ $.requeue(true) ] + ^amqp.qos[ $.prefetch_count(N) ] + ^amqp.declare[ $.queue[name] $.durable(false) $.exclusive(false) $.auto_delete(false) $.passive(false) $.arguments[hash] ] + for an empty name the server creates a queue with its own name, which is returned + ^amqp.declare[ $.exchange[name] $.type[direct] $.durable(false) $.auto_delete(false) $.internal(false) $.passive(false) $.arguments[hash] ] + ^amqp.delete[ $.queue[name]|$.exchange[name] $.if_unused(false) $.if_empty(false) ] + ^amqp.bind[ $.exchange[name] $.queue[name] $.routing_key[] ] + ^amqp.unbind[ $.exchange[name] $.queue[name] $.routing_key[] ] + ^amqp.purge[ $.queue[name] ] + number of deleted messages + ^amqp.info[ $.queue[name] ] + hash with queue, messages, consumers + ^amqp.release[] + closes the connection + arguments and headers values: [string], (number), (true|false) + console $console:timeout $console:line @@ -756,7 +797,7 @@ cookie $cookie:name read old or newly set cookie $cookie:name[value] for 90 days $cookie:name[$.value[value] $.expires[VALUE] $.secure(true) $.domain[domain name] $.httponly(true)] - the expires field value can be 'session', a date, or a number of days (0days=forever) + the expires field value can be 'session', a date, or a number of days (0days=session) if it's a date, it will be converted to "Sun, 25-Aug-2002 12:03:45 GMT" $cookie:fields hash with all cookies @@ -1003,6 +1044,8 @@ math ^math:convert[number|file](base-from)[alphabet][[ $.format[string|file] ]] converts a string or file with a number from one numeral system to another the numeral system can be set by an alphabet, a number from 2 to 16 (equivalent to the alphabet 0123456789ABCDEF), or 256 (all ASCII characters) + ^math:eq(a;b[;max ULP]) + true if difference between doubles less or equal max ULPs (default 3) ^math:uuid[ $.lower(bool) $.solid(bool) ] 22C0983C-E26E-4169-BD07-77ECE9405BA5 win32: uses cryptapi @@ -1099,6 +1142,27 @@ reflection ^reflection:override[method[; $.to[target] $.name[new_name]]] overrides or defines a method +redis + ^redis::open[[ + $.host[localhost] $.port(6379)|$.unix_socket[path] + $.user[] $.password[] $.db(0) $.timeout(2) $.protocol(3) $.auto_reconnect(seconds) + $.tls[ $.ca[file] $.cert[file] $.key[file] $.verify(true) ] + ]] + connects to a redis server + timeout in seconds for connecting and for each command, 0 - unlimited + protocol(2) for servers before redis 6 + auto_reconnect(N): after a lost connection reconnect before the next command, waiting N seconds + tls: the server certificate is verified only if ca is specified + ^redis.command_name[arguments;...] + any redis command, e.g. ^redis.set[key;value] ^redis.get[key] ^redis.hgetall[key] + ^redis.call[command;arguments;...] + ^redis.f-command_name[arguments;...], ^redis.f-call[command;arguments;...] + the strings of the reply are files (binary data) + arguments: string, number, bool as 1/0, file as its content; array - its elements, hash - key value pairs + reply: string, int, double, bool, void (nil), array, hash (map); an error reply is an exception + ^redis.release[] + closes the connection + request https://site.name/a%20b/?name=some%20value $request:query @@ -1429,6 +1493,8 @@ system error types: http.response ^file::load[http://ok/there] host found, connection accepted, bad answer http.status ^file::load[http://ok/there] host found, connection accepted, status!=200 date.range ^date::create(10000;1;1) date out of valid range + amqp ^amqp::create[$.port(1)] connection failed/error from the broker + redis ^redis::open[$.port(1)] connection failed/error reply if $SIGPIPE(1) is defined in MAIN, then if processing was interrupted by the user, a message about this is written to parser3.log @@ -1436,4 +1502,4 @@ if $SIGPIPE(1) is defined in MAIN, then if the method description explicitly contains the local variable result (there is also an implicit variable), then the code for outputting whitespace literals does not get into the final bytecode -$Id: operators.txt,v 1.269 2025/10/04 19:20:01 moko Exp $ +$Id: operators.txt,v 1.273 2026/10/09 18:53:41 moko Exp $