Revision: 16516
          http://sourceforge.net/p/skim-app/code/16516
Author:   hofman
Date:     2026-09-21 16:18:53 +0000 (Mon, 21 Sep 2026)
Log Message:
-----------
move SKNPDFAnnotationNote class header and implementation to PDFAnnotation 
category files

Modified Paths:
--------------
    trunk/SkimNotes/PDFAnnotation_SKNExtensions.h
    trunk/SkimNotes/PDFAnnotation_SKNExtensions.m
    trunk/SkimNotes/PDFDocument_SKNExtensions.m
    trunk/SkimNotes/SkimNotes.h
    trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj
    trunk/SkimNotes/skimpdf.m

Removed Paths:
-------------
    trunk/SkimNotes/SKNPDFAnnotationNote.h
    trunk/SkimNotes/SKNPDFAnnotationNote.m

Modified: trunk/SkimNotes/PDFAnnotation_SKNExtensions.h
===================================================================
--- trunk/SkimNotes/PDFAnnotation_SKNExtensions.h       2026-09-21 15:38:28 UTC 
(rev 16515)
+++ trunk/SkimNotes/PDFAnnotation_SKNExtensions.h       2026-09-21 16:18:53 UTC 
(rev 16516)
@@ -38,8 +38,8 @@
 
 /*!
     @header      
-    @abstract    An <code>PDFAnnotation</code> category to manage Skim notes.
-    @discussion  This header file provides API for an 
<code>PDFAnnotation</code> categories to convert Skim note dictionaries to 
<code>PDFAnnotations</code> and back.
+    @abstract    An <code>PDFAnnotation</code> category and an 
<code>PDFAnnotation</code> subclass to manage Skim notes.
+    @discussion  This header file provides API for <code>PDFAnnotation</code> 
categories and an <code>PDFAnnotation</code> subclass to convert Skim note 
dictionaries to <code>PDFAnnotations</code> and back.
 */
 #import <Foundation/Foundation.h>
 #import <PDFKit/PDFKit.h>
@@ -49,9 +49,15 @@
 #ifndef PDFRect
 #define PDFRect NSRect
 #endif
+#ifndef PDFSize
+#define PDFSize NSSize
+#endif
 #ifndef PDFKitPlatformBezierPath
 #define PDFKitPlatformBezierPath NSBezierPath
 #endif
+#ifndef PDFKitPlatformImage
+#define PDFKitPlatformImage NSImage
+#endif
 
 /*!
     @discussion  Global string for Free Text note type.
@@ -246,6 +252,24 @@
 */
 PDFKIT_EXTERN NSString * const SKNPDFAnnotationFieldNameKey;
 
+/*!
+    @discussion  Global string for annotation text key.
+*/
+PDFKIT_EXTERN NSString * const SKNPDFAnnotationTextKey;
+/*!
+    @discussion  Global string for annotation image key.
+*/
+PDFKIT_EXTERN NSString * const SKNPDFAnnotationImageKey;
+/*!
+    @discussion  Global string for annotation drawsImage key.
+*/
+PDFKIT_EXTERN NSString * const SKNPDFAnnotationDrawsImageKey;
+
+/*!
+    @discussion  Default size of an anchored note.
+*/
+PDFKIT_EXTERN const PDFSize SKNPDFAnnotationNoteSize;
+
 /**
  @enum        SKNWidgetType
  @abstract    Type of widget annotations.
@@ -471,4 +495,55 @@
 
 #endif
 
+#pragma mark -
+
+#ifndef PDFKIT_PLATFORM_IOS
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+/*!
+    @abstract    A concrete <code>PDFAnnotation</code> subclass representing a 
Skim anchored note.
+    @discussion  This is a <code>PDFAnnotationText</code> subclass containing 
a separate short string value, a longer rich text property, and an image 
property.
+*/
+@interface SKNPDFAnnotationNote : PDFAnnotationText
+#pragma clang diagnostic pop
+#else
+@interface SKNPDFAnnotationNote : PDFAnnotation
+#endif
+{
+    NSString *_string;
+    PDFKitPlatformImage *_image;
+    NSAttributedString *_text;
+    BOOL _drawsImage;
+#ifndef PDFKIT_PLATFORM_IOS
+    NSTextStorage *_textStorage;
+    NSArray *_texts;
+#endif
+}
+
+/*!
+    @abstract   The rich text of the annotation.
+    @discussion This is the longer rich text contents of the anchored note 
annotation.  Setting this updates the contents using 
<code>updateContents</code>.
+*/
+@property (nonatomic, copy, nullable) NSAttributedString *text;
+
+/*!
+    @abstract   The image of the annotation.
+    @discussion
+*/
+@property (nonatomic, strong, nullable) PDFKitPlatformImage *image;
+
+/*!
+    @abstract   Whether the annotation should draw the image rather than an 
icon.
+    @discussion
+*/
+@property (nonatomic) BOOL drawsImage;
+
+/*!
+    @abstract   Synchronizes the contents of the annotation with the string 
and text.
+    @discussion This sets the contents to the string value and the text 
appended, separated by a double space.
+*/
+- (void)updateContents;
+
+@end
+
 NS_ASSUME_NONNULL_END

Modified: trunk/SkimNotes/PDFAnnotation_SKNExtensions.m
===================================================================
--- trunk/SkimNotes/PDFAnnotation_SKNExtensions.m       2026-09-21 15:38:28 UTC 
(rev 16515)
+++ trunk/SkimNotes/PDFAnnotation_SKNExtensions.m       2026-09-21 16:18:53 UTC 
(rev 16516)
@@ -37,7 +37,6 @@
  */
 
 #import "PDFAnnotation_SKNExtensions.h"
-#import "SKNPDFAnnotationNote.h"
 #import <tgmath.h>
 
 #ifdef PDFKIT_PLATFORM_IOS
@@ -133,6 +132,12 @@
 NSString * const SKNPDFAnnotationWidgetTypeKey = @"widgetType";
 NSString * const SKNPDFAnnotationFieldNameKey = @"fieldName";
 
