mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-01-11 01:04:05 +01:00
Start AtomParser.
This commit is contained in:
parent
a85068f286
commit
88b315554c
@ -8,22 +8,62 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import SAX
|
import SAX
|
||||||
|
import DateParser
|
||||||
|
|
||||||
// RSSParser wraps the Objective-C RSAtomParser.
|
final class AtomParser {
|
||||||
//
|
|
||||||
// The Objective-C parser creates RSParsedFeed, RSParsedArticle, etc.
|
private var parserData: ParserData
|
||||||
// This wrapper then creates ParsedFeed, ParsedItem, etc. so that it creates
|
private var feedURL: String {
|
||||||
// the same things that JSONFeedParser and RSSInJSONParser create.
|
parserData.url
|
||||||
//
|
}
|
||||||
// In general, you should see FeedParser.swift for all your feed-parsing needs.
|
private var data: Data {
|
||||||
|
parserData.data
|
||||||
|
}
|
||||||
|
|
||||||
|
private let feed: RSSFeed
|
||||||
|
private var articles = [RSSArticle]()
|
||||||
|
private var currentArticle: RSSArticle? {
|
||||||
|
articles.last
|
||||||
|
}
|
||||||
|
|
||||||
|
static func parsedFeed(with parserData: ParserData) -> RSSFeed {
|
||||||
|
|
||||||
|
let parser = AtomParser(parserData)
|
||||||
|
parser.parse()
|
||||||
|
return parser.feed
|
||||||
|
}
|
||||||
|
|
||||||
|
init(_ parserData: ParserData) {
|
||||||
|
self.parserData = parserData
|
||||||
|
self.feed = RSSFeed(urlString: parserData.url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extension AtomParser {
|
||||||
|
|
||||||
|
func parse() {
|
||||||
|
|
||||||
|
let saxParser = SAXParser(delegate: self, data: data)
|
||||||
|
saxParser.parse()
|
||||||
|
feed.articles = articles
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension AtomParser: SAXParserDelegate {
|
||||||
|
|
||||||
|
public func saxParser(_ saxParser: SAXParser, xmlStartElement localName: XMLPointer, prefix: XMLPointer?, uri: XMLPointer?, namespaceCount: Int, namespaces: UnsafePointer<XMLPointer?>?, attributeCount: Int, attributesDefaultedCount: Int, attributes: UnsafePointer<XMLPointer?>?) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public func saxParser(_ saxParser: SAXParser, xmlEndElement localName: XMLPointer, prefix: XMLPointer?, uri: XMLPointer?) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public func saxParser(_ saxParser: SAXParser, xmlCharactersFound: XMLPointer, count: Int) {
|
||||||
|
|
||||||
|
// Required method.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//public struct AtomParser {
|
|
||||||
//
|
|
||||||
// public static func parse(_ parserData: ParserData) -> ParsedFeed? {
|
|
||||||
//
|
|
||||||
// if let rsParsedFeed = RSAtomParser.parseFeed(with: parserData) {
|
|
||||||
// return RSParsedFeedTransformer.parsedFeed(rsParsedFeed)
|
|
||||||
// }
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user