Revision: 16539
          http://sourceforge.net/p/skim-app/code/16539
Author:   hofman
Date:     2026-09-26 21:49:13 +0000 (Sat, 26 Sep 2026)
Log Message:
-----------
remove categories for legacy PDFAnnotation subclasses

Modified Paths:
--------------
    trunk/PDFPage_SKExtensions.m
    trunk/Skim.xcodeproj/project.pbxproj

Removed Paths:
-------------
    trunk/PDFAnnotationButtonWidget_SKExtensions.h
    trunk/PDFAnnotationButtonWidget_SKExtensions.m
    trunk/PDFAnnotationChoiceWidget_SKExtensions.h
    trunk/PDFAnnotationChoiceWidget_SKExtensions.m
    trunk/PDFAnnotationCircle_SKExtensions.h
    trunk/PDFAnnotationCircle_SKExtensions.m
    trunk/PDFAnnotationFreeText_SKExtensions.h
    trunk/PDFAnnotationFreeText_SKExtensions.m
    trunk/PDFAnnotationInk_SKExtensions.h
    trunk/PDFAnnotationInk_SKExtensions.m
    trunk/PDFAnnotationLine_SKExtensions.h
    trunk/PDFAnnotationLine_SKExtensions.m
    trunk/PDFAnnotationLink_SKExtensions.h
    trunk/PDFAnnotationLink_SKExtensions.m
    trunk/PDFAnnotationMarkup_SKExtensions.h
    trunk/PDFAnnotationMarkup_SKExtensions.m
    trunk/PDFAnnotationSquare_SKExtensions.h
    trunk/PDFAnnotationSquare_SKExtensions.m
    trunk/PDFAnnotationStamp_SKExtensions.h
    trunk/PDFAnnotationStamp_SKExtensions.m
    trunk/PDFAnnotationTextWidget_SKExtensions.h
    trunk/PDFAnnotationTextWidget_SKExtensions.m
    trunk/PDFAnnotationText_SKExtensions.h
    trunk/PDFAnnotationText_SKExtensions.m

Deleted: trunk/PDFAnnotationButtonWidget_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationButtonWidget_SKExtensions.h      2026-09-26 21:41:10 UTC 
(rev 16538)
+++ trunk/PDFAnnotationButtonWidget_SKExtensions.h      2026-09-26 21:49:13 UTC 
(rev 16539)
@@ -1,47 +0,0 @@
-//
-//  PDFAnnotationButtonWidget_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-Christiaan Hofman. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-- Neither the name of Christiaan Hofman nor the names of any
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationButtonWidget(SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationButtonWidget_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationButtonWidget_SKExtensions.m      2026-09-26 21:41:10 UTC 
(rev 16538)
+++ trunk/PDFAnnotationButtonWidget_SKExtensions.m      2026-09-26 21:49:13 UTC 
(rev 16539)
@@ -1,85 +0,0 @@
-//
-//  PDFAnnotationButtonWidget_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-Christiaan Hofman. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-- Neither the name of Christiaan Hofman nor the names of any
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#import "PDFAnnotationButtonWidget_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "SKFDFParser.h"
-#import "NSString_SKExtensions.h"
-
-@implementation PDFAnnotationButtonWidget (SKExtensions)
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    [fdfString appendFDFName:SKFDFAnnotationFieldTypeKey];
-    [fdfString appendFDFName:SKFDFFieldTypeButton];
-    [fdfString appendFDFName:SKFDFAnnotationFieldNameKey];
-    [fdfString appendFormat:@"(%@)", [[[self fieldName] ?: @"" 
lossyStringUsingEncoding:NSISOLatin1StringEncoding] 
stringByEscapingParenthesis]];
-    [fdfString appendFDFName:SKFDFAnnotationFieldValueKey];
-    [fdfString appendFormat:@"/%@", [self state] == NSControlStateValueOn ? 
[self onStateValue] : @"Off"];
-    return fdfString;
-}
-
-- (id)objectValue {
-    return [NSNumber numberWithInteger:[self state]];
-}
-
-- (void)setObjectValue:(id)newObjectValue {
-    [self setState:[newObjectValue integerValue]];
-}
-
-- (SKNPDFWidgetType)widgetType {
-    return kSKNPDFWidgetTypeButton;
-}
-
-- (BOOL)isWidget {
-    return [self controlType] == kPDFWidgetCheckBoxControl || [self 
controlType] == kPDFWidgetRadioButtonControl;
-}
-
-- (BOOL)isLink { return NO; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    if ([self controlType] != kPDFWidgetCheckBoxControl && [self controlType] 
!= kPDFWidgetRadioButtonControl)
-        return nil;
-    static NSSet *keys = nil;
-    if (keys == nil)
-        keys = [[NSSet alloc] initWithObjects:SKNPDFAnnotationStateKey, nil];
-    return keys;
-}
-
-@end

Deleted: trunk/PDFAnnotationChoiceWidget_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationChoiceWidget_SKExtensions.h      2026-09-26 21:41:10 UTC 
(rev 16538)
+++ trunk/PDFAnnotationChoiceWidget_SKExtensions.h      2026-09-26 21:49:13 UTC 
(rev 16539)
@@ -1,47 +0,0 @@
-//
-//  PDFAnnotationChoiceWidget_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-Christiaan Hofman. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-- Neither the name of Christiaan Hofman nor the names of any
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationChoiceWidget (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationChoiceWidget_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationChoiceWidget_SKExtensions.m      2026-09-26 21:41:10 UTC 
(rev 16538)
+++ trunk/PDFAnnotationChoiceWidget_SKExtensions.m      2026-09-26 21:49:13 UTC 
(rev 16539)
@@ -1,81 +0,0 @@
-//
-//  PDFAnnotationChoiceWidget_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-Christiaan Hofman. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-- Neither the name of Christiaan Hofman nor the names of any
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#import "PDFAnnotationChoiceWidget_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "SKFDFParser.h"
-#import "NSString_SKExtensions.h"
-
-@implementation PDFAnnotationChoiceWidget (SKExtensions)
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    [fdfString appendFDFName:SKFDFAnnotationFieldTypeKey];
-    [fdfString appendFDFName:SKFDFFieldTypeChoice];
-    [fdfString appendFDFName:SKFDFAnnotationFieldNameKey];
-    [fdfString appendFormat:@"(%@)", [[[self fieldName] ?: @"" 
lossyStringUsingEncoding:NSISOLatin1StringEncoding] 
stringByEscapingParenthesis]];
-    [fdfString appendFDFName:SKFDFAnnotationFieldValueKey];
-    [fdfString appendFormat:@"(%@)", [[[self stringValue] ?: @"" 
lossyStringUsingEncoding:NSISOLatin1StringEncoding] 
stringByEscapingParenthesis]];
-    return fdfString;
-}
-
-- (id)objectValue {
-    return [self stringValue];
-}
-
-- (void)setObjectValue:(id)newObjectValue {
-    [self setStringValue:newObjectValue];
-}
-
-- (SKNPDFWidgetType)widgetType {
-    return kSKNPDFWidgetTypeChoice;
-}
-
-- (BOOL)isWidget { return YES; }
-
-- (BOOL)isLink { return NO; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *keys = nil;
-    if (keys == nil)
-        keys = [[NSSet alloc] initWithObjects:SKNPDFAnnotationStringValueKey, 
nil];
-    return keys;
-}
-
-@end

