Revision: 14994
http://sourceforge.net/p/skim-app/code/14994
Author: hofman
Date: 2025-03-21 13:39:21 +0000 (Fri, 21 Mar 2025)
Log Message:
-----------
Make sure selection fo markup note is broken up in separate ranges. It looks
like selectionByLine keeps ranges within a line together on 15.x.
Modified Paths:
--------------
trunk/PDFAnnotationMarkup_SKExtensions.m
trunk/PDFSelection_SKExtensions.h
trunk/PDFSelection_SKExtensions.m
Modified: trunk/PDFAnnotationMarkup_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationMarkup_SKExtensions.m 2025-03-20 18:09:57 UTC (rev
14993)
+++ trunk/PDFAnnotationMarkup_SKExtensions.m 2025-03-21 13:39:21 UTC (rev
14994)
@@ -122,7 +122,7 @@
NSRect bounds = NSZeroRect;
NSPointerArray *lines = nil;
if ([selection hasCharacters]) {
- for (PDFSelection *sel in [selection selectionsByLine]) {
+ for (PDFSelection *sel in [selection selectionComponentsOnPage:page]) {
NSRect lineRect = [sel boundsForPage:page];
if (NSIsEmptyRect(lineRect) == NO && [[sel string]
rangeOfCharacterFromSet:[NSCharacterSet
nonWhitespaceAndNewlineCharacterSet]].length) {
if (lines == nil)
Modified: trunk/PDFSelection_SKExtensions.h
===================================================================
--- trunk/PDFSelection_SKExtensions.h 2025-03-20 18:09:57 UTC (rev 14993)
+++ trunk/PDFSelection_SKExtensions.h 2025-03-21 13:39:21 UTC (rev 14994)
@@ -60,6 +60,8 @@
- (CGFloat)boundsOrderForPage:(PDFPage *)page;
+- (NSArray *)selectionComponentsOnPage:(nullable PDFPage *)page;
+
+ (nullable instancetype)selectionWithSpecifier:(nullable id)specifier;
+ (nullable instancetype)selectionWithSpecifier:(nullable id)specifier
onPage:(nullable PDFPage *)aPage;
@property (nonatomic, nullable, readonly) id objectSpecifiers;
Modified: trunk/PDFSelection_SKExtensions.m
===================================================================
--- trunk/PDFSelection_SKExtensions.m 2025-03-20 18:09:57 UTC (rev 14993)
+++ trunk/PDFSelection_SKExtensions.m 2025-03-21 13:39:21 UTC (rev 14994)
@@ -236,6 +236,41 @@
return [page sortOrderForBounds:[self boundsForPage:page]];
}
+- (NSArray *)selectionComponentsOnPage:(PDFPage *)page {
+ if (page == nil) {
+ page = [self safeFirstPage];
+ if (page == nil)
+ return @[];
+ }
+
+ NSMutableArray *components = [NSMutableArray array];
+
+ for (PDFSelection *sel in [self selectionsByLine]) {
+ NSUInteger count = [sel numberOfTextRangesOnPage:page];
+ if (count == 1) {
+ [components addObject:sel];
+ } else if (count > 1) {
+ NSRange range = NSMakeRange(0, 0);
+ for (NSUInteger i = 0; i < count; i++) {
+ NSRange nextRange = [sel rangeAtIndex:i onPage:page];
+ if (nextRange.length == 0) {
+ } else if (range.length == 0) {
+ range = nextRange;
+ } else if (NSMaxRange(range) == nextRange.location) {
+ range.length += nextRange.length;
+ } else {
+ [components addObject:[page selectionForRange:range]];
+ range = nextRange;
+ }
+ }
+ if (range.length)
+ [components addObject:[page selectionForRange:range]];
+ }
+ }
+
+ return components;
+}
+
static NSRange rangeOfSubstringOfStringAtIndex(NSString *string, NSArray
*substrings, NSUInteger anIndex) {
if (anIndex >= [substrings count])
return NSMakeRange(NSNotFound, 0);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit