翻訳者:
-
Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>, 2014-2018
このマニュアルは WeeChat チャットクライアントについての文書で、WeeChat の一部です。
この文書の最新版を見るには以下のページを確認して下さい: https://weechat.org/doc
1. はじめに
WeeChat (Wee Enhanced Environment for Chat) は無料のチャットクライアントで、高速、軽量、多くのオペレーティングシステムで動くように設計されています。
このマニュアルは WeeChat プラグイン API についての文書で、C 言語プラグインはこの API を使って WeeChat の中核部と通信しています。
2. WeeChat プラグイン
プラグインは C 言語のプログラムであり、インターフェースが定義する WeeChat 関数を呼び出すことができます。
この C 言語プログラムはコンパイルの際に WeeChat のソースを必要としません、WeeChat
は /plugin コマンドでこのプログラムを動的に読み込むことができます。
プラグインを動的にオペレーティングシステムに読み込ませるために、プラグインは必ずダイナミックライブラリにしてください。ファイルの拡張子は GNU/Linux では ".so"、Windows では ".dll" です。
プラグインでは必ず "weechat-plugin.h" ファイルをインクルードしてください (WeeChat ソースコードに含まれています)。このファイルでは WeeChat と通信する際に使う構造体や型が定義されています。
WeeChat 関数を プラグイン API に表示された書式で呼び出すには、以下のグローバルポインタを定義して weechat_plugin_init 関数の中でそれを初期化しなければいけません:
struct t_weechat_plugin *weechat_plugin;
2.1. マクロ
プラグインでは必ず以下のマクロを使ってください (いくつかの変数を定義するために必要です):
- WEECHAT_PLUGIN_NAME("name")
-
プラグイン名
- WEECHAT_PLUGIN_DESCRIPTION("description")
-
プラグインの短い説明
- WEECHAT_PLUGIN_VERSION("1.0")
-
プラグインのバージョン番号
- WEECHAT_PLUGIN_LICENSE("GPL3")
-
プラグインのライセンス
- WEECHAT_PLUGIN_PRIORITY(1000)
-
プラグインの優先度 (任意、下記参照)
2.2. 重要な関数
プラグインでは必ず以下の 2 つの関数を使ってください:
-
weechat_plugin_init
-
weechat_plugin_end
2.2.1. weechat_plugin_init
WeeChat はプラグインを読み込む際にこの関数を呼び出します。
プロトタイプ:
int weechat_plugin_init (struct t_weechat_plugin *plugin,
int argc, char *argv[]);
引数:
-
plugin: WeeChat プラグイン構造体へのポインタ。これはグローバルポインタ
weechat_pluginを初期化する際に使われます -
argc: プラグインに対する引数の数 (ユーザがコマンドラインで指定)
-
argv: プラグインに対する引数
戻り値:
-
WEECHAT_RC_OK 成功した場合 (プラグインをロードします)
-
WEECHAT_RC_ERROR エラーが起きた場合 (プラグインをロードしません)
プラグインの優先度
複数のプラグインが自動ロードされた場合 (たとえば起動時)、WeeChat はまず全てのプラグインをロードし、各プラグインで定義された優先度に従って init 関数を呼び出します。優先度を大きな値にすれば init 関数を呼び出す順番が早くなります
デフォルトの優先度は 1000 です (この値を設定した場合、全てのデフォルトプラグインの後にプラグインをロードします)。
WeeChat のデフォルトプラグインは以下の順番で初期化されます:
-
charset (15000)
-
logger (14000)
-
exec (13000)
-
trigger (12000)
-
aspell (11000)
-
alias (10000)
-
buflist (9000)
-
fifo (8000)
-
xfer (7000)
-
irc (6000)
-
relay (5000)
-
guile, javascript, lua, perl, php, python, ruby, tcl (4000)
-
script (3000)
-
fset (2000)
2.3. プラグインのコンパイル
コンパイルするために WeeChat のソースは不要で、weechat-plugin.h ファイルだけが必要です。
1 つのファイル "toto.c" からなるプラグインは以下のようにコンパイルします (GNU/Linux の場合):
$ gcc -fPIC -Wall -c toto.c $ gcc -shared -fPIC -o libtoto.so toto.o
2.4. プラグインを読み込む
libtoto.so ファイルをシステムのプラグインディレクトリ (例えば /usr/local/lib/weechat/plugins) またはユーザのプラグインディレクトリ (例えば /home/xxx/.weechat/plugins) にコピーしてください。
WeeChat の中で:
/plugin load toto
2.5. プラグインの例
コマンド /double を追加するプラグインの例: 引数を 2
倍して現在のバッファに表示するか、コマンドを 2 回実行する
(これは実用的なコマンドというよりも、ただの例です!):
#include <stdlib.h>
#include "weechat-plugin.h"
WEECHAT_PLUGIN_NAME("double");
WEECHAT_PLUGIN_DESCRIPTION("Test plugin for WeeChat");
WEECHAT_PLUGIN_AUTHOR("Sébastien Helleu <flashcode@flashtux.org>");
WEECHAT_PLUGIN_VERSION("0.1");
WEECHAT_PLUGIN_LICENSE("GPL3");
struct t_weechat_plugin *weechat_plugin = NULL;
/* "/double" コマンドのコールバック*/
int
command_double_cb (const void *pointer, void *data,
struct t_gui_buffer *buffer,
int argc, char **argv, char **argv_eol)
{
/* C 言語コンパイラ向けに必要 */
(void) data;
(void) buffer;
(void) argv;
if (argc > 1)
{
weechat_command (NULL, argv_eol[1]);
weechat_command (NULL, argv_eol[1]);
}
return WEECHAT_RC_OK;
}
int
weechat_plugin_init (struct t_weechat_plugin *plugin,
int argc, char *argv[])
{
weechat_plugin = plugin;
weechat_hook_command ("double",
"Display two times a message "
"or execute two times a command",
"message | command",
"message: message to display two times\n"
"command: command to execute two times",
NULL,
&command_double_cb, NULL, NULL);
return WEECHAT_RC_OK;
}
int
weechat_plugin_end (struct t_weechat_plugin *plugin)
{
/* C 言語コンパイラ向けに必要 */
(void) plugin;
return WEECHAT_RC_OK;
}
3. プラグイン API
以下の章では API 関数をカテゴリごとに説明しています。
それぞれの関数について、以下の内容が記載されています:
-
関数の説明、
-
C 言語のプロトタイプ、
-
引数の詳細、
-
戻り値、
-
C 言語での使用例、
-
Python スクリプトでの使用例 (他のスクリプト言語を使う場合も文法は似ています)。
3.1. プラグイン
プラグインに関する情報を取得する関数。
3.1.1. plugin_get_name
プラグインの名前を取得。
プロトタイプ:
const char *weechat_plugin_get_name (struct t_weechat_plugin *plugin);
引数:
-
plugin: WeeChat プラグイン構造体へのポインタ (NULL でも可)
戻り値:
-
プラグインの名前、WeeChat コアの場合は "core" (プラグインへのポインタが NULL の場合)
C 言語での使用例:
const char *name = weechat_plugin_get_name (plugin);
スクリプト (Python) での使用例:
# プロトタイプ
name = weechat.plugin_get_name(plugin)
# 例
plugin = weechat.buffer_get_pointer(weechat.current_buffer(), "plugin")
name = weechat.plugin_get_name(plugin)
3.2. 文字列
以下の多くの文字列関数は標準的な C 言語の関数でも定義されていますが、この API 関数を使うことを推奨します。なぜなら、これらの関数は文字列を UTF-8 とロケールに準じて取り扱うようになっているからです。
3.2.1. charset_set
新しいプラグインの文字セットを設定する (デフォルトの文字セットは UTF-8 です、このためプラグインで UTF-8 を使う場合は、この関数を呼び出す必要はありません。
プロトタイプ:
void weechat_charset_set (const char *charset);
引数:
-
charset: 新たに利用する文字セット
C 言語での使用例:
weechat_charset_set ("iso-8859-1");
スクリプト (Python) での使用例:
# プロトタイプ
weechat.charset_set(charset)
# 例
weechat.charset_set("iso-8859-1")
3.2.2. iconv_to_internal
文字列の文字セットを WeeChat の内部文字セット (UTF-8) に変換。
プロトタイプ:
char *weechat_iconv_to_internal (const char *charset, const char *string);
引数:
-
charset: 変換元の文字列の文字セット
-
string: 変換元の文字列
戻り値:
-
文字セットを変換した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_iconv_to_internal ("iso-8859-1", "iso string: é à");
/* ... */
free (str);
スクリプト (Python) での使用例:
# プロトタイプ
str = weechat.iconv_to_internal(charset, string)
# 例
str = weechat.iconv_to_internal("iso-8859-1", "iso string: é à")
3.2.3. iconv_from_internal
文字列の文字セットを WeeChat の内部文字セット (UTF-8) から別の文字セットに変換。
プロトタイプ:
char *weechat_iconv_from_internal (const char *charset, const char *string);
引数:
-
charset: 変換先の文字列の文字セット
-
string: 変換元の文字列
戻り値:
-
文字セットを変換した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_iconv_from_internal ("iso-8859-1", "utf-8 string: é à");
/* ... */
free (str);
スクリプト (Python) での使用例:
# プロトタイプ
str = weechat.iconv_from_internal(charset, string)
# 例
str = weechat.iconv_from_internal("iso-8859-1", "utf-8 string: é à")
3.2.4. gettext
翻訳済み文字列を返す (設定言語に依存)。
プロトタイプ:
const char *weechat_gettext (const char *string);
引数:
-
string: 翻訳元の文字列
戻り値:
-
翻訳済み文字列または string (未翻訳の場合)
C 言語での使用例:
char *str = weechat_gettext ("hello");
スクリプト (Python) での使用例:
# プロトタイプ
str = weechat.gettext(string)
# 例
str = weechat.gettext("hello")
3.2.5. ngettext
count 引数を元に単数形または複数形で、翻訳済み文字列を返す。
プロトタイプ:
const char *weechat_ngettext (const char *string, const char *plural,
int count);
引数:
-
string: 翻訳元の文字列、単数形
-
plural: 翻訳元の文字列、複数形
-
count: 単数形と複数形のどちらを返すかの判断に使います (選択は設定言語に依存)
戻り値:
-
翻訳済み文字列または string / plural (未翻訳の場合)
C 言語での使用例:
char *str = weechat_ngettext ("file", "files", num_files);
スクリプト (Python) での使用例:
# プロトタイプ
str = weechat.ngettext(string, plural, count)
# 例
num_files = 2
str = weechat.ngettext("file", "files", num_files)
3.2.6. strndup
複製した文字列を最大で length 文字分返す。
プロトタイプ:
char *weechat_strndup (const char *string, int length);
引数:
-
string: 複製元の文字列
-
length: 複製する文字列の最大文字数
戻り値:
-
複製した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_strndup ("abcdef", 3); /* result: "abc" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.7. string_tolower
UTF-8 文字列を小文字に変換。
プロトタイプ:
void weechat_string_tolower (char *string);
引数:
-
string: 変換元の文字列
C 言語での使用例:
char str[] = "AbCdé";
weechat_string_tolower (str); /* str is now: "abcdé" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.8. string_toupper
UTF-8 文字列を大文字に変換。
プロトタイプ:
void weechat_string_toupper (char *string);
引数:
-
string: 変換元の文字列
C 言語での使用例:
char str[] = "AbCdé";
weechat_string_toupper (str); /* str is now: "ABCDé" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.9. strcasecmp
WeeChat バージョン 1.0 で更新。
ロケールと大文字小文字を無視して文字列を比較。
プロトタイプ:
int weechat_strcasecmp (const char *string1, const char *string2);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strcasecmp ("aaa", "CCC"); /* == -2 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.10. strcasecmp_range
WeeChat バージョン 0.3.7 以上で利用可、バージョン 1.0 で更新。
大文字小文字を無視する文字範囲の幅を使い、ロケールと大文字小文字を無視して文字列を比較。
プロトタイプ:
int weechat_strcasecmp_range (const char *string1, const char *string2, int range);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
range: 大文字小文字を無視する文字範囲の幅、例:
-
26:
A-Zをa-zのように変換して比較 -
29:
A-Z [ \ ]をa-z { | }のように変換して比較 -
30:
A-Z [ \ ] ^をa-z { | } ~のように変換して比較
-
|
Note
|
29 と 30 は IRC など一部のプロトコルで使います。 |
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strcasecmp_range ("nick{away}", "NICK[away]", 29); /* == 0 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.11. strncasecmp
WeeChat バージョン 1.0 で更新。
ロケールと大文字小文字を無視して max 文字だけ文字列を比較。
プロトタイプ:
int weechat_strncasecmp (const char *string1, const char *string2, int max);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
max: 比較する文字数の最大値
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strncasecmp ("aabb", "aacc", 2); /* == 0 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.12. strncasecmp_range
WeeChat バージョン 0.3.7 以上で利用可、バージョン 1.0 で更新。
大文字小文字を無視する文字範囲の幅を使い、ロケールと大文字小文字を無視して max 文字だけ文字列を比較。
プロトタイプ:
int weechat_strncasecmp_range (const char *string1, const char *string2, int max, int range);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
max: 比較する文字数の最大値
-
range: 大文字小文字を無視する文字範囲の幅、例:
-
26:
A-Zをa-zのように変換して比較 -
29:
A-Z [ \ ]をa-z { | }のように変換して比較 -
30:
A-Z [ \ ] ^をa-z { | } ~のように変換して比較
-
|
Note
|
29 と 30 は IRC など一部のプロトコルで使います。 |
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strncasecmp_range ("nick{away}", "NICK[away]", 6, 29); /* == 0 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.13. strcmp_ignore_chars
WeeChat バージョン 1.0 で更新。
一部の文字列を無視して、ロケールに依存して (オプションで大文字小文字の区別をしない) 文字列を比較。
プロトタイプ:
int weechat_strcmp_ignore_chars (const char *string1, const char *string2,
const char *chars_ignored,
int case_sensitive);
引数:
-
string1: 1 番目の比較対象の文字列
-
string2: 2 番目の比較対象の文字列
-
chars_ignored: 無視する文字
-
case_sensitive: 大文字小文字を区別して比較する場合は 1、区別しない場合は 0
戻り値:
-
string1 < string2 の場合は -1
-
string1 == string2 の場合は 0
-
string1 > string2 の場合は 1
C 言語での使用例:
int diff = weechat_strcmp_ignore_chars ("a-b", "--a-e", "-", 1); /* == -3 */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.14. strcasestr
WeeChat バージョン 1.3 で更新。
ロケールと大文字小文字を区別して文字列を検索。
プロトタイプ:
const char *weechat_strcasestr (const char *string, const char *search);
引数:
-
string: 文字列
-
search: string 内を検索する文字
戻り値:
-
見つかった文字列へのポインタ、見つからない場合は NULL (WeeChat バージョン 1.3 以上の場合: 返されるポインタは const char * であり、char * ではありません)
C 言語での使用例:
const char *pos = weechat_strcasestr ("aBcDeF", "de"); /* result: pointer to "DeF" */
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.15. strlen_screen
WeeChat バージョン 0.4.2 以上で利用可。
UTF-8 文字列を画面上に表示するために必要な画面幅を返す。非表示文字を 1 文字として数えます (これが utf8_strlen_screen 関数との違いです)。
プロトタイプ:
int weechat_strlen_screen (const char *string);
引数:
-
string: 文字列
戻り値:
-
UTF-8 文字列を画面上に表示するために必要な画面幅
C 言語での使用例:
int length_on_screen = weechat_strlen_screen ("é"); /* == 1 */
スクリプト (Python) での使用例:
# プロトタイプ
length = weechat.strlen_screen(string)
# 例
length = weechat.strlen_screen("é") # 1
3.2.16. string_match
WeeChat バージョン 1.0 で更新。
文字列がマスクにマッチするか確認。
プロトタイプ:
int weechat_string_match (const char *string, const char *mask,
int case_sensitive);
引数:
-
string: 文字列
-
mask: ワイルドカード (
*) を含むマスク、各ワイルドカードは文字列中の 0 個またはそれ以上の文字にマッチします -
case_sensitive: 大文字小文字を区別する場合は 1、区別しない場合は 0
|
Note
|
WeeChat バージョン 1.0 以上の場合、ワイルドカードをマスクの内部で使うことが可能です (マスクの最初および最後だけではありません)。 |
戻り値:
-
マスクにマッチした場合は 1、それ以外は 0
C 言語での使用例:
int match1 = weechat_string_match ("abcdef", "abc*", 0); /* == 1 */
int match2 = weechat_string_match ("abcdef", "*dd*", 0); /* == 0 */
int match3 = weechat_string_match ("abcdef", "*def", 0); /* == 1 */
int match4 = weechat_string_match ("abcdef", "*de*", 0); /* == 1 */
int match5 = weechat_string_match ("abcdef", "*b*d*", 0); /* == 1 */
スクリプト (Python) での使用例:
# プロトタイプ
match = weechat.string_match(string, mask, case_sensitive)
# 例
match1 = weechat.string_match("abcdef", "abc*", 0) # 1
match2 = weechat.string_match("abcdef", "*dd*", 0) # 0
match3 = weechat.string_match("abcdef", "*def", 0) # 1
match4 = weechat.string_match("abcdef", "*de*", 0) # 1
match5 = weechat.string_match("abcdef", "*b*d*", 0) # 1
3.2.17. string_expand_home
WeeChat バージョン 0.3.3 以上で利用可。
文字列が ~ から始まる場合はこれをホームディレクトリで置換。文字列が
~ から始まっていない場合は同じ文字列を返す。
プロトタイプ:
char *weechat_string_expand_home (const char *path);
引数:
-
path: パス
戻り値:
-
~から始まるパスをホームディレクトリで置換したパス (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_string_expand_home ("~/file.txt");
/* result: "/home/xxx/file.txt" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.18. string_eval_path_home
WeeChat バージョン 0.3.3 以上で利用可。
3 段階でパスを評価します:
-
先頭の
%hを WeeChat ホームディレクトリで置換し、 -
先頭の
~をユーザのホームディレクトリで置換し (string_expand_home を実行し)、 -
変数を評価します (string_eval_expression を参照してください)。
プロトタイプ:
char *weechat_string_eval_path_home (const char *path,
struct t_hashtable *pointers,
struct t_hashtable *extra_vars,
struct t_hashtable *options);
引数:
-
path: パス
-
pointers: 関数に渡されるハッシュテーブル string_eval_expression
-
extra_vars: 関数に渡されるハッシュテーブル string_eval_expression
-
options: 関数に渡されるハッシュテーブル string_eval_expression
戻り値:
-
評価済みのパス (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_string_eval_path_home ("%h/test", NULL, NULL, NULL);
/* result: "/home/xxx/.weechat/test" */
/* ... */
free (str);
スクリプト (Python) での使用例:
# プロトタイプ
path = weechat.string_eval_path_home(path, pointers, extra_vars, options)
# 例
path = weechat.string_eval_path_home("%h/test", {}, {}, {})
# path == "/home/xxx/.weechat/test"
3.2.19. string_remove_quotes
文字列の最初と最後から引用符を削除 (最初の引用符の前と最後の引用符の後にある空白文字は無視)。
プロトタイプ:
char *weechat_string_remove_quotes (const char *string, const char *quotes);
引数:
-
string: 文字列
-
quotes: 引用符のリストを含む文字列
戻り値:
-
最初と最後から引用符を削除した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_string_remove_quotes (string, " 'I can't' ", "'");
/* result: "I can't" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.20. string_strip
文字列の最初と最後から文字を削除する。
プロトタイプ:
char *weechat_string_strip (const char *string, int left, int right,
const char *chars);
引数:
-
string: 文字列
-
left: 0 以外の場合は左側の文字を削除
-
right: 0 以外の場合は右側の文字を削除
-
chars: 削除する文字を含む文字列
戻り値:
-
文字を削除した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_string_strip (".abc -", 0, 1, "- ."); /* result: ".abc" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.21. string_convert_escaped_chars
WeeChat バージョン 1.0 以上で利用可。
エスケープ文字を値に変換:
-
\": 二重引用符 -
\\: バックスラッシュ -
\a: アラート (BEL) -
\b: バックスペース -
\e: エスケープ -
\f: 改ページ -
\n: 改行 -
\r: キャリッジリターン -
\t: 水平タブ -
\v: 垂直タブ -
\0ooo: 文字の 8 進数表現 (oooは 0 桁から 3 桁) -
\xhh: 文字の 16 進数表現 (hhは 1 桁から 2 桁) -
\uhhhh: ユニコード文字の 16 進数表現 (hhhhは 1 桁から 4 桁) -
\Uhhhhhhhh: ユニコード文字の 16 進数表現 (hhhhhhhhは 1 桁から 8 桁)
プロトタイプ:
char *weechat_string_convert_escaped_chars (const char *string);
引数:
-
string: 文字列
戻り値:
-
エスケープ文字を値に変換した文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str = weechat_string_convert_escaped_chars ("snowman: \\u2603");
/* str == "snowman: ☃" */
/* ... */
free (str);
|
Note
|
スクリプト API ではこの関数を利用できません。 |
3.2.22. string_mask_to_regex
マスクから正規表現を作りこれを返す、マスク用の特殊文字は
* のみ。これ以外の文字はすべてエスケープされます。
プロトタイプ:
char *weechat_string_mask_to_regex (const char *mask);
引数:
-
mask: マスク
戻り値:
-
正規表現の文字列 (使用後には必ず "free" を呼び出して領域を開放してください)
C 言語での使用例:
char *str_regex = weechat_string_mask_to_regex ("test*mask");
/* result: "test.*mask" */
/* ... */
free (str_regex);
スクリプト (Python) での使用例:
# プロトタイプ
regex = weechat.string_mask_to_regex(mask)
# 例
regex = weechat.string_mask_to_regex("test*mask") # "test.*mask"
3.2.23. string_regex_flags
WeeChat バージョン 0.3.7 以上で利用可。
フラグ以降の文字列へのポインタと正規表現をコンパイルするためのフラグ付きマスクを返す
プロトタイプ:
const char *weechat_string_regex_flags (const char *regex, int default_flags, int *flags)
引数:
-
regex: POSIX 拡張正規表現
-
default_flags: 以下の値を組み合わせたもの (
man regcompを参照):-
REG_EXTENDED
-
REG_ICASE
-
REG_NEWLINE
-
REG_NOSUB
-
-
flags: ポインタ値は正規表現中で指定されたフラグと一緒にセットされます (デフォルトのフラグ + 正規表現中で指定されたフラグ)
フラグは必ず正規表現の最初につけてください。書式: "(?eins-eins)string"。
利用可能なフラグ:
-
e: POSIX 拡張正規表現 (REG_EXTENDED)
-
i: 大文字小文字を区別しない (REG_ICASE)
-
n: 任意の文字にマッチする演算子を改行文字にマッチさせない (REG_NEWLINE)
-
s: マッチした部分文字列の位置を使わない (REG_NOSUB)
戻り値:
-
regex からフラグを除いた位置へのポインタ
C 言語での使用例:
const char *regex = "(?i)test";
int flags;
const char *ptr_regex = weechat_string_regex_flags (regex, REG_EXTENDED, &flags);
/* ptr_regex == "test", flags == REG_EXTENDED | REG_ICASE */
|
Note
|
スクリプト API ではこの関数を利用できません。 |