/*
- * Copyright (c) 1998, 1999 Henry Spencer. All rights reserved.
- *
+ * Copyright (c) 1998, 1999 Henry Spencer. All rights reserved.
+ *
* Development of this software was funded, in part, by Cray Research Inc.,
* UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics
* Corporation, none of whom are responsible for the results. The author
- * thanks all of them.
- *
+ * thanks all of them.
+ *
* Redistribution and use in source and binary forms -- with or without
* modification -- are permitted for any purpose, provided that
* redistributions in source form retain this entire copyright notice and
* indicate the origin and nature of any modifications.
- *
+ *
* I'd appreciate being given credit for this package in the documentation
* of software which uses it, but that is not a requirement.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id$
*/
-/* headers if any */
-
-// FreeBSD, Watcom and DMars require this, CW doesn't have nor need it.
-// Others also don't seem to need it. If you have an error related to
-// (not) including <sys/types.h> please report details to
-// wx-dev@lists.wxwindows.org
-#if defined(__UNIX__) || defined(__WATCOMC__) || defined(__DIGITALMARS__)
-# include <sys/types.h>
-#endif
-
+/* overrides for regguts.h definitions, if any */
+/* regguts only includes standard headers if NULL is not defined, so do it
+ * ourselves here */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <limits.h>
-#ifndef wxCHECK_GCC_VERSION
-#define wxCHECK_GCC_VERSION( major, minor ) \
- ( defined(__GNUC__) && defined(__GNUC_MINOR__) \
- && ( ( __GNUC__ > (major) ) \
- || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) ) )
-#endif
+#include <string.h>
-#if !wxUSE_UNICODE
-# define wx_wchar char
-#else // Unicode
- #if (defined(__GNUC__) && !wxCHECK_GCC_VERSION(2, 96))
- # define wx_wchar __WCHAR_TYPE__
- #else // __WCHAR_TYPE__ and gcc < 2.96
- // standard case
- # define wx_wchar wchar_t
- #endif // __WCHAR_TYPE__
-#endif // ASCII/Unicode
+/* must include this after ctype.h inclusion for CodeWarrior/Mac */
+#include "wx/defs.h"
+#include "wx/chartype.h"
+#include "wx/wxcrtbase.h"
-/* overrides for regguts.h definitions, if any */
-#define FUNCPTR(name, args) (*name) args
-#define MALLOC(n) malloc(n)
-#define FREE(p) free(VS(p))
-#define REALLOC(p,n) realloc(VS(p),n)
+/*
+ * Do not insert extras between the "begin" and "end" lines -- this
+ * chunk is automatically extracted to be fitted into regex.h.
+ */
+/* --- begin --- */
+/* ensure certain things don't sneak in from system headers */
+#ifdef __REG_WIDE_T
+#undef __REG_WIDE_T
+#endif
+#ifdef __REG_WIDE_COMPILE
+#undef __REG_WIDE_COMPILE
+#endif
+#ifdef __REG_WIDE_EXEC
+#undef __REG_WIDE_EXEC
+#endif
+#ifdef __REG_REGOFF_T
+#undef __REG_REGOFF_T
+#endif
+#ifdef __REG_VOID_T
+#undef __REG_VOID_T
+#endif
+#ifdef __REG_CONST
+#undef __REG_CONST
+#endif
+#ifdef __REG_NOFRONT
+#undef __REG_NOFRONT
+#endif
+#ifdef __REG_NOCHAR
+#undef __REG_NOCHAR
+#endif
+#if wxUSE_UNICODE
+# define __REG_WIDE_T wxChar
+# define __REG_WIDE_COMPILE wx_re_comp
+# define __REG_WIDE_EXEC wx_re_exec
+# define __REG_NOCHAR /* don't want the char versions */
+#endif
+#define __REG_NOFRONT /* don't want regcomp() and regexec() */
+#define _ANSI_ARGS_(x) x
+/* --- end --- */
/* internal character type and related */
-typedef wx_wchar chr; /* the type itself */
-typedef unsigned long uchr; /* unsigned type that will hold a chr */
-typedef long celt; /* type to hold chr, MCCE number, or
- * NOCELT */
-
-#define NOCELT (-1) /* celt value which is not valid chr or
- * MCCE */
-#define CHR(c) ((unsigned char) (c)) /* turn char literal into chr
- * literal */
-#define DIGITVAL(c) ((c)-'0') /* turn chr digit into its value */
-
-/* RN - the "not use sizeof() thing is really annoying!" */
-#if wxUSE_UNICODE
-# define CHRBITS 32
-# define CHR_MAX 0xfffffffe /* CHR_MAX-CHR_MIN+1 should fit in uchr */
+typedef wxChar chr; /* the type itself */
+typedef int pchr; /* what it promotes to */
+typedef unsigned uchr; /* unsigned type that will hold a chr */
+typedef int celt; /* type to hold chr, MCCE number, or NOCELT */
+#define NOCELT (-1) /* celt value which is not valid chr or MCCE */
+#define UCHAR(c) ((unsigned char) (c))
+#define CHR(c) (UCHAR(c)) /* turn char literal into chr literal */
+#define DIGITVAL(c) ((c)-'0') /* turn chr digit into its value */
+#if !wxUSE_UNICODE
+# define CHRBITS 8 /* bits in a chr; must not use sizeof */
+# define CHR_MIN 0x00 /* smallest and largest chr; the value */
+# define CHR_MAX 0xff /* CHR_MAX-CHR_MIN+1 should fit in uchr */
+#elif SIZEOF_WCHAR_T == 4
+# define CHRBITS 32 /* bits in a chr; must not use sizeof */
+# define CHR_MIN 0x00000000 /* smallest and largest chr; the value */
+# define CHR_MAX 0xffffffff /* CHR_MAX-CHR_MIN+1 should fit in uchr */
#else
-# define CHRBITS 8 /* bits in a chr; must not use sizeof */
-# define CHR_MAX 0xfe
+# define CHRBITS 16 /* bits in a chr; must not use sizeof */
+# define CHR_MIN 0x0000 /* smallest and largest chr; the value */
+# define CHR_MAX 0xffff /* CHR_MAX-CHR_MIN+1 should fit in uchr */
#endif
-#define CHR_MIN 0x00000000 /* smallest and largest chr; the value */
-/*
- PUTTING PARENTHASES AROUND THIS, I.E. (1 << CHRBITS) WILL
- CAUSE ALL CHARACTERS TO BE MATCHED!!!
-*/
-/*#define CHR_MAX 1 << CHRBITS /*0xfffffffe*/ /* CHR_MAX-CHR_MIN+1 should fit in uchr */
+/*
+ * I'm using isalpha et al. instead of wxIsalpha since BCC 5.5's iswalpha
+ * seems not to work on Windows 9x? Note that these are only used by the
+ * lexer, and although they must work for wxChars, they need only return
+ * true for characters within the ascii range.
+ */
+#define iscalnum(x) ((wxUChar)(x) < 128 && isalnum(x))
+#define iscalpha(x) ((wxUChar)(x) < 128 && isalpha(x))
+#define iscdigit(x) ((wxUChar)(x) < 128 && isdigit(x))
+#define iscspace(x) ((wxUChar)(x) < 128 && isspace(x))
+
+/* name the external functions */
+#define compile wx_re_comp
+#define exec wx_re_exec
-/* functions operating on chr */
-#define iscalnum(x) wx_isalnum(x)
-#define iscalpha(x) wx_isalpha(x)
-#define iscdigit(x) wx_isdigit(x)
-#define iscspace(x) wx_isspace(x)
+/* enable/disable debugging code (by whether REG_DEBUG is defined or not) */
+#if 0 /* no debug unless requested by makefile */
+#define REG_DEBUG /* */
+#endif
/* and pick up the standard header */
#include "regex.h"