mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Make it build. Add a README.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// RSOPMLAttributes.h
|
||||
// RSXML
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 2/28/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// RSOPMLDocument.h
|
||||
// RSXML
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 2/28/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// RSOPMLDocument.m
|
||||
// RSXML
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 2/28/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
|
||||
19
Frameworks/RSParser/OPML/RSOPMLError.h
Executable file
19
Frameworks/RSParser/OPML/RSOPMLError.h
Executable 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);
|
||||
22
Frameworks/RSParser/OPML/RSOPMLError.m
Executable file
22
Frameworks/RSParser/OPML/RSOPMLError.m
Executable 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 ‘%@’ can’t be parsed because it’s 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];
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// RSOPMLFeedSpecifier.h
|
||||
// RSXML
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 2/28/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// RSOPMLItem.h
|
||||
// RSXML
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 2/28/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
|
||||
@@ -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 ()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user