1 /* GRegex -- regular expression API wrapper around PCRE.
2  *
3  * Copyright (C) 1999, 2000 Scott Wimer
4  * Copyright (C) 2004, Matthias Clasen <mclasen@redhat.com>
5  * Copyright (C) 2005 - 2007, Marco Barisione <marco@barisione.org>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21 
22 #ifndef __G_REGEX_H__
23 #define __G_REGEX_H__
24 
25 #include <glib/gerror.h>
26 #include <glib/gstring.h>
27 
28 G_BEGIN_DECLS
29 
30 typedef enum
31 {
32   G_REGEX_ERROR_COMPILE,
33   G_REGEX_ERROR_OPTIMIZE,
34   G_REGEX_ERROR_REPLACE,
35   G_REGEX_ERROR_MATCH
36 } GRegexError;
37 
38 #define G_REGEX_ERROR g_regex_error_quark ()
39 
40 GQuark g_regex_error_quark (void);
41 
42 /* Remember to update G_REGEX_COMPILE_MASK in gregex.c after
43  * adding a new flag. */
44 typedef enum
45 {
46   G_REGEX_CASELESS          = 1 << 0,
47   G_REGEX_MULTILINE         = 1 << 1,
48   G_REGEX_DOTALL            = 1 << 2,
49   G_REGEX_EXTENDED          = 1 << 3,
50   G_REGEX_ANCHORED          = 1 << 4,
51   G_REGEX_DOLLAR_ENDONLY    = 1 << 5,
52   G_REGEX_UNGREEDY          = 1 << 9,
53   G_REGEX_RAW               = 1 << 11,
54   G_REGEX_NO_AUTO_CAPTURE   = 1 << 12,
55   G_REGEX_OPTIMIZE          = 1 << 13,
56   G_REGEX_DUPNAMES          = 1 << 19,
57   G_REGEX_NEWLINE_CR        = 1 << 20,
58   G_REGEX_NEWLINE_LF        = 1 << 21,
59   G_REGEX_NEWLINE_CRLF      = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF
60 } GRegexCompileFlags;
61 
62 /* Remember to update G_REGEX_MATCH_MASK in gregex.c after
63  * adding a new flag. */
64 typedef enum
65 {
66   G_REGEX_MATCH_ANCHORED      = 1 << 4,
67   G_REGEX_MATCH_NOTBOL        = 1 << 7,
68   G_REGEX_MATCH_NOTEOL        = 1 << 8,
69   G_REGEX_MATCH_NOTEMPTY      = 1 << 10,
70   G_REGEX_MATCH_PARTIAL       = 1 << 15,
71   G_REGEX_MATCH_NEWLINE_CR    = 1 << 20,
72   G_REGEX_MATCH_NEWLINE_LF    = 1 << 21,
73   G_REGEX_MATCH_NEWLINE_CRLF  = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF,
74   G_REGEX_MATCH_NEWLINE_ANY   = 1 << 22
75 } GRegexMatchFlags;
76 
77 typedef struct _GRegex		GRegex;
78 typedef struct _GMatchInfo	GMatchInfo;
79 
80 typedef gboolean (*GRegexEvalCallback)		(const GMatchInfo *match_info,
81 						 GString          *result,
82 						 gpointer          user_data);
83 
84 
85 GRegex		 *g_regex_new			(const gchar         *pattern,
86 						 GRegexCompileFlags   compile_options,
87 						 GRegexMatchFlags     match_options,
88 						 GError             **error);
89 GRegex           *g_regex_ref			(GRegex              *regex);
90 void		  g_regex_unref			(GRegex              *regex);
91 const gchar	 *g_regex_get_pattern		(const GRegex        *regex);
92 gint		  g_regex_get_max_backref	(const GRegex        *regex);
93 gint		  g_regex_get_capture_count	(const GRegex        *regex);
94 gint		  g_regex_get_string_number	(const GRegex        *regex,
95 						 const gchar         *name);
96 gchar		 *g_regex_escape_string		(const gchar         *string,
97 						 gint                 length);
98 
99 /* Matching. */
100 gboolean	  g_regex_match_simple		(const gchar         *pattern,
101 						 const gchar         *string,
102 						 GRegexCompileFlags   compile_options,
103 						 GRegexMatchFlags     match_options);
104 gboolean	  g_regex_match			(const GRegex        *regex,
105 						 const gchar         *string,
106 						 GRegexMatchFlags     match_options,
107 						 GMatchInfo         **match_info);
108 gboolean	  g_regex_match_full		(const GRegex        *regex,
109 						 const gchar         *string,
110 						 gssize               string_len,
111 						 gint                 start_position,
112 						 GRegexMatchFlags     match_options,
113 						 GMatchInfo         **match_info,
114 						 GError             **error);
115 gboolean	  g_regex_match_all		(const GRegex        *regex,
116 						 const gchar         *string,
117 						 GRegexMatchFlags     match_options,
118 						 GMatchInfo         **match_info);
119 gboolean	  g_regex_match_all_full	(const GRegex        *regex,
120 						 const gchar         *string,
121 						 gssize               string_len,
122 						 gint                 start_position,
123 						 GRegexMatchFlags     match_options,
124 						 GMatchInfo         **match_info,
125 						 GError             **error);
126 
127 /* String splitting. */
128 gchar		**g_regex_split_simple		(const gchar         *pattern,
129 						 const gchar         *string,
130 						 GRegexCompileFlags   compile_options,
131 						 GRegexMatchFlags     match_options);
132 gchar		**g_regex_split			(const GRegex        *regex,
133 						 const gchar         *string,
134 						 GRegexMatchFlags     match_options);
135 gchar		**g_regex_split_full		(const GRegex        *regex,
136 						 const gchar         *string,
137 						 gssize               string_len,
138 						 gint                 start_position,
139 						 GRegexMatchFlags     match_options,
140 						 gint                 max_tokens,
141 						 GError             **error);
142 
143 /* String replacement. */
144 gchar		 *g_regex_replace		(const GRegex        *regex,
145 						 const gchar         *string,
146 						 gssize               string_len,
147 						 gint                 start_position,
148 						 const gchar         *replacement,
149 						 GRegexMatchFlags     match_options,
150 						 GError             **error);
151 gchar		 *g_regex_replace_literal	(const GRegex        *regex,
152 						 const gchar         *string,
153 						 gssize               string_len,
154 						 gint                 start_position,
155 						 const gchar         *replacement,
156 						 GRegexMatchFlags     match_options,
157 						 GError             **error);
158 gchar		 *g_regex_replace_eval		(const GRegex        *regex,
159 						 const gchar         *string,
160 						 gssize               string_len,
161 						 gint                 start_position,
162 						 GRegexMatchFlags     match_options,
163 						 GRegexEvalCallback   eval,
164 						 gpointer             user_data,
165 						 GError             **error);
166 gboolean	  g_regex_check_replacement	(const gchar         *replacement,
167 						 gboolean            *has_references,
168 						 GError             **error);
169 
170 /* Match info */
171 GRegex		 *g_match_info_get_regex	(const GMatchInfo    *match_info);
172 const gchar      *g_match_info_get_string       (const GMatchInfo    *match_info);
173 
174 void		  g_match_info_free		(GMatchInfo          *match_info);
175 gboolean	  g_match_info_next		(GMatchInfo          *match_info,
176 						 GError             **error);
177 gboolean	  g_match_info_matches		(const GMatchInfo    *match_info);
178 gint		  g_match_info_get_match_count	(const GMatchInfo    *match_info);
179 gboolean	  g_match_info_is_partial_match	(const GMatchInfo    *match_info);
180 gchar		 *g_match_info_expand_references(const GMatchInfo    *match_info,
181 						 const gchar         *string_to_expand,
182 						 GError             **error);
183 gchar		 *g_match_info_fetch		(const GMatchInfo    *match_info,
184 						 gint                 match_num);
185 gboolean	  g_match_info_fetch_pos	(const GMatchInfo    *match_info,
186 						 gint                 match_num,
187 						 gint                *start_pos,
188 						 gint                *end_pos);
189 gchar		 *g_match_info_fetch_named	(const GMatchInfo    *match_info,
190 						 const gchar         *name);
191 gboolean	  g_match_info_fetch_named_pos	(const GMatchInfo    *match_info,
192 						 const gchar         *name,
193 						 gint                *start_pos,
194 						 gint                *end_pos);
195 gchar		**g_match_info_fetch_all	(const GMatchInfo    *match_info);
196 
197 G_END_DECLS
198 
199 
200 #endif  /*  __G_REGEX_H__ */
201