summaryrefslogtreecommitdiff
path: root/libuxre/uxre_regex.h
blob: 068c1f9c64ee751931f8911116e3247f35197909 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
 * Changes by Gunnar Ritter, Freiburg i. Br., Germany, November 2002.
 *
 * Sccsid @(#)regex.h	1.13 (gritter) 2/6/05
 */
/*  UNIX(R) Regular Expresssion Library
 *
 *  Note: Code is released under the GNU LGPL
 *
 *  Copyright (C) 2001 Caldera International, Inc.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to:
 *        Free Software Foundation, Inc.
 *        59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#ifndef LIBUXRE_REGEX_H
#define LIBUXRE_REGEX_H
/*	from unixsrc:usr/src/common/head/regex.h /main/uw7_nj/1	*/

#include <sys/types.h>	/* really only want [s]size_t */

	/*
	* Official regexec() flags.
	*/
#define REG_NOTBOL	0x000001 /* start of string does not match ^ */
#define REG_NOTEOL	0x000002 /* end of string does not match $ */

	/*
	* Additional regexec() flags.
	*/
#define REG_NONEMPTY	0x000004 /* do not match empty at start of string */

	/*
	* Extensions to provide individual control over each
	* of the differences between basic and extended REs.
	*/
#define REG_OR		0x0000001 /* enable | operator */
#define REG_PLUS	0x0000002 /* enable + operator */
#define REG_QUEST	0x0000004 /* enable ? operator */
#define REG_BRACES	0x0000008 /* use {m,n} (instead of \{m,n\}) */
#define REG_PARENS	0x0000010 /* use (...) [instead of \(...\)] */
#define REG_ANCHORS	0x0000020 /* ^ and $ are anchors anywhere */
#define REG_NOBACKREF	0x0000040 /* disable \digit */
#define REG_NOAUTOQUOTE	0x0000080 /* no automatic quoting of REG_BADRPTs */

	/*
	* Official regcomp() flags.
	*/
#define REG_EXTENDED	(REG_OR | REG_PLUS | REG_QUEST | REG_BRACES | \
				REG_PARENS | REG_ANCHORS | \
				REG_NOBACKREF | REG_NOAUTOQUOTE)
#define REG_ICASE	0x0000100 /* ignore case */
#define REG_NOSUB	0x0000200 /* only success/fail for regexec() */
#define REG_NEWLINE	0x0000400 /* take \n as line separator for ^ and $ */

	/*
	* Additional regcomp() flags.
	* Some of these assume that int is >16 bits!
	* Beware: 0x20000000 and above are used in re.h.
	*/
#define REG_ONESUB	0x0000800 /* regexec() only needs pmatch[0] */
#define REG_MTPARENFAIL	0x0001000 /* take empty \(\) or () as match failure */
#define REG_MTPARENBAD	0x0002000 /* disallow empty \(\) or () */
#define REG_BADRANGE	0x0004000 /* accept [m-a] ranges as [ma] */
#define	REG_ODDRANGE	0x0008000 /* oawk oddity: [m-a] means [m] */
#define REG_SEPRANGE	0x0010000 /* disallow [a-m-z] style ranges */
#define REG_BKTQUOTE	0x0020000 /* allow \ in []s to quote \, -, ^ or ] */
#define REG_BKTEMPTY	0x0040000 /* allow empty []s (w/BKTQUOTE, BKTESCAPE) */
#define REG_ANGLES	0x0080000 /* enable \<, \> operators */
#define REG_ESCNL	0x0100000 /* take \n as newline character */
#define REG_NLALT	0x0200000 /* take newline as alternation */
#define REG_ESCSEQ	0x0400000 /* otherwise, take \ as start of C escapes */
#define REG_BKTESCAPE	0x0800000 /* allow \ in []s to quote next anything */
#define	REG_NOBRACES	0x1000000 /* disable {n,m} */
#define	REG_ADDITIVE	0x2000000 /* a+*b means + and * additive, ^+ is valid */
#define	REG_NOI18N	0x4000000 /* disable I18N features ([::] etc.) */
#define	REG_OLDESC	0x8000000 /* recognize \b \f \n \r \t \123 only */
#define	REG_AVOIDNULL	0x10000000/* avoid null subexpression matches */
#define REG_OLDBRE	(REG_BADRANGE | REG_ANGLES | REG_ESCNL)
#define REG_OLDERE	(REG_OR | REG_PLUS | REG_QUEST | REG_NOBRACES | \
				REG_PARENS | REG_ANCHORS | REG_ODDRANGE | \
				REG_NOBACKREF | REG_ADDITIVE | REG_NOAUTOQUOTE)

	/*
	* Error return values.
	*/
#define REG_ENOSYS	(-1)	/* unsupported */
#define	REG_NOMATCH	1	/* regexec() failed to match */
#define	REG_BADPAT	2	/* invalid regular expression */
#define	REG_ECOLLATE	3	/* invalid collating element construct */
#define	REG_ECTYPE	4	/* invalid character class construct */
#define REG_EEQUIV	5	/* invalid equivalence class construct */
#define REG_EBKTCHAR	6	/* invalid character in [] construct */
#define	REG_EESCAPE	7	/* trailing \ in pattern */
#define	REG_ESUBREG	8	/* number in \digit invalid or in error */
#define	REG_EBRACK	9	/* [] imbalance */
#define REG_EMPTYSUBBKT	10	/* empty sub-bracket construct */
#define REG_EMPTYPAREN	11	/* empty \(\) or () [REG_MTPARENBAD] */
#define REG_NOPAT	12	/* no (empty) pattern */
#define	REG_EPAREN	13	/* \(\) or () imbalance */
#define	REG_EBRACE	14	/* \{\} or {} imbalance */
#define	REG_BADBR	15	/* contents of \{\} or {} invalid */
#define	REG_ERANGE	16	/* invalid endpoint in expression */
#define	REG_ESPACE	17	/* out of memory */
#define	REG_BADRPT	18	/* *,+,?,\{\} or {} not after r.e. */
#define REG_BADESC	19	/* invalid escape sequence (e.g. \0) */
#define	REG_ILLSEQ	20	/* illegal byte sequence */

typedef struct
{
	size_t		re_nsub;	/* only advertised member */
	unsigned long	re_flags;	/* augmented regcomp() flags */
	struct re_dfa_	*re_dfa;	/* DFA engine */
	struct re_nfa_	*re_nfa;	/* NFA engine */
	struct re_coll_	*re_col;	/* current collation info */
	int		re_mb_cur_max;	/* MB_CUR_MAX acceleration */
	void		*re_more;	/* just in case... */
} regex_t;

typedef ssize_t regoff_t;

typedef struct
{
	regoff_t	rm_so;
	regoff_t	rm_eo;
} regmatch_t;

#ifdef __cplusplus
extern "C" {
#endif

int	regcomp(regex_t *, const char *, int);
int	regexec(const regex_t *, const char *, size_t, regmatch_t *, int);
size_t	regerror(int, const regex_t *, char *, size_t);
void	regfree(regex_t *);

#ifdef __cplusplus
}
#endif

#endif /* !LIBUXRE_REGEX_H */