Revision: 4846
http://skim-app.svn.sourceforge.net/skim-app/?rev=4846&view=rev
Author: hofman
Date: 2008-10-22 10:06:47 +0000 (Wed, 22 Oct 2008)
Log Message:
-----------
combine adjacent ranges in specifier for selection
Modified Paths:
--------------
trunk/PDFSelection_SKExtensions.m
Modified: trunk/PDFSelection_SKExtensions.m
===================================================================
--- trunk/PDFSelection_SKExtensions.m 2008-10-21 18:50:56 UTC (rev 4845)
+++ trunk/PDFSelection_SKExtensions.m 2008-10-22 10:06:47 UTC (rev 4846)
@@ -348,6 +348,29 @@
return selection;
}
+static inline id addRangeSpecifierWithRangeAndPage(NSMutableArray *ranges,
NSRange range, PDFPage *page) {
+ NSRangeSpecifier *rangeSpec = nil;
+ NSIndexSpecifier *startSpec = nil;
+ NSIndexSpecifier *endSpec = nil;
+ NSScriptObjectSpecifier *textSpec = [[NSPropertySpecifier alloc]
initWithContainerSpecifier:[page objectSpecifier] key:@"richText"];
+
+ if (textSpec) {
+ startSpec = [[NSIndexSpecifier alloc]
initWithContainerClassDescription:[textSpec keyClassDescription]
containerSpecifier:textSpec key:@"characters" index:range.location];
+ endSpec = [[NSIndexSpecifier alloc]
initWithContainerClassDescription:[textSpec keyClassDescription]
containerSpecifier:textSpec key:@"characters" index:NSMaxRange(range) - 1];
+ if (startSpec && endSpec) {
+ rangeSpec = [[NSRangeSpecifier alloc]
initWithContainerClassDescription:[textSpec keyClassDescription]
containerSpecifier:textSpec key:@"characters" startSpecifier:startSpec
endSpecifier:endSpec];
+ if (rangeSpec)
+ [ranges addObject:rangeSpec];
+ }
+ }
+ [rangeSpec release];
+ [startSpec release];
+ [endSpec release];
+ [textSpec release];
+
+ return rangeSpec;
+}
+
- (id)objectSpecifier {
NSArray *pages = [self pages];
if ([pages count] == 0)
@@ -357,33 +380,23 @@
PDFPage *page;
while (page = [pageEnum nextObject]) {
unsigned int i, iMax = [self safeNumberOfRangesOnPage:page];
+ NSRange lastRange = NSMakeRange(0, 0);
for (i = 0; i < iMax; i++) {
NSRange range = [self safeRangeAtIndex:i onPage:page];
if (range.length == 0)
continue;
- NSScriptObjectSpecifier *textSpec = [[NSPropertySpecifier alloc]
initWithContainerSpecifier:[page objectSpecifier] key:@"richText"];
- if (textSpec == nil)
- continue;
-
- NSIndexSpecifier *startSpec = [[NSIndexSpecifier alloc]
initWithContainerClassDescription:[textSpec keyClassDescription]
containerSpecifier:textSpec key:@"characters" index:range.location];
- NSIndexSpecifier *endSpec = [[NSIndexSpecifier alloc]
initWithContainerClassDescription:[textSpec keyClassDescription]
containerSpecifier:textSpec key:@"characters" index:NSMaxRange(range) - 1];
- if (startSpec == nil || endSpec == nil) {
- [startSpec release];
- [endSpec release];
- continue;
+ if (lastRange.length == 0) {
+ lastRange = range;
+ } else if (NSMaxRange(lastRange) == range.location) {
+ lastRange.length += range.length;
+ } else {
+ addRangeSpecifierWithRangeAndPage(ranges, lastRange, page);
+ lastRange = range;
}
-
- NSRangeSpecifier *rangeSpec = [[NSRangeSpecifier alloc]
initWithContainerClassDescription:[textSpec keyClassDescription]
containerSpecifier:textSpec key:@"characters" startSpecifier:startSpec
endSpecifier:endSpec];
- if (rangeSpec == nil)
- continue;
-
- [ranges addObject:rangeSpec];
- [rangeSpec release];
- [startSpec release];
- [endSpec release];
- [textSpec release];
}
+ if (lastRange.length)
+ addRangeSpecifierWithRangeAndPage(ranges, lastRange, page);
}
return ranges;
}
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 the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit