summaryrefslogtreecommitdiff
path: root/src/plugins/scripts/ruby
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2008-03-22 23:36:12 +0100
committerSebastien Helleu <flashcode@flashtux.org>2008-03-22 23:36:12 +0100
commit61ca92972886cd7a9bc301ae7e23d6dde74920bc (patch)
tree7b69905a86b095f4fe6dffaa5a86ae6a0725c125 /src/plugins/scripts/ruby
parent8c4dc57d8e5a6b1f9f239bdcbf30dd07480993be (diff)
downloadweechat-61ca92972886cd7a9bc301ae7e23d6dde74920bc.zip
Added tags for lines and custom filtering by tags or regex (task #7674), fixed many memory leaks
Diffstat (limited to 'src/plugins/scripts/ruby')
-rw-r--r--src/plugins/scripts/ruby/weechat-ruby-api.c91
-rw-r--r--src/plugins/scripts/ruby/weechat-ruby.c26
2 files changed, 87 insertions, 30 deletions
diff --git a/src/plugins/scripts/ruby/weechat-ruby-api.c b/src/plugins/scripts/ruby/weechat-ruby-api.c
index 46c1c8db0..bc727e142 100644
--- a/src/plugins/scripts/ruby/weechat-ruby-api.c
+++ b/src/plugins/scripts/ruby/weechat-ruby-api.c
@@ -2244,22 +2244,27 @@ weechat_ruby_api_hook_fd (VALUE class, VALUE fd, VALUE read, VALUE write,
int
weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer,
- time_t date, char *prefix, char *message)
+ time_t date, int tags_count, char **tags,
+ char *prefix, char *message)
{
struct t_script_callback *script_callback;
- char *ruby_argv[5];
+ char *ruby_argv[6];
static char timebuffer[64];
int *rc, ret;
+ /* make C compiler happy */
+ (void) tags_count;
+
script_callback = (struct t_script_callback *)data;
-
+
snprintf (timebuffer, sizeof (timebuffer) - 1, "%ld", date);
ruby_argv[0] = script_ptr2str (buffer);
ruby_argv[1] = timebuffer;
- ruby_argv[2] = prefix;
- ruby_argv[3] = message;
- ruby_argv[4] = NULL;
+ ruby_argv[2] = weechat_string_build_with_exploded (tags, ",");
+ ruby_argv[3] = prefix;
+ ruby_argv[4] = message;
+ ruby_argv[5] = NULL;
rc = (int *) weechat_ruby_exec (script_callback->script,
WEECHAT_SCRIPT_EXEC_INT,
@@ -2275,6 +2280,8 @@ weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer,
}
if (ruby_argv[0])
free (ruby_argv[0]);
+ if (ruby_argv[2])
+ free (ruby_argv[2]);
return ret;
}
@@ -2284,10 +2291,10 @@ weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer,
*/
static VALUE
-weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE message,
- VALUE strip_colors, VALUE function)
+weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE tags,
+ VALUE message, VALUE strip_colors, VALUE function)
{
- char *c_buffer, *c_message, *c_function, *result;
+ char *c_buffer, *c_tags, *c_message, *c_function, *result;
int c_strip_colors;
VALUE return_value;
@@ -2301,23 +2308,26 @@ weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE message,
}
c_buffer = NULL;
+ c_tags = NULL;
c_message = NULL;
c_strip_colors = 0;
c_function = NULL;
- if (NIL_P (buffer) || NIL_P (message) || NIL_P (strip_colors)
- || NIL_P (function))
+ if (NIL_P (buffer) || NIL_P (tags) || NIL_P (message)
+ || NIL_P (strip_colors) || NIL_P (function))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_print");
RUBY_RETURN_EMPTY;
}
Check_Type (buffer, T_STRING);
+ Check_Type (tags, T_STRING);
Check_Type (message, T_STRING);
Check_Type (strip_colors, T_FIXNUM);
Check_Type (function, T_STRING);
c_buffer = STR2CSTR (buffer);
+ c_tags = STR2CSTR (tags);
c_message = STR2CSTR (message);
c_strip_colors = FIX2INT (strip_colors);
c_function = STR2CSTR (function);
@@ -2325,6 +2335,7 @@ weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE message,
result = script_ptr2str (script_api_hook_print (weechat_ruby_plugin,
ruby_current_script,
script_str2ptr (c_buffer),
+ c_tags,
c_message,
c_strip_colors,
&weechat_ruby_api_hook_print_cb,
@@ -3034,11 +3045,11 @@ weechat_ruby_api_buffer_close (VALUE class, VALUE buffer,
}
/*
- * weechat_ruby_api_buffer_get: get a buffer property
+ * weechat_ruby_api_buffer_get_string: get a buffer property as string
*/
static VALUE
-weechat_ruby_api_buffer_get (VALUE class, VALUE buffer, VALUE property)
+weechat_ruby_api_buffer_get_string (VALUE class, VALUE buffer, VALUE property)
{
char *c_buffer, *c_property, *value;
@@ -3047,13 +3058,13 @@ weechat_ruby_api_buffer_get (VALUE class, VALUE buffer, VALUE property)
if (!ruby_current_script)
{
- WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get");
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_string");
RUBY_RETURN_EMPTY;
}
if (NIL_P (buffer) || NIL_P (property))
{
- WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get");
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_string");
RUBY_RETURN_EMPTY;
}
@@ -3063,13 +3074,50 @@ weechat_ruby_api_buffer_get (VALUE class, VALUE buffer, VALUE property)
c_buffer = STR2CSTR (buffer);
c_property = STR2CSTR (property);
- value = weechat_buffer_get (script_str2ptr (c_buffer),
- c_property);
+ value = weechat_buffer_get_string (script_str2ptr (c_buffer),
+ c_property);
RUBY_RETURN_STRING(value);
}
/*
+ * weechat_ruby_api_buffer_get_pointer: get a buffer property as pointer
+ */
+
+static VALUE
+weechat_ruby_api_buffer_get_pointer (VALUE class, VALUE buffer, VALUE property)
+{
+ char *c_buffer, *c_property, *value;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_pointer");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (buffer) || NIL_P (property))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_pointer");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (buffer, T_STRING);
+ Check_Type (property, T_STRING);
+
+ c_buffer = STR2CSTR (buffer);
+ c_property = STR2CSTR (property);
+
+ value = script_ptr2str (weechat_buffer_get_string (script_str2ptr (c_buffer),
+ c_property));
+
+ RUBY_RETURN_STRING_FREE(value);
+}
+
+/*
* weechat_ruby_api_buffer_set: set a buffer property
*/
@@ -4171,10 +4219,6 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
{
rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK", INT2NUM(WEECHAT_RC_OK));
rb_define_const(ruby_mWeechat, "WEECHAT_RC_ERROR", INT2NUM(WEECHAT_RC_ERROR));
- rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_IGNORE_WEECHAT", INT2NUM(WEECHAT_RC_OK_IGNORE_WEECHAT));
- rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_IGNORE_PLUGINS", INT2NUM(WEECHAT_RC_OK_IGNORE_PLUGINS));
- rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_IGNORE_ALL", INT2NUM(WEECHAT_RC_OK_IGNORE_ALL));
- rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_WITH_HIGHLIGHT", INT2NUM(WEECHAT_RC_OK_WITH_HIGHLIGHT));
rb_define_const(ruby_mWeechat, "WEECHAT_LIST_POS_SORT", rb_str_new2(WEECHAT_LIST_POS_SORT));
rb_define_const(ruby_mWeechat, "WEECHAT_LIST_POS_BEGINNING", rb_str_new2(WEECHAT_LIST_POS_BEGINNING));
rb_define_const(ruby_mWeechat, "WEECHAT_LIST_POS_END", rb_str_new2(WEECHAT_LIST_POS_END));
@@ -4231,7 +4275,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
rb_define_module_function (ruby_mWeechat, "hook_command", &weechat_ruby_api_hook_command, 6);
rb_define_module_function (ruby_mWeechat, "hook_timer", &weechat_ruby_api_hook_timer, 4);
rb_define_module_function (ruby_mWeechat, "hook_fd", &weechat_ruby_api_hook_fd, 5);
- rb_define_module_function (ruby_mWeechat, "hook_print", &weechat_ruby_api_hook_print, 4);
+ rb_define_module_function (ruby_mWeechat, "hook_print", &weechat_ruby_api_hook_print, 5);
rb_define_module_function (ruby_mWeechat, "hook_signal", &weechat_ruby_api_hook_signal, 2);
rb_define_module_function (ruby_mWeechat, "hook_signal_send", &weechat_ruby_api_hook_signal_send, 3);
rb_define_module_function (ruby_mWeechat, "hook_config", &weechat_ruby_api_hook_config, 3);
@@ -4243,7 +4287,8 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
rb_define_module_function (ruby_mWeechat, "buffer_new", &weechat_ruby_api_buffer_new, 4);
rb_define_module_function (ruby_mWeechat, "buffer_search", &weechat_ruby_api_buffer_search, 2);
rb_define_module_function (ruby_mWeechat, "buffer_close", &weechat_ruby_api_buffer_close, 1);
- rb_define_module_function (ruby_mWeechat, "buffer_get", &weechat_ruby_api_buffer_get, 2);
+ rb_define_module_function (ruby_mWeechat, "buffer_get_string", &weechat_ruby_api_buffer_get_string, 2);
+ rb_define_module_function (ruby_mWeechat, "buffer_get_pointer", &weechat_ruby_api_buffer_get_pointer, 2);
rb_define_module_function (ruby_mWeechat, "buffer_set", &weechat_ruby_api_buffer_set, 3);
rb_define_module_function (ruby_mWeechat, "nicklist_add_group", &weechat_ruby_api_nicklist_add_group, 5);
rb_define_module_function (ruby_mWeechat, "nicklist_search_group", &weechat_ruby_api_nicklist_search_group, 3);
diff --git a/src/plugins/scripts/ruby/weechat-ruby.c b/src/plugins/scripts/ruby/weechat-ruby.c
index b53f94dd0..d351ebadc 100644
--- a/src/plugins/scripts/ruby/weechat-ruby.c
+++ b/src/plugins/scripts/ruby/weechat-ruby.c
@@ -124,13 +124,25 @@ weechat_ruby_exec (struct t_plugin_script *script,
{
if (argv[4])
{
- rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function),
- &ruby_error, 5,
- rb_str_new2(argv[0]),
- rb_str_new2(argv[1]),
- rb_str_new2(argv[2]),
- rb_str_new2(argv[3]),
- rb_str_new2(argv[4]));
+ if (argv[5])
+ {
+ rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function),
+ &ruby_error, 6,
+ rb_str_new2(argv[0]),
+ rb_str_new2(argv[1]),
+ rb_str_new2(argv[2]),
+ rb_str_new2(argv[3]),
+ rb_str_new2(argv[4]),
+ rb_str_new2(argv[5]));
+ }
+ else
+ rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function),
+ &ruby_error, 5,
+ rb_str_new2(argv[0]),
+ rb_str_new2(argv[1]),
+ rb_str_new2(argv[2]),
+ rb_str_new2(argv[3]),
+ rb_str_new2(argv[4]));
}
else
rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function),