Installed PCRE release 7.0.
[exim.git] / src / src / pcre / pcre.h
CommitLineData
6bf342e1 1/* $Cambridge: exim/src/src/pcre/pcre.h,v 1.5 2007/01/23 15:08:45 ph10 Exp $ */
aa41d2de 2
c86f6258
PH
3/*************************************************
4* Perl-Compatible Regular Expressions *
5*************************************************/
6
aa41d2de
PH
7/* This is the public header file for the PCRE library, to be #included by
8applications that call the PCRE functions.
c86f6258 9
6bf342e1 10 Copyright (c) 1997-2006 University of Cambridge
c86f6258
PH
11
12-----------------------------------------------------------------------------
13Redistribution and use in source and binary forms, with or without
14modification, are permitted provided that the following conditions are met:
15
16 * Redistributions of source code must retain the above copyright notice,
17 this list of conditions and the following disclaimer.
18
19 * Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in the
21 documentation and/or other materials provided with the distribution.
22
23 * Neither the name of the University of Cambridge nor the names of its
24 contributors may be used to endorse or promote products derived from
25 this software without specific prior written permission.
26
27THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37POSSIBILITY OF SUCH DAMAGE.
38-----------------------------------------------------------------------------
39*/
40
41#ifndef _PCRE_H
42#define _PCRE_H
43
aa41d2de
PH
44/* The current PCRE version information. */
45
46/* NOTES FOR FUTURE MAINTAINERS: Do not use numbers with leading zeros, because
47they may be treated as octal constants. The PCRE_PRERELEASE feature is for
48identifying release candidates. It might be defined as -RC2, for example. In
49real releases, it should be defined empty. Do not change the alignment of these
50statments. The code in ./configure greps out the version numbers by using "cut"
51to get values from column 29 onwards. These are substituted into pcre-config
52and libpcre.pc. The values are not put into configure.ac and substituted here
53(which would simplify this issue) because that makes life harder for those who
54cannot run ./configure. As it now stands, this file need not be edited in that
55circumstance. */
c86f6258 56
6bf342e1
PH
57#define PCRE_MAJOR 7
58#define PCRE_MINOR 0
aa41d2de 59#define PCRE_PRERELEASE
6bf342e1 60#define PCRE_DATE 18-Dec-2006
c86f6258 61
aa41d2de
PH
62/* Win32 uses DLL by default; it needs special stuff for exported functions
63when building PCRE. */
c86f6258
PH
64
65#ifdef _WIN32
66# ifdef PCRE_DEFINITION
67# ifdef DLL_EXPORT
68# define PCRE_DATA_SCOPE __declspec(dllexport)
69# endif
70# else
71# ifndef PCRE_STATIC
72# define PCRE_DATA_SCOPE extern __declspec(dllimport)
73# endif
74# endif
75#endif
8ac170f3 76
aa41d2de 77/* Otherwise, we use the standard "extern". */
8ac170f3 78
c86f6258 79#ifndef PCRE_DATA_SCOPE
8ac170f3
PH
80# ifdef __cplusplus
81# define PCRE_DATA_SCOPE extern "C"
82# else
83# define PCRE_DATA_SCOPE extern
84# endif
c86f6258
PH
85#endif
86
87/* Have to include stdlib.h in order to ensure that size_t is defined;
88it is needed here for malloc. */
89
90#include <stdlib.h>
91
92/* Allow for C++ users */
93
94#ifdef __cplusplus
95extern "C" {
96#endif
97
98/* Options */
99
8ac170f3
PH
100#define PCRE_CASELESS 0x00000001
101#define PCRE_MULTILINE 0x00000002
102#define PCRE_DOTALL 0x00000004
103#define PCRE_EXTENDED 0x00000008
104#define PCRE_ANCHORED 0x00000010
105#define PCRE_DOLLAR_ENDONLY 0x00000020
106#define PCRE_EXTRA 0x00000040
107#define PCRE_NOTBOL 0x00000080
108#define PCRE_NOTEOL 0x00000100
109#define PCRE_UNGREEDY 0x00000200
110#define PCRE_NOTEMPTY 0x00000400
111#define PCRE_UTF8 0x00000800
112#define PCRE_NO_AUTO_CAPTURE 0x00001000
113#define PCRE_NO_UTF8_CHECK 0x00002000
114#define PCRE_AUTO_CALLOUT 0x00004000
115#define PCRE_PARTIAL 0x00008000
116#define PCRE_DFA_SHORTEST 0x00010000
117#define PCRE_DFA_RESTART 0x00020000
118#define PCRE_FIRSTLINE 0x00040000
aa41d2de
PH
119#define PCRE_DUPNAMES 0x00080000
120#define PCRE_NEWLINE_CR 0x00100000
121#define PCRE_NEWLINE_LF 0x00200000
122#define PCRE_NEWLINE_CRLF 0x00300000
6bf342e1 123#define PCRE_NEWLINE_ANY 0x00400000
c86f6258
PH
124
125/* Exec-time and get/set-time error codes */
126
127#define PCRE_ERROR_NOMATCH (-1)
128#define PCRE_ERROR_NULL (-2)
129#define PCRE_ERROR_BADOPTION (-3)
130#define PCRE_ERROR_BADMAGIC (-4)
6bf342e1
PH
131#define PCRE_ERROR_UNKNOWN_OPCODE (-5)
132#define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */
c86f6258
PH
133#define PCRE_ERROR_NOMEMORY (-6)
134#define PCRE_ERROR_NOSUBSTRING (-7)
135#define PCRE_ERROR_MATCHLIMIT (-8)
136#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */
137#define PCRE_ERROR_BADUTF8 (-10)
138#define PCRE_ERROR_BADUTF8_OFFSET (-11)
139#define PCRE_ERROR_PARTIAL (-12)
140#define PCRE_ERROR_BADPARTIAL (-13)
141#define PCRE_ERROR_INTERNAL (-14)
142#define PCRE_ERROR_BADCOUNT (-15)
8ac170f3
PH
143#define PCRE_ERROR_DFA_UITEM (-16)
144#define PCRE_ERROR_DFA_UCOND (-17)
145#define PCRE_ERROR_DFA_UMLIMIT (-18)
146#define PCRE_ERROR_DFA_WSSIZE (-19)
147#define PCRE_ERROR_DFA_RECURSE (-20)
aa41d2de 148#define PCRE_ERROR_RECURSIONLIMIT (-21)
6bf342e1
PH
149#define PCRE_ERROR_NULLWSLIMIT (-22)
150#define PCRE_ERROR_BADNEWLINE (-23)
c86f6258
PH
151
152/* Request types for pcre_fullinfo() */
153
154#define PCRE_INFO_OPTIONS 0
155#define PCRE_INFO_SIZE 1
156#define PCRE_INFO_CAPTURECOUNT 2
157#define PCRE_INFO_BACKREFMAX 3
158#define PCRE_INFO_FIRSTBYTE 4
159#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */
160#define PCRE_INFO_FIRSTTABLE 5
161#define PCRE_INFO_LASTLITERAL 6
162#define PCRE_INFO_NAMEENTRYSIZE 7
163#define PCRE_INFO_NAMECOUNT 8
164#define PCRE_INFO_NAMETABLE 9
165#define PCRE_INFO_STUDYSIZE 10
166#define PCRE_INFO_DEFAULT_TABLES 11
167
aa41d2de
PH
168/* Request types for pcre_config(). Do not re-arrange, in order to remain
169compatible. */
c86f6258
PH
170
171#define PCRE_CONFIG_UTF8 0
172#define PCRE_CONFIG_NEWLINE 1
173#define PCRE_CONFIG_LINK_SIZE 2
174#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3
175#define PCRE_CONFIG_MATCH_LIMIT 4
176#define PCRE_CONFIG_STACKRECURSE 5
177#define PCRE_CONFIG_UNICODE_PROPERTIES 6
aa41d2de 178#define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7
c86f6258 179
aa41d2de
PH
180/* Bit flags for the pcre_extra structure. Do not re-arrange or redefine
181these bits, just add new ones on the end, in order to remain compatible. */
c86f6258 182
aa41d2de
PH
183#define PCRE_EXTRA_STUDY_DATA 0x0001
184#define PCRE_EXTRA_MATCH_LIMIT 0x0002
185#define PCRE_EXTRA_CALLOUT_DATA 0x0004
186#define PCRE_EXTRA_TABLES 0x0008
187#define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010
c86f6258
PH
188
189/* Types */
190
191struct real_pcre; /* declaration; the definition is private */
192typedef struct real_pcre pcre;
193
aa41d2de
PH
194/* When PCRE is compiled as a C++ library, the subject pointer type can be
195replaced with a custom type. For conventional use, the public interface is a
196const char *. */
197
198#ifndef PCRE_SPTR
199#define PCRE_SPTR const char *
200#endif
201
c86f6258
PH
202/* The structure for passing additional data to pcre_exec(). This is defined in
203such as way as to be extensible. Always add new fields at the end, in order to
204remain compatible. */
205
206typedef struct pcre_extra {
207 unsigned long int flags; /* Bits for which fields are set */
208 void *study_data; /* Opaque data from pcre_study() */
209 unsigned long int match_limit; /* Maximum number of calls to match() */
210 void *callout_data; /* Data passed back in callouts */
211 const unsigned char *tables; /* Pointer to character tables */
aa41d2de 212 unsigned long int match_limit_recursion; /* Max recursive calls to match() */
c86f6258
PH
213} pcre_extra;
214
215/* The structure for passing out data via the pcre_callout_function. We use a
216structure so that new fields can be added on the end in future versions,
217without changing the API of the function, thereby allowing old clients to work
218without modification. */
219
220typedef struct pcre_callout_block {
221 int version; /* Identifies version of block */
222 /* ------------------------ Version 0 ------------------------------- */
223 int callout_number; /* Number compiled into pattern */
224 int *offset_vector; /* The offset vector */
aa41d2de 225 PCRE_SPTR subject; /* The subject being matched */
c86f6258
PH
226 int subject_length; /* The length of the subject */
227 int start_match; /* Offset to start of this match attempt */
228 int current_position; /* Where we currently are in the subject */
229 int capture_top; /* Max current capture */
230 int capture_last; /* Most recently closed capture */
231 void *callout_data; /* Data passed in with the call */
232 /* ------------------- Added for Version 1 -------------------------- */
233 int pattern_position; /* Offset to next item in the pattern */
234 int next_item_length; /* Length of next item in the pattern */
235 /* ------------------------------------------------------------------ */
236} pcre_callout_block;
237
238/* Indirection for store get and free functions. These can be set to
239alternative malloc/free functions if required. Special ones are used in the
240non-recursive case for "frames". There is also an optional callout function
8ac170f3
PH
241that is triggered by the (?) regex item. For Virtual Pascal, these definitions
242have to take another form. */
c86f6258
PH
243
244#ifndef VPCOMPAT
245PCRE_DATA_SCOPE void *(*pcre_malloc)(size_t);
246PCRE_DATA_SCOPE void (*pcre_free)(void *);
247PCRE_DATA_SCOPE void *(*pcre_stack_malloc)(size_t);
248PCRE_DATA_SCOPE void (*pcre_stack_free)(void *);
249PCRE_DATA_SCOPE int (*pcre_callout)(pcre_callout_block *);
250#else /* VPCOMPAT */
8ac170f3
PH
251PCRE_DATA_SCOPE void *pcre_malloc(size_t);
252PCRE_DATA_SCOPE void pcre_free(void *);
253PCRE_DATA_SCOPE void *pcre_stack_malloc(size_t);
254PCRE_DATA_SCOPE void pcre_stack_free(void *);
255PCRE_DATA_SCOPE int pcre_callout(pcre_callout_block *);
c86f6258
PH
256#endif /* VPCOMPAT */
257
258/* Exported PCRE functions */
259
8ac170f3
PH
260PCRE_DATA_SCOPE pcre *pcre_compile(const char *, int, const char **, int *,
261 const unsigned char *);
262PCRE_DATA_SCOPE pcre *pcre_compile2(const char *, int, int *, const char **,
263 int *, const unsigned char *);
264PCRE_DATA_SCOPE int pcre_config(int, void *);
265PCRE_DATA_SCOPE int pcre_copy_named_substring(const pcre *, const char *,
266 int *, int, const char *, char *, int);
267PCRE_DATA_SCOPE int pcre_copy_substring(const char *, int *, int, int, char *,
268 int);
269PCRE_DATA_SCOPE int pcre_dfa_exec(const pcre *, const pcre_extra *,
270 const char *, int, int, int, int *, int , int *, int);
aa41d2de 271PCRE_DATA_SCOPE int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR,
8ac170f3
PH
272 int, int, int, int *, int);
273PCRE_DATA_SCOPE void pcre_free_substring(const char *);
274PCRE_DATA_SCOPE void pcre_free_substring_list(const char **);
275PCRE_DATA_SCOPE int pcre_fullinfo(const pcre *, const pcre_extra *, int,
276 void *);
277PCRE_DATA_SCOPE int pcre_get_named_substring(const pcre *, const char *,
278 int *, int, const char *, const char **);
279PCRE_DATA_SCOPE int pcre_get_stringnumber(const pcre *, const char *);
aa41d2de
PH
280PCRE_DATA_SCOPE int pcre_get_stringtable_entries(const pcre *, const char *,
281 char **, char **);
8ac170f3
PH
282PCRE_DATA_SCOPE int pcre_get_substring(const char *, int *, int, int,
283 const char **);
284PCRE_DATA_SCOPE int pcre_get_substring_list(const char *, int *, int,
285 const char ***);
286PCRE_DATA_SCOPE int pcre_info(const pcre *, int *, int *);
287PCRE_DATA_SCOPE const unsigned char *pcre_maketables(void);
288PCRE_DATA_SCOPE int pcre_refcount(pcre *, int);
289PCRE_DATA_SCOPE pcre_extra *pcre_study(const pcre *, int, const char **);
290PCRE_DATA_SCOPE const char *pcre_version(void);
c86f6258
PH
291
292#ifdef __cplusplus
293} /* extern "C" */
294#endif
295
296#endif /* End of pcre.h */