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

Reply via email to