]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktexttypes.c
filechooserbutton: In SELECT_FOLDER, when the selection is empty, show (None) in...
[~andy/gtk] / gtk / gtktexttypes.c
index 1dfa16bfc4017f26bc66d65ac9b0cf7643d12889..65133653524396e7b5572a9b78fd4342918a5fb0 100644 (file)
-#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 <http://www.gnu.org/licenses/>.
  */
 
-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);
 }