Initial commit
[platform/upstream/glib2.0.git] / glib / gregex.h
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 #if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
23 #error "Only <glib.h> can be included directly."
24 #endif
25
26 #ifndef __G_REGEX_H__
27 #define __G_REGEX_H__
28
29 #include <glib/gerror.h>
30 #include <glib/gstring.h>
31
32 G_BEGIN_DECLS
33
34 typedef enum
35 {
36   G_REGEX_ERROR_COMPILE,
37   G_REGEX_ERROR_OPTIMIZE,
38   G_REGEX_ERROR_REPLACE,
39   G_REGEX_ERROR_MATCH,
40   G_REGEX_ERROR_INTERNAL,
41
42   /* These are the error codes from PCRE + 100 */
43   G_REGEX_ERROR_STRAY_BACKSLASH = 101,
44   G_REGEX_ERROR_MISSING_CONTROL_CHAR = 102,
45   G_REGEX_ERROR_UNRECOGNIZED_ESCAPE = 103,
46   G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER = 104,
47   G_REGEX_ERROR_QUANTIFIER_TOO_BIG = 105,
48   G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS = 106,
49   G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS = 107,
50   G_REGEX_ERROR_RANGE_OUT_OF_ORDER = 108,
51   G_REGEX_ERROR_NOTHING_TO_REPEAT = 109,
52   G_REGEX_ERROR_UNRECOGNIZED_CHARACTER = 112,
53   G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS = 113,
54   G_REGEX_ERROR_UNMATCHED_PARENTHESIS = 114,
55   G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE = 115,
56   G_REGEX_ERROR_UNTERMINATED_COMMENT = 118,
57   G_REGEX_ERROR_EXPRESSION_TOO_LARGE = 120,
58   G_REGEX_ERROR_MEMORY_ERROR = 121,
59   G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND = 125,
60   G_REGEX_ERROR_MALFORMED_CONDITION = 126,
61   G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES = 127,
62   G_REGEX_ERROR_ASSERTION_EXPECTED = 128,
63   G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME = 130,
64   G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED = 131,
65   G_REGEX_ERROR_HEX_CODE_TOO_LARGE = 134,
66   G_REGEX_ERROR_INVALID_CONDITION = 135,
67   G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND = 136,
68   G_REGEX_ERROR_INFINITE_LOOP = 140,
69   G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR = 142,
70   G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME = 143,
71   G_REGEX_ERROR_MALFORMED_PROPERTY = 146,
72   G_REGEX_ERROR_UNKNOWN_PROPERTY = 147,
73   G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG = 148,
74   G_REGEX_ERROR_TOO_MANY_SUBPATTERNS = 149,
75   G_REGEX_ERROR_INVALID_OCTAL_VALUE = 151,
76   G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE = 154,
77   G_REGEX_ERROR_DEFINE_REPETION = 155,
78   G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS = 156,
79   G_REGEX_ERROR_MISSING_BACK_REFERENCE = 157
80 } GRegexError;
81
82 #define G_REGEX_ERROR g_regex_error_quark ()
83
84 GQuark g_regex_error_quark (void);
85
86 /* Remember to update G_REGEX_COMPILE_MASK in gregex.c after
87  * adding a new flag. */
88 typedef enum
89 {
90   G_REGEX_CASELESS          = 1 << 0,
91   G_REGEX_MULTILINE         = 1 << 1,
92   G_REGEX_DOTALL            = 1 << 2,
93   G_REGEX_EXTENDED          = 1 << 3,
94   G_REGEX_ANCHORED          = 1 << 4,
95   G_REGEX_DOLLAR_ENDONLY    = 1 << 5,
96   G_REGEX_UNGREEDY          = 1 << 9,
97   G_REGEX_RAW               = 1 << 11,
98   G_REGEX_NO_AUTO_CAPTURE   = 1 << 12,
99   G_REGEX_OPTIMIZE          = 1 << 13,
100   G_REGEX_DUPNAMES          = 1 << 19,
101   G_REGEX_NEWLINE_CR        = 1 << 20,
102   G_REGEX_NEWLINE_LF        = 1 << 21,
103   G_REGEX_NEWLINE_CRLF      = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF
104 } GRegexCompileFlags;
105
106 /* Remember to update G_REGEX_MATCH_MASK in gregex.c after
107  * adding a new flag. */
108 typedef enum
109 {
110   G_REGEX_MATCH_ANCHORED      = 1 << 4,
111   G_REGEX_MATCH_NOTBOL        = 1 << 7,
112   G_REGEX_MATCH_NOTEOL        = 1 << 8,
113   G_REGEX_MATCH_NOTEMPTY      = 1 << 10,
114   G_REGEX_MATCH_PARTIAL       = 1 << 15,
115   G_REGEX_MATCH_NEWLINE_CR    = 1 << 20,
116   G_REGEX_MATCH_NEWLINE_LF    = 1 << 21,
117   G_REGEX_MATCH_NEWLINE_CRLF  = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF,
118   G_REGEX_MATCH_NEWLINE_ANY   = 1 << 22
119 } GRegexMatchFlags;
120
121 typedef struct _GRegex          GRegex;
122 typedef struct _GMatchInfo      GMatchInfo;
123
124 typedef gboolean (*GRegexEvalCallback)          (const GMatchInfo *match_info,
125                                                  GString          *result,
126                                                  gpointer          user_data);
127
128
129 GRegex           *g_regex_new                   (const gchar         *pattern,
130                                                  GRegexCompileFlags   compile_options,
131                                                  GRegexMatchFlags     match_options,
132                                                  GError             **error);
133 GRegex           *g_regex_ref                   (GRegex              *regex);
134 void              g_regex_unref                 (GRegex              *regex);
135 const gchar      *g_regex_get_pattern           (const GRegex        *regex);
136 gint              g_regex_get_max_backref       (const GRegex        *regex);
137 gint              g_regex_get_capture_count     (const GRegex        *regex);
138 gint              g_regex_get_string_number     (const GRegex        *regex, 
139                                                  const gchar         *name);
140 gchar            *g_regex_escape_string         (const gchar         *string,
141                                                  gint                 length);
142
143 /* Matching. */
144 gboolean          g_regex_match_simple          (const gchar         *pattern,
145                                                  const gchar         *string,
146                                                  GRegexCompileFlags   compile_options,
147                                                  GRegexMatchFlags     match_options);
148 gboolean          g_regex_match                 (const GRegex        *regex,
149                                                  const gchar         *string,
150                                                  GRegexMatchFlags     match_options,
151                                                  GMatchInfo         **match_info);
152 gboolean          g_regex_match_full            (const GRegex        *regex,
153                                                  const gchar         *string,
154                                                  gssize               string_len,
155                                                  gint                 start_position,
156                                                  GRegexMatchFlags     match_options,
157                                                  GMatchInfo         **match_info,
158                                                  GError             **error);
159 gboolean          g_regex_match_all             (const GRegex        *regex,
160                                                  const gchar         *string,
161                                                  GRegexMatchFlags     match_options,
162                                                  GMatchInfo         **match_info);
163 gboolean          g_regex_match_all_full        (const GRegex        *regex,
164                                                  const gchar         *string,
165                                                  gssize               string_len,
166                                                  gint                 start_position,
167                                                  GRegexMatchFlags     match_options,
168                                                  GMatchInfo         **match_info,
169                                                  GError             **error);
170
171 /* String splitting. */
172 gchar           **g_regex_split_simple          (const gchar         *pattern,
173                                                  const gchar         *string,
174                                                  GRegexCompileFlags   compile_options,
175                                                  GRegexMatchFlags     match_options);
176 gchar           **g_regex_split                 (const GRegex        *regex,
177                                                  const gchar         *string,
178                                                  GRegexMatchFlags     match_options);
179 gchar           **g_regex_split_full            (const GRegex        *regex,
180                                                  const gchar         *string,
181                                                  gssize               string_len,
182                                                  gint                 start_position,
183                                                  GRegexMatchFlags     match_options,
184                                                  gint                 max_tokens,
185                                                  GError             **error);
186
187 /* String replacement. */
188 gchar            *g_regex_replace               (const GRegex        *regex,
189                                                  const gchar         *string,
190                                                  gssize               string_len,
191                                                  gint                 start_position,
192                                                  const gchar         *replacement,
193                                                  GRegexMatchFlags     match_options,
194                                                  GError             **error);
195 gchar            *g_regex_replace_literal       (const GRegex        *regex,
196                                                  const gchar         *string,
197                                                  gssize               string_len,
198                                                  gint                 start_position,
199                                                  const gchar         *replacement,
200                                                  GRegexMatchFlags     match_options,
201                                                  GError             **error);
202 gchar            *g_regex_replace_eval          (const GRegex        *regex,
203                                                  const gchar         *string,
204                                                  gssize               string_len,
205                                                  gint                 start_position,
206                                                  GRegexMatchFlags     match_options,
207                                                  GRegexEvalCallback   eval,
208                                                  gpointer             user_data,
209                                                  GError             **error);
210 gboolean          g_regex_check_replacement     (const gchar         *replacement,
211                                                  gboolean            *has_references,
212                                                  GError             **error);
213
214 /* Match info */
215 GRegex           *g_match_info_get_regex        (const GMatchInfo    *match_info);
216 const gchar      *g_match_info_get_string       (const GMatchInfo    *match_info);
217
218 void              g_match_info_free             (GMatchInfo          *match_info);
219 gboolean          g_match_info_next             (GMatchInfo          *match_info,
220                                                  GError             **error);
221 gboolean          g_match_info_matches          (const GMatchInfo    *match_info);
222 gint              g_match_info_get_match_count  (const GMatchInfo    *match_info);
223 gboolean          g_match_info_is_partial_match (const GMatchInfo    *match_info);
224 gchar            *g_match_info_expand_references(const GMatchInfo    *match_info,
225                                                  const gchar         *string_to_expand,
226                                                  GError             **error);
227 gchar            *g_match_info_fetch            (const GMatchInfo    *match_info,
228                                                  gint                 match_num);
229 gboolean          g_match_info_fetch_pos        (const GMatchInfo    *match_info,
230                                                  gint                 match_num,
231                                                  gint                *start_pos,
232                                                  gint                *end_pos);
233 gchar            *g_match_info_fetch_named      (const GMatchInfo    *match_info,
234                                                  const gchar         *name);
235 gboolean          g_match_info_fetch_named_pos  (const GMatchInfo    *match_info,
236                                                  const gchar         *name,
237                                                  gint                *start_pos,
238                                                  gint                *end_pos);
239 gchar           **g_match_info_fetch_all        (const GMatchInfo    *match_info);
240
241 G_END_DECLS
242
243 #endif  /*  __G_REGEX_H__ */