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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
/* : : generated by proto : : */
#if !defined(__PROTO__)
#include <prototyped.h>
#endif
#if !defined(__LINKAGE__)
#define __LINKAGE__ /* 2004-08-11 transition */
#endif
#ifdef _AST_STD_I
#define _REGEX_H -1
#define regex_t int
#define regmatch_t int
#endif
#ifndef _REGEX_H
#define _REGEX_H 1
#undef regex_t
#undef regmatch_t
#include <ast_common.h>
#define REG_VERSION 20030916L
/* regcomp flags */
#define REG_AUGMENTED 0x00000001 /* enable ! & < > */
#define REG_EXTENDED 0x00000002 /* enable ( | ) */
#define REG_ICASE 0x00000004 /* ignore case in match */
#define REG_NEWLINE 0x00000008 /* ^/$ match embedded \n */
#define REG_NOSUB 0x00000010 /* don't report subexp matches */
#define REG_SHELL 0x00000020 /* shell pattern syntax */
/* nonstandard regcomp flags */
#define REG_LEFT 0x00000100 /* implicit ^... */
#define REG_LITERAL 0x00000200 /* no operators */
#define REG_MINIMAL 0x00000400 /* minimal match */
#define REG_NULL 0x00000800 /* allow null patterns */
#define REG_RIGHT 0x00001000 /* implicit ...$ */
#define REG_LENIENT 0x00002000 /* look the other way */
#define REG_ESCAPE 0x00004000 /* \ escapes delimiter in [...] */
#define REG_FIRST 0x00008000 /* first match found will do */
#define REG_MULTIPLE 0x00010000 /* multiple \n sep patterns */
#define REG_DISCIPLINE 0x00020000 /* regex_t.re_disc is valid */
#define REG_SPAN 0x00040000 /* . matches \n */
#define REG_COMMENT 0x00080000 /* ignore pattern space & #...\n*/
#define REG_MULTIREF 0x00100000 /* multiple digit backrefs */
#define REG_MUSTDELIM 0x08000000 /* all delimiters required */
#define REG_DELIMITED 0x10000000 /* pattern[0] is delimiter */
#define REG_CLASS_ESCAPE 0x80000000 /* \ escapes in [...] */
#define REG_SHELL_DOT 0x00200000 /* explicit leading . match */
#define REG_SHELL_ESCAPED 0x00400000 /* \ not special */
#define REG_SHELL_GROUP 0x20000000 /* (|&) inside [@|&](...) only */
#define REG_SHELL_PATH 0x00800000 /* explicit / match */
#define REG_REGEXP 0x40000000 /* <regexp.h> compatibility */
/* regexec flags */
#define REG_NOTBOL 0x00000040 /* ^ is not a special char */
#define REG_NOTEOL 0x00000080 /* $ is not a special char */
/* nonstandard regexec flags */
#define REG_INVERT 0x01000000 /* invert regrexec match sense */
#define REG_STARTEND 0x02000000 /* subject==match[0].rm_{so,eo} */
#define REG_ADVANCE 0x04000000 /* advance match[0].rm_{so,eo} */
/* regalloc flags */
#define REG_NOFREE 0x00000001 /* don't free */
/* regsub flags */
#define REG_SUB_ALL 0x00000001 /* substitute all occurrences */
#define REG_SUB_LOWER 0x00000002 /* substitute to lower case */
#define REG_SUB_UPPER 0x00000004 /* substitute to upper case */
#define REG_SUB_PRINT 0x00000010 /* internal no-op */
#define REG_SUB_NUMBER 0x00000020 /* internal no-op */
#define REG_SUB_STOP 0x00000040 /* internal no-op */
#define REG_SUB_WRITE 0x00000080 /* internal no-op */
#define REG_SUB_LAST 0x00000100 /* last substitution option */
#define REG_SUB_FULL 0x00000200 /* fully delimited */
#define REG_SUB_USER 0x00001000 /* first user flag bit */
/* regex error codes */
#define REG_ENOSYS (-1) /* not supported */
#define REG_NOMATCH 1 /* regexec didn't match */
#define REG_BADPAT 2 /* invalid regular expression */
#define REG_ECOLLATE 3 /* invalid collation element */
#define REG_ECTYPE 4 /* invalid character class */
#define REG_EESCAPE 5 /* trailing \ in pattern */
#define REG_ESUBREG 6 /* invalid \digit backreference */
#define REG_EBRACK 7 /* [...] imbalance */
#define REG_EPAREN 8 /* \(...\) or (...) imbalance */
#define REG_EBRACE 9 /* \{...\} or {...} imbalance */
#define REG_BADBR 10 /* invalid {...} digits */
#define REG_ERANGE 11 /* invalid [...] range endpoint */
#define REG_ESPACE 12 /* out of space */
#define REG_BADRPT 13 /* unary op not preceded by re */
#define REG_ENULL 14 /* empty subexpr in pattern */
#define REG_ECOUNT 15 /* re component count overflow */
#define REG_BADESC 16 /* invalid \char escape */
#define REG_VERSIONID 17 /* version id (pseudo error) */
#define REG_EFLAGS 18 /* flags conflict */
#define REG_EDELIM 19 /* invalid or omitted delimiter */
#define REG_PANIC 20 /* unrecoverable internal error */
struct regex_s; typedef struct regex_s regex_t;
struct regdisc_s; typedef struct regdisc_s regdisc_t;
typedef int (*regclass_t) __PROTO__((int));
typedef uint32_t regflags_t;
typedef int regoff_t;
typedef int (*regerror_t) __PROTO__((const regex_t*, regdisc_t*, int, ...));
typedef __V_* (*regcomp_t) __PROTO__((const regex_t*, const char*, size_t, regdisc_t*));
typedef int (*regexec_t) __PROTO__((const regex_t*, __V_*, const char*, size_t, const char*, size_t, char**, regdisc_t*));
typedef __V_* (*regresize_t) __PROTO__((__V_*, __V_*, size_t));
typedef int (*regrecord_t) __PROTO__((__V_*, const char*, size_t));
typedef struct regmatch_s
{
regoff_t rm_so; /* offset of start */
regoff_t rm_eo; /* offset of end */
} regmatch_t;
typedef struct regsub_s
{
regflags_t re_flags; /* regsubcomp() flags */
char* re_buf; /* regsubexec() output buffer */
size_t re_len; /* re_buf length */
int re_min; /* regsubcomp() min matches */
#ifdef _REG_SUB_PRIVATE_
_REG_SUB_PRIVATE_
#endif
} regsub_t;
struct regdisc_s
{
unsigned long re_version; /* discipline version */
regflags_t re_flags; /* discipline flags */
regerror_t re_errorf; /* error function */
int re_errorlevel; /* errorf level */
regresize_t re_resizef; /* alloc/free function */
__V_* re_resizehandle;/* resizef handle */
regcomp_t re_compf; /* (?{...}) compile function */
regexec_t re_execf; /* (?{...}) execute function */
unsigned char* re_map; /* external to native ccode map */
};
typedef struct regstat_s
{
regflags_t re_flags; /* REG_LEFT|REG_RIGHT */
ssize_t re_min; /* min anchored match length */
ssize_t re_max; /* max anchored match length */
ssize_t re_record; /* regrexec() match length */
} regstat_t;
struct regex_s
{
size_t re_nsub; /* number of subexpressions */
struct reglib_s*re_info; /* library private info */
size_t re_npat; /* number of pattern chars used */
regdisc_t* re_disc; /* REG_DISCIPLINE discipline */
regsub_t* re_sub; /* regsubcomp() data */
};
#define reginit(disc) (memset(disc,0,sizeof(*(disc))),(disc)->re_version=REG_VERSION)
#if _BLD_ast && defined(__EXPORT__)
#undef __MANGLE__
#define __MANGLE__ __LINKAGE__ __EXPORT__
#endif
extern __MANGLE__ int regcomp __PROTO__((regex_t*, const char*, regflags_t));
extern __MANGLE__ size_t regerror __PROTO__((int, const regex_t*, char*, size_t));
extern __MANGLE__ int regexec __PROTO__((const regex_t*, const char*, size_t, regmatch_t*, regflags_t));
extern __MANGLE__ void regfree __PROTO__((regex_t*));
/* nonstandard hooks */
#define _REG_cache 1 /* have regcache() */
#define _REG_class 1 /* have regclass() */
#define _REG_collate 1 /* have regcollate(), regclass() */
#define _REG_comb 1 /* have regcomb() */
#define _REG_decomp 1 /* have regdecomp() */
#define _REG_dup 1 /* have regdup() */
#define _REG_fatal 1 /* have regfatal(), regfatalpat() */
#define _REG_ncomp 1 /* have regncomp() */
#define _REG_nexec 1 /* have regnexec() */
#define _REG_rexec 1 /* have regrexec(), regrecord() */
#define _REG_stat 1 /* have regstat() */
#define _REG_subcomp 1 /* have regsubcomp(), regsubexec() */
extern __MANGLE__ regclass_t regclass __PROTO__((const char*, char**));
extern __MANGLE__ int regaddclass __PROTO__((const char*, regclass_t));
extern __MANGLE__ int regcollate __PROTO__((const char*, char**, char*, int));
extern __MANGLE__ int regcomb __PROTO__((regex_t*, regex_t*));
extern __MANGLE__ size_t regdecomp __PROTO__((regex_t*, regflags_t, char*, size_t));
extern __MANGLE__ int regdup __PROTO__((regex_t*, regex_t*));
extern __MANGLE__ int regncomp __PROTO__((regex_t*, const char*, size_t, regflags_t));
extern __MANGLE__ int regnexec __PROTO__((const regex_t*, const char*, size_t, size_t, regmatch_t*, regflags_t));
extern __MANGLE__ void regfatal __PROTO__((regex_t*, int, int));
extern __MANGLE__ void regfatalpat __PROTO__((regex_t*, int, int, const char*));
extern __MANGLE__ int regrecord __PROTO__((const regex_t*));
extern __MANGLE__ int regrexec __PROTO__((const regex_t*, const char*, size_t, size_t, regmatch_t*, regflags_t, int, __V_*, regrecord_t));
extern __MANGLE__ regstat_t* regstat __PROTO__((const regex_t*));
extern __MANGLE__ regex_t* regcache __PROTO__((const char*, regflags_t, int*));
extern __MANGLE__ int regsubcomp __PROTO__((regex_t*, const char*, const regflags_t*, int, regflags_t));
extern __MANGLE__ int regsubexec __PROTO__((const regex_t*, const char*, size_t, regmatch_t*));
extern __MANGLE__ int regsubflags __PROTO__((regex_t*, const char*, char**, int, const regflags_t*, int*, regflags_t*));
extern __MANGLE__ void regsubfree __PROTO__((regex_t*));
/* obsolete hooks */
#ifndef _SFIO_H
struct _sfio_s;
#endif
extern __MANGLE__ void regalloc __PROTO__((__V_*, regresize_t, regflags_t));
extern __MANGLE__ int regsub __PROTO__((const regex_t*, struct _sfio_s*, const char*, const char*, size_t, regmatch_t*, regflags_t));
#undef __MANGLE__
#define __MANGLE__ __LINKAGE__
#endif
|