forked from AuroraMiddleware/gtk
handle the case of \r and \n split across lines. Bug #337022. add unit
2006-04-05 Paolo Borelli <pborelli@katamail.com> * gtk/gtktextiter.c (gtk_text_iter_ends_line): handle the case of \r and \n split across lines. Bug #337022. * tests/testtextbuffer.c: add unit test.
This commit is contained in:
parent
3797d5a34e
commit
f58c7f1ae8
@ -1,3 +1,9 @@
|
||||
2006-04-05 Paolo Borelli <pborelli@katamail.com>
|
||||
|
||||
* gtk/gtktextiter.c (gtk_text_iter_ends_line): handle the case of \r
|
||||
and \n split across lines. Bug #337022.
|
||||
* tests/testtextbuffer.c: add unit test.
|
||||
|
||||
Tue Apr 4 12:25:36 2006 Søren Sandmann <sandmann@redhat.com>
|
||||
|
||||
* gdk/x11/gdkimage-x11.c (gdk_image_class_init): Add "_private" to
|
||||
|
@ -1,3 +1,9 @@
|
||||
2006-04-05 Paolo Borelli <pborelli@katamail.com>
|
||||
|
||||
* gtk/gtktextiter.c (gtk_text_iter_ends_line): handle the case of \r
|
||||
and \n split across lines. Bug #337022.
|
||||
* tests/testtextbuffer.c: add unit test.
|
||||
|
||||
Tue Apr 4 12:25:36 2006 Søren Sandmann <sandmann@redhat.com>
|
||||
|
||||
* gdk/x11/gdkimage-x11.c (gdk_image_class_init): Add "_private" to
|
||||
|
@ -1564,10 +1564,23 @@ gtk_text_iter_ends_line (const GtkTextIter *iter)
|
||||
return TRUE;
|
||||
else if (wc == '\n')
|
||||
{
|
||||
/* need to determine if a \r precedes the \n, in which case
|
||||
* we aren't the end of the line
|
||||
*/
|
||||
GtkTextIter tmp = *iter;
|
||||
|
||||
/* need to determine if a \r precedes the \n, in which case
|
||||
* we aren't the end of the line.
|
||||
* Note however that if \r and \n are on different lines, they
|
||||
* both are terminators. This for instance may happen after
|
||||
* deleting some text:
|
||||
|
||||
1 some text\r delete 'a' 1 some text\r
|
||||
2 a\n ---------> 2 \n
|
||||
3 ... 3 ...
|
||||
|
||||
*/
|
||||
|
||||
if (gtk_text_iter_get_line_offset (&tmp) == 0)
|
||||
return TRUE;
|
||||
|
||||
if (!gtk_text_iter_backward_char (&tmp))
|
||||
return TRUE;
|
||||
|
||||
|
@ -960,6 +960,34 @@ test_line_separation (const char* str,
|
||||
g_object_unref (buffer);
|
||||
}
|
||||
|
||||
/* there are cases where \r and \n should not be treated like \r\n,
|
||||
* originally bug #337022. */
|
||||
static void
|
||||
split_r_n_separators_test (void)
|
||||
{
|
||||
GtkTextBuffer *buffer;
|
||||
GtkTextIter iter;
|
||||
|
||||
buffer = gtk_text_buffer_new (NULL);
|
||||
|
||||
gtk_text_buffer_set_text (buffer, "foo\ra\nbar\n", -1);
|
||||
|
||||
/* delete 'a' so that we have
|
||||
|
||||
1 foo\r
|
||||
2 \n
|
||||
3 bar\n
|
||||
|
||||
* and both \r and \n are line separators */
|
||||
|
||||
gtk_text_buffer_get_iter_at_offset (buffer, &iter, 5);
|
||||
gtk_text_buffer_backspace (buffer, &iter, TRUE, TRUE);
|
||||
|
||||
g_assert (gtk_text_iter_ends_line (&iter));
|
||||
|
||||
gtk_text_buffer_get_iter_at_offset (buffer, &iter, 3);
|
||||
g_assert (gtk_text_iter_ends_line (&iter));
|
||||
}
|
||||
|
||||
static void
|
||||
line_separator_tests (void)
|
||||
@ -989,6 +1017,8 @@ line_separator_tests (void)
|
||||
test_line_separation (str, TRUE, FALSE, 2, 4, 5);
|
||||
g_free (str);
|
||||
|
||||
split_r_n_separators_test ();
|
||||
|
||||
g_print ("Line separator tests passed\n");
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user