Revision: 29353
http://sourceforge.net/p/bibdesk/svn/29353
Author: hofman
Date: 2025-07-24 15:53:52 +0000 (Thu, 24 Jul 2025)
Log Message:
-----------
NSString category to search a 'word' delimited by non-word characters, to find
a cite key substring
Modified Paths:
--------------
trunk/bibdesk/BibDocument_UI.m
trunk/bibdesk/NSString_BDSKExtensions.h
trunk/bibdesk/NSString_BDSKExtensions.m
Modified: trunk/bibdesk/BibDocument_UI.m
===================================================================
--- trunk/bibdesk/BibDocument_UI.m 2025-07-24 15:16:48 UTC (rev 29352)
+++ trunk/bibdesk/BibDocument_UI.m 2025-07-24 15:53:52 UTC (rev 29353)
@@ -1479,10 +1479,8 @@
NSString *value = [aPub valueOfField:field inherit:NO];
// value may be nil, so check before calling rangeOfString:
if (nil != value) {
- NSRange range = [value rangeOfString:oldKey
options:NSCaseInsensitiveSearch];
- if (range.location != NSNotFound &&
- (range.location == 0 || [invalidSet
characterIsMember:[value characterAtIndex:range.location - 1]]) &&
- (NSMaxRange(range) == [value length] ||
[invalidSet characterIsMember:[value characterAtIndex:NSMaxRange(range)]])) {
+ NSRange range = [value rangeOfWord:oldKey
nonWordCharacters:invalidSet ptions:NSCaseInsensitiveSearch];
+ if (range.location != NSNotFound) {
NSMutableString *tmpString = [value mutableCopy];
[tmpString replaceCharactersInRange:range
withString:key];
[aPub setField:field toValue:tmpString];
Modified: trunk/bibdesk/NSString_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSString_BDSKExtensions.h 2025-07-24 15:16:48 UTC (rev
29352)
+++ trunk/bibdesk/NSString_BDSKExtensions.h 2025-07-24 15:53:52 UTC (rev
29353)
@@ -360,6 +360,12 @@
#pragma mark -
+- (NSRange)rangeOfWord:(NSString *)searchString
nonWordCharacters:(NSCharacterSet *)nonWordCharacters
ptions:(NSStringCompareOptions)mask range:(NSRange)searchRange;
+- (NSRange)rangeOfWord:(NSString *)searchString
nonWordCharacters:(NSCharacterSet *)nonWordCharacters
ptions:(NSStringCompareOptions)mask;
+- (NSRange)rangeOfWord:(NSString *)searchString
nonWordCharacters:(NSCharacterSet *)nonWordCharacters;
+
+#pragma mark -
+
/*!
@method booleanValue
@abstract Compares with Yes, y, or 1 using case insensitive search to return
YES.
Modified: trunk/bibdesk/NSString_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSString_BDSKExtensions.m 2025-07-24 15:16:48 UTC (rev
29352)
+++ trunk/bibdesk/NSString_BDSKExtensions.m 2025-07-24 15:53:52 UTC (rev
29353)
@@ -985,6 +985,37 @@
return [self caseInsensitiveCompare:aString] == NSOrderedSame;
}
+#pragma mark Word searching
+
+- (NSRange)rangeOfWord:(NSString *)searchString
nonWordCharacters:(NSCharacterSet *)nonWordCharacters
ptions:(NSStringCompareOptions)mask range:(NSRange)searchRange {
+ NSRange range = [self rangeOfString:searchString options:mask
range:searchRange];
+ if (range.location != NSNotFound) {
+ if ((range.location == 0 || [nonWordCharacters characterIsMember:[self
characterAtIndex:range.location]]) && (NSMaxRange(range) == [self length] ||
[nonWordCharacters characterIsMember:[self
characterAtIndex:NSMaxRange(range)]]))
+ return range;
+ if (mask & NSAnchoredSearch)
+ return NSMakeRange(NSNotFound, 0);
+ if ((mask & NSBackwardsSearch) == 0) {
+ if (NSMaxRange(searchRange) <= NSMaxRange(range) + [searchString
length])
+ return NSMakeRange(NSNotFound, 0);
+ searchRange = NSMakeRange(NSMaxRange(range) + 1,
NSMaxRange(searchRange) - NSMaxRange(range) - 1);
+ } else {
+ if (range.location >= searchRange.location + [searchString length])
+ return NSMakeRange(NSNotFound, 0);
+ searchRange = NSMakeRange(searchRange.location, range.location -
searchRange.location - 1);
+ }
+ return [self rangeOfWord:searchString
nonWordCharacters:nonWordCharacters ptions:mask range:searchRange];
+ }
+ return range;
+}
+
+- (NSRange)rangeOfWord:(NSString *)searchString
nonWordCharacters:(NSCharacterSet *)nonWordCharacters
ptions:(NSStringCompareOptions)mask {
+ return [self rangeOfWord:searchString nonWordCharacters:nonWordCharacters
ptions:mask range:NSMakeRange(0, [self length])];
+}
+
+- (NSRange)rangeOfWord:(NSString *)searchString
nonWordCharacters:(NSCharacterSet *)nonWordCharacters {
+ return [self rangeOfWord:searchString nonWordCharacters:nonWordCharacters
ptions:0 range:NSMakeRange(0, [self length])];
+}
+
#pragma mark -
- (BOOL)booleanValue{
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit