svn commit: r221672 - user/gabor/tre-integration/include
Gabor Kovesdan
gabor at FreeBSD.org
Mon May 9 00:04:36 UTC 2011
Author: gabor
Date: Mon May 9 00:04:36 2011
New Revision: 221672
URL: http://svn.freebsd.org/changeset/base/221672
Log:
- Bring in TRE headers into include so that it can be built as a part of
the base system.
- It is still called tre.h for compatibility of TRE-specific applications
so regex.h only contains an include to it
Added:
user/gabor/tre-integration/include/tre.h
- copied unchanged from r221610, user/gabor/tre-integration/contrib/tre/lib/tre.h
Replaced:
user/gabor/tre-integration/include/regex.h
- copied unchanged from r221610, user/gabor/tre-integration/contrib/tre/lib/regex.h
Modified:
user/gabor/tre-integration/include/Makefile
Modified: user/gabor/tre-integration/include/Makefile
==============================================================================
--- user/gabor/tre-integration/include/Makefile Sun May 8 21:46:12 2011 (r221671)
+++ user/gabor/tre-integration/include/Makefile Mon May 9 00:04:36 2011 (r221672)
@@ -22,7 +22,7 @@ INCS= a.out.h ar.h assert.h bitstring.h
signal.h spawn.h stab.h \
stdbool.h stddef.h stdio.h stdlib.h string.h stringlist.h \
strings.h sysexits.h tar.h termios.h tgmath.h \
- time.h timeconv.h timers.h ttyent.h \
+ time.h timeconv.h timers.h tre.h ttyent.h \
ulimit.h unistd.h utime.h utmpx.h uuid.h varargs.h vis.h \
wchar.h wctype.h wordexp.h
Copied: user/gabor/tre-integration/include/regex.h (from r221610, user/gabor/tre-integration/contrib/tre/lib/regex.h)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gabor/tre-integration/include/regex.h Mon May 9 00:04:36 2011 (r221672, copy of r221610, user/gabor/tre-integration/contrib/tre/lib/regex.h)
@@ -0,0 +1,36 @@
+/*
+ regex.h - TRE legacy API
+
+ This software is released under a BSD-style license.
+ See the file LICENSE for details and copyright.
+
+ This header is for source level compatibility with old code using
+ the <tre/regex.h> header which defined the TRE API functions without
+ a prefix. New code should include <tre/tre.h> instead.
+
+*/
+
+#ifndef TRE_REXEX_H
+#define TRE_REGEX_H 1
+
+#include "tre.h"
+
+#define regcomp tre_regcomp
+#define regerror tre_regerror
+#define regexec tre_regexec
+#define regfree tre_regfree
+
+#define regacomp tre_regacomp
+#define regaexec tre_regaexec
+#define regancomp tre_regancomp
+#define reganexec tre_reganexec
+#define regawncomp tre_regawncomp
+#define regawnexec tre_regawnexec
+#define regncomp tre_regncomp
+#define regnexec tre_regnexec
+#define regwcomp tre_regwcomp
+#define regwexec tre_regwexec
+#define regwncomp tre_regwncomp
+#define regwnexec tre_regwnexec
+
+#endif /* TRE_REGEX_H */
Copied: user/gabor/tre-integration/include/tre.h (from r221610, user/gabor/tre-integration/contrib/tre/lib/tre.h)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gabor/tre-integration/include/tre.h Mon May 9 00:04:36 2011 (r221672, copy of r221610, user/gabor/tre-integration/contrib/tre/lib/tre.h)
@@ -0,0 +1,227 @@
+/*
+ tre.h - TRE public API definitions
+
+ This software is released under a BSD-style license.
+ See the file LICENSE for details and copyright.
+
+*/
+
+#ifndef TRE_H
+#define TRE_H 1
+
+#include <sys/types.h>
+
+#define TRE_WCHAR 1
+#define TRE_APPROX 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int regoff_t;
+typedef struct {
+ size_t re_nsub; /* Number of parenthesized subexpressions. */
+ void *value; /* For internal use only. */
+} regex_t;
+
+typedef struct {
+ regoff_t rm_so;
+ regoff_t rm_eo;
+} regmatch_t;
+
+
+typedef enum {
+ REG_OK = 0, /* No error. */
+ /* POSIX tre_regcomp() return error codes. (In the order listed in the
+ standard.) */
+ REG_NOMATCH, /* No match. */
+ REG_BADPAT, /* Invalid regexp. */
+ REG_ECOLLATE, /* Unknown collating element. */
+ REG_ECTYPE, /* Unknown character class name. */
+ REG_EESCAPE, /* Trailing backslash. */
+ REG_ESUBREG, /* Invalid back reference. */
+ REG_EBRACK, /* "[]" imbalance */
+ REG_EPAREN, /* "\(\)" or "()" imbalance */
+ REG_EBRACE, /* "\{\}" or "{}" imbalance */
+ REG_BADBR, /* Invalid content of {} */
+ REG_ERANGE, /* Invalid use of range operator */
+ REG_ESPACE, /* Out of memory. */
+ REG_BADRPT /* Invalid use of repetition operators. */
+} reg_errcode_t;
+
+/* POSIX tre_regcomp() flags. */
+#define REG_EXTENDED 1
+#define REG_ICASE (REG_EXTENDED << 1)
+#define REG_NEWLINE (REG_ICASE << 1)
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+/* Extra tre_regcomp() flags. */
+#define REG_BASIC 0
+#define REG_LITERAL (REG_NOSUB << 1)
+#define REG_RIGHT_ASSOC (REG_LITERAL << 1)
+#define REG_UNGREEDY (REG_RIGHT_ASSOC << 1)
+
+/* POSIX tre_regexec() flags. */
+#define REG_NOTBOL 1
+#define REG_NOTEOL (REG_NOTBOL << 1)
+
+/* Extra tre_regexec() flags. */
+#define REG_APPROX_MATCHER (REG_NOTEOL << 1)
+#define REG_BACKTRACKING_MATCHER (REG_APPROX_MATCHER << 1)
+
+/* REG_NOSPEC and REG_LITERAL mean the same thing. */
+#if defined(REG_LITERAL) && !defined(REG_NOSPEC)
+#define REG_NOSPEC REG_LITERAL
+#elif defined(REG_NOSPEC) && !defined(REG_LITERAL)
+#define REG_LITERAL REG_NOSPEC
+#endif /* defined(REG_NOSPEC) */
+
+/* The maximum number of iterations in a bound expression. */
+#undef RE_DUP_MAX
+#define RE_DUP_MAX 255
+
+/* The POSIX.2 regexp functions */
+extern int
+tre_regcomp(regex_t *preg, const char *regex, int cflags);
+
+extern int
+tre_regexec(const regex_t *preg, const char *string, size_t nmatch,
+ regmatch_t pmatch[], int eflags);
+
+extern size_t
+tre_regerror(int errcode, const regex_t *preg, char *errbuf,
+ size_t errbuf_size);
+
+extern void
+tre_regfree(regex_t *preg);
+
+#ifdef TRE_WCHAR
+#include <wchar.h>
+
+/* Wide character versions (not in POSIX.2). */
+extern int
+tre_regwcomp(regex_t *preg, const wchar_t *regex, int cflags);
+
+extern int
+tre_regwexec(const regex_t *preg, const wchar_t *string,
+ size_t nmatch, regmatch_t pmatch[], int eflags);
+#endif /* TRE_WCHAR */
+
+/* Versions with a maximum length argument and therefore the capability to
+ handle null characters in the middle of the strings (not in POSIX.2). */
+extern int
+tre_regncomp(regex_t *preg, const char *regex, size_t len, int cflags);
+
+extern int
+tre_regnexec(const regex_t *preg, const char *string, size_t len,
+ size_t nmatch, regmatch_t pmatch[], int eflags);
+
+#ifdef TRE_WCHAR
+extern int
+tre_regwncomp(regex_t *preg, const wchar_t *regex, size_t len, int cflags);
+
+extern int
+tre_regwnexec(const regex_t *preg, const wchar_t *string, size_t len,
+ size_t nmatch, regmatch_t pmatch[], int eflags);
+#endif /* TRE_WCHAR */
+
+#ifdef TRE_APPROX
+
+/* Approximate matching parameter struct. */
+typedef struct {
+ int cost_ins; /* Default cost of an inserted character. */
+ int cost_del; /* Default cost of a deleted character. */
+ int cost_subst; /* Default cost of a substituted character. */
+ int max_cost; /* Maximum allowed cost of a match. */
+
+ int max_ins; /* Maximum allowed number of inserts. */
+ int max_del; /* Maximum allowed number of deletes. */
+ int max_subst; /* Maximum allowed number of substitutes. */
+ int max_err; /* Maximum allowed number of errors total. */
+} regaparams_t;
+
+/* Approximate matching result struct. */
+typedef struct {
+ size_t nmatch; /* Length of pmatch[] array. */
+ regmatch_t *pmatch; /* Submatch data. */
+ int cost; /* Cost of the match. */
+ int num_ins; /* Number of inserts in the match. */
+ int num_del; /* Number of deletes in the match. */
+ int num_subst; /* Number of substitutes in the match. */
+} regamatch_t;
+
+
+/* Approximate matching functions. */
+extern int
+tre_regaexec(const regex_t *preg, const char *string,
+ regamatch_t *match, regaparams_t params, int eflags);
+
+extern int
+tre_reganexec(const regex_t *preg, const char *string, size_t len,
+ regamatch_t *match, regaparams_t params, int eflags);
+#ifdef TRE_WCHAR
+/* Wide character approximate matching. */
+extern int
+tre_regawexec(const regex_t *preg, const wchar_t *string,
+ regamatch_t *match, regaparams_t params, int eflags);
+
+extern int
+tre_regawnexec(const regex_t *preg, const wchar_t *string, size_t len,
+ regamatch_t *match, regaparams_t params, int eflags);
+#endif /* TRE_WCHAR */
+
+/* Sets the parameters to default values. */
+extern void
+tre_regaparams_default(regaparams_t *params);
+#endif /* TRE_APPROX */
+
+#ifdef TRE_WCHAR
+typedef wchar_t tre_char_t;
+#else /* !TRE_WCHAR */
+typedef unsigned char tre_char_t;
+#endif /* !TRE_WCHAR */
+
+typedef struct {
+ int (*get_next_char)(tre_char_t *c, unsigned int *pos_add, void *context);
+ void (*rewind)(size_t pos, void *context);
+ int (*compare)(size_t pos1, size_t pos2, size_t len, void *context);
+ void *context;
+} tre_str_source;
+
+extern int
+tre_reguexec(const regex_t *preg, const tre_str_source *string,
+ size_t nmatch, regmatch_t pmatch[], int eflags);
+
+/* Returns the version string. The returned string is static. */
+extern char *
+tre_version(void);
+
+/* Returns the value for a config parameter. The type to which `result'
+ must point to depends of the value of `query', see documentation for
+ more details. */
+extern int
+tre_config(int query, void *result);
+
+enum {
+ TRE_CONFIG_APPROX,
+ TRE_CONFIG_WCHAR,
+ TRE_CONFIG_MULTIBYTE,
+ TRE_CONFIG_SYSTEM_ABI,
+ TRE_CONFIG_VERSION
+};
+
+/* Returns 1 if the compiled pattern has back references, 0 if not. */
+extern int
+tre_have_backrefs(const regex_t *preg);
+
+/* Returns 1 if the compiled pattern uses approximate matching features,
+ 0 if not. */
+extern int
+tre_have_approx(const regex_t *preg);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* TRE_H */
+
+/* EOF */
More information about the svn-src-user
mailing list