pidgin/gtksourceiter.c

Wed, 18 Sep 2013 12:57:43 +0530

author
Ankit Vani <a@nevitus.org>
date
Wed, 18 Sep 2013 12:57:43 +0530
branch
soc.2013.gobjectification.plugins
changeset 36762
e83ad7c340e7
parent 31306
f316b0972e0f
child 34459
f269ff3e4830
child 35980
b44c08754471
permissions
-rw-r--r--

Merged soc.2013.gobjectification branch

25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
2 * gtksourceiter.c
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
3 *
15931
716b5fac1895 Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
4 * Pidgin is the legal property of its developers, whose names are too numerous
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7358
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7358
diff changeset
6 * source distribution.
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
7 *
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
8 * The following copyright notice applies to this file:
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
9 *
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
10 * Copyright (C) 2000 - 2005 Paolo Maggi
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
11 * Copyright (C) 2002, 2003 Jeroen Zwartepoorte
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
12 *
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
13 * This program is free software; you can redistribute it and/or modify
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
14 * it under the terms of the GNU Library General Public License as published by
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
15 * the Free Software Foundation; either version 2 of the License, or
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
16 * (at your option) any later version.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
17 *
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
18 * This program is distributed in the hope that it will be useful,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
21 * GNU Library General Public License for more details.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
22 *
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
23 * You should have received a copy of the GNU Library General Public License
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
24 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 15931
diff changeset
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA.
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
26 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
27
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
28 /*
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
29 * Parts of this file are copied from the gedit and glimmer project.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
30 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
31
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
32 #ifdef HAVE_CONFIG_H
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
33 #include <config.h>
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
34 #endif
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
35
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
36 #include <string.h>
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
37 #include "gtksourceiter.h"
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
38
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
39 #define GTK_TEXT_UNKNOWN_CHAR 0xFFFC
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
40
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
41 /* this function acts like g_utf8_offset_to_pointer() except that if it finds a
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
42 * decomposable character it consumes the decomposition length from the given
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
43 * offset. So it's useful when the offset was calculated for the normalized
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
44 * version of str, but we need a pointer to str itself. */
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
45 static const gchar *
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
46 pointer_from_offset_skipping_decomp (const gchar *str, gint offset)
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
47 {
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
48 gchar *casefold, *normal;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
49 const gchar *p, *q;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
50
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
51 p = str;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
52 while (offset > 0)
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
53 {
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
54 q = g_utf8_next_char (p);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
55 casefold = g_utf8_casefold (p, q - p);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
56 normal = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
57 offset -= g_utf8_strlen (normal, -1);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
58 g_free (casefold);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
59 g_free (normal);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
60 p = q;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
61 }
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
62 return p;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
63 }
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
64
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
65 static const gchar *
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
66 g_utf8_strcasestr (const gchar *haystack, const gchar *needle)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
67 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
68 gsize needle_len;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
69 gsize haystack_len;
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
70 const gchar *ret = NULL;
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
71 gchar *p;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
72 gchar *casefold;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
73 gchar *caseless_haystack;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
74 gint i;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
75
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
76 g_return_val_if_fail (haystack != NULL, NULL);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
77 g_return_val_if_fail (needle != NULL, NULL);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
78
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
79 casefold = g_utf8_casefold (haystack, -1);
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
80 caseless_haystack = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
81 g_free (casefold);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
82
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
83 needle_len = g_utf8_strlen (needle, -1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
84 haystack_len = g_utf8_strlen (caseless_haystack, -1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
85
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
86 if (needle_len == 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
87 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
88 ret = (gchar *)haystack;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
89 goto finally_1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
90 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
91
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
92 if (haystack_len < needle_len)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
93 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
94 ret = NULL;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
95 goto finally_1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
96 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
97
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
98 p = (gchar*)caseless_haystack;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
99 needle_len = strlen (needle);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
100 i = 0;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
101
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
102 while (*p)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
103 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
104 if ((strncmp (p, needle, needle_len) == 0))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
105 {
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
106 ret = pointer_from_offset_skipping_decomp (haystack, i);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
107 goto finally_1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
108 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
109
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
110 p = g_utf8_next_char (p);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
111 i++;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
112 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
113
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
114 finally_1:
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
115 g_free (caseless_haystack);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
116
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
117 return ret;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
118 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
119
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
120 static const gchar *
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
121 g_utf8_strrcasestr (const gchar *haystack, const gchar *needle)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
122 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
123 gsize needle_len;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
124 gsize haystack_len;
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
125 const gchar *ret = NULL;
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
126 gchar *p;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
127 gchar *casefold;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
128 gchar *caseless_haystack;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
129 gint i;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
130
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
131 g_return_val_if_fail (haystack != NULL, NULL);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
132 g_return_val_if_fail (needle != NULL, NULL);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
133
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
134 casefold = g_utf8_casefold (haystack, -1);
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
135 caseless_haystack = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
136 g_free (casefold);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
137
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
138 needle_len = g_utf8_strlen (needle, -1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
139 haystack_len = g_utf8_strlen (caseless_haystack, -1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
140
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
141 if (needle_len == 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
142 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
143 ret = (gchar *)haystack;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
144 goto finally_1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
145 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
146
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
147 if (haystack_len < needle_len)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
148 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
149 ret = NULL;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
150 goto finally_1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
151 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
152
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
153 i = haystack_len - needle_len;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
154 p = g_utf8_offset_to_pointer (caseless_haystack, i);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
155 needle_len = strlen (needle);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
156
31306
f316b0972e0f gtksourceiter: Fix a few memory leaks in our bundled copy of this widget. Refs #13162.
Nader Morshed <morshed.nader@gmail.com>
parents: 25888
diff changeset
157 while (1)
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
158 {
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
159 if (strncmp (p, needle, needle_len) == 0)
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
160 {
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
161 ret = pointer_from_offset_skipping_decomp (haystack, i);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
162 goto finally_1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
163 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
164
31306
f316b0972e0f gtksourceiter: Fix a few memory leaks in our bundled copy of this widget. Refs #13162.
Nader Morshed <morshed.nader@gmail.com>
parents: 25888
diff changeset
165 if (p > caseless_haystack)
f316b0972e0f gtksourceiter: Fix a few memory leaks in our bundled copy of this widget. Refs #13162.
Nader Morshed <morshed.nader@gmail.com>
parents: 25888
diff changeset
166 p = g_utf8_prev_char (p);
f316b0972e0f gtksourceiter: Fix a few memory leaks in our bundled copy of this widget. Refs #13162.
Nader Morshed <morshed.nader@gmail.com>
parents: 25888
diff changeset
167 else
f316b0972e0f gtksourceiter: Fix a few memory leaks in our bundled copy of this widget. Refs #13162.
Nader Morshed <morshed.nader@gmail.com>
parents: 25888
diff changeset
168 goto finally_1;
f316b0972e0f gtksourceiter: Fix a few memory leaks in our bundled copy of this widget. Refs #13162.
Nader Morshed <morshed.nader@gmail.com>
parents: 25888
diff changeset
169
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
170 i--;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
171 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
172
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
173 finally_1:
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
174 g_free (caseless_haystack);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
175
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
176 return ret;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
177 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
178
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
179 static gboolean
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
180 g_utf8_caselessnmatch (const char *s1, const char *s2,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
181 gssize n1, gssize n2)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
182 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
183 gchar *casefold;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
184 gchar *normalized_s1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
185 gchar *normalized_s2;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
186 gint len_s1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
187 gint len_s2;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
188 gboolean ret = FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
189
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
190 g_return_val_if_fail (s1 != NULL, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
191 g_return_val_if_fail (s2 != NULL, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
192 g_return_val_if_fail (n1 > 0, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
193 g_return_val_if_fail (n2 > 0, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
194
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
195 casefold = g_utf8_casefold (s1, n1);
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
196 normalized_s1 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
197 g_free (casefold);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
198
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
199 casefold = g_utf8_casefold (s2, n2);
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
200 normalized_s2 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
201 g_free (casefold);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
202
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
203 len_s1 = strlen (normalized_s1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
204 len_s2 = strlen (normalized_s2);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
205
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
206 if (len_s1 < len_s2)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
207 goto finally_2;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
208
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
209 ret = (strncmp (normalized_s1, normalized_s2, len_s2) == 0);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
210
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
211 finally_2:
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
212 g_free (normalized_s1);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
213 g_free (normalized_s2);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
214
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
215 return ret;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
216 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
217
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
218 static void
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
219 forward_chars_with_skipping (GtkTextIter *iter,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
220 gint count,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
221 gboolean skip_invisible,
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
222 gboolean skip_nontext,
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
223 gboolean skip_decomp)
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
224 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
225 gint i;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
226
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
227 g_return_if_fail (count >= 0);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
228
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
229 i = count;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
230
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
231 while (i > 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
232 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
233 gboolean ignored = FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
234
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
235 /* minimal workaround to avoid the infinite loop of bug #168247.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
236 * It doesn't fix the problemjust the symptom...
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
237 */
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
238 if (gtk_text_iter_is_end (iter))
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
239 return;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
240
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
241 if (skip_nontext && gtk_text_iter_get_char (iter) == GTK_TEXT_UNKNOWN_CHAR)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
242 ignored = TRUE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
243
12205
1b0471533cf5 [gaim-migrate @ 14507]
Richard Laager <rlaager@pidgin.im>
parents: 10297
diff changeset
244 #if 0
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
245 if (!ignored && skip_invisible &&
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
246 /* _gtk_text_btree_char_is_invisible (iter)*/ FALSE)
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
247 ignored = TRUE;
12205
1b0471533cf5 [gaim-migrate @ 14507]
Richard Laager <rlaager@pidgin.im>
parents: 10297
diff changeset
248 #endif
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
249
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
250 if (!ignored && skip_decomp)
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
251 {
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
252 /* being UTF8 correct sucks; this accounts for extra
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
253 offsets coming from canonical decompositions of
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
254 UTF8 characters (e.g. accented characters) which
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
255 g_utf8_normalize() performs */
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
256 gchar *normal;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
257 gchar buffer[6];
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
258 gint buffer_len;
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
259
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
260 buffer_len = g_unichar_to_utf8 (gtk_text_iter_get_char (iter), buffer);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
261 normal = g_utf8_normalize (buffer, buffer_len, G_NORMALIZE_NFD);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
262 i -= (g_utf8_strlen (normal, -1) - 1);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
263 g_free (normal);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
264 }
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
265
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
266 gtk_text_iter_forward_char (iter);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
267
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
268 if (!ignored)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
269 --i;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
270 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
271 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
272
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
273 static gboolean
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
274 lines_match (const GtkTextIter *start,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
275 const gchar **lines,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
276 gboolean visible_only,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
277 gboolean slice,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
278 GtkTextIter *match_start,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
279 GtkTextIter *match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
280 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
281 GtkTextIter next;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
282 gchar *line_text;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
283 const gchar *found;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
284 gint offset;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
285
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
286 if (*lines == NULL || **lines == '\0')
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
287 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
288 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
289 *match_start = *start;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
290 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
291 *match_end = *start;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
292 return TRUE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
293 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
294
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
295 next = *start;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
296 gtk_text_iter_forward_line (&next);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
297
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
298 /* No more text in buffer, but *lines is nonempty */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
299 if (gtk_text_iter_equal (start, &next))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
300 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
301
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
302 if (slice)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
303 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
304 if (visible_only)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
305 line_text = gtk_text_iter_get_visible_slice (start, &next);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
306 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
307 line_text = gtk_text_iter_get_slice (start, &next);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
308 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
309 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
310 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
311 if (visible_only)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
312 line_text = gtk_text_iter_get_visible_text (start, &next);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
313 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
314 line_text = gtk_text_iter_get_text (start, &next);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
315 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
316
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
317 if (match_start) /* if this is the first line we're matching */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
318 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
319 found = g_utf8_strcasestr (line_text, *lines);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
320 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
321 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
322 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
323 /* If it's not the first line, we have to match from the
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
324 * start of the line.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
325 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
326 if (g_utf8_caselessnmatch (line_text, *lines, strlen (line_text),
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
327 strlen (*lines)))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
328 found = line_text;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
329 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
330 found = NULL;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
331 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
332
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
333 if (found == NULL)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
334 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
335 g_free (line_text);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
336 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
337 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
338
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
339 /* Get offset to start of search string */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
340 offset = g_utf8_strlen (line_text, found - line_text);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
341
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
342 next = *start;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
343
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
344 /* If match start needs to be returned, set it to the
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
345 * start of the search string.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
346 */
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
347 forward_chars_with_skipping (&next, offset, visible_only, !slice, FALSE);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
348 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
349 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
350 *match_start = next;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
351 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
352
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
353 /* Go to end of search string */
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
354 forward_chars_with_skipping (&next, g_utf8_strlen (*lines, -1), visible_only, !slice, TRUE);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
355
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
356 g_free (line_text);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
357
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
358 ++lines;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
359
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
360 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
361 *match_end = next;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
362
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
363 /* pass NULL for match_start, since we don't need to find the
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
364 * start again.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
365 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
366 return lines_match (&next, lines, visible_only, slice, NULL, match_end);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
367 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
368
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
369 static gboolean
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
370 backward_lines_match (const GtkTextIter *start,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
371 const gchar **lines,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
372 gboolean visible_only,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
373 gboolean slice,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
374 GtkTextIter *match_start,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
375 GtkTextIter *match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
376 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
377 GtkTextIter line, next;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
378 gchar *line_text;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
379 const gchar *found;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
380 gint offset;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
381
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
382 if (*lines == NULL || **lines == '\0')
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
383 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
384 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
385 *match_start = *start;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
386 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
387 *match_end = *start;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
388 return TRUE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
389 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
390
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
391 line = next = *start;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
392 if (gtk_text_iter_get_line_offset (&next) == 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
393 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
394 if (!gtk_text_iter_backward_line (&next))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
395 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
396 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
397 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
398 gtk_text_iter_set_line_offset (&next, 0);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
399
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
400 if (slice)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
401 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
402 if (visible_only)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
403 line_text = gtk_text_iter_get_visible_slice (&next, &line);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
404 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
405 line_text = gtk_text_iter_get_slice (&next, &line);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
406 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
407 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
408 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
409 if (visible_only)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
410 line_text = gtk_text_iter_get_visible_text (&next, &line);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
411 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
412 line_text = gtk_text_iter_get_text (&next, &line);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
413 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
414
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
415 if (match_start) /* if this is the first line we're matching */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
416 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
417 found = g_utf8_strrcasestr (line_text, *lines);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
418 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
419 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
420 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
421 /* If it's not the first line, we have to match from the
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
422 * start of the line.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
423 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
424 if (g_utf8_caselessnmatch (line_text, *lines, strlen (line_text),
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
425 strlen (*lines)))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
426 found = line_text;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
427 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
428 found = NULL;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
429 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
430
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
431 if (found == NULL)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
432 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
433 g_free (line_text);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
434 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
435 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
436
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
437 /* Get offset to start of search string */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
438 offset = g_utf8_strlen (line_text, found - line_text);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
439
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
440 forward_chars_with_skipping (&next, offset, visible_only, !slice, FALSE);
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
441
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
442 /* If match start needs to be returned, set it to the
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
443 * start of the search string.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
444 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
445 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
446 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
447 *match_start = next;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
448 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
449
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
450 /* Go to end of search string */
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
451 forward_chars_with_skipping (&next, g_utf8_strlen (*lines, -1), visible_only, !slice, TRUE);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
452
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
453 g_free (line_text);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
454
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
455 ++lines;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
456
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
457 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
458 *match_end = next;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
459
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
460 /* try to match the rest of the lines forward, passing NULL
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
461 * for match_start so lines_match will try to match the entire
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
462 * line */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
463 return lines_match (&next, lines, visible_only,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
464 slice, NULL, match_end);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
465 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
466
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
467 /* strsplit () that retains the delimiter as part of the string. */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
468 static gchar **
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
469 strbreakup (const char *string,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
470 const char *delimiter,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
471 gint max_tokens)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
472 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
473 GSList *string_list = NULL, *slist;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
474 gchar **str_array, *s, *casefold, *new_string;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
475 guint i, n = 1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
476
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
477 g_return_val_if_fail (string != NULL, NULL);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
478 g_return_val_if_fail (delimiter != NULL, NULL);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
479
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
480 if (max_tokens < 1)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
481 max_tokens = G_MAXINT;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
482
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
483 s = strstr (string, delimiter);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
484 if (s)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
485 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
486 guint delimiter_len = strlen (delimiter);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
487
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
488 do
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
489 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
490 guint len;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
491
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
492 len = s - string + delimiter_len;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
493 new_string = g_new (gchar, len + 1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
494 strncpy (new_string, string, len);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
495 new_string[len] = 0;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
496 casefold = g_utf8_casefold (new_string, -1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
497 g_free (new_string);
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
498 new_string = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
499 g_free (casefold);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
500 string_list = g_slist_prepend (string_list, new_string);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
501 n++;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
502 string = s + delimiter_len;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
503 s = strstr (string, delimiter);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
504 } while (--max_tokens && s);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
505 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
506
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
507 if (*string)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
508 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
509 n++;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
510 casefold = g_utf8_casefold (string, -1);
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
511 new_string = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
512 g_free (casefold);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
513 string_list = g_slist_prepend (string_list, new_string);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
514 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
515
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
516 str_array = g_new (gchar*, n);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
517
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
518 i = n - 1;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
519
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
520 str_array[i--] = NULL;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
521 for (slist = string_list; slist; slist = slist->next)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
522 str_array[i--] = slist->data;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
523
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
524 g_slist_free (string_list);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
525
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
526 return str_array;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
527 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
528
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
529 /**
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
530 * gtk_source_iter_forward_search:
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
531 * @iter: start of search.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
532 * @str: a search string.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
533 * @flags: flags affecting how the search is done.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
534 * @match_start: return location for start of match, or %%NULL.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
535 * @match_end: return location for end of match, or %%NULL.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
536 * @limit: bound for the search, or %%NULL for the end of the buffer.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
537 *
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
538 * Searches forward for @str. Any match is returned by setting
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
539 * @match_start to the first character of the match and @match_end to the
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
540 * first character after the match. The search will not continue past
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
541 * @limit. Note that a search is a linear or O(n) operation, so you
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
542 * may wish to use @limit to avoid locking up your UI on large
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
543 * buffers.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
544 *
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
545 * If the #GTK_SOURCE_SEARCH_VISIBLE_ONLY flag is present, the match may
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
546 * have invisible text interspersed in @str. i.e. @str will be a
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
547 * possibly-noncontiguous subsequence of the matched range. similarly,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
548 * if you specify #GTK_SOURCE_SEARCH_TEXT_ONLY, the match may have
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
549 * pixbufs or child widgets mixed inside the matched range. If these
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
550 * flags are not given, the match must be exact; the special 0xFFFC
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
551 * character in @str will match embedded pixbufs or child widgets.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
552 * If you specify the #GTK_SOURCE_SEARCH_CASE_INSENSITIVE flag, the text will
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
553 * be matched regardless of what case it is in.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
554 *
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
555 * Same as gtk_text_iter_forward_search(), but supports case insensitive
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
556 * searching.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
557 *
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
558 * Return value: whether a match was found.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
559 **/
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
560 gboolean
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
561 gtk_source_iter_forward_search (const GtkTextIter *iter,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
562 const gchar *str,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
563 GtkSourceSearchFlags flags,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
564 GtkTextIter *match_start,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
565 GtkTextIter *match_end,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
566 const GtkTextIter *limit)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
567 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
568 gchar **lines = NULL;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
569 GtkTextIter match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
570 gboolean retval = FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
571 GtkTextIter search;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
572 gboolean visible_only;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
573 gboolean slice;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
574
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
575 g_return_val_if_fail (iter != NULL, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
576 g_return_val_if_fail (str != NULL, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
577
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
578 if ((flags & GTK_SOURCE_SEARCH_CASE_INSENSITIVE) == 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
579 return gtk_text_iter_forward_search (iter, str, flags,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
580 match_start, match_end,
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
581 limit);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
582
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
583 if (limit && gtk_text_iter_compare (iter, limit) >= 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
584 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
585
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
586 if (*str == '\0')
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
587 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
588 /* If we can move one char, return the empty string there */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
589 match = *iter;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
590
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
591 if (gtk_text_iter_forward_char (&match))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
592 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
593 if (limit && gtk_text_iter_equal (&match, limit))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
594 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
595
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
596 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
597 *match_start = match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
598 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
599 *match_end = match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
600 return TRUE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
601 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
602 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
603 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
604 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
605 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
606 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
607
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
608 visible_only = (flags & GTK_SOURCE_SEARCH_VISIBLE_ONLY) != 0;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
609 slice = (flags & GTK_SOURCE_SEARCH_TEXT_ONLY) == 0;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
610
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
611 /* locate all lines */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
612 lines = strbreakup (str, "\n", -1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
613
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
614 search = *iter;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
615
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
616 do
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
617 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
618 /* This loop has an inefficient worst-case, where
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
619 * gtk_text_iter_get_text () is called repeatedly on
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
620 * a single line.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
621 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
622 GtkTextIter end;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
623
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
624 if (limit && gtk_text_iter_compare (&search, limit) >= 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
625 break;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
626
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
627 if (lines_match (&search, (const gchar**)lines,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
628 visible_only, slice, &match, &end))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
629 {
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
630 if (limit == NULL ||
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
631 (limit && gtk_text_iter_compare (&end, limit) <= 0))
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
632 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
633 retval = TRUE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
634
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
635 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
636 *match_start = match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
637 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
638 *match_end = end;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
639 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
640 break;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
641 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
642 } while (gtk_text_iter_forward_line (&search));
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
643
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
644 g_strfreev ((gchar**)lines);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
645
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
646 return retval;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
647 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
648
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
649 /**
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
650 * gtk_source_iter_backward_search:
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
651 * @iter: a #GtkTextIter where the search begins.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
652 * @str: search string.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
653 * @flags: bitmask of flags affecting the search.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
654 * @match_start: return location for start of match, or %%NULL.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
655 * @match_end: return location for end of match, or %%NULL.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
656 * @limit: location of last possible @match_start, or %%NULL for start of buffer.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
657 *
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
658 * Same as gtk_text_iter_backward_search(), but supports case insensitive
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
659 * searching.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
660 *
12465
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
661 * Return value: whether a match was found.
59859abbe998 [gaim-migrate @ 14775]
Peter Lawler <pidgin@bleeter.id.au>
parents: 12205
diff changeset
662 **/
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
663 gboolean
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
664 gtk_source_iter_backward_search (const GtkTextIter *iter,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
665 const gchar *str,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
666 GtkSourceSearchFlags flags,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
667 GtkTextIter *match_start,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
668 GtkTextIter *match_end,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
669 const GtkTextIter *limit)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
670 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
671 gchar **lines = NULL;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
672 GtkTextIter match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
673 gboolean retval = FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
674 GtkTextIter search;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
675 gboolean visible_only;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
676 gboolean slice;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
677
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
678 g_return_val_if_fail (iter != NULL, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
679 g_return_val_if_fail (str != NULL, FALSE);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
680
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
681 if ((flags & GTK_SOURCE_SEARCH_CASE_INSENSITIVE) == 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
682 return gtk_text_iter_backward_search (iter, str, flags,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
683 match_start, match_end,
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
684 limit);
7358
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
685
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
686 if (limit && gtk_text_iter_compare (iter, limit) <= 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
687 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
688
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
689 if (*str == '\0')
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
690 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
691 /* If we can move one char, return the empty string there */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
692 match = *iter;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
693
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
694 if (gtk_text_iter_backward_char (&match))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
695 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
696 if (limit && gtk_text_iter_equal (&match, limit))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
697 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
698
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
699 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
700 *match_start = match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
701 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
702 *match_end = match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
703 return TRUE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
704 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
705 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
706 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
707 return FALSE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
708 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
709 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
710
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
711 visible_only = (flags & GTK_SOURCE_SEARCH_VISIBLE_ONLY) != 0;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
712 slice = (flags & GTK_SOURCE_SEARCH_TEXT_ONLY) == 0;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
713
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
714 /* locate all lines */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
715 lines = strbreakup (str, "\n", -1);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
716
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
717 search = *iter;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
718
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
719 while (TRUE)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
720 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
721 /* This loop has an inefficient worst-case, where
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
722 * gtk_text_iter_get_text () is called repeatedly on
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
723 * a single line.
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
724 */
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
725 GtkTextIter end;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
726
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
727 if (limit && gtk_text_iter_compare (&search, limit) <= 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
728 break;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
729
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
730 if (backward_lines_match (&search, (const gchar**)lines,
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
731 visible_only, slice, &match, &end))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
732 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
733 if (limit == NULL || (limit &&
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
734 gtk_text_iter_compare (&end, limit) > 0))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
735 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
736 retval = TRUE;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
737
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
738 if (match_start)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
739 *match_start = match;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
740 if (match_end)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
741 *match_end = end;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
742 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
743 break;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
744 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
745
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
746 if (gtk_text_iter_get_line_offset (&search) == 0)
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
747 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
748 if (!gtk_text_iter_backward_line (&search))
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
749 break;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
750 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
751 else
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
752 {
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
753 gtk_text_iter_set_line_offset (&search, 0);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
754 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
755 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
756
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
757 g_strfreev ((gchar**)lines);
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
758
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
759 return retval;
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
760 }
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
761
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
762 /*
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
763 * gtk_source_iter_find_matching_bracket is implemented in gtksourcebuffer.c
129ed09d791d [gaim-migrate @ 7951]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
764 */

mercurial