+NSString * const SKNPDFAnnotationTextKey = @"text";
+NSString * const SKNPDFAnnotationImageKey = @"image";
+NSString * const SKNPDFAnnotationDrawsImageKey = @"drawsImage";
+
+const PDFSize SKNPDFAnnotationNoteSize = {16.0, 16.0};
+
 #define SKNSquigglyString @"Squiggly"
 
 static PDFKitPlatformColor *SKNColorFromArray(NSArray *array) {
@@ -270,8 +275,12 @@
 #if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MAX_ALLOWED < 
MAC_OS_X_VERSION_10_12
 @interface PDFAnnotation (SKNSierraDeclarations)
 - (id)valueForAnnotationKey:(NSString *)key;
+- (BOOL)setValue:(id)value forAnnotationKey:(NSString *)key;
 - (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context;
 @end
+@interface PDFPage (SKNSierraDeclarations)
+- (void)transformContext:(CGContextRef)context forBox:(PDFDisplayBox)box;
+@end
 #endif
 
 #if !defined(MAC_OS_X_VERSION_10_13) || MAC_OS_X_VERSION_MAX_ALLOWED < 
MAC_OS_X_VERSION_10_13
@@ -283,8 +292,14 @@
 @end
 #endif
 
+#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED < 
MAC_OS_X_VERSION_10_15
+static inline void drawIcon(CGContextRef context, NSRect bounds, 
PDFTextAnnotationIconType iconType);
+#define SKNAppKitVersionNumber10_12 1504
+#define SKNAppKitVersionNumber10_14 1671
 #endif
 
+#endif
+
 @implementation PDFAnnotation (SKNExtensions)
 
 char SKNIsSkimNoteKey;
@@ -1665,4 +1680,403 @@
 
 @end
 
+#pragma mark -
+
+#ifndef PDFKIT_PLATFORM_IOS
+@interface SKNPDFAnnotationNote ()
+@property (nonatomic, readonly) NSTextStorage *mutableText;
+@property (nonatomic, strong, nullable) NSArray *texts;
+@end
 #endif
+
+@implementation SKNPDFAnnotationNote
+
+@synthesize text = _text;
+@synthesize image = _image;
+@synthesize drawsImage = _drawsImage;
+#ifndef PDFKIT_PLATFORM_IOS
+@dynamic mutableText;
+@synthesize texts = _texts;
+#endif
+
+- (void)updateContents {
+    NSMutableString *contents = [NSMutableString string];
+    if ([_string length])
+        [contents appendString:_string];
+    if ([_text length]) {
+        [contents appendString:@"  "];
+        [contents appendString:[_text string]];
+    }
+    [super setContents:contents];
+}
+
+- (id)initSkimNoteWithProperties:(NSDictionary *)dict{
+    self = [super initSkimNoteWithProperties:dict];
+    if (self) {
+        Class attrStringClass = [NSAttributedString class];
+        Class stringClass = [NSString class];
+        Class imageClass = [PDFKitPlatformImage class];
+        Class dataClass = [NSData class];
+        NSString *aName = [dict objectForKey:SKNPDFAnnotationNameKey];
+        NSAttributedString *aText = [dict 
objectForKey:SKNPDFAnnotationTextKey];
+        PDFKitPlatformImage *anImage = [dict 
objectForKey:SKNPDFAnnotationImageKey];
+        NSNumber *drawImage = [dict 
objectForKey:SKNPDFAnnotationDrawsImageKey];
+        if ([aName isKindOfClass:stringClass] && [self 
respondsToSelector:@selector(setValue:forAnnotationKey:)])
+            [self setValue:aName forAnnotationKey:@"/Name"];
+        if ([drawImage respondsToSelector:@selector(boolValue)])
+            [self setDrawsImage:[drawImage boolValue]];
+        else
+            [self setDrawsImage:[[dict objectForKey:SKNPDFAnnotationTypeKey] 
isEqualToString:SKNStampString]];
+        if ([anImage isKindOfClass:imageClass])
+            _image = anImage;
+        else if ([anImage isKindOfClass:dataClass])
+            _image = [[PDFKitPlatformImage alloc] initWithData:(NSData 
*)anImage];
+        if ([aText isKindOfClass:stringClass])
+            aText = [[NSAttributedString alloc] initWithString:(NSString 
*)aText];
+        else if ([aText isKindOfClass:dataClass])
+            aText = [[NSAttributedString alloc] initWithData:(NSData *)aText 
options:[NSDictionary dictionary] documentAttributes:NULL error:NULL];
+        if ([aText isKindOfClass:attrStringClass])
+            [self setText:aText];
+        [self updateContents];
+    }
+    return self;
+}
+
+- (NSDictionary *)SkimNoteProperties{
+    NSMutableDictionary *dict = [self genericSkimNoteProperties];
+    [dict setValue:[NSNumber numberWithInteger:[self iconType]] 
forKey:SKNPDFAnnotationIconTypeKey];
+    if ([self drawsImage]) {
+        [dict setValue:[NSNumber numberWithBool:YES] 
forKey:SKNPDFAnnotationDrawsImageKey];
+        if ([self respondsToSelector:@selector(valueForAnnotationKey:)]) {
+            NSString *name = [self valueForAnnotationKey:@"/Name"];
+            if (name && [[NSSet setWithObjects:@"/Comment", @"/Key", @"/Note", 
@"/Help", @"/NewParagraph", @"/Paragraph", @"/Insert", nil] 
containsObject:name] == NO)
+                [dict setValue:name forKey:SKNPDFAnnotationNameKey];
+        }
+    }
+    [dict setValue:[self text] forKey:SKNPDFAnnotationTextKey];
+    [dict setValue:[self image] forKey:SKNPDFAnnotationImageKey];
+    return dict;
+}
+
+- (NSString *)type {
+    return SKNNoteString;
+}
+
+- (void)setDrawsImage:(BOOL)drawsImage {
+    _drawsImage = drawsImage;
+    if ([self respondsToSelector:@selector(setValue:forAnnotationKey:)])
+        [self setValue:drawsImage ? @"/Stamp" : @"/Text" 
forAnnotationKey:@"/Subtype"];
+}
+
+- (NSString *)string {
+    return _string;
+}
+
+- (void)setString:(NSString *)string {
+    if (_string != string) {
+        _string = [string copy];
+        // update the contents to string + text
+        [self updateContents];
+    }
+}
+
+#ifdef PDFKIT_PLATFORM_IOS
+
+- (void)setText:(NSAttributedString *)text {
+    if (_text != text) {
+        _text = [text copy];
+        // update the contents to string + text
+        [self updateContents];
+    }
+}
+
+- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
+    if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image] 
!= nil) {
+        NSRect bounds = [self bounds];
+        CGContextSaveGState(context);
+        [[self page] transformContext:context forBox:box];
+        UIGraphicsPushContext(context);
+        CGContextTranslateCTM(context, CGRectGetMinX(bounds), 
CGRectGetMaxY(bounds));
+        CGContextScaleCTM(context, 1.0, -1.0);
+        bounds.origin = CGPointZero;
+        [[self image] drawInRect:bounds];
+        UIGraphicsPopContext(context);
+        CGContextRestoreGState(context);
+    } else {
+        [super drawWithBox:box inContext:context];
+    }
+}
+
+#else
+
+- (void)setText:(NSAttributedString *)text {
+    if ([self mutableText] != text) {
+        // edit the textStorage, this will trigger KVO and update the text 
automatically
+        if (text)
+            [_textStorage replaceCharactersInRange:NSMakeRange(0, 
[_textStorage length]) withAttributedString:text];
+        else
+            [_textStorage deleteCharactersInRange:NSMakeRange(0, [_textStorage 
length])];
+    }
+}
+
+// changes to text are made through textStorage, this allows Skim to provide 
edits through AppleScript, which works directly on the textStorage
+// KVO is triggered manually when the textStorage is edited, either through 
setText: or through some other means, e.g. through AppleScript
++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
+    if ([key isEqualToString:SKNPDFAnnotationTextKey])
+        return NO;
+    else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+        return [super automaticallyNotifiesObserversForKey:key];
+#pragma clang diagnostic pop
+}
+
+- (void)textDidChange:(NSNotification *)notification {
+    // texts should be an array of objects wrapping the text of the note, used 
by Skim to provide a data source for the children in the outlineView
+    [_texts makeObjectsPerformSelector:@selector(willChangeValueForKey:) 
withObject:SKNPDFAnnotationTextKey];
+    // trigger KVO manually
+    [self willChangeValueForKey:SKNPDFAnnotationTextKey];
+    // update the text
+    _text = [[NSAttributedString alloc] initWithAttributedString:_textStorage];
+    [self didChangeValueForKey:SKNPDFAnnotationTextKey];
+    [_texts makeObjectsPerformSelector:@selector(didChangeValueForKey:) 
withObject:SKNPDFAnnotationTextKey];
+    // update the contents to string + text
+    [self updateContents];
+}
+
+- (NSTextStorage *)mutableText {
+    if (_textStorage == nil) {
+        _textStorage = [[NSTextStorage alloc] init];
+        [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(textDidChange:) 
name:NSTextStorageDidProcessEditingNotification object:_textStorage];
+    }
+    return _textStorage;
+}
+
+- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
+    if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image] 
!= nil) {
+        CGContextSaveGState(context);
+        [[self page] transformContext:context forBox:box];
+        [NSGraphicsContext saveGraphicsState];
+        [NSGraphicsContext setCurrentContext:[NSGraphicsContext 
graphicsContextWithCGContext:context flipped:NO]];
+        [[self image] drawInRect:[self bounds]];
+        [NSGraphicsContext restoreGraphicsState];
+        CGContextRestoreGState(context);
+#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED < 
MAC_OS_X_VERSION_10_15
+    } else if ([self hasAppearanceStream] == NO && 
floor(NSAppKitVersionNumber) <= SKNAppKitVersionNumber10_14 && 
floor(NSAppKitVersionNumber) >= SKNAppKitVersionNumber10_12) {
+        // on 10.12 through 10.14 draws based on the type rather than the 
/Subtype
+        // as PDFKit does not know type Note we need to draw ourselves
+        // type Text does just draws a dumb filled square anyway
+        NSRect bounds = [self bounds];
+        CGContextSaveGState(context);
+        [[self page] transformContext:context forBox:box];
+        if (NSWidth(bounds) > 2.0 && NSHeight(bounds) > 2.0) {
+            CGContextSetFillColorWithColor(context, [[self color] CGColor]);
+            CGContextSetStrokeColorWithColor(context, 
CGColorGetConstantColor(kCGColorBlack));
+            drawIcon(context, bounds, [self iconType]);
+        } else {
+            CGContextSetFillColorWithColor(context, 
CGColorGetConstantColor(kCGColorBlack));
+            CGContextFillRect(context, NSRectToCGRect(bounds));
+        }
+        CGContextRestoreGState(context);
+#endif
+    } else {
+        [super drawWithBox:box inContext:context];
+    }
+}
+
+#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MIN_REQUIRED < 
MAC_OS_X_VERSION_10_12
+
+- (void)drawWithBox:(PDFDisplayBox)box {
+    if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image] 
!= nil) {
+        [NSGraphicsContext saveGraphicsState];
+        [[self page] transformContextForBox:box];
+        [[self image] drawInRect:[self bounds]];
+        [NSGraphicsContext restoreGraphicsState];
+    } else {
+        [super drawWithBox:box];
+    }
+}
+
+#endif
+
+#endif
+
+@end
+
+#if !defined(PDFKIT_PLATFORM_IOS) && (!defined(MAC_OS_X_VERSION_10_15) || 
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_15)
+
+#define KAPPA   0.552284749830793398402251632279597438
+#define KAPPA2  0.265216489839544009215463496859568305
+
+static inline void drawIconComment(CGContextRef context, NSRect bounds) {
+    bounds = NSInsetRect(bounds, 0.5, 0.5);
+    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
+    CGContextMoveToPoint(context, x + 0.3 * w, y + 0.3 * h - 0.5);
+    CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.3 * h - 0.5);
+    CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.3 * h 
- 0.5, x, y + (0.4 - 0.1 * KAPPA) * h - 0.5, x, y + 0.4 * h - 0.5);
+    CGContextAddLineToPoint(context, x, y + 0.9 * h);
+    CGContextAddCurveToPoint(context, x, y + (0.9 + 0.1 * KAPPA) * h, x + (0.1 
- 0.1 * KAPPA) * w, y + h, x + 0.1 * w, y + h);
+    CGContextAddLineToPoint(context, x + 0.9 * w, y + h);
+    CGContextAddCurveToPoint(context, x + (0.9 + 0.1 * KAPPA) * w, y + h, x + 
w, y + (0.9 + 0.1 * KAPPA) * h, x + w, y + 0.9 * h);
+    CGContextAddLineToPoint(context, x + w, y + 0.4 * h - 0.5);
+    CGContextAddCurveToPoint(context, x + w, y + (0.4 - 0.1 * KAPPA) * h - 
0.5, x + (0.9 + 0.1 * KAPPA) * w, y + 0.3 * h - 0.5, x + 0.9 * w, y + 0.3 * h - 
0.5);
+    CGContextAddLineToPoint(context, x + 0.5 * w, y + 0.3 * h - 0.5);
+    CGContextAddLineToPoint(context, x + 0.25 * w, y);
+    CGContextClosePath(context);
+    CGContextDrawPath(context, kCGPathFillStroke);
+    x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
+    CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
+        {x + 0.9 * w, y + 0.85 * h},
+        {x + 0.1 * w, y + 0.65 * h},
+        {x + 0.9 * w, y + 0.65 * h},
+        {x + 0.1 * w, y + 0.45 * h},
+        {x + 0.7 * w, y + 0.45 * h}};
+    CGContextSetLineWidth(context, 0.1 * h);
+    CGContextStrokeLineSegments(context, points3, 6);
+}
+
+static inline void drawIconKey(CGContextRef context, NSRect bounds) {
+    bounds = NSInsetRect(bounds, 0.5, 0.5);
+    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
+    CGPoint points[9] = {{x + 0.55 * w, y + 0.65 * h},
+        {x + w, y + 0.15 * h},
+        {x + w, y},
+        {x + 0.7 * w, y},
+        {x + 0.7 * w, y + 0.15 * h},
+        {x + 0.55 * w, y + 0.15 * h},
+        {x + 0.55 * w, y + 0.3 * h},
+        {x + 0.4 * w, y + 0.3 * h},
+        {x + 0.4 * w, y + 0.45 * h}};
+    CGContextAddLines(context, points, 9);
+    CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.45 * h);
+    CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.45 * 
h, x, y + (0.55 - 0.1 * KAPPA) * h, x, y + 0.55 * h);
+    CGContextAddLineToPoint(context, x, y + 0.8 * h);
+    CGContextAddCurveToPoint(context, x, y + (0.8 + 0.2 * KAPPA) * h, x + (0.2 
- 0.2 * KAPPA) * w, y + h, x + 0.2 * w, y + h);
+    CGContextAddLineToPoint(context, x + 0.45 * w, y + h);
+    CGContextAddCurveToPoint(context, x + (0.45 + 0.1 * KAPPA) * w, y + h, x + 
0.55 * w, y + (0.9 + 0.1 * KAPPA) * h, x + 0.55 * w, y + 0.9 * h);
+    CGContextClosePath(context);
+    CGContextAddEllipseInRect(context, CGRectMake(x + 0.1 * w, y + h - 0.3 * 
h, 0.2 * w, 0.2 * h));
+    CGContextDrawPath(context, kCGPathEOFillStroke);
+}
+
+static inline void drawIconNote(CGContextRef context, NSRect bounds) {
+    bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
+    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
+    CGPoint points1[5] = {{x, y},
+        {x, y + h},
+        {x + w, y + h},
+        {x + w, y + 0.25 * h},
+        {x + 0.75 * w, y}};
+    CGPoint points2[3] = {{x + 0.75 * w, y},
+        {x + 0.75 * w, y + 0.25 * h},
+        {x + w, y + 0.25 * h}};
+    CGContextAddLines(context, points1, 5);
+    CGContextClosePath(context);
+    CGContextAddLines(context, points2, 3);
+    CGContextDrawPath(context, kCGPathFillStroke);
+    x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
+    CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
+        {x + 0.9 * w, y + 0.85 * h},
+        {x + 0.1 * w, y + 0.65 * h},
+        {x + 0.9 * w, y + 0.65 * h},
+        {x + 0.1 * w, y + 0.45 * h},
+        {x + 0.7 * w, y + 0.45 * h}};
+    CGContextSetLineWidth(context, 0.1 * h);
+    CGContextStrokeLineSegments(context, points3, 6);
+}
+
+static inline void drawIconHelp(CGContextRef context, NSRect bounds) {
+    bounds = NSInsetRect(bounds, 0.5, 0.5);
+    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
+    CGContextMoveToPoint(context, x + 0.275 * w, y + 0.65 * h);
+    CGContextAddCurveToPoint(context, x + 0.275 * w, y + (0.65 + 0.225 * 
KAPPA) * h, x + (0.5 - 0.225 * KAPPA) * w, y + 0.875 * h, x + 0.5 * w, y + 
0.875 * h);
+    CGContextAddCurveToPoint(context, x + (0.5 + 0.225 * KAPPA) * w, y + 0.875 
* h, x + 0.725 * w, y + (0.65 + 0.225 * KAPPA) * h, x + 0.725 * w, y + 0.65 * 
h);
+    CGContextAddCurveToPoint(context, x + 0.725 * w, y + (0.65 - 0.225 * 
KAPPA2) * h, x + (0.5 + 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * w, y 
+ (0.65 - 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * h, x + (0.5 + 0.225 
* M_SQRT1_2) * w, y + (0.65 - 0.225 * M_SQRT1_2) * h);
+    CGContextAddLineToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2) * w, y + 
(0.825 - 0.575 * M_SQRT1_2) * h);
+    CGContextAddCurveToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2 - 0.125 * 
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.575 * M_SQRT1_2 - 0.125 * M_SQRT1_2 * 
KAPPA2) * h, x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2 + 0.125 * KAPPA2) * h, 
x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2) * h);
+    CGContextAddLineToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 * 
M_SQRT1_2) * h);
+    CGContextAddCurveToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 * 
M_SQRT1_2 + 0.225 * KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2 - 0.225 * 
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.475 * M_SQRT1_2 - 0.225 * M_SQRT1_2 * 
KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2) * w, y + (0.825 - 0.475 * 
M_SQRT1_2) * h);
+    CGContextAddLineToPoint(context, x + (0.5 + 0.125 * M_SQRT1_2) * w, y + 
(0.65 - 0.125 * M_SQRT1_2) * h);
+    CGContextAddCurveToPoint(context,x + (0.5 + 0.125 * M_SQRT1_2 + 0.125 * 
M_SQRT1_2 * KAPPA2) * w, y + (0.65 - 0.125 * M_SQRT1_2 + 0.125 * M_SQRT1_2 * 
KAPPA2) * h, x + 0.625 * w, y + (0.65 - 0.125 * KAPPA2) * h, x + 0.625 * w, y + 
0.65 * h);
+    CGContextAddCurveToPoint(context, x + 0.625 * w, y + (0.65 + 0.125 * 
KAPPA) * h, x + (0.5 + 0.125 * KAPPA) * w, y + 0.775 * h, x + 0.5 * w, y + 
0.775 * h);
+    CGContextAddCurveToPoint(context, x + (0.5 - 0.125 * KAPPA) * w, y + 0.775 
* h, x + 0.375 * w, y + (0.65 + 0.125 * KAPPA) * h, x + 0.375 * w, y + 0.65 * 
h);
+    CGContextClosePath(context);
+    CGContextAddEllipseInRect(context, CGRectMake(x + 0.425 * w, y + 0.1 * h, 
0.15 * w, 0.15 * h));
+    CGContextAddEllipseInRect(context, NSRectToCGRect(bounds));
+    CGContextClosePath(context);
+    CGContextDrawPath(context, kCGPathEOFillStroke);
+}
+
+static inline void drawIconNewParagraph(CGContextRef context, NSRect bounds) {
+    bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
+    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
+    CGPoint points1[3] = {{x + 0.1 * w, y + 0.5 * h},
+        {x + 0.5 * w, y + h},
+        {x + 0.9 * w, y + 0.5 * h}};
+    CGContextAddLines(context, points1, 3);
+    CGContextClosePath(context);
+    CGContextDrawPath(context, kCGPathFillStroke);
+    CGContextSetLineCap(context, kCGLineCapRound);
+    CGPoint points2[4] = {{x + 0.1 * w, y},
+        {x + 0.1 * w, y + 0.4 * h},
+        {x + 0.4 * w, y},
+        {x + 0.4 * w, y + 0.4 * h}};
+    CGContextAddLines(context, points2, 4);
+    CGContextMoveToPoint(context, x + 0.6 * w, y);
+    CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.4 * h);
+    CGContextAddLineToPoint(context, x + 0.8 * w, y + 0.4 * h);
+    CGContextAddCurveToPoint(context, x + (0.8 + 0.1 * KAPPA) * w, y + 0.4 * 
h, x + 0.9 * w, y + (0.3 + 0.1 * KAPPA) * h, x + 0.9 * w, y + 0.3 * h);
+    CGContextAddCurveToPoint(context, x + 0.9 * w, y + (0.3 - 0.1 * KAPPA) * 
h, x + (0.8 + 0.1 * KAPPA) * w, y + 0.2 * h, x + 0.8 * w, y + 0.2 * h);
+    CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.2 * h);
+    CGContextStrokePath(context);
+}
+
+static inline void drawIconParagraph(CGContextRef context, NSRect bounds) {
+    bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
+    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
+    CGPoint points[8] = {{x + 0.9 * w, y + h},
+        {x + 0.9 * w, y},
+        {x + 0.76 * w, y},
+        {x + 0.76 * w, y + 0.8 * h},
+        {x + 0.63 * w, y + 0.8 * h},
+        {x + 0.63 * w, y},
+        {x + 0.5 * w, y},
+        {x + 0.5 * w, y + 0.5 * h}};
+    CGContextAddLines(context, points, 8);
+    CGContextAddLineToPoint(context, x + 0.35 * w, y + 0.5 * h);
+    CGContextAddCurveToPoint(context, x + (0.35 - 0.25 * KAPPA) * w, y + 0.5 * 
h, x + 0.1 * w, y + (0.75 - 0.25 * KAPPA) * h, x + 0.1 * w, y + 0.75 * h);
+    CGContextAddCurveToPoint(context, x + 0.1 * w, y + (0.75 + 0.25 * KAPPA) * 
h, x + (0.35 - 0.25 * KAPPA) * w, y + h, x + 0.35 * w, y + h);
+    CGContextClosePath(context);
+    CGContextDrawPath(context, kCGPathFillStroke);
+}
+
+static inline void drawIconInsert(CGContextRef context, NSRect bounds) {
+    bounds = NSInsetRect(bounds, 0.5, 0.5);
+    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
+    CGContextMoveToPoint(context, x, y);
+    CGContextAddLineToPoint(context, x + 0.5 * w, y + h);
+    CGContextAddLineToPoint(context, x + w, y);
+    CGContextClosePath(context);
+    CGContextDrawPath(context, kCGPathFillStroke);
+}
+
+static inline void drawIcon(CGContextRef context, NSRect bounds, 
PDFTextAnnotationIconType iconType) {
+    CGContextSetLineWidth(context, 1.0);
+    CGContextSetLineCap(context, kCGLineCapButt);
+    CGContextSetLineJoin(context, kCGLineJoinRound);
+    CGContextClipToRect(context, NSRectToCGRect(bounds));
+    switch (iconType) {
+        case kPDFTextAnnotationIconComment:      drawIconComment(context, 
bounds);      break;
+        case kPDFTextAnnotationIconKey:          drawIconKey(context, bounds); 
         break;
+        case kPDFTextAnnotationIconNote:         drawIconNote(context, 
bounds);         break;
+        case kPDFTextAnnotationIconHelp:         drawIconHelp(context, 
bounds);         break;
+        case kPDFTextAnnotationIconNewParagraph: drawIconNewParagraph(context, 
bounds); break;
+        case kPDFTextAnnotationIconParagraph:    drawIconParagraph(context, 
bounds);    break;
+        case kPDFTextAnnotationIconInsert:       drawIconInsert(context, 
bounds);       break;
+        default:                                 drawIconNote(context, 
bounds);         break;
+    }
+}
+
+#endif
+
+#endif

Modified: trunk/SkimNotes/PDFDocument_SKNExtensions.m
===================================================================
--- trunk/SkimNotes/PDFDocument_SKNExtensions.m 2026-09-21 15:38:28 UTC (rev 
16515)
+++ trunk/SkimNotes/PDFDocument_SKNExtensions.m 2026-09-21 16:18:53 UTC (rev 
16516)
@@ -38,7 +38,6 @@
 
 #import "PDFDocument_SKNExtensions.h"
 #import "PDFAnnotation_SKNExtensions.h"
-#import "SKNPDFAnnotationNote.h"
 #import "NSFileManager_SKNExtensions.h"
 #import "SKNDefines.h"
 

Deleted: trunk/SkimNotes/SKNPDFAnnotationNote.h
===================================================================
--- trunk/SkimNotes/SKNPDFAnnotationNote.h      2026-09-21 15:38:28 UTC (rev 
16515)
+++ trunk/SkimNotes/SKNPDFAnnotationNote.h      2026-09-21 16:18:53 UTC (rev 
16516)
@@ -1,123 +0,0 @@
-//
-//  SKNPDFAnnotationNote.h
-//  SkimNotes
-//
-//  Created by Christiaan Hofman on 6/15/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.
- */
-
-/*!
-    @header      
-    @abstract    A concrete <code>PDFAnnotation</code> subclass representing a 
Skim anchored note.
-    @discussion  This header file declares API for a concrete 
<code>PDFAnnotation</code> class representing a Skim anchored note.
-*/
-#import <Foundation/Foundation.h>
-#import <PDFKit/PDFKit.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-#ifndef PDFKitPlatformImage
-#define PDFKitPlatformImage NSImage
-#endif
-#ifndef PDFSize
-#define PDFSize NSSize
-#endif
-
-/*!
-    @discussion  Global string for annotation text key.
-*/
-PDFKIT_EXTERN NSString * const SKNPDFAnnotationTextKey;
-/*!
-    @discussion  Global string for annotation image key.
-*/
-PDFKIT_EXTERN NSString * const SKNPDFAnnotationImageKey;
-/*!
-    @discussion  Global string for annotation drawsImage key.
-*/
-PDFKIT_EXTERN NSString * const SKNPDFAnnotationDrawsImageKey;
-
-/*!
-    @discussion  Default size of an anchored note.
-*/
-PDFKIT_EXTERN const PDFSize SKNPDFAnnotationNoteSize;
-
-#ifndef PDFKIT_PLATFORM_IOS
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-/*!
-    @abstract    A concrete <code>PDFAnnotation</code> subclass, a subclass of 
<code>PDFAnnotationText</code>, representing a Skim anchored note.
-    @discussion  This is a <code>PDFAnnotationText</code> subclass containing 
a separate short string value, a longer rich text property, and an image 
property.
-*/
-@interface SKNPDFAnnotationNote : PDFAnnotationText
-#pragma clang diagnostic pop
-#else
-@interface SKNPDFAnnotationNote : PDFAnnotation
-#endif
-{
-    NSString *_string;
-    PDFKitPlatformImage *_image;
-    NSAttributedString *_text;
-    BOOL _drawsImage;
-#ifndef PDFKIT_PLATFORM_IOS
-    NSTextStorage *_textStorage;
-    NSArray *_texts;
-#endif
-}
-
-/*!
-    @abstract   The rich text of the annotation.
-    @discussion This is the longer rich text contents of the anchored note 
annotation.  Setting this updates the contents using 
<code>updateContents</code>.
-*/
-@property (nonatomic, copy, nullable) NSAttributedString *text;
-
-/*!
-    @abstract   The image of the annotation.
-    @discussion 
-*/
-@property (nonatomic, strong, nullable) PDFKitPlatformImage *image;
-
-/*!
-    @abstract   Whether the annotation should draw the image rather than an 
icon.
-    @discussion
-*/
-@property (nonatomic) BOOL drawsImage;
-
-/*!
-    @abstract   Synchronizes the contents of the annotation with the string 
and text.
-    @discussion This sets the contents to the string value and the text 
appended, separated by a double space.
-*/
-- (void)updateContents;
-
-@end
-
-NS_ASSUME_NONNULL_END