Deleted: trunk/PDFAnnotationCircle_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationCircle_SKExtensions.h    2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationCircle_SKExtensions.h    2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,48 +0,0 @@
-//
-//  PDFAnnotationCircle_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationCircle (SKExtensions)
-@property (nonatomic, nullable, copy) NSColor *scriptingInteriorColor;
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationCircle_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationCircle_SKExtensions.m    2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationCircle_SKExtensions.m    2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,164 +0,0 @@
-//
-//  PDFAnnotationCircle_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationCircle_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "PDFSelection_SKExtensions.h"
-#import "NSUserDefaults_SKExtensions.h"
-
-
-@implementation PDFAnnotationCircle (SKExtensions)
-
-- (void)setDefaultSkimNoteProperties {
-    NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
-    NSColor *color = [sud colorForKey:SKCircleNoteInteriorColorKey];
-    if ([color alphaComponent] > 0.0)
-        [self setInteriorColor:color];
-    [self setColor:[sud colorForKey:SKCircleNoteColorKey]];
-    [[self border] setLineWidth:[sud floatForKey:SKCircleNoteLineWidthKey]];
-    [[self border] setDashPattern:[sud 
arrayForKey:SKCircleNoteDashPatternKey]];
-    [[self border] setStyle:[sud floatForKey:SKCircleNoteLineStyleKey]];
-}
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    CGFloat r, g, b, a = 0.0;
-    [[[self interiorColor] colorUsingColorSpaceName:NSDeviceRGBColorSpace] 
getRed:&r green:&g blue:&b alpha:&a];
-    if (a > 0.0) {
-        [fdfString appendFDFName:SKFDFAnnotationInteriorColorKey];
-        [fdfString appendFormat:@"[%f %f %f]", r, g, b];
-    }
-    return fdfString;
-}
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isShape { return YES; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)hasInteriorColor { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
-    if ([super hitTest:point] == NO)
-        return NO;
-    
-    NSRect bounds = [self bounds];
-    CGFloat dx = 2.0 * (point.x - NSMidX(bounds)) / NSWidth(bounds);
-    CGFloat dy = 2.0 * (point.y - NSMidY(bounds)) / NSHeight(bounds);
-    if (dx * dx + dy * dy > 1.0)
-        return NO;
-    
-    if ([self interiorColor])
-        return YES;
-    
-    CGFloat delta = fmax(8.0, [self lineWidth]);
-    if (NSWidth(bounds) <= 2.0 * delta || NSHeight(bounds) <= 2.0 * delta)
-        return YES;
-    
-    bounds = NSInsetRect(bounds, delta, delta);
-    dx = 2.0 * (point.x - NSMidX(bounds)) / NSWidth(bounds);
-    dy = 2.0 * (point.y - NSMidY(bounds)) / NSHeight(bounds);
-    return dx * dx + dy * dy >= 1.0;
-}
-
-- (void)autoUpdateStringWithPage:(PDFPage *)page {
-    // this calculation is roughly the inverse of -[PDFView 
addOtherAnnotationWithType:selection:point:]
-    NSRect bounds = NSInsetRect([self bounds], [self lineWidth] - 1.0, [self 
lineWidth] - 1.0);
-    CGFloat t, w = NSWidth(bounds), h = NSWidth(bounds);
-    if (w <= 0.0 || h <= 0.0)
-        return;
-    t = 0.5 * w * h * (w + h - sqrt(2.0 * w * h)) / (w * w + h * h);
-    bounds = NSInsetRect(bounds, t, t);
-    NSString *selString = [[page selectionForRect:bounds] cleanedString];
-    if ([selString length])
-        [self setString:selString];
-}
-
-- (NSString *)colorDefaultKey { return SKCircleNoteColorKey; }
-
-- (NSString *)alternateColorDefaultKey { return SKCircleNoteInteriorColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKCircleNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKCircleNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKCircleNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *circleKeys = nil;
-    if (circleKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] 
mutableCopy];
-        [mutableKeys addObject:SKNPDFAnnotationInteriorColorKey];
-        circleKeys = [mutableKeys copy];
-    }
-    return circleKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
-    static NSSet *customCircleScriptingKeys = nil;
-    if (customCircleScriptingKeys == nil) {
-        NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
-        [customKeys addObject:SKPDFAnnotationScriptingInteriorColorKey];
-        customCircleScriptingKeys = [customKeys copy];
-    }
-    return customCircleScriptingKeys;
-}
-
-- (NSColor *)scriptingInteriorColor {
-    return [self interiorColor];
-}
-
-- (void)setScriptingInteriorColor:(NSColor *)newColor {
-    if ([self isEditable]) {
-        [self setInteriorColor:newColor];
-    }
-}
-
-@end

Deleted: trunk/PDFAnnotationFreeText_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationFreeText_SKExtensions.h  2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationFreeText_SKExtensions.h  2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,56 +0,0 @@
-//
-//  PDFAnnotationFreeText_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationScriptingFontColorKey;
-extern NSString * const SKPDFAnnotationScriptingAlignmentKey;
-
-@interface PDFAnnotationFreeText (SKExtensions)
-
-@property (nonatomic, nullable, copy) NSFont *fontName;
-@property (nonatomic) CGFloat fontSize;
-@property (nonatomic, nullable, copy) NSColor *scriptingFontColor;
-@property (nonatomic) NSInteger scriptingAlignment;
-
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationFreeText_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationFreeText_SKExtensions.m  2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationFreeText_SKExtensions.m  2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,209 +0,0 @@
-//
-//  PDFAnnotationFreeText_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationFreeText_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "NSUserDefaults_SKExtensions.h"
-
-
-NSString * const SKPDFAnnotationScriptingFontColorKey = @"scriptingFontColor";
-NSString * const SKPDFAnnotationScriptingAlignmentKey = @"scriptingAlignment";
-
-
-@implementation PDFAnnotationFreeText (SKExtensions)
-
-static inline NSTextAlignment textAlignmentFromAlignment(NSInteger alignment) {
-    switch (alignment) {
-        case 0: return NSTextAlignmentLeft;
-        case 1: return NSTextAlignmentRight;
-        case 2: return NSTextAlignmentCenter;
-        default: return NSTextAlignmentLeft;
-    }
-}
-
-- (void)setDefaultSkimNoteProperties {
-    NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
-    NSFont *font = [sud fontForNameKey:SKFreeTextNoteFontNameKey 
sizeKey:SKFreeTextNoteFontSizeKey];
-    if (font)
-        [self setFont:font];
-    [self setColor:[sud colorForKey:SKFreeTextNoteColorKey]];
-    [self setFontColor:[sud colorForKey:SKFreeTextNoteFontColorKey]];
-    [self setAlignment:textAlignmentFromAlignment([sud 
integerForKey:SKFreeTextNoteAlignmentKey])];
-    PDFBorder *border = [[PDFBorder alloc] init];
-    [border setLineWidth:[sud floatForKey:SKFreeTextNoteLineWidthKey]];
-    [border setDashPattern:[sud arrayForKey:SKFreeTextNoteDashPatternKey]];
-    [border setStyle:[sud floatForKey:SKFreeTextNoteLineStyleKey]];
-    if ([border lineWidth] > 0.0) {
-        [self setBorder:border];
-    } else {
-        [self setBorder:nil];
-        // on 10.12 you can't set the border to nil, so set its lineWidth to 0
-        [[self border] setLineWidth:0.0];
-    }
-}
-
-static inline NSString *alignmentStyleKeyword(NSTextAlignment alignment) {
-    switch (alignment) {
-        case NSTextAlignmentLeft: return @"left";
-        case NSTextAlignmentRight: return @"right";
-        case NSTextAlignmentCenter: return @"center";
-        default: return @"left";
-    }
-}
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    CGFloat r = 0.0, g = 0.0, b = 0.0, a;
-    [[[self fontColor] colorUsingColorSpaceName:NSDeviceRGBColorSpace] 
getRed:&r green:&g blue:&b alpha:&a];
-    [fdfString appendFDFName:SKFDFDefaultAppearanceKey];
-    [fdfString appendFormat:@"(/%@ %f Tf %f %f %f rg)", [self fontName], [self 
fontSize], r, g, b];
-    [fdfString appendFDFName:SKFDFDefaultStyleKey];
-    [[[self fontColor] colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] 
getRed:&r green:&g blue:&b alpha:&a];
-    [fdfString appendFormat:@"(font: %@ %fpt; text-align:%@; 
color:#%.2x%.2x%.2x)", [self fontName], [self fontSize], 
alignmentStyleKeyword([self alignment]), (unsigned int)(255*r), (unsigned 
int)(255*g), (unsigned int)(255*b)];
-    [fdfString appendFDFName:SKFDFAnnotationAlignmentKey];
-    [fdfString appendFormat:@" %ld", 
(long)SKFDFFreeTextAnnotationAlignmentFromPDFFreeTextAnnotationAlignment([self 
alignment])];
-    return fdfString;
-}
-
-- (BOOL)isText { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (NSString *)colorDefaultKey { return SKFreeTextNoteColorKey; }
-
-- (NSString *)alternateColorDefaultKey { return SKFreeTextNoteFontColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKFreeTextNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKFreeTextNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKFreeTextNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *freeTextKeys = nil;
-    if (freeTextKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] 
mutableCopy];
-        [mutableKeys addObject:SKNPDFAnnotationFontKey];
-        [mutableKeys addObject:SKNPDFAnnotationFontColorKey];
-        [mutableKeys addObject:SKNPDFAnnotationAlignmentKey];
-        freeTextKeys = [mutableKeys copy];
-    }
-    return freeTextKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
-    static NSSet *customFreeTextScriptingKeys = nil;
-    if (customFreeTextScriptingKeys == nil) {
-        NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
-        [customKeys addObject:SKNPDFAnnotationFontNameKey];
-        [customKeys addObject:SKNPDFAnnotationFontSizeKey];
-        [customKeys addObject:SKPDFAnnotationScriptingFontColorKey];
-        [customKeys addObject:SKPDFAnnotationScriptingAlignmentKey];
-        customFreeTextScriptingKeys = [customKeys copy];
-    }
-    return customFreeTextScriptingKeys;
-}
-
-- (id)textContents {
-    NSTextStorage *textContents = [super textContents];
-    if ([self font])
-        [textContents addAttribute:NSFontAttributeName value:[self font] 
range:NSMakeRange(0, [textContents length])];
-    if ([self fontColor])
-        [textContents addAttribute:NSForegroundColorAttributeName value:[self 
fontColor] range:NSMakeRange(0, [textContents length])];
-    return textContents;
-}
-
-- (NSString *)fontName {
-    return [[self font] fontName];
-}
-
-- (void)setFontName:(NSString *)fontName {
-    if ([self isEditable]) {
-        NSFont *font = [NSFont fontWithName:fontName size:[[self font] 
pointSize]];
-        if (font)
-            [self setFont:font];
-    }
-}
-
-- (CGFloat)fontSize {
-    return [[self font] pointSize];
-}
-
-- (void)setFontSize:(CGFloat)pointSize {
-    if ([self isEditable]) {
-        NSFont *font = [NSFont fontWithName:[[self font] fontName] 
size:pointSize];
-        if (font)
-            [self setFont:font];
-    }
-}
-
-- (NSColor *)scriptingFontColor {
-    return [self fontColor];
-}
-
-- (void)setScriptingFontColor:(NSColor *)newScriptingFontColor {
-    if ([self isEditable]) {
-        [self setFontColor:newScriptingFontColor];
-    }
-}
-
-- (NSInteger)scriptingAlignment {
-    NSTextAlignment align = [self alignment];
-    return align == 2 ? NSTextAlignmentCenter : align == 1 ? 
NSTextAlignmentRight : NSTextAlignmentLeft;
-}
-
-- (void)setScriptingAlignment:(NSInteger)alignment {
-    if ([self isEditable]) {
-        [self setAlignment:alignment == NSTextAlignmentCenter ? 2 : alignment 
== NSTextAlignmentRight ? 1 : 0];
-    }
-}
-
-@end

