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