Deleted: trunk/SkimNotes/SKNPDFAnnotationNote.m
===================================================================
--- trunk/SkimNotes/SKNPDFAnnotationNote.m      2026-09-21 15:38:28 UTC (rev 
16515)
+++ trunk/SkimNotes/SKNPDFAnnotationNote.m      2026-09-21 16:18:53 UTC (rev 
16516)
@@ -1,469 +0,0 @@
-//
-//  SKNPDFAnnotationNote.m
-//  SkimNotes
-//
-//  Created by Christiaan Hofman on 6/15/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 "SKNPDFAnnotationNote.h"
-#import "PDFAnnotation_SKNExtensions.h"
-
-NSString * const SKNPDFAnnotationTextKey = @"text";
-NSString * const SKNPDFAnnotationImageKey = @"image";
-NSString * const SKNPDFAnnotationDrawsImageKey = @"drawsImage";
-
-const PDFSize SKNPDFAnnotationNoteSize = {16.0, 16.0};
-
-#ifndef PDFKIT_PLATFORM_IOS
-
-#import <CoreGraphics/CoreGraphics.h>
-
-#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED < 
MAC_OS_X_VERSION_10_15
-static inline void drawIcon(CGContextRef context, NSRect bounds, 
PDFTextAnnotationIconType iconType);
-
-#define SKNAppKitVersionNumber10_12 1504
-#define SKNAppKitVersionNumber10_14 1671
-
-#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MAX_ALLOWED < 
MAC_OS_X_VERSION_10_12
-@interface PDFAnnotation (SKNSierraDeclarations)
-- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context;
-- (id)valueForAnnotationKey:(NSString *)key;
-- (BOOL)setValue:(id)value forAnnotationKey:(NSString *)key;
-@end
-@interface PDFPage (SKNSierraDeclarations)
-- (void)transformContext:(CGContextRef)context forBox:(PDFDisplayBox)box;
-@end
-#endif
-#endif
-
-@interface SKNPDFAnnotationNote ()
-@property (nonatomic, readonly) NSTextStorage *mutableText;
-@property (nonatomic, strong, nullable) NSArray *texts;
-@end
-
-#endif
-
-@interface PDFAnnotation (SKNPrivateDeclarations)
-- (NSMutableDictionary *)genericSkimNoteProperties;
-@end
-
-@implementation SKNPDFAnnotationNote
-
-@synthesize text = _text;
-@synthesize image = _image;
-@synthesize drawsImage = _drawsImage;
-#ifndef PDFKIT_PLATFORM_IOS
-@dynamic mutableText;
-@synthesize texts = _texts;
-#endif
-
-- (void)updateContents {
-    NSMutableString *contents = [NSMutableString string];
-    if ([_string length])
-        [contents appendString:_string];
-    if ([_text length]) {
-        [contents appendString:@"  "];
-        [contents appendString:[_text string]];
-    }
-    [super setContents:contents];
-}
-
-- (id)initSkimNoteWithProperties:(NSDictionary *)dict{
-    self = [super initSkimNoteWithProperties:dict];
-    if (self) {
-        Class attrStringClass = [NSAttributedString class];
-        Class stringClass = [NSString class];
-        Class imageClass = [PDFKitPlatformImage class];
-        Class dataClass = [NSData class];
-        NSString *aName = [dict objectForKey:SKNPDFAnnotationNameKey];
-        NSAttributedString *aText = [dict 
objectForKey:SKNPDFAnnotationTextKey];
-        PDFKitPlatformImage *anImage = [dict 
objectForKey:SKNPDFAnnotationImageKey];
-        NSNumber *drawImage = [dict 
objectForKey:SKNPDFAnnotationDrawsImageKey];
-        if ([aName isKindOfClass:stringClass] && [self 
respondsToSelector:@selector(setValue:forAnnotationKey:)])
-            [self setValue:aName forAnnotationKey:@"/Name"];
-        if ([drawImage respondsToSelector:@selector(boolValue)])
-            [self setDrawsImage:[drawImage boolValue]];
-        else
-            [self setDrawsImage:[[dict objectForKey:SKNPDFAnnotationTypeKey] 
isEqualToString:SKNStampString]];
-        if ([anImage isKindOfClass:imageClass])
-            _image = anImage;
-        else if ([anImage isKindOfClass:dataClass])
-            _image = [[PDFKitPlatformImage alloc] initWithData:(NSData 
*)anImage];
-        if ([aText isKindOfClass:stringClass])
-            aText = [[NSAttributedString alloc] initWithString:(NSString 
*)aText];
-        else if ([aText isKindOfClass:dataClass])
-            aText = [[NSAttributedString alloc] initWithData:(NSData *)aText 
options:[NSDictionary dictionary] documentAttributes:NULL error:NULL];
-        if ([aText isKindOfClass:attrStringClass])
-            [self setText:aText];
-        [self updateContents];
-    }
-    return self;
-}
-
-- (NSDictionary *)SkimNoteProperties{
-    NSMutableDictionary *dict = [self genericSkimNoteProperties];
-    [dict setValue:[NSNumber numberWithInteger:[self iconType]] 
forKey:SKNPDFAnnotationIconTypeKey];
-    if ([self drawsImage]) {
-        [dict setValue:[NSNumber numberWithBool:YES] 
forKey:SKNPDFAnnotationDrawsImageKey];
-        if ([self respondsToSelector:@selector(valueForAnnotationKey:)]) {
-            NSString *name = [self valueForAnnotationKey:@"/Name"];
-            if (name && [[NSSet setWithObjects:@"/Comment", @"/Key", @"/Note", 
@"/Help", @"/NewParagraph", @"/Paragraph", @"/Insert", nil] 
containsObject:name] == NO)
-                [dict setValue:name forKey:SKNPDFAnnotationNameKey];
-        }
-    }
-    [dict setValue:[self text] forKey:SKNPDFAnnotationTextKey];
-    [dict setValue:[self image] forKey:SKNPDFAnnotationImageKey];
-    return dict;
-}
-
-- (NSString *)type {
-    return SKNNoteString;
-}
-
-- (void)setDrawsImage:(BOOL)drawsImage {
-    _drawsImage = drawsImage;
-    if ([self respondsToSelector:@selector(setValue:forAnnotationKey:)])
-        [self setValue:drawsImage ? @"/Stamp" : @"/Text" 
forAnnotationKey:@"/Subtype"];
-}
-
-- (NSString *)string {
-    return _string;
-}
-
-- (void)setString:(NSString *)string {
-    if (_string != string) {
-        _string = [string copy];
-        // update the contents to string + text
-        [self updateContents];
-    }
-}
-
-#ifdef PDFKIT_PLATFORM_IOS
-
-- (void)setText:(NSAttributedString *)text {
-    if (_text != text) {
-        _text = [text copy];
-        // update the contents to string + text
-        [self updateContents];
-    }
-}
-
-- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
-    if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image] 
!= nil) {
-        NSRect bounds = [self bounds];
-        CGContextSaveGState(context);
-        [[self page] transformContext:context forBox:box];
-        UIGraphicsPushContext(context);
-        CGContextTranslateCTM(context, CGRectGetMinX(bounds), 
CGRectGetMaxY(bounds));
-        CGContextScaleCTM(context, 1.0, -1.0);
-        bounds.origin = CGPointZero;
-        [[self image] drawInRect:bounds];
-        UIGraphicsPopContext(context);
-        CGContextRestoreGState(context);
-    } else {
-        [super drawWithBox:box inContext:context];
-    }
-}
-
-#else
-
-- (void)setText:(NSAttributedString *)text {
-    if ([self mutableText] != text) {
-        // edit the textStorage, this will trigger KVO and update the text 
automatically
-        if (text)
-            [_textStorage replaceCharactersInRange:NSMakeRange(0, 
[_textStorage length]) withAttributedString:text];
-        else
-            [_textStorage deleteCharactersInRange:NSMakeRange(0, [_textStorage 
length])];
-    }
-}
-
-// changes to text are made through textStorage, this allows Skim to provide 
edits through AppleScript, which works directly on the textStorage
-// KVO is triggered manually when the textStorage is edited, either through 
setText: or through some other means, e.g. through AppleScript
-+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
-    if ([key isEqualToString:SKNPDFAnnotationTextKey])
-        return NO;
-    else
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-        return [super automaticallyNotifiesObserversForKey:key];
-#pragma clang diagnostic pop
-}
-
-- (void)textDidChange:(NSNotification *)notification {
-    // texts should be an array of objects wrapping the text of the note, used 
by Skim to provide a data source for the children in the outlineView
-    [_texts makeObjectsPerformSelector:@selector(willChangeValueForKey:) 
withObject:SKNPDFAnnotationTextKey];
-    // trigger KVO manually
-    [self willChangeValueForKey:SKNPDFAnnotationTextKey];
-    // update the text
-    _text = [[NSAttributedString alloc] initWithAttributedString:_textStorage];
-    [self didChangeValueForKey:SKNPDFAnnotationTextKey];
-    [_texts makeObjectsPerformSelector:@selector(didChangeValueForKey:) 
withObject:SKNPDFAnnotationTextKey];
-    // update the contents to string + text
-    [self updateContents];
-}
-
-- (NSTextStorage *)mutableText {
-    if (_textStorage == nil) {
-        _textStorage = [[NSTextStorage alloc] init];
-        [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(textDidChange:) 
name:NSTextStorageDidProcessEditingNotification object:_textStorage];
-    }
-    return _textStorage;
-}
-
-- (void)drawWithBox:(PDFDisplayBox)box inContext:(CGContextRef)context {
-    if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image] 
!= nil) {
-        CGContextSaveGState(context);
-        [[self page] transformContext:context forBox:box];
-        [NSGraphicsContext saveGraphicsState];
-        [NSGraphicsContext setCurrentContext:[NSGraphicsContext 
graphicsContextWithCGContext:context flipped:NO]];
-        [[self image] drawInRect:[self bounds]];
-        [NSGraphicsContext restoreGraphicsState];
-        CGContextRestoreGState(context);
-#if !defined(MAC_OS_X_VERSION_10_15) || MAC_OS_X_VERSION_MIN_REQUIRED < 
MAC_OS_X_VERSION_10_15
-    } else if ([self hasAppearanceStream] == NO && 
floor(NSAppKitVersionNumber) <= SKNAppKitVersionNumber10_14 && 
floor(NSAppKitVersionNumber) >= SKNAppKitVersionNumber10_12) {
-        // on 10.12 through 10.14 draws based on the type rather than the 
/Subtype
-        // as PDFKit does not know type Note we need to draw ourselves
-        // type Text does just draws a dumb filled square anyway
-        NSRect bounds = [self bounds];
-        CGContextSaveGState(context);
-        [[self page] transformContext:context forBox:box];
-        if (NSWidth(bounds) > 2.0 && NSHeight(bounds) > 2.0) {
-            CGContextSetFillColorWithColor(context, [[self color] CGColor]);
-            CGContextSetStrokeColorWithColor(context, 
CGColorGetConstantColor(kCGColorBlack));
-            drawIcon(context, bounds, [self iconType]);
-        } else {
-            CGContextSetFillColorWithColor(context, 
CGColorGetConstantColor(kCGColorBlack));
-            CGContextFillRect(context, NSRectToCGRect(bounds));
-        }
-        CGContextRestoreGState(context);
-#endif
-    } else {
-        [super drawWithBox:box inContext:context];
-    }
-}
-
-#if !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MIN_REQUIRED < 
MAC_OS_X_VERSION_10_12
-
-- (void)drawWithBox:(PDFDisplayBox)box {
-    if ([self drawsImage] && [self hasAppearanceStream] == NO && [self image] 
!= nil) {
-        [NSGraphicsContext saveGraphicsState];
-        [[self page] transformContextForBox:box];
-        [[self image] drawInRect:[self bounds]];
-        [NSGraphicsContext restoreGraphicsState];
-    } else {
-        [super drawWithBox:box];
-    }
-}
-
-#endif
-
-#endif
-
-@end
-
-#if !defined(PDFKIT_PLATFORM_IOS) && (!defined(MAC_OS_X_VERSION_10_15) || 
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_15)
-
-#define KAPPA   0.552284749830793398402251632279597438
-#define KAPPA2  0.265216489839544009215463496859568305
-
-static inline void drawIconComment(CGContextRef context, NSRect bounds) {
-    bounds = NSInsetRect(bounds, 0.5, 0.5);
-    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
-    CGContextMoveToPoint(context, x + 0.3 * w, y + 0.3 * h - 0.5);
-    CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.3 * h - 0.5);
-    CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.3 * h 
- 0.5, x, y + (0.4 - 0.1 * KAPPA) * h - 0.5, x, y + 0.4 * h - 0.5);
-    CGContextAddLineToPoint(context, x, y + 0.9 * h);
-    CGContextAddCurveToPoint(context, x, y + (0.9 + 0.1 * KAPPA) * h, x + (0.1 
- 0.1 * KAPPA) * w, y + h, x + 0.1 * w, y + h);
-    CGContextAddLineToPoint(context, x + 0.9 * w, y + h);
-    CGContextAddCurveToPoint(context, x + (0.9 + 0.1 * KAPPA) * w, y + h, x + 
w, y + (0.9 + 0.1 * KAPPA) * h, x + w, y + 0.9 * h);
-    CGContextAddLineToPoint(context, x + w, y + 0.4 * h - 0.5);
-    CGContextAddCurveToPoint(context, x + w, y + (0.4 - 0.1 * KAPPA) * h - 
0.5, x + (0.9 + 0.1 * KAPPA) * w, y + 0.3 * h - 0.5, x + 0.9 * w, y + 0.3 * h - 
0.5);
-    CGContextAddLineToPoint(context, x + 0.5 * w, y + 0.3 * h - 0.5);
-    CGContextAddLineToPoint(context, x + 0.25 * w, y);
-    CGContextClosePath(context);
-    CGContextDrawPath(context, kCGPathFillStroke);
-    x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
-    CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
-        {x + 0.9 * w, y + 0.85 * h},
-        {x + 0.1 * w, y + 0.65 * h},
-        {x + 0.9 * w, y + 0.65 * h},
-        {x + 0.1 * w, y + 0.45 * h},
-        {x + 0.7 * w, y + 0.45 * h}};
-    CGContextSetLineWidth(context, 0.1 * h);
-    CGContextStrokeLineSegments(context, points3, 6);
-}
-
-static inline void drawIconKey(CGContextRef context, NSRect bounds) {
-    bounds = NSInsetRect(bounds, 0.5, 0.5);
-    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
-    CGPoint points[9] = {{x + 0.55 * w, y + 0.65 * h},
-        {x + w, y + 0.15 * h},
-        {x + w, y},
-        {x + 0.7 * w, y},
-        {x + 0.7 * w, y + 0.15 * h},
-        {x + 0.55 * w, y + 0.15 * h},
-        {x + 0.55 * w, y + 0.3 * h},
-        {x + 0.4 * w, y + 0.3 * h},
-        {x + 0.4 * w, y + 0.45 * h}};
-    CGContextAddLines(context, points, 9);
-    CGContextAddLineToPoint(context, x + 0.1 * w, y + 0.45 * h);
-    CGContextAddCurveToPoint(context, x + (0.1 - 0.1 * KAPPA) * w, y + 0.45 * 
h, x, y + (0.55 - 0.1 * KAPPA) * h, x, y + 0.55 * h);
-    CGContextAddLineToPoint(context, x, y + 0.8 * h);
-    CGContextAddCurveToPoint(context, x, y + (0.8 + 0.2 * KAPPA) * h, x + (0.2 
- 0.2 * KAPPA) * w, y + h, x + 0.2 * w, y + h);
-    CGContextAddLineToPoint(context, x + 0.45 * w, y + h);
-    CGContextAddCurveToPoint(context, x + (0.45 + 0.1 * KAPPA) * w, y + h, x + 
0.55 * w, y + (0.9 + 0.1 * KAPPA) * h, x + 0.55 * w, y + 0.9 * h);
-    CGContextClosePath(context);
-    CGContextAddEllipseInRect(context, CGRectMake(x + 0.1 * w, y + h - 0.3 * 
h, 0.2 * w, 0.2 * h));
-    CGContextDrawPath(context, kCGPathEOFillStroke);
-}
-
-static inline void drawIconNote(CGContextRef context, NSRect bounds) {
-    bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
-    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
-    CGPoint points1[5] = {{x, y},
-        {x, y + h},
-        {x + w, y + h},
-        {x + w, y + 0.25 * h},
-        {x + 0.75 * w, y}};
-    CGPoint points2[3] = {{x + 0.75 * w, y},
-        {x + 0.75 * w, y + 0.25 * h},
-        {x + w, y + 0.25 * h}};
-    CGContextAddLines(context, points1, 5);
-    CGContextClosePath(context);
-    CGContextAddLines(context, points2, 3);
-    CGContextDrawPath(context, kCGPathFillStroke);
-    x += 0.5; y += 0.5; w -= 1.0; h -= 1.0;
-    CGPoint points3[6] = {{x + 0.1 * w, y + 0.85 * h},
-        {x + 0.9 * w, y + 0.85 * h},
-        {x + 0.1 * w, y + 0.65 * h},
-        {x + 0.9 * w, y + 0.65 * h},
-        {x + 0.1 * w, y + 0.45 * h},
-        {x + 0.7 * w, y + 0.45 * h}};
-    CGContextSetLineWidth(context, 0.1 * h);
-    CGContextStrokeLineSegments(context, points3, 6);
-}
-
-static inline void drawIconHelp(CGContextRef context, NSRect bounds) {
-    bounds = NSInsetRect(bounds, 0.5, 0.5);
-    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
-    CGContextMoveToPoint(context, x + 0.275 * w, y + 0.65 * h);
-    CGContextAddCurveToPoint(context, x + 0.275 * w, y + (0.65 + 0.225 * 
KAPPA) * h, x + (0.5 - 0.225 * KAPPA) * w, y + 0.875 * h, x + 0.5 * w, y + 
0.875 * h);
-    CGContextAddCurveToPoint(context, x + (0.5 + 0.225 * KAPPA) * w, y + 0.875 
* h, x + 0.725 * w, y + (0.65 + 0.225 * KAPPA) * h, x + 0.725 * w, y + 0.65 * 
h);
-    CGContextAddCurveToPoint(context, x + 0.725 * w, y + (0.65 - 0.225 * 
KAPPA2) * h, x + (0.5 + 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * w, y 
+ (0.65 - 0.225 * M_SQRT1_2 + 0.225 * M_SQRT1_2 * KAPPA2) * h, x + (0.5 + 0.225 
* M_SQRT1_2) * w, y + (0.65 - 0.225 * M_SQRT1_2) * h);
-    CGContextAddLineToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2) * w, y + 
(0.825 - 0.575 * M_SQRT1_2) * h);
-    CGContextAddCurveToPoint(context, x + (0.675 - 0.125 * M_SQRT1_2 - 0.125 * 
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.575 * M_SQRT1_2 - 0.125 * M_SQRT1_2 * 
KAPPA2) * h, x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2 + 0.125 * KAPPA2) * h, 
x + 0.55 * w, y + (0.825 - 0.7 * M_SQRT1_2) * h);
-    CGContextAddLineToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 * 
M_SQRT1_2) * h);
-    CGContextAddCurveToPoint(context, x + 0.45 * w, y + (0.825 - 0.7 * 
M_SQRT1_2 + 0.225 * KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2 - 0.225 * 
M_SQRT1_2 * KAPPA2) * w, y + (0.825 - 0.475 * M_SQRT1_2 - 0.225 * M_SQRT1_2 * 
KAPPA2) * h, x + (0.675 - 0.225 * M_SQRT1_2) * w, y + (0.825 - 0.475 * 
M_SQRT1_2) * h);
-    CGContextAddLineToPoint(context, x + (0.5 + 0.125 * M_SQRT1_2) * w, y + 
(0.65 - 0.125 * M_SQRT1_2) * h);
-    CGContextAddCurveToPoint(context,x + (0.5 + 0.125 * M_SQRT1_2 + 0.125 * 
M_SQRT1_2 * KAPPA2) * w, y + (0.65 - 0.125 * M_SQRT1_2 + 0.125 * M_SQRT1_2 * 
KAPPA2) * h, x + 0.625 * w, y + (0.65 - 0.125 * KAPPA2) * h, x + 0.625 * w, y + 
0.65 * h);
-    CGContextAddCurveToPoint(context, x + 0.625 * w, y + (0.65 + 0.125 * 
KAPPA) * h, x + (0.5 + 0.125 * KAPPA) * w, y + 0.775 * h, x + 0.5 * w, y + 
0.775 * h);
-    CGContextAddCurveToPoint(context, x + (0.5 - 0.125 * KAPPA) * w, y + 0.775 
* h, x + 0.375 * w, y + (0.65 + 0.125 * KAPPA) * h, x + 0.375 * w, y + 0.65 * 
h);
-    CGContextClosePath(context);
-    CGContextAddEllipseInRect(context, CGRectMake(x + 0.425 * w, y + 0.1 * h, 
0.15 * w, 0.15 * h));
-    CGContextAddEllipseInRect(context, NSRectToCGRect(bounds));
-    CGContextClosePath(context);
-    CGContextDrawPath(context, kCGPathEOFillStroke);
-}
-
-static inline void drawIconNewParagraph(CGContextRef context, NSRect bounds) {
-    bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
-    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
-    CGPoint points1[3] = {{x + 0.1 * w, y + 0.5 * h},
-        {x + 0.5 * w, y + h},
-        {x + 0.9 * w, y + 0.5 * h}};
-    CGContextAddLines(context, points1, 3);
-    CGContextClosePath(context);
-    CGContextDrawPath(context, kCGPathFillStroke);
-    CGContextSetLineCap(context, kCGLineCapRound);
-    CGPoint points2[4] = {{x + 0.1 * w, y},
-        {x + 0.1 * w, y + 0.4 * h},
-        {x + 0.4 * w, y},
-        {x + 0.4 * w, y + 0.4 * h}};
-    CGContextAddLines(context, points2, 4);
-    CGContextMoveToPoint(context, x + 0.6 * w, y);
-    CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.4 * h);
-    CGContextAddLineToPoint(context, x + 0.8 * w, y + 0.4 * h);
-    CGContextAddCurveToPoint(context, x + (0.8 + 0.1 * KAPPA) * w, y + 0.4 * 
h, x + 0.9 * w, y + (0.3 + 0.1 * KAPPA) * h, x + 0.9 * w, y + 0.3 * h);
-    CGContextAddCurveToPoint(context, x + 0.9 * w, y + (0.3 - 0.1 * KAPPA) * 
h, x + (0.8 + 0.1 * KAPPA) * w, y + 0.2 * h, x + 0.8 * w, y + 0.2 * h);
-    CGContextAddLineToPoint(context, x + 0.6 * w, y + 0.2 * h);
-    CGContextStrokePath(context);
-}
-
-static inline void drawIconParagraph(CGContextRef context, NSRect bounds) {
-    bounds = NSInsetRect(bounds, 0.075 * NSWidth(bounds) + 0.5, 0.5);
-    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
-    CGPoint points[8] = {{x + 0.9 * w, y + h},
-        {x + 0.9 * w, y},
-        {x + 0.76 * w, y},
-        {x + 0.76 * w, y + 0.8 * h},
-        {x + 0.63 * w, y + 0.8 * h},
-        {x + 0.63 * w, y},
-        {x + 0.5 * w, y},
-        {x + 0.5 * w, y + 0.5 * h}};
-    CGContextAddLines(context, points, 8);
-    CGContextAddLineToPoint(context, x + 0.35 * w, y + 0.5 * h);
-    CGContextAddCurveToPoint(context, x + (0.35 - 0.25 * KAPPA) * w, y + 0.5 * 
h, x + 0.1 * w, y + (0.75 - 0.25 * KAPPA) * h, x + 0.1 * w, y + 0.75 * h);
-    CGContextAddCurveToPoint(context, x + 0.1 * w, y + (0.75 + 0.25 * KAPPA) * 
h, x + (0.35 - 0.25 * KAPPA) * w, y + h, x + 0.35 * w, y + h);
-    CGContextClosePath(context);
-    CGContextDrawPath(context, kCGPathFillStroke);
-}
-
-static inline void drawIconInsert(CGContextRef context, NSRect bounds) {
-    bounds = NSInsetRect(bounds, 0.5, 0.5);
-    CGFloat x = NSMinX(bounds), y = NSMinY(bounds), w = NSWidth(bounds), h = 
NSHeight(bounds);
-    CGContextMoveToPoint(context, x, y);
-    CGContextAddLineToPoint(context, x + 0.5 * w, y + h);
-    CGContextAddLineToPoint(context, x + w, y);
-    CGContextClosePath(context);
-    CGContextDrawPath(context, kCGPathFillStroke);
-}
-
-static inline void drawIcon(CGContextRef context, NSRect bounds, 
PDFTextAnnotationIconType iconType) {
-    CGContextSetLineWidth(context, 1.0);
-    CGContextSetLineCap(context, kCGLineCapButt);
-    CGContextSetLineJoin(context, kCGLineJoinRound);
-    CGContextClipToRect(context, NSRectToCGRect(bounds));
-    switch (iconType) {
-        case kPDFTextAnnotationIconComment:      drawIconComment(context, 
bounds);      break;
-        case kPDFTextAnnotationIconKey:          drawIconKey(context, bounds); 
         break;
-        case kPDFTextAnnotationIconNote:         drawIconNote(context, 
bounds);         break;
-        case kPDFTextAnnotationIconHelp:         drawIconHelp(context, 
bounds);         break;
-        case kPDFTextAnnotationIconNewParagraph: drawIconNewParagraph(context, 
bounds); break;
-        case kPDFTextAnnotationIconParagraph:    drawIconParagraph(context, 
bounds);    break;
-        case kPDFTextAnnotationIconInsert:       drawIconInsert(context, 
bounds);       break;
-        default:                                 drawIconNote(context, 
bounds);         break;
-    }
-}
-
-#endif