Deleted: trunk/PDFAnnotationInk_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationInk_SKExtensions.h       2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationInk_SKExtensions.h       2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,50 +0,0 @@
-//
-//  PDFAnnotationInk_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 9/14/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationBezierPathsKey;
-extern NSString * const SKPDFAnnotationScriptingPointListsKey;
-
-@interface PDFAnnotationInk (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationInk_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationInk_SKExtensions.m       2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationInk_SKExtensions.m       2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,339 +0,0 @@
-//
-//  PDFAnnotationInk_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 9/14/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationInk_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "NSUserDefaults_SKExtensions.h"
-#import "NSGeometry_SKExtensions.h"
-#import "NSData_SKExtensions.h"
-#import "NSBezierPath_SKExtensions.h"
-#import "NSShadow_SKExtensions.h"
-#import "NSColor_SKExtensions.h"
-#import "NSBezierPath_SKExtensions.h"
-#import "PDFPage_SKExtensions.h"
-#import "PDFView_SKExtensions.h"
-
-NSString * const SKPDFAnnotationBezierPathsKey = @"bezierPaths";
-NSString * const SKPDFAnnotationScriptingPointListsKey = 
@"scriptingPointLists";
-
-@implementation PDFAnnotationInk (SKExtensions)
-
-static CGAffineTransform (*CGContextGetBaseCTM_func)(CGContextRef) = NULL;
-
-+ (void)load {
-    CGContextGetBaseCTM_func = 
(typeof(CGContextGetBaseCTM_func))CFBundleGetFunctionPointerForName(CFBundleGetBundleWithIdentifier(CFSTR("com.apple.CoreGraphics")),
 CFSTR("CGContextGetBaseCTM"));
-}
-
-- (void)setDefaultSkimNoteProperties {
-    NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
-    [self setColor:[sud colorForKey:SKInkNoteColorKey]];
-    PDFBorder *border = [[PDFBorder alloc] init];
-    [border setLineWidth:[sud floatForKey:SKInkNoteLineWidthKey]];
-    [border setDashPattern:[sud arrayForKey:SKInkNoteDashPatternKey]];
-    [border setStyle:[sud floatForKey:SKInkNoteLineStyleKey]];
-    [self setBorder:[border lineWidth] > 0.0 ? border : nil];
-}
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    NSPoint point;
-    NSInteger i, iMax;
-    NSRect bounds = [self bounds];
-    [fdfString appendFDFName:SKFDFAnnotationInkListKey];
-    [fdfString appendString:@"["];
-    for (NSBezierPath *path in [self paths]) {
-        iMax = [path elementCount];
-        [fdfString appendString:@"["];
-        for (i = 0; i < iMax; i++) {
-            point = [path associatedPointForElementAtIndex:i];
-            [fdfString appendFormat:@"%f %f ", point.x + NSMinX(bounds), 
point.y + NSMinY(bounds)];
-        }
-        [fdfString appendString:@"]"];
-    }
-    [fdfString appendString:@"]"];
-    return fdfString;
-}
-
-- (BOOL)isInk { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
-    if ([super hitTest:point] == NO)
-        return NO;
-    
-    CGFloat delta = fmax(4.0, 0.5 * [self lineWidth]);
-    
-    point = SKSubstractPoints(point, [self bounds].origin);
-    
-    for (NSBezierPath *path in [self paths]) {
-        
-        if (NSPointInRect(point, NSInsetRect([path nonEmptyBounds], -delta, 
-delta))) {
-            
-            NSBezierPathElement elt;
-            NSPoint prevPoint, nextPoint = NSZeroPoint, points[3];
-            NSUInteger i, iMax = [path elementCount];
-            
-            for (i = 0; i < iMax; i++) {
-                
-                prevPoint = nextPoint;
-                elt = [path elementAtIndex:i associatedPoints:points];
-                
-                if (elt == NSCurveToBezierPathElement) {
-                    NSPoint min = prevPoint, max = prevPoint;
-                    NSBezierPath *flattenedPath;
-                    NSUInteger j, jMax;
-                    
-                    for (j = 0; j < 3; j++) {
-                        min.x = fmin(min.x, points[j].x);
-                        min.y = fmin(min.y, points[j].y);
-                        max.x = fmax(max.x, points[j].x);
-                        max.y = fmax(max.y, points[j].y);
-                    }
-                    if (point.x < min.x - delta || point.y < min.y - delta || 
point.x > max.x + delta || point.y > max.y + delta) {
-                        nextPoint = points[2];
-                    } else {
-                        flattenedPath = [NSBezierPath bezierPath];
-                        [flattenedPath moveToPoint:prevPoint];
-                        [flattenedPath curveToPoint:points[0] 
controlPoint1:points[1] controlPoint2:points[2]];
-                        flattenedPath = [flattenedPath 
bezierPathByFlatteningPath];
-                        jMax = [flattenedPath elementCount];
-                        for (j = 1; j < jMax; j++) {
-                            prevPoint = nextPoint;
-                            nextPoint = [flattenedPath 
associatedPointForElementAtIndex:j];
-                            if (SKPointNearLineFromPointToPoint(point, 
prevPoint, nextPoint, delta))
-                                return YES;
-                        }
-                    }
-                } else {
-                    nextPoint = points[0];
-                    if (elt != NSMoveToBezierPathElement && 
SKPointNearLineFromPointToPoint(point, prevPoint, nextPoint, delta))
-                        return YES;
-                }
-                
-            }
-            
-        }
-        
-    }
-    
-    return NO;
-}
-
-- (void)drawShadowWithUnitWidth:(CGFloat)unitWidth 
inContext:(CGContextRef)context {
-    NSRect bounds = [self bounds];
-    CGFloat r = fmin(2.0, 2.0 * unitWidth);
-    CGRect rect = NSRectToCGRect(NSInsetRect(bounds, 2.0 * r, 2.0 * r));
-    CGAffineTransform t = CGAffineTransformConcat(CGContextGetCTM(context), 
CGAffineTransformInvert(CGContextGetBaseCTM_func(context)));
-    r = fabs(CGSizeApplyAffineTransform(CGSizeMake(r, r), t).height);
-    t = CGAffineTransformMakeTranslation(NSMinX(bounds), NSMinY(bounds));
-    CGMutablePathRef path = CGPathCreateMutable();
-    for (NSBezierPath *aPath in [self paths])
-        [aPath addToCGPath:path transform:&t];
-    CGContextSaveGState(context);
-    CGContextSetAlpha(context, [[self color] alphaComponent]);
-    CGContextBeginTransparencyLayerWithRect(context, rect, NULL);
-    CGContextSetLineWidth(context, [self lineWidth]);
-    if ([self borderStyle] == kPDFBorderStyleDashed) {
-        NSArray *dashPattern = [self dashPattern];
-        NSUInteger i, count = [dashPattern count];
-        CGFloat pattern[count];
-        for (i = 0; i < count; i++)
-            pattern[i] = [[dashPattern objectAtIndex:i] doubleValue];
-        CGContextSetLineDash(context, 0.0, pattern, count);
-        CGContextSetLineCap(context, kCGLineCapButt);
-    } else {
-        CGContextSetLineCap(context, kCGLineCapRound);
-    }
-    CGContextSetShadow(context, CGSizeMake(0.0, -r), r);
-    CGContextAddPath(context, path);
-    CGContextStrokePath(context);
-    CGContextSetShadowWithColor(context, CGSizeZero, 0.0, NULL);
-    CGContextSetBlendMode(context, kCGBlendModeClear);
-    CGContextAddPath(context, path);
-    CGContextStrokePath(context);
-    CGContextEndTransparencyLayer(context);
-    CGContextRestoreGState(context);
-    CGPathRelease(path);
-}
-
-- (void)drawFallbackShadowWithUnitWidth:(CGFloat)unitWidth 
inContext:(CGContextRef)context {
-    CGFloat r = fmin(2.0 / unitWidth, 2.0);
-    NSSize offset = NSZeroSize;
-    switch ([[self page] rotation]) {
-        case 0:   offset.height = -r; break;
-        case 90:  offset.width = r;   break;
-        case 180: offset.height = r;  break;
-        case 270: offset.width = -r;  break;
-        default:  offset.height = -r; break;
-    }
-    NSRect bounds = [self bounds];
-    NSRect rect = NSIntersectionRect(NSOffsetRect(NSInsetRect(bounds, -r * 
unitWidth, -r * unitWidth), offset.width * unitWidth, offset.height * 
unitWidth), NSRectFromCGRect(CGContextGetClipBoundingBox(context)));
-    if (NSIsEmptyRect(rect) == NO) {
-        NSRect imgRect = NSMakeRect(0.0, 0.0, ceil(NSWidth(rect) / unitWidth), 
ceil(NSHeight(rect) / unitWidth));
-        rect.size = NSMakeSize(NSWidth(imgRect) * unitWidth, NSHeight(imgRect) 
* unitWidth);
-        NSImage *image = [NSImage imageWithSize:imgRect.size flipped:NO 
drawingHandler:^(NSRect dstRect){
-            NSAffineTransform *transform = [NSAffineTransform transform];
-            [transform scaleBy:1.0 / unitWidth];
-            [transform translateXBy:NSMinX(bounds) - NSMinX(rect) 
yBy:NSMinY(bounds) - NSMinY(rect)];
-            [transform concat];
-            NSBezierPath *path = [NSBezierPath bezierPath];
-            for (NSBezierPath *aPath in [self paths])
-                [path appendBezierPath:aPath];
-            [path setLineWidth:fmax(1.0, [self lineWidth])];
-            [path setLineJoinStyle:NSRoundLineJoinStyle];
-            if ([self borderStyle] == kPDFBorderStyleDashed) {
-                [path setDashPattern:[self dashPattern]];
-                [path setLineCapStyle:NSButtLineCapStyle];
-            } else {
-                [path setLineCapStyle:NSRoundLineCapStyle];
-            }
-            [NSGraphicsContext saveGraphicsState];
-            [NSShadow setShadowWithColor:[NSColor 
colorWithGenericGamma22White:0.0 alpha:0.33333] blurRadius:r offset:offset];
-            [path stroke];
-            [NSGraphicsContext restoreGraphicsState];
-            [[NSGraphicsContext currentContext] 
setCompositingOperation:NSCompositingOperationClear];
-            [path stroke];
-            return YES;
-        }];
-        [NSGraphicsContext saveGraphicsState];
-        [NSGraphicsContext setCurrentContext:[NSGraphicsContext 
graphicsContextWithCGContext:context flipped:NO]];
-        [image drawInRect:rect fromRect:imgRect 
operation:NSCompositingOperationSourceOver fraction:[[self color] 
alphaComponent]];
-        [NSGraphicsContext restoreGraphicsState];
-    }
-}
-
-- (void)drawSelectionHighlightWithUnitWidth:(CGFloat)unitWidth 
active:(BOOL)active inContext:(CGContextRef)context {
-    if (NSIsEmptyRect([self bounds]) == NO && [self isSkimNote]) {
-        if (CGContextGetBaseCTM_func != NULL)
-            [self drawShadowWithUnitWidth:unitWidth inContext:context];
-        else
-            [self drawFallbackShadowWithUnitWidth:unitWidth inContext:context];
-    }
-    [super drawSelectionHighlightWithUnitWidth:unitWidth active:active 
inContext:context];
-}
-
-- (NSString *)colorDefaultKey { return SKInkNoteColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKInkNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKInkNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKInkNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *inkKeys = nil;
-    if (inkKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] 
mutableCopy];
-        [mutableKeys addObject:SKPDFAnnotationBezierPathsKey];
-        inkKeys = [mutableKeys copy];
-    }
-    return inkKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
-    static NSSet *customInkScriptingKeys = nil;
-    if (customInkScriptingKeys == nil) {
-        NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
-        [customKeys addObject:SKPDFAnnotationScriptingPointListsKey];
-        customInkScriptingKeys = [customKeys copy];
-    }
-    return customInkScriptingKeys;
-}
-
-- (NSArray *)scriptingPointLists {
-    NSPoint origin = [self bounds].origin;
-    NSMutableArray *pointLists = [NSMutableArray array];
-    NSMutableArray *pointValues;
-    NSPoint point;
-    NSInteger i, iMax;
-    for (NSBezierPath *path in [self paths]) {
-        iMax = [path elementCount];
-        pointValues = [[NSMutableArray alloc] initWithCapacity:iMax];
-        for (i = 0; i < iMax; i++) {
-            point = [path associatedPointForElementAtIndex:i];
-            [pointValues addObject:[NSData 
dataWithPointAsNSPoint:SKAddPoints(point, origin)]];
-        }
-        [pointLists addObject:pointValues];
-    }
-    return pointLists;
-}
-
-- (void)setBoundsAsQDRect:(NSData *)inQDBoundsAsData {
-    if ([self isEditable]) {
-        NSRect newBounds = [inQDBoundsAsData rectValueAsQDRect];
-        CGFloat margin = [self pathInset];
-        NSRect bounds = [self bounds];
-        
-        if (NSWidth(newBounds) < 2.0 * margin)
-            newBounds.size.width = 2.0 * margin;
-        if (NSHeight(newBounds) < 2.0 * margin)
-            newBounds.size.height = 2.0 * margin;
-        
-        if (NSEqualSizes(bounds.size, newBounds.size) == NO) {
-            NSMutableArray *paths = [NSMutableArray array];
-            NSAffineTransform *transform = [NSAffineTransform transform];
-            [transform translateXBy:margin yBy:margin];
-            [transform scaleXBy:fmax(1.0, NSWidth(newBounds) - 2.0 * margin) / 
fmax(1.0, NSWidth(bounds) - 2.0 * margin) yBy:fmax(1.0, NSHeight(newBounds) - 
2.0 * margin) / fmax(1.0, NSHeight(bounds) - 2.0 * margin)];
-            [transform translateXBy:-margin yBy:-margin];
-            
-            for (NSBezierPath *path in [self paths])
-                [paths addObject:[transform transformBezierPath:path]];
-            
-            [self setBezierPaths:paths];
-        }
-        
-        [self setBounds:newBounds];
-    }
-
-}
-
-@end

