Example #1
0
void
rmodifier_config_modifier_delete_cb (void *data, struct t_config_option *option)
{
    struct t_rmodifier *ptr_rmodifier;

    /* make C compiler happy */
    (void) data;

    ptr_rmodifier = rmodifier_search (weechat_config_option_get_pointer (option,
                                                                         "name"));
    if (ptr_rmodifier)
        rmodifier_free (ptr_rmodifier);
}
Example #2
0
int
rmodifier_config_modifier_create_option_cb (void *data,
                                            struct t_config_file *config_file,
                                            struct t_config_section *section,
                                            const char *option_name,
                                            const char *value)
{
    struct t_rmodifier *ptr_rmodifier;
    int rc;

    /* make C compiler happy */
    (void) data;
    (void) config_file;
    (void) section;

    /* create rmodifier */
    ptr_rmodifier = rmodifier_search (option_name);
    if (ptr_rmodifier)
        rmodifier_free (ptr_rmodifier);
    if (value && value[0])
    {
        ptr_rmodifier = rmodifier_new_with_string (option_name, value);
        if (ptr_rmodifier)
        {
            rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE;
            /* create option */
            rmodifier_config_modifier_new_option (ptr_rmodifier->name,
                                                  ptr_rmodifier->modifiers,
                                                  ptr_rmodifier->str_regex,
                                                  ptr_rmodifier->groups);
        }
        else
            rc = WEECHAT_CONFIG_OPTION_SET_ERROR;
    }
    else
        rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE;

    if (rc == WEECHAT_CONFIG_OPTION_SET_ERROR)
    {
        weechat_printf (NULL,
                        _("%s%s: error creating rmodifier "
                          "\"%s\" => \"%s\""),
                        weechat_prefix ("error"), RMODIFIER_PLUGIN_NAME,
                        option_name, value);
    }

    return rc;
}
Example #3
0
struct t_rmodifier *
rmodifier_new (const char *name, const char *modifiers, const char *str_regex,
               const char *groups)
{
    struct t_rmodifier *new_rmodifier, *ptr_rmodifier;
    regex_t *regex;

    if (!name || !name[0] || !modifiers || !modifiers[0]
        || !str_regex || !str_regex[0])
    {
        return NULL;
    }

    regex = malloc (sizeof (*regex));
    if (!regex)
        return NULL;

    if (weechat_string_regcomp (regex, str_regex,
                                REG_EXTENDED | REG_ICASE) != 0)
    {
        weechat_printf (NULL,
                        _("%s%s: error compiling regular expression \"%s\""),
                        weechat_prefix ("error"), RMODIFIER_PLUGIN_NAME,
                        str_regex);
        free (regex);
        return NULL;
    }

    ptr_rmodifier = rmodifier_search (name);
    if (ptr_rmodifier)
        rmodifier_free (ptr_rmodifier);

    new_rmodifier = malloc (sizeof (*new_rmodifier));
    if (new_rmodifier)
    {
        new_rmodifier->name = strdup (name);
        new_rmodifier->hooks = NULL;
        new_rmodifier->modifiers = strdup (modifiers);
        new_rmodifier->str_regex = strdup (str_regex);
        new_rmodifier->regex = regex;
        new_rmodifier->groups = strdup ((groups) ? groups : "");

        /* create modifiers */
        rmodifier_hook_modifiers (new_rmodifier);

        if (rmodifier_list)
        {
            /* add rmodifier to end of list */
            new_rmodifier->prev_rmodifier = last_rmodifier;
            new_rmodifier->next_rmodifier = NULL;
            last_rmodifier->next_rmodifier = new_rmodifier;
            last_rmodifier = new_rmodifier;
        }
        else
        {
            new_rmodifier->prev_rmodifier = NULL;
            new_rmodifier->next_rmodifier = NULL;
            rmodifier_list = new_rmodifier;
            last_rmodifier = new_rmodifier;
        }

        rmodifier_count++;
    }

    return new_rmodifier;
}