Add the strip encoder patch from Anatoly Techtonik #2130016

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10896 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2008-11-01 22:52:26 +00:00
commit a604f46593
5 changed files with 69 additions and 0 deletions

View file

@ -3,6 +3,20 @@
Version 1.3.37 (in progress)
============================
2008-11-01: wsfulton
Add the strip encoder patch from Anatoly Techtonik #2130016. This enables an
easy way to rename symbols by stripping a commonly used prefix in all the
function/struct names. It works in the same way as the other encoders, such as
title, lower, command etc outlined in CHANGES file dated 12/30/2005. Example
below will rename wxAnotherWidget to AnotherWidget and wxDoSomething to
DoSomething:
%rename("%(strip:[wx])s") "";
struct wxAnotherWidget {
void wxDoSomething();
};
2008-09-26: mutandiz
[allegrocl]
Lots of test-suite work.

View file

@ -260,6 +260,7 @@ CPP_TEST_CASES += \
rename3 \
rename4 \
rename_scope \
rename_strip_encoder \
restrict_cplusplus \
return_const_value \
return_value_scope \

View file

@ -0,0 +1,6 @@
from rename_strip_encoder import *
s = SomeWidget()
a = AnotherWidget()
a.DoSomething()

View file

@ -0,0 +1,16 @@
%module rename_strip_encoder
// strip the wx prefix from all identifiers
%rename("%(strip:[wx])s") "";
%inline %{
class wxSomeWidget {
};
struct wxAnotherWidget {
void wxDoSomething() {}
};
%}

View file

@ -926,6 +926,37 @@ String *Swig_string_command(String *s) {
}
/* -----------------------------------------------------------------------------
* Swig_string_strip()
*
* Strip given prefix from identifiers
*
* Printf(stderr,"%(strip:[wx])s","wxHello") -> Hello
* ----------------------------------------------------------------------------- */
String *Swig_string_strip(String *s) {
String *ns;
if (!Len(s)) {
ns = NewString(s);
} else {
const char *cs = Char(s);
const char *ce = Strchr(cs, ']');
if (*cs != '[' || ce == NULL) {
ns = NewString(s);
} else {
String *fmt = NewStringf("%%.%ds", ce-cs-1);
String *prefix = NewStringf(fmt, cs+1);
if (0 == Strncmp(ce+1, prefix, Len(prefix))) {
ns = NewString(ce+1+Len(prefix));
} else {
ns = NewString(ce+1);
}
}
}
return ns;
}
/* -----------------------------------------------------------------------------
* Swig_string_rxspencer()
*
@ -1053,6 +1084,7 @@ void Swig_init() {
DohEncoding("command", Swig_string_command);
DohEncoding("rxspencer", Swig_string_rxspencer);
DohEncoding("schemify", Swig_string_schemify);
DohEncoding("strip", Swig_string_strip);
/* aliases for the case encoders */
DohEncoding("uppercase", Swig_string_upper);