diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 3124d456b..20972fff6 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -26,6 +26,7 @@ New features:: * core: add default key kbd:[Alt+Enter] to insert a newline (issue #1498) * core: add flag "input_multiline" in buffer (issue #984, issue #1063) * core: add a scalable WeeChat logo (SVG) (issue #1454, issue #1456) + * core: add base 16/32/64 encoding/decoding in evaluation of expressions with "base_encode:base,xxx" and "base_decode:base,xxx" * core: add case sensitive wildcard matching comparison operator (`+==*+` and `+!!*+`) and case sensitive/insensitive include comparison operators (`+==-+`, `+!!-+`, `+=-+`, `+!-+`) in evaluation of expressions * core: add default key kbd:[Alt+Shift+N] to toggle nicklist bar * core: add command line option "--stdout" in weechat-headless binary to log to stdout rather than ~/.weechat/weechat.log (issue #1475, issue #1477) diff --git a/doc/de/includes/autogen_user_commands.de.adoc b/doc/de/includes/autogen_user_commands.de.adoc index 97e393a2b..78e36c9b7 100644 --- a/doc/de/includes/autogen_user_commands.de.adoc +++ b/doc/de/includes/autogen_user_commands.de.adoc @@ -1282,75 +1282,76 @@ infolists: zeigt Information über die Infolists an /eval [-n|-s] [-d] [-n] [-d] -c - -n: gibt das Ergebnis aus, ohne dass dieses in den Buffer gesendet wird (debug Modus) - -s: teilt Ausdrücke, bevor sie evaluiert werden (mehrere Befehle können durch Semikolon getrennt werden) - -d: eine Debug-Ausgabe nach Auswertung anzeigen - -c: Auswertung als Bedingung: nutzt Operatoren und runde Klammern, Rückgabewert als Boolean-Wert ("0" oder "1") -expression: Ausdruck welcher verarbeitet werden soll. Variablen im Format ${variable} werden ersetzt (siehe unten); mehrere Befehle werden durch ein Semikolon voneinander getrennt - operator: ein logischer oder vergleichender Operand: - - logische Operanden: - && boolean "und" - || boolean "oder" - - vergleichende Operanden: - == gleich - != ungleich - <= kleiner oder gleich - < kleiner - >= größer oder gleich - > größer - =~ stimmt mit regulärem POSIX Ausdruck überein - !~ stimmt NICHT mit regulärem POSIX Ausdruck überein - =* stimmt mit Maske überein (Platzhalter "*" ist erlaubt) - !* stimmt mit Maske NICHT überein (Platzhalter "*" ist erlaubt) - =* stimmt mit Maske überein, Groß- und Kleinschreibung wird nicht beachtet (Platzhalter "*" ist erlaubt) - !* stimmt mit Maske NICHT überein, Groß- und Kleinschreibung wird nicht beachtet (Platzhalter "*" ist erlaubt) - ==- ist enthalten, Groß- und Kleinschreibung wird beachtet - !!- ist NICHT enthalten, Groß- und Kleinschreibung wird beachtet - =- ist enthalten, Groß- und Kleinschreibung wird nicht beachtet - !- ist NICHT enthalten, Groß- und Kleinschreibung wird nicht beachtet + -n: display result without sending it to buffer (debug mode) + -s: split expression before evaluating it (many commands can be separated by semicolons) + -d: display debug output after evaluation + -c: evaluate as condition: use operators and parentheses, return a boolean value ("0" or "1") +expression: expression to evaluate, variables with format ${variable} are replaced (see below); many commands can be separated by semicolons + operator: a logical or comparison operator: + - logical operators: + && boolean "and" + || boolean "or" + - comparison operators: + == equal + != not equal + <= less or equal + < less + >= greater or equal + > greater + =~ is matching POSIX extended regex + !~ is NOT matching POSIX extended regex + ==* is matching mask, case sensitive (wildcard "*" is allowed) + !!* is NOT matching mask, case sensitive (wildcard "*" is allowed) + =* is matching mask, case insensitive (wildcard "*" is allowed) + !* is NOT matching mask, case insensitive (wildcard "*" is allowed) + ==- is included, case sensitive + !!- is NOT included, case sensitive + =- is included, case insensitive + !- is NOT included, case insensitive -Ein Ausdruck gilt als "wahr" sofern das Ergebnis weder NULL, nicht leer und von "0" abweichend ist. -Für einen Vergleich werden Fließkommazahlen genutzt, insofern es sich bei beiden Ausdrücken um gültige Zahlen handelt, folgende Formate werden unterstützt: - - Integer (Beispiele: 5, -7) - - Fließkommazahl (Beispiele: 5.2, -7.5, 2.83e-2) - - hexadezimale Zahl (Beispiele: 0xA3, -0xA3) -Um einen Vergleich zwischen zwei Zeichenketten zu erzwingen, müssen die Ausdrücke in Anführungszeichen gesetzt werden, zum Beispiel: +An expression is considered as "true" if it is not NULL, not empty, and different from "0". +The comparison is made using floating point numbers if the two expressions are valid numbers, with one of the following formats: + - integer (examples: 5, -7) + - floating point number (examples: 5.2, -7.5, 2.83e-2) + - hexadecimal number (examples: 0xA3, -0xA3) +To force a string comparison, you can add double quotes around each expression, for example: 50 > 100 ==> 0 "50" > "100" ==> 1 -Einige Variablen werden im Ausdruck mittels der Formatierung ${variable} ersetzt. Mögliche Variablen sind, nach Reihenfolge ihrer Priorität: - 1. eine evaluierte Teilzeichenkette (Format: "eval:xxx") - 2. eine Zeichenkette mit Escapesequenzen (Format: "esc:xxx" oder "\xxx") - 3. Zeichen, die in einer Zeichenkette nicht dargestellt werden sollen (Format: "hide:Zeichen,Zeichenkette") - 4. eine Zeichenkette mit einer maximalen Anzahl an Zeichen (Format: "cut:+Max,Suffix,Zeichenkette") - oder maximale Anzahl an Zeichen die auf dem Bildschirm angezeigt werden sollen (Format: "cutscr:Max,Suffix,Zeichenkette oder "cutscr:+Max,Suffix,Zeichenkette") - 5. eine Zeichenkette umkehren (Format: "rev:xxx" oder "revscr:xxx") - 6. eine Zeichenkette wiederholen (Format: "repeat:Anzahl,Zeichenkette") - 7. Länge einer Zeichenkette (Format: "length:xxx" oder "lengthscr:xxx") - 8. eine Farbe (Format: "color:xxx", siehe "Anleitung für API Erweiterung", Funktion "color") - 9. ein Modifizierer (Format: "info:Name,Argumente", Argumente sind optional) - 10. eine Info (Format: "Info:Name,Argumente", Argumente sind optional) - 11. aktuelles Datum/Uhrzeit (Format: "date" oder "date:format") - 12. eine Umgebungsvariable (Format: "env:XXX") - 13. ein Dreifachoperand (Format: "if:Bedingung?Wert_falls_wahr:Wert_falls_unwahr") - 14. Ergebnis eines Ausdrucks mit Klammern und Operatoren + - * / // % ** (Format: "calc:xxx") - 15. eine Option (Format: "file.section.option") - 16. eine lokale Variable eines Buffers - 17. ein(e) hdata - Name/Variable (der Wert wird automatisch in eine Zeichenkette konvertiert), standardmäßig wird für "window" und "buffer" das aktuelle Fenster/Buffer verwendet. -Das Format für hdata kann wie folgt aufgebaut sein: - hdata.var1.var2...: startet mit hdata (der Pointer muss bekannt sein) und fragt eine Variable nach der anderen ab (weitere hdata können folgen) - hdata[list].var1.var2...: startet hdata mittels einer Liste, zum Beispiel: - ${buffer[gui_buffers].full_name}: der vollständige Name des ersten Buffers, in der verknüpften Liste aller Buffer - ${plugin[weechat_plugins].name}: Name der ersten Erweiterung, in der verknüpften Liste aller Erweiterungen - hdata[pointer].var1.var2...: startet hdata mittels einem Pointer, zum Beispiel: - ${buffer[0x1234abcd].full_name}: vollständiger Name eines Buffers und des dazugehörigen Pointers (kann in triggern benutzt werden) -Die vorhandenen Namen für hdata und Variablen sind in der "Anleitung für API Erweiterung", Bereich "weechat_hdata_get". beschrieben +Some variables are replaced in expression, using the format ${variable}, variable can be, by order of priority: + 1. an evaluated sub-string (format: "eval:xxx") + 2. a string with escaped chars (format: "esc:xxx" or "\xxx") + 3. a string with chars to hide (format: "hide:char,string") + 4. a string with max chars (format: "cut:max,suffix,string" or "cut:+max,suffix,string") + or max chars displayed on screen (format: "cutscr:max,suffix,string" or "cutscr:+max,suffix,string") + 5. a reversed string (format: "rev:xxx" or "revscr:xxx") + 6. a repeated string (format: "repeat:count,string") + 7. length of a string (format: "length:xxx" or "lengthscr:xxx") + 8. a color (format: "color:xxx", see "Plugin API reference", function "color") + 9. a modifier (format: "modifier:name,data,string") + 10. an info (format: "info:name,arguments", arguments are optional) + 11. a base 16/32/64 encoded/decoded string (format: "base_encode:base,xxx" or "base_decode:base,xxx") + 12. current date/time (format: "date" or "date:format") + 13. an environment variable (format: "env:XXX") + 14. a ternary operator (format: "if:condition?value_if_true:value_if_false") + 15. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") + 16. an option (format: "file.section.option") + 17. a local variable in buffer + 18. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. +Format for hdata can be one of following: + hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed) + hdata[list].var1.var2...: start with a hdata using a list, for example: + ${buffer[gui_buffers].full_name}: full name of first buffer in linked list of buffers + ${plugin[weechat_plugins].name}: name of first plugin in linked list of plugins + hdata[pointer].var1.var2...: start with a hdata using a pointer, for example: + ${buffer[0x1234abcd].full_name}: full name of the buffer with this pointer (can be used in triggers) +For name of hdata and variables, please look at "Plugin API reference", function "weechat_hdata_get". -Beispiele (einfache Zeichenketten): +Examples (simple strings): /eval -n ${info:version} ==> 0.4.3 /eval -n ${env:HOME} ==> /home/user /eval -n ${weechat.look.scroll_amount} ==> 3 - /eval -n ${sec.data.freenode_password} ==> geheim + /eval -n ${sec.data.freenode_password} ==> secret /eval -n ${window} ==> 0x2549aa0 /eval -n ${window.buffer} ==> 0x2549320 /eval -n ${window.buffer.full_name} ==> core.weechat @@ -1365,18 +1366,20 @@ Beispiele (einfache Zeichenketten): /eval -n ${repeat:5,-} ==> ----- /eval -n ${length:test} ==> 4 /eval -n ${calc:(5+2)*3} ==> 21 + /eval -n ${base_encode:64,test} ==> dGVzdA== + /eval -n ${base_decode:64,dGVzdA==} ==> test -Beispiele (Bedingungen): - /eval -n -c ${window.buffer.number} > 2 ==> 0 - /eval -n -c ${window.win_width} > 100 ==> 1 - /eval -n -c (8 > 12) || (5 > 2) ==> 1 - /eval -n -c (8 > 12) && (5 > 2) ==> 0 - /eval -n -c abcd =~ ^ABC ==> 1 - /eval -n -c abcd =~ (?-i)^ABC ==> 0 - /eval -n -c abcd =~ (?-i)^abc ==> 1 - /eval -n -c abcd !~ abc ==> 0 - /eval -n -c abcd =* a*d ==> 1 - /eval -n -c abcd =- bc ==> 1 +Examples (conditions): + /eval -n -c ${window.buffer.number} > 2 ==> 0 + /eval -n -c ${window.win_width} > 100 ==> 1 + /eval -n -c (8 > 12) || (5 > 2) ==> 1 + /eval -n -c (8 > 12) && (5 > 2) ==> 0 + /eval -n -c abcd =~ ^ABC ==> 1 + /eval -n -c abcd =~ (?-i)^ABC ==> 0 + /eval -n -c abcd =~ (?-i)^abc ==> 1 + /eval -n -c abcd !~ abc ==> 0 + /eval -n -c abcd =* a*d ==> 1 + /eval -n -c abcd =- bc ==> 1 ---- [[command_weechat_filter]] diff --git a/doc/en/includes/autogen_user_commands.en.adoc b/doc/en/includes/autogen_user_commands.en.adoc index 802291c37..745577b9c 100644 --- a/doc/en/includes/autogen_user_commands.en.adoc +++ b/doc/en/includes/autogen_user_commands.en.adoc @@ -1330,13 +1330,14 @@ Some variables are replaced in expression, using the format ${variable}, variabl 8. a color (format: "color:xxx", see "Plugin API reference", function "color") 9. a modifier (format: "modifier:name,data,string") 10. an info (format: "info:name,arguments", arguments are optional) - 11. current date/time (format: "date" or "date:format") - 12. an environment variable (format: "env:XXX") - 13. a ternary operator (format: "if:condition?value_if_true:value_if_false") - 14. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") - 15. an option (format: "file.section.option") - 16. a local variable in buffer - 17. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. + 11. a base 16/32/64 encoded/decoded string (format: "base_encode:base,xxx" or "base_decode:base,xxx") + 12. current date/time (format: "date" or "date:format") + 13. an environment variable (format: "env:XXX") + 14. a ternary operator (format: "if:condition?value_if_true:value_if_false") + 15. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") + 16. an option (format: "file.section.option") + 17. a local variable in buffer + 18. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. Format for hdata can be one of following: hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed) hdata[list].var1.var2...: start with a hdata using a list, for example: @@ -1365,6 +1366,8 @@ Examples (simple strings): /eval -n ${repeat:5,-} ==> ----- /eval -n ${length:test} ==> 4 /eval -n ${calc:(5+2)*3} ==> 21 + /eval -n ${base_encode:64,test} ==> dGVzdA== + /eval -n ${base_decode:64,dGVzdA==} ==> test Examples (conditions): /eval -n -c ${window.buffer.number} > 2 ==> 0 diff --git a/doc/en/weechat_plugin_api.en.adoc b/doc/en/weechat_plugin_api.en.adoc index 297d6228b..b6bbddb37 100644 --- a/doc/en/weechat_plugin_api.en.adoc +++ b/doc/en/weechat_plugin_api.en.adoc @@ -2594,6 +2594,26 @@ expanded to last): `+1.0+` + `+lightblue+` +| `+${base_encode:base,xxx}+` + + _(WeeChat ≥ 2.9)_ | + String encoded in base 16, 32 or 64. | + `+${base_encode:16,test string}+` + + `+${base_encode:32,test string}+` + + `+${base_encode:64,test string}+` | + `+7465737420737472696E67+` + + `+ORSXG5BAON2HE2LOM4======+` + + `+dGVzdCBzdHJpbmc=+` + +| `+${base_decode:base,xxx}+` + + _(WeeChat ≥ 2.9)_ | + String decoded from base 16, 32 or 64. | + `+${base_decode:16,7465737420737472696E67}+` + + `+${base_decode:32,ORSXG5BAON2HE2LOM4======}+` + + `+${base_decode:64,dGVzdCBzdHJpbmc=}+` | + `+test string+` + + `+test string+` + + `+test string+` + | `+${date}+` + `+${date:xxx}+` + _(WeeChat ≥ 1.3)_ | diff --git a/doc/fr/includes/autogen_user_commands.fr.adoc b/doc/fr/includes/autogen_user_commands.fr.adoc index 2b137074c..505bac1f5 100644 --- a/doc/fr/includes/autogen_user_commands.fr.adoc +++ b/doc/fr/includes/autogen_user_commands.fr.adoc @@ -1330,13 +1330,14 @@ Des variables sont remplacées dans l'expression, en utilisant le format ${varia 8. une couleur (format : "color:xxx", voir la "Référence API extension", fonction "color") 9. un modificateur (format : "modifier:nom,données,chaîne") 10. une info (format : "info:nom,paramètres", les paramètres sont optionnels) - 11. la date/heure courante (format : "date" ou "date:format") - 12. une variable d'environnement (format : "env:XXX") - 13. un opérateur ternaire (format : "if:condition?valeur_si_vrai:valeur_si_faux") - 14. le résultat d'une expression avec parenthèses et les opérateurs + - * / // % ** (format: "calc:xxx") - 15. une option (format : "fichier.section.option") - 16. une variable locale du tampon - 17. un hdata/variable (la valeur est automatiquement convertie en chaîne), par défaut "window" et "buffer" pointent vers la fenêtre et le tampon courants. + 11. une chaîne encodée/decodée en base 16, 32 ou 64 (format : "base_encode:base,xxx" ou "base_decode:base,xxx") + 12. la date/heure courante (format : "date" ou "date:format") + 13. une variable d'environnement (format : "env:XXX") + 14. un opérateur ternaire (format : "if:condition?valeur_si_vrai:valeur_si_faux") + 15. le résultat d'une expression avec parenthèses et les opérateurs + - * / // % ** (format: "calc:xxx") + 16. une option (format : "fichier.section.option") + 17. une variable locale du tampon + 18. un hdata/variable (la valeur est automatiquement convertie en chaîne), par défaut "window" et "buffer" pointent vers la fenêtre et le tampon courants. Le format du hdata peut être le suivant : hdata.var1.var2... : démarrer avec un hdata (le pointeur doit être connu), et demander les variables l'une après l'autre (d'autres hdata peuvent être suivis) hdata[liste].var1.var2... : démarrer avec un hdata en utilisant une liste, par exemple : @@ -1365,6 +1366,8 @@ Exemples (chaînes simples) : /eval -n ${repeat:5,-} ==> ----- /eval -n ${length:test} ==> 4 /eval -n ${calc:(5+2)*3} ==> 21 + /eval -n ${base_encode:64,test} ==> dGVzdA== + /eval -n ${base_decode:64,dGVzdA==} ==> test Exemples (conditions) : /eval -n -c ${window.buffer.number} > 2 ==> 0 diff --git a/doc/fr/weechat_plugin_api.fr.adoc b/doc/fr/weechat_plugin_api.fr.adoc index 20cb2f0bb..b6892d6fc 100644 --- a/doc/fr/weechat_plugin_api.fr.adoc +++ b/doc/fr/weechat_plugin_api.fr.adoc @@ -2640,6 +2640,27 @@ première étendue à la dernière) : `+1.0+` + `+lightblue+` +| `+${base_encode:base,xxx}+` + + _(WeeChat ≥ 2.9)_ | + Chaîne encodée en base 16, 32 ou 64. | + `+${base_encode:16,test string}+` + + `+${base_encode:32,test string}+` + + `+${base_encode:64,test string}+` | + `+7465737420737472696E67+` + + `+ORSXG5BAON2HE2LOM4======+` + + `+dGVzdCBzdHJpbmc=+` + +// TRANSLATION MISSING +| `+${base_decode:base,xxx}+` + + _(WeeChat ≥ 2.9)_ | + Chaîne décodée depuis base 16, 32 ou 64. | + `+${base_decode:16,7465737420737472696E67}+` + + `+${base_decode:32,ORSXG5BAON2HE2LOM4======}+` + + `+${base_decode:64,dGVzdCBzdHJpbmc=}+` | + `+test string+` + + `+test string+` + + `+test string+` + | `+${date}+` + `+${date:xxx}+` + _(WeeChat ≥ 1.3)_ | diff --git a/doc/it/includes/autogen_user_commands.it.adoc b/doc/it/includes/autogen_user_commands.it.adoc index cf41d11cf..f8a904031 100644 --- a/doc/it/includes/autogen_user_commands.it.adoc +++ b/doc/it/includes/autogen_user_commands.it.adoc @@ -1330,13 +1330,14 @@ Some variables are replaced in expression, using the format ${variable}, variabl 8. a color (format: "color:xxx", see "Plugin API reference", function "color") 9. a modifier (format: "modifier:name,data,string") 10. an info (format: "info:name,arguments", arguments are optional) - 11. current date/time (format: "date" or "date:format") - 12. an environment variable (format: "env:XXX") - 13. a ternary operator (format: "if:condition?value_if_true:value_if_false") - 14. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") - 15. an option (format: "file.section.option") - 16. a local variable in buffer - 17. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. + 11. a base 16/32/64 encoded/decoded string (format: "base_encode:base,xxx" or "base_decode:base,xxx") + 12. current date/time (format: "date" or "date:format") + 13. an environment variable (format: "env:XXX") + 14. a ternary operator (format: "if:condition?value_if_true:value_if_false") + 15. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") + 16. an option (format: "file.section.option") + 17. a local variable in buffer + 18. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. Format for hdata can be one of following: hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed) hdata[list].var1.var2...: start with a hdata using a list, for example: @@ -1365,6 +1366,8 @@ Examples (simple strings): /eval -n ${repeat:5,-} ==> ----- /eval -n ${length:test} ==> 4 /eval -n ${calc:(5+2)*3} ==> 21 + /eval -n ${base_encode:64,test} ==> dGVzdA== + /eval -n ${base_decode:64,dGVzdA==} ==> test Examples (conditions): /eval -n -c ${window.buffer.number} > 2 ==> 0 diff --git a/doc/it/weechat_plugin_api.it.adoc b/doc/it/weechat_plugin_api.it.adoc index 2e68892e0..9ebed0c14 100644 --- a/doc/it/weechat_plugin_api.it.adoc +++ b/doc/it/weechat_plugin_api.it.adoc @@ -2701,6 +2701,28 @@ expanded to last): `+1.0+` + `+lightblue+` +// TRANSLATION MISSING +| `+${base_encode:base,xxx}+` + + _(WeeChat ≥ 2.9)_ | + String encoded in base 16, 32 or 64. | + `+${base_encode:16,test string}+` + + `+${base_encode:32,test string}+` + + `+${base_encode:64,test string}+` | + `+7465737420737472696E67+` + + `+ORSXG5BAON2HE2LOM4======+` + + `+dGVzdCBzdHJpbmc=+` + +// TRANSLATION MISSING +| `+${base_decode:base,xxx}+` + + _(WeeChat ≥ 2.9)_ | + String decoded from base 16, 32 or 64. | + `+${base_decode:16,7465737420737472696E67}+` + + `+${base_decode:32,ORSXG5BAON2HE2LOM4======}+` + + `+${base_decode:64,dGVzdCBzdHJpbmc=}+` | + `+test string+` + + `+test string+` + + `+test string+` + | `+${date}+` + `+${date:xxx}+` + _(WeeChat ≥ 1.3)_ | diff --git a/doc/ja/includes/autogen_user_commands.ja.adoc b/doc/ja/includes/autogen_user_commands.ja.adoc index 4cccd9cf1..90e0d0fdc 100644 --- a/doc/ja/includes/autogen_user_commands.ja.adoc +++ b/doc/ja/includes/autogen_user_commands.ja.adoc @@ -1330,13 +1330,14 @@ Some variables are replaced in expression, using the format ${variable}, variabl 8. a color (format: "color:xxx", see "Plugin API reference", function "color") 9. a modifier (format: "modifier:name,data,string") 10. an info (format: "info:name,arguments", arguments are optional) - 11. current date/time (format: "date" or "date:format") - 12. an environment variable (format: "env:XXX") - 13. a ternary operator (format: "if:condition?value_if_true:value_if_false") - 14. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") - 15. an option (format: "file.section.option") - 16. a local variable in buffer - 17. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. + 11. a base 16/32/64 encoded/decoded string (format: "base_encode:base,xxx" or "base_decode:base,xxx") + 12. current date/time (format: "date" or "date:format") + 13. an environment variable (format: "env:XXX") + 14. a ternary operator (format: "if:condition?value_if_true:value_if_false") + 15. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") + 16. an option (format: "file.section.option") + 17. a local variable in buffer + 18. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. Format for hdata can be one of following: hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed) hdata[list].var1.var2...: start with a hdata using a list, for example: @@ -1365,6 +1366,8 @@ Examples (simple strings): /eval -n ${repeat:5,-} ==> ----- /eval -n ${length:test} ==> 4 /eval -n ${calc:(5+2)*3} ==> 21 + /eval -n ${base_encode:64,test} ==> dGVzdA== + /eval -n ${base_decode:64,dGVzdA==} ==> test Examples (conditions): /eval -n -c ${window.buffer.number} > 2 ==> 0 diff --git a/doc/ja/weechat_plugin_api.ja.adoc b/doc/ja/weechat_plugin_api.ja.adoc index 17279d34d..cba0bc1cc 100644 --- a/doc/ja/weechat_plugin_api.ja.adoc +++ b/doc/ja/weechat_plugin_api.ja.adoc @@ -2619,6 +2619,28 @@ str5 = weechat.string_eval_expression("password=abc password=def", {}, {}, optio `+1.0+` + `+lightblue+` +// TRANSLATION MISSING +| `+${base_encode:base,xxx}+` + + _(WeeChat バージョン 2.9 以上で利用可)_ | + String encoded in base 16, 32 or 64. | + `+${base_encode:16,test string}+` + + `+${base_encode:32,test string}+` + + `+${base_encode:64,test string}+` | + `+7465737420737472696E67+` + + `+ORSXG5BAON2HE2LOM4======+` + + `+dGVzdCBzdHJpbmc=+` + +// TRANSLATION MISSING +| `+${base_decode:base,xxx}+` + + _(WeeChat バージョン 2.9 以上で利用可)_ | + String decoded from base 16, 32 or 64. | + `+${base_decode:16,7465737420737472696E67}+` + + `+${base_decode:32,ORSXG5BAON2HE2LOM4======}+` + + `+${base_decode:64,dGVzdCBzdHJpbmc=}+` | + `+test string+` + + `+test string+` + + `+test string+` + | `+${date}+` + `+${date:xxx}+` + _(WeeChat バージョン 1.3 以上で利用可)_ | diff --git a/doc/pl/includes/autogen_user_commands.pl.adoc b/doc/pl/includes/autogen_user_commands.pl.adoc index a10add604..38ffdc88e 100644 --- a/doc/pl/includes/autogen_user_commands.pl.adoc +++ b/doc/pl/includes/autogen_user_commands.pl.adoc @@ -1329,13 +1329,14 @@ Some variables are replaced in expression, using the format ${variable}, variabl 8. a color (format: "color:xxx", see "Plugin API reference", function "color") 9. a modifier (format: "modifier:name,data,string") 10. an info (format: "info:name,arguments", arguments are optional) - 11. current date/time (format: "date" or "date:format") - 12. an environment variable (format: "env:XXX") - 13. a ternary operator (format: "if:condition?value_if_true:value_if_false") - 14. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") - 15. an option (format: "file.section.option") - 16. a local variable in buffer - 17. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. + 11. a base 16/32/64 encoded/decoded string (format: "base_encode:base,xxx" or "base_decode:base,xxx") + 12. current date/time (format: "date" or "date:format") + 13. an environment variable (format: "env:XXX") + 14. a ternary operator (format: "if:condition?value_if_true:value_if_false") + 15. result of an expression with parentheses and operators + - * / // % ** (format: "calc:xxx") + 16. an option (format: "file.section.option") + 17. a local variable in buffer + 18. a hdata name/variable (the value is automatically converted to string), by default "window" and "buffer" point to current window/buffer. Format for hdata can be one of following: hdata.var1.var2...: start with a hdata (pointer must be known), and ask variables one after one (other hdata can be followed) hdata[list].var1.var2...: start with a hdata using a list, for example: @@ -1364,6 +1365,8 @@ Examples (simple strings): /eval -n ${repeat:5,-} ==> ----- /eval -n ${length:test} ==> 4 /eval -n ${calc:(5+2)*3} ==> 21 + /eval -n ${base_encode:64,test} ==> dGVzdA== + /eval -n ${base_decode:64,dGVzdA==} ==> test Examples (conditions): /eval -n -c ${window.buffer.number} > 2 ==> 0 diff --git a/po/cs.po b/po/cs.po index fc7b6ffa2..f1c879d8f 100644 --- a/po/cs.po +++ b/po/cs.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: Ondřej Súkup \n" "Language-Team: weechat-dev \n" @@ -1604,15 +1604,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1649,6 +1651,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/de.po b/po/de.po index 72bb580e2..066fde122 100644 --- a/po/de.po +++ b/po/de.po @@ -24,7 +24,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-05-08 19:58+0200\n" "Last-Translator: Nils Görs \n" "Language-Team: German \n" @@ -1684,6 +1684,7 @@ msgstr "" "[-n|-s] [-d] || [-n] [-d] -c " "" +#, fuzzy msgid "" " -n: display result without sending it to buffer (debug mode)\n" " -s: split expression before evaluating it (many commands can be " @@ -1747,15 +1748,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1792,6 +1795,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/es.po b/po/es.po index 4e0441000..d14ae6a4d 100644 --- a/po/es.po +++ b/po/es.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: Elián Hanisch \n" "Language-Team: weechat-dev \n" @@ -1634,15 +1634,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1679,6 +1681,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/fr.po b/po/fr.po index 34c975d4c..36af31b9a 100644 --- a/po/fr.po +++ b/po/fr.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" -"PO-Revision-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" +"PO-Revision-Date: 2020-05-21 09:19+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" "Language: fr\n" @@ -1717,15 +1717,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1762,6 +1764,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" @@ -1842,15 +1846,17 @@ msgstr "" " 9. un modificateur (format : \"modifier:nom,données,chaîne\")\n" " 10. une info (format : \"info:nom,paramètres\", les paramètres sont " "optionnels)\n" -" 11. la date/heure courante (format : \"date\" ou \"date:format\")\n" -" 12. une variable d'environnement (format : \"env:XXX\")\n" -" 13. un opérateur ternaire (format : \"if:condition?valeur_si_vrai:" +" 11. une chaîne encodée/decodée en base 16, 32 ou 64 (format : " +"\"base_encode:base,xxx\" ou \"base_decode:base,xxx\")\n" +" 12. la date/heure courante (format : \"date\" ou \"date:format\")\n" +" 13. une variable d'environnement (format : \"env:XXX\")\n" +" 14. un opérateur ternaire (format : \"if:condition?valeur_si_vrai:" "valeur_si_faux\")\n" -" 14. le résultat d'une expression avec parenthèses et les opérateurs + - " +" 15. le résultat d'une expression avec parenthèses et les opérateurs + - " "* / // % ** (format: \"calc:xxx\")\n" -" 15. une option (format : \"fichier.section.option\")\n" -" 16. une variable locale du tampon\n" -" 17. un hdata/variable (la valeur est automatiquement convertie en chaîne), " +" 16. une option (format : \"fichier.section.option\")\n" +" 17. une variable locale du tampon\n" +" 18. un hdata/variable (la valeur est automatiquement convertie en chaîne), " "par défaut \"window\" et \"buffer\" pointent vers la fenêtre et le tampon " "courants.\n" "Le format du hdata peut être le suivant :\n" @@ -1889,6 +1895,8 @@ msgstr "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Exemples (conditions) :\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/hu.po b/po/hu.po index 3a0e65c30..118425c22 100644 --- a/po/hu.po +++ b/po/hu.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -1522,15 +1522,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1567,6 +1569,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/it.po b/po/it.po index 8bc76277d..1004640ad 100644 --- a/po/it.po +++ b/po/it.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: Esteban I. Ruiz Moreno \n" "Language-Team: weechat-dev \n" @@ -1617,15 +1617,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1662,6 +1664,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/ja.po b/po/ja.po index b63e1a5d4..03bdfb54d 100644 --- a/po/ja.po +++ b/po/ja.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: AYANOKOUZI, Ryuunosuke \n" "Language-Team: Japanese -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/pl.po b/po/pl.po index 4a8352b2f..39faacba9 100644 --- a/po/pl.po +++ b/po/pl.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: Krzysztof Korościk \n" "Language-Team: Polish \n" @@ -1710,15 +1710,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1755,6 +1757,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/pt.po b/po/pt.po index de9141d17..ee8408c5a 100644 --- a/po/pt.po +++ b/po/pt.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: Vasco Almeida \n" "Language-Team: Portuguese <>\n" @@ -1676,15 +1676,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1721,6 +1723,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/pt_BR.po b/po/pt_BR.po index ffdf68845..7081391a7 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-18 11:34+0200\n" "Last-Translator: Eduardo Elias \n" "Language-Team: weechat-dev \n" @@ -1680,15 +1680,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1725,6 +1727,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/ru.po b/po/ru.po index 0459e2718..f8df6dac6 100644 --- a/po/ru.po +++ b/po/ru.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2020-04-28 16:40+0200\n" "Last-Translator: Aleksey V Zapparov AKA ixti \n" "Language-Team: weechat-dev \n" @@ -1544,15 +1544,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1589,6 +1591,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/tr.po b/po/tr.po index de3801a3a..6335c4d8f 100644 --- a/po/tr.po +++ b/po/tr.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2019-11-03 08:38+0100\n" "Last-Translator: Hasan Kiran \n" "Language-Team: weechat-dev \n" @@ -1375,15 +1375,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1420,6 +1422,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/po/weechat.pot b/po/weechat.pot index 6fbaae2ef..b448bfe5d 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2020-05-16 14:36+0200\n" +"POT-Creation-Date: 2020-05-21 09:18+0200\n" "PO-Revision-Date: 2014-08-16 10:27+0200\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" @@ -1377,15 +1377,17 @@ msgid "" "\"color\")\n" " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are optional)\n" -" 11. current date/time (format: \"date\" or \"date:format\")\n" -" 12. an environment variable (format: \"env:XXX\")\n" -" 13. a ternary operator (format: \"if:condition?value_if_true:value_if_false" +" 11. a base 16/32/64 encoded/decoded string (format: \"base_encode:base,xxx" +"\" or \"base_decode:base,xxx\")\n" +" 12. current date/time (format: \"date\" or \"date:format\")\n" +" 13. an environment variable (format: \"env:XXX\")\n" +" 14. a ternary operator (format: \"if:condition?value_if_true:value_if_false" "\")\n" -" 14. result of an expression with parentheses and operators + - * / // % ** " +" 15. result of an expression with parentheses and operators + - * / // % ** " "(format: \"calc:xxx\")\n" -" 15. an option (format: \"file.section.option\")\n" -" 16. a local variable in buffer\n" -" 17. a hdata name/variable (the value is automatically converted to " +" 16. an option (format: \"file.section.option\")\n" +" 17. a local variable in buffer\n" +" 18. a hdata name/variable (the value is automatically converted to " "string), by default \"window\" and \"buffer\" point to current window/" "buffer.\n" "Format for hdata can be one of following:\n" @@ -1422,6 +1424,8 @@ msgid "" " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" +" /eval -n ${base_encode:64,test} ==> dGVzdA==\n" +" /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/src/core/wee-command.c b/src/core/wee-command.c index 962d69f97..acde2d3cc 100644 --- a/src/core/wee-command.c +++ b/src/core/wee-command.c @@ -7435,15 +7435,17 @@ command_init () " 9. a modifier (format: \"modifier:name,data,string\")\n" " 10. an info (format: \"info:name,arguments\", arguments are " "optional)\n" - " 11. current date/time (format: \"date\" or \"date:format\")\n" - " 12. an environment variable (format: \"env:XXX\")\n" - " 13. a ternary operator (format: " + " 11. a base 16/32/64 encoded/decoded string (format: " + "\"base_encode:base,xxx\" or \"base_decode:base,xxx\")\n" + " 12. current date/time (format: \"date\" or \"date:format\")\n" + " 13. an environment variable (format: \"env:XXX\")\n" + " 14. a ternary operator (format: " "\"if:condition?value_if_true:value_if_false\")\n" - " 14. result of an expression with parentheses and operators " + " 15. result of an expression with parentheses and operators " "+ - * / // % ** (format: \"calc:xxx\")\n" - " 15. an option (format: \"file.section.option\")\n" - " 16. a local variable in buffer\n" - " 17. a hdata name/variable (the value is automatically converted " + " 16. an option (format: \"file.section.option\")\n" + " 17. a local variable in buffer\n" + " 18. a hdata name/variable (the value is automatically converted " "to string), by default \"window\" and \"buffer\" point to current " "window/buffer.\n" "Format for hdata can be one of following:\n" @@ -7481,6 +7483,8 @@ command_init () " /eval -n ${repeat:5,-} ==> -----\n" " /eval -n ${length:test} ==> 4\n" " /eval -n ${calc:(5+2)*3} ==> 21\n" + " /eval -n ${base_encode:64,test} ==> dGVzdA==\n" + " /eval -n ${base_decode:64,dGVzdA==} ==> test\n" "\n" "Examples (conditions):\n" " /eval -n -c ${window.buffer.number} > 2 ==> 0\n" diff --git a/src/core/wee-eval.c b/src/core/wee-eval.c index c80322031..4d64c641f 100644 --- a/src/core/wee-eval.c +++ b/src/core/wee-eval.c @@ -423,6 +423,7 @@ eval_string_info (const char *text) char *value, *info_name; value = NULL; + ptr_arguments = strchr (text, ','); if (ptr_arguments) { @@ -430,7 +431,10 @@ eval_string_info (const char *text) ptr_arguments++; } else + { info_name = strdup (text); + } + if (info_name) { value = hook_info_get (NULL, info_name, ptr_arguments); @@ -440,6 +444,104 @@ eval_string_info (const char *text) return (value) ? value : strdup (""); } +/* + * Encodes a string in base 16, 32, or 64. + * + * Note: result must be freed after use. + */ + +char * +eval_string_base_encode (const char *text) +{ + const char *ptr_string; + char *value, *base, *error, *result; + long number; + int length; + + base = NULL; + result = NULL; + + ptr_string = strchr (text, ','); + if (!ptr_string) + goto end; + + base = string_strndup (text, ptr_string - text); + if (!base) + goto end; + + number = strtol (base, &error, 10); + if (!error || error[0]) + goto end; + + ptr_string++; + length = strlen (ptr_string); + result = malloc ((length * 4) + 1); + if (!result) + goto end; + + if (string_base_encode (number, ptr_string, length, result) < 0) + { + free (result); + result = NULL; + } + +end: + value = strdup ((result) ? result : ""); + if (base) + free (base); + if (result) + free (result); + return value; +} + +/* + * Decodes a string encoded in base 16, 32, or 64. + * + * Note: result must be freed after use. + */ + +char * +eval_string_base_decode (const char *text) +{ + const char *ptr_string; + char *value, *base, *error, *result; + long number; + + base = NULL; + result = NULL; + + ptr_string = strchr (text, ','); + if (!ptr_string) + goto end; + + base = string_strndup (text, ptr_string - text); + if (!base) + goto end; + + number = strtol (base, &error, 10); + if (!error || error[0]) + goto end; + + ptr_string++; + result = malloc (strlen (ptr_string) + 1); + if (!result) + goto end; + + if (string_base_decode (number, ptr_string, result) < 0) + { + free (result); + result = NULL; + } + +end: + value = strdup ((result) ? result : ""); + if (base) + free (base); + if (result) + free (result); + return value; +} + /* * Returns a date. * @@ -805,13 +907,15 @@ end: * 10. a color (format: color:xxx) * 11. a modifier (format: modifier:name,data,xxx) * 12. an info (format: info:name,arguments) - * 13. current date/time (format: date or date:xxx) - * 14. an environment variable (format: env:XXX) - * 15. a ternary operator (format: if:condition?value_if_true:value_if_false) - * 16. calculate result of an expression (format: calc:xxx) - * 17. an option (format: file.section.option) - * 18. a buffer local variable - * 19. a hdata variable (format: hdata.var1.var2 or hdata[list].var1.var2 + * 13. a base 16/32/64 encoded/decoded string (format: base_encode:base,xxx + * or base_decode:base,xxx) + * 14. current date/time (format: date or date:xxx) + * 15. an environment variable (format: env:XXX) + * 16. a ternary operator (format: if:condition?value_if_true:value_if_false) + * 17. calculate result of an expression (format: calc:xxx) + * 18. an option (format: file.section.option) + * 19. a buffer local variable + * 20. a hdata variable (format: hdata.var1.var2 or hdata[list].var1.var2 * or hdata[ptr].var1.var2) * * See /help in WeeChat for examples. @@ -931,11 +1035,17 @@ eval_replace_vars_cb (void *data, const char *text) if (strncmp (text, "info:", 5) == 0) return eval_string_info (text + 5); - /* 13. current date/time */ + /* 13. base_encode/base_decode */ + if (strncmp (text, "base_encode:", 12) == 0) + return eval_string_base_encode (text + 12); + if (strncmp (text, "base_decode:", 12) == 0) + return eval_string_base_decode (text + 12); + + /* 14. current date/time */ if ((strncmp (text, "date", 4) == 0) && (!text[4] || (text[4] == ':'))) return eval_string_date (text + 4); - /* 14. environment variable */ + /* 15. environment variable */ if (strncmp (text, "env:", 4) == 0) { ptr_value = getenv (text + 4); @@ -943,18 +1053,18 @@ eval_replace_vars_cb (void *data, const char *text) return strdup (ptr_value); } - /* 15: ternary operator: if:condition?value_if_true:value_if_false */ + /* 16: ternary operator: if:condition?value_if_true:value_if_false */ if (strncmp (text, "if:", 3) == 0) return eval_string_if (text + 3, eval_context); /* - * 16. calculate the result of an expression + * 17. calculate the result of an expression * (with number, operators and parentheses) */ if (strncmp (text, "calc:", 5) == 0) return calc_expression (text + 5); - /* 17. option: if found, return this value */ + /* 18. option: if found, return this value */ if (strncmp (text, "sec.data.", 9) == 0) { ptr_value = hashtable_get (secure_hashtable_data, text + 9); @@ -984,7 +1094,7 @@ eval_replace_vars_cb (void *data, const char *text) } } - /* 18. local variable in buffer */ + /* 19. local variable in buffer */ ptr_buffer = hashtable_get (eval_context->pointers, "buffer"); if (ptr_buffer) { @@ -993,7 +1103,7 @@ eval_replace_vars_cb (void *data, const char *text) return strdup (ptr_value); } - /* 19. hdata */ + /* 20. hdata */ return eval_string_hdata (text, eval_context); } diff --git a/tests/unit/core/test-core-eval.cpp b/tests/unit/core/test-core-eval.cpp index 65f6a0c76..6126a6dd6 100644 --- a/tests/unit/core/test-core-eval.cpp +++ b/tests/unit/core/test-core-eval.cpp @@ -563,6 +563,22 @@ TEST(CoreEval, EvalExpression) /* test info */ WEE_CHECK_EVAL(version_get_version (), "${info:version}"); + /* test base_encode */ + WEE_CHECK_EVAL("", "${base_encode:}"); + WEE_CHECK_EVAL("", "${base_encode:0,xxx}"); + WEE_CHECK_EVAL("", "${base_encode:100,test string}"); + WEE_CHECK_EVAL("7465737420737472696E67", "${base_encode:16,test string}"); + WEE_CHECK_EVAL("ORSXG5BAON2HE2LOM4======", "${base_encode:32,test string}"); + WEE_CHECK_EVAL("dGVzdCBzdHJpbmc=", "${base_encode:64,test string}"); + + /* test base_decode */ + WEE_CHECK_EVAL("", "${base_decode:}"); + WEE_CHECK_EVAL("", "${base_decode:0,xxx}"); + WEE_CHECK_EVAL("", "${base_decode:100,test string}"); + WEE_CHECK_EVAL("test string", "${base_decode:16,7465737420737472696E67}"); + WEE_CHECK_EVAL("test string", "${base_decode:32,ORSXG5BAON2HE2LOM4======}"); + WEE_CHECK_EVAL("test string", "${base_decode:64,dGVzdCBzdHJpbmc=}"); + /* test date */ WEE_CHECK_EVAL("", "${date:}"); value = eval_expression ("${date}", pointers, extra_vars, options);