[gtksourceview/wip/search] search: fix a unit test



commit d97fedecb6545a8b804287cf30afe2b4bc19c66c
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sat Jun 22 21:22:34 2013 +0200

    search: fix a unit test

 gtksourceview/gtksourcesearch.c |  251 +++++++++++++++++++++++----------------
 1 files changed, 148 insertions(+), 103 deletions(-)
---
diff --git a/gtksourceview/gtksourcesearch.c b/gtksourceview/gtksourcesearch.c
index 471e750..8dc8134 100644
--- a/gtksourceview/gtksourcesearch.c
+++ b/gtksourceview/gtksourcesearch.c
@@ -27,9 +27,6 @@
 
 #include <string.h>
 
-/* Maximum number of lines to scan in one batch. */
-#define SCAN_BATCH_SIZE 50
-
 /* Implementation overview:
  *
  * When the state of the search changes (the text to search or the flags), we
@@ -100,6 +97,20 @@
  * - Rewrite the code to implement the simpler solution explained above :-)
  */
 
+#define ENABLE_DEBUG
+/*
+#undef ENABLE_DEBUG
+*/
+
+#ifdef ENABLE_DEBUG
+#define DEBUG(x) (x)
+#else
+#define DEBUG(x)
+#endif
+
+/* Maximum number of lines to scan in one batch. */
+#define SCAN_BATCH_SIZE 50
+
 struct _GtkSourceSearchPrivate
 {
        GtkTextBuffer *buffer;
@@ -305,6 +316,12 @@ adjust_subregion (GtkSourceSearch *search,
                  GtkTextIter     *start,
                  GtkTextIter     *end)
 {
+       DEBUG ({
+               g_print ("adjust_subregion(), before adjusting: [%u (%u), %u (%u)]\n",
+                        gtk_text_iter_get_line (start), gtk_text_iter_get_offset (start),
+                        gtk_text_iter_get_line (end), gtk_text_iter_get_offset (end));
+       });
+
        gtk_text_iter_backward_lines (start, MAX (0, search->priv->text_nb_lines - 1));
        gtk_text_iter_forward_lines (end, MAX (0, search->priv->text_nb_lines - 1));
 
@@ -326,93 +343,121 @@ adjust_subregion (GtkSourceSearch *search,
         * not.
         */
 
-       if (gtk_text_iter_has_tag (start, search->priv->found_tag) &&
-           !is_text_region_empty (search->priv->region_to_scan))
+       if (gtk_text_iter_has_tag (start, search->priv->found_tag))
        {
-               GtkTextIter tag_start = *start;
-               GtkTextIter tag_end = *start;
-               GtkTextRegion *region;
-
-               if (!gtk_text_iter_begins_tag (&tag_start, search->priv->found_tag))
+               if (is_text_region_empty (search->priv->region_to_scan))
                {
-                       gtk_text_iter_backward_to_tag_toggle (&tag_start, search->priv->found_tag);
-               }
+                       /* 'start' is in a correct match, we can skip it. */
 
-               if (!gtk_text_iter_ends_tag (&tag_end, search->priv->found_tag))
-               {
-                       gtk_text_iter_forward_to_tag_toggle (&tag_end, search->priv->found_tag);
-               }
-
-               region = gtk_text_region_intersect (search->priv->region_to_scan,
-                                                   &tag_start,
-                                                   &tag_end);
-
-               if (is_text_region_empty (region))
-               {
-                       /* 'region' has already been scanned, so 'start' is in a
-                        * correct match, we can skip it.
-                        */
-                       *start = tag_end;
+                       if (!gtk_text_iter_ends_tag (start, search->priv->found_tag))
+                       {
+                               gtk_text_iter_forward_to_tag_toggle (start, search->priv->found_tag);
+                       }
                }
                else
                {
-                       /* 'region' has not already been scanned completely, so
-                        * 'start' is most probably in an old match that must be
-                        * removed.
-                        */
-                       *start = tag_start;
-               }
+                       GtkTextIter tag_start = *start;
+                       GtkTextIter tag_end = *start;
+                       GtkTextRegion *region;
 
-               if (region != NULL)
-               {
-                       gtk_text_region_destroy (region, TRUE);
-               }
-       }
+                       if (!gtk_text_iter_begins_tag (&tag_start, search->priv->found_tag))
+                       {
+                               gtk_text_iter_backward_to_tag_toggle (&tag_start, search->priv->found_tag);
+                       }
 
-       /* Symmetric for 'end'. */
+                       if (!gtk_text_iter_ends_tag (&tag_end, search->priv->found_tag))
+                       {
+                               gtk_text_iter_forward_to_tag_toggle (&tag_end, search->priv->found_tag);
+                       }
 
-       if (gtk_text_iter_has_tag (end, search->priv->found_tag) &&
-           !is_text_region_empty (search->priv->region_to_scan))
-       {
-               GtkTextIter tag_start = *end;
-               GtkTextIter tag_end = *end;
-               GtkTextRegion *region;
+                       region = gtk_text_region_intersect (search->priv->region_to_scan,
+                                                           &tag_start,
+                                                           &tag_end);
 
-               if (!gtk_text_iter_begins_tag (&tag_start, search->priv->found_tag))
-               {
-                       gtk_text_iter_backward_to_tag_toggle (&tag_start, search->priv->found_tag);
-               }
+                       if (is_text_region_empty (region))
+                       {
+                               /* 'region' has already been scanned, so 'start' is in a
+                                * correct match, we can skip it.
+                                */
+                               *start = tag_end;
+                       }
+                       else
+                       {
+                               /* 'region' has not already been scanned completely, so
+                                * 'start' is most probably in an old match that must be
+                                * removed.
+                                */
+                               *start = tag_start;
+                       }
 
-               if (!gtk_text_iter_ends_tag (&tag_end, search->priv->found_tag))
-               {
-                       gtk_text_iter_forward_to_tag_toggle (&tag_end, search->priv->found_tag);
+                       if (region != NULL)
+                       {
+                               gtk_text_region_destroy (region, TRUE);
+                       }
                }
+       }
 
-               region = gtk_text_region_intersect (search->priv->region_to_scan,
-                                                   &tag_start,
-                                                   &tag_end);
+       /* Symmetric for 'end'. */
 
-               if (is_text_region_empty (region))
+       if (gtk_text_iter_has_tag (end, search->priv->found_tag))
+       {
+               if (is_text_region_empty (search->priv->region_to_scan))
                {
-                       /* 'region' has already been scanned, so 'end' is in a
-                        * correct match, we can skip it.
-                        */
-                       *end = tag_start;
+                       /* 'end' is in a correct match, we can skip it. */
+
+                       if (!gtk_text_iter_begins_tag (end, search->priv->found_tag))
+                       {
+                               gtk_text_iter_backward_to_tag_toggle (end, search->priv->found_tag);
+                       }
                }
                else
                {
-                       /* 'region' has not already been scanned completely, so
-                        * 'end' is most probably in an old match that must be
-                        * removed.
-                        */
-                       *end = tag_end;
-               }
+                       GtkTextIter tag_start = *end;
+                       GtkTextIter tag_end = *end;
+                       GtkTextRegion *region;
 
-               if (region != NULL)
-               {
-                       gtk_text_region_destroy (region, TRUE);
+                       if (!gtk_text_iter_begins_tag (&tag_start, search->priv->found_tag))
+                       {
+                               gtk_text_iter_backward_to_tag_toggle (&tag_start, search->priv->found_tag);
+                       }
+
+                       if (!gtk_text_iter_ends_tag (&tag_end, search->priv->found_tag))
+                       {
+                               gtk_text_iter_forward_to_tag_toggle (&tag_end, search->priv->found_tag);
+                       }
+
+                       region = gtk_text_region_intersect (search->priv->region_to_scan,
+                                                           &tag_start,
+                                                           &tag_end);
+
+                       if (is_text_region_empty (region))
+                       {
+                               /* 'region' has already been scanned, so 'end' is in a
+                                * correct match, we can skip it.
+                                */
+                               *end = tag_start;
+                       }
+                       else
+                       {
+                               /* 'region' has not already been scanned completely, so
+                                * 'end' is most probably in an old match that must be
+                                * removed.
+                                */
+                               *end = tag_end;
+                       }
+
+                       if (region != NULL)
+                       {
+                               gtk_text_region_destroy (region, TRUE);
+                       }
                }
        }
+
+       DEBUG ({
+               g_print ("adjust_subregion(), after adjusting: [%u (%u), %u (%u)]\n",
+                        gtk_text_iter_get_line (start), gtk_text_iter_get_offset (start),
+                        gtk_text_iter_get_line (end), gtk_text_iter_get_offset (end));
+       });
 }
 
 static void
@@ -434,20 +479,8 @@ scan_subregion (GtkSourceSearch *search,
        text_tag_set_highest_priority (search->priv->found_tag,
                                       search->priv->buffer);
 
-       /*
-       g_print ("scan_subregion(), before adjusting: [%u (%u), %u (%u)]\n",
-                gtk_text_iter_get_line (start), gtk_text_iter_get_offset (start),
-                gtk_text_iter_get_line (end), gtk_text_iter_get_offset (end));
-       */
-
        adjust_subregion (search, start, end);
 
-       /*
-       g_print ("scan_subregion(), after adjusting: [%u (%u), %u (%u)]\n",
-                gtk_text_iter_get_line (start), gtk_text_iter_get_offset (start),
-                gtk_text_iter_get_line (end), gtk_text_iter_get_offset (end));
-       */
-
        gtk_text_buffer_remove_tag (search->priv->buffer,
                                    search->priv->found_tag,
                                    start,
@@ -460,17 +493,17 @@ scan_subregion (GtkSourceSearch *search,
 
        if (search->priv->region_to_scan != NULL)
        {
-               /*
-               g_print ("Region to scan, before:\n");
-               gtk_text_region_debug_print (search->priv->region_to_scan);
-               */
+               DEBUG ({
+                       g_print ("Region to scan, before:\n");
+                       gtk_text_region_debug_print (search->priv->region_to_scan);
+               });
 
                gtk_text_region_subtract (search->priv->region_to_scan, start, end);
 
-               /*
-               g_print ("Region to scan, after:\n");
-               gtk_text_region_debug_print (search->priv->region_to_scan);
-               */
+               DEBUG ({
+                       g_print ("Region to scan, after:\n");
+                       gtk_text_region_debug_print (search->priv->region_to_scan);
+               });
        }
 
        if (search->priv->text == NULL)
@@ -643,28 +676,28 @@ add_subregion_to_scan (GtkSourceSearch   *search,
 
        if (search->priv->region_to_scan == NULL)
        {
-               return;
+               search->priv->region_to_scan = gtk_text_region_new (search->priv->buffer);
        }
 
-       if (!gtk_text_iter_starts_line (&start))
-       {
-               gtk_text_iter_set_line_offset (&start, 0);
-       }
-
-       if (!gtk_text_iter_ends_line (&end))
-       {
-               gtk_text_iter_forward_to_line_end (&end);
-       }
+       DEBUG ({
+               g_print ("add_subregion_to_scan(): region to scan, before:\n");
+               gtk_text_region_debug_print (search->priv->region_to_scan);
+       });
 
        gtk_text_region_add (search->priv->region_to_scan, &start, &end);
 
+       DEBUG ({
+               g_print ("add_subregion_to_scan(): region to scan, after:\n");
+               gtk_text_region_debug_print (search->priv->region_to_scan);
+       });
+
        install_idle_scan (search);
 
        /* The highlighting can be modified a bit backward and forward the
         * region.
         */
-       gtk_text_iter_backward_lines (&start, search->priv->text_nb_lines - 1);
-       gtk_text_iter_forward_lines (&end, search->priv->text_nb_lines - 1);
+       gtk_text_iter_backward_lines (&start, search->priv->text_nb_lines);
+       gtk_text_iter_forward_lines (&end, search->priv->text_nb_lines);
 
        g_signal_emit_by_name (search->priv->buffer, "highlight-updated", &start, &end);
 }
@@ -708,6 +741,18 @@ insert_text_before_cb (GtkSourceSearch *search,
                return;
        }
 
+       DEBUG ({
+               g_print ("insert_text_before_cb(): region to scan:\n");
+               if (search->priv->region_to_scan != NULL)
+               {
+                       gtk_text_region_debug_print (search->priv->region_to_scan);
+               }
+               else
+               {
+                       g_print ("empty\n");
+               }
+       });
+
        adjust_subregion (search, &start, &end);
 
        iter = start;


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