Make it build. Add a README.

This commit is contained in:
Brent Simmons
2017-06-25 16:32:07 -07:00
parent 1ad4474b29
commit e9c19e427a
41 changed files with 454 additions and 485 deletions

View File

@@ -1,6 +1,6 @@
//
// RSOPMLAttributes.h
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.

View File

@@ -1,13 +1,13 @@
//
// RSOPMLAttributes.m
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
//
#import "RSOPMLAttributes.h"
#import "RSXMLInternal.h"
#import "RSParserInternal.h"
NSString *OPMLTextKey = @"text";

View File

@@ -1,6 +1,6 @@
//
// RSOPMLDocument.h
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.

View File

@@ -1,6 +1,6 @@
//
// RSOPMLDocument.m
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.

View File

@@ -0,0 +1,19 @@
//
// RSOPMLError.h
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
//
@import Foundation;
extern NSString *RSOPMLErrorDomain;
typedef NS_ENUM(NSInteger, RSOPMLErrorCode) {
RSOPMLErrorCodeDataIsWrongFormat = 1024
};
NSError *RSOPMLWrongFormatError(NSString *fileName);

View File

@@ -0,0 +1,22 @@
//
// RSOPMLError.m
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
//
#import "RSOPMLError.h"
NSString *RSOPMLErrorDomain = @"com.ranchero.OPML";
NSError *RSOPMLWrongFormatError(NSString *fileName) {
NSString *localizedDescriptionFormatString = NSLocalizedString(@"The file %@ cant be parsed because its not an OPML file.", @"OPML wrong format");
NSString *localizedDescription = [NSString stringWithFormat:localizedDescriptionFormatString, fileName];
NSString *localizedFailureString = NSLocalizedString(@"The file is not an OPML file.", @"OPML wrong format");
NSDictionary *userInfo = @{NSLocalizedDescriptionKey: localizedDescription, NSLocalizedFailureReasonErrorKey: localizedFailureString};
return [[NSError alloc] initWithDomain:RSOPMLErrorDomain code:RSOPMLErrorCodeDataIsWrongFormat userInfo:userInfo];
}

View File

@@ -1,6 +1,6 @@
//
// RSOPMLFeedSpecifier.h
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.

View File

@@ -1,13 +1,13 @@
//
// RSOPMLFeedSpecifier.m
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
//
#import "RSOPMLFeedSpecifier.h"
#import "RSXMLInternal.h"
#import "RSParserInternal.h"
@implementation RSOPMLFeedSpecifier

View File

@@ -1,6 +1,6 @@
//
// RSOPMLItem.h
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.

View File

@@ -1,6 +1,6 @@
//
// RSOPMLItem.m
// RSXML
// RSParser
//
// Created by Brent Simmons on 2/28/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
@@ -9,7 +9,7 @@
#import "RSOPMLItem.h"
#import "RSOPMLAttributes.h"
#import "RSOPMLFeedSpecifier.h"
#import "RSXMLInternal.h"
#import "RSParserInternal.h"
@interface RSOPMLItem ()

View File

@@ -1,6 +1,6 @@
//
// RSOPMLParser.h
// RSXML
// RSParser
//
// Created by Brent Simmons on 7/12/15.
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
@@ -9,21 +9,12 @@
@import Foundation;
@class RSXMLData;
@class ParserData;
@class RSOPMLDocument;
typedef void (^RSParsedOPMLBlock)(RSOPMLDocument *OPMLDocument, NSError *error);
void RSParseOPML(RSXMLData *xmlData, RSParsedOPMLBlock callback); //async; calls back on main thread.
@interface RSOPMLParser: NSObject
- (instancetype)initWithXMLData:(RSXMLData *)xmlData;
@property (nonatomic, readonly) RSOPMLDocument *OPMLDocument;
@property (nonatomic, readonly) NSError *error;
+ (RSOPMLDocument *)parseOPMLWithParserData:(ParserData *)parserData error:(NSError **)error;
@end

View File

@@ -1,6 +1,6 @@
//
// RSOPMLParser.m
// RSXML
// RSParser
//
// Created by Brent Simmons on 7/12/15.
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
@@ -8,24 +8,24 @@
#import "RSOPMLParser.h"
#import <libxml/xmlstring.h>
#import "RSXMLData.h"
#import "RSSAXParser.h"
#import "RSOPMLItem.h"
#import "RSOPMLDocument.h"
#import "RSOPMLAttributes.h"
#import "RSXMLError.h"
#import <RSParser/RSParser-Swift.h>
#import "RSOPMLError.h"
void RSParseOPML(RSXMLData *xmlData, RSParsedOPMLBlock callback) {
void RSParseOPML(ParserData *parserData, RSParsedOPMLBlock callback) {
NSCParameterAssert(xmlData);
NSCParameterAssert(parserData);
NSCParameterAssert(callback);
dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
@autoreleasepool {
RSOPMLParser *parser = [[RSOPMLParser alloc] initWithXMLData:xmlData];
RSOPMLParser *parser = [[RSOPMLParser alloc] initWithParserData:parserData];
RSOPMLDocument *document = parser.OPMLDocument;
NSError *error = parser.error;
@@ -50,17 +50,30 @@ void RSParseOPML(RSXMLData *xmlData, RSParsedOPMLBlock callback) {
@implementation RSOPMLParser
#pragma mark - Class Methods
+ (RSOPMLDocument *)parseOPMLWithParserData:(ParserData *)parserData error:(NSError **)error {
RSOPMLParser *parser = [[RSOPMLParser alloc] initWithParserData:parserData];
RSOPMLDocument *document = parser.OPMLDocument;
if (parser.error) {
*error = parser.error;
return nil;
}
return document;
}
#pragma mark - Init
- (instancetype)initWithXMLData:(RSXMLData *)XMLData {
- (instancetype)initWithParserData:(ParserData *)parserData {
self = [super init];
if (!self) {
return nil;
}
[self parse:XMLData];
[self parse:parserData];
return self;
}
@@ -68,22 +81,22 @@ void RSParseOPML(RSXMLData *xmlData, RSParsedOPMLBlock callback) {
#pragma mark - Private
- (void)parse:(RSXMLData *)XMLData {
- (void)parse:(ParserData *)parserData {
@autoreleasepool {
if (![self canParseData:XMLData.data]) {
if (![self canParseData:parserData.data]) {
NSString *filename = nil;
NSURL *url = [NSURL URLWithString:XMLData.urlString];
NSURL *url = [NSURL URLWithString:parserData.url];
if (url && url.isFileURL) {
filename = url.path.lastPathComponent;
}
if ([XMLData.urlString hasPrefix:@"http"]) {
filename = XMLData.urlString;
if ([parserData.url hasPrefix:@"http"]) {
filename = parserData.url;
}
if (!filename) {
filename = XMLData.urlString;
filename = parserData.url;
}
self.error = RSOPMLWrongFormatError(filename);
return;
@@ -95,7 +108,7 @@ void RSParseOPML(RSXMLData *xmlData, RSParsedOPMLBlock callback) {
self.OPMLDocument = [RSOPMLDocument new];
[self pushItem:self.OPMLDocument];
[parser parseData:XMLData.data];
[parser parseData:parserData.data];
[parser finishParsing];
}
}