[gtksourceview/wip/search] search: fix a unit test
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/search] search: fix a unit test
- Date: Sat, 22 Jun 2013 19:23:22 +0000 (UTC)
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]