More improvements to the class parser.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/gorm/trunk@20388 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Gregory John Casamento 2004-11-27 18:20:44 +00:00
parent f5d1828901
commit c3dcc6f3b0
4 changed files with 43 additions and 11 deletions

View file

@ -1,3 +1,11 @@
2004-11-27 13:22 Gregory John Casamento <greg_casamento@yahoo.com>
* GormObjCHeaderParser/OCClass.m
* GormObjCHeaderParser/OCIVar.m
* GormObjCHeaderParser/OCMethod.m: Added code to parse method
to trim the result of any whitespace to make certain that there
aren't any extra spaces in the data which could cause problems.
2004-11-27 09:17 Gregory John Casamento <greg_casamento@yahoo.com>
* GormObjCHeaderParser/OCClass.m: Condensed parse methods into

View file

@ -26,6 +26,7 @@
#include <Foundation/NSString.h>
#include <Foundation/NSArray.h>
#include <Foundation/NSScanner.h>
#include <Foundation/NSCharacterSet.h>
#include <GormObjCHeaderParser/OCClass.h>
#include <GormObjCHeaderParser/OCMethod.h>
#include <GormObjCHeaderParser/OCIVar.h>
@ -124,23 +125,45 @@
NSString *methodsString = nil;
NSString *ivarsString = nil;
NSScanner *methodScan = nil;
[scanner scanUpToString: @"@interface" intoString: NULL]; // look ahead...
[scanner scanUpToString: @"\n" intoString: &interfaceLine];
iscan = [NSScanner scannerWithString: interfaceLine]; // reset scanner...
if(NSEqualRanges([interfaceLine rangeOfString: @":"],NSMakeRange(NSNotFound,0)) == NO)
NSRange range;
NSRange notFound = NSMakeRange(NSNotFound,0);
NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet];
// get the interface line... look ahead...
if(NSEqualRanges(range = [classString rangeOfString: @"{"], notFound) == NO)
{
[scanner scanUpToString: @"@interface" intoString: NULL];
[scanner scanUpToString: @"{" intoString: &interfaceLine];
iscan = [NSScanner scannerWithString: interfaceLine]; // reset scanner...
}
else // if there is no "{", then there are no ivars...
{
[scanner scanUpToString: @"@interface" intoString: NULL];
[scanner scanUpToString: @"\n" intoString: &interfaceLine];
iscan = [NSScanner scannerWithString: interfaceLine]; // reset scanner...
}
// look ahead...
if(NSEqualRanges([interfaceLine rangeOfString: @":"], notFound) == NO)
{
NSString *cn = nil, *scn = nil;
[iscan scanUpToAndIncludingString: @"@interface" intoString: NULL];
[iscan scanUpToString: @":" intoString: &className];
[iscan scanUpToString: @":" intoString: &cn];
className = [cn stringByTrimmingCharactersInSet: wsnl];
RETAIN(className);
[iscan scanString: @":" intoString: NULL];
[iscan scanUpToString: @" " intoString: &superClassName];
[iscan scanUpToCharactersFromSet: wsnl intoString: &scn];
superClassName = [scn stringByTrimmingCharactersInSet: wsnl];
RETAIN(superClassName);
}
else // category...
{
NSString *cn = nil;
[iscan scanUpToAndIncludingString: @"@interface" intoString: NULL];
[iscan scanUpToString: @" " intoString: &className];
[iscan scanUpToString: @" " intoString: &cn];
className = [cn stringByTrimmingCharactersInSet: wsnl];
RETAIN(className);
isCategory = YES;
}

View file

@ -102,6 +102,7 @@
scanner = [NSScanner scannerWithString: tempName];
[scanner setCharactersToBeSkipped: [NSCharacterSet characterSetWithCharactersInString: @"*"]];
[scanner scanUpToCharactersFromSet: wsnl intoString: &name];
name = [name stringByTrimmingCharactersInSet: wsnl];
RETAIN(name);
}
@end

View file

@ -161,7 +161,7 @@
}
}
ASSIGN(name, selectorPart);
ASSIGN(name, [selectorPart stringByTrimmingCharactersInSet: wsnl]);
}
else // No return type specified. The default is id, so we must treat it as a potential action...
{
@ -192,7 +192,7 @@
selectorPart = [selectorPart stringByAppendingString: argPart];
}
ASSIGN(name, selectorPart);
ASSIGN(name, [selectorPart stringByTrimmingCharactersInSet: wsnl]);
}
}
else
@ -203,7 +203,7 @@
NSScanner *selScanner = [NSScanner scannerWithString: tempSelector];
[selScanner scanUpToAndIncludingString: @")" intoString: NULL];
[selScanner scanUpToCharactersFromSet: wsnl intoString: &selectorPart];
ASSIGN(name, selectorPart);
ASSIGN(name, [selectorPart stringByTrimmingCharactersInSet: wsnl]);
}
}
}