fix google #1495
[platform/upstream/ibus-hangul.git] / src / ustring.c
1 /* ibus-hangul - korean input method engine for IBus
2  * This file is from Korean XIM Nabi.
3  */
4
5 /* Nabi - X Input Method server for hangul
6  * Copyright (C) 2008 Choe Hwanjin
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program 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
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
21  */
22
23 #include "ustring.h"
24
25 UString*
26 ustring_new()
27 {
28     return g_array_new(TRUE, TRUE, sizeof(ucschar));
29 }
30
31 UString*
32 ustring_dup(const UString* str)
33 {
34     UString* dup;
35     dup = ustring_new();
36     ustring_append(dup, str);
37     return dup;
38 }
39
40 void
41 ustring_delete(UString* str)
42 {
43     g_array_free(str, TRUE);
44 }
45
46 void
47 ustring_clear(UString* str)
48 {
49     if (str->len > 0)
50         g_array_remove_range(str, 0, str->len);
51 }
52
53 UString*
54 ustring_erase(UString* str, guint pos, guint len)
55 {
56     if (len > 0)
57         return g_array_remove_range(str, pos, len);
58     else
59         return str;
60 }
61
62 ucschar*
63 ustring_begin(UString* str)
64 {
65     return (ucschar*)str->data;
66 }
67
68 ucschar*
69 ustring_end(UString* str)
70 {
71     return &g_array_index(str, ucschar, str->len);
72 }
73
74 guint
75 ustring_length(const UString* str)
76 {
77     return str->len;
78 }
79
80 UString*
81 ustring_append(UString* str, const UString* s)
82 {
83     return g_array_append_vals(str, s->data, s->len);
84 }
85
86 UString*
87 ustring_append_ucs4(UString* str, const ucschar* s, gint len)
88 {
89     if (len < 0) {
90         const ucschar*p = s;
91         while (*p != 0)
92             p++;
93         len = p - s;
94     }
95
96     return g_array_append_vals(str, s, len);
97 }
98
99 UString*
100 ustring_append_utf8(UString* str, const char* utf8)
101 {
102     while (*utf8 != '\0') {
103         ucschar c = g_utf8_get_char(utf8);
104         g_array_append_vals(str, &c, 1);
105         utf8 = g_utf8_next_char(utf8);
106     }
107     return str;
108 }
109
110 gchar*
111 ustring_to_utf8(const UString* str, guint len)
112 {
113     if (len < 0)
114         len = str->len;
115     return g_ucs4_to_utf8((const gunichar*)str->data, len, NULL, NULL, NULL);
116 }