1/* GTK - The GIMP Toolkit
2 * Copyright (C) 2015 Takao Fujiwara <takao.fujiwara1@gmail.com>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __GTK_COMPOSETABLE_H__
19#define __GTK_COMPOSETABLE_H__
20
21#include <glib.h>
22
23
24G_BEGIN_DECLS
25
26typedef struct _GtkComposeTable GtkComposeTable;
27typedef struct _GtkComposeTableCompact GtkComposeTableCompact;
28
29/* The layout of the data is as follows:
30 *
31 * The first part of the data contains rows of length max_seq_len + 1,
32 * where the first element is the item of the sequence, and the
33 * following elements are offsets to the data for sequences that
34 * start with the first item of length 2, ..., max_seq_len.
35 *
36 * The second part of the data contains the rest of the sequence
37 * data. It does not have a fixed stride. For each sequence, we
38 * put seq[2], ..., seq[len - 1], followed by the encoded value
39 * for this sequence.
40 *
41 * The values are encoded as follows:
42 *
43 * If the value is a single Unicode character smaler than 0x8000,
44 * then we place it directly. Otherwise, we put the UTF8-encoded
45 * value in the char_data array, and use offset | 0x8000 as the
46 * encoded value.
47 */
48struct _GtkComposeTable
49{
50 guint16 *data;
51 char *char_data;
52 int max_seq_len;
53 int n_index_size;
54 int data_size;
55 int n_chars;
56 int n_sequences;
57 guint32 id;
58};
59
60GtkComposeTable * gtk_compose_table_new_with_file (const char *compose_file);
61GtkComposeTable * gtk_compose_table_parse (const char *compose_file,
62 gboolean *found_include);
63GtkComposeTable * gtk_compose_table_new_with_data (const guint16 *data,
64 int max_seq_len,
65 int n_seqs);
66
67typedef void (* GtkComposeSequenceCallback) (gunichar *sequence,
68 int len,
69 const char *value,
70 gpointer data);
71
72void gtk_compose_table_foreach (const GtkComposeTable *table,
73 GtkComposeSequenceCallback callback,
74 gpointer data);
75
76gboolean gtk_compose_table_check (const GtkComposeTable *table,
77 const guint *compose_buffer,
78 int n_compose,
79 gboolean *compose_finish,
80 gboolean *compose_match,
81 GString *output);
82
83void gtk_compose_table_get_prefix (const GtkComposeTable *table,
84 const guint *compose_buffer,
85 int n_compose,
86 int *prefix);
87
88gboolean gtk_check_algorithmically (const guint *compose_buffer,
89 int n_compose,
90 GString *output);
91
92guint32 gtk_compose_table_data_hash (const guint16 *data,
93 int max_seq_len,
94 int n_seqs);
95
96G_END_DECLS
97
98#endif /* __GTK_COMPOSETABLE_H__ */
99

source code of gtk/gtk/gtkcomposetable.h