Revision: 7508
http://skim-app.svn.sourceforge.net/skim-app/?rev=7508&view=rev
Author: hofman
Date: 2011-10-07 12:16:30 +0000 (Fri, 07 Oct 2011)
Log Message:
-----------
Redesign scripting support for stand-alone rich text. Use NSAttributedString
for "rich text format" class and NSData for "RTF" value type. No need to for a
separate class.
Modified Paths:
--------------
trunk/NSAttributedString_SKExtensions.h
trunk/NSAttributedString_SKExtensions.m
trunk/NSData_SKExtensions.h
trunk/NSData_SKExtensions.m
trunk/SKFormatCommand.m
trunk/SKTextCommand.m
trunk/Skim.sdef
trunk/Skim.xcodeproj/project.pbxproj
Removed Paths:
-------------
trunk/SKRichTextFormat.h
trunk/SKRichTextFormat.m
Modified: trunk/NSAttributedString_SKExtensions.h
===================================================================
--- trunk/NSAttributedString_SKExtensions.h 2011-10-05 11:34:01 UTC (rev
7507)
+++ trunk/NSAttributedString_SKExtensions.h 2011-10-07 12:16:30 UTC (rev
7508)
@@ -46,15 +46,23 @@
- (NSString *)xmlString;
- (NSData *)RTFRepresentation;
-+ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor;
-- (id)scriptingRtfDescriptor;
+- (NSString *)scriptingName;
+- (NSTextStorage *)scriptingRichText;
+- (NSScriptObjectSpecifier *)objectSpecifier;
+- (NSScriptObjectSpecifier *)richTextSpecifier;
+
@end
@interface NSTextStorage (SKExtensions)
- (id)scriptingRTF;
-- (void)setScriptingRTF:(id)attrString;
+- (void)setScriptingRTF:(id)data;
@end
+
+
+@interface NSApplication (SKRichTextFormat)
+- (NSAttributedString *)valueInRichTextFormatWithName:(NSString *)name;
+@end
Modified: trunk/NSAttributedString_SKExtensions.m
===================================================================
--- trunk/NSAttributedString_SKExtensions.m 2011-10-05 11:34:01 UTC (rev
7507)
+++ trunk/NSAttributedString_SKExtensions.m 2011-10-07 12:16:30 UTC (rev
7508)
@@ -38,6 +38,7 @@
#import "NSAttributedString_SKExtensions.h"
#import "NSString_SKExtensions.h"
+#import "NSData_SKExtensions.h"
@implementation NSAttributedString (SKExtensions)
@@ -62,20 +63,24 @@
#pragma mark Scripting support
-+ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor {
- NSString *string = [descriptor stringValue];
- if (string) {
- return [[[self alloc] initWithString:string] autorelease];
- } else {
- NSError *error;
- return [[[self alloc] initWithData:[descriptor data]
options:[NSDictionary dictionary] documentAttributes:NULL error:&error]
autorelease];
- }
+- (NSString *)scriptingName {
+ return [[self RTFRepresentation] hexString];
}
-- (id)scriptingRtfDescriptor {
- return [NSAppleEventDescriptor descriptorWithDescriptorType:'RTF '
data:[self RTFRepresentation]];
+- (NSTextStorage *)scriptingRichText {
+ return [[[NSTextStorage alloc] initWithAttributedString:self] autorelease];
}
+- (NSScriptObjectSpecifier *)objectSpecifier {
+ NSScriptClassDescription *containerClassDescription =
[NSScriptClassDescription classDescriptionForClass:[NSApp class]];
+ return [[[NSNameSpecifier allocWithZone:[self zone]]
initWithContainerClassDescription:containerClassDescription
containerSpecifier:nil key:@"richTextFormat" name:[self scriptingName]]
autorelease];
+}
+
+- (NSScriptObjectSpecifier *)richTextSpecifier {
+ NSScriptObjectSpecifier *rtfSpecifier = [self objectSpecifier];
+ return [[[NSPropertySpecifier alloc]
initWithContainerClassDescription:[rtfSpecifier keyClassDescription]
containerSpecifier:rtfSpecifier key:@"scriptingRichText"] autorelease];
+}
+
@end
@@ -84,12 +89,26 @@
#pragma mark Scripting support
- (id)scriptingRTF {
- return self;
+ return [self RTFRepresentation];
}
-- (void)setScriptingRTF:(id)attrString {
- if (attrString)
- [self setAttributedString:attrString];
+- (void)setScriptingRTF:(id)data {
+ if (data) {
+ NSAttributedString *attrString = [[NSAttributedString alloc]
initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL
error:NULL];
+ if (attrString)
+ [self setAttributedString:attrString];
+ [attrString release];
+ }
}
@end
+
+
+@implementation NSApplication (SKRichTextFormat)
+
+- (NSAttributedString *)valueInRichTextFormatWithName:(NSString *)name {
+ NSData *data = [[[NSData alloc] initWithHexString:name] autorelease];
+ return data ? [[[NSAttributedString alloc] initWithData:data
options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]
autorelease] : nil;
+}
+
+@end
Modified: trunk/NSData_SKExtensions.h
===================================================================
--- trunk/NSData_SKExtensions.h 2011-10-05 11:34:01 UTC (rev 7507)
+++ trunk/NSData_SKExtensions.h 2011-10-07 12:16:30 UTC (rev 7508)
@@ -69,6 +69,8 @@
- (id)scriptingPdfDescriptor;
+ (id)scriptingTiffPictureWithDescriptor:(NSAppleEventDescriptor *)descriptor;
- (id)scriptingTiffPictureDescriptor;
++ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor;
+- (id)scriptingRtfDescriptor;
@end
Modified: trunk/NSData_SKExtensions.m
===================================================================
--- trunk/NSData_SKExtensions.m 2011-10-05 11:34:01 UTC (rev 7507)
+++ trunk/NSData_SKExtensions.m 2011-10-07 12:16:30 UTC (rev 7508)
@@ -344,6 +344,14 @@
return [NSAppleEventDescriptor descriptorWithDescriptorType:'TIFF'
data:self];
}
++ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor {
+ return [descriptor data];
+}
+
+- (id)scriptingRtfDescriptor {
+ return [NSAppleEventDescriptor descriptorWithDescriptorType:'RTF '
data:self];
+}
+
+ (void)load {
// this should do nothing on Snow Leopard
SKAddInstanceMethodImplementationFromSelector(self,
@selector(rangeOfData:options:range:),
@selector(Leopard_rangeOfData:options:range:));
Modified: trunk/SKFormatCommand.m
===================================================================
--- trunk/SKFormatCommand.m 2011-10-05 11:34:01 UTC (rev 7507)
+++ trunk/SKFormatCommand.m 2011-10-07 12:16:30 UTC (rev 7508)
@@ -38,8 +38,8 @@
#import "SKFormatCommand.h"
#import "SKTemplateParser.h"
-#import "SKRichTextFormat.h"
#import "SKTemplateManager.h"
+#import "NSAttributedString_SKExtensions.h"
@implementation SKFormatCommand
@@ -74,16 +74,15 @@
} else if (attrString) {
NSAttributedString *attrText = [SKTemplateParser
attributedStringByParsingTemplateAttributedString:attrString
usingObject:receiver];
if (attrText) {
- NSMutableDictionary *mutableDocAttrs = [NSMutableDictionary
dictionaryWithDictionary:docAttrs];
- [mutableDocAttrs setObject:NSRTFTextDocumentType
forKey:NSDocumentTypeDocumentAttribute];
- NSData *data = [attrText RTFFromRange:NSMakeRange(0, [attrText
length]) documentAttributes:mutableDocAttrs];
- text = [SKRichTextFormat richTextSpecifierWithData:data];
+ text = [attrText richTextSpecifier];
if (file) {
+ NSMutableDictionary *mutableDocAttrs = [NSMutableDictionary
dictionaryWithDictionary:docAttrs];
NSString *ext = [[[file path] pathExtension] lowercaseString];
if ([ext isEqualToString:@"rtfd"]) {
[mutableDocAttrs setObject:NSRTFDTextDocumentType
forKey:NSDocumentTypeDocumentAttribute];
[[text RTFDFileWrapperFromRange:NSMakeRange(0, [attrText
length]) documentAttributes:mutableDocAttrs] writeToFile:[file path]
atomically:YES updateFilenames:NO];
} else {
+ NSData *data = nil;
NSString *docType = nil;
if ([ext isEqualToString:@"rtf"])
docType = NSRTFTextDocumentType;
@@ -95,7 +94,7 @@
docType = NSOpenDocumentTextDocumentType;
else if ([ext isEqualToString:@"webarchive"])
docType = NSWebArchiveTextDocumentType;
- if (docType && [docType
isEqualToString:NSRTFTextDocumentType] == NO) {
+ if (docType) {
[mutableDocAttrs setObject:docType
forKey:NSDocumentTypeDocumentAttribute];
data = [attrText dataFromRange:NSMakeRange(0,
[attrText length]) documentAttributes:mutableDocAttrs error:NULL];
}
Deleted: trunk/SKRichTextFormat.h
===================================================================
--- trunk/SKRichTextFormat.h 2011-10-05 11:34:01 UTC (rev 7507)
+++ trunk/SKRichTextFormat.h 2011-10-07 12:16:30 UTC (rev 7508)
@@ -1,59 +0,0 @@
-//
-// SKRichTextFormat.h
-// Skim
-//
-// Created by Christiaan Hofman on 1/19/09.
-/*
- This software is Copyright (c) 2009-2011
- 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 <Cocoa/Cocoa.h>
-
-
-@interface SKRichTextFormat : NSObject {
- NSData *data;
-}
-
-+ (id)richTextSpecifierWithData:(NSData *)aData;
-
-- (id)initWithData:(NSData *)aData;
-- (id)initWithName:(NSString *)aName;
-
-@property (nonatomic, readonly) NSString *name;
-@property (nonatomic, readonly) NSTextStorage *richText;
-
-@end
-
-
-@interface NSApplication (SKRichTextFormat)
-- (SKRichTextFormat *)valueInRichTextFormatWithName:(NSString *)name;
-@end
Deleted: trunk/SKRichTextFormat.m
===================================================================
--- trunk/SKRichTextFormat.m 2011-10-05 11:34:01 UTC (rev 7507)
+++ trunk/SKRichTextFormat.m 2011-10-07 12:16:30 UTC (rev 7508)
@@ -1,103 +0,0 @@
-//
-// SKRichTextFormat.m
-// Skim
-//
-// Created by Christiaan Hofman on 1/19/09.
-/*
- This software is Copyright (c) 2009-2011
- 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 "SKRichTextFormat.h"
-#import "NSData_SKExtensions.h"
-
-
-@implementation SKRichTextFormat
-
-@dynamic name, richText;
-
-+ (id)richTextSpecifierWithData:(NSData *)aData {
- SKRichTextFormat *rtf = [[self alloc] initWithData:aData];
- NSScriptObjectSpecifier *rtfSpecifier = [rtf objectSpecifier];
- NSPropertySpecifier *richTextSpecifier = rtfSpecifier ?
[[[NSPropertySpecifier alloc] initWithContainerClassDescription:[rtfSpecifier
keyClassDescription] containerSpecifier:rtfSpecifier key:@"richText"]
autorelease] : nil;
- [rtf release];
- return richTextSpecifier;
-}
-
-- (id)initWithData:(NSData *)aData {
- self = [super init];
- if (self) {
- if (aData) {
- data = [aData retain];
- } else {
- [self release];
- self = nil;
- }
- }
- return self;
-}
-
-- (id)initWithName:(NSString *)aName {
- NSData *aData = [[NSData alloc] initWithHexString:aName];
- self = [self initWithData:aData];
- [aData release];
- return self;
-}
-
-- (void)dealloc {
- SKDESTROY(data);
- [super dealloc];
-}
-
-- (NSScriptObjectSpecifier *)objectSpecifier {
- NSScriptClassDescription *containerClassDescription =
[NSScriptClassDescription classDescriptionForClass:[NSApp class]];
- return [[[NSNameSpecifier allocWithZone:[self zone]]
initWithContainerClassDescription:containerClassDescription
containerSpecifier:nil key:@"richTextFormat" name:[self name]] autorelease];
-}
-
-- (NSString *)name {
- return [data hexString];
-}
-
-- (NSTextStorage *)richText {
- NSError *error;
- return [[[NSTextStorage alloc] initWithData:data options:[NSDictionary
dictionary] documentAttributes:NULL error:&error] autorelease];
-}
-
-@end
-
-
-@implementation NSApplication (SKRichTextFormat)
-
-- (SKRichTextFormat *)valueInRichTextFormatWithName:(NSString *)name {
- return [[[SKRichTextFormat alloc] initWithName:name] autorelease];
-}
-
-@end
Modified: trunk/SKTextCommand.m
===================================================================
--- trunk/SKTextCommand.m 2011-10-05 11:34:01 UTC (rev 7507)
+++ trunk/SKTextCommand.m 2011-10-07 12:16:30 UTC (rev 7508)
@@ -42,7 +42,6 @@
#import "PDFAnnotation_SKExtensions.h"
#import "PDFSelection_SKExtensions.h"
#import "NSAttributedString_SKExtensions.h"
-#import "SKRichTextFormat.h"
@implementation SKTextCommand
@@ -64,13 +63,13 @@
} else if ([dPO isKindOfClass:[PDFAnnotation class]]) {
if (page == nil || [page isEqual:[dPO page]])
attributedString = [dPO textContents];
- } else if ([dP isKindOfClass:[NSAttributedString class]]) {
- attributedString = dP;
+ } else if ([dP isKindOfClass:[NSData class]]) {
+ attributedString = [[[NSAttributedString alloc] initWithData:dP
options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]
autorelease];
} else {
attributedString = [[PDFSelection selectionWithSpecifier:dP
onPage:page] attributedString];
}
- return [SKRichTextFormat richTextSpecifierWithData:[attributedString
RTFRepresentation]];
+ return [attributedString richTextSpecifier];
}
@end
Modified: trunk/Skim.sdef
===================================================================
--- trunk/Skim.sdef 2011-10-05 11:34:01 UTC (rev 7507)
+++ trunk/Skim.sdef 2011-10-07 12:16:30 UTC (rev 7508)
@@ -277,7 +277,7 @@
</value-type>
<value-type name="RTF" code="RTF ">
- <cocoa class="NSAttributedString"/>
+ <cocoa class="NSData"/>
</value-type>
<class name="rich text" plural="rich text" code="ricT"
@@ -519,14 +519,14 @@
<class name="rich text format" plural="rich text formats" code="RTFt"
hidden="yes"
description="Rich text format, encoding rich text.">
- <cocoa class="SKRichTextFormat"/>
+ <cocoa class="NSAttributedString"/>
<property name="name" code="pnam" type="text" access="r"
description="The name for the rich text format.">
- <cocoa key="name"/>
+ <cocoa key="scriptingName"/>
</property>
<contents name="rich text" code="ricT" type="rich text" access="r"
description="The rich text representation of the rich text
format.">
- <cocoa key="richText"/>
+ <cocoa key="scriptingRichText"/>
</contents>
</class>
Modified: trunk/Skim.xcodeproj/project.pbxproj
===================================================================
--- trunk/Skim.xcodeproj/project.pbxproj 2011-10-05 11:34:01 UTC (rev
7507)
+++ trunk/Skim.xcodeproj/project.pbxproj 2011-10-07 12:16:30 UTC (rev
7508)
@@ -219,7 +219,6 @@
CEB735A20C4A8CD6000350F9 /* TransitionShading.tiff in Resources
*/ = {isa = PBXBuildFile; fileRef = CEB735A10C4A8CD6000350F9 /*
TransitionShading.tiff */; };
CEBD52ED0C9C0AE500FBF6A4 /* SKBookmark.m in Sources */ = {isa =
PBXBuildFile; fileRef = CEBD52EB0C9C0AE500FBF6A4 /* SKBookmark.m */; };
CEBF85E20CCE2DE70057A050 /* NSAffineTransform_SKExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEBF85E00CCE2DE70057A050 /*
NSAffineTransform_SKExtensions.m */; };
- CEC3154F0F24AC02008D2C75 /* SKRichTextFormat.m in Sources */ =
{isa = PBXBuildFile; fileRef = CEC3154E0F24AC02008D2C75 /* SKRichTextFormat.m
*/; };
CEC3AD240E23EC0300F40B0B /* PDFAnnotationLink_SKExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CEC3AD230E23EC0300F40B0B /*
PDFAnnotationLink_SKExtensions.m */; };
CECB03D30DC7503A0000B16B /* SKGroupedSearchResult.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CECB03D20DC7503A0000B16B /*
SKGroupedSearchResult.m */; };
CECDC4FF0C5966A80026AAEC /* NSImage_SKExtensions.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CECDC4FD0C5966A80026AAEC /*
NSImage_SKExtensions.m */; };
@@ -906,8 +905,6 @@
CEBD52EB0C9C0AE500FBF6A4 /* SKBookmark.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= SKBookmark.m; sourceTree = "<group>"; };
CEBF85DF0CCE2DE70057A050 /* NSAffineTransform_SKExtensions.h */
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.h; path = NSAffineTransform_SKExtensions.h; sourceTree =
"<group>"; };
CEBF85E00CCE2DE70057A050 /* NSAffineTransform_SKExtensions.m */
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; path = NSAffineTransform_SKExtensions.m; sourceTree =
"<group>"; };
- CEC3154D0F24AC02008D2C75 /* SKRichTextFormat.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
SKRichTextFormat.h; sourceTree = "<group>"; };
- CEC3154E0F24AC02008D2C75 /* SKRichTextFormat.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= SKRichTextFormat.m; sourceTree = "<group>"; };
CEC3AD220E23EC0300F40B0B /* PDFAnnotationLink_SKExtensions.h */
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.h; path = PDFAnnotationLink_SKExtensions.h; sourceTree =
"<group>"; };
CEC3AD230E23EC0300F40B0B /* PDFAnnotationLink_SKExtensions.m */
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; path = PDFAnnotationLink_SKExtensions.m; sourceTree =
"<group>"; };
CEC4C33F0CA90CA200299397 /* Spanish */ = {isa =
PBXFileReference; lastKnownFileType = text.rtf; name = Spanish; path =
Spanish.lproj/Credits.rtf; sourceTree = "<group>"; };
@@ -1691,8 +1688,6 @@
CE3366DE0E28BCFA005F99E6 /* SKPDFSyncRecord.m
*/,
CE4294A10BBD29120016FDC2 /* SKReadingBar.h */,
CE4294A20BBD29120016FDC2 /* SKReadingBar.m */,
- CEC3154D0F24AC02008D2C75 /* SKRichTextFormat.h
*/,
- CEC3154E0F24AC02008D2C75 /* SKRichTextFormat.m
*/,
CE2DE4900B85D48F00D0DA12 /* SKThumbnail.h */,
CE2DE4910B85D48F00D0DA12 /* SKThumbnail.m */,
CE8978CB0CBFC70B00EA2D98 /* SKTemplateTag.h */,
@@ -2507,7 +2502,6 @@
CEE0F5EB0EBB3DEC000A7A8C /*
SKLevelIndicatorCell.m in Sources */,
CE0A3C8E0EBF3AAA00526C74 /*
NSResponder_SKExtensions.m in Sources */,
CE17F47E0F1A17E200E741DD /*
SKPDFSynchronizerServer.m in Sources */,
- CEC3154F0F24AC02008D2C75 /* SKRichTextFormat.m
in Sources */,
CE32531F0F4723EA0021BADD /*
SKMainWindowController_Actions.m in Sources */,
CE80A81E0FDAB1690086A46C /*
SKHighlightingPopUpButton.m in Sources */,
CE9B804A1030642400EA8774 /* SKTransitionInfo.m
in Sources */,
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit