]>
git.saurik.com Git - wxWidgets.git/blob - src/regex/regex.h
   2 #define _REGEX_H_       /* never again */ 
   6  * Copyright (c) 1998, 1999 Henry Spencer.      All rights reserved. 
   8  * Development of this software was funded, in part, by Cray Research Inc., 
   9  * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics 
  10  * Corporation, none of whom are responsible for the results.  The author 
  13  * Redistribution and use in source and binary forms -- with or without 
  14  * modification -- are permitted for any purpose, provided that 
  15  * redistributions in source form retain this entire copyright notice and 
  16  * indicate the origin and nature of any modifications. 
  18  * I'd appreciate being given credit for this package in the documentation 
  19  * of software which uses it, but that is not a requirement. 
  21  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 
  22  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
  23  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
  24  * HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
  27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  30  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  36  * Add your own defines, if needed, here. 
  42 #include <sys/types.h> 
  46 #ifndef wxCHECK_GCC_VERSION 
  47 #define wxCHECK_GCC_VERSION( major, minor ) \ 
  48     ( defined(__GNUC__) && defined(__GNUC_MINOR__) \ 
  49     && ( ( __GNUC__ > (major) ) \ 
  50         || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) ) ) 
  54 #       define wx_wchar char 
  56     #if (defined(__GNUC__) && !wxCHECK_GCC_VERSION(2, 96)) 
  57 #               define wx_wchar __WCHAR_TYPE__  
  58     #else // __WCHAR_TYPE__ and gcc < 2.96 
  60 #               define wx_wchar wchar_t          
  61     #endif // __WCHAR_TYPE__ 
  62 #endif // ASCII/Unicode 
  65  * interface types etc. 
  69  * regoff_t has to be large enough to hold either off_t or ssize_t, 
  70  * and must be signed; it's only a guess that long is suitable. 
  72 typedef long regoff_t
; 
  75  * other interface types 
  78 /* the biggie, a compiled RE (or rather, a front end to same) */ 
  81         int                     re_magic
;               /* magic number */ 
  82         size_t          re_nsub
;                /* number of subexpressions */ 
  83         long            re_info
;                /* information about RE */ 
  84 #define  REG_UBACKREF            000001 
  85 #define  REG_ULOOKAHEAD          000002 
  86 #define  REG_UBOUNDS     000004 
  87 #define  REG_UBRACES     000010 
  88 #define  REG_UBSALNUM            000020 
  89 #define  REG_UPBOTCH     000040 
  90 #define  REG_UBBS                000100 
  91 #define  REG_UNONPOSIX           000200 
  92 #define  REG_UUNSPEC     000400 
  93 #define  REG_UUNPORT     001000 
  94 #define  REG_ULOCALE     002000 
  95 #define  REG_UEMPTYMATCH         004000 
  96 #define  REG_UIMPOSSIBLE         010000 
  97 #define  REG_USHORTEST           020000 
  98         int                     re_csize
;               /* sizeof(character) */ 
  99         char       *re_endp
;            /* backward compatibility kludge */ 
 100         /* the rest is opaque pointers to hidden innards */ 
 101         char       *re_guts
;            /* `char *' is more portable than `void *' */ 
 105 /* result reporting (may acquire more fields later) */ 
 108         regoff_t        rm_so
;                  /* start of substring */ 
 109         regoff_t        rm_eo
;                  /* end of substring */ 
 112 /* supplementary control and reporting */ 
 115         regmatch_t      rm_extend
