Commit ee089516 authored by Havoc Pennington's avatar Havoc Pennington Committed by Havoc Pennington

Use gunichar instead of gint when appropriate in the interfaces

2000-06-21  Havoc Pennington  <hp@redhat.com>

* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces

* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.

* gtk/gtktexttypes.h: Delete some unused constants

* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
parent 39440b43
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces
* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.
* gtk/gtktexttypes.h: Delete some unused constants
* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
Wed Jun 21 12:50:58 2000 Owen Taylor <otaylor@redhat.com>
* docs/es/: Removed mistakenly added generated sgml
......
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces
* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.
* gtk/gtktexttypes.h: Delete some unused constants
* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
Wed Jun 21 12:50:58 2000 Owen Taylor <otaylor@redhat.com>
* docs/es/: Removed mistakenly added generated sgml
......
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces
* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.
* gtk/gtktexttypes.h: Delete some unused constants
* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
Wed Jun 21 12:50:58 2000 Owen Taylor <otaylor@redhat.com>
* docs/es/: Removed mistakenly added generated sgml
......
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces
* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.
* gtk/gtktexttypes.h: Delete some unused constants
* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
Wed Jun 21 12:50:58 2000 Owen Taylor <otaylor@redhat.com>
* docs/es/: Removed mistakenly added generated sgml
......
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces
* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.
* gtk/gtktexttypes.h: Delete some unused constants
* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
Wed Jun 21 12:50:58 2000 Owen Taylor <otaylor@redhat.com>
* docs/es/: Removed mistakenly added generated sgml
......
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces
* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.
* gtk/gtktexttypes.h: Delete some unused constants
* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
Wed Jun 21 12:50:58 2000 Owen Taylor <otaylor@redhat.com>
* docs/es/: Removed mistakenly added generated sgml
......
2000-06-21 Havoc Pennington <hp@redhat.com>
* gtk/gtktextiter.h: Use gunichar instead of gint when appropriate
in the interfaces
* gtk/gtktexttypes.c: Remove UTF functions, use glib
stuff instead when possible.
* gtk/gtktexttypes.h: Delete some unused constants
* gtktextbtree.c, gtktextiter.c, gtktextsegment.c, gtktextview.c,
testtextbuffer.c: use glib instead of custom unicode routines
Wed Jun 21 12:50:58 2000 Owen Taylor <otaylor@redhat.com>
* docs/es/: Removed mistakenly added generated sgml
......
......@@ -3369,7 +3369,7 @@ gtk_text_line_byte_to_char (GtkTextLine *line,
else
{
if (seg->type == &gtk_text_char_type)
return char_offset + gtk_text_view_num_utf_chars(seg->body.chars, byte_offset);
return char_offset + g_utf8_strlen (seg->body.chars, byte_offset);
else
{
g_assert(seg->char_count == 1);
......@@ -3594,8 +3594,7 @@ gtk_text_line_byte_to_char_offsets(GtkTextLine *line,
if (seg->type == &gtk_text_char_type)
{
*seg_char_offset = gtk_text_view_num_utf_chars(seg->body.chars,
offset);
*seg_char_offset = g_utf8_strlen(seg->body.chars, offset);
g_assert(*seg_char_offset < seg->char_count);
......@@ -3643,11 +3642,10 @@ gtk_text_line_char_to_byte_offsets(GtkTextLine *line,
*seg_byte_offset = 0;
while (offset > 0)
{
GtkTextUniChar ch;
gint bytes;
const char * start = seg->body.chars + *seg_byte_offset;
bytes = gtk_text_utf_to_unichar(seg->body.chars + *seg_byte_offset,
&ch);
bytes = g_utf8_next_char (start) - start;
*seg_byte_offset += bytes;
offset -= 1;
}
......
......@@ -575,7 +575,7 @@ gtk_text_iter_get_line_byte(const GtkTextIter *iter)
* Dereferencing
*/
gint
gunichar
gtk_text_iter_get_char(const GtkTextIter *iter)
{
GtkTextRealIter *real;
......@@ -594,15 +594,10 @@ gtk_text_iter_get_char(const GtkTextIter *iter)
if (real->segment->type == &gtk_text_char_type)
{
GtkTextUniChar ch;
ensure_byte_offsets(real);
gtk_text_utf_to_unichar(real->segment->body.chars +
real->segment_byte_offset,
&ch);
return ch;
return g_utf8_get_char (real->segment->body.chars +
real->segment_byte_offset);
}
else
{
......@@ -1018,11 +1013,10 @@ forward_char(GtkTextRealIter *real)
if (real->line_byte_offset >= 0)
{
gint bytes;
GtkTextUniChar ch;
bytes = gtk_text_utf_to_unichar(real->segment->body.chars +
real->segment_byte_offset,
&ch);
const char * start =
real->segment->body.chars + real->segment_byte_offset;
bytes = g_utf8_next_char (start) - start;
real->line_byte_offset += bytes;
real->segment_byte_offset += bytes;
......@@ -1281,10 +1275,9 @@ gtk_text_iter_backward_chars(GtkTextIter *iter, gint count)
i = 0;
while (i < real->segment_char_offset)
{
GtkTextUniChar ch;
new_byte_offset +=
gtk_text_utf_to_unichar(real->segment->body.chars + new_byte_offset,
&ch);
const char * start = real->segment->body.chars + new_byte_offset;
new_byte_offset += g_utf8_next_char (start) - start;
++i;
}
......@@ -1464,14 +1457,14 @@ gtk_text_iter_backward_lines(GtkTextIter *iter, gint count)
}
static gboolean
is_word_char(GtkTextUniChar ch, gpointer user_data)
is_word_char(gunichar ch, gpointer user_data)
{
/* will likely need some i18n help FIXME */
return isalpha(ch);
}
static gboolean
is_not_word_char(GtkTextUniChar ch, gpointer user_data)
is_not_word_char(gunichar ch, gpointer user_data)
{
return !is_word_char(ch, user_data);
}
......@@ -2339,10 +2332,8 @@ gtk_text_iter_check(const GtkTextIter *iter)
gint char_offset = 0;
while (char_offset < seg_char_offset)
{
GtkTextUniChar ch;
byte_offset +=
gtk_text_utf_to_unichar(char_segment->body.chars + byte_offset,
&ch);
const char * start = char_segment->body.chars + byte_offset;
byte_offset += g_utf8_next_char (start) - start;
char_offset += 1;
}
......@@ -2350,8 +2341,7 @@ gtk_text_iter_check(const GtkTextIter *iter)
g_error("byte offset did not correspond to char offset");
char_offset =
gtk_text_view_num_utf_chars(char_segment->body.chars,
seg_byte_offset);
g_utf8_strlen (char_segment->body.chars, seg_byte_offset);
if (char_offset != seg_char_offset)
g_error("char offset did not correspond to byte offset");
......
......@@ -54,7 +54,7 @@ gint gtk_text_iter_get_line_byte (const GtkTextIter *iter);
/*
* "Dereference" operators
*/
gint gtk_text_iter_get_char (const GtkTextIter *iter);
gunichar gtk_text_iter_get_char (const GtkTextIter *iter);
/* includes the 0xFFFD char for pixmaps/widgets, so char offsets
into the returned string map properly into buffer char offsets */
......@@ -144,7 +144,7 @@ gboolean gtk_text_iter_forward_find_tag_toggle (GtkTextIter *iter,
gboolean gtk_text_iter_backward_find_tag_toggle (GtkTextIter *iter,
GtkTextTag *tag);
typedef gboolean (* GtkTextViewCharPredicate) (guint16 ch, gpointer user_data);
typedef gboolean (* GtkTextViewCharPredicate) (gunichar ch, gpointer user_data);
gboolean gtk_text_iter_forward_find_char (GtkTextIter *iter,
GtkTextViewCharPredicate pred,
......
......@@ -177,7 +177,7 @@ char_segment_self_check(GtkTextLineSegment *seg)
g_error("char_segment_check_func: segment has wrong size");
}
if (gtk_text_view_num_utf_chars(seg->body.chars, seg->byte_count) != seg->char_count)
if (g_utf8_strlen (seg->body.chars, seg->byte_count) != seg->char_count)
{
g_error("char segment has wrong character count");
}
......@@ -197,7 +197,7 @@ char_segment_new(const gchar *text, guint len)
memcpy(seg->body.chars, text, len);
seg->body.chars[len] = '\0';
seg->char_count = gtk_text_view_num_utf_chars(seg->body.chars, seg->byte_count);
seg->char_count = g_utf8_strlen (seg->body.chars, seg->byte_count);
if (gtk_debug_flags & GTK_DEBUG_TEXT)
char_segment_self_check(seg);
......@@ -224,7 +224,7 @@ char_segment_new_from_two_strings(const gchar *text1, guint len1,
/* In principle this function could probably take chars1 and chars2
as args, since it's typically used to merge two char segments */
seg->char_count = gtk_text_view_num_utf_chars(seg->body.chars, seg->byte_count);
seg->char_count = g_utf8_strlen (seg->body.chars, seg->byte_count);
if (gtk_debug_flags & GTK_DEBUG_TEXT)
char_segment_self_check(seg);
......
......@@ -42,70 +42,12 @@ gtk_text_view_tab_array_unref(GtkTextTabArray *tab_array)
}
}
/*
* Unicode stubs (these are wrappers to make libunicode match the Tcl/Tk
* API, eventually should just use libunicode/Pango directly)
/* These are used to represent embedded non-character objects
* if you return a string representation of a text buffer
*/
#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 gunichar 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;
trigger_efence(str, end - str);
return g_utf8_next_char (str) - str;
}
gchar*
gtk_text_utf_prev(const gchar *str, const gchar *start)
{
gchar *retval;
trigger_efence(start, str - start);
retval = g_utf8_find_prev_char (start, str);
return retval;
}
static inline gboolean
inline_byte_begins_utf8_char(const gchar *byte)
{
......@@ -115,7 +57,6 @@ inline_byte_begins_utf8_char(const gchar *byte)
gboolean
gtk_text_byte_begins_utf8_char(const gchar *byte)
{
trigger_efence(byte, 1);
return inline_byte_begins_utf8_char(byte);
}
......@@ -123,11 +64,12 @@ guint
gtk_text_utf_to_latin1_char(const gchar *p, guchar *l1_ch)
{
guint charlen;
GtkTextUniChar ch;
gunichar ch;
g_assert(inline_byte_begins_utf8_char(p));
charlen = gtk_text_utf_to_unichar(p, &ch);
charlen = g_utf8_next_char (p) - p;
ch = g_utf8_get_char (p);
g_assert(ch != '\0');
......@@ -145,8 +87,6 @@ gtk_text_utf_to_latin1(const gchar *p, gint len)
GString *str;
guint i;
gchar *retval;
trigger_efence(p, len);
str = g_string_new("");
......@@ -169,54 +109,6 @@ gtk_text_utf_to_latin1(const gchar *p, gint len)
return retval;
}
static int
gtk_text_view_unichar_to_utf(GtkTextUniChar c, char *outbuf)
{
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)
{
......@@ -232,7 +124,7 @@ gtk_text_latin1_to_utf (const gchar *latin1, gint len)
gchar utf[7];
gint count;
count = gtk_text_view_unichar_to_utf((guchar)latin1[i], utf);
count = g_unichar_to_utf8 ((guchar)latin1[i], utf);
utf[count] = '\0';
......@@ -245,3 +137,6 @@ gtk_text_latin1_to_utf (const gchar *latin1, gint len)
g_string_free(retval, FALSE);
return str;
}
......@@ -8,9 +8,6 @@ extern "C" {
#include <glib.h>
#include <gtk/gtktextbuffer.h>
typedef unsigned short GtkTextUniChar; /* Unicode character */
#include <gtk/gtktexttagprivate.h>
typedef struct _GtkTextLine GtkTextLine;
......@@ -96,20 +93,6 @@ GtkTextTabArray *gtk_text_view_tab_array_new (guint size);
void gtk_text_view_tab_array_ref (GtkTextTabArray *tab_array);
void gtk_text_view_tab_array_unref (GtkTextTabArray *tab_array);
/*
* The constant below is used to specify a line when what is really
* wanted is the entire text. For now, just use a very big number.
*/
#define GTK_TEXT_END_OF_TEXT 1000000
/*
* The following definition specifies the maximum number of characters
* needed in a string to hold a position specifier.
*/
#define GTK_TEXT_POS_CHARS 30
/*
* Declarations for variables shared among the text-related files:
*/
......@@ -131,16 +114,17 @@ extern GtkTextLineSegmentClass gtk_text_view_child_type;
* UTF 8 Stubs
*/
extern const GtkTextUniChar gtk_text_unknown_char;
extern const gunichar gtk_text_unknown_char;
extern const gchar gtk_text_unknown_char_utf8[];
gint gtk_text_view_num_utf_chars(const gchar *chars, gint len);
gint gtk_text_utf_to_unichar(const gchar *p, GtkTextUniChar *ch);
gchar *gtk_text_utf_prev(const gchar *p, const gchar *p2);
gchar *gtk_text_utf_to_latin1(const gchar *p, gint len);
gboolean gtk_text_byte_begins_utf8_char(const gchar *byte);
guint gtk_text_utf_to_latin1_char(const gchar *p, guchar *ch);
gchar *gtk_text_latin1_to_utf (const gchar *latin1, gint len);
gboolean gtk_text_byte_begins_utf8_char (const gchar *byte);
guint gtk_text_utf_to_latin1_char (const gchar *p,
guchar *l1_ch);
gchar* gtk_text_utf_to_latin1 (const gchar *p,
gint len);
gchar* gtk_text_latin1_to_utf (const gchar *latin1,
gint len);
#ifdef __cplusplus
}
......
......@@ -1932,13 +1932,13 @@ gtk_text_view_scroll_text (GtkTextView *text_view,
}
static gboolean
whitespace (GtkTextUniChar ch, gpointer user_data)
whitespace (gunichar ch, gpointer user_data)
{
return (ch == ' ' || ch == '\t');
}
static gboolean
not_whitespace (GtkTextUniChar ch, gpointer user_data)
not_whitespace (gunichar ch, gpointer user_data)
{
return !whitespace (ch, user_data);
}
......
......@@ -14,14 +14,14 @@ main(int argc, char** argv)
{
GtkTextBuffer *buffer;
int n;
GtkTextUniChar ch;
gunichar ch;
GtkTextIter start, end;
gtk_init(&argc, &argv);
/* Check UTF8 unknown char thing */
g_assert(gtk_text_view_num_utf_chars(gtk_text_unknown_char_utf8, 3) == 1);
gtk_text_utf_to_unichar(gtk_text_unknown_char_utf8, &ch);
g_assert(g_utf8_strlen (gtk_text_unknown_char_utf8, 3) == 1);
ch = g_utf8_get_char (gtk_text_unknown_char_utf8);
g_assert(ch == gtk_text_unknown_char);
/* First, we turn on btree debugging. */
......
......@@ -14,14 +14,14 @@ main(int argc, char** argv)
{
GtkTextBuffer *buffer;
int n;
GtkTextUniChar ch;
gunichar ch;
GtkTextIter start, end;
gtk_init(&argc, &argv);
/* Check UTF8 unknown char thing */
g_assert(gtk_text_view_num_utf_chars(gtk_text_unknown_char_utf8, 3) == 1);
gtk_text_utf_to_unichar(gtk_text_unknown_char_utf8, &ch);
g_assert(g_utf8_strlen (gtk_text_unknown_char_utf8, 3) == 1);
ch = g_utf8_get_char (gtk_text_unknown_char_utf8);
g_assert(ch == gtk_text_unknown_char);
/* First, we turn on btree debugging. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment