Skip to content

Commit 239f0d3

Browse files
committed
Fix search backwards with regex
Fixes #322
1 parent 813e1ff commit 239f0d3

File tree

2 files changed

+25
-34
lines changed

2 files changed

+25
-34
lines changed

pluma/pluma-document.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2113,7 +2113,7 @@ pluma_document_search_backward (PlumaDocument *doc,
21132113
search_flags,
21142114
&m_start,
21152115
&m_end,
2116-
end,
2116+
start,
21172117
FALSE,
21182118
&doc->priv->last_replace_text);
21192119
}

pluma/pluma-utils.c

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,54 +1570,55 @@ pluma_gtk_text_iter_regex_search (const GtkTextIter *iter,
15701570
gchar *text;
15711571
GtkTextIter *begin_iter;
15721572
GtkTextIter *end_iter;
1573-
gchar **all_matches;
15741573
gchar *match_string;
15751574
gboolean found;
1576-
gint non_null_result_number;
1577-
gboolean non_null_result_found;
1578-
guint result_size;
1579-
1575+
1576+
match_string = "";
15801577
compile_flags = 0;
1578+
15811579
if ((flags & GTK_TEXT_SEARCH_CASE_INSENSITIVE) != 0)
1582-
compile_flags |= G_REGEX_CASELESS;
1580+
compile_flags |= G_REGEX_CASELESS;
15831581

15841582
regex = g_regex_new (str,compile_flags,0,NULL);
1583+
15851584
if (regex == NULL)
15861585
return FALSE;
15871586

1588-
begin_iter = gtk_text_iter_copy (iter);
1587+
begin_iter = gtk_text_iter_copy (iter);
1588+
15891589
if (limit == NULL)
15901590
{
1591-
end_iter = gtk_text_iter_copy (begin_iter);
1592-
if (forward_search)
1591+
end_iter = gtk_text_iter_copy (begin_iter);
1592+
if (forward_search)
15931593
{
1594-
gtk_text_buffer_get_end_iter (gtk_text_iter_get_buffer(begin_iter),
1595-
end_iter);
1594+
gtk_text_buffer_get_end_iter (gtk_text_iter_get_buffer(begin_iter),
1595+
end_iter);
15961596
}
15971597
else
15981598
{
1599-
gtk_text_buffer_get_start_iter (gtk_text_iter_get_buffer (begin_iter),
1600-
end_iter);
1599+
gtk_text_buffer_get_start_iter (gtk_text_iter_get_buffer (begin_iter),
1600+
end_iter);
16011601
}
16021602
}
16031603
else
16041604
{
1605-
end_iter = gtk_text_iter_copy (limit);
1605+
end_iter = gtk_text_iter_copy (limit);
16061606
}
16071607

16081608
if ((flags & GTK_TEXT_SEARCH_TEXT_ONLY) != 0)
16091609
{
16101610
if ((flags & GTK_TEXT_SEARCH_VISIBLE_ONLY) != 0)
1611-
text = gtk_text_iter_get_visible_text (begin_iter, end_iter);
1611+
text = gtk_text_iter_get_visible_text (begin_iter, end_iter);
16121612
else
1613-
text = gtk_text_iter_get_text (begin_iter, end_iter);
1613+
text = gtk_text_iter_get_text (begin_iter, end_iter);
16141614
}
16151615
else if ((flags & GTK_TEXT_SEARCH_VISIBLE_ONLY) != 0)
16161616
text = gtk_text_iter_get_visible_slice (begin_iter, end_iter);
16171617
else
16181618
text = gtk_text_iter_get_slice (begin_iter, end_iter);
16191619

16201620
found = g_regex_match (regex, text, 0, &match_info);
1621+
16211622
if (!found)
16221623
goto free_resources;
16231624

@@ -1627,28 +1628,18 @@ pluma_gtk_text_iter_regex_search (const GtkTextIter *iter,
16271628
*replace_text,
16281629
NULL);
16291630
}
1630-
all_matches = g_match_info_fetch_all (match_info);
1631-
1632-
result_size = (gint) g_strv_length (all_matches);
1633-
non_null_result_number = (forward_search) ? 0 : (result_size -1);
16341631

1635-
non_null_result_found = FALSE;
1636-
while((non_null_result_number >= 0)
1637-
&& (non_null_result_number < result_size) )
1632+
while (g_match_info_matches (match_info))
16381633
{
1639-
non_null_result_found = g_utf8_strlen (all_matches [non_null_result_number], G_MAXSSIZE) != 0;
1640-
if (non_null_result_found)
1634+
match_string = g_match_info_fetch (match_info, 0);
1635+
1636+
if (forward_search)
16411637
break;
16421638

1643-
non_null_result_number += (forward_search) ? 1 : -1;
1639+
g_match_info_next (match_info, NULL);
16441640
}
16451641

1646-
if(!non_null_result_found) {
1647-
found = FALSE;
1648-
goto free_resources;
1649-
}
16501642

1651-
match_string = all_matches [non_null_result_number];
16521643
if (forward_search)
16531644
{
16541645
gtk_text_iter_forward_search (begin_iter,
@@ -1667,8 +1658,8 @@ pluma_gtk_text_iter_regex_search (const GtkTextIter *iter,
16671658
}
16681659

16691660
free_resources:
1670-
gtk_text_iter_free (begin_iter);
1671-
gtk_text_iter_free (end_iter);
1661+
gtk_text_iter_free (begin_iter);
1662+
gtk_text_iter_free (end_iter);
16721663
g_match_info_free (match_info);
16731664
g_regex_unref (regex);
16741665
return found;

0 commit comments

Comments
 (0)