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
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to