From: <ama...@us...> - 2006-12-18 18:56:13
|
Revision: 8783 http://svn.sourceforge.net/bibdesk/?rev=8783&view=rev Author: amaxwell Date: 2006-12-18 10:56:12 -0800 (Mon, 18 Dec 2006) Log Message: ----------- Change Info.plist to be similar to Preview, and use the Apple-provided constants for types. Add capability for opening PostScript documents from BibDesk category. Check for nil document when loading, and return a trivial NSError if it fails. Modified Paths: -------------- skim/Info.plist skim/SKDocument.m skim/Skim.xcodeproj/project.pbxproj Added Paths: ----------- skim/PDFDocument_BDSKExtensions.h skim/PDFDocument_BDSKExtensions.m Modified: skim/Info.plist =================================================================== --- skim/Info.plist 2006-12-18 18:08:26 UTC (rev 8782) +++ skim/Info.plist 2006-12-18 18:56:12 UTC (rev 8783) @@ -26,29 +26,109 @@ <key>CFBundleTypeExtensions</key> <array> <string>pdf</string> + <string>PDF</string> </array> - <key>CFBundleTypeIconFile</key> - <string></string> + <key>CFBundleTypeOSTypes</key> + <array> + <string>PDF </string> + </array> <key>CFBundleTypeName</key> - <string>PDF</string> - <key>CFBundleTypeOSTypes</key> + <string>NSPDFPboardType</string> + <key>CFBundleTypeRole</key> + <string>Editor</string> + <key>CFBundleTypeMIMETypes</key> <array> - <string>????</string> + <string>application/pdf</string> </array> + <key>LSItemContentTypes</key> + <array> + <string>com.adobe.pdf</string> + </array> + <key>NSDocumentClass</key> + <string>SKDocument</string> + </dict> + <dict> + <key>CFBundleTypeExtensions</key> + <array> + <string>ps</string> + <string>PS</string> + </array> + <key>CFBundleTypeName</key> + <string>PostScript document</string> <key>CFBundleTypeRole</key> <string>Viewer</string> + <key>LSItemContentTypes</key> + <array> + <string>com.adobe.postscript</string> + </array> + <key>CFBundleTypeMIMETypes</key> + <array> + <string>application/postscript</string> + </array> + <key>LSTypeIsPackage</key> + <false/> + <key>NSExportableAs</key> + <array> + <string>NSPDFPboardType</string> + </array> <key>NSDocumentClass</key> <string>SKDocument</string> - <key>NSPersistentStoreTypeKey</key> - <string>InMemory</string> </dict> + <dict> + <key>CFBundleTypeExtensions</key> + <array> + <string>ai</string> + <string>AI</string> + </array> + <key>CFBundleTypeMIMETypes</key> + <array> + <string>application/pdf</string> + </array> + <key>CFBundleTypeName</key> + <string>NSPDFPboardType</string> + <key>CFBundleTypeRole</key> + <string>Viewer</string> + <key>NSExportableAs</key> + <array> + <string>NSPDFPboardType</string> + </array> + <key>NSDocumentClass</key> + <string>SKDocument</string> + </dict> + <dict> + <key>CFBundleTypeExtensions</key> + <array> + <string>epi</string> + <string>EPI</string> + <string>eps</string> + <string>EPS</string> + <string>epsf</string> + <string>EPSF</string> + <string>epsi</string> + <string>EPSI</string> + </array> + <key>CFBundleTypeMIMETypes</key> + <array> + <string>application/postscript</string> + </array> + <key>CFBundleTypeName</key> + <string>PostScript document</string> + <key>CFBundleTypeRole</key> + <string>Viewer</string> + <key>NSExportableAs</key> + <array> + <string>NSPDFPboardType</string> + </array> + <key>NSDocumentClass</key> + <string>SKDocument</string> + </dict> </array> <key>CFBundleExecutable</key> <string>${EXECUTABLE_NAME}</string> <key>CFBundleIconFile</key> <string></string> <key>CFBundleIdentifier</key> - <string>net.sourceforge.bibdesk.Skim</string> + <string>net.sourceforge.bibdesk.skim</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> Added: skim/PDFDocument_BDSKExtensions.h =================================================================== --- skim/PDFDocument_BDSKExtensions.h (rev 0) +++ skim/PDFDocument_BDSKExtensions.h 2006-12-18 18:56:12 UTC (rev 8783) @@ -0,0 +1,49 @@ +// +// PDFDocument_BDSKExtensions.h +// Bibdesk +// +// Created by Adam Maxwell on 02/20/06. +/* + This software is Copyright (c) 2006 + Adam Maxwell. 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 Adam Maxwell 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> + +@interface PDFDocument (BDSKExtensions) + ++ (NSData *)PDFDataWithPostScriptData:(NSData *)psData; + +- (id)initWithPostScriptData:(NSData *)data; +- (id)initWithPostScriptURL:(NSURL *)fileURL; + +@end Added: skim/PDFDocument_BDSKExtensions.m =================================================================== --- skim/PDFDocument_BDSKExtensions.m (rev 0) +++ skim/PDFDocument_BDSKExtensions.m 2006-12-18 18:56:12 UTC (rev 8783) @@ -0,0 +1,76 @@ +// +// PDFDocument_BDSKExtensions.m +// Bibdesk +// +// Created by Adam Maxwell on 02/20/06. +/* + This software is Copyright (c) 2006 + Adam Maxwell. 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 Adam Maxwell 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 "PDFDocument_BDSKExtensions.h" + +@implementation PDFDocument (BDSKExtensions) + ++ (NSData *)PDFDataWithPostScriptData:(NSData *)psData; +{ + CGPSConverterCallbacks converterCallbacks = { 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; + CGPSConverterRef converter = CGPSConverterCreate(NULL, &converterCallbacks, NULL); + NSAssert(converter != NULL, @"unable to create PS converter"); + + // The CFData versions of the provider/consumer functions are 10.4 only + CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)psData); + + CFMutableDataRef pdfData = CFDataCreateMutable(CFAllocatorGetDefault(), 0); + CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(pdfData); + Boolean success = CGPSConverterConvert(converter, provider, consumer, NULL); + + if(success == FALSE){ + CFRelease(pdfData); + pdfData = nil; + } + + return [(id)pdfData autorelease]; +} + +// [self note] this is a category, so don't call super... +- (id)initWithPostScriptData:(NSData *)data; +{ + return [self initWithData:[PDFDocument PDFDataWithPostScriptData:data]]; +} + +- (id)initWithPostScriptURL:(NSURL *)fileURL; +{ + return [self initWithPostScriptData:[NSData dataWithContentsOfURL:fileURL]]; +} + + +@end Modified: skim/SKDocument.m =================================================================== --- skim/SKDocument.m 2006-12-18 18:08:26 UTC (rev 8782) +++ skim/SKDocument.m 2006-12-18 18:56:12 UTC (rev 8783) @@ -14,13 +14,20 @@ #import "SKMainWindowController.h" #import "NSFileManager_ExtendedAttributes.h" #import "SKNote.h" +#import "PDFDocument_BDSKExtensions.h" - -static NSString *SKPDFDocumentType = @"PDF"; +// See CFBundleTypeName in Info.plist +static NSString *SKPDFDocumentType = nil; /* set to NSPDFPboardType, not @"NSPDFPboardType" */ static NSString *SKNotesDocumentType = @"Skim Notes"; +static NSString *SKPostScriptDocumentType = @"PostScript document"; @implementation SKDocument ++ (void)initialize { + if (nil == SKPDFDocumentType) + SKPDFDocumentType = [NSPDFPboardType copy]; +} + - (id)init{ self = [super init]; @@ -70,14 +77,22 @@ } - (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)docType error:(NSError **)outError{ + BOOL didRead; if ([docType isEqualToString:SKPDFDocumentType]) { pdfDoc = [[PDFDocument alloc] initWithURL:absoluteURL]; + didRead = pdfDoc != nil; [self readNotesFromExtendedAttributesAtURL:absoluteURL]; } else if ([docType isEqualToString:SKNotesDocumentType]) { // should we be able to load just notes? [self setNotes:[NSKeyedUnarchiver unarchiveObjectWithFile:[absoluteURL path]]]; + didRead = YES; + } else if ([docType isEqualToString:SKPostScriptDocumentType]) { + pdfDoc = [[PDFDocument alloc] initWithPostScriptURL:absoluteURL]; + didRead = pdfDoc != nil; } - return YES; + if (NO == didRead && outError) + *outError = [NSError errorWithDomain:@"SKDocumentError" code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Unable to load file", @""), NSLocalizedDescriptionKey, nil]]; + return didRead; } - (BOOL)saveNotesToExtendedAttributesAtURL:(NSURL *)aURL { Modified: skim/Skim.xcodeproj/project.pbxproj =================================================================== --- skim/Skim.xcodeproj/project.pbxproj 2006-12-18 18:08:26 UTC (rev 8782) +++ skim/Skim.xcodeproj/project.pbxproj 2006-12-18 18:56:12 UTC (rev 8783) @@ -48,6 +48,7 @@ F92DB5AC0B36FE1F002A26E9 /* BDSKHeaderPopUpButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F92DB5A90B36FE1F002A26E9 /* BDSKHeaderPopUpButtonCell.m */; }; F92DB5AD0B36FE1F002A26E9 /* BDSKZoomablePDFView.m in Sources */ = {isa = PBXBuildFile; fileRef = F92DB5AB0B36FE1F002A26E9 /* BDSKZoomablePDFView.m */; }; F92DB5B30B36FE5E002A26E9 /* BDSKHeaderPopUpButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F92DB5B20B36FE5E002A26E9 /* BDSKHeaderPopUpButton.m */; }; + F92DB6620B371481002A26E9 /* PDFDocument_BDSKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = F92DB6610B371481002A26E9 /* PDFDocument_BDSKExtensions.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -110,6 +111,8 @@ F92DB5AB0B36FE1F002A26E9 /* BDSKZoomablePDFView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDSKZoomablePDFView.m; sourceTree = "<group>"; }; F92DB5B10B36FE5E002A26E9 /* BDSKHeaderPopUpButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDSKHeaderPopUpButton.h; sourceTree = "<group>"; }; F92DB5B20B36FE5E002A26E9 /* BDSKHeaderPopUpButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDSKHeaderPopUpButton.m; sourceTree = "<group>"; }; + F92DB6600B371481002A26E9 /* PDFDocument_BDSKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PDFDocument_BDSKExtensions.h; sourceTree = "<group>"; }; + F92DB6610B371481002A26E9 /* PDFDocument_BDSKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PDFDocument_BDSKExtensions.m; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -166,6 +169,8 @@ 2A37F4ABFDCFA73011CA2CEA /* Classes */ = { isa = PBXGroup; children = ( + F92DB6600B371481002A26E9 /* PDFDocument_BDSKExtensions.h */, + F92DB6610B371481002A26E9 /* PDFDocument_BDSKExtensions.m */, F92DB5A80B36FE1F002A26E9 /* BDSKHeaderPopUpButtonCell.h */, F92DB5A90B36FE1F002A26E9 /* BDSKHeaderPopUpButtonCell.m */, F92DB5AA0B36FE1F002A26E9 /* BDSKZoomablePDFView.h */, @@ -345,6 +350,7 @@ F92DB5AC0B36FE1F002A26E9 /* BDSKHeaderPopUpButtonCell.m in Sources */, F92DB5AD0B36FE1F002A26E9 /* BDSKZoomablePDFView.m in Sources */, F92DB5B30B36FE5E002A26E9 /* BDSKHeaderPopUpButton.m in Sources */, + F92DB6620B371481002A26E9 /* PDFDocument_BDSKExtensions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |