zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

_regex.h (10281B) - Raw


      1 /*
      2  * Copyright (c) 2000, 2011 Apple Inc. All rights reserved.
      3  *
      4  * @APPLE_LICENSE_HEADER_START@
      5  * 
      6  * This file contains Original Code and/or Modifications of Original Code
      7  * as defined in and that are subject to the Apple Public Source License
      8  * Version 2.0 (the 'License'). You may not use this file except in
      9  * compliance with the License. Please obtain a copy of the License at
     10  * http://www.opensource.apple.com/apsl/ and read it before using this
     11  * file.
     12  * 
     13  * The Original Code and all software distributed under the License are
     14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
     15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
     16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
     18  * Please see the License for the specific language governing rights and
     19  * limitations under the License.
     20  * 
     21  * @APPLE_LICENSE_HEADER_END@
     22  */
     23 /*
     24  * Copyright (c) 2001-2009 Ville Laurikari <vl@iki.fi>
     25  * All rights reserved.
     26  * 
     27  * Redistribution and use in source and binary forms, with or without
     28  * modification, are permitted provided that the following conditions
     29  * are met:
     30  * 
     31  *   1. Redistributions of source code must retain the above copyright
     32  *      notice, this list of conditions and the following disclaimer.
     33  * 
     34  *   2. Redistributions in binary form must reproduce the above copyright
     35  *      notice, this list of conditions and the following disclaimer in the
     36  *      documentation and/or other materials provided with the distribution.
     37  * 
     38  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
     39  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     40  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     41  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
     42  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     43  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     44  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     45  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     46  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     47  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     48  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     49  */
     50 /*-
     51  * Copyright (c) 1992 Henry Spencer.
     52  * Copyright (c) 1992, 1993
     53  *	The Regents of the University of California.  All rights reserved.
     54  *
     55  * This code is derived from software contributed to Berkeley by
     56  * Henry Spencer of the University of Toronto.
     57  *
     58  * Redistribution and use in source and binary forms, with or without
     59  * modification, are permitted provided that the following conditions
     60  * are met:
     61  * 1. Redistributions of source code must retain the above copyright
     62  *    notice, this list of conditions and the following disclaimer.
     63  * 2. Redistributions in binary form must reproduce the above copyright
     64  *    notice, this list of conditions and the following disclaimer in the
     65  *    documentation and/or other materials provided with the distribution.
     66  * 3. All advertising materials mentioning features or use of this software
     67  *    must display the following acknowledgement:
     68  *	This product includes software developed by the University of
     69  *	California, Berkeley and its contributors.
     70  * 4. Neither the name of the University nor the names of its contributors
     71  *    may be used to endorse or promote products derived from this software
     72  *    without specific prior written permission.
     73  *
     74  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     75  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     76  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     77  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     78  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     79  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     80  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     81  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     82  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     83  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     84  * SUCH DAMAGE.
     85  *
     86  *	@(#)regex.h	8.2 (Berkeley) 1/3/94
     87  */
     88 
     89 /*
     90  * Common header for regex.h and xlocale/_regex.h
     91  */
     92 
     93 #ifndef _REGEX_H_
     94 #define	_REGEX_H_
     95 #define	__REGEX_H_
     96 
     97 #include <_bounds.h>
     98 #include <_types.h>
     99 #include <Availability.h>
    100 #include <sys/_types/_size_t.h>
    101 
    102 _LIBC_SINGLE_BY_DEFAULT()
    103 
    104 /*********/
    105 /* types */
    106 /*********/
    107 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
    108 #include <sys/_types/_wchar_t.h>
    109 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
    110 
    111 typedef __darwin_off_t regoff_t;
    112 
    113 typedef struct {
    114 	int re_magic;
    115 	size_t re_nsub;		/* number of parenthesized subexpressions */
    116 	const char *_LIBC_UNSAFE_INDEXABLE	re_endp;	/* end pointer for REG_PEND */
    117 	struct re_guts *re_g;	/* none of your business :-) */
    118 } regex_t;
    119 
    120 typedef struct {
    121 	regoff_t rm_so;		/* start of match */
    122 	regoff_t rm_eo;		/* end of match */
    123 } regmatch_t;
    124 
    125 /*******************/
    126 /* regcomp() flags */
    127 /*******************/
    128 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
    129 #define	REG_BASIC	0000	/* Basic regular expressions (synonym for 0) */
    130 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
    131 
    132 #define	REG_EXTENDED	0001	/* Extended regular expressions */
    133 #define	REG_ICASE	0002	/* Compile ignoring upper/lower case */
    134 #define	REG_NOSUB	0004	/* Compile only reporting success/failure */
    135 #define	REG_NEWLINE	0010	/* Compile for newline-sensitive matching */
    136 
    137 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
    138 #define	REG_NOSPEC	0020	/* Compile turning off all special characters */
    139 
    140 #if __MAC_OS_X_VERSION_MIN_REQUIRED  >= __MAC_10_8 \
    141  || __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0 \
    142  || defined(__DRIVERKIT_VERSION_MIN_REQUIRED)
    143 #define	REG_LITERAL	REG_NOSPEC
    144 #endif
    145 
    146 #define	REG_PEND	0040	/* Use re_endp as end pointer */
    147 
    148 #if __MAC_OS_X_VERSION_MIN_REQUIRED  >= __MAC_10_8 \
    149  || __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0 \
    150  || defined(__DRIVERKIT_VERSION_MIN_REQUIRED)
    151 #define	REG_MINIMAL	0100	/* Compile using minimal repetition */
    152 #define	REG_UNGREEDY	REG_MINIMAL
    153 #endif
    154 
    155 #define	REG_DUMP	0200	/* Unused */
    156 
    157 #if __MAC_OS_X_VERSION_MIN_REQUIRED  >= __MAC_10_8 \
    158  || __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0 \
    159  || defined(__DRIVERKIT_VERSION_MIN_REQUIRED)
    160 #define	REG_ENHANCED	0400	/* Additional (non-POSIX) features */
    161 #endif
    162 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
    163 
    164 /********************/
    165 /* regerror() flags */
    166 /********************/
    167 #define	REG_ENOSYS	 (-1)	/* Reserved */
    168 #define	REG_NOMATCH	 1	/* regexec() function failed to match */
    169 #define	REG_BADPAT	 2	/* invalid regular expression */
    170 #define	REG_ECOLLATE	 3	/* invalid collating element */
    171 #define	REG_ECTYPE	 4	/* invalid character class */
    172 #define	REG_EESCAPE	 5	/* trailing backslash (\) */
    173 #define	REG_ESUBREG	 6	/* invalid backreference number */
    174 #define	REG_EBRACK	 7	/* brackets ([ ]) not balanced */
    175 #define	REG_EPAREN	 8	/* parentheses not balanced */
    176 #define	REG_EBRACE	 9	/* braces not balanced */
    177 #define	REG_BADBR	10	/* invalid repetition count(s) */
    178 #define	REG_ERANGE	11	/* invalid character range */
    179 #define	REG_ESPACE	12	/* out of memory */
    180 #define	REG_BADRPT	13	/* repetition-operator operand invalid */
    181 
    182 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
    183 #define	REG_EMPTY	14	/* Unused */
    184 #define	REG_ASSERT	15	/* Unused */
    185 #define	REG_INVARG	16	/* invalid argument to regex routine */
    186 #define	REG_ILLSEQ	17	/* illegal byte sequence */
    187 
    188 #define	REG_ATOI	255	/* convert name to number (!) */
    189 #define	REG_ITOA	0400	/* convert number to name (!) */
    190 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
    191 
    192 /*******************/
    193 /* regexec() flags */
    194 /*******************/
    195 #define	REG_NOTBOL	00001	/* First character not at beginning of line */
    196 #define	REG_NOTEOL	00002	/* Last character not at end of line */
    197 
    198 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
    199 #define	REG_STARTEND	00004	/* String start/end in pmatch[0] */
    200 #define	REG_TRACE	00400	/* Unused */
    201 #define	REG_LARGE	01000	/* Unused */
    202 #define	REG_BACKR	02000	/* force use of backref code */
    203 
    204 #if __MAC_OS_X_VERSION_MIN_REQUIRED  >= __MAC_10_8 \
    205  || __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0 \
    206  || defined(__DRIVERKIT_VERSION_MIN_REQUIRED)
    207 #define	REG_BACKTRACKING_MATCHER	REG_BACKR
    208 #endif
    209 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
    210 
    211 __BEGIN_DECLS
    212 int	regcomp(regex_t * __restrict, const char * __restrict, int) __DARWIN_ALIAS(regcomp);
    213 size_t	regerror(int, const regex_t * __restrict, char *_LIBC_COUNT(__errbuf_size) __restrict, size_t __errbuf_size) __cold;
    214 /*
    215  * gcc under c99 mode won't compile "[ __restrict]" by itself.  As a workaround,
    216  * a dummy argument name is added.
    217  */
    218 int	regexec(const regex_t * __restrict, const char * __restrict, size_t __nmatch,
    219 		regmatch_t __pmatch[ __restrict _LIBC_COUNT(__nmatch)], int);
    220 void	regfree(regex_t *);
    221 
    222 #if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
    223 
    224 /* Darwin extensions */
    225 int	regncomp(regex_t * __restrict, const char *_LIBC_COUNT(__len) __restrict, size_t __len, int)
    226 		__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
    227 int	regnexec(const regex_t * __restrict, const char *_LIBC_COUNT(__len) __restrict, size_t __len,
    228 		size_t __nmatch, regmatch_t __pmatch[ __restrict _LIBC_COUNT(__nmatch)], int)
    229 		__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
    230 int	regwcomp(regex_t * __restrict, const wchar_t * __restrict, int)
    231 		__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
    232 int	regwexec(const regex_t * __restrict, const wchar_t * __restrict, size_t __nmatch,
    233 		regmatch_t __pmatch[ __restrict _LIBC_COUNT(__nmatch)], int)
    234 		__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
    235 int	regwncomp(regex_t * __restrict, const wchar_t * _LIBC_COUNT(__len) __restrict, size_t __len, int)
    236 		__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
    237 int	regwnexec(const regex_t * __restrict, const wchar_t * _LIBC_COUNT(__len) __restrict,
    238 		size_t __len, size_t __nmatch, regmatch_t __pmatch[ __restrict _LIBC_COUNT(__nmatch)], int)
    239 		__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
    240 
    241 #endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
    242 __END_DECLS
    243 
    244 #endif /* !_REGEX_H_ */