Revision: 4853
          http://skim-app.svn.sourceforge.net/skim-app/?rev=4853&view=rev
Author:   hofman
Date:     2008-10-23 09:32:02 +0000 (Thu, 23 Oct 2008)

Log Message:
-----------
Make function to parse selection specifiers generic, use default subcontainer 
rather than explicit key

Modified Paths:
--------------
    trunk/PDFSelection_SKExtensions.m

Modified: trunk/PDFSelection_SKExtensions.m
===================================================================
--- trunk/PDFSelection_SKExtensions.m   2008-10-23 09:10:57 UTC (rev 4852)
+++ trunk/PDFSelection_SKExtensions.m   2008-10-23 09:32:02 UTC (rev 4853)
@@ -150,7 +150,7 @@
     return range;
 }
 
-static NSArray 
*characterRangesAndContainersForSpecifier(NSScriptObjectSpecifier *specifier, 
BOOL continuous) {
+static NSArray 
*characterRangesAndContainersForSpecifier(NSScriptObjectSpecifier *specifier, 
BOOL continuous, BOOL continuousContainers) {
     if ([specifier isKindOfClass:[NSScriptObjectSpecifier class]] == NO)
         return nil;
     
@@ -160,7 +160,7 @@
     if ([key isEqualToString:@"characters"] || [key isEqualToString:@"words"] 
|| [key isEqualToString:@"paragraphs"] || [key 
isEqualToString:@"attributeRuns"]) {
         
         // get the richText specifier and textStorage
-        NSArray *dicts = characterRangesAndContainersForSpecifier([specifier 
containerSpecifier], NO);
+        NSArray *dicts = characterRangesAndContainersForSpecifier([specifier 
containerSpecifier], continuousContainers, continuousContainers);
         if ([dicts count] == 0)
             return nil;
         
@@ -295,26 +295,28 @@
         
     } else {
         
-        NSArray *pages = nil;
-        if ([key isEqualToString:@"richText"]) {
+        NSScriptClassDescription *classDesc = [specifier keyClassDescription];
+        if ([[classDesc className] isEqualToString:@"rich text"]) {
             specifier = [specifier containerSpecifier];
-            key = [specifier key];
+        } else {
+            key = [classDesc defaultSubcontainerAttributeKey];
+            if (key == nil || [[[classDesc classDescriptionForKey:key] 
className] isEqualToString:@"rich text"] == NO)
+                return nil;
         }
-        if ([key isEqualToString:@"pages"]) {
-            pages = [specifier objectsByEvaluatingSpecifier];
-            if (pages && [pages isKindOfClass:[NSArray class]] == NO)
-                pages = [NSArray arrayWithObject:pages];
-        }
-        if ([pages count] == 0)
+        
+        NSArray *containers = containers = [specifier 
objectsByEvaluatingSpecifier];
+        if (containers && [containers isKindOfClass:[NSArray class]] == NO)
+            containers = [NSArray arrayWithObject:containers];
+        if ([containers count] == 0)
             return nil;
         
-        NSEnumerator *pageEnum = [pages objectEnumerator];
-        PDFPage *page;
+        NSEnumerator *containerEnum = [containers objectEnumerator];
+        id container;
         
-        while (page = [pageEnum nextObject]) {
-            NSTextStorage *containerText = [page richText];
+        while (container = [containerEnum nextObject]) {
+            NSTextStorage *containerText = [container valueForKey:key];
             NSArray *rangeValues = [[NSArray alloc] initWithObjects:[NSValue 
valueWithRange:NSMakeRange(0, [containerText length])], nil];
-            NSMutableDictionary *dict = [[NSMutableDictionary alloc] 
initWithObjectsAndKeys:rangeValues, @"ranges", containerText, @"text", page, 
@"page", nil];
+            NSMutableDictionary *dict = [[NSMutableDictionary alloc] 
initWithObjectsAndKeys:rangeValues, @"ranges", containerText, @"text", 
container, @"container", nil];
             [rangeDicts addObject:dict];
             [dict release];
             [rangeValues release];
@@ -355,13 +357,13 @@
         if ([spec isKindOfClass:[NSScriptObjectSpecifier class]] == NO)
             continue;
         
-        NSArray *dicts = characterRangesAndContainersForSpecifier(spec, YES);
+        NSArray *dicts = characterRangesAndContainersForSpecifier(spec, YES, 
NO);
         NSEnumerator *dictEnum = [dicts objectEnumerator];
         NSDictionary *dict;
         PDFDocument *doc = nil;
         
         while (dict = [dictEnum nextObject]) {
-            PDFPage *page = [dict objectForKey:@"page"];
+            PDFPage *page = [dict objectForKey:@"container"];
             if ([page isKindOfClass:[PDFPage class]] == NO || (aPage && [aPage 
isEqual:page] == NO) || (doc && [doc isEqual:[page document]] == NO))
                 continue;
             


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

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to