X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtktexttypes.c;h=65133653524396e7b5572a9b78fd4342918a5fb0;hb=1074aa0c49f647ed4b2a969618051c59da5aad01;hp=1dfa16bfc4017f26bc66d65ac9b0cf7643d12889;hpb=2a98bc6a31dd136058f9068435227cf10713e0ff;p=~andy%2Fgtk diff --git a/gtk/gtktexttypes.c b/gtk/gtktexttypes.c index 1dfa16bfc..651336535 100644 --- a/gtk/gtktexttypes.c +++ b/gtk/gtktexttypes.c @@ -1,247 +1,50 @@ -#include "gtktexttypes.h" - - -/* - * Tab array +/* GTK - The GIMP Toolkit + * gtktexttypes.c Copyright (C) 2000 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . */ -GtkTextTabArray* -gtk_text_view_tab_array_new(guint size) -{ - GtkTextTabArray *array; - - array = g_new0(GtkTextTabArray, 1); - - array->refcount = 1; - array->numTabs = size; - array->tabs = g_new0(GtkTextTab, size); - - return array; -} - -void -gtk_text_view_tab_array_ref(GtkTextTabArray *tab_array) -{ - g_return_if_fail(tab_array != NULL); - - tab_array->refcount += 1; -} - -void -gtk_text_view_tab_array_unref(GtkTextTabArray *tab_array) -{ - g_return_if_fail(tab_array != NULL); - g_return_if_fail(tab_array->refcount > 0); - - tab_array->refcount -= 1; - - if (tab_array->refcount == 0) - { - g_free(tab_array->tabs); - g_free(tab_array); - } -} - /* - * Unicode stubs (these are wrappers to make libunicode match the Tcl/Tk - * API, eventually should just use libunicode/Pango directly) + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ -#if 0 -static void -trigger_efence(const gchar *str, gint len) -{ - gchar ch; - gint i = 0; - while (i < len) - { - ch = str[i]; - ((gchar*)str)[i] = ch; - ++i; - } -} -#else -#define trigger_efence(foo,bar) -#endif - -const GtkTextUniChar gtk_text_unknown_char = 0xFFFD; -const gchar gtk_text_unknown_char_utf8[] = { 0xEF, 0xBF, 0xBD, '\0' }; - -gint -gtk_text_view_num_utf_chars(const gchar *str, gint len) -{ - trigger_efence(str, len); - return g_utf8_strlen(str, len); -} - -/* FIXME we need a version of this function with error handling, so we - can screen incoming UTF8 for validity. */ - -gint -gtk_text_utf_to_unichar(const gchar *str, GtkTextUniChar *chPtr) -{ - gunichar ch; - - ch = g_utf8_get_char (str); - - if (ch == (gunichar)-1) - g_error("Bad UTF8, need to add some error checking so this doesn't crash the program"); - - *chPtr = ch; +#include "config.h" +#include "gtktexttypes.h" - trigger_efence(str, end - str); - - return g_utf8_next_char (str) - str; -} +/* These are used to represent embedded non-character objects + * if you return a string representation of a text buffer + */ +const gchar _gtk_text_unknown_char_utf8[] = { '\xEF', '\xBF', '\xBC', '\0' }; -gchar* -gtk_text_utf_prev(const gchar *str, const gchar *start) +/* This is to be used only by libgtk test programs */ +const gchar * +gtk_text_unknown_char_utf8_gtk_tests_only (void) { - gchar *retval; - - trigger_efence(start, str - start); - - retval = g_utf8_find_prev_char (start, str); - - return retval; + return _gtk_text_unknown_char_utf8; } static inline gboolean -inline_byte_begins_utf8_char(const gchar *byte) +inline_byte_begins_utf8_char (const gchar *byte) { return ((*byte & 0xC0) != 0x80); } gboolean -gtk_text_byte_begins_utf8_char(const gchar *byte) -{ - trigger_efence(byte, 1); - return inline_byte_begins_utf8_char(byte); -} - -guint -gtk_text_utf_to_latin1_char(const gchar *p, guchar *l1_ch) -{ - guint charlen; - GtkTextUniChar ch; - - g_assert(inline_byte_begins_utf8_char(p)); - - charlen = gtk_text_utf_to_unichar(p, &ch); - - g_assert(ch != '\0'); - - if (ch > 0xff) - *l1_ch = '?'; - else - *l1_ch = ch; - - return charlen; -} - -gchar* -gtk_text_utf_to_latin1(const gchar *p, gint len) -{ - GString *str; - guint i; - gchar *retval; - - trigger_efence(p, len); - - str = g_string_new(""); - - i = 0; - while (i < len) - { - guchar ch; - guint charlen; - - charlen = gtk_text_utf_to_latin1_char(p+i, &ch); - - g_string_append_c(str, ch); - - i += charlen; - } - - retval = str->str; - g_string_free(str, FALSE); - - return retval; -} - -static int -gtk_text_view_unichar_to_utf(GtkTextUniChar c, char *outbuf) +gtk_text_byte_begins_utf8_char (const gchar *byte) { - size_t len = 0; - int first; - int i; - - if (c < 0x80) - { - first = 0; - len = 1; - } - else if (c < 0x800) - { - first = 0xc0; - len = 2; - } - else if (c < 0x10000) - { - first = 0xe0; - len = 3; - } - else if (c < 0x200000) - { - first = 0xf0; - len = 4; - } - else if (c < 0x4000000) - { - first = 0xf8; - len = 5; - } - else - { - first = 0xfc; - len = 6; - } - - for (i = len - 1; i > 0; --i) - { - outbuf[i] = (c & 0x3f) | 0x80; - c >>= 6; - } - outbuf[0] = c | first; - - return len; -} - -gchar* -gtk_text_latin1_to_utf (const gchar *latin1, gint len) -{ - gint i; - GString *retval; - gchar *str; - - retval = g_string_new(""); - - i = 0; - while (i < len) - { - gchar utf[7]; - gint count; - - count = gtk_text_view_unichar_to_utf((guchar)latin1[i], utf); - - utf[count] = '\0'; - - g_string_append(retval, utf); - - ++i; - } - - str = retval->str; - g_string_free(retval, FALSE); - return str; + return inline_byte_begins_utf8_char (byte); }