Revision: 12584
http://bibdesk.svn.sourceforge.net/bibdesk/?rev=12584&view=rev
Author: hofman
Date: 2008-01-19 10:52:39 -0800 (Sat, 19 Jan 2008)
Log Message:
-----------
Add a clipboard scripting property to the application and allow it as a
parameter for the "export using template" command. Works as a workaround for
the bug that scripts commands currently cannot return rich text.
Modified Paths:
--------------
trunk/bibdesk/BDSKAppController+Scripting.h
trunk/bibdesk/BDSKAppController+Scripting.m
trunk/bibdesk/BDSKExportUsingTemplateCommand.m
trunk/bibdesk/BibDocument+Scripting.m
trunk/bibdesk/Scripting/BibDesk.sdef
Modified: trunk/bibdesk/BDSKAppController+Scripting.h
===================================================================
--- trunk/bibdesk/BDSKAppController+Scripting.h 2008-01-19 17:13:25 UTC (rev
12583)
+++ trunk/bibdesk/BDSKAppController+Scripting.h 2008-01-19 18:52:39 UTC (rev
12584)
@@ -52,6 +52,8 @@
- (NSArray *)allFieldNames;
+- (id)clipboard;
+
- (BDSKScriptHook *)valueInScriptHooksWithUniqueID:(NSNumber *)uniqueID;
- (BDSKMacro *)valueInMacrosWithName:(NSString *)name;
@@ -62,3 +64,6 @@
@end
+
[EMAIL PROTECTED] BDSKClipboard : NSObject
[EMAIL PROTECTED]
Modified: trunk/bibdesk/BDSKAppController+Scripting.m
===================================================================
--- trunk/bibdesk/BDSKAppController+Scripting.m 2008-01-19 17:13:25 UTC (rev
12583)
+++ trunk/bibdesk/BDSKAppController+Scripting.m 2008-01-19 18:52:39 UTC (rev
12584)
@@ -37,12 +37,14 @@
*/
#import "BDSKAppController+Scripting.h"
+#import "BDSKApplication.h"
#import <OmniFoundation/OFPreference.h>
#import "BDSKScriptHookManager.h"
#import "BDSKTypeManager.h"
#import "BDSKMacroResolver.h"
#import "BDSKMacro.h"
+
/* ssp
Category on BDSKAppController making the papers folder readable for scripting
*/
@@ -68,6 +70,10 @@
return [[BDSKTypeManager sharedManager] allFieldNamesIncluding:nil
excluding:nil];
}
+- (id)clipboard {
+ return [[[BDSKClipboard alloc] init] autorelease];
+}
+
- (BDSKScriptHook *)valueInScriptHooksWithUniqueID:(NSNumber *)uniqueID {
return [[BDSKScriptHookManager sharedManager]
scriptHookWithUniqueID:uniqueID];
}
@@ -97,10 +103,25 @@
[key isEqualToString:@"allTypes"] ||
[key isEqualToString:@"allFieldNames"] ||
[key isEqualToString:@"macros"] ||
- [key isEqualToString:@"scriptHooks"])
+ [key isEqualToString:@"scriptHooks"] ||
+ [key isEqualToString:@"clipboard"])
return YES;
return NO;
}
@end
+
[EMAIL PROTECTED] BDSKClipboard
+
+- (NSScriptObjectSpecifier *)objectSpecifier {
+ // this is necessary as our container is the application
+ NSScriptClassDescription *containerClassDescription =
(NSScriptClassDescription *)[NSClassDescription
classDescriptionForClass:[BDSKApplication class]];
+ return [[[NSPropertySpecifier allocWithZone: [self zone]]
+ initWithContainerClassDescription: containerClassDescription
+ containerSpecifier: nil // the application is the
null container
+ key: @"clipboard"] autorelease];
+}
+
[EMAIL PROTECTED]
+
Modified: trunk/bibdesk/BDSKExportUsingTemplateCommand.m
===================================================================
--- trunk/bibdesk/BDSKExportUsingTemplateCommand.m 2008-01-19 17:13:25 UTC
(rev 12583)
+++ trunk/bibdesk/BDSKExportUsingTemplateCommand.m 2008-01-19 18:52:39 UTC
(rev 12584)
@@ -42,6 +42,7 @@
#import "BDSKPublicationsArray.h"
#import "NSArray_BDSKExtensions.h"
#import "BibItem.h"
+#import "BDSKAppController+Scripting.h"
@implementation BDSKExportUsingTemplateCommand
@@ -98,7 +99,7 @@
// the 'to' parameters gives the file to save to, either as a path or a
url (it seems)
id fileObj = [params objectForKey:@"to"];
- NSURL *fileURL;
+ NSURL *fileURL = nil;
// make sure we get something
if (!fileObj) {
[self
setScriptErrorNumber:NSRequiredArgumentsMissingScriptError];
@@ -111,6 +112,8 @@
return nil;
} else if ([fileObj isKindOfClass:[NSURL class]]) {
fileURL = (NSURL*)fileObj;
+ } else if ([fileObj isKindOfClass:[BDSKClipboard class]]) {
+ fileURL = nil;
} else {
[self setScriptErrorNumber:NSArgumentsWrongScriptError];
return nil;
@@ -145,7 +148,21 @@
fileData = [document stringDataForPublications:items
usingTemplate:template];
}
- [fileData writeToURL:fileURL atomically:YES];
+ if (fileURL) {
+ [fileData writeToURL:fileURL atomically:YES];
+ } else {
+ NSPasteboard *pboard = [NSPasteboard generalPasteboard];
+ NSString *string = nil;
+ if ([template templateFormat] & BDSKRichTextTemplateFormat) {
+ [pboard declareTypes:[NSArray arrayWithObjects:NSStringPboardType,
NSRTFPboardType, nil] owner:nil];
+ string = [[[[NSAttributedString alloc] initWithRTF:fileData
documentAttributes:NULL] autorelease] string];
+ [pboard setData:fileData forType:NSRTFPboardType];
+ } else {
+ [pboard declareTypes:[NSArray arrayWithObjects:NSStringPboardType,
nil] owner:nil];
+ string = [[[NSString alloc] initWithData:fileData
encoding:NSUTF8StringEncoding] autorelease];
+ }
+ [pboard setString:string forType:NSStringPboardType];
+ }
return nil;
}
Modified: trunk/bibdesk/BibDocument+Scripting.m
===================================================================
--- trunk/bibdesk/BibDocument+Scripting.m 2008-01-19 17:13:25 UTC (rev
12583)
+++ trunk/bibdesk/BibDocument+Scripting.m 2008-01-19 18:52:39 UTC (rev
12584)
@@ -47,6 +47,7 @@
#import "NSArray_BDSKExtensions.h"
#import "BDSKMacroResolver.h"
#import "BDSKPreviewer.h"
+#import "BDSKAppController+Scripting.h"
#import <Quartz/Quartz.h>
@implementation BibDocument (Scripting)
@@ -280,4 +281,8 @@
return [[[NSTextStorage alloc] initWithRTF:data
documentAttributes:NULL] autorelease];
}
+- (id)clipboard {
+ return [[[BDSKClipboard alloc] init] autorelease];
+}
+
@end
Modified: trunk/bibdesk/Scripting/BibDesk.sdef
===================================================================
--- trunk/bibdesk/Scripting/BibDesk.sdef 2008-01-19 17:13:25 UTC (rev
12583)
+++ trunk/bibdesk/Scripting/BibDesk.sdef 2008-01-19 18:52:39 UTC (rev
12584)
@@ -524,6 +524,10 @@
<type type="text" list="yes"/>
<cocoa key="allFieldNames"/>
</property>
+ <property name="clipboard" code="pcli" type="specifier"
access="r"
+ description="The clipboard">
+ <cocoa key="clipboard"/>
+ </property>
<responds-to name="open">
<cocoa method="handleOpenScriptCommand:"/>
</responds-to>
@@ -590,6 +594,10 @@
<type type="publication" list="yes"/>
<cocoa key="shownPublications"/>
</property>
+ <property name="clipboard" code="pcli" type="specifier"
access="r" hidden="yes"
+ description="The clipboard">
+ <cocoa key="clipboard"/>
+ </property>
<responds-to name="close">
<cocoa method="handleCloseScriptCommand:"/>
</responds-to>
@@ -943,7 +951,7 @@
<result description="the templated rich text" type="rich text">
</result>
</command>
-
+
<command name="export" code="BDSKexpt"
description="Exports publications in the document using
a template to file.">
<cocoa name="exportUsingTemplate"
class="BDSKExportUsingTemplateCommand"/>
@@ -963,8 +971,10 @@
description="The template rich text to use. Either this,
'using', or 'using text' should be used.">
<cocoa key="usingRichText"/>
</parameter>
- <parameter name="to" code="to " type="file"
- description="The file to export to">
+ <parameter name="to" code="to "
+ description="The file to export to, or the clipboard">
+ <type type="file"/>
+ <type type="specifier"/>
<cocoa key="to"/>
</parameter>
<parameter name="for" code="for " optional="yes"
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: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit