Revision: 28974
http://sourceforge.net/p/bibdesk/svn/28974
Author: hofman
Date: 2024-11-12 16:22:42 +0000 (Tue, 12 Nov 2024)
Log Message:
-----------
reduce selection range by all deleted characters
Modified Paths:
--------------
trunk/bibdesk/BDSKCitationFormatter.m
trunk/bibdesk/BDSKCiteKeyFormatter.m
trunk/bibdesk/BDSKFieldNameFormatter.m
trunk/bibdesk/BDSKTypeNameFormatter.m
trunk/bibdesk/NSString_BDSKExtensions.h
trunk/bibdesk/NSString_BDSKExtensions.m
Modified: trunk/bibdesk/BDSKCitationFormatter.m
===================================================================
--- trunk/bibdesk/BDSKCitationFormatter.m 2024-11-12 15:12:55 UTC (rev
28973)
+++ trunk/bibdesk/BDSKCitationFormatter.m 2024-11-12 16:22:42 UTC (rev
28974)
@@ -134,21 +134,21 @@
- (BOOL)isPartialStringValid:(NSString **)partialStringPtr
proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
originalString:(NSString *)origString
originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error
{
NSString *partialString = *partialStringPtr;
- NSRange r = [partialString rangeOfCharacterFromSet:invalidSet];
- if (r.location != NSNotFound) {
- NSMutableString *new = [partialString mutableCopy];
- [new replaceOccurrencesOfCharactersInSet:invalidSet withString:@""];
- if ([new length]) {
+ NSIndexSet *indexes = [partialString indexesOfCharactersInSet:invalidSet];
+ if ([indexes count]) {
+ if ([indexes count] < [partialString length]) {
+ NSMutableString *new = [partialString mutableCopy];
+ [new deleteCharactersAtIndexes:indexes];
*partialStringPtr = new;
- if (r.location < proposedSelRangePtr->location)
- --proposedSelRangePtr->location;
- if (NSMaxRange(*proposedSelRangePtr) > [new length])
- *proposedSelRangePtr = NSMakeRange(r.location, 0);
+ if (proposedSelRangePtr->length > 0)
+ proposedSelRangePtr->length -= [indexes
countOfIndexesInRange:*proposedSelRangePtr];
+ if (proposedSelRangePtr->location > 0)
+ proposedSelRangePtr->location -= [indexes
countOfIndexesInRange:NSMakeRange(0, proposedSelRangePtr->location)];
} else {
*partialStringPtr = origString;
*proposedSelRangePtr = origSelRange;
}
- if(error) *error = [NSString stringWithFormat:NSLocalizedString(@"The
character \"%@\" is not allowed in a BibTeX cite key.", @"Error description"),
[partialString substringWithRange:r]];
+ if(error) *error = [NSString stringWithFormat:NSLocalizedString(@"The
character \"%@\" is not allowed in a BibTeX cite key.", @"Error description"),
[partialString substringWithRange:NSMakeRange([indexes firstIndex], 1)]];
return NO;
}else
return YES;
Modified: trunk/bibdesk/BDSKCiteKeyFormatter.m
===================================================================
--- trunk/bibdesk/BDSKCiteKeyFormatter.m 2024-11-12 15:12:55 UTC (rev
28973)
+++ trunk/bibdesk/BDSKCiteKeyFormatter.m 2024-11-12 16:22:42 UTC (rev
28974)
@@ -68,24 +68,25 @@
- (BOOL)isPartialStringValid:(NSString **)partialStringPtr
proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
originalString:(NSString *)origString
originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error
{
NSString *partialString = *partialStringPtr;
NSCharacterSet *invalidSet = [[BDSKTypeManager sharedManager]
invalidCharactersForField:BDSKCiteKeyString];
- NSRange r = [partialString rangeOfCharacterFromSet:invalidSet];
- if ( r.location != NSNotFound) {
- NSMutableString *new = [partialString mutableCopy];
- [new replaceOccurrencesOfCharactersInSet:invalidSet withString:@""];
- if ([new length]) {
+ NSIndexSet *indexes = [partialString indexesOfCharactersInSet:invalidSet];
+ if ([indexes count]) {
+ if ([indexes count] < [partialString length]) {
+ NSMutableString *new = [partialString mutableCopy];
+ [new deleteCharactersAtIndexes:indexes];
*partialStringPtr = new;
- if (r.location < proposedSelRangePtr->location)
- --proposedSelRangePtr->location;
- if (NSMaxRange(*proposedSelRangePtr) > [new length])
- *proposedSelRangePtr = NSMakeRange(r.location, 0);
+ if (proposedSelRangePtr->length > 0)
+ proposedSelRangePtr->length -= [indexes
countOfIndexesInRange:*proposedSelRangePtr];
+ if (proposedSelRangePtr->location > 0)
+ proposedSelRangePtr->location -= [indexes
countOfIndexesInRange:NSMakeRange(0, proposedSelRangePtr->location)];
} else {
*partialStringPtr = origString;
*proposedSelRangePtr = origSelRange;
}
- if(error) *error = [NSString stringWithFormat:NSLocalizedString(@"The
character \"%@\" is not allowed in a BibTeX cite key.", @"Error description"),
[partialString substringWithRange:r]];
+ if(error) *error = [NSString stringWithFormat:NSLocalizedString(@"The
character \"%@\" is not allowed in a BibTeX cite key.", @"Error description"),
[partialString substringWithRange:NSMakeRange([indexes firstIndex], 1)]];
return NO;
- }else
+ } else {
return YES;
+ }
}
@end
Modified: trunk/bibdesk/BDSKFieldNameFormatter.m
===================================================================
--- trunk/bibdesk/BDSKFieldNameFormatter.m 2024-11-12 15:12:55 UTC (rev
28973)
+++ trunk/bibdesk/BDSKFieldNameFormatter.m 2024-11-12 16:22:42 UTC (rev
28974)
@@ -110,21 +110,21 @@
}
}
NSCharacterSet *invalidSet = [[BDSKTypeManager sharedManager]
invalidFieldNameCharacterSet];
- NSRange r = [partialString rangeOfCharacterFromSet:invalidSet];
- if (r.location != NSNotFound) {
- if (error) *error = NSLocalizedString(@"The field name contains an
invalid character", @"field name warning");
- NSMutableString *new = [partialString mutableCopy];
- [new replaceOccurrencesOfCharactersInSet:invalidSet withString:@""];
- if ([new length]) {
- if (r.location < proposedSelRangePtr->location)
- --proposedSelRangePtr->location;
+ NSIndexSet *indexes = [partialString indexesOfCharactersInSet:invalidSet];
+ if ([indexes count]) {
+ if ([indexes count] < [partialString length]) {
+ NSMutableString *new = [partialString mutableCopy];
+ [new deleteCharactersAtIndexes:indexes];
*partialStringPtr = new;
- if (NSMaxRange(*proposedSelRangePtr) > [new length])
- *proposedSelRangePtr = NSMakeRange(r.location, 0);
+ if (proposedSelRangePtr->length > 0)
+ proposedSelRangePtr->length -= [indexes
countOfIndexesInRange:*proposedSelRangePtr];
+ if (proposedSelRangePtr->location > 0)
+ proposedSelRangePtr->location -= [indexes
countOfIndexesInRange:NSMakeRange(0, proposedSelRangePtr->location)];
} else {
*partialStringPtr = origString;
*proposedSelRangePtr = origSelRange;
}
+ if (error) *error = NSLocalizedString(@"The field name contains an
invalid character", @"field name warning");
return NO;
} else if ([partialString length] && [[NSCharacterSet
decimalDigitCharacterSet] characterIsMember:[partialString
characterAtIndex:0]]) {
*partialStringPtr = nil;
Modified: trunk/bibdesk/BDSKTypeNameFormatter.m
===================================================================
--- trunk/bibdesk/BDSKTypeNameFormatter.m 2024-11-12 15:12:55 UTC (rev
28973)
+++ trunk/bibdesk/BDSKTypeNameFormatter.m 2024-11-12 16:22:42 UTC (rev
28974)
@@ -80,16 +80,16 @@
- (BOOL)isPartialStringValid:(NSString **)partialStringPtr
proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
originalString:(NSString *)origString
originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error
{
NSString *partialString = *partialStringPtr;
NSCharacterSet *invalidSet = [[BDSKTypeManager sharedManager]
invalidFieldNameCharacterSet];
- NSRange r = [partialString rangeOfCharacterFromSet:invalidSet];
- if ( r.location != NSNotFound) {
- NSMutableString *new = [partialString mutableCopy];
- [new replaceOccurrencesOfCharactersInSet:invalidSet withString:@""];
- if ([new length]) {
+ NSIndexSet *indexes = [partialString indexesOfCharactersInSet:invalidSet];
+ if ([indexes count]) {
+ if ([indexes count] < [partialString length]) {
+ NSMutableString *new = [partialString mutableCopy];
+ [new deleteCharactersAtIndexes:indexes];
*partialStringPtr = new;
- if (r.location < proposedSelRangePtr->location)
- --proposedSelRangePtr->location;
- if (NSMaxRange(*proposedSelRangePtr) > [new length])
- *proposedSelRangePtr = NSMakeRange(r.location, 0);
+ if (proposedSelRangePtr->length > 0)
+ proposedSelRangePtr->length -= [indexes
countOfIndexesInRange:*proposedSelRangePtr];
+ if (proposedSelRangePtr->location > 0)
+ proposedSelRangePtr->location -= [indexes
countOfIndexesInRange:NSMakeRange(0, proposedSelRangePtr->location)];
} else {
*partialStringPtr = origString;
*proposedSelRangePtr = origSelRange;
@@ -97,8 +97,7 @@
if (error) *error = NSLocalizedString(@"The type name contains an
invalid character", @"field name warning");
return NO;
}
- r = [partialString rangeOfCharacterFromSet:[NSCharacterSet
uppercaseLetterCharacterSet]];
- if ( r.location != NSNotFound) {
+ if ( [partialString rangeOfCharacterFromSet:[NSCharacterSet
uppercaseLetterCharacterSet]].location != NSNotFound) {
// this is a BibDesk requirement, since we expect type names to be
lowercase
*partialStringPtr = [partialString entryType];
return NO;
Modified: trunk/bibdesk/NSString_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSString_BDSKExtensions.h 2024-11-12 15:12:55 UTC (rev
28973)
+++ trunk/bibdesk/NSString_BDSKExtensions.h 2024-11-12 16:22:42 UTC (rev
28974)
@@ -401,6 +401,8 @@
@property (nonatomic, readonly) NSArray *componentsSeparatedByFieldSeparators;
+- (NSIndexSet *)indexesOfCharactersInSet:(NSCharacterSet *)charSet;
+
/*!
@method containsWord:
@abstract Determine whether a string contains the argument aWord; if it
contains aWord as a substring, it then tests to see if it is bounded by null,
punctuation, or whitespace.
@@ -544,5 +546,6 @@
- (void)appendStrings:(NSString *)first, ...;
- (void)backslashEscapeCharactersInSet:(NSCharacterSet *)charSet;
- (void)backslashUnescapeCharactersInSet:(NSCharacterSet *)charSet;
+- (void)deleteCharactersAtIndexes:(NSIndexSet *)indexes;
@end
Modified: trunk/bibdesk/NSString_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSString_BDSKExtensions.m 2024-11-12 15:12:55 UTC (rev
28973)
+++ trunk/bibdesk/NSString_BDSKExtensions.m 2024-11-12 16:22:42 UTC (rev
28974)
@@ -1115,6 +1115,23 @@
return [self componentsSeparatedByCharactersInSet:[NSCharacterSet
commaCharacterSet] trimWhitespace:YES];
}
+- (NSIndexSet *)indexesOfCharactersInSet:(NSCharacterSet *)charSet
+{
+ NSRange r = [self rangeOfCharacterFromSet:charSet options:NSLiteralSearch];
+ if (r.location == NSNotFound)
+ return nil;
+ NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc] init];
+ NSUInteger length = [self length];
+ do {
+ [indexes addIndex:r.location];
+ if (r.location + 1 < length)
+ r = [self rangeOfCharacterFromSet:charSet options:NSLiteralSearch
range:NSMakeRange(r.location + 1, length - r.location - 1)];
+ else
+ break;
+ } while (r.location != NSNotFound);
+ return indexes;
+}
+
- (NSString *)stringByCollapsingCharactersInSet:(NSCharacterSet *)charSet;
{
return
CFBridgingRelease(BDStringCreateByCollapsingCharactersInSet(CFAllocatorGetDefault(),
(__bridge CFStringRef)self, (__bridge CFCharacterSetRef)charSet));
@@ -2106,4 +2123,10 @@
}
}
+- (void)deleteCharactersAtIndexes:(NSIndexSet *)indexes {
+ [indexes enumerateRangesWithOptions:NSEnumerationReverse
usingBlock:^(NSRange r, BOOL *stop){
+ [self deleteCharactersInRange:r];
+ }];
+}
+
@end
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