1 /*
2     Stuphead: (C) 2000,2001 Grigroy Bakunov, Sergey Pinaev
3  */
4 /* gtkaspell - a spell-checking addon for GtkText
5  * Copyright (c) 2001-2002 Melvin Hadasht
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 3 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 /*
22  * Adapted by the Claws Mail Team.
23  */
24 
25 /*
26  *  Adapted for pspell (c) 2001-2002 Melvin Hadasht
27  *  Adapted for GNU/aspell (c) 2002 Melvin Hadasht
28  *
29  */
30 
31 #ifndef __GTKENCHANT_H__
32 #define __GTKENCHANT_H__
33 
34 #ifdef HAVE_CONFIG_H
35 #include "claws-features.h"
36 #endif
37 
38 #ifdef USE_ENCHANT
39 
40 #include <gtk/gtk.h>
41 #include <enchant.h>
42 
43 #define GTKASPELLWORDSIZE 1024
44 
45 typedef struct _Dictionary {
46 	gchar *fullname;
47 	gchar *dictname;
48 } Dictionary;
49 
50 typedef struct _GtkAspeller {
51 	Dictionary	*dictionary;
52 	EnchantBroker 	*broker;
53 	EnchantDict 	*speller;
54 } GtkAspeller;
55 
56 typedef void (*ContCheckFunc) (gpointer *gtkaspell);
57 
58 struct _WidgetContext
59 {
60 	void		(*set_position)(gpointer data, gint pos);
61 	void		(*set_menu_pos)(GtkMenu *menu, gint *x, gint *y,
62 				gboolean *push_in, gpointer user_data);
63 	gboolean	(*find_misspelled)(gpointer data, gboolean forward);
64 	gboolean	(*check_word)(gpointer data);
65 	void		(*replace_word)(gpointer data, const gchar *newword);
66 	gpointer	*data;
67 };
68 
69 typedef struct _WidgetContext WidgetContext;
70 
71 struct _GtkAspell
72 {
73 	GtkAspeller	*gtkaspeller;
74 	GtkAspeller	*alternate_speller;
75 	gchar 		 theword[GTKASPELLWORDSIZE];
76 	gint  		 start_pos;
77 	gint  		 end_pos;
78         gint 		 orig_pos;
79 	gint		 end_check_pos;
80 	gboolean	 misspelled;
81 	gboolean	 check_while_typing;
82 	gboolean	 recheck_when_changing_dict;
83 	gboolean	 use_alternate;
84 	gboolean	 use_both_dicts;
85 
86 	ContCheckFunc 	 continue_check;
87 
88 	GtkWidget	*replace_entry;
89 	GtkWidget 	*parent_window;
90 
91 	gint		 max_sug;
92 	GList		*suggestions_list;
93 
94 	GtkTextView	*gtktext;
95 	GdkColor 	 highlight;
96 	GtkAccelGroup	*accel_group;
97 	void		(*dict_changed_cb)(void *data);
98 	void 		(*menu_changed_cb)(void *data);
99 	void 		*menu_changed_data;
100 
101 	WidgetContext	ctx;
102 };
103 
104 typedef struct _GtkAspell GtkAspell;
105 
106 
107 void		gtkaspell_checkers_init		(void);
108 
109 void		gtkaspell_checkers_quit		(void);
110 
111 const char * 	gtkaspell_checkers_strerror	(void);
112 
113 void 		gtkaspell_checkers_reset_error	(void);
114 
115 GtkAspell*	gtkaspell_new			(const gchar *dictionary,
116 						 const gchar *alt_dictionary,
117 						 const gchar *encoding,
118 						 gint  misspelled_color,
119 						 gboolean check_while_typing,
120 						 gboolean recheck_when_changing_dict,
121 						 gboolean use_alternate,
122 						 gboolean use_both_dicts,
123 						 GtkTextView *gtktext,
124 						 GtkWindow *parent_win,
125 						 void (*dict_changed_cd)(void *data),
126 						 void (*spell_menu_cb)(void *data),
127 						 void *data);
128 
129 void 		gtkaspell_delete		(GtkAspell *gtkaspell);
130 
131 
132 gboolean	gtkaspell_change_dict		(GtkAspell *gtkaspell,
133     						 const gchar* dictionary,
134 							 gboolean always_set_alt_dict);
135 
136 gboolean	gtkaspell_change_alt_dict	(GtkAspell *gtkaspell,
137     						 const gchar* alt_dictionary);
138 void		gtkaspell_use_alternate_dict	(GtkAspell *gtkaspell);
139 
140 gboolean 	gtkaspell_check_next_prev	(GtkAspell *gtkaspell,
141 						 gboolean forward);
142 void 		gtkaspell_check_forwards_go	(GtkAspell *gtkaspell);
143 void 		gtkaspell_check_backwards	(GtkAspell *gtkaspell);
144 
145 void 		gtkaspell_check_all		(GtkAspell *gtkaspell);
146 void 		gtkaspell_highlight_all		(GtkAspell *gtkaspell);
147 
148 GtkWidget*	gtkaspell_dictionary_combo_new	(const gboolean refresh);
149 
150 GtkTreeModel*	gtkaspell_dictionary_store_new	(void);
151 GtkTreeModel*	gtkaspell_dictionary_store_new_with_refresh
152 							(gboolean     refresh);
153 
154 gchar*		gtkaspell_get_dictionary_menu_active_item
155 							(GtkComboBox *combo);
156 gint		gtkaspell_set_dictionary_menu_active_item
157 							(GtkComboBox *combo,
158 							 const gchar *dictionary);
159 
160 GSList*		gtkaspell_make_config_menu		(GtkAspell	*gtkaspell);
161 
162 gchar*		gtkaspell_get_default_dictionary	(GtkAspell *gtkaspell);
163 
164 void		gtkaspell_make_context_menu		(GtkMenu	*menu,
165 							 GtkAspell	*gtkaspell);
166 
167 int 		gtkaspell_misspelled_test		(GtkAspell *gtkaspell,
168 							 char *word);
169 void		gtkaspell_dict_changed			(GtkAspell *gtkaspell);
170 void		gtkaspell_context_set			(GtkAspell *gtkaspell);
171 void		gtkaspell_free_suggestions_list		(GtkAspell *gtkaspell);
172 void		gtkaspell_block_check			(GtkAspell *gtkaspell);
173 void		gtkaspell_unblock_check			(GtkAspell *gtkaspell);
174 
175 
176 #endif /* USE_ENCHANT */
177 #endif /* __GTKENCHANT_H__ */
178