Modified: trunk/SkimNotes/SkimNotes.h
===================================================================
--- trunk/SkimNotes/SkimNotes.h 2026-09-21 15:38:28 UTC (rev 16515)
+++ trunk/SkimNotes/SkimNotes.h 2026-09-21 16:18:53 UTC (rev 16516)
@@ -45,4 +45,3 @@
 #import <SkimNotes/PDFDocument_SKNExtensions.h>
 
 #import <SkimNotes/PDFAnnotation_SKNExtensions.h>
-#import <SkimNotes/SKNPDFAnnotationNote.h>

Modified: trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj
===================================================================
--- trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj 2026-09-21 15:38:28 UTC 
(rev 16515)
+++ trunk/SkimNotes/SkimNotes.xcodeproj/project.pbxproj 2026-09-21 16:18:53 UTC 
(rev 16516)
@@ -39,7 +39,6 @@
 /* Begin PBXBuildFile section */
                CE0C360629A9361D0056897C /* SKNExtendedAttributeManager.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2B630E05675E0000B2E6 /* 
SKNExtendedAttributeManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
                CE0C360729A9361D0056897C /* PDFAnnotation_SKNExtensions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2B6F0E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               CE0C360829A9361D0056897C /* SKNPDFAnnotationNote.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8B0E0569010000B2E6 /* 
SKNPDFAnnotationNote.h */; settings = {ATTRIBUTES = (Public, ); }; };
                CE0C360929A9361D0056897C /* NSFileManager_SKNExtensions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BD30E05826D0000B2E6 /* 
NSFileManager_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
                CE0C360A29A9361D0056897C /* PDFDocument_SKNExtensions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BE00E0587EB0000B2E6 /* 
PDFDocument_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
                CE0C360B29A9361D0056897C /* SkimNotes.h in Headers */ = {isa = 
PBXBuildFile; fileRef = CEBA2CD60E058CF00000B2E6 /* SkimNotes.h */; settings = 
{ATTRIBUTES = (Public, ); }; };
@@ -47,7 +46,6 @@
                CE0C360E29A9361D0056897C /* SkimNotes.strings in Resources */ = 
{isa = PBXBuildFile; fileRef = CE3907AF0E082C460015B0B7 /* SkimNotes.strings 
*/; };
                CE0C361029A9361D0056897C /* SKNExtendedAttributeManager.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B640E05675E0000B2E6 /* 
SKNExtendedAttributeManager.m */; };
                CE0C361129A9361D0056897C /* PDFAnnotation_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B700E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.m */; };
