mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Continue progress on AtomParser.
This commit is contained in:
@@ -35,7 +35,11 @@ final class AtomParser {
|
||||
private var parsingXHTML = false
|
||||
private var xhtmlString: String?
|
||||
|
||||
private var currentAuthor: RSSAuthor?
|
||||
private var parsingAuthor = false
|
||||
|
||||
private var parsingArticle = false
|
||||
private var parsingSource = false
|
||||
private var endFeedFound = false
|
||||
|
||||
static func parsedFeed(with parserData: ParserData) -> RSSFeed {
|
||||
@@ -62,8 +66,22 @@ private extension AtomParser {
|
||||
|
||||
private struct XMLName {
|
||||
static let entry = "entry".utf8CString
|
||||
static let content = "content".utf8CString
|
||||
static let summary = "summary".utf8CString
|
||||
static let link = "link".utf8CString
|
||||
static let feed = "feed".utf8CString
|
||||
static let source = "source".utf8CString
|
||||
static let author = "author".utf8CString
|
||||
}
|
||||
|
||||
func addFeedLink() {
|
||||
|
||||
}
|
||||
|
||||
func addFeedLanguage() {
|
||||
|
||||
}
|
||||
|
||||
func addArticle() {
|
||||
let article = RSSArticle(feedURL)
|
||||
articles.append(article)
|
||||
@@ -126,6 +144,44 @@ extension AtomParser: SAXParserDelegate {
|
||||
return
|
||||
}
|
||||
|
||||
if SAXEqualTags(localName, XMLName.author) {
|
||||
parsingAuthor = true
|
||||
currentAuthor = RSSAuthor()
|
||||
return
|
||||
}
|
||||
|
||||
if SAXEqualTags(localName, XMLName.source) {
|
||||
parsingSource = true
|
||||
return
|
||||
}
|
||||
|
||||
let isContentTag = SAXEqualTags(localName, XMLName.content)
|
||||
let isSummaryTag = SAXEqualTags(localName, XMLName.summary)
|
||||
|
||||
if parsingArticle && (isContentTag || isSummaryTag) {
|
||||
|
||||
if isContentTag {
|
||||
currentArticle?.language = xmlAttributes["xml:lang"]
|
||||
}
|
||||
|
||||
let contentType = xmlAttributes["type"];
|
||||
if contentType == "xhtml" {
|
||||
parsingXHTML = true
|
||||
xhtmlString = ""
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if !parsingArticle && SAXEqualTags(localName, XMLName.link) {
|
||||
addFeedLink()
|
||||
return
|
||||
}
|
||||
|
||||
if SAXEqualTags(localName, XMLName.feed) {
|
||||
addFeedLanguage()
|
||||
}
|
||||
|
||||
saxParser.beginStoringCharacters()
|
||||
}
|
||||
|
||||
public func saxParser(_ saxParser: SAXParser, xmlEndElement localName: XMLPointer, prefix: XMLPointer?, uri: XMLPointer?) {
|
||||
|
||||
@@ -14,7 +14,7 @@ final class RSSAuthor {
|
||||
var avatarURL: String?
|
||||
var emailAddress: String?
|
||||
|
||||
init(name: String?, url: String?, avatarURL: String?, emailAddress: String?) {
|
||||
init(name: String? = nil, url: String? = nil, avatarURL: String? = nil, emailAddress: String? = nil) {
|
||||
self.name = name
|
||||
self.url = url
|
||||
self.avatarURL = avatarURL
|
||||
@@ -25,11 +25,11 @@ final class RSSAuthor {
|
||||
convenience init(singleString: String) {
|
||||
|
||||
if singleString.contains("@") {
|
||||
self.init(name: nil, url: nil, avatarURL: nil, emailAddress: singleString)
|
||||
self.init(emailAddress: singleString)
|
||||
} else if singleString.lowercased().hasPrefix("http") {
|
||||
self.init(name: nil, url: singleString, avatarURL: nil, emailAddress: nil)
|
||||
self.init(url: singleString)
|
||||
} else {
|
||||
self.init(name: singleString, url: nil, avatarURL: nil, emailAddress: nil)
|
||||
self.init(name: singleString)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user