Revision: 14926
          http://sourceforge.net/p/skim-app/code/14926
Author:   hofman
Date:     2025-02-23 16:10:38 +0000 (Sun, 23 Feb 2025)
Log Message:
-----------
Fix range specifiers for character ranges when evaluating indices in 
NSTextStorage rather than NSScriptCommand parameters

Modified Paths:
--------------
    trunk/NSAttributedString_SKExtensions.m
    trunk/NSScriptCommand_SKExtensions.m

Modified: trunk/NSAttributedString_SKExtensions.m
===================================================================
--- trunk/NSAttributedString_SKExtensions.m     2025-02-13 17:24:21 UTC (rev 
14925)
+++ trunk/NSAttributedString_SKExtensions.m     2025-02-23 16:10:38 UTC (rev 
14926)
@@ -158,5 +158,23 @@
     }
 }
 
+- (NSArray 
*)indicesOfObjectsByEvaluatingObjectSpecifier:(NSScriptObjectSpecifier 
*)specifier {
+    // Workaround for Cocoa Scripting and AppleScript bugs.
+    // Cocoa Scripting does not accept range specifiers whose start/end 
specifier have an absolute container specifier, but AppleScript does not accept 
range specifiers with relative container specifiers, so we cannot return those 
from PDFSelection
+    if ([specifier isKindOfClass:[NSRangeSpecifier class]]) {
+        NSScriptObjectSpecifier *childSpec = [(NSRangeSpecifier *)specifier 
startSpecifier];
+        if ([childSpec containerSpecifier]) {
+            [childSpec setContainerSpecifier:nil];
+            [childSpec setContainerIsRangeContainerObject:YES];
+        }
+        childSpec = [(NSRangeSpecifier *)specifier endSpecifier];
+        if ([childSpec containerSpecifier]) {
+            [childSpec setContainerSpecifier:nil];
+            [childSpec setContainerIsRangeContainerObject:YES];
+        }
+    }
+    return nil;
+}
+
 @end
 

Modified: trunk/NSScriptCommand_SKExtensions.m
===================================================================
--- trunk/NSScriptCommand_SKExtensions.m        2025-02-13 17:24:21 UTC (rev 
14925)
+++ trunk/NSScriptCommand_SKExtensions.m        2025-02-23 16:10:38 UTC (rev 
14926)
@@ -37,62 +37,10 @@
  */
 
 #import "NSScriptCommand_SKExtensions.h"
-#import "SKRuntime.h"
 
 
 @implementation NSScriptCommand (SKExtensions)
 
-static void (*original_setReceiversSpecifier)(id, SEL, id) = NULL;
-static void (*original_setArguments)(id, SEL, id) = NULL;
-static void (*original_setDirectParameter)(id, SEL, id) = NULL;
-
-// Workaround for Cocoa Scripting and AppleScript bugs.
-// Cocoa Scripting does not accept range specifiers whose start/end specifier 
have an absolute container specifier, but AppleScript does not accept range 
specifiers with relative container specifiers, so we cannot return those from 
PDFSelection
-static void fixRangeSpecifiers(id object) {
-    if ([object isKindOfClass:[NSArray class]]) {
-        for (id subobject in (NSArray *)object)
-            fixRangeSpecifiers(subobject);
-    } else if ([object isKindOfClass:[NSDictionary class]]) {
-        for (id subobject in [object allValues])
-            fixRangeSpecifiers(subobject);
-    } else if ([object isKindOfClass:[NSScriptObjectSpecifier class]]) {
-        fixRangeSpecifiers([(NSScriptObjectSpecifier *)object 
containerSpecifier]);
-        if ([object isKindOfClass:[NSRangeSpecifier class]]) {
-            NSScriptObjectSpecifier *childSpec = [(NSRangeSpecifier *)object 
startSpecifier];
-            if ([childSpec containerSpecifier]) {
-                [childSpec setContainerSpecifier:nil];
-                [childSpec setContainerIsRangeContainerObject:YES];
-            }
-            childSpec = [(NSRangeSpecifier *)object endSpecifier];
-            if ([childSpec containerSpecifier]) {
-                [childSpec setContainerSpecifier:nil];
-                [childSpec setContainerIsRangeContainerObject:YES];
-            }
-        }
-    }
-}
-
-static void replacement_setReceiversSpecifier(id self, SEL _cmd, 
NSScriptObjectSpecifier *receiversSpec) {
-    fixRangeSpecifiers(receiversSpec);
-    original_setReceiversSpecifier(self, _cmd, receiversSpec);
-}
-
-static void replacement_setArguments(id self, SEL _cmd, NSDictionary *args) {
-    fixRangeSpecifiers(args);
-    original_setArguments(self, _cmd, args);
-}
-
-static void replacement_setDirectParameter(id self, SEL _cmd, id 
directParameter) {
-    fixRangeSpecifiers(directParameter);
-    original_setDirectParameter(self, _cmd, directParameter);
-}
-
-+ (void)load {
-    original_setReceiversSpecifier = (void (*)(id, SEL, 
id))SKReplaceInstanceMethodImplementation(self, 
@selector(setReceiversSpecifier:), (IMP)replacement_setReceiversSpecifier);
-    original_setArguments = (void (*)(id, SEL, 
id))SKReplaceInstanceMethodImplementation(self, @selector(setArguments:), 
(IMP)replacement_setArguments);
-    original_setDirectParameter = (void (*)(id, SEL, 
id))SKReplaceInstanceMethodImplementation(self, @selector(setDirectParameter:), 
(IMP)replacement_setDirectParameter);
-}
-
 - (NSScriptObjectSpecifier *)subjectSpecifier {
     return [NSScriptObjectSpecifier objectSpecifierWithDescriptor:[[self 
appleEvent] attributeDescriptorForKeyword:'subj']];
 }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to