-               CE0C361229A9361D0056897C /* SKNPDFAnnotationNote.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8C0E0569010000B2E6 /* 
SKNPDFAnnotationNote.m */; };
                CE0C361329A9361D0056897C /* NSFileManager_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BD40E05826D0000B2E6 /* 
NSFileManager_SKNExtensions.m */; };
                CE0C361429A9361D0056897C /* PDFDocument_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BE10E0587EB0000B2E6 /* 
PDFDocument_SKNExtensions.m */; };
                CE0C361529A9361D0056897C /* SKNUtilities.m in Sources */ = {isa 
= PBXBuildFile; fileRef = CE37768B0E2FC26100261604 /* SKNUtilities.m */; };
@@ -72,7 +70,6 @@
                CE1414281229B8B200C9EBA0 /* NSFileManager_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BD40E05826D0000B2E6 /* 
NSFileManager_SKNExtensions.m */; };
                CE1414291229B8B300C9EBA0 /* PDFAnnotation_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B700E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.m */; };
                CE14142A1229B8B400C9EBA0 /* PDFDocument_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BE10E0587EB0000B2E6 /* 
PDFDocument_SKNExtensions.m */; };
-               CE14142B1229B8B500C9EBA0 /* SKNPDFAnnotationNote.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8C0E0569010000B2E6 /* 
SKNPDFAnnotationNote.m */; };
                CE1586F429ACB319001ADBCB /* PDFKit.framework in Frameworks */ = 
{isa = PBXBuildFile; fileRef = CE1586F329ACB319001ADBCB /* PDFKit.framework */; 
};
                CE1586F529ACBF95001ADBCB /* PDFKit.framework in Frameworks */ = 
{isa = PBXBuildFile; fileRef = CE1586F329ACB319001ADBCB /* PDFKit.framework */; 
};
                CE1F64E20E34FF7F00E07E76 /* Foundation.framework in Frameworks 
*/ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* 
Foundation.framework */; };
@@ -112,8 +109,6 @@
                CEBA2B670E05675E0000B2E6 /* SKNExtendedAttributeManager.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B640E05675E0000B2E6 /* 
SKNExtendedAttributeManager.m */; };
                CEBA2B710E0568430000B2E6 /* PDFAnnotation_SKNExtensions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2B6F0E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
                CEBA2B720E0568430000B2E6 /* PDFAnnotation_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2B700E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.m */; };
