1 #include "gtktexttypes.h"
9 gtk_text_view_tab_array_new(guint size)
11 GtkTextTabArray *array;
13 array = g_new0(GtkTextTabArray, 1);
16 array->numTabs = size;
17 array->tabs = g_new0(GtkTextTab, size);
23 gtk_text_view_tab_array_ref(GtkTextTabArray *tab_array)
25 g_return_if_fail(tab_array != NULL);
27 tab_array->refcount += 1;
31 gtk_text_view_tab_array_unref(GtkTextTabArray *tab_array)
33 g_return_if_fail(tab_array != NULL);
34 g_return_if_fail(tab_array->refcount > 0);
36 tab_array->refcount -= 1;
38 if (tab_array->refcount == 0)
40 g_free(tab_array->tabs);
46 * Unicode stubs (these are wrappers to make libunicode match the Tcl/Tk
47 * API, eventually should just use libunicode/Pango directly)
54 trigger_efence(const gchar *str, gint len)
61 ((gchar*)str)[i] = ch;
66 #define trigger_efence(foo,bar)
69 const GtkTextUniChar gtk_text_unknown_char = 0xFFFD;
70 const gchar gtk_text_unknown_char_utf8[] = { 0xEF, 0xBF, 0xBD, '\0' };
73 gtk_text_view_num_utf_chars(const gchar *str, gint len)
75 trigger_efence(str, len);
76 return unicode_strlen(str, len);
79 /* FIXME we need a version of this function with error handling, so we
80 can screen incoming UTF8 for validity. */
83 gtk_text_utf_to_unichar(const gchar *str, GtkTextUniChar *chPtr)
88 end = unicode_get_utf8(str, &ch);
91 g_error("Bad UTF8, need to add some error checking so this doesn't crash the program");
95 trigger_efence(str, end - str);
101 gtk_text_utf_prev(const gchar *str, const gchar *start)
105 trigger_efence(start, str - start);
107 retval = unicode_previous_utf8(start, str);
112 static inline gboolean
113 inline_byte_begins_utf8_char(const gchar *byte)
115 return ((*byte & 0xC0) != 0x80);
119 gtk_text_byte_begins_utf8_char(const gchar *byte)
121 trigger_efence(byte, 1);
122 return inline_byte_begins_utf8_char(byte);
126 gtk_text_utf_to_latin1_char(const gchar *p, guchar *l1_ch)
131 g_assert(inline_byte_begins_utf8_char(p));
133 charlen = gtk_text_utf_to_unichar(p, &ch);
135 g_assert(ch != '\0');
146 gtk_text_utf_to_latin1(const gchar *p, gint len)
152 trigger_efence(p, len);
154 str = g_string_new("");
162 charlen = gtk_text_utf_to_latin1_char(p+i, &ch);
164 g_string_append_c(str, ch);
170 g_string_free(str, FALSE);
176 gtk_text_view_unichar_to_utf(GtkTextUniChar c, char *outbuf)
192 else if (c < 0x10000)
197 else if (c < 0x200000)
202 else if (c < 0x4000000)
213 for (i = len - 1; i > 0; --i)
215 outbuf[i] = (c & 0x3f) | 0x80;
218 outbuf[0] = c | first;
224 gtk_text_latin1_to_utf (const gchar *latin1, gint len)
230 retval = g_string_new("");
238 count = gtk_text_view_unichar_to_utf((guchar)latin1[i], utf);
242 g_string_append(retval, utf);
248 g_string_free(retval, FALSE);