Port RSHTMLTag and RSOMLFeedSpecifier to Swift.
This commit is contained in:
parent
d13f0f48ed
commit
5ec0964594
24
Modules/Parser/Sources/Parser/HTML/HTMLTag.swift
Normal file
24
Modules/Parser/Sources/Parser/HTML/HTMLTag.swift
Normal file
@ -0,0 +1,24 @@
|
||||
//
|
||||
// HTMLTag.swift
|
||||
//
|
||||
//
|
||||
// Created by Brent Simmons on 8/18/24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct HTMLTag: Sendable {
|
||||
|
||||
public enum HTMLTagType {
|
||||
case link
|
||||
case meta
|
||||
}
|
||||
|
||||
public let tagType: HTMLTagType
|
||||
public let attributes: [String: String]?
|
||||
|
||||
public init(tagType: TagType, attributes: [String : String]?) {
|
||||
self.tagType = tagType
|
||||
self.attributes = attributes
|
||||
}
|
||||
}
|
40
Modules/Parser/Sources/Parser/OPML/OPMLFeedSpecifier.swift
Normal file
40
Modules/Parser/Sources/Parser/OPML/OPMLFeedSpecifier.swift
Normal file
@ -0,0 +1,40 @@
|
||||
//
|
||||
// File.swift
|
||||
//
|
||||
//
|
||||
// Created by Brent Simmons on 8/18/24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct OPMLFeedSpecifier: Sendable {
|
||||
|
||||
let title: String?
|
||||
let feedDescription: String?
|
||||
let homePageURL: String?
|
||||
let feedURL: String
|
||||
|
||||
init(title: String?, feedDescription: String?, homePageURL: String?, feedURL: String) {
|
||||
|
||||
if String.isEmptyOrNil(title) {
|
||||
self.title = nil
|
||||
} else {
|
||||
self.title = title
|
||||
}
|
||||
|
||||
if String.isEmptyOrNil(feedDescription) {
|
||||
self.feedDescription = nil
|
||||
} else {
|
||||
self.feedDescription = feedDescription
|
||||
}
|
||||
|
||||
if String.isEmptyOrNil(homePageURL) {
|
||||
self.homePageURL = nil
|
||||
} else {
|
||||
self.homePageURL = homePageURL
|
||||
}
|
||||
|
||||
self.feedURL = feedURL
|
||||
}
|
||||
}
|
||||
|
@ -14,4 +14,10 @@ extension String {
|
||||
return self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? nil : self
|
||||
}
|
||||
|
||||
static func isEmptyOrNil(_ s: String?) {
|
||||
if let s {
|
||||
return s.isEmpty
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
@ -1,33 +0,0 @@
|
||||
//
|
||||
// RSHTMLTag.h
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 11/26/17.
|
||||
// Copyright © 2017 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
@import Foundation;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
extern NSString *RSHTMLTagNameLink; // @"link"
|
||||
extern NSString *RSHTMLTagNameMeta; // @"meta"
|
||||
|
||||
typedef NS_ENUM(NSInteger, RSHTMLTagType) {
|
||||
RSHTMLTagTypeLink,
|
||||
RSHTMLTagTypeMeta
|
||||
};
|
||||
|
||||
@interface RSHTMLTag : NSObject
|
||||
|
||||
- (instancetype)initWithType:(RSHTMLTagType)type attributes:(NSDictionary *)attributes;
|
||||
|
||||
+ (RSHTMLTag *)linkTagWithAttributes:(NSDictionary *)attributes;
|
||||
+ (RSHTMLTag *)metaTagWithAttributes:(NSDictionary *)attributes;
|
||||
|
||||
@property (nonatomic, readonly) RSHTMLTagType type;
|
||||
@property (nonatomic, readonly) NSDictionary *attributes;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
@ -1,43 +0,0 @@
|
||||
//
|
||||
// RSHTMLTag.m
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 11/26/17.
|
||||
// Copyright © 2017 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
#import "RSHTMLTag.h"
|
||||
|
||||
NSString *RSHTMLTagNameLink = @"link";
|
||||
NSString *RSHTMLTagNameMeta = @"meta";
|
||||
|
||||
@implementation RSHTMLTag
|
||||
|
||||
- (instancetype)initWithType:(RSHTMLTagType)type attributes:(NSDictionary *)attributes {
|
||||
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
_type = type;
|
||||
_attributes = attributes;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (RSHTMLTag *)linkTagWithAttributes:(NSDictionary *)attributes {
|
||||
|
||||
return [[self alloc] initWithType:RSHTMLTagTypeLink attributes:attributes];
|
||||
}
|
||||
|
||||
+ (RSHTMLTag *)metaTagWithAttributes:(NSDictionary *)attributes {
|
||||
|
||||
return [[self alloc] initWithType:RSHTMLTagTypeMeta attributes:attributes];
|
||||
}
|
||||
|
||||
- (NSString *)description {
|
||||
return [NSString stringWithFormat:@"<%@: %p> type: %ld attributes: %@", NSStringFromClass([self class]), self, (long)self.type, self.attributes];
|
||||
}
|
||||
|
||||
@end
|
@ -1,24 +0,0 @@
|
||||
//
|
||||
// RSOPMLFeedSpecifier.h
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 2/28/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
@import Foundation;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface RSOPMLFeedSpecifier : NSObject
|
||||
|
||||
- (instancetype)initWithTitle:(NSString * _Nullable)title feedDescription:(NSString * _Nullable)feedDescription homePageURL:(NSString * _Nullable)homePageURL feedURL:(NSString *)feedURL;
|
||||
|
||||
@property (nonatomic, nullable, readonly) NSString *title;
|
||||
@property (nonatomic, nullable, readonly) NSString *feedDescription;
|
||||
@property (nonatomic, nullable, readonly) NSString *homePageURL;
|
||||
@property (nonatomic, readonly) NSString *feedURL;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
@ -1,51 +0,0 @@
|
||||
//
|
||||
// RSOPMLFeedSpecifier.m
|
||||
// RSParser
|
||||
//
|
||||
// Created by Brent Simmons on 2/28/16.
|
||||
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
|
||||
//
|
||||
|
||||
#import "RSOPMLFeedSpecifier.h"
|
||||
#import "RSParserInternal.h"
|
||||
|
||||
|
||||
|
||||
@implementation RSOPMLFeedSpecifier
|
||||
|
||||
- (instancetype)initWithTitle:(NSString *)title feedDescription:(NSString *)feedDescription homePageURL:(NSString *)homePageURL feedURL:(NSString *)feedURL {
|
||||
|
||||
NSParameterAssert(!RSParserStringIsEmpty(feedURL));
|
||||
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (RSParserStringIsEmpty(title)) {
|
||||
_title = nil;
|
||||
}
|
||||
else {
|
||||
_title = title;
|
||||
}
|
||||
|
||||
if (RSParserStringIsEmpty(feedDescription)) {
|
||||
_feedDescription = nil;
|
||||
}
|
||||
else {
|
||||
_feedDescription = feedDescription;
|
||||
}
|
||||
|
||||
if (RSParserStringIsEmpty(homePageURL)) {
|
||||
_homePageURL = nil;
|
||||
}
|
||||
else {
|
||||
_homePageURL = homePageURL;
|
||||
}
|
||||
|
||||
_feedURL = feedURL;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
Loading…
x
Reference in New Issue
Block a user