55 lines
1.4 KiB
Objective-C
55 lines
1.4 KiB
Objective-C
#import "SVGKSourceNSData.h"
|
|
|
|
#import "SVGKSourceURL.h" // used for delegating when asked to construct relative links
|
|
#import "SVGKDefine_Private.h"
|
|
|
|
@implementation SVGKSourceNSData
|
|
|
|
-(NSString *)keyForAppleDictionaries
|
|
{
|
|
return [[NSString alloc] initWithData:self.rawData encoding:NSUTF8StringEncoding];
|
|
}
|
|
|
|
+ (SVGKSource*)sourceFromData:(NSData*)data URLForRelativeLinks:(NSURL*) url
|
|
{
|
|
NSInputStream* stream = [NSInputStream inputStreamWithData:data];
|
|
//DO NOT DO THIS: let the parser do it at last possible moment (Apple has threading problems otherwise!) [stream open];
|
|
|
|
SVGKSourceNSData* s = [[SVGKSourceNSData alloc] initWithInputSteam:stream];
|
|
s.rawData = data;
|
|
s.effectiveURL = url;
|
|
return s;
|
|
}
|
|
|
|
-(id)copyWithZone:(NSZone *)zone
|
|
{
|
|
id copy = [super copyWithZone:zone];
|
|
|
|
if( copy )
|
|
{
|
|
/** clone bits */
|
|
[copy setRawData:[self.rawData copy]];
|
|
|
|
/** Finally, manually intialize the input stream, as required by super class */
|
|
[copy setStream:[NSInputStream inputStreamWithData:((SVGKSourceNSData*)copy).rawData]];
|
|
}
|
|
|
|
return copy;
|
|
}
|
|
|
|
-(SVGKSource *)sourceFromRelativePath:(NSString *)path
|
|
{
|
|
if( self.effectiveURL != nil )
|
|
{
|
|
NSURL *url = [NSURL URLWithString:path relativeToURL:self.effectiveURL];
|
|
return [SVGKSourceURL sourceFromURL:url];
|
|
}
|
|
else
|
|
{
|
|
SVGKitLogError(@"Cannot construct a relative link for this SVGKSource; it was created from anonymous NSData with no source URL provided. Source = %@", self);
|
|
return nil;
|
|
}
|
|
}
|
|
|
|
@end
|