;              /* see REG_EXPECT */ 
 121  * regex compilation flags 
 123 #define REG_BASIC       000000          /* BREs (convenience) */ 
 124 #define REG_EXTENDED    000001  /* EREs */ 
 125 #define REG_ADVF        000002          /* advanced features in EREs */ 
 126 #define REG_ADVANCED    000003  /* AREs (which are also EREs) */ 
 127 #define REG_QUOTE       000004          /* no special characters, none */ 
 128 #define REG_NOSPEC      REG_QUOTE       /* historical synonym */ 
 129 #define REG_ICASE       000010          /* ignore case */ 
 130 #define REG_NOSUB       000020          /* don't care about subexpressions */ 
 131 #define REG_EXPANDED    000040  /* expanded format, white space & comments */ 
 132 #define REG_NLSTOP      000100          /* \n doesn't match . or [^ ] */ 
 133 #define REG_NLANCH      000200          /* ^ matches after \n, $ before */ 
 134 #define REG_NEWLINE 000300              /* newlines are line terminators */ 
 135 #define REG_PEND        000400          /* ugh -- backward-compatibility hack */ 
 136 #define REG_EXPECT      001000          /* report details on partial/limited 
 138 #define REG_BOSONLY 002000              /* temporary kludge for BOS-only matches */ 
 139 #define REG_DUMP        004000          /* none of your business :-) */ 
 140 #define REG_FAKE        010000          /* none of your business :-) */ 
 141 #define REG_PROGRESS    020000  /* none of your business :-) */ 
 146  * regex execution flags 
 148 #define REG_NOTBOL      0001            /* BOS is not BOL */ 
 149 #define REG_NOTEOL      0002            /* EOS is not EOL */ 
 150 #define REG_STARTEND    0004    /* backward compatibility kludge */ 
 151 #define REG_FTRACE      0010            /* none of your business */ 
 152 #define REG_MTRACE      0020            /* none of your business */ 
 153 #define REG_SMALL       0040            /* none of your business */ 
 158  * Be careful if modifying the list of error codes -- the table used by 
 159  * regerror() is generated automatically from this file! 
 161 #define REG_OKAY         0                      /* no errors detected */ 
 162 #define REG_NOMATCH  1                  /* failed to match */ 
 163 #define REG_BADPAT       2                      /* invalid regexp */ 
 164 #define REG_ECOLLATE     3              /* invalid collating element */ 
 165 #define REG_ECTYPE       4                      /* invalid character class */ 
 166 #define REG_EESCAPE  5                  /* invalid escape \ sequence */ 
 167 #define REG_ESUBREG  6                  /* invalid backreference number */ 
 168 #define REG_EBRACK       7                      /* brackets [] not balanced */ 
 169 #define REG_EPAREN       8                      /* parentheses () not balanced */ 
 170 #define REG_EBRACE       9                      /* braces {} not balanced */ 
 171 #define REG_BADBR       10                      /* invalid repetition count(s) */ 
 172 #define REG_ERANGE      11                      /* invalid character range */ 
 173 #define REG_ESPACE      12                      /* out of memory */ 
 174 #define REG_BADRPT      13                      /* quantifier operand invalid */ 
 175 #define REG_ASSERT      15                      /* "can't happen" -- you found a bug */ 
 176 #define REG_INVARG      16                      /* invalid argument to regex function */ 
 177 #define REG_MIXED       17                      /* character widths of regex and string 
 179 #define REG_BADOPT      18                      /* invalid embedded option */ 
 180 /* two specials for debugging and testing */ 
 181 #define REG_ATOI        101                     /* convert error-code name to number */ 
 182 #define REG_ITOA        102                     /* convert error-code number to name */ 
 187  * the prototypes for exported functions 
 189 extern int      wx_regcomp(regex_t 
*, const wx_wchar 
*, size_t, int); 
 190 extern int      regcomp(regex_t 
*, const wx_wchar 
*, int); 
 191 extern int      wx_regexec(regex_t 
*, const wx_wchar 
*, size_t, rm_detail_t 
*, size_t, regmatch_t
[], int); 
 192 extern int      regexec(regex_t 
*, const wx_wchar 
*, size_t, regmatch_t
[], int); 
 193 extern void regfree(regex_t 
*); 
 194 extern size_t regerror(int, const regex_t 
*, char *, size_t); 
 195 extern void wx_regfree(regex_t 
*); 
 196 extern size_t wx_regerror(int, const regex_t 
*, char *, size_t); 
 202 #endif   /* _REGEX_H_ */