Deleted: trunk/PDFAnnotationLine_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationLine_SKExtensions.h      2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationLine_SKExtensions.h      2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,59 +0,0 @@
-//
-//  PDFAnnotationLine_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationStartPointAsQDPointKey;
-extern NSString * const SKPDFAnnotationEndPointAsQDPointKey;
-extern NSString * const SKPDFAnnotationScriptingStartLineStyleKey;
-extern NSString * const SKPDFAnnotationScriptingEndLineStyleKey;
-
-@interface PDFAnnotationLine (SKExtensions)
-
-@property (nonatomic, nullable, copy) NSData *startPointAsQDPoint;
-@property (nonatomic, nullable, copy) NSData *endPointAsQDPoint;
-@property (nonatomic) PDFLineStyle scriptingStartLineStyle;
-@property (nonatomic) PDFLineStyle scriptingEndLineStyle;
-@property (nonatomic, nullable, copy) NSColor *scriptingInteriorColor;
-
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationLine_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationLine_SKExtensions.m      2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationLine_SKExtensions.m      2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,317 +0,0 @@
-//
-//  PDFAnnotationLine_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationLine_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "NSUserDefaults_SKExtensions.h"
-#import "NSGeometry_SKExtensions.h"
-#import "NSGraphics_SKExtensions.h"
-#import "NSData_SKExtensions.h"
-#import "PDFPage_SKExtensions.h"
-#import "SKRuntime.h"
-#import "NSBezierPath_SKExtensions.h"
-#import "NSColor_SKExtensions.h"
-#import "PDFView_SKExtensions.h"
-
-NSString * const SKPDFAnnotationStartPointAsQDPointKey = 
@"startPointAsQDPoint";
-NSString * const SKPDFAnnotationEndPointAsQDPointKey = @"endPointAsQDPoint";
-NSString * const SKPDFAnnotationScriptingStartLineStyleKey = 
@"scriptingStartLineStyle";
-NSString * const SKPDFAnnotationScriptingEndLineStyleKey = 
@"scriptingEndLineStyle";
-
-@implementation PDFAnnotationLine (SKExtensions)
-
-static void (*original_setBounds)(id, SEL, NSRect) = NULL;
-
-static void replacement_setBounds(id self, SEL _cmd , NSRect newBounds) {
-    NSArray *points = [self valueForAnnotationKey:PDFAnnotationKeyLinePoints];
-    if ([points isKindOfClass:[NSArray class]] && [points count] == 4) {
-        NSPoint d = SKSubstractPoints(newBounds.origin, [self bounds].origin);
-        if (NSEqualPoints(d, NSZeroPoint))
-            points = nil;
-        else
-            points = @[@([points[0] doubleValue] + d.x), @([points[1] 
doubleValue] + d.y), @([points[2] doubleValue] + d.x), @([points[3] 
doubleValue] + d.y)];
-    } else if (points) {
-        points = nil;
-    }
-    original_setBounds(self, _cmd, newBounds);
-    if (points)
-        [self setValue:points forAnnotationKey:PDFAnnotationKeyLinePoints];
-}
-
-+ (void)load {
-    if (@available(macOS 10.14, *)) {} else {
-        original_setBounds = (void (*)(id, SEL, 
NSRect))SKReplaceInstanceMethodImplementation(self, @selector(setBounds:), 
(IMP)replacement_setBounds);
-    }
-}
-
-- (void)setDefaultSkimNoteProperties {
-    NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
-    NSRect bounds = [self bounds];
-    [self setColor:[sud colorForKey:SKLineNoteColorKey]];
-    NSColor *color = [sud colorForKey:SKLineNoteInteriorColorKey];
-    if ([color alphaComponent] > 0.0)
-        [self setInteriorColor:color];
-    [self setStartLineStyle:[sud integerForKey:SKLineNoteStartLineStyleKey]];
-    [self setEndLineStyle:[sud integerForKey:SKLineNoteEndLineStyleKey]];
-    [self setStartPoint:NSMakePoint(0.0, 0.0)];
-    [self setEndPoint:NSMakePoint(NSWidth(bounds), NSHeight(bounds))];
-    PDFBorder *border = [[PDFBorder alloc] init];
-    [border setLineWidth:[sud floatForKey:SKLineNoteLineWidthKey]];
-    [border setDashPattern:[sud arrayForKey:SKLineNoteDashPatternKey]];
-    [border setStyle:[sud floatForKey:SKLineNoteLineStyleKey]];
-    [self setBorder:[border lineWidth] > 0.0 ? border : nil];
-}
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    [fdfString appendFDFName:SKFDFAnnotationLineStylesKey];
-    [fdfString appendString:@"["];
-    [fdfString appendFDFName:SKFDFLineStyleFromPDFLineStyle([self 
startLineStyle])];
-    [fdfString appendFDFName:SKFDFLineStyleFromPDFLineStyle([self 
endLineStyle])];
-    [fdfString appendString:@"]"];
-    NSPoint startPoint = SKAddPoints([self startPoint], [self bounds].origin);
-    NSPoint endPoint = SKAddPoints([self endPoint], [self bounds].origin);
-    [fdfString appendFDFName:SKFDFAnnotationLinePointsKey];
-    [fdfString appendFormat:@"[%f %f %f %f]", startPoint.x, startPoint.y, 
endPoint.x, endPoint.y];
-    CGFloat r, g, b, a = 0.0;
-    [[self interiorColor] getRed:&r green:&g blue:&b alpha:&a];
-    if (a > 0.0) {
-        [fdfString appendFDFName:SKFDFAnnotationInteriorColorKey];
-        [fdfString appendFormat:@"[%f %f %f]", r, g, b];
-    }
-    return fdfString;
-}
-
-- (BOOL)isLine { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)hasInteriorColor { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
-    if ([self shouldDisplay] == NO || [self isSkimNote] == NO)
-        return NO;
-    CGFloat delta = fmax(4.0, 0.5 * [self lineWidth]);
-    return SKPointNearLineFromPointToPoint(SKSubstractPoints(point, [self 
bounds].origin), [self startPoint], [self endPoint], delta);
-}
-
-- (CGFloat)boundsOrder {
-    CGFloat delta = ceil(fmax(4.0 * [self lineWidth], 4.0));
-    NSPoint origin = [self bounds].origin;
-    NSRect startBounds = SKRectFromCenterAndSquareSize(SKAddPoints(origin, 
[self startPoint]), delta);
-    NSRect endBounds = SKRectFromCenterAndSquareSize(SKAddPoints(origin, [self 
endPoint]), delta);
-    PDFPage *page = [self page];
-    return fmin([page sortOrderForBounds:startBounds], [page 
sortOrderForBounds:endBounds]);
-}
-
-- (SKRectEdges)resizeHandleForPoint:(NSPoint)point 
scaleFactor:(CGFloat)scaleFactor {
-    if ([self isResizable] == NO)
-        return SKRectEdgesNone;
-    NSSize size = SKMakeSquareSize(8.0 / scaleFactor);
-    point = SKSubstractPoints(point, [self bounds].origin);
-    if (NSPointInRect(point, SKRectFromCenterAndSize([self endPoint], size)))
-        return SKRectEdgesMaxX;
-    else if (NSPointInRect(point, SKRectFromCenterAndSize([self startPoint], 
size)))
-        return SKRectEdgesMinX;
-    else
-        return SKRectEdgesNone;
-}
-
-- (void)drawSelectionHighlightWithUnitWidth:(CGFloat)unitWidth 
active:(BOOL)active inContext:(CGContextRef)context {
-    if (NSIsEmptyRect([self bounds]))
-        return;
-    NSPoint origin = [self bounds].origin;
-    SKDrawResizeHandlePair(context, SKAddPoints(origin, [self startPoint]), 
SKAddPoints(origin, [self endPoint]), unitWidth, active);
-}
-
-- (NSString *)colorDefaultKey { return SKLineNoteColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKLineNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKLineNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKLineNoteDashPatternKey; }
-
-- (PDFLineStyle)startLineStyleDefaultKey { return SKLineNoteStartLineStyleKey; 
}
-
-- (PDFLineStyle)endLineStyleDefaultKey { return SKLineNoteEndLineStyleKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *lineKeys = nil;
-    if (lineKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] 
mutableCopy];
-        [mutableKeys addObject:SKNPDFAnnotationStartLineStyleKey];
-        [mutableKeys addObject:SKNPDFAnnotationEndLineStyleKey];
-        [mutableKeys addObject:SKNPDFAnnotationStartPointKey];
-        [mutableKeys addObject:SKNPDFAnnotationEndPointKey];
-        [mutableKeys addObject:SKNPDFAnnotationInteriorColorKey];
-        lineKeys = [mutableKeys copy];
-    }
-    return lineKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
-    static NSSet *customLineScriptingKeys = nil;
-    if (customLineScriptingKeys == nil) {
-        NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
-        [customKeys addObject:SKPDFAnnotationStartPointAsQDPointKey];
-        [customKeys addObject:SKPDFAnnotationEndPointAsQDPointKey];
-        [customKeys addObject:SKPDFAnnotationScriptingStartLineStyleKey];
-        [customKeys addObject:SKPDFAnnotationScriptingEndLineStyleKey];
-        [customKeys addObject:SKPDFAnnotationScriptingInteriorColorKey];
-        customLineScriptingKeys = [customKeys copy];
-    }
-    return customLineScriptingKeys;
-}
-
-- (void)setStartPointAsQDPoint:(NSData *)inQDPointAsData {
-    if ([self isEditable] && inQDPointAsData && [inQDPointAsData 
isEqual:[NSNull null]] == NO) {
-        NSPoint startPoint = [inQDPointAsData pointValueAsQDPoint];
-        
-        NSRect bounds = [self bounds];
-        NSPoint endPoint = SKIntegralPoint(SKAddPoints([self endPoint], 
bounds.origin));
-        
-        bounds = SKIntegralRectFromPoints(startPoint, endPoint);
-        
-        if (NSWidth(bounds) < 8.0) {
-            bounds.size.width = 8.0;
-            bounds.origin.x = floor(0.5 * (startPoint.x + endPoint.x) - 4.0);
-        }
-        if (NSHeight(bounds) < 8.0) {
-            bounds.size.height = 8.0;
-            bounds.origin.y = floor(0.5 * (startPoint.y + endPoint.y) - 4.0);
-        }
-        
-        startPoint = SKSubstractPoints(startPoint, bounds.origin);
-        endPoint = SKSubstractPoints(endPoint, bounds.origin);
-        
-        [self setBounds:bounds];
-        [self setStartPoint:startPoint];
-        [self setEndPoint:endPoint];
-    }
-
-}
-
-- (NSData *)startPointAsQDPoint {
-    NSRect bounds = [self bounds];
-    NSPoint startPoint = SKAddPoints([self startPoint], bounds.origin);
-    startPoint.x = floor(startPoint.x);
-    startPoint.y = floor(startPoint.y);
-    return [NSData dataWithPointAsQDPoint:startPoint];
-}
-
-- (void)setEndPointAsQDPoint:(NSData *)inQDPointAsData {
-    if ([self isEditable] && inQDPointAsData && [inQDPointAsData 
isEqual:[NSNull null]] == NO) {
-        NSPoint endPoint = [inQDPointAsData pointValueAsQDPoint];
-        
-        NSRect bounds = [self bounds];
-        NSPoint startPoint = SKIntegralPoint(SKAddPoints([self startPoint], 
bounds.origin));
-        
-        bounds = SKIntegralRectFromPoints(startPoint, endPoint);
-        
-        if (NSWidth(bounds) < 8.0) {
-            bounds.size.width = 8.0;
-            bounds.origin.x = floor(0.5 * (startPoint.x + endPoint.x) - 4.0);
-        }
-        if (NSHeight(bounds) < 8.0) {
-            bounds.size.height = 8.0;
-            bounds.origin.y = floor(0.5 * (startPoint.y + endPoint.y) - 4.0);
-        }
-        
-        startPoint = SKSubstractPoints(startPoint, bounds.origin);
-        endPoint = SKSubstractPoints(endPoint, bounds.origin);
-        
-        [self setBounds:bounds];
-        [self setStartPoint:startPoint];
-        [self setEndPoint:endPoint];
-    }
-
-}
-
-- (NSData *)endPointAsQDPoint {
-    NSRect bounds = [self bounds];
-    NSPoint endPoint = SKAddPoints([self endPoint], bounds.origin);
-    endPoint.x = floor(endPoint.x);
-    endPoint.y = floor(endPoint.y);
-    return [NSData dataWithPointAsQDPoint:endPoint];
-}
-
-- (PDFLineStyle)scriptingStartLineStyle {
-    return [self startLineStyle];
-}
-
-- (PDFLineStyle)scriptingEndLineStyle {
-    return [self endLineStyle];
-}
-
-- (void)setScriptingStartLineStyle:(PDFLineStyle)style {
-    if ([self isEditable]) {
-        [self setStartLineStyle:style];
-    }
-}
-
-- (void)setScriptingEndLineStyle:(PDFLineStyle)style {
-    if ([self isEditable]) {
-        [self setEndLineStyle:style];
-    }
-}
-
-- (NSColor *)scriptingInteriorColor {
-    return [self interiorColor];
-}
-
-- (void)setScriptingInteriorColor:(NSColor *)newColor {
-    if ([self isEditable]) {
-        [self setInteriorColor:newColor];
-    }
-}
-
-@end

