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

Reply via email to