Revision: 2697
http://skim-app.svn.sourceforge.net/skim-app/?rev=2697&view=rev
Author: hofman
Date: 2007-08-21 16:55:47 -0700 (Tue, 21 Aug 2007)
Log Message:
-----------
Better determination of substring match for type-select.
Modified Paths:
--------------
trunk/SKTypeSelectHelper.m
Modified: trunk/SKTypeSelectHelper.m
===================================================================
--- trunk/SKTypeSelectHelper.m 2007-08-21 23:13:30 UTC (rev 2696)
+++ trunk/SKTypeSelectHelper.m 2007-08-21 23:55:47 UTC (rev 2697)
@@ -40,6 +40,12 @@
#define TIMEOUT 0.7
[EMAIL PROTECTED] NSString (BDSKTypeAheadHelperExtensions)
+- (BOOL)containsStringStartingAtWord:(NSString *)string options:(int)mask
range:(NSRange)range;
[EMAIL PROTECTED]
+
+#pragma mark -
+
@interface SKTypeSelectHelper (SKPrivate)
- (NSArray *)searchCache;
- (void)searchWithStickyMatch:(BOOL)allowUpdate;
@@ -223,7 +229,6 @@
unsigned int labelIndex = selectedIndex;
BOOL looped = NO;
- unsigned int searchStringLength = [searchString length];
int options = NSCaseInsensitiveSearch;
if (matchOption == SKPrefixMatch)
@@ -243,11 +248,8 @@
if ([label caseInsensitiveCompare:searchString] == NSOrderedSame)
return labelIndex;
} else {
- int location = [label length] < searchStringLength ? NSNotFound :
[label rangeOfString:searchString options:options].location;
- if (location != NSNotFound) {
- if (location == 0 || [[NSCharacterSet letterCharacterSet]
characterIsMember:[label characterAtIndex:location - 1]] == NO)
- return labelIndex;
- }
+ if ([label containsStringStartingAtWord:searchString
options:options range:NSMakeRange(0, [label length])])
+ return labelIndex;
}
}
@@ -255,3 +257,32 @@
}
@end
+
+#pragma mark -
+
[EMAIL PROTECTED] NSString (BDSKTypeAheadHelperExtensions)
+
+- (BOOL)containsStringStartingAtWord:(NSString *)string options:(int)mask
range:(NSRange)range {
+ unsigned int stringLength = [string length];
+ if (stringLength == 0 || stringLength > range.length)
+ return NO;
+ if (mask & NSAnchoredSearch)
+ return [self rangeOfString:string options:mask range:range].length > 0;
+ NSRange searchRange = range;
+ while (searchRange.length >= stringLength) {
+ NSRange r = [self rangeOfString:string options:mask range:searchRange];
+ if (r.location == NSNotFound)
+ return NO;
+ if (r.location == 0 || [[NSCharacterSet letterCharacterSet]
characterIsMember:[self characterAtIndex:r.location - 1]])
+ return YES;
+ if (mask & NSBackwardsSearch)
+ searchRange = NSMakeRange(searchRange.location, NSMaxRange(r) -
searchRange.location - 1);
+ else
+ searchRange = NSMakeRange(r.location + 1, NSMaxRange(searchRange)
- r.location - 1);
+ if (mask & NSAnchoredSearch)
+ return NO;
+ }
+ return NO;
+}
+
[EMAIL PROTECTED]
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit