Remove old experimental rxspencer encoder and rxsmatch function.

They are replaced with the new, officially supported PCRE-based regex and
regexmatch.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12175 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Vadim Zeitlin 2010-07-22 17:02:35 +00:00
commit 587d843521
6 changed files with 17 additions and 181 deletions

View file

@ -9,6 +9,17 @@ Version 2.0.1 (in progress)
Fix wrapping of function pointers and member function pointers when the function Fix wrapping of function pointers and member function pointers when the function
returns by reference. returns by reference.
2010-07-13: vadz
Removed support for the old experimental "rxspencer" encoder and
"[not]rxsmatch" in %rename (see the 01/16/2006 entry). The new and
officially supported "regex" encoder and "[not]regexmatch" checks
should be used instead (see the two previous entries). Please
replace "%(rxspencer:[pat][subst])s" with "%(regex:/pat/subst/)s"
when upgrading. Notice that you will also need to replace the back-
references of form "@1" with the more standard "\\1" and may need to
adjust your regular expressions syntax as the new regex encoder uses
Perl-compatible syntax and not (extended) POSIX syntax as the old one.
2010-07-13: vadz 2010-07-13: vadz
Add "regexmatch", "regextarget" and "notregexmatch" which can be Add "regexmatch", "regextarget" and "notregexmatch" which can be
used to apply %rename directives to the declarations matching the used to apply %rename directives to the declarations matching the

View file

@ -2,7 +2,7 @@
%warnfilter(SWIGWARN_PARSE_REDEFINED) S_May; %warnfilter(SWIGWARN_PARSE_REDEFINED) S_May;
// %rename with rxspencer can do the equivalent of these two renames, which was resulting in uncompileable code // %rename using regex can do the equivalent of these two renames, which was resulting in uncompileable code
%rename(May) M_May; %rename(May) M_May;
%rename(May) S_May; %rename(May) S_May;

View file

@ -33,7 +33,7 @@
%rename(awk_cmd) ""; %rename(awk_cmd) "";
%rename("%(title)s",rxsmatch$parentNode$type="enum .*") ""; %rename("%(title)s",regexmatch$parentNode$type="enum .*") "";
%inline %inline
{ {
@ -59,7 +59,7 @@
} }
%rename("%(lowercase)s",sourcefmt="%(rxspencer:[GSL_(.*)][@1])s",%$isfunction) ""; %rename("%(lowercase)s",sourcefmt="%(regex:/GSL_(.*)/\\1/)s",%$isfunction) "";
%inline { %inline {
void GSL_Hello() {} void GSL_Hello() {}
} }

View file

@ -1108,112 +1108,6 @@ String *Swig_string_strip(String *s) {
} }
/* -----------------------------------------------------------------------------
* Swig_string_rxspencer()
*
* Executes a regexp substitution via the RxSpencer library. For example:
*
* Printf(stderr,"gsl%(rxspencer:[GSL_.*_][@1])s","GSL_Hello_") -> gslHello
* ----------------------------------------------------------------------------- */
#if defined(HAVE_RXSPENCER)
#include <sys/types.h>
#include <rxspencer/regex.h>
#define USE_RXSPENCER
#endif
const char *skip_delim(char pb, char pe, const char *ce) {
int end = 0;
int lb = 0;
while (!end && *ce != '\0') {
if (*ce == pb) {
++lb;
}
if (*ce == pe) {
if (!lb) {
end = 1;
--ce;
} else {
--lb;
}
}
++ce;
}
return end ? ce : 0;
}
#if defined(USE_RXSPENCER)
String *Swig_string_rxspencer(String *s) {
String *res = 0;
if (Len(s)) {
const char *cs = Char(s);
const char *cb;
const char *ce;
if (*cs == '[') {
int retval;
regex_t compiled;
cb = ++cs;
ce = skip_delim('[', ']', cb);
if (ce) {
char bregexp[512];
strncpy(bregexp, cb, ce - cb);
bregexp[ce - cb] = '\0';
++ce;
retval = regcomp(&compiled, bregexp, REG_EXTENDED);
if (retval == 0) {
cs = ce;
if (*cs == '[') {
cb = ++cs;
ce = skip_delim('[', ']', cb);
if (ce) {
const char *cvalue = ce + 1;
int nsub = (int) compiled.re_nsub + 1;
regmatch_t *pmatch = (regmatch_t *) malloc(sizeof(regmatch_t) * (nsub));
retval = regexec(&compiled, cvalue, nsub, pmatch, 0);
if (retval != REG_NOMATCH) {
char *spos = 0;
res = NewStringWithSize(cb, ce - cb);
spos = Strchr(res, '@');
while (spos) {
char cd = *(++spos);
if (isdigit(cd)) {
char arg[8];
size_t len;
int i = cd - '0';
sprintf(arg, "@%d", i);
if (i < nsub && (len = pmatch[i].rm_eo - pmatch[i].rm_so)) {
char value[256];
strncpy(value, cvalue + pmatch[i].rm_so, len);
value[len] = 0;
Replaceall(res, arg, value);
} else {
Replaceall(res, arg, "");
}
spos = Strchr(res, '@');
} else if (cd == '@') {
spos = strchr(spos + 1, '@');
}
}
}
free(pmatch);
}
}
}
regfree(&compiled);
}
}
}
if (!res)
res = NewStringEmpty();
return res;
}
#else
String *Swig_string_rxspencer(String *s) {
(void) s;
return NewStringEmpty();
}
#endif
#ifdef HAVE_PCRE #ifdef HAVE_PCRE
#include <pcre.h> #include <pcre.h>
@ -1338,7 +1232,6 @@ void Swig_init() {
DohEncoding("typecode", Swig_string_typecode); DohEncoding("typecode", Swig_string_typecode);
DohEncoding("mangle", Swig_string_emangle); DohEncoding("mangle", Swig_string_emangle);
DohEncoding("command", Swig_string_command); DohEncoding("command", Swig_string_command);
DohEncoding("rxspencer", Swig_string_rxspencer);
DohEncoding("schemify", Swig_string_schemify); DohEncoding("schemify", Swig_string_schemify);
DohEncoding("strip", Swig_string_strip); DohEncoding("strip", Swig_string_strip);
DohEncoding("regex", Swig_string_regex); DohEncoding("regex", Swig_string_regex);

View file

@ -1061,13 +1061,10 @@ static void Swig_name_object_attach_keys(const char *keys[], Hash *nameobj) {
if (ckey) { if (ckey) {
const char **rkey; const char **rkey;
int isnotmatch = 0; int isnotmatch = 0;
int isrxsmatch = 0;
int isregexmatch = 0; int isregexmatch = 0;
if ((strncmp(ckey, "match", 5) == 0) if ((strncmp(ckey, "match", 5) == 0)
|| (isnotmatch = (strncmp(ckey, "notmatch", 8) == 0)) || (isnotmatch = (strncmp(ckey, "notmatch", 8) == 0))
|| (isrxsmatch = (strncmp(ckey, "rxsmatch", 8) == 0))
|| (isregexmatch = (strncmp(ckey, "regexmatch", 10) == 0)) || (isregexmatch = (strncmp(ckey, "regexmatch", 10) == 0))
|| (isnotmatch = isrxsmatch = (strncmp(ckey, "notrxsmatch", 11) == 0))
|| (isnotmatch = isregexmatch = (strncmp(ckey, "notregexmatch", 13) == 0))) { || (isnotmatch = isregexmatch = (strncmp(ckey, "notregexmatch", 13) == 0))) {
Hash *mi = NewHash(); Hash *mi = NewHash();
List *attrlist = Swig_make_attrlist(ckey); List *attrlist = Swig_make_attrlist(ckey);
@ -1075,14 +1072,8 @@ static void Swig_name_object_attach_keys(const char *keys[], Hash *nameobj) {
matchlist = NewList(); matchlist = NewList();
Setattr(mi, "value", Getattr(kw, "value")); Setattr(mi, "value", Getattr(kw, "value"));
Setattr(mi, "attrlist", attrlist); Setattr(mi, "attrlist", attrlist);
#ifdef SWIG_DEBUG
if (isrxsmatch)
Printf(stdout, "rxsmatch to use: %s %s %s\n", ckey, Getattr(kw, "value"), attrlist);
#endif
if (isnotmatch) if (isnotmatch)
SetFlag(mi, "notmatch"); SetFlag(mi, "notmatch");
if (isrxsmatch)
SetFlag(mi, "rxsmatch");
if (isregexmatch) if (isregexmatch)
SetFlag(mi, "regexmatch"); SetFlag(mi, "regexmatch");
Delete(attrlist); Delete(attrlist);
@ -1205,37 +1196,6 @@ int Swig_name_regexmatch_value(Node *n, String *pattern, String *s) {
#endif /* HAVE_PCRE/!HAVE_PCRE */ #endif /* HAVE_PCRE/!HAVE_PCRE */
#if defined(HAVE_RXSPENCER)
#include <sys/types.h>
#include <rxspencer/regex.h>
#define USE_RXSPENCER
#endif
#if defined(USE_RXSPENCER)
int Swig_name_rxsmatch_value(String *mvalue, String *value) {
int match = 0;
char *cvalue = Char(value);
char *cmvalue = Char(mvalue);
regex_t compiled;
int retval = regcomp(&compiled, cmvalue, REG_EXTENDED | REG_NOSUB);
if (retval != 0)
return 0;
retval = regexec(&compiled, cvalue, 0, 0, 0);
match = (retval == REG_NOMATCH) ? 0 : 1;
#ifdef SWIG_DEBUG
Printf(stdout, "rxsmatch_value: %s %s %d\n", cvalue, cmvalue, match);
#endif
regfree(&compiled);
return match;
}
#else
int Swig_name_rxsmatch_value(String *mvalue, String *value) {
(void) mvalue;
(void) value;
return 0;
}
#endif
int Swig_name_match_value(String *mvalue, String *value) { int Swig_name_match_value(String *mvalue, String *value) {
#if defined(SWIG_USE_SIMPLE_MATCHOR) #if defined(SWIG_USE_SIMPLE_MATCHOR)
int match = 0; int match = 0;
@ -1277,19 +1237,11 @@ int Swig_name_match_nameobj(Hash *rn, Node *n) {
List *lattr = Getattr(mi, "attrlist"); List *lattr = Getattr(mi, "attrlist");
String *nval = Swig_get_lattr(n, lattr); String *nval = Swig_get_lattr(n, lattr);
int notmatch = GetFlag(mi, "notmatch"); int notmatch = GetFlag(mi, "notmatch");
int rxsmatch = GetFlag(mi, "rxsmatch");
int regexmatch = GetFlag(mi, "regexmatch"); int regexmatch = GetFlag(mi, "regexmatch");
#ifdef SWIG_DEBUG
Printf(stdout, "mi %d %s re %d not %d \n", i, nval, notmatch, rxsmatch);
if (rxsmatch) {
Printf(stdout, "rxsmatch %s\n", lattr);
}
#endif
match = 0; match = 0;
if (nval) { if (nval) {
String *kwval = Getattr(mi, "value"); String *kwval = Getattr(mi, "value");
match = rxsmatch ? Swig_name_rxsmatch_value(kwval, nval) match = regexmatch ? Swig_name_regexmatch_value(n, kwval, nval)
: regexmatch ? Swig_name_regexmatch_value(n, kwval, nval)
: Swig_name_match_value(kwval, nval); : Swig_name_match_value(kwval, nval);
#ifdef SWIG_DEBUG #ifdef SWIG_DEBUG
Printf(stdout, "val %s %s %d %d \n", nval, kwval, match, ilen); Printf(stdout, "val %s %s %d %d \n", nval, kwval, match, ilen);
@ -1329,7 +1281,6 @@ Hash *Swig_name_nameobj_lget(List *namelist, Node *n, String *prefix, String *na
String *sfmt = Getattr(rn, "sourcefmt"); String *sfmt = Getattr(rn, "sourcefmt");
String *sname = 0; String *sname = 0;
int fullname = GetFlag(rn, "fullname"); int fullname = GetFlag(rn, "fullname");
int rxstarget = GetFlag(rn, "rxstarget");
int regextarget = GetFlag(rn, "regextarget"); int regextarget = GetFlag(rn, "regextarget");
if (sfmt) { if (sfmt) {
if (fullname && prefix) { if (fullname && prefix) {
@ -1347,8 +1298,7 @@ Hash *Swig_name_nameobj_lget(List *namelist, Node *n, String *prefix, String *na
DohIncref(name); DohIncref(name);
} }
} }
match = rxstarget ? Swig_name_rxsmatch_value(tname, sname) match = regextarget ? Swig_name_regexmatch_value(n, tname, sname)
: regextarget ? Swig_name_regexmatch_value(n, tname, sname)
: Swig_name_match_value(tname, sname); : Swig_name_match_value(tname, sname);
Delete(sname); Delete(sname);
} else { } else {
@ -1448,7 +1398,7 @@ void Swig_name_rename_add(String *prefix, String *name, SwigType *decl, Hash *ne
ParmList *declparms = declaratorparms; ParmList *declparms = declaratorparms;
const char *rename_keys[] = { "fullname", "sourcefmt", "targetfmt", "continue", "rxstarget", "regextarget", 0 }; const char *rename_keys[] = { "fullname", "sourcefmt", "targetfmt", "continue", "regextarget", 0 };
Swig_name_object_attach_keys(rename_keys, newname); Swig_name_object_attach_keys(rename_keys, newname);
/* Add the name */ /* Add the name */

View file

@ -73,24 +73,6 @@ AS_IF([test "x$with_pcre" != xno],
]) ])
dnl Look for RxSpencer
AC_ARG_WITH(rxspencer, AS_HELP_STRING([--with-rxspencer], [Enable RxSpencer]), with_rxspencer="yes")
if test x"${with_rxspencer}" = xyes ; then
#check first for the header
AC_CHECK_HEADER(rxspencer/regex.h,with_rxspencer="yes",with_rxspencer="no")
if test x"${with_rxspencer}" = xyes ; then
# now check for the library
AC_CHECK_LIB(rxspencer, regcomp,with_rxspencer="yes",with_rxspencer="no")
fi
if test x"${with_rxspencer}" = xyes ; then
# library and header are available
AC_DEFINE(HAVE_RXSPENCER, 1,[Define if rxspencer is available])
LIBS="$LIBS -lrxspencer"
else
AC_MSG_NOTICE([RxSpencer not found. Obtain it at http://arglist.com/regex or http://gnuwin32.sourceforge.net/packages.html])
fi
fi
dnl CCache dnl CCache
AC_ARG_ENABLE([ccache], AS_HELP_STRING([--disable-ccache], [disable building and installation of ccache-swig executable (default enabled)]), [enable_ccache=$enableval], [enable_ccache=yes]) AC_ARG_ENABLE([ccache], AS_HELP_STRING([--disable-ccache], [disable building and installation of ccache-swig executable (default enabled)]), [enable_ccache=$enableval], [enable_ccache=yes])
AC_MSG_CHECKING([whether to enable ccache-swig]) AC_MSG_CHECKING([whether to enable ccache-swig])