Port RSHTMLTag and RSOMLFeedSpecifier to Swift.

This commit is contained in:
Brent Simmons 2024-08-18 18:58:53 -07:00
parent d13f0f48ed
commit 5ec0964594
7 changed files with 70 additions and 151 deletions

View 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
}
}

View 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
}
}

View File

@ -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
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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