-               CEBA2B8D0E0569010000B2E6 /* SKNPDFAnnotationNote.h in Headers 
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8B0E0569010000B2E6 /* 
SKNPDFAnnotationNote.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               CEBA2B8E0E0569010000B2E6 /* SKNPDFAnnotationNote.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CEBA2B8C0E0569010000B2E6 /* 
SKNPDFAnnotationNote.m */; };
                CEBA2BD50E05826D0000B2E6 /* NSFileManager_SKNExtensions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BD30E05826D0000B2E6 /* 
NSFileManager_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
                CEBA2BD60E05826D0000B2E6 /* NSFileManager_SKNExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CEBA2BD40E05826D0000B2E6 /* 
NSFileManager_SKNExtensions.m */; };
                CEBA2BE20E0587EB0000B2E6 /* PDFDocument_SKNExtensions.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CEBA2BE00E0587EB0000B2E6 /* 
PDFDocument_SKNExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -255,8 +250,6 @@
                CEBA2B640E05675E0000B2E6 /* SKNExtendedAttributeManager.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = SKNExtendedAttributeManager.m; sourceTree = 
"<group>"; };
                CEBA2B6F0E0568430000B2E6 /* PDFAnnotation_SKNExtensions.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
path = PDFAnnotation_SKNExtensions.h; sourceTree = "<group>"; };
                CEBA2B700E0568430000B2E6 /* PDFAnnotation_SKNExtensions.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = PDFAnnotation_SKNExtensions.m; sourceTree = 
"<group>"; };
-               CEBA2B8B0E0569010000B2E6 /* SKNPDFAnnotationNote.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
SKNPDFAnnotationNote.h; sourceTree = "<group>"; };
-               CEBA2B8C0E0569010000B2E6 /* SKNPDFAnnotationNote.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= SKNPDFAnnotationNote.m; sourceTree = "<group>"; };
                CEBA2BD30E05826D0000B2E6 /* NSFileManager_SKNExtensions.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
path = NSFileManager_SKNExtensions.h; sourceTree = "<group>"; };
                CEBA2BD40E05826D0000B2E6 /* NSFileManager_SKNExtensions.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = NSFileManager_SKNExtensions.m; sourceTree = 
"<group>"; };
                CEBA2BE00E0587EB0000B2E6 /* PDFDocument_SKNExtensions.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
path = PDFDocument_SKNExtensions.h; sourceTree = "<group>"; };
@@ -475,8 +468,6 @@
                                CEBA2BE10E0587EB0000B2E6 /* 
PDFDocument_SKNExtensions.m */,
                                CEBA2B6F0E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.h */,
                                CEBA2B700E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.m */,
