1 /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
2 /* vim:set et sts=4: */
3 /* bus - The Input Bus
4  * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
5  * Copyright (C) 2011-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
6  * Copyright (C) 2008-2018 Red Hat, Inc.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
21  * USA
22  */
23 
24 #if !defined (__IBUS_H_INSIDE__) && !defined (IBUS_COMPILATION)
25 #error "Only <ibus.h> can be included directly"
26 #endif
27 
28 #ifndef __IBUS_ENGINE_DESC_H_
29 #define __IBUS_ENGINE_DESC_H_
30 
31 /**
32  * SECTION: ibusenginedesc
33  * @short_description:  Input method engine description data.
34  * @title: IBusEngineDesc
35  * @stability: Stable
36  *
37  * An IBusEngineDesc stores description data of IBusEngine.
38  * The description data can either be passed to ibus_engine_desc_new(),
39  * or loaded from an XML node through ibus_engine_desc_new_from_xml_node()
40  * to construct IBusEngineDesc.
41  *
42  * However, the recommended way to load engine description data is
43  * using ibus_component_new_from_file() to load a component file,
44  * which also includes engine description data.
45  *
46  * see_also: #IBusComponent, #IBusEngine
47  *
48  */
49 
50 #include "ibusserializable.h"
51 #include "ibusxml.h"
52 
53 /*
54  * Type macros.
55  */
56 
57 /* define GOBJECT macros */
58 #define IBUS_TYPE_ENGINE_DESC             \
59     (ibus_engine_desc_get_type ())
60 #define IBUS_ENGINE_DESC(obj)             \
61     (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_ENGINE_DESC, IBusEngineDesc))
62 #define IBUS_ENGINE_DESC_CLASS(klass)     \
63     (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_ENGINE_DESC, IBusEngineDescClass))
64 #define IBUS_IS_ENGINE_DESC(obj)          \
65     (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_ENGINE_DESC))
66 #define IBUS_IS_ENGINE_DESC_CLASS(klass)  \
67     (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_ENGINE_DESC))
68 #define IBUS_ENGINE_DESC_GET_CLASS(obj)   \
69     (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_ENGINE_DESC, IBusEngineDescClass))
70 
71 G_BEGIN_DECLS
72 
73 typedef struct _IBusEngineDesc IBusEngineDesc;
74 typedef struct _IBusEngineDescPrivate IBusEngineDescPrivate;
75 typedef struct _IBusEngineDescClass IBusEngineDescClass;
76 
77 /**
78  * IBusEngineDesc:
79  *
80  * Input method engine description data.
81  * You can get extended values with g_object_get_properties.
82  */
83 struct _IBusEngineDesc {
84     IBusSerializable parent;
85     /* instance members */
86 
87     /*< public >*/
88     /*< private >*/
89     IBusEngineDescPrivate *priv;
90 };
91 
92 struct _IBusEngineDescClass {
93     IBusSerializableClass parent;
94     /* class members */
95 };
96 
97 GType            ibus_engine_desc_get_type      (void);
98 
99 /**
100  * ibus_engine_desc_new:
101  * @name: Name of the engine.
102  * @longname: Long name of the input method engine.
103  * @description: Input method engine description.
104  * @language: Language (e.g. zh, jp) supported by this input method engine.
105  * @license: License of the input method engine.
106  * @author: Author of the input method engine.
107  * @icon: Icon file of this engine.
108  * @layout: Keyboard layout
109  *
110  * Creates a new #IBusEngineDesc.
111  * If layout is "default", the engine inherits the current layout and
112  * does not change the layout. The layouts "default" and "" are same.
113  * E.g. If you switch JP XKB engine and an input method engine (IME),
114  * the IME inherits the JP layout.
115  *
116  * Returns: A newly allocated IBusEngineDesc.
117  */
118 IBusEngineDesc  *ibus_engine_desc_new           (const gchar    *name,
119                                                  const gchar    *longname,
120                                                  const gchar    *description,
121                                                  const gchar    *language,
122                                                  const gchar    *license,
123                                                  const gchar    *author,
124                                                  const gchar    *icon,
125                                                  const gchar    *layout);
126 
127 /**
128  * ibus_engine_desc_new_varargs:
129  * @first_property_name: Name of the first property.
130  * @...: the NULL-terminated arguments of the properties and values.
131  *
132  * Creates a new #IBusEngineDesc.
133  * ibus_engine_desc_new_varargs() supports the va_list format.
134  * name property is required. e.g.
135  * ibus_engine_desc_new_varargs("name", "ibus-foo", "language", "us", NULL)
136  * If layout is "default", the engine inherits the current layout and
137  * does not change the layout. The layouts "default" and "" are same.
138  * E.g. If you switch JP XKB engine and an input method engine (IME),
139  * the IME inherits the JP layout.
140  *
141  * Returns: A newly allocated IBusEngineDesc.
142  */
143 IBusEngineDesc  *ibus_engine_desc_new_varargs   (const gchar *first_property_name,
144                                                  ...);
145 
146 
147 /**
148  * ibus_engine_desc_new_from_xml_node:
149  * @node: An XML node
150  *
151  * Creates a new IBusEngineDesc from an XML node.
152  * <note><para>This function is called by ibus_component_new_from_file(),
153  *  so developers normally do not need to call it directly.
154  * </para></note>
155  *
156  * Returns: A newly allocated IBusEngineDesc that contains description from
157  * @node.
158  */
159 IBusEngineDesc  *ibus_engine_desc_new_from_xml_node
160                                                 (XMLNode        *node);
161 /**
162  * ibus_engine_desc_get_name:
163  * @info: An IBusEngineDesc
164  *
165  * Gets the name property in IBusEngineDesc. It should not be freed.
166  *
167  * Returns: name property in IBusEngineDesc
168  */
169 const gchar     *ibus_engine_desc_get_name      (IBusEngineDesc *info);
170 
171 /**
172  * ibus_engine_desc_get_longname:
173  * @info: An IBusEngineDesc
174  *
175  * Gets the longname property in IBusEngineDesc. It should not be freed.
176  *
177  * Returns: longname property in IBusEngineDesc
178  */
179 const gchar     *ibus_engine_desc_get_longname  (IBusEngineDesc *info);
180 
181 /**
182  * ibus_engine_desc_get_description:
183  * @info: An IBusEngineDesc
184  *
185  * Gets the description property in IBusEngineDesc. It should not be freed.
186  *
187  * Returns: description property in IBusEngineDesc
188  */
189 const gchar     *ibus_engine_desc_get_description
190                                                 (IBusEngineDesc *info);
191 
192 /**
193  * ibus_engine_desc_get_language:
194  * @info: An IBusEngineDesc
195  *
196  * Gets the language property in IBusEngineDesc. It should not be freed.
197  *
198  * Returns: language property in IBusEngineDesc
199  */
200 const gchar     *ibus_engine_desc_get_language  (IBusEngineDesc *info);
201 
202 
203 /**
204  * ibus_engine_desc_get_license:
205  * @info: An IBusEngineDesc
206  *
207  * Gets the license property in IBusEngineDesc. It should not be freed.
208  *
209  * Returns: license property in IBusEngineDesc
210  */
211 const gchar     *ibus_engine_desc_get_license   (IBusEngineDesc *info);
212 
213 /**
214  * ibus_engine_desc_get_author:
215  * @info: An IBusEngineDesc
216  *
217  * Gets the author property in IBusEngineDesc. It should not be freed.
218  *
219  * Returns: author property in IBusEngineDesc
220  */
221 const gchar     *ibus_engine_desc_get_author    (IBusEngineDesc *info);
222 
223 /**
224  * ibus_engine_desc_get_icon:
225  * @info: An IBusEngineDesc
226  *
227  * Gets the icon property in IBusEngineDesc. It should not be freed.
228  *
229  * Returns: icon property in IBusEngineDesc
230  */
231 const gchar     *ibus_engine_desc_get_icon      (IBusEngineDesc *info);
232 
233 /**
234  * ibus_engine_desc_get_layout:
235  * @info: An IBusEngineDesc
236  *
237  * Gets the layout property in IBusEngineDesc. It should not be freed.
238  *
239  * Returns: layout property in IBusEngineDesc
240  */
241 const gchar     *ibus_engine_desc_get_layout    (IBusEngineDesc *info);
242 
243 /**
244  * ibus_engine_desc_get_layout_variant:
245  * @info: An IBusEngineDesc
246  *
247  * Gets the keyboard variant property in IBusEngineDesc. It should not be freed.
248  *
249  * Returns: keyboard variant property in IBusEngineDesc
250  */
251 const gchar     *ibus_engine_desc_get_layout_variant
252                                                 (IBusEngineDesc *info);
253 
254 /**
255  * ibus_engine_desc_get_layout_option:
256  * @info: An IBusEngineDesc
257  *
258  * Gets the keyboard option property in IBusEngineDesc. It should not be freed.
259  *
260  * Returns: keyboard option property in IBusEngineDesc
261  */
262 const gchar     *ibus_engine_desc_get_layout_option
263                                                 (IBusEngineDesc *info);
264 
265 /**
266  * ibus_engine_desc_get_rank:
267  * @info: An IBusEngineDesc
268  *
269  * Gets the rank property in IBusEngineDesc.
270  *
271  * Returns: rank property in IBusEngineDesc
272  */
273 guint            ibus_engine_desc_get_rank      (IBusEngineDesc *info);
274 
275 /**
276  * ibus_engine_desc_get_hotkeys:
277  * @info: An IBusEngineDesc
278  *
279  * Gets the hotkeys property in IBusEngineDesc. It should not be freed.
280  *
281  * Returns: hotkeys property in IBusEngineDesc
282  */
283 const gchar     *ibus_engine_desc_get_hotkeys   (IBusEngineDesc *info);
284 
285 /**
286  * ibus_engine_desc_get_symbol:
287  * @info: An IBusEngineDesc
288  *
289  * Gets the symbol property in IBusEngineDesc. It should not be freed.
290  *
291  * Returns: symbol property in IBusEngineDesc
292  */
293 const gchar     *ibus_engine_desc_get_symbol    (IBusEngineDesc *info);
294 
295 /**
296  * ibus_engine_desc_get_setup:
297  * @info: An IBusEngineDesc
298  *
299  * Gets the setup property in IBusEngineDesc. It should not be freed.
300  *
301  * Returns: setup property in IBusEngineDesc
302  */
303 const gchar     *ibus_engine_desc_get_setup     (IBusEngineDesc *info);
304 
305 /**
306  * ibus_engine_desc_get_version:
307  * @info: An IBusEngineDesc
308  *
309  * Gets the version property in IBusEngineDesc. It should not be freed.
310  *
311  * Returns: version in IBusEngineDesc
312  */
313 const gchar     *ibus_engine_desc_get_version   (IBusEngineDesc *info);
314 
315 /**
316  * ibus_engine_desc_get_textdomain:
317  * @info: An IBusEngineDesc
318  *
319  * Gets the textdomain property in IBusEngineDesc. It should not be freed.
320  *
321  * Returns: textdomain in IBusEngineDesc
322  */
323 const gchar     *ibus_engine_desc_get_textdomain
324                                                 (IBusEngineDesc *info);
325 
326 /**
327  * ibus_engine_desc_get_icon_prop_key:
328  * @info: An IBusEngineDesc
329  *
330  * Gets the key of IBusProperty to load the panel icon dynamically
331  * in IBusEngineDesc. It should not be freed.
332  *
333  * Returns: IBusProperty.key for dynamic panel icon in IBusEngineDesc
334  */
335 const gchar     *ibus_engine_desc_get_icon_prop_key
336                                                 (IBusEngineDesc *info);
337 
338 /**
339  * ibus_engine_desc_output:
340  * @info: An IBusEngineDesc
341  * @output: XML-formatted Input method engine description.
342  * @indent: Number of indent (showed as 4 spaces).
343  *
344  * Output XML-formatted input method engine description.
345  * The result will be append to GString specified in @output.
346  */
347 void             ibus_engine_desc_output        (IBusEngineDesc *info,
348                                                  GString        *output,
349                                                  gint            indent);
350 G_END_DECLS
351 #endif
352