weechat/src/plugins/spell/spell-bar-item.c

168 lines
4.8 KiB
C

/*
* spell-bar-item.c - bar items for spell checker plugin
*
* Copyright (C) 2012 Nils Görs <weechatter@arcor.de>
* Copyright (C) 2012-2019 Sébastien Helleu <flashcode@flashtux.org>
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../weechat-plugin.h"
#include "spell.h"
#include "spell-config.h"
/*
* Returns content of bar item "spell_dict": spell dictionary used on current
* buffer.
*/
char *
spell_bar_item_dict (const void *pointer, void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
struct t_gui_buffer *buffer,
struct t_hashtable *extra_info)
{
const char *dict_list;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) item;
(void) window;
(void) extra_info;
if (!buffer)
return NULL;
dict_list = spell_get_dict (buffer);
return (dict_list) ? strdup (dict_list) : NULL;
}
/*
* Returns content of bar item "spell_suggest": spell checker suggestions.
*/
char *
spell_bar_item_suggest (const void *pointer, void *data,
struct t_gui_bar_item *item,
struct t_gui_window *window,
struct t_gui_buffer *buffer,
struct t_hashtable *extra_info)
{
const char *ptr_suggestions, *pos;
char **suggestions, **suggestions2, **str_suggest;
int i, j, num_suggestions, num_suggestions2;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) item;
(void) window;
(void) extra_info;
if (!spell_enabled)
return NULL;
if (!buffer)
return NULL;
ptr_suggestions = weechat_buffer_get_string (buffer,
"localvar_spell_suggest");
if (!ptr_suggestions)
return NULL;
pos = strchr (ptr_suggestions, ':');
if (pos)
pos++;
else
pos = ptr_suggestions;
str_suggest = weechat_string_dyn_alloc (256);
if (!str_suggest)
return NULL;
suggestions = weechat_string_split (pos, "/", 0, 0, &num_suggestions);
if (!suggestions)
goto end;
for (i = 0; i < num_suggestions; i++)
{
if (i > 0)
{
weechat_string_dyn_concat (
str_suggest,
weechat_color (
weechat_config_string (
spell_config_color_suggestion_delimiter_dict)));
weechat_string_dyn_concat (
str_suggest,
weechat_config_string (
spell_config_look_suggestion_delimiter_dict));
}
suggestions2 = weechat_string_split (suggestions[i], ",", 0, 0,
&num_suggestions2);
if (suggestions2)
{
for (j = 0; j < num_suggestions2; j++)
{
if (j > 0)
{
weechat_string_dyn_concat (
str_suggest,
weechat_color (
weechat_config_string (
spell_config_color_suggestion_delimiter_word)));
weechat_string_dyn_concat (
str_suggest,
weechat_config_string (
spell_config_look_suggestion_delimiter_word));
}
weechat_string_dyn_concat (
str_suggest,
weechat_color (
weechat_config_string (
spell_config_color_suggestion)));
weechat_string_dyn_concat (str_suggest, suggestions2[j]);
}
weechat_string_free_split (suggestions2);
}
}
weechat_string_free_split (suggestions);
end:
return weechat_string_dyn_free (str_suggest, 0);
}
/*
* Initializes spell bar items.
*/
void
spell_bar_item_init ()
{
weechat_bar_item_new ("spell_dict",
&spell_bar_item_dict, NULL, NULL);
weechat_bar_item_new ("spell_suggest",
&spell_bar_item_suggest, NULL, NULL);
}