-                               CEBA2B8B0E0569010000B2E6 /* 
SKNPDFAnnotationNote.h */,
-                               CEBA2B8C0E0569010000B2E6 /* 
SKNPDFAnnotationNote.m */,
                        );
                        name = "Framework PDF Classes";
                        sourceTree = "<group>";
@@ -569,7 +560,6 @@
                        files = (
                                CEBA2B660E05675E0000B2E6 /* 
SKNExtendedAttributeManager.h in Headers */,
                                CEBA2B710E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.h in Headers */,
-                               CEBA2B8D0E0569010000B2E6 /* 
SKNPDFAnnotationNote.h in Headers */,
                                CEBA2BD50E05826D0000B2E6 /* 
NSFileManager_SKNExtensions.h in Headers */,
                                CE4E365E2B221B2000A609FB /* SKNDefines.h in 
Headers */,
                                CEBA2BE20E0587EB0000B2E6 /* 
PDFDocument_SKNExtensions.h in Headers */,
@@ -585,7 +575,6 @@
                        files = (
                                CE0C360629A9361D0056897C /* 
SKNExtendedAttributeManager.h in Headers */,
                                CE0C360729A9361D0056897C /* 
PDFAnnotation_SKNExtensions.h in Headers */,
-                               CE0C360829A9361D0056897C /* 
SKNPDFAnnotationNote.h in Headers */,
                                CE0C360929A9361D0056897C /* 
NSFileManager_SKNExtensions.h in Headers */,
                                CE4E36602B221B2200A609FB /* SKNDefines.h in 
Headers */,
                                CE0C360A29A9361D0056897C /* 
PDFDocument_SKNExtensions.h in Headers */,
@@ -883,7 +872,6 @@
                        files = (
                                CEBA2B670E05675E0000B2E6 /* 
SKNExtendedAttributeManager.m in Sources */,
                                CEBA2B720E0568430000B2E6 /* 
PDFAnnotation_SKNExtensions.m in Sources */,
-                               CEBA2B8E0E0569010000B2E6 /* 
SKNPDFAnnotationNote.m in Sources */,
                                CEBA2BD60E05826D0000B2E6 /* 
NSFileManager_SKNExtensions.m in Sources */,
                                CEBA2BE30E0587EB0000B2E6 /* 
PDFDocument_SKNExtensions.m in Sources */,
                                CE37768D0E2FC26100261604 /* SKNUtilities.m in 
Sources */,
@@ -896,7 +884,6 @@
                        files = (
                                CE0C361029A9361D0056897C /* 
SKNExtendedAttributeManager.m in Sources */,
                                CE0C361129A9361D0056897C /* 
PDFAnnotation_SKNExtensions.m in Sources */,
-                               CE0C361229A9361D0056897C /* 
SKNPDFAnnotationNote.m in Sources */,
                                CE0C361329A9361D0056897C /* 
NSFileManager_SKNExtensions.m in Sources */,
                                CE0C361429A9361D0056897C /* 
PDFDocument_SKNExtensions.m in Sources */,
                                CE0C361529A9361D0056897C /* SKNUtilities.m in 
Sources */,
@@ -923,7 +910,6 @@
                                CE1414281229B8B200C9EBA0 /* 
NSFileManager_SKNExtensions.m in Sources */,
                                CE1414291229B8B300C9EBA0 /* 
PDFAnnotation_SKNExtensions.m in Sources */,
                                CE14142A1229B8B400C9EBA0 /* 
PDFDocument_SKNExtensions.m in Sources */,
-                               CE14142B1229B8B500C9EBA0 /* 
SKNPDFAnnotationNote.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };

Modified: trunk/SkimNotes/skimpdf.m
===================================================================
--- trunk/SkimNotes/skimpdf.m   2026-09-21 15:38:28 UTC (rev 16515)
+++ trunk/SkimNotes/skimpdf.m   2026-09-21 16:18:53 UTC (rev 16516)
@@ -41,7 +41,6 @@
 #import "NSFileManager_SKNExtensions.h"
 #import "PDFDocument_SKNExtensions.h"
 #import "PDFAnnotation_SKNExtensions.h"
-#import "SKNPDFAnnotationNote.h"
 
 #define SKNAppKitVersionNumber11_0 2022
 

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