diff --git a/Frameworks/Account/FeedFinder/FeedSpecifier.swift b/Frameworks/Account/FeedFinder/FeedSpecifier.swift
index ebcfab616..009c39644 100644
--- a/Frameworks/Account/FeedFinder/FeedSpecifier.swift
+++ b/Frameworks/Account/FeedFinder/FeedSpecifier.swift
@@ -69,10 +69,10 @@ private extension FeedSpecifier {
score = score + 50
}
- if urlString.rs_caseInsensitiveContains("comments") {
+ if urlString.caseInsensitiveContains("comments") {
score = score - 10
}
- if urlString.rs_caseInsensitiveContains("rss") {
+ if urlString.caseInsensitiveContains("rss") {
score = score + 5
}
if urlString.hasSuffix("/feed/") {
@@ -81,15 +81,15 @@ private extension FeedSpecifier {
if urlString.hasSuffix("/feed") {
score = score + 4
}
- if urlString.rs_caseInsensitiveContains("json") {
+ if urlString.caseInsensitiveContains("json") {
score = score + 6
}
if let title = title {
- if title.rs_caseInsensitiveContains("comments") {
+ if title.caseInsensitiveContains("comments") {
score = score - 10
}
- if title.rs_caseInsensitiveContains("json") {
+ if title.caseInsensitiveContains("json") {
score = score + 1
}
}
diff --git a/Frameworks/Account/FeedFinder/HTMLFeedFinder.swift b/Frameworks/Account/FeedFinder/HTMLFeedFinder.swift
index ff4baa2a2..e8f242a56 100644
--- a/Frameworks/Account/FeedFinder/HTMLFeedFinder.swift
+++ b/Frameworks/Account/FeedFinder/HTMLFeedFinder.swift
@@ -33,7 +33,7 @@ class HTMLFeedFinder {
for oneBodyLink in bodyLinks {
if linkMightBeFeed(oneBodyLink) {
- let normalizedURL = oneBodyLink.urlString.rs_normalizedURL()
+ let normalizedURL = oneBodyLink.urlString.normalizedURL
let oneFeedSpecifier = FeedSpecifier(title: oneBodyLink.text, urlString: normalizedURL, source: .HTMLLink)
addFeedSpecifier(oneFeedSpecifier)
}
diff --git a/Frameworks/Account/Folder.swift b/Frameworks/Account/Folder.swift
index 1420eb3de..2123da05b 100644
--- a/Frameworks/Account/Folder.swift
+++ b/Frameworks/Account/Folder.swift
@@ -183,9 +183,9 @@ extension Folder: OPMLRepresentable {
}
}()
- let escapedTitle = nameForDisplay.rs_stringByEscapingSpecialXMLCharacters()
+ let escapedTitle = nameForDisplay.escapingSpecialXMLCharacters
var s = "\n"
- s = s.rs_string(byPrependingNumberOfTabs: indentLevel)
+ s = s.prepending(tabCount: indentLevel)
var hasAtLeastOneChild = false
@@ -196,11 +196,11 @@ extension Folder: OPMLRepresentable {
if !hasAtLeastOneChild {
s = "\n"
- s = s.rs_string(byPrependingNumberOfTabs: indentLevel)
+ s = s.prepending(tabCount: indentLevel)
return s
}
- s = s + NSString.rs_string(withNumberOfTabs: indentLevel) + "\n"
+ s = s + String(tabCount: indentLevel) + "\n"
return s
}
diff --git a/Frameworks/Account/OPMLFile.swift b/Frameworks/Account/OPMLFile.swift
index c070eaae2..a2cac7182 100644
--- a/Frameworks/Account/OPMLFile.swift
+++ b/Frameworks/Account/OPMLFile.swift
@@ -125,7 +125,7 @@ private extension OPMLFile {
}
func opmlDocument() -> String {
- let escapedTitle = account.nameForDisplay.rs_stringByEscapingSpecialXMLCharacters()
+ let escapedTitle = account.nameForDisplay.escapingSpecialXMLCharacters
let openingText =
"""
diff --git a/Frameworks/Account/WebFeed.swift b/Frameworks/Account/WebFeed.swift
index df0679a13..179b7720d 100644
--- a/Frameworks/Account/WebFeed.swift
+++ b/Frameworks/Account/WebFeed.swift
@@ -43,7 +43,7 @@ public final class WebFeed: Feed, Renamable, Hashable {
}
set {
if let url = newValue, !url.isEmpty {
- metadata.homePageURL = url.rs_normalizedURL()
+ metadata.homePageURL = url.normalizedURL
}
else {
metadata.homePageURL = nil
@@ -256,16 +256,16 @@ extension WebFeed: OPMLRepresentable {
if nameToUse == nil {
nameToUse = ""
}
- let escapedName = nameToUse!.rs_stringByEscapingSpecialXMLCharacters()
+ let escapedName = nameToUse!.escapingSpecialXMLCharacters
var escapedHomePageURL = ""
if let homePageURL = homePageURL {
- escapedHomePageURL = homePageURL.rs_stringByEscapingSpecialXMLCharacters()
+ escapedHomePageURL = homePageURL.escapingSpecialXMLCharacters
}
- let escapedFeedURL = url.rs_stringByEscapingSpecialXMLCharacters()
+ let escapedFeedURL = url.escapingSpecialXMLCharacters
var s = "\n"
- s = s.rs_string(byPrependingNumberOfTabs: indentLevel)
+ s = s.prepending(tabCount: indentLevel)
return s
}
diff --git a/Frameworks/Articles/DatabaseID.swift b/Frameworks/Articles/DatabaseID.swift
index 392ca1870..a8b4590e3 100644
--- a/Frameworks/Articles/DatabaseID.swift
+++ b/Frameworks/Articles/DatabaseID.swift
@@ -26,7 +26,7 @@ public func databaseIDWithString(_ s: String) -> String {
return identifier
}
- let identifier = (s as NSString).rs_md5Hash()
+ let identifier = s.md5HashString
databaseIDCache[s] = identifier
return identifier
}
diff --git a/Frameworks/ArticlesDatabase/SearchTable.swift b/Frameworks/ArticlesDatabase/SearchTable.swift
index 6bcbd36bd..0733611a6 100644
--- a/Frameworks/ArticlesDatabase/SearchTable.swift
+++ b/Frameworks/ArticlesDatabase/SearchTable.swift
@@ -33,7 +33,7 @@ final class ArticleSearchInfo: Hashable {
lazy var bodyForIndex: String = {
let s = preferredText.rsparser_stringByDecodingHTMLEntities()
- return s.rs_string(byStrippingHTML: 0).rs_stringWithCollapsedWhitespace()
+ return s.strippingHTML().collapsingWhitespace
}()
init(articleID: String, title: String?, contentHTML: String?, contentText: String?, summary: String?, searchRowID: Int?) {
diff --git a/Mac/CrashReporter/CrashReporter.swift b/Mac/CrashReporter/CrashReporter.swift
index be0a8b9f5..28138fb94 100644
--- a/Mac/CrashReporter/CrashReporter.swift
+++ b/Mac/CrashReporter/CrashReporter.swift
@@ -30,7 +30,7 @@ struct CrashLog {
return nil
}
self.content = s
- self.contentHash = s.rs_md5Hash()
+ self.contentHash = s.md5HashString
self.path = path
self.modificationDate = modificationDate
}
diff --git a/Mac/MainWindow/AddFeed/AddFeedController.swift b/Mac/MainWindow/AddFeed/AddFeedController.swift
index 167ffdf26..77071e7cd 100644
--- a/Mac/MainWindow/AddFeed/AddFeedController.swift
+++ b/Mac/MainWindow/AddFeed/AddFeedController.swift
@@ -99,7 +99,7 @@ private extension AddFeedController {
var urlStringFromPasteboard: String? {
if let urlString = NSPasteboard.urlString(from: NSPasteboard.general) {
- return urlString.rs_normalizedURL()
+ return urlString.normalizedURL
}
return nil
}
diff --git a/Mac/MainWindow/AddFeed/AddFeedWindowController.swift b/Mac/MainWindow/AddFeed/AddFeedWindowController.swift
index df5f87868..f5ed2c9e8 100644
--- a/Mac/MainWindow/AddFeed/AddFeedWindowController.swift
+++ b/Mac/MainWindow/AddFeed/AddFeedWindowController.swift
@@ -36,7 +36,7 @@ class AddFeedWindowController : NSWindowController {
private var userEnteredTitle: String? {
var s = nameTextField.stringValue
- s = s.rs_stringWithCollapsedWhitespace()
+ s = s.collapsingWhitespace
if s.isEmpty {
return nil
}
@@ -93,7 +93,7 @@ class AddFeedWindowController : NSWindowController {
@IBAction func addFeed(_ sender: Any?) {
let urlString = urlTextField.stringValue
- let normalizedURLString = (urlString as NSString).rs_normalizedURL()
+ let normalizedURLString = urlString.normalizedURL
if normalizedURLString.isEmpty {
cancelSheet()
@@ -130,7 +130,7 @@ class AddFeedWindowController : NSWindowController {
private extension AddFeedWindowController {
private func updateUI() {
- addButton.isEnabled = urlTextField.stringValue.rs_stringMayBeURL()
+ addButton.isEnabled = urlTextField.stringValue.mayBeURL
}
func cancelSheet() {
diff --git a/Mac/MainWindow/Detail/DetailStatusBarView.swift b/Mac/MainWindow/Detail/DetailStatusBarView.swift
index 0d1bfb6de..eea5f72d2 100644
--- a/Mac/MainWindow/Detail/DetailStatusBarView.swift
+++ b/Mac/MainWindow/Detail/DetailStatusBarView.swift
@@ -67,7 +67,7 @@ private extension DetailStatusBarView {
func updateLinkForDisplay() {
if let mouseoverLink = mouseoverLink, !mouseoverLink.isEmpty {
- linkForDisplay = (mouseoverLink as NSString).rs_stringByStrippingHTTPOrHTTPSScheme()
+ linkForDisplay = mouseoverLink.strippingHTTPOrHTTPSScheme
}
else {
linkForDisplay = nil
diff --git a/Mac/MainWindow/NNW3/NNW3Document.swift b/Mac/MainWindow/NNW3/NNW3Document.swift
index 1352a9634..9d7fbed7f 100644
--- a/Mac/MainWindow/NNW3/NNW3Document.swift
+++ b/Mac/MainWindow/NNW3/NNW3Document.swift
@@ -95,18 +95,18 @@ private struct NNW3Folder {
extension NNW3Folder: OPMLRepresentable {
func OPMLString(indentLevel: Int, allowCustomAttributes: Bool) -> String {
- let t = title?.rs_stringByEscapingSpecialXMLCharacters() ?? ""
+ let t = title?.escapingSpecialXMLCharacters ?? ""
guard let children = children else {
// Empty folder.
- return "\n".rs_string(byPrependingNumberOfTabs: indentLevel)
+ return "\n".prepending(tabCount: indentLevel)
}
- var s = "\n".rs_string(byPrependingNumberOfTabs: indentLevel)
+ var s = "\n".prepending(tabCount: indentLevel)
for child in children {
s += child.OPMLString(indentLevel: indentLevel + 1)
}
- s += "\n".rs_string(byPrependingNumberOfTabs: indentLevel)
+ s += "\n".prepending(tabCount: indentLevel)
return s
}
}
@@ -131,12 +131,12 @@ private struct NNW3Feed {
extension NNW3Feed: OPMLRepresentable {
func OPMLString(indentLevel: Int, allowCustomAttributes: Bool) -> String {
- let t = title?.rs_stringByEscapingSpecialXMLCharacters() ?? ""
- let p = homePageURL?.rs_stringByEscapingSpecialXMLCharacters() ?? ""
- let f = feedURL?.rs_stringByEscapingSpecialXMLCharacters() ?? ""
+ let t = title?.escapingSpecialXMLCharacters ?? ""
+ let p = homePageURL?.escapingSpecialXMLCharacters ?? ""
+ let f = feedURL?.escapingSpecialXMLCharacters ?? ""
var s = "\n"
- s = s.rs_string(byPrependingNumberOfTabs: indentLevel)
+ s = s.prepending(tabCount: indentLevel)
return s
}
diff --git a/Mac/MainWindow/Sidebar/PasteboardWebFeed.swift b/Mac/MainWindow/Sidebar/PasteboardWebFeed.swift
index 1c84cb78b..31612ded9 100644
--- a/Mac/MainWindow/Sidebar/PasteboardWebFeed.swift
+++ b/Mac/MainWindow/Sidebar/PasteboardWebFeed.swift
@@ -37,9 +37,9 @@ struct PasteboardWebFeed: Hashable {
let isLocalFeed: Bool
init(url: String, webFeedID: String?, homePageURL: String?, name: String?, editedName: String?, accountID: String?, accountType: AccountType?) {
- self.url = url.rs_normalizedURL()
+ self.url = url.normalizedURL
self.webFeedID = webFeedID
- self.homePageURL = homePageURL?.rs_normalizedURL()
+ self.homePageURL = homePageURL?.normalizedURL
self.name = name
self.editedName = editedName
self.accountID = accountID
@@ -93,7 +93,7 @@ struct PasteboardWebFeed: Hashable {
}
if let foundType = pasteboardType {
if let possibleURLString = pasteboardItem.string(forType: foundType) {
- if possibleURLString.rs_stringMayBeURL() {
+ if possibleURLString.mayBeURL {
self.init(url: possibleURLString, webFeedID: nil, homePageURL: nil, name: nil, editedName: nil, accountID: nil, accountType: nil)
return
}
diff --git a/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift b/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift
index 351352b16..b962ba8e6 100644
--- a/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift
+++ b/Mac/MainWindow/Timeline/ArticlePasteboardWriter.swift
@@ -78,7 +78,7 @@ private extension ArticlePasteboardWriter {
s += "\(summary)\n\n"
}
else if let html = article.contentHTML {
- let convertedHTML = html.rs_stringByConvertingToPlainText()
+ let convertedHTML = html.convertingToPlainText()
s += "\(convertedHTML)\n\n"
}
diff --git a/Mac/Preferences/General/GeneralPrefencesViewController.swift b/Mac/Preferences/General/GeneralPrefencesViewController.swift
index 4a47f7ad4..57996a485 100644
--- a/Mac/Preferences/General/GeneralPrefencesViewController.swift
+++ b/Mac/Preferences/General/GeneralPrefencesViewController.swift
@@ -177,7 +177,7 @@ private struct RSSReader: Hashable {
let name = (path as NSString).lastPathComponent
self.name = name
if name.hasSuffix(".app") {
- self.nameMinusAppSuffix = name.rs_string(byStrippingSuffix: ".app", caseSensitive: false)
+ self.nameMinusAppSuffix = name.stripping(suffix: ".app")
}
else {
self.nameMinusAppSuffix = name
diff --git a/Mac/Scriptability/AppDelegate+Scriptability.swift b/Mac/Scriptability/AppDelegate+Scriptability.swift
index 84bed12b1..68decde44 100644
--- a/Mac/Scriptability/AppDelegate+Scriptability.swift
+++ b/Mac/Scriptability/AppDelegate+Scriptability.swift
@@ -44,8 +44,8 @@ extension AppDelegate : AppDelegateAppleEvents {
return
}
- let normalizedURLString = urlString.rs_normalizedURL()
- if !normalizedURLString.rs_stringMayBeURL() {
+ let normalizedURLString = urlString.normalizedURL
+ if !normalizedURLString.mayBeURL {
return
}
diff --git a/Shared/ArticleStyles/ArticleStylesManager.swift b/Shared/ArticleStyles/ArticleStylesManager.swift
index df70605b3..ddc23b3f8 100644
--- a/Shared/ArticleStyles/ArticleStylesManager.swift
+++ b/Shared/ArticleStyles/ArticleStylesManager.swift
@@ -159,7 +159,7 @@ private func filenameWithStyleSuffixRemoved(_ filename: String) -> String {
for oneSuffix in styleSuffixes {
if filename.hasSuffix(oneSuffix) {
- return (filename as NSString).rs_string(byStrippingSuffix: oneSuffix, caseSensitive: false)
+ return filename.stripping(suffix: oneSuffix)
}
}
diff --git a/Shared/Data/ArticleStringFormatter.swift b/Shared/Data/ArticleStringFormatter.swift
index 56364690f..4fb9249ae 100644
--- a/Shared/Data/ArticleStringFormatter.swift
+++ b/Shared/Data/ArticleStringFormatter.swift
@@ -65,8 +65,8 @@ struct ArticleStringFormatter {
s = s.replacingOccurrences(of: "\r", with: "")
s = s.replacingOccurrences(of: "\t", with: "")
s = s.rsparser_stringByDecodingHTMLEntities()
- s = s.rs_stringByTrimmingWhitespace()
- s = s.rs_stringWithCollapsedWhitespace()
+ s = s.trimmingWhitespace
+ s = s.collapsingWhitespace
let maxLength = 1000
if s.count < maxLength {
@@ -89,9 +89,9 @@ struct ArticleStringFormatter {
return cachedBody
}
var s = body.rsparser_stringByDecodingHTMLEntities()
- s = s.rs_string(byStrippingHTML: 250)
- s = s.rs_stringByTrimmingWhitespace()
- s = s.rs_stringWithCollapsedWhitespace()
+ s = s.strippingHTML(maxCharacters: 250)
+ s = s.trimmingWhitespace
+ s = s.collapsingWhitespace
if s == "Comments" { // Hacker News.
s = ""
}
diff --git a/Shared/Exporters/OPMLExporter.swift b/Shared/Exporters/OPMLExporter.swift
index c177431ef..cba135a17 100644
--- a/Shared/Exporters/OPMLExporter.swift
+++ b/Shared/Exporters/OPMLExporter.swift
@@ -14,7 +14,7 @@ struct OPMLExporter {
static func OPMLString(with account: Account, title: String) -> String {
- let escapedTitle = title.rs_stringByEscapingSpecialXMLCharacters()
+ let escapedTitle = title.escapingSpecialXMLCharacters
let openingText =
"""
diff --git a/Shared/Extensions/RSImage-Extensions.swift b/Shared/Extensions/RSImage-Extensions.swift
index 505079fbb..30a3d570b 100644
--- a/Shared/Extensions/RSImage-Extensions.swift
+++ b/Shared/Extensions/RSImage-Extensions.swift
@@ -6,7 +6,12 @@
// Copyright © 2019 Ranchero Software. All rights reserved.
//
-import Foundation
+#if os(macOS)
+import AppKit
+#else
+import UIKit
+#endif
+
import RSCore
extension RSImage {
diff --git a/Shared/Favicons/FaviconDownloader.swift b/Shared/Favicons/FaviconDownloader.swift
index a49ad6dfd..eee115711 100644
--- a/Shared/Favicons/FaviconDownloader.swift
+++ b/Shared/Favicons/FaviconDownloader.swift
@@ -114,7 +114,7 @@ final class FaviconDownloader {
func favicon(withHomePageURL homePageURL: String) -> IconImage? {
- let url = homePageURL.rs_normalizedURL()
+ let url = homePageURL.normalizedURL
if let url = URL(string: homePageURL) {
if url.host == "nnw.ranchero.com" {
diff --git a/Shared/Favicons/SingleFaviconDownloader.swift b/Shared/Favicons/SingleFaviconDownloader.swift
index cf871ab7b..a5e0a7e91 100644
--- a/Shared/Favicons/SingleFaviconDownloader.swift
+++ b/Shared/Favicons/SingleFaviconDownloader.swift
@@ -34,7 +34,7 @@ final class SingleFaviconDownloader {
private let queue: DispatchQueue
private var diskKey: String {
- return (faviconURL as NSString).rs_md5Hash()
+ return faviconURL.md5HashString
}
init(faviconURL: String, homePageURL: String?, diskCache: BinaryDiskCache, queue: DispatchQueue) {
diff --git a/Shared/Images/ImageDownloader.swift b/Shared/Images/ImageDownloader.swift
index 289ef74fe..bfae2fce2 100644
--- a/Shared/Images/ImageDownloader.swift
+++ b/Shared/Images/ImageDownloader.swift
@@ -128,7 +128,7 @@ private extension ImageDownloader {
func diskKey(_ url: String) -> String {
- return (url as NSString).rs_md5Hash()
+ return url.md5HashString
}
func postImageDidBecomeAvailableNotification(_ url: String) {
diff --git a/iOS/Add/AddWebFeedViewController.swift b/iOS/Add/AddWebFeedViewController.swift
index e2f8a883f..4fb5484bf 100644
--- a/iOS/Add/AddWebFeedViewController.swift
+++ b/iOS/Add/AddWebFeedViewController.swift
@@ -30,9 +30,9 @@ class AddWebFeedViewController: UITableViewController, AddContainerViewControlle
super.viewDidLoad()
- if initialFeed == nil, let urlString = UIPasteboard.general.string as NSString? {
- if urlString.rs_stringMayBeURL() {
- initialFeed = urlString.rs_normalizedURL()
+ if initialFeed == nil, let urlString = UIPasteboard.general.string {
+ if urlString.mayBeURL {
+ initialFeed = urlString.normalizedURL
}
}
@@ -73,7 +73,7 @@ class AddWebFeedViewController: UITableViewController, AddContainerViewControlle
func add() {
let urlString = urlTextField.text ?? ""
- let normalizedURLString = (urlString as NSString).rs_normalizedURL()
+ let normalizedURLString = urlString.normalizedURL
guard !normalizedURLString.isEmpty, let url = URL(string: normalizedURLString) else {
delegate?.processingDidCancel()
@@ -118,7 +118,7 @@ class AddWebFeedViewController: UITableViewController, AddContainerViewControlle
}
@objc func textDidChange(_ note: Notification) {
- delegate?.readyToAdd(state: urlTextField.text?.rs_stringMayBeURL() ?? false)
+ delegate?.readyToAdd(state: urlTextField.text?.mayBeURL ?? false)
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {