irc: add support of UTF8MAPPING, add support of optional server in info "irc_is_nick" (closes #1528)

This commit is contained in:
Sébastien Helleu 2020-06-20 17:28:28 +02:00
parent bf964de939
commit 12051a506d
34 changed files with 389 additions and 132 deletions

View File

@ -39,6 +39,7 @@ New features::
* buflist: add default key kbd:[Alt+Shift+B] to toggle buflist
* buflist: add options enable/disable/toggle in command /buflist
* buflist: evaluate option buflist.look.sort so that sort can be customized for each of the three buflist bar items (issue #1465)
* irc: add support of UTF8MAPPING (issue #1528)
* irc: display account messages in buffers (issue #1250)
* relay: increase default limits for IRC backlog options
* relay: add command "handshake" in weechat relay protocol and nonce to prevent replay attacks, add options relay.network.password_hash_algo, relay.network.password_hash_iterations, relay.network.nonce_size (issue #1474)
@ -64,6 +65,7 @@ Bug fixes::
* exec: fix use of same task id for different tasks (issue #1491)
* fifo: fix errors when writing in the FIFO pipe (issue #713)
* guile: enable again /guile eval (issue #1514)
* irc: add support of optional server in info "irc_is_nick", fix check of nick using UTF8MAPPING isupport value (issue #1528)
* irc: fix add of ignore with flags in regex, display full ignore mask in list of ignores (issue #1518)
* irc: do not remove spaces at the end of users messages received (issue #1513)
* irc: fix realname delimiter color in WHO/WHOX response (issue #1497)

View File

@ -258,6 +258,7 @@ _nick_max_length_   (integer) +
_user_max_length_   (integer) +
_host_max_length_   (integer) +
_casemapping_   (integer) +
_utf8mapping_   (integer) +
_chantypes_   (string) +
_chanmodes_   (string) +
_monitor_   (integer) +

View File

@ -20,7 +20,7 @@
| irc | irc_is_channel | 1, falls die Zeichenkette ein gültiger IRC-Channelname für den Server ist | Server,Channel (Server ist optional)
| irc | irc_is_nick | 1, falls die Zeichenkette ein gültiger IRC Nickname ist | Nickname
| irc | irc_is_nick | 1, falls die Zeichenkette ein gültiger IRC Nickname ist | server,nickname (server is optional)
| irc | irc_nick | aktuellen Nicknamen für den Server erhalten | Servername

View File

@ -258,6 +258,7 @@ _nick_max_length_   (integer) +
_user_max_length_   (integer) +
_host_max_length_   (integer) +
_casemapping_   (integer) +
_utf8mapping_   (integer) +
_chantypes_   (string) +
_chanmodes_   (string) +
_monitor_   (integer) +

View File

@ -20,7 +20,7 @@
| irc | irc_is_channel | 1 if string is a valid IRC channel name for server | server,channel (server is optional)
| irc | irc_is_nick | 1 if string is a valid IRC nick name | nickname
| irc | irc_is_nick | 1 if string is a valid IRC nick name | server,nickname (server is optional)
| irc | irc_nick | get current nick on a server | server name

View File

@ -258,6 +258,7 @@ _nick_max_length_   (integer) +
_user_max_length_   (integer) +
_host_max_length_   (integer) +
_casemapping_   (integer) +
_utf8mapping_   (integer) +
_chantypes_   (string) +
_chanmodes_   (string) +
_monitor_   (integer) +

View File

@ -20,7 +20,7 @@
| irc | irc_is_channel | 1 si la chaîne est un nom de canal IRC valide pour le serveur | serveur,canal (le serveur est optionnel)
| irc | irc_is_nick | 1 si la chaîne est un pseudo IRC valide | pseudo
| irc | irc_is_nick | 1 si la chaîne est un pseudo IRC valide | serveur,pseudo (le serveur est optionnel)
| irc | irc_nick | retourne le pseudo utilisé actuellement sur un serveur | nom de serveur

View File

@ -258,6 +258,7 @@ _nick_max_length_   (integer) +
_user_max_length_   (integer) +
_host_max_length_   (integer) +
_casemapping_   (integer) +
_utf8mapping_   (integer) +
_chantypes_   (string) +
_chanmodes_   (string) +
_monitor_   (integer) +

View File

@ -20,7 +20,7 @@
| irc | irc_is_channel | 1 se la stringa è il nome di un canale IRC valido per il server | server,canale (server è opzionale)
| irc | irc_is_nick | 1 se la stringa è un nick IRC valido | nick
| irc | irc_is_nick | 1 se la stringa è un nick IRC valido | server,nickname (server is optional)
| irc | irc_nick | ottiene nick corrente su un server | nome server

View File

@ -258,6 +258,7 @@ _nick_max_length_   (integer) +
_user_max_length_   (integer) +
_host_max_length_   (integer) +
_casemapping_   (integer) +
_utf8mapping_   (integer) +
_chantypes_   (string) +
_chanmodes_   (string) +
_monitor_   (integer) +

View File

@ -20,7 +20,7 @@
| irc | irc_is_channel | 文字列がサーバの有効な IRC チャンネル名なら 1 | サーバ、チャンネル (サーバは任意)
| irc | irc_is_nick | 文字列が有効な IRC ニックネームなら 1 | ニックネーム
| irc | irc_is_nick | 文字列が有効な IRC ニックネームなら 1 | server,nickname (server is optional)
| irc | irc_nick | あるサーバの現在のニックネームを取得 | サーバ名

View File

@ -258,6 +258,7 @@ _nick_max_length_   (integer) +
_user_max_length_   (integer) +
_host_max_length_   (integer) +
_casemapping_   (integer) +
_utf8mapping_   (integer) +
_chantypes_   (string) +
_chanmodes_   (string) +
_monitor_   (integer) +

View File

@ -20,7 +20,7 @@
| irc | irc_is_channel | 1 jeśli ciąg jest poprawną nazwą kanału IRC dla serwera | serwer,kanał (serWer jest opcjonalny)
| irc | irc_is_nick | 1 jeśli ciąg jest poprawną nazwą użytkownika IRC | nazwa użytkownika
| irc | irc_is_nick | 1 jeśli ciąg jest poprawną nazwą użytkownika IRC | server,nickname (server is optional)
| irc | irc_nick | pobiera aktualny nick z serwera | nazwa serwera

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -6133,10 +6133,6 @@ msgstr "%s: skript \"%s\" odebrán"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: skript \"%s\" nenačten"
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sBarva \"%s\" není definovávána v paletě"
msgid "server"
msgid_plural "servers"
msgstr[0] "server"
@ -8836,8 +8832,9 @@ msgstr "server,kanál (kanál je volitelný)"
msgid "1 if string is a valid IRC nick name"
msgstr "1 pokud je řetězec validní jméno IRC přezdívky"
msgid "nickname"
msgstr "přezdívka"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "server,kanál (kanál je volitelný)"
msgid "get current nick on a server"
msgstr "získat aktuální přezdívku na serveru"
@ -8856,6 +8853,9 @@ msgid ""
"\")"
msgstr ""
msgid "nickname"
msgstr "přezdívka"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -9808,6 +9808,10 @@ msgstr "%s%s: nemůžu načíst soubor \"%s\""
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: nemůžu spustit soubor \"%s\""
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sBarva \"%s\" není definovávána v paletě"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s========== konec backlogu (%d řádků) =========="

View File

@ -24,7 +24,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-06-16 18:32+0200\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n"
@ -7614,10 +7614,6 @@ msgstr "%s: Skript \"%s\" wurde beendet"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: Das Skript \"%s\" wurde nicht installiert"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sBefehl \"/%s eval\" ist zur Zeit noch nicht implementiert"
msgid "server"
msgid_plural "servers"
msgstr[0] "Server"
@ -10674,8 +10670,9 @@ msgstr "Server,Channel (Server ist optional)"
msgid "1 if string is a valid IRC nick name"
msgstr "1, falls die Zeichenkette ein gültiger IRC Nickname ist"
msgid "nickname"
msgstr "Nickname"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "Server,Channel (Server ist optional)"
msgid "get current nick on a server"
msgstr "aktuellen Nicknamen für den Server erhalten"
@ -10696,6 +10693,9 @@ msgstr ""
"erhalte nick color code (*veraltet* ab Version 1.5, wird ersetzt durch "
"\"nick_color\")"
msgid "nickname"
msgstr "Nickname"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -11681,6 +11681,10 @@ msgstr "%s%s: Kann die Datei \"%s\" nicht laden"
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: Die Datei \"%s\" kann nicht ausgeführt werden"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sBefehl \"/%s eval\" ist zur Zeit noch nicht implementiert"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s========== Ende des Verlaufspeichers (%d Zeilen) =========="

View File

@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -6347,10 +6347,6 @@ msgstr "%s: script \"%s\" descargado"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: el script \"%s\" no está cargado"
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sColor \"%s\" no está definido en la paleta"
msgid "server"
msgid_plural "servers"
msgstr[0] "servidor"
@ -9134,8 +9130,9 @@ msgstr "servidor,canal (servidor es opcional)"
msgid "1 if string is a valid IRC nick name"
msgstr "1 si la cadena es un apodo IRC válido"
msgid "nickname"
msgstr "apodo"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "servidor,canal (servidor es opcional)"
msgid "get current nick on a server"
msgstr "devuelve el apodo actual en el servidor"
@ -9154,6 +9151,9 @@ msgid ""
"\")"
msgstr ""
msgid "nickname"
msgstr "apodo"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -10118,6 +10118,10 @@ msgstr "%s%s: no es posible cargar el archivo \"%s\""
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: no es posible ejecutar el archivo \"%s\""
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sColor \"%s\" no está definido en la paleta"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s========== Fin del último registro (%d líneas) =========="

View File

@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"PO-Revision-Date: 2020-06-03 07:55+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-06-20 17:05+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: fr\n"
@ -7454,10 +7454,6 @@ msgstr "%s : script \"%s\" déchargé"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s : script \"%s\" non chargé"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sLa commande \"/%s eval\" n'est pas implémentée"
msgid "server"
msgid_plural "servers"
msgstr[0] "serveur"
@ -10425,8 +10421,8 @@ msgstr "serveur,canal (le serveur est optionnel)"
msgid "1 if string is a valid IRC nick name"
msgstr "1 si la chaîne est un pseudo IRC valide"
msgid "nickname"
msgstr "pseudo"
msgid "server,nickname (server is optional)"
msgstr "serveur,pseudo (le serveur est optionnel)"
msgid "get current nick on a server"
msgstr "retourne le pseudo utilisé actuellement sur un serveur"
@ -10447,6 +10443,9 @@ msgstr ""
"retourne le code couleur du pseudo (*obsolète* depuis la version 1.5, "
"remplacé par \"nick_color\")"
msgid "nickname"
msgstr "pseudo"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -11411,6 +11410,10 @@ msgstr "%s%s : impossible de charger le fichier \"%s\""
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s : impossible d'exécuter le fichier \"%s\""
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sLa commande \"/%s eval\" n'est pas implémentée"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s========== Fin de l'historique (%d lignes) =========="

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -5665,10 +5665,6 @@ msgstr "A \"%s\" modul eltávolítva.\n"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s a \"%s\" szerver nem található\n"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr ""
#, fuzzy
msgid "server"
msgid_plural "servers"
@ -8224,8 +8220,8 @@ msgid "1 if string is a valid IRC nick name"
msgstr "felhasználók listája a szobában"
#, fuzzy
msgid "nickname"
msgstr "[-all] név"
msgid "server,nickname (server is optional)"
msgstr "szoba: szoba neve"
#, fuzzy
msgid "get current nick on a server"
@ -8247,6 +8243,10 @@ msgid ""
"\")"
msgstr ""
#, fuzzy
msgid "nickname"
msgstr "[-all] név"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -9189,6 +9189,10 @@ msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n"
msgid "%s%s: unable to execute file \"%s\""
msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr ""
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr ""

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -6515,10 +6515,6 @@ msgstr "%s: script \"%s\" scaricato"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: script \"%s\" non caricato"
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sColore \"%s\" non definito nella tavolozza"
msgid "server"
msgid_plural "servers"
msgstr[0] "server"
@ -9329,8 +9325,9 @@ msgstr "server,canale (server è opzionale)"
msgid "1 if string is a valid IRC nick name"
msgstr "1 se la stringa è un nick IRC valido"
msgid "nickname"
msgstr "nick"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "server,canale (server è opzionale)"
msgid "get current nick on a server"
msgstr "ottiene nick corrente su un server"
@ -9349,6 +9346,9 @@ msgid ""
"\")"
msgstr ""
msgid "nickname"
msgstr "nick"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -10303,6 +10303,10 @@ msgstr "%s%s: impossibile caricare il file \"%s\""
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: impossibile eseguire il file \"%s\""
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sColore \"%s\" non definito nella tavolozza"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s========== Fine della cronologia (%d righe) =========="

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/weechat/tree/master/"
@ -7107,10 +7107,6 @@ msgstr "%s: スクリプト \"%s\" がアンロードされました"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: スクリプト \"%s\" はロードされていません"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sコマンド \"/%s eval\" はまだ実装されていません"
msgid "server"
msgid_plural "servers"
msgstr[0] "サーバ"
@ -9958,8 +9954,9 @@ msgstr "サーバ、チャンネル (サーバは任意)"
msgid "1 if string is a valid IRC nick name"
msgstr "文字列が有効な IRC ニックネームなら 1"
msgid "nickname"
msgstr "ニックネーム"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "サーバ、チャンネル (サーバは任意)"
msgid "get current nick on a server"
msgstr "あるサーバの現在のニックネームを取得"
@ -9980,6 +9977,9 @@ msgstr ""
"ニックネームの色コードを取得 (バージョン 1.5 で *廃止* されました。代わりに "
"\"nick_color\" を使ってください)"
msgid "nickname"
msgstr "ニックネーム"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -10943,6 +10943,10 @@ msgstr "%s%s: ファイル \"%s\" をロードできません"
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: ファイル \"%s\" を実行できません"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sコマンド \"/%s eval\" はまだ実装されていません"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s========== バックログの最後 (%d 行) =========="

View File

@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n"
"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
@ -7248,10 +7248,6 @@ msgstr "%s: skrypt \"%s\" wyładowano"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: skrypt \"%s\" nie załadowany"
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sKomenda \"/%s eval\" nie jest jeszcze zaimplementowana"
msgid "server"
msgid_plural "servers"
msgstr[0] "serwer"
@ -10169,8 +10165,9 @@ msgstr "serwer,kanał (serWer jest opcjonalny)"
msgid "1 if string is a valid IRC nick name"
msgstr "1 jeśli ciąg jest poprawną nazwą użytkownika IRC"
msgid "nickname"
msgstr "nazwa użytkownika"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "serwer,kanał (serWer jest opcjonalny)"
msgid "get current nick on a server"
msgstr "pobiera aktualny nick z serwera"
@ -10191,6 +10188,9 @@ msgstr ""
"pobierz kod koloru nicka (*przestarzałe* od wersji 1.5, zamienione przez "
"\"nick_color\")"
msgid "nickname"
msgstr "nazwa użytkownika"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -11144,6 +11144,10 @@ msgstr "%s%s: nie można wczytać pliku \"%s\""
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: nie można wykonać pliku \"%s\""
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sKomenda \"/%s eval\" nie jest jeszcze zaimplementowana"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s========== Koniec backloga (%d linii) =========="

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Portuguese <>\n"
@ -6887,10 +6887,6 @@ msgstr "%s: script \"%s\" descarregado"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: script \"%s\" não carregado"
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sA cor \"%s\" não está definida na paleta"
msgid "server"
msgid_plural "servers"
msgstr[0] "servidor"
@ -9779,8 +9775,9 @@ msgstr "servidor,canal (o servidor é opcional)"
msgid "1 if string is a valid IRC nick name"
msgstr "1 se a cadeia for um nick de IRC válido"
msgid "nickname"
msgstr "nickname"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "servidor,canal (o servidor é opcional)"
msgid "get current nick on a server"
msgstr "obter nick atual num servidor"
@ -9801,6 +9798,9 @@ msgstr ""
"obter código de cor do nick (*obsoleto* desde a versão 1.5, substituído por "
"\"nick_color\")"
msgid "nickname"
msgstr "nickname"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -10771,6 +10771,10 @@ msgstr "%s%s: não foi possível carregar o ficheiro \"%s\""
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: não foi possível executar o ficheiro \"%s\""
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sA cor \"%s\" não está definida na paleta"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "%s===\t%s====== Fim do registo recente (%d linhas) ====="

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-18 11:34+0200\n"
"Last-Translator: Eduardo Elias <camponez@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -6312,10 +6312,6 @@ msgstr "%s: script \"%s\" descarregado"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s%s: script \"%s\" não carregado"
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sCor \"%s\" não está definida na palheta"
msgid "server"
msgid_plural "servers"
msgstr[0] "servidor"
@ -8658,8 +8654,9 @@ msgstr "servidor,canal (servidor é opcional)"
msgid "1 if string is a valid IRC nick name"
msgstr "1 se string é um apelido IRC válido"
msgid "nickname"
msgstr "apelido"
#, fuzzy
msgid "server,nickname (server is optional)"
msgstr "servidor,canal (servidor é opcional)"
msgid "get current nick on a server"
msgstr "obter apelido atual em um servidor"
@ -8678,6 +8675,9 @@ msgid ""
"\")"
msgstr ""
msgid "nickname"
msgstr "apelido"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -9632,6 +9632,10 @@ msgstr "%s%s: não foi possível carregar arquivo \"%s\""
msgid "%s%s: unable to execute file \"%s\""
msgstr "%s%s: não foi possível executar arquivo \"%s\""
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sCor \"%s\" não está definida na palheta"
#, fuzzy, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr "===\t========== Fim do backlog (%d linhas) =========="

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2020-04-28 16:40+0200\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -5702,10 +5702,6 @@ msgstr "Plugin \"%s\" выгружен.\n"
msgid "%s%s: script \"%s\" not loaded"
msgstr "%s сервер \"%s\" не найден\n"
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sЦвет \"%s\" не определён в палитре"
#, fuzzy
msgid "server"
msgid_plural "servers"
@ -8260,8 +8256,8 @@ msgid "1 if string is a valid IRC nick name"
msgstr "список ников на канале"
#, fuzzy
msgid "nickname"
msgstr "[-all] ник"
msgid "server,nickname (server is optional)"
msgstr "канал: название канала"
#, fuzzy
msgid "get current nick on a server"
@ -8283,6 +8279,10 @@ msgid ""
"\")"
msgstr ""
#, fuzzy
msgid "nickname"
msgstr "[-all] ник"
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -9226,6 +9226,10 @@ msgstr "Не могу записать лог-файл \"%s\"\n"
msgid "%s%s: unable to execute file \"%s\""
msgstr "Не могу записать лог-файл \"%s\"\n"
#, fuzzy, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr "%sЦвет \"%s\" не определён в палитре"
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr ""

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2019-11-03 08:38+0100\n"
"Last-Translator: Hasan Kiran <sunder67@hotmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -5232,10 +5232,6 @@ msgstr ""
msgid "%s%s: script \"%s\" not loaded"
msgstr ""
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr ""
msgid "server"
msgid_plural "servers"
msgstr[0] "sunucu(lar)"
@ -7470,7 +7466,7 @@ msgstr ""
msgid "1 if string is a valid IRC nick name"
msgstr ""
msgid "nickname"
msgid "server,nickname (server is optional)"
msgstr ""
msgid "get current nick on a server"
@ -7490,6 +7486,9 @@ msgid ""
"\")"
msgstr ""
msgid "nickname"
msgstr ""
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -8394,6 +8393,10 @@ msgstr ""
msgid "%s%s: unable to execute file \"%s\""
msgstr ""
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr ""
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr ""

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2020-06-03 07:54+0200\n"
"POT-Creation-Date: 2020-06-20 17:04+0200\n"
"PO-Revision-Date: 2014-08-16 10:27+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -5172,10 +5172,6 @@ msgstr ""
msgid "%s%s: script \"%s\" not loaded"
msgstr ""
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr ""
msgid "server"
msgid_plural "servers"
msgstr[0] ""
@ -7330,7 +7326,7 @@ msgstr ""
msgid "1 if string is a valid IRC nick name"
msgstr ""
msgid "nickname"
msgid "server,nickname (server is optional)"
msgstr ""
msgid "get current nick on a server"
@ -7350,6 +7346,9 @@ msgid ""
"\")"
msgstr ""
msgid "nickname"
msgstr ""
msgid ""
"get nick color name (*deprecated* since version 1.5, replaced by "
"\"nick_color_name\")"
@ -8256,6 +8255,10 @@ msgstr ""
msgid "%s%s: unable to execute file \"%s\""
msgstr ""
#, c-format
msgid "%sCommand \"/%s eval\" is not yet implemented"
msgstr ""
#, c-format
msgid "%s===\t%s========== End of backlog (%d lines) =========="
msgstr ""

View File

@ -108,6 +108,10 @@ irc_info_info_irc_is_nick_cb (const void *pointer, void *data,
const char *info_name,
const char *arguments)
{
char *pos_comma, *server;
const char *pos_nick;
struct t_irc_server *ptr_server;
/* make C compiler happy */
(void) pointer;
(void) data;
@ -116,7 +120,21 @@ irc_info_info_irc_is_nick_cb (const void *pointer, void *data,
if (!arguments || !arguments[0])
return NULL;
return (irc_nick_is_nick (arguments)) ? strdup ("1") : NULL;
ptr_server = NULL;
pos_nick = arguments;
pos_comma = strchr (arguments, ',');
if (pos_comma)
{
pos_nick = pos_comma + 1;
server = weechat_strndup (arguments, pos_comma - arguments);
if (server)
{
ptr_server = irc_server_search (server);
free (server);
}
}
return (irc_nick_is_nick (ptr_server, pos_nick)) ? strdup ("1") : NULL;
}
/*
@ -1072,7 +1090,7 @@ irc_info_init ()
weechat_hook_info (
"irc_is_nick",
N_("1 if string is a valid IRC nick name"),
N_("nickname"),
N_("server,nickname (server is optional)"),
&irc_info_info_irc_is_nick_cb, NULL, NULL);
weechat_hook_info (
"irc_nick",

View File

@ -62,31 +62,63 @@ irc_nick_valid (struct t_irc_channel *channel, struct t_irc_nick *nick)
}
/*
* Checks if string is a valid nick string (RFC 1459).
* Checks if string is a valid nick string, using server UTF8MAPPING.
*
* Returns:
* 1: string is a valid nick
* 0: string is not a valid nick
* 1: string is a valid nick on this server
* 0: string is not a valid nick on this server
*/
int
irc_nick_is_nick (const char *string)
irc_nick_is_nick (struct t_irc_server *server, const char *string)
{
const char *ptr;
const char *ptr_string;
int utf8mapping;
if (!string || !string[0])
return 0;
/* first char must not be a number or hyphen */
ptr = string;
if (strchr ("0123456789-", *ptr))
return 0;
utf8mapping = (server) ? server->utf8mapping : IRC_SERVER_UTF8MAPPING_NONE;
while (ptr && ptr[0])
/* check length of nick in bytes (if we have a limit in the server) */
if (server && (server->nick_max_length > 0)
&& (int)strlen (string) > server->nick_max_length)
{
if (!strchr (IRC_NICK_VALID_CHARS, *ptr))
/* nick is too long */
return 0;
}
/* check if nick is UTF-8 valid */
if ((utf8mapping == IRC_SERVER_UTF8MAPPING_RFC8265)
&& !weechat_utf8_is_valid (string, -1, NULL))
{
/* invalid UTF-8 */
return 0;
}
/* check the first char in the nick */
if ((utf8mapping == IRC_SERVER_UTF8MAPPING_NONE)
&& strchr ("0123456789-", string[0]))
{
/* first char is invalid */
return 0;
}
/* check if there are forbidden chars in nick */
ptr_string = string;
while (ptr_string && ptr_string[0])
{
if ((utf8mapping == IRC_SERVER_UTF8MAPPING_NONE)
&& !strchr (IRC_NICK_VALID_CHARS, ptr_string[0]))
{
return 0;
ptr++;
}
if ((utf8mapping == IRC_SERVER_UTF8MAPPING_RFC8265)
&& strchr (IRC_NICK_INVALID_CHARS, ptr_string[0]))
{
return 0;
}
ptr_string = weechat_utf8_next_char (ptr_string);
}
return 1;

View File

@ -22,6 +22,7 @@
#define IRC_NICK_VALID_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHI" \
"JKLMNOPQRSTUVWXYZ0123456789-[]\\`_^{|}"
#define IRC_NICK_INVALID_CHARS " ,:\n\r*?.!@"
/* nicklist group for nicks without prefix is "999|..." */
#define IRC_NICK_GROUP_OTHER_NUMBER 999
@ -47,7 +48,7 @@ struct t_irc_nick
extern int irc_nick_valid (struct t_irc_channel *channel,
struct t_irc_nick *nick);
extern int irc_nick_is_nick (const char *string);
extern int irc_nick_is_nick (struct t_irc_server *server, const char *string);
extern char *irc_nick_find_color (const char *nickname);
extern char *irc_nick_find_color_name (const char *nickname);
extern void irc_nick_set_host (struct t_irc_nick *nick, const char *host);

View File

@ -3096,7 +3096,7 @@ IRC_PROTOCOL_CALLBACK(001)
IRC_PROTOCOL_CALLBACK(005)
{
char *pos, *pos2, *pos_start, *error, *isupport2;
int length_isupport, length, casemapping;
int length_isupport, length, casemapping, utf8mapping;
long value;
IRC_PROTOCOL_MIN_ARGS(4);
@ -3181,6 +3181,21 @@ IRC_PROTOCOL_CALLBACK(005)
pos2[0] = ' ';
}
/* save utf8mapping */
pos = strstr (argv_eol[3], "UTF8MAPPING=");
if (pos)
{
pos += 12;
pos2 = strchr (pos, ' ');
if (pos2)
pos2[0] = '\0';
utf8mapping = irc_server_search_utf8mapping (pos);
if (utf8mapping >= 0)
server->utf8mapping = utf8mapping;
if (pos2)
pos2[0] = ' ';
}
/* save chantypes */
pos = strstr (argv_eol[3], "CHANTYPES=");
if (pos)

View File

@ -124,6 +124,9 @@ char *irc_server_options[IRC_SERVER_NUM_OPTIONS][2] =
char *irc_server_casemapping_string[IRC_SERVER_NUM_CASEMAPPING] =
{ "rfc1459", "strict-rfc1459", "ascii" };
char *irc_server_utf8mapping_string[IRC_SERVER_NUM_UTF8MAPPING] =
{ "none", "rfc8265" };
char *irc_server_prefix_modes_default = "ov";
char *irc_server_prefix_chars_default = "@+";
char *irc_server_chanmodes_default = "beI,k,l";
@ -248,8 +251,8 @@ irc_server_search_option (const char *option_name)
/*
* Searches for a casemapping.
*
* Returns index of casemapping in array "irc_server_casemapping_string", -1 if
* not found.
* Returns index of casemapping in array "irc_server_casemapping_string",
* -1 if not found.
*/
int
@ -267,6 +270,28 @@ irc_server_search_casemapping (const char *casemapping)
return -1;
}
/*
* Searches for a utf8mapping.
*
* Returns index of utf8mapping in array "irc_server_utf8mapping_string",
* -1 if not found.
*/
int
irc_server_search_utf8mapping (const char *utf8mapping)
{
int i;
for (i = 0; i < IRC_SERVER_NUM_UTF8MAPPING; i++)
{
if (weechat_strcasecmp (irc_server_utf8mapping_string[i], utf8mapping) == 0)
return i;
}
/* utf8mapping not found */
return -1;
}
/*
* Compares two strings on server (case insensitive, depends on casemapping).
*
@ -302,8 +327,8 @@ irc_server_strcasecmp (struct t_irc_server *server,
}
/*
* Compares two strings on server (case insensitive, depends on casemapping) for
* max chars.
* Compares two strings on server (case insensitive, depends on casemapping)
* for max chars.
*
* Returns:
* < 0: string1 < string2
@ -1415,6 +1440,7 @@ irc_server_alloc (const char *name)
new_server->user_max_length = 0;
new_server->host_max_length = 0;
new_server->casemapping = IRC_SERVER_CASEMAPPING_RFC1459;
new_server->utf8mapping = IRC_SERVER_UTF8MAPPING_NONE;
new_server->chantypes = NULL;
new_server->chanmodes = NULL;
new_server->monitor = 0;
@ -5743,6 +5769,7 @@ irc_server_hdata_server_cb (const void *pointer, void *data,
WEECHAT_HDATA_VAR(struct t_irc_server, user_max_length, INTEGER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, host_max_length, INTEGER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, casemapping, INTEGER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, utf8mapping, INTEGER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, chantypes, STRING, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, chanmodes, STRING, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, monitor, INTEGER, 0, NULL, NULL);
@ -5990,6 +6017,10 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "casemapping_string", irc_server_casemapping_string[server->casemapping]))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "utf8mapping", server->utf8mapping))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "utf8mapping_string", irc_server_utf8mapping_string[server->utf8mapping]))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "chantypes", server->chantypes))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "chanmodes", server->chanmodes))
@ -6378,6 +6409,9 @@ irc_server_print_log ()
weechat_log_printf (" casemapping. . . . . : %d (%s)",
ptr_server->casemapping,
irc_server_casemapping_string[ptr_server->casemapping]);
weechat_log_printf (" utf8mapping. . . . . : %d (%s)",
ptr_server->utf8mapping,
irc_server_utf8mapping_string[ptr_server->utf8mapping]);
weechat_log_printf (" chantypes. . . . . . : '%s'", ptr_server->chantypes);
weechat_log_printf (" chanmodes. . . . . . : '%s'", ptr_server->chanmodes);
weechat_log_printf (" monitor. . . . . . . : %d", ptr_server->monitor);

View File

@ -142,6 +142,15 @@ enum t_irc_server_casemapping
IRC_SERVER_NUM_CASEMAPPING,
};
/* utf8mapping (string comparisons for nicks/channels) */
enum t_irc_server_utf8mapping
{
IRC_SERVER_UTF8MAPPING_NONE = 0,
IRC_SERVER_UTF8MAPPING_RFC8265,
/* number of utf8mapping */
IRC_SERVER_NUM_UTF8MAPPING,
};
/* output queue of messages to server (for sending slowly to server) */
struct t_irc_outqueue
@ -210,6 +219,7 @@ struct t_irc_server
int user_max_length; /* max length of user (from msg 005) */
int host_max_length; /* max length of host (from msg 005) */
int casemapping; /* casemapping from msg 005 */
int utf8mapping; /* utf8mapping from msg 005 */
char *chantypes; /* chantypes from msg 005 (eg "&#") */
char *chanmodes; /* chanmodes from msg 005 */
/* (eg "beI,k,l,imnpstaqr") */
@ -284,6 +294,7 @@ extern struct t_irc_server *irc_server_search (const char *server_name);
extern struct t_irc_server *irc_server_casesearch (const char *server_name);
extern int irc_server_search_option (const char *option_name);
extern int irc_server_search_casemapping (const char *casemapping);
extern int irc_server_search_utf8mapping (const char *utf8mapping);
extern int irc_server_strcasecmp (struct t_irc_server *server,
const char *string1, const char *string2);
extern int irc_server_strncasecmp (struct t_irc_server *server,

View File

@ -339,7 +339,7 @@ irc_upgrade_read_cb (const void *pointer, void *data,
int object_id,
struct t_infolist *infolist)
{
int flags, sock, size, i, index, nicks_count, num_items;
int flags, sock, size, i, index, nicks_count, num_items, utf8mapping;
long number;
time_t join_time;
char *buf, option_name[64], **nicks, *nick_join, *pos, *error;
@ -479,7 +479,7 @@ irc_upgrade_read_cb (const void *pointer, void *data,
irc_upgrade_current_server->prefix_chars = strdup (str);
}
irc_upgrade_current_server->nick_max_length = weechat_infolist_integer (infolist, "nick_max_length");
/* "user_max_length" is new in WeeChat 2.6 */
/* "user_max_length" is new in WeeChat 2.6 */
if (weechat_infolist_search_var (infolist, "user_max_length"))
{
irc_upgrade_current_server->user_max_length = weechat_infolist_integer (infolist, "user_max_length");
@ -497,7 +497,7 @@ irc_upgrade_read_cb (const void *pointer, void *data,
irc_upgrade_current_server->user_max_length = (int)number;
}
}
/* "host_max_length" is new in WeeChat 2.6 */
/* "host_max_length" is new in WeeChat 2.6 */
if (weechat_infolist_search_var (infolist, "host_max_length"))
{
irc_upgrade_current_server->host_max_length = weechat_infolist_integer (infolist, "host_max_length");
@ -516,6 +516,23 @@ irc_upgrade_read_cb (const void *pointer, void *data,
}
}
irc_upgrade_current_server->casemapping = weechat_infolist_integer (infolist, "casemapping");
/* "utf8mapping" is new in WeeChat 2.9 */
if (weechat_infolist_search_var (infolist, "utf8mapping"))
{
irc_upgrade_current_server->utf8mapping = weechat_infolist_integer (infolist, "utf8mapping");
}
else
{
/* WeeChat <= 2.8 */
str = irc_server_get_isupport_value (irc_upgrade_current_server,
"UTF8MAPPING");
if (str)
{
utf8mapping = irc_server_search_utf8mapping (str);
if (utf8mapping >= 0)
irc_upgrade_current_server->utf8mapping = utf8mapping;
}
}
str = weechat_infolist_string (infolist, "chantypes");
if (str)
irc_upgrade_current_server->chantypes = strdup (str);

View File

@ -24,6 +24,7 @@
extern "C"
{
#include "src/plugins/irc/irc-nick.h"
#include "src/plugins/irc/irc-server.h"
}
TEST_GROUP(IrcNick)
@ -47,24 +48,95 @@ TEST(IrcNick, Valid)
TEST(IrcNick, IsNick)
{
struct t_irc_server *server;
/* no server, default utf8mapping = none */
/* empty nick */
LONGS_EQUAL(0, irc_nick_is_nick (NULL));
LONGS_EQUAL(0, irc_nick_is_nick (""));
LONGS_EQUAL(0, irc_nick_is_nick (" "));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, NULL));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, ""));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, " "));
/* invalid first char */
LONGS_EQUAL(0, irc_nick_is_nick ("0abc"));
LONGS_EQUAL(0, irc_nick_is_nick ("9abc"));
LONGS_EQUAL(0, irc_nick_is_nick ("-abc"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "0abc"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "9abc"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "-abc"));
/* invalid chars in nick */
LONGS_EQUAL(0, irc_nick_is_nick ("noël"));
LONGS_EQUAL(0, irc_nick_is_nick ("testé"));
LONGS_EQUAL(0, irc_nick_is_nick ("nick space"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "nick test"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "nick,test"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "nick?test"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "nick!test"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "nick@test"));
/* UTF-8 wide chars in nick */
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "noël"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "testé"));
LONGS_EQUAL(0, irc_nick_is_nick (NULL, "\xf0\xa4\xad\xa2")); /* han char */
/* valid nicks */
LONGS_EQUAL(1, irc_nick_is_nick ("tester"));
LONGS_EQUAL(1, irc_nick_is_nick ("bob"));
LONGS_EQUAL(1, irc_nick_is_nick ("alice"));
LONGS_EQUAL(1, irc_nick_is_nick ("very_long_nick_which_is_valid"));
LONGS_EQUAL(1, irc_nick_is_nick (NULL, "tester"));
LONGS_EQUAL(1, irc_nick_is_nick (NULL, "bob"));
LONGS_EQUAL(1, irc_nick_is_nick (NULL, "alice"));
LONGS_EQUAL(1, irc_nick_is_nick (NULL, "very_long_nick_which_is_valid"));
/* server with utf8mapping = rfc8265, nicklen = 20 */
server = irc_server_alloc ("my_ircd");
CHECK(server);
if (server->chantypes)
free (server->chantypes);
server->utf8mapping =IRC_SERVER_UTF8MAPPING_RFC8265;
server->nick_max_length = 20;
/* empty nick */
LONGS_EQUAL(0, irc_nick_is_nick (server, NULL));
LONGS_EQUAL(0, irc_nick_is_nick (server, ""));
LONGS_EQUAL(0, irc_nick_is_nick (server, " "));
/* nick too long */
LONGS_EQUAL(0, irc_nick_is_nick (server, "long_nick___length_21"));
/* valid nicks: first char allowed with utf8mapping = rfc8265 */
LONGS_EQUAL(1, irc_nick_is_nick (server, "0abc"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "9abc"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "-abc"));
/* invalid chars in nick */
LONGS_EQUAL(0, irc_nick_is_nick (server, "nick test"));
LONGS_EQUAL(0, irc_nick_is_nick (server, "nick,test"));
LONGS_EQUAL(0, irc_nick_is_nick (server, "nick?test"));
LONGS_EQUAL(0, irc_nick_is_nick (server, "nick!test"));
LONGS_EQUAL(0, irc_nick_is_nick (server, "nick@test"));
/* valid nicks: UTF-8 */
LONGS_EQUAL(1, irc_nick_is_nick (server, "noël"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "testé"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "\xf0\xa4\xad\xa2")); /* han char */
/* valid nicks with UTF-8 wide chars */
LONGS_EQUAL(1, irc_nick_is_nick (server, "noël"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "testé"));
/* valid nicks */
LONGS_EQUAL(1, irc_nick_is_nick (server, "tester"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "bob"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "alice"));
LONGS_EQUAL(1, irc_nick_is_nick (server, "long_nick__length_20"));
/* max length: 4 bytes */
server->nick_max_length = 4;
/* invalid nick: 8 bytes */
LONGS_EQUAL(0, irc_nick_is_nick (server, "\xf0\xa4\xad\xa2\xf0\xa4\xad\xa2"));
/* valid nick: 4 bytes */
LONGS_EQUAL(1, irc_nick_is_nick (server, "\xf0\xa4\xad\xa2")); /* han char */
/* max length: 3 bytes */
server->nick_max_length = 3;
/* invalid nick: 4 bytes */
LONGS_EQUAL(0, irc_nick_is_nick (server, "\xf0\xa4\xad\xa2")); /* han char */
irc_server_free (server);
}