From c320b09704e79ce161e88997afeee375f23beb4f Mon Sep 17 00:00:00 2001 From: Dave Beazley Date: Tue, 11 Feb 2003 21:31:41 +0000 Subject: [PATCH] String replacement enhancements to help with preprocessor fixes git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4298 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Source/DOH/doh.h | 2 ++ Source/DOH/string.c | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Source/DOH/doh.h b/Source/DOH/doh.h index 29c4acf95..d0406ceda 100644 --- a/Source/DOH/doh.h +++ b/Source/DOH/doh.h @@ -256,6 +256,8 @@ extern char *DohStrchr(const DOHString_or_char *s1, int ch); #define DOH_REPLACE_NOQUOTE 0x02 #define DOH_REPLACE_ID 0x04 #define DOH_REPLACE_FIRST 0x08 +#define DOH_REPLACE_ID_BEGIN 0x10 +#define DOH_REPLACE_ID_END 0x20 #define Replaceall(s,t,r) DohReplace(s,t,r,DOH_REPLACE_ANY) #define Replaceid(s,t,r) DohReplace(s,t,r,DOH_REPLACE_ID) diff --git a/Source/DOH/string.c b/Source/DOH/string.c index 04e6d184a..c56da26bb 100644 --- a/Source/DOH/string.c +++ b/Source/DOH/string.c @@ -496,6 +496,37 @@ match_identifier(char *base, char *s, char *token, int tokenlen) return 0; } + +static char * +match_identifier_begin(char *base, char *s, char *token, int tokenlen) +{ + while (s) { + s = strstr(s,token); + if (!s) return 0; + if ((s > base) && (isalnum(*(s-1)) || (*(s-1) == '_'))) { + s += tokenlen; + continue; + } + return s; + } + return 0; +} + +static char * +match_identifier_end(char *base, char *s, char *token, int tokenlen) +{ + while (s) { + s = strstr(s,token); + if (!s) return 0; + if (isalnum(*(s+tokenlen)) || (*(s+tokenlen) == '_')) { + s += tokenlen; + continue; + } + return s; + } + return 0; +} + static int replace_simple(String *str, char *token, char *rep, int flags, int count, char *(*match)(char *, char *, char *, int)) { @@ -714,7 +745,11 @@ String_replace(DOH *stro, DOH *token, DOH *rep, int flags) if (flags & DOH_REPLACE_FIRST) count = 1; - if (flags & DOH_REPLACE_ID) { + if (flags & DOH_REPLACE_ID_END) { + return replace_simple(str,Char(token),Char(rep),flags, count, match_identifier_end); + } else if (flags & DOH_REPLACE_ID_BEGIN) { + return replace_simple(str,Char(token),Char(rep),flags, count, match_identifier_begin); + } else if (flags & DOH_REPLACE_ID) { return replace_simple(str,Char(token),Char(rep),flags, count, match_identifier); } else { return replace_simple(str,Char(token), Char(rep), flags, count, match_simple);