Improve AtkText implementations

There was some regressions from the recent display line fix;
while fixing it improve the test coverage and make GtkEntry
and GtkTextView return identical results.
This commit is contained in:
Matthias Clasen 2011-11-19 19:28:48 -05:00
parent bcc98cf14c
commit c3d96ff2c0
3 changed files with 432 additions and 135 deletions

View File

@ -280,6 +280,7 @@ gtk_text_view_accessible_get_text_before_offset (AtkText *text,
gtk_text_view_backward_display_line_start (view, &start);
end = start;
gtk_text_view_backward_display_line (view, &start);
gtk_text_view_backward_display_line_start (view, &start);
}
else if (boundary_type == ATK_TEXT_BOUNDARY_LINE_END)
{
@ -288,12 +289,14 @@ gtk_text_view_accessible_get_text_before_offset (AtkText *text,
{
gtk_text_view_backward_display_line (view, &start);
end = start;
gtk_text_view_forward_display_line_end (view, &end);
if (!gtk_text_iter_is_start (&start))
{
gtk_text_view_backward_display_line (view, &start);
gtk_text_view_forward_display_line_end (view, &start);
if (gtk_text_view_backward_display_line (view, &start))
gtk_text_view_forward_display_line_end (view, &start);
else
gtk_text_iter_set_offset (&start, 0);
}
gtk_text_view_forward_display_line_end (view, &end);
}
else
end = start;

View File

@ -1143,7 +1143,7 @@ _gtk_pango_get_text_after (PangoLayout *layout,
if (end < n_attrs - 1)
{
end = _gtk_pango_move_words (layout, end, 1);
while (!attrs[end].is_word_end && end < n_attrs - 1)
while (!attrs[end].is_word_start && end < n_attrs - 1)
end = _gtk_pango_move_chars (layout, end, 1);
}
break;
@ -1158,7 +1158,7 @@ _gtk_pango_get_text_after (PangoLayout *layout,
case ATK_TEXT_BOUNDARY_SENTENCE_START:
if (_gtk_pango_is_inside_sentence (layout, end))
end = _gtk_pango_move_sentences (layout, end, 1);
while (!attrs[end].is_sentence_end && end < n_attrs - 1)
while (!attrs[end].is_sentence_start && end < n_attrs - 1)
end = _gtk_pango_move_chars (layout, end, 1);
start = end;
if (end < n_attrs - 1)
@ -1245,7 +1245,7 @@ _gtk_pango_get_text_at (PangoLayout *layout,
if (_gtk_pango_is_inside_word (layout, end))
end = _gtk_pango_move_words (layout, end, 1);
while (!attrs[end].is_word_start && end < n_attrs - 1)
end = _gtk_pango_move_chars (layout, end, -1);
end = _gtk_pango_move_chars (layout, end, 1);
break;
case ATK_TEXT_BOUNDARY_WORD_END:
@ -1262,7 +1262,7 @@ _gtk_pango_get_text_at (PangoLayout *layout,
start = _gtk_pango_move_sentences (layout, start, -1);
if (_gtk_pango_is_inside_sentence (layout, end))
end = _gtk_pango_move_sentences (layout, end, 1);
while (!attrs[end].is_word_end && end < n_attrs - 1)
while (!attrs[end].is_sentence_start && end < n_attrs - 1)
end = _gtk_pango_move_chars (layout, end, 1);
break;

View File

@ -335,69 +335,69 @@ test_words (GtkWidget *widget)
AtkText *atk_text;
const gchar *text = "abc! def\nghi jkl\nmno";
Word expected[] = {
{ -1, 0, ATK_TEXT_BOUNDARY_CHAR, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_CHAR, 0, 1, "a" },
{ -1, 2, ATK_TEXT_BOUNDARY_CHAR, 1, 2, "b" },
{ -1, 3, ATK_TEXT_BOUNDARY_CHAR, 2, 3, "c" },
{ -1, 4, ATK_TEXT_BOUNDARY_CHAR, 3, 4, "!" },
{ -1, 5, ATK_TEXT_BOUNDARY_CHAR, 4, 5, " " },
{ -1, 6, ATK_TEXT_BOUNDARY_CHAR, 5, 6, "d" },
{ -1, 7, ATK_TEXT_BOUNDARY_CHAR, 6, 7, "e" },
{ -1, 8, ATK_TEXT_BOUNDARY_CHAR, 7, 8, "f" },
{ -1, 9, ATK_TEXT_BOUNDARY_CHAR, 8, 9, "\n" },
{ -1, 10, ATK_TEXT_BOUNDARY_CHAR, 9, 10, "g" },
{ -1, 11, ATK_TEXT_BOUNDARY_CHAR, 10, 11, "h" },
{ -1, 12, ATK_TEXT_BOUNDARY_CHAR, 11, 12, "i" },
{ -1, 13, ATK_TEXT_BOUNDARY_CHAR, 12, 13, " " },
{ -1, 14, ATK_TEXT_BOUNDARY_CHAR, 13, 14, "j" },
{ -1, 15, ATK_TEXT_BOUNDARY_CHAR, 14, 15, "k" },
{ -1, 16, ATK_TEXT_BOUNDARY_CHAR, 15, 16, "l" },
{ -1, 17, ATK_TEXT_BOUNDARY_CHAR, 16, 17, "\n" },
{ -1, 18, ATK_TEXT_BOUNDARY_CHAR, 17, 18, "m" },
{ -1, 19, ATK_TEXT_BOUNDARY_CHAR, 18, 19, "n" },
{ -1, 20, ATK_TEXT_BOUNDARY_CHAR, 19, 20, "o" },
{ -1, 0, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 5, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 6, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 7, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 8, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 9, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 10, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 11, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 12, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 13, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 14, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 15, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 16, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 17, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 18, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 19, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 20, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 0, ATK_TEXT_BOUNDARY_WORD_END, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_WORD_END, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_WORD_END, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 4, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 5, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 6, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 7, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 8, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 9, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 10, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 11, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 12, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 13, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 14, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 15, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 16, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 17, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 18, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 19, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 20, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ -1, 0, ATK_TEXT_BOUNDARY_CHAR, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_CHAR, 0, 1, "a" },
{ -1, 2, ATK_TEXT_BOUNDARY_CHAR, 1, 2, "b" },
{ -1, 3, ATK_TEXT_BOUNDARY_CHAR, 2, 3, "c" },
{ -1, 4, ATK_TEXT_BOUNDARY_CHAR, 3, 4, "!" },
{ -1, 5, ATK_TEXT_BOUNDARY_CHAR, 4, 5, " " },
{ -1, 6, ATK_TEXT_BOUNDARY_CHAR, 5, 6, "d" },
{ -1, 7, ATK_TEXT_BOUNDARY_CHAR, 6, 7, "e" },
{ -1, 8, ATK_TEXT_BOUNDARY_CHAR, 7, 8, "f" },
{ -1, 9, ATK_TEXT_BOUNDARY_CHAR, 8, 9, "\n" },
{ -1, 10, ATK_TEXT_BOUNDARY_CHAR, 9, 10, "g" },
{ -1, 11, ATK_TEXT_BOUNDARY_CHAR, 10, 11, "h" },
{ -1, 12, ATK_TEXT_BOUNDARY_CHAR, 11, 12, "i" },
{ -1, 13, ATK_TEXT_BOUNDARY_CHAR, 12, 13, " " },
{ -1, 14, ATK_TEXT_BOUNDARY_CHAR, 13, 14, "j" },
{ -1, 15, ATK_TEXT_BOUNDARY_CHAR, 14, 15, "k" },
{ -1, 16, ATK_TEXT_BOUNDARY_CHAR, 15, 16, "l" },
{ -1, 17, ATK_TEXT_BOUNDARY_CHAR, 16, 17, "\n" },
{ -1, 18, ATK_TEXT_BOUNDARY_CHAR, 17, 18, "m" },
{ -1, 19, ATK_TEXT_BOUNDARY_CHAR, 18, 19, "n" },
{ -1, 20, ATK_TEXT_BOUNDARY_CHAR, 19, 20, "o" },
{ -1, 0, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_WORD_START, 0, 0, "" },
{ -1, 5, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 6, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 7, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 8, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ -1, 9, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 10, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 11, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 12, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ -1, 13, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 14, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 15, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 16, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ -1, 17, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 18, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 19, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 20, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ -1, 0, ATK_TEXT_BOUNDARY_WORD_END, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_WORD_END, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_WORD_END, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 4, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 5, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 6, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 7, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ -1, 8, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 9, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 10, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 11, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ -1, 12, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 13, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 14, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 15, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ -1, 16, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 17, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 18, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 19, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ -1, 20, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ -1, 0, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 0, "" },
@ -419,69 +419,363 @@ test_words (GtkWidget *widget)
{ -1, 18, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ -1, 19, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ -1, 20, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ -1, 0, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 5, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 6, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 7, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 8, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 9, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 10, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 11, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 12, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 13, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 14, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 15, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 16, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 17, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 18, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 19, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 20, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ -1, 0, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 5, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 6, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 7, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 8, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 9, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 10, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 11, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 12, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 13, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 14, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 15, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 16, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 17, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 18, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 19, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 20, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 0, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 5, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 6, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 7, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 8, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 9, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 10, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 11, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 12, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 13, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 14, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 15, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 16, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 17, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ -1, 18, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ -1, 19, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ -1, 20, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ -1, 0, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 5, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 6, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 7, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ -1, 8, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 9, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 10, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 11, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 12, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 13, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 14, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 15, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ -1, 16, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 17, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 18, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 19, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ -1, 20, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ -1, 0, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 5, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 6, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 7, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 8, ATK_TEXT_BOUNDARY_LINE_START, 0, 0, "" },
{ -1, 9, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 10, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 11, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 12, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 13, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 14, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 15, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 16, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ -1, 17, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 18, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 19, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 20, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ -1, 0, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 1, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 2, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 3, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 4, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 5, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 6, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 7, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 8, ATK_TEXT_BOUNDARY_LINE_END, 0, 0, "" },
{ -1, 9, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 10, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 11, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 12, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 13, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 14, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 15, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 16, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ -1, 17, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ -1, 18, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ -1, 19, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ -1, 20, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 0, ATK_TEXT_BOUNDARY_CHAR, 0, 1, "a" },
{ 0, 1, ATK_TEXT_BOUNDARY_CHAR, 1, 2, "b" },
{ 0, 2, ATK_TEXT_BOUNDARY_CHAR, 2, 3, "c" },
{ 0, 3, ATK_TEXT_BOUNDARY_CHAR, 3, 4, "!" },
{ 0, 4, ATK_TEXT_BOUNDARY_CHAR, 4, 5, " " },
{ 0, 5, ATK_TEXT_BOUNDARY_CHAR, 5, 6, "d" },
{ 0, 6, ATK_TEXT_BOUNDARY_CHAR, 6, 7, "e" },
{ 0, 7, ATK_TEXT_BOUNDARY_CHAR, 7, 8, "f" },
{ 0, 8, ATK_TEXT_BOUNDARY_CHAR, 8, 9, "\n" },
{ 0, 9, ATK_TEXT_BOUNDARY_CHAR, 9, 10, "g" },
{ 0, 10, ATK_TEXT_BOUNDARY_CHAR, 10, 11, "h" },
{ 0, 11, ATK_TEXT_BOUNDARY_CHAR, 11, 12, "i" },
{ 0, 12, ATK_TEXT_BOUNDARY_CHAR, 12, 13, " " },
{ 0, 13, ATK_TEXT_BOUNDARY_CHAR, 13, 14, "j" },
{ 0, 14, ATK_TEXT_BOUNDARY_CHAR, 14, 15, "k" },
{ 0, 15, ATK_TEXT_BOUNDARY_CHAR, 15, 16, "l" },
{ 0, 16, ATK_TEXT_BOUNDARY_CHAR, 16, 17, "\n" },
{ 0, 17, ATK_TEXT_BOUNDARY_CHAR, 17, 18, "m" },
{ 0, 18, ATK_TEXT_BOUNDARY_CHAR, 18, 19, "n" },
{ 0, 19, ATK_TEXT_BOUNDARY_CHAR, 19, 20, "o" },
{ 0, 20, ATK_TEXT_BOUNDARY_CHAR, 20, 20, "" },
{ 0, 0, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ 0, 1, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ 0, 2, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ 0, 3, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ 0, 4, ATK_TEXT_BOUNDARY_WORD_START, 0, 5, "abc! " },
{ 0, 5, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 0, 6, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 0, 7, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 0, 8, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 0, 9, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 0, 10, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 0, 11, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 0, 12, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 0, 13, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 0, 14, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 0, 15, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 0, 16, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 0, 17, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 0, 18, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 0, 19, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 0, 20, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 0, 0, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ 0, 1, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ 0, 2, ATK_TEXT_BOUNDARY_WORD_END, 0, 3, "abc" },
{ 0, 3, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 0, 4, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 0, 5, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 0, 6, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 0, 7, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 0, 8, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 0, 9, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 0, 10, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 0, 11, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 0, 12, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 0, 13, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 0, 14, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 0, 15, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 0, 16, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 0, 17, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 0, 18, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 0, 19, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 0, 20, ATK_TEXT_BOUNDARY_WORD_END, 20, 20, "" },
{ 0, 0, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 5, "abc! " },
{ 0, 1, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 5, "abc! " },
{ 0, 2, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 5, "abc! " },
{ 0, 3, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 5, "abc! " },
{ 0, 4, ATK_TEXT_BOUNDARY_SENTENCE_START, 0, 5, "abc! " },
{ 0, 5, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 0, 6, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 0, 7, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 0, 8, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 0, 9, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 10, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 11, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 12, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 13, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 14, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 15, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 16, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 0, 17, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 0, 18, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 0, 19, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 0, 20, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 0, 0, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ 0, 1, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ 0, 2, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ 0, 3, ATK_TEXT_BOUNDARY_SENTENCE_END, 0, 4, "abc!" },
{ 0, 4, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 0, 5, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 0, 6, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 0, 7, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 0, 8, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 9, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 10, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 11, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 12, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 13, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 14, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 15, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 0, 16, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 0, 17, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 0, 18, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 0, 19, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 0, 20, ATK_TEXT_BOUNDARY_SENTENCE_END, 20, 20, "" },
{ 0, 0, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 1, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 2, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 3, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 4, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 5, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 6, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 7, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 8, ATK_TEXT_BOUNDARY_LINE_START, 0, 9, "abc! def\n" },
{ 0, 9, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 10, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 11, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 12, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 13, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 14, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 15, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 16, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 0, 17, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 0, 18, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 0, 19, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 0, 20, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 0, 0, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 1, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 2, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 3, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 4, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 5, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 6, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 7, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 8, ATK_TEXT_BOUNDARY_LINE_END, 0, 8, "abc! def" },
{ 0, 9, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 10, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 11, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 12, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 13, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 14, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 15, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 16, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 0, 17, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 0, 18, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 0, 19, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 0, 20, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 0, ATK_TEXT_BOUNDARY_CHAR, 1, 2, "b" },
{ 1, 1, ATK_TEXT_BOUNDARY_CHAR, 2, 3, "c" },
{ 1, 2, ATK_TEXT_BOUNDARY_CHAR, 3, 4, "!" },
{ 1, 3, ATK_TEXT_BOUNDARY_CHAR, 4, 5, " " },
{ 1, 4, ATK_TEXT_BOUNDARY_CHAR, 5, 6, "d" },
{ 1, 5, ATK_TEXT_BOUNDARY_CHAR, 6, 7, "e" },
{ 1, 6, ATK_TEXT_BOUNDARY_CHAR, 7, 8, "f" },
{ 1, 7, ATK_TEXT_BOUNDARY_CHAR, 8, 9, "\n" },
{ 1, 8, ATK_TEXT_BOUNDARY_CHAR, 9, 10, "g" },
{ 1, 9, ATK_TEXT_BOUNDARY_CHAR, 10, 11, "h" },
{ 1, 10, ATK_TEXT_BOUNDARY_CHAR, 11, 12, "i" },
{ 1, 11, ATK_TEXT_BOUNDARY_CHAR, 12, 13, " " },
{ 1, 12, ATK_TEXT_BOUNDARY_CHAR, 13, 14, "j" },
{ 1, 13, ATK_TEXT_BOUNDARY_CHAR, 14, 15, "k" },
{ 1, 14, ATK_TEXT_BOUNDARY_CHAR, 15, 16, "l" },
{ 1, 15, ATK_TEXT_BOUNDARY_CHAR, 16, 17, "\n" },
{ 1, 16, ATK_TEXT_BOUNDARY_CHAR, 17, 18, "m" },
{ 1, 17, ATK_TEXT_BOUNDARY_CHAR, 18, 19, "n" },
{ 1, 18, ATK_TEXT_BOUNDARY_CHAR, 19, 20, "o" },
{ 1, 19, ATK_TEXT_BOUNDARY_CHAR, 20, 20, "" },
{ 1, 20, ATK_TEXT_BOUNDARY_CHAR, 20, 20, "" },
{ 1, 0, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 1, 1, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 1, 2, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 1, 3, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 1, 4, ATK_TEXT_BOUNDARY_WORD_START, 5, 9, "def\n" },
{ 1, 5, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 1, 6, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 1, 7, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 1, 8, ATK_TEXT_BOUNDARY_WORD_START, 9, 13, "ghi " },
{ 1, 9, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 1, 10, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 1, 11, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 1, 12, ATK_TEXT_BOUNDARY_WORD_START, 13, 17, "jkl\n" },
{ 1, 13, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 1, 14, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 1, 15, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 1, 16, ATK_TEXT_BOUNDARY_WORD_START, 17, 20, "mno" },
{ 1, 17, ATK_TEXT_BOUNDARY_WORD_START, 20, 20, "" },
{ 1, 18, ATK_TEXT_BOUNDARY_WORD_START, 20, 20, "" },
{ 1, 19, ATK_TEXT_BOUNDARY_WORD_START, 20, 20, "" },
{ 1, 20, ATK_TEXT_BOUNDARY_WORD_START, 20, 20, "" },
{ 1, 0, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 1, 1, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 1, 2, ATK_TEXT_BOUNDARY_WORD_END, 3, 8, "! def" },
{ 1, 3, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 1, 4, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 1, 5, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 1, 6, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 1, 7, ATK_TEXT_BOUNDARY_WORD_END, 8, 12, "\nghi" },
{ 1, 8, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 1, 9, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 1, 10, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 1, 11, ATK_TEXT_BOUNDARY_WORD_END, 12, 16, " jkl" },
{ 1, 12, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 1, 13, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 1, 14, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 1, 15, ATK_TEXT_BOUNDARY_WORD_END, 16, 20, "\nmno" },
{ 1, 16, ATK_TEXT_BOUNDARY_WORD_END, 20, 20, "" },
{ 1, 17, ATK_TEXT_BOUNDARY_WORD_END, 20, 20, "" },
{ 1, 18, ATK_TEXT_BOUNDARY_WORD_END, 20, 20, "" },
{ 1, 19, ATK_TEXT_BOUNDARY_WORD_END, 20, 20, "" },
{ 1, 20, ATK_TEXT_BOUNDARY_WORD_END, 20, 20, "" },
{ 1, 0, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 1, 1, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 1, 2, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 1, 3, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 1, 4, ATK_TEXT_BOUNDARY_SENTENCE_START, 5, 9, "def\n" },
{ 1, 5, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 1, 6, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 1, 7, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 1, 8, ATK_TEXT_BOUNDARY_SENTENCE_START, 9, 17, "ghi jkl\n" },
{ 1, 9, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 10, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 11, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 12, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 13, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 14, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 15, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 16, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
{ 1, 17, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
{ 1, 18, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
{ 1, 19, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
{ 1, 20, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
{ 1, 0, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 1, 1, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 1, 2, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 1, 3, ATK_TEXT_BOUNDARY_SENTENCE_END, 4, 8, " def" },
{ 1, 4, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 1, 5, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 1, 6, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 1, 7, ATK_TEXT_BOUNDARY_SENTENCE_END, 8, 16, "\nghi jkl" },
{ 1, 8, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 9, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 10, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 11, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 12, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 13, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 14, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 15, ATK_TEXT_BOUNDARY_SENTENCE_END, 16, 20, "\nmno" },
{ 1, 16, ATK_TEXT_BOUNDARY_SENTENCE_END, 20, 20, "" },
{ 1, 17, ATK_TEXT_BOUNDARY_SENTENCE_END, 20, 20, "" },
{ 1, 18, ATK_TEXT_BOUNDARY_SENTENCE_END, 20, 20, "" },
{ 1, 19, ATK_TEXT_BOUNDARY_SENTENCE_END, 20, 20, "" },
{ 1, 20, ATK_TEXT_BOUNDARY_SENTENCE_END, 20, 20, "" },
{ 1, 0, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 1, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 2, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 3, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 4, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 5, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 6, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 7, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 8, ATK_TEXT_BOUNDARY_LINE_START, 9, 17, "ghi jkl\n" },
{ 1, 9, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 10, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 11, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 12, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 13, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 14, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 15, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 16, ATK_TEXT_BOUNDARY_LINE_START, 17, 20, "mno" },
{ 1, 17, ATK_TEXT_BOUNDARY_LINE_START, 20, 20, "" },
{ 1, 18, ATK_TEXT_BOUNDARY_LINE_START, 20, 20, "" },
{ 1, 19, ATK_TEXT_BOUNDARY_LINE_START, 20, 20, "" },
{ 1, 20, ATK_TEXT_BOUNDARY_LINE_START, 20, 20, "" },
{ 1, 0, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 1, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 2, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 3, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 4, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 5, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 6, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 7, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 8, ATK_TEXT_BOUNDARY_LINE_END, 8, 16, "\nghi jkl" },
{ 1, 9, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 10, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 11, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 12, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 13, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 14, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 15, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 16, ATK_TEXT_BOUNDARY_LINE_END, 16, 20, "\nmno" },
{ 1, 17, ATK_TEXT_BOUNDARY_LINE_END, 20, 20, "" },
{ 1, 18, ATK_TEXT_BOUNDARY_LINE_END, 20, 20, "" },
{ 1, 19, ATK_TEXT_BOUNDARY_LINE_END, 20, 20, "" },
{ 1, 20, ATK_TEXT_BOUNDARY_LINE_END, 20, 20, "" },
{ 0, -1, }
};
gint start, end;
@ -498,8 +792,8 @@ test_words (GtkWidget *widget)
show_text_attributes (gtk_entry_get_layout (GTK_ENTRY (widget)));
#endif
#if DUMP_RESULTS
for (i = -1; i < 2; i++)
#ifdef DUMP_RESULTS
for (i = -1; i <= 1; i++)
{
gint j, k;
for (j = ATK_TEXT_BOUNDARY_CHAR; j <= ATK_TEXT_BOUNDARY_LINE_END; j++)