Deleted: trunk/PDFAnnotationLink_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationLink_SKExtensions.h      2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationLink_SKExtensions.h      2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,47 +0,0 @@
-//
-//  PDFAnnotationLink_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 7/8/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationLink (SKExtension)
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationLink_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationLink_SKExtensions.m      2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationLink_SKExtensions.m      2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,47 +0,0 @@
-//
-//  PDFAnnotationLink_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 7/8/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationLink_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-
-
-@implementation PDFAnnotationLink (SKExtensions)
-
-- (BOOL)isLink { return YES; }
-
-@end

Deleted: trunk/PDFAnnotationMarkup_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationMarkup_SKExtensions.h    2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationMarkup_SKExtensions.h    2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,54 +0,0 @@
-//
-//  PDFAnnotationMarkup_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-extern NSString * const SKPDFAnnotationSelectionSpecifierKey;
-
-@interface PDFAnnotationMarkup (SKExtensions)
-
-- (nullable instancetype)initSkimNoteWithSelection:(PDFSelection *)selection 
forPage:(PDFPage *)page forType:(NSString *)type;
-
-@property (nonatomic, nullable, readonly) PDFSelection *selection;
-
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationMarkup_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationMarkup_SKExtensions.m    2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationMarkup_SKExtensions.m    2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,367 +0,0 @@
-//
-//  PDFAnnotationMarkup_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationMarkup_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "PDFAnnotationInk_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "PDFSelection_SKExtensions.h"
-#import "NSUserDefaults_SKExtensions.h"
-#import "NSGeometry_SKExtensions.h"
-#import "NSData_SKExtensions.h"
-#import "NSCharacterSet_SKExtensions.h"
-#import "NSPointerArray_SKExtensions.h"
-#import "NSColor_SKExtensions.h"
-#import "PDFPage_SKExtensions.h"
-#import "NSView_SKExtensions.h"
-#import "SKNoteText.h"
-#import "PDFView_SKExtensions.h"
-#import "SKRuntime.h"
-#import <objc/objc-runtime.h>
-
-NSString * const SKPDFAnnotationSelectionSpecifierKey = @"selectionSpecifier";
-
-static char SKLineRectsKey;
-static char SKTextStringKey;
-static char SKNoteTextKey;
-
-@implementation PDFAnnotationMarkup (SKExtensions)
-
-/*
- http://www.cocoabuilder.com/archive/message/cocoa/2007/2/16/178891
-  The docs are wrong (as is Adobe's spec).  The ordering on the rotated page 
is:
- --------
- | 0  1 |
- | 2  3 |
- --------
- */
-
-static void addQuadPointsWithBounds(NSMutableArray *quadPoints, const NSRect 
bounds, const NSPoint origin, NSInteger lineAngle)
-{
-    static NSInteger offset[4] = {0, 1, 3, 2};
-    NSRect r = NSOffsetRect(bounds, -origin.x, -origin.y);
-    NSInteger i = lineAngle / 90;
-    NSPoint p[4];
-    memset(&p, 0, 4 * sizeof(NSPoint));
-    p[offset[i]] = SKBottomLeftPoint(r);
-    p[offset[++i%4]] = SKTopLeftPoint(r);
-    p[offset[++i%4]] = SKTopRightPoint(r);
-    p[offset[++i%4]] = SKBottomRightPoint(r);
-    for (i = 0; i < 4; i++)
-        [quadPoints addObject:[NSValue valueWithPoint:p[i]]];
-}
-
-static void (*original_setColor)(id, SEL, id) = NULL;
-
-// PDFView raises an exception when a highlight has a sRGB black color
-static void replacement_setColor(id self, SEL _cmd, NSColor *color) {
-    static NSColor *blackColor = nil;
-    if (blackColor == nil)
-        blackColor = [NSColor colorWithSRGBRed:0.0 green:0.0 blue:0.0 
alpha:1.0];
-    if ([self markupType] == kPDFMarkupTypeHighlight && [color 
isEqual:blackColor])
-        color = [NSColor blackColor];
-    original_setColor(self, _cmd, color);
-}
-
-+ (void)load {
-    original_setColor = (void (*)(id, SEL, 
id))SKReplaceInstanceMethodImplementation(self, @selector(setColor:), 
(IMP)replacement_setColor);
-}
-
-- (void)setDefaultSkimNoteProperties {
-    NSString *key = nil;
-    switch ([self markupType]) {
-        case kPDFMarkupTypeUnderline: key = SKUnderlineNoteColorKey; break;
-        case kPDFMarkupTypeStrikeOut: key = SKStrikeOutNoteColorKey; break;
-        default: key = SKHighlightNoteColorKey; break;
-    }
-    [self setColor:[[NSUserDefaults standardUserDefaults] colorForKey:key]];
-    [self setPopup:nil];
-}
-
-- (instancetype)initSkimNoteWithSelection:(PDFSelection *)selection 
forPage:(PDFPage *)page forType:(NSString *)type {
-    NSRect bounds = NSZeroRect;
-    NSPointerArray *lines = nil;
-    if ([selection safeIndexOfFirstCharacterOnPage:page] != NSNotFound) {
-        for (PDFSelection *sel in [selection connectedSelectionsOnPage:page]) {
-            NSRect lineRect = [sel boundsForPage:page];
-            if (NSIsEmptyRect(lineRect) == NO && [[sel string] 
rangeOfCharacterFromSet:[NSCharacterSet 
nonWhitespaceAndNewlineCharacterSet]].length) {
-                if (lines == nil)
-                    lines = [[NSPointerArray alloc] initForRectPointers];
-                [lines addPointer:&lineRect];
-                bounds = NSUnionRect(lineRect, bounds);
-            }
-        }
-    }
-    if (lines == nil) {
-        self = [self init];
-        self = nil;
-    } else {
-        self = [self initSkimNoteWithBounds:bounds forType:type];
-        if (self) {
-            NSInteger lineAngle = [page lineDirectionAngle];
-            NSMutableArray *quadPoints = [[NSMutableArray alloc] init];
-            NSUInteger i, iMax = [lines count];
-            for (i = 0; i < iMax; i++)
-                addQuadPointsWithBounds(quadPoints, [lines rectAtIndex:i], 
bounds.origin, lineAngle);
-            [self setQuadrilateralPoints:quadPoints];
-            objc_setAssociatedObject(self, &SKLineRectsKey, lines, 
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-        }
-    }
-    return self;
-}
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    NSPoint point;
-    NSRect bounds = [self bounds];
-    [fdfString appendFDFName:SKFDFAnnotationQuadrilateralPointsKey];
-    [fdfString appendString:@"["];
-    for (NSValue *value in [self quadrilateralPoints]) {
-        point = [value pointValue];
-        [fdfString appendFormat:@"%f %f ", point.x + NSMinX(bounds), point.y + 
NSMinY(bounds)];
-    }
-    [fdfString appendString:@"]"];
-    return fdfString;
-}
-
-- (NSPointerArray *)lineRects {
-    NSPointerArray *lineRects = objc_getAssociatedObject(self, 
&SKLineRectsKey);
-    if (lineRects == nil) {
-        lineRects = [[NSPointerArray alloc] initForRectPointers];
-        
-        // archived annotations (or annotations we didn't create) won't have 
these
-        NSArray *quadPoints = [self quadrilateralPoints];
-        NSAssert([quadPoints count] % 4 == 0, @"inconsistent number of quad 
points");
-        
-        NSUInteger j, jMax = [quadPoints count] / 4;
-        NSPoint origin = [self bounds].origin;
-        NSRange range = NSMakeRange(0, 4);
-        
-        for (j = 0; j < jMax; j++) {
-            
-            range.location = 4 * j;
-            
-            NSPoint point;
-            NSUInteger i;
-            CGFloat minX = CGFLOAT_MAX, maxX = -CGFLOAT_MAX, minY = 
CGFLOAT_MAX, maxY = -CGFLOAT_MAX;
-            for (i = 0; i < 4; i++) {
-                point = [[quadPoints objectAtIndex:4 * j + i] pointValue];
-                minX = fmin(minX, point.x);
-                maxX = fmax(maxX, point.x);
-                minY = fmin(minY, point.y);
-                maxY = fmax(maxY, point.y);
-            }
-            
-            NSRect lineRect = NSMakeRect(origin.x + minX, origin.y + minY, 
maxX - minX, maxY - minY);
-            [lineRects addPointer:&lineRect];
-        }
-        
-        objc_setAssociatedObject(self, &SKLineRectsKey, lineRects, 
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-    return lineRects;
-}
-
-- (PDFSelection *)selectionWithPage:(PDFPage *)page {
-    PDFSelection *selection = nil;
-    NSMutableArray *selections = nil;
-    NSPointerArray *lines = [self lineRects];
-    NSUInteger i, iMax = [lines count];
-    
-    for (i = 0; i < iMax; i++) {
-        // slightly outset the rect to avoid rounding errors, as 
selectionForRect is pretty strict in some OS versions, but unfortunately not in 
others
-        PDFSelection *sel = [page selectionForRect:NSInsetRect([lines 
rectAtIndex:i], -1.0, -1.0)];
-        if ([sel hasCharacters]) {
-            if (selection == nil)
-                selection = sel;
-            else if (selections)
-                [selections addObject:sel];
-            else
-                selections = [NSMutableArray arrayWithObject:sel];
-        }
-    }
-    if (selections)
-        [selection addSelections:selections];
-    return selection;
-}
-
-- (PDFSelection *)selection {
-    return [self selectionWithPage:[self page]];
-}
-
-- (BOOL)hitTest:(NSPoint)point {
-    if ([super hitTest:point] == NO)
-        return NO;
-    
-    NSPointerArray *lines = [self lineRects];
-    NSUInteger i = [lines count];
-    BOOL isContained = NO;
-    
-    while (i-- && NO == isContained)
-        isContained = NSPointInRect(point, [lines rectAtIndex:i]);
-    
-    return isContained;
-}
-
-- (CGFloat)boundsOrder {
-    NSPointerArray *lines = [self lineRects];
-    NSRect bounds = [lines count] > 0 ? [lines rectAtIndex:0] : [self bounds];
-    return [[self page] sortOrderForBounds:bounds];
-}
-
-- (void)drawSelectionHighlightWithUnitWidth:(CGFloat)unitWidth 
active:(BOOL)active inContext:(CGContextRef)context {
-    if (NSIsEmptyRect([self bounds]))
-        return;
-    
-    NSPointerArray *lines = [self lineRects];
-    NSUInteger i, iMax = [lines count];
-    CGColorRef color = [[NSColor selectionHighlightColor:active] CGColor];
-    
-    CGContextSaveGState(context);
-    CGContextSetStrokeColorWithColor(context, color);
-    CGContextSetLineWidth(context, unitWidth);
-    for (i = 0; i < iMax; i++) {
-        CGRect rect = CGContextConvertRectToUserSpace(context, 
CGRectIntegral(CGContextConvertRectToDeviceSpace(context, NSRectToCGRect([lines 
rectAtIndex:i]))));
-        CGContextStrokeRect(context, CGRectInset(rect, -0.5 * unitWidth, -0.5 
* unitWidth));
-    }
-    CGContextRestoreGState(context);
-}
-
-- (BOOL)isMarkup { return YES; }
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)hasBorder { return NO; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hasNoteText { return [self isEditable]; }
-
-- (SKNoteText *)noteText {
-    if ([self isEditable] == NO)
-        return nil;
-    SKNoteText *noteText = objc_getAssociatedObject(self, &SKNoteTextKey);
-    if (noteText == nil) {
-        noteText = [[SKNoteText alloc] initWithNote:self];
-        objc_setAssociatedObject(self, &SKNoteTextKey, noteText, 
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-    return noteText;
-}
-
-- (NSString *)textString {
-    if ([[self page] pageRef] == NULL)
-        return nil;
-    NSString *textString = objc_getAssociatedObject(self, &SKTextStringKey);
-    if (textString == nil) {
-        textString = [[self selection] cleanedString] ?: @"";
-        objc_setAssociatedObject(self, &SKTextStringKey, textString, 
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-    return textString;
-}
-
-- (NSString *)colorDefaultKey {
-    switch ([self markupType]) {
-        case kPDFMarkupTypeUnderline: return SKUnderlineNoteColorKey;
-        case kPDFMarkupTypeStrikeOut: return SKStrikeOutNoteColorKey;
-        case kPDFMarkupTypeHighlight: return SKHighlightNoteColorKey;
-        default: return SKHighlightNoteColorKey;
-    }
-    return nil;
-}
-
-- (void)autoUpdateStringWithPage:(PDFPage *)page {
-    NSString *selString = [[self selectionWithPage:page] cleanedString];
-    if ([selString length]) {
-        // page should be future [self page] and textString will not have been 
called
-        objc_setAssociatedObject(self, &SKTextStringKey, selString, 
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-        [self setString:selString];
-    }
-}
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *markupKeys = nil;
-    if (markupKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] 
mutableCopy];
-        [mutableKeys removeObject:SKNPDFAnnotationBorderKey];
-        markupKeys = [mutableKeys copy];
-    }
-    return markupKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
-    static NSSet *customMarkupScriptingKeys = nil;
-    if (customMarkupScriptingKeys == nil) {
-        NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
-        [customKeys addObject:SKPDFAnnotationSelectionSpecifierKey];
-        [customKeys addObject:SKPDFAnnotationScriptingPointListsKey];
-        [customKeys removeObject:SKNPDFAnnotationLineWidthKey];
-        [customKeys removeObject:SKNPDFAnnotationBorderStyleKey];
-        [customKeys removeObject:SKNPDFAnnotationDashPatternKey];
-        customMarkupScriptingKeys = [customKeys copy];
-    }
-    return customMarkupScriptingKeys;
-}
-
-- (id)selectionSpecifier {
-    PDFSelection *sel = [self selection];
-    return [sel hasCharacters] ? [sel objectSpecifiers] : @[];
-}
-
-- (NSArray *)scriptingPointLists {
-    NSPoint origin = [self bounds].origin;
-    NSMutableArray *pointLists = [NSMutableArray array];
-    NSMutableArray *pointValues;
-    NSPoint point;
-    NSInteger i, j, iMax = [[self quadrilateralPoints] count] / 4;
-    for (i = 0; i < iMax; i++) {
-        pointValues = [[NSMutableArray alloc] initWithCapacity:iMax];
-        for (j = 0; j < 4; j++) {
-            point = [[[self quadrilateralPoints] objectAtIndex:4 * i + j] 
pointValue];
-            [pointValues addObject:[NSData 
dataWithPointAsNSPoint:SKAddPoints(point, origin)]];
-        }
-        [pointLists addObject:pointValues];
-    }
-    return pointLists;
-}
-
-@end

Deleted: trunk/PDFAnnotationSquare_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationSquare_SKExtensions.h    2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationSquare_SKExtensions.h    2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,48 +0,0 @@
-//
-//  PDFAnnotationSquare_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationSquare (SKExtensions)
-@property (nonatomic, nullable, copy) NSColor *scriptingInteriorColor;
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationSquare_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationSquare_SKExtensions.m    2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationSquare_SKExtensions.m    2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,150 +0,0 @@
-//
-//  PDFAnnotationSquare_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 4/1/08.
-/*
- This software is Copyright (c) 2008
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationSquare_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKStringConstants.h"
-#import "SKFDFParser.h"
-#import "PDFSelection_SKExtensions.h"
-#import "NSUserDefaults_SKExtensions.h"
-
-
-@implementation PDFAnnotationSquare (SKExtensions)
-
-- (void)setDefaultSkimNoteProperties {
-    NSUserDefaults *sud = [NSUserDefaults standardUserDefaults];
-    NSColor *color = [sud colorForKey:SKSquareNoteInteriorColorKey];
-    if ([color alphaComponent] > 0.0)
-        [self setInteriorColor:color];
-    [self setColor:[sud colorForKey:SKSquareNoteColorKey]];
-    [[self border] setLineWidth:[sud floatForKey:SKSquareNoteLineWidthKey]];
-    [[self border] setDashPattern:[sud 
arrayForKey:SKSquareNoteDashPatternKey]];
-    [[self border] setStyle:[sud floatForKey:SKSquareNoteLineStyleKey]];
-
-}
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    CGFloat r, g, b, a = 0.0;
-    [[[self interiorColor] colorUsingColorSpaceName:NSDeviceRGBColorSpace] 
getRed:&r green:&g blue:&b alpha:&a];
-    if (a > 0.0) {
-        [fdfString appendFDFName:SKFDFAnnotationInteriorColorKey];
-        [fdfString appendFormat:@"[%f %f %f]", r, g, b];
-    }
-    return fdfString;
-}
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isShape { return YES; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isResizable { return [self isSkimNote]; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)hasInteriorColor { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-- (BOOL)hitTest:(NSPoint)point {
-    if ([super hitTest:point] == NO)
-        return NO;
-    
-    if ([self interiorColor])
-        return YES;
-    
-    NSRect bounds = [self bounds];
-    CGFloat delta = fmax(8.0, [self lineWidth]);
-    return NSWidth(bounds) <= 2.0 * delta || NSHeight(bounds) <= 2.0 * delta 
|| NSPointInRect(point, NSInsetRect(bounds, delta, delta)) == NO;
-}
-
-- (void)autoUpdateStringWithPage:(PDFPage *)page {
-    NSRect bounds = NSInsetRect([self bounds], [self lineWidth] - 1.0, [self 
lineWidth] - 1.0);
-    if (NSWidth(bounds) <= 0.0 || NSHeight(bounds) <= 0.0)
-        return;
-    NSString *selString = [[page selectionForRect:bounds] cleanedString];
-    if ([selString length])
-        [self setString:selString];
-}
-
-- (NSString *)colorDefaultKey { return SKSquareNoteColorKey; }
-
-- (NSString *)alternateColorDefaultKey { return SKSquareNoteInteriorColorKey; }
-
-- (NSString *)lineWidthDefaultKey { return SKSquareNoteLineWidthKey; }
-
-- (NSString *)borderStyleDefaultKey { return SKSquareNoteLineStyleKey; }
-
-- (NSString *)dashPatternDefaultKey { return SKSquareNoteDashPatternKey; }
-
-- (NSSet *)keysForValuesToObserveForUndo {
-    static NSSet *squareKeys = nil;
-    if (squareKeys == nil) {
-        NSMutableSet *mutableKeys = [[super keysForValuesToObserveForUndo] 
mutableCopy];
-        [mutableKeys addObject:SKNPDFAnnotationInteriorColorKey];
-        squareKeys = [mutableKeys copy];
-    }
-    return squareKeys;
-}
-
-#pragma mark Scripting support
-
-+ (NSSet *)customScriptingKeys {
-    static NSSet *customSquareScriptingKeys = nil;
-    if (customSquareScriptingKeys == nil) {
-        NSMutableSet *customKeys = [[super customScriptingKeys] mutableCopy];
-        [customKeys addObject:SKPDFAnnotationScriptingInteriorColorKey];
-        customSquareScriptingKeys = [customKeys copy];
-    }
-    return customSquareScriptingKeys;
-}
-
-- (NSColor *)scriptingInteriorColor {
-    return [self interiorColor];
-}
-
-- (void)setScriptingInteriorColor:(NSColor *)newColor {
-    if ([self isEditable]) {
-        [self setInteriorColor:newColor];
-    }
-}
-
-@end

Deleted: trunk/PDFAnnotationStamp_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationStamp_SKExtensions.h     2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationStamp_SKExtensions.h     2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,47 +0,0 @@
-//
-//  PDFAnnotationStamp_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 26/10/2024.
-/*
- This software is Copyright (c) 2024
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationStamp (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationStamp_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationStamp_SKExtensions.m     2026-09-26 21:41:10 UTC (rev 
16538)
+++ trunk/PDFAnnotationStamp_SKExtensions.m     2026-09-26 21:49:13 UTC (rev 
16539)
@@ -1,61 +0,0 @@
-//
-//  PDFAnnotationStamp_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 26/10/2024.
-/*
- This software is Copyright (c) 2024
- Christiaan Hofman. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- - Neither the name of Christiaan Hofman nor the names of any
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "PDFAnnotationStamp_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "PDFAnnotation_SKExtensions.h"
-#import "SKFDFParser.h"
-
-@implementation PDFAnnotationStamp (SKExtensions)
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    [fdfString appendFDFName:SKFDFAnnotationIconTypeKey];
-    [fdfString 
appendFDFName:SKFDFTextAnnotationIconTypeFromPDFTextAnnotationIconType([self 
iconType])];
-    return fdfString;
-}
-
-- (BOOL)isWidget { return NO; }
-
-- (BOOL)isLink { return NO; }
-
-- (BOOL)isMovable { return [self isSkimNote]; }
-
-- (BOOL)isConvertibleAnnotation { return YES; }
-
-@end

Deleted: trunk/PDFAnnotationTextWidget_SKExtensions.h
===================================================================
--- trunk/PDFAnnotationTextWidget_SKExtensions.h        2026-09-26 21:41:10 UTC 
(rev 16538)
+++ trunk/PDFAnnotationTextWidget_SKExtensions.h        2026-09-26 21:49:13 UTC 
(rev 16539)
@@ -1,47 +0,0 @@
-//
-//  PDFAnnotationTextWidget_SKExtensions.h
-//  Skim
-//
-//  Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-Christiaan Hofman. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-- Neither the name of Christiaan Hofman nor the names of any
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#import <Cocoa/Cocoa.h>
-#import <Quartz/Quartz.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface PDFAnnotationTextWidget (SKExtensions)
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/PDFAnnotationTextWidget_SKExtensions.m
===================================================================
--- trunk/PDFAnnotationTextWidget_SKExtensions.m        2026-09-26 21:41:10 UTC 
(rev 16538)
+++ trunk/PDFAnnotationTextWidget_SKExtensions.m        2026-09-26 21:49:13 UTC 
(rev 16539)
@@ -1,81 +0,0 @@
-//
-//  PDFAnnotationTextWidget_SKExtensions.m
-//  Skim
-//
-//  Created by Christiaan Hofman on 11/04/2020.
-/*
-This software is Copyright (c) 2020
-Christiaan Hofman. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-- Neither the name of Christiaan Hofman nor the names of any
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#import "PDFAnnotationTextWidget_SKExtensions.h"
-#import "PDFAnnotation_SKExtensions.h"
-#import <SkimNotes/SkimNotes.h>
-#import "SKFDFParser.h"
-#import "NSString_SKExtensions.h"
-
-@implementation PDFAnnotationTextWidget (SKExtensions)
-
-- (NSString *)fdfString {
-    NSMutableString *fdfString = [[super fdfString] mutableCopy];
-    [fdfString appendFDFName:SKFDFAnnotationFieldTypeKey];
-    [fdfString appendFDFName:SKFDFFieldTypeText];
-    [fdfString appendFDFName:SKFDFAnnotationFieldNameKey];
-    [fdfString appendFormat:@"(%@)", [[[self fieldName] ?: @"" 
lossyStringUsingEncoding:NSISOLatin1StringEncoding] 
stringByEscapingParenthesis]];
-    [fdfString appendFDFName:SKFDFAnnotationFieldValueKey];
-    [fdfString appendFormat:@"(%@)", [[[self stringValue] ?: @"" 
lossyStringUsingEncoding:NSISOLatin1StringEncoding] 
stringByEscapingParenthesis]];
-    return fdfString;
-}
-
-- (id)objectValue {

@@ Diff output truncated at 100000 characters. @@
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

Reply via email to