Revision: 3577
http://skim-app.svn.sourceforge.net/skim-app/?rev=3577&view=rev
Author: hofman
Date: 2008-03-29 10:48:59 -0700 (Sat, 29 Mar 2008)
Log Message:
-----------
Use NSScanner to parse version strings.
Modified Paths:
--------------
trunk/SKVersionNumber.m
Modified: trunk/SKVersionNumber.m
===================================================================
--- trunk/SKVersionNumber.m 2008-03-29 11:18:14 UTC (rev 3576)
+++ trunk/SKVersionNumber.m 2008-03-29 17:48:59 UTC (rev 3577)
@@ -34,55 +34,57 @@
NSMutableString *mutableVersionString = [[NSMutableString alloc] init];
NSScanner *scanner = [[NSScanner alloc] initWithString:versionString];
+ NSString *sep = @"";
- [scanner setCharactersToBeSkipped:nil];
+ [scanner setCharactersToBeSkipped:[NSCharacterSet
whitespaceCharacterSet]];
- unichar c = [versionString length] ? [versionString
characterAtIndex:0] : 0;
- if (c == 'v' || c == 'V')
- [scanner setScanLocation:1];
-
- while ([scanner isAtEnd] == NO) {
+ // ignore a leading "version" or "v", possibly followed by "-"
+ if ([scanner scanString:@"version" intoString:NULL] || [scanner
scanString:@"v" intoString:NULL])
+ [scanner scanString:@"-" intoString:NULL];
+
+ while ([scanner isAtEnd] == NO && sep != nil) {
int component;
- if ([scanner scanInt:&component] == NO || component < 0)
- // Failed to scan integer
- break;
+ if ([scanner scanInt:&component] && component >= 0) {
- [mutableVersionString appendFormat: @"[EMAIL PROTECTED]", c == '.'
? @"." : @"", component];
-
- componentCount++;
- components = realloc(components, sizeof(*components) *
componentCount);
- components[componentCount - 1] = component;
-
- if ([scanner isAtEnd])
- break;
-
- c = [versionString characterAtIndex:[scanner scanLocation]];
- if (c == '.') {
- } else if (releaseType == SKReleaseVersionType) {
- if (c == 'a' || c == 'A') {
- releaseType = SKAlphaVersionType;
- [mutableVersionString appendString:c == 'a' ? @"a" : @"A"];
- } else if (c == 'b' || c == 'B') {
- releaseType = SKBetaVersionType;
- [mutableVersionString appendString:c == 'b' ? @"b" : @"B"];
- } else if (c == 'r' || c == 'R') {
- [scanner setScanLocation:[scanner scanLocation] + 1];
- c = [versionString characterAtIndex:[scanner
scanLocation]];
- if (c == 'c' || c == 'C') {
- releaseType = SKReleaseCandidateVersionType;
- [mutableVersionString appendString:c == 'c' ? @"rc" :
@"RC"];
- } else
- break;
- } else
- break;
+ [mutableVersionString appendFormat:@"[EMAIL PROTECTED]", sep,
component];
componentCount++;
components = realloc(components, sizeof(*components) *
componentCount);
- components[componentCount - 1] = -releaseType;
+ components[componentCount - 1] = component;
+
+ if ([scanner isAtEnd] == NO) {
+ sep = nil;
+ if ([scanner scanString:@"." intoString:NULL] || [scanner
scanString:@"-" intoString:NULL] || [scanner scanString:@"version"
intoString:NULL] || [scanner scanString:@"v" intoString:NULL]) {
+ sep = @".";
+ }
+ if (releaseType == SKReleaseVersionType) {
+ if ([scanner scanString:@"alpha" intoString:NULL] ||
[scanner scanString:@"a" intoString:NULL]) {
+ releaseType = SKAlphaVersionType;
+ [mutableVersionString appendString:@"a"];
+ } else if ([scanner scanString:@"beta"
intoString:NULL] || [scanner scanString:@"b" intoString:NULL]) {
+ releaseType = SKBetaVersionType;
+ [mutableVersionString appendString:@"b"];
+ } else if ([scanner scanString:@"release candidate"
intoString:NULL] || [scanner scanString:@"rc" intoString:NULL]) {
+ releaseType = SKReleaseCandidateVersionType;
+ [mutableVersionString appendString:@"rc"];
+ }
+
+ if (releaseType != SKReleaseVersionType) {
+ // we scanned an "a", "b", or "rc"
+ componentCount++;
+ components = realloc(components,
sizeof(*components) * componentCount);
+ components[componentCount - 1] = -releaseType;
+
+ sep = @"";
+
+ // ignore a "." or "-"
+ [scanner scanString:@"." intoString:NULL] ||
[scanner scanString:@"-" intoString:NULL];
+ }
+ }
+ }
} else
- break;
- [scanner setScanLocation:[scanner scanLocation] + 1];
+ sep = nil;
}
if ([mutableVersionString isEqualToString:originalVersionString])
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit