[gtk+] Improve AtkText implementations



commit c3d96ff2c0bca78c8caafc7a853186362900af19
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Nov 19 19:28:48 2011 -0500

    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.

 gtk/a11y/gtktextviewaccessible.c |    9 +-
 gtk/gtkpango.c                   |    8 +-
 tests/a11y/text.c                |  550 +++++++++++++++++++++++++++++---------
 3 files changed, 432 insertions(+), 135 deletions(-)
---
diff --git a/gtk/a11y/gtktextviewaccessible.c b/gtk/a11y/gtktextviewaccessible.c
index b620c9c..97db302 100644
--- a/gtk/a11y/gtktextviewaccessible.c
+++ b/gtk/a11y/gtktextviewaccessible.c
@@ -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;
diff --git a/gtk/gtkpango.c b/gtk/gtkpango.c
index 2181b7b..6f72eef 100644
--- a/gtk/gtkpango.c
+++ b/gtk/gtkpango.c
@@ -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;
 
diff --git a/tests/a11y/text.c b/tests/a11y/text.c
index 80b8b77..254df16 100644
--- a/tests/a11y/text.c
+++ b/tests/a11y/text.c
@@ -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++)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]