Revision: 10966
http://bibdesk.svn.sourceforge.net/bibdesk/?rev=10966&view=rev
Author: hofman
Date: 2007-08-21 16:55:37 -0700 (Tue, 21 Aug 2007)
Log Message:
-----------
Better determination of substring match for type-select.
Modified Paths:
--------------
trunk/bibdesk/BDSKTypeSelectHelper.m
Modified: trunk/bibdesk/BDSKTypeSelectHelper.m
===================================================================
--- trunk/bibdesk/BDSKTypeSelectHelper.m 2007-08-21 23:14:50 UTC (rev
10965)
+++ trunk/bibdesk/BDSKTypeSelectHelper.m 2007-08-21 23:55:37 UTC (rev
10966)
@@ -40,7 +40,14 @@
#import <OmniFoundation/OmniFoundation.h>
#import <OmniBase/OmniBase.h>
+
[EMAIL PROTECTED] NSString (BDSKTypeAheadHelperExtensions)
+- (BOOL)containsStringStartingAtWord:(NSString *)string options:(int)mask
range:(NSRange)range;
[EMAIL PROTECTED]
+
+
@interface BDSKTypeSelectHelper (BDSKPrivate)
+- (NSArray *)searchCache;
- (void)searchWithStickyMatch:(BOOL)allowUpdate;
- (void)stopTimer;
- (void)startTimer;
@@ -160,6 +167,12 @@
@implementation BDSKTypeSelectHelper (BDSKPrivate)
+- (NSArray *)searchCache {
+ if (searchCache == nil)
+ [self rebuildTypeSelectSearchCache];
+ return searchCache;
+}
+
- (void)stopTimer;
{
if (timeoutEvent != nil) {
@@ -237,15 +250,39 @@
looped = YES;
label = [[self searchCache] objectAtIndex:labelIndex];
-
- 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;
}
return NSNotFound;
}
@end
+
+
[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/
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit