90 lines
2.4 KiB
Swift
90 lines
2.4 KiB
Swift
//
|
|
// DataNode.swift
|
|
// SwifSoup
|
|
//
|
|
// Created by Nabil Chatbi on 29/09/16.
|
|
// Copyright © 2016 Nabil Chatbi.. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/**
|
|
A data node, for contents of style, script tags etc, where contents should not show in text().
|
|
*/
|
|
open class DataNode: Node {
|
|
private static let DATA_KEY: String = "data"
|
|
|
|
/**
|
|
Create a new DataNode.
|
|
@param data data contents
|
|
@param baseUri base URI
|
|
*/
|
|
public init(_ data: String, _ baseUri: String) {
|
|
super.init(baseUri)
|
|
do {
|
|
try attributes?.put(DataNode.DATA_KEY, data)
|
|
} catch {}
|
|
|
|
}
|
|
|
|
open override func nodeName() -> String {
|
|
return "#data"
|
|
}
|
|
|
|
/**
|
|
Get the data contents of this node. Will be unescaped and with original new lines, space etc.
|
|
@return data
|
|
*/
|
|
open func getWholeData() -> String {
|
|
return attributes!.get(key: DataNode.DATA_KEY)
|
|
}
|
|
|
|
/**
|
|
* Set the data contents of this node.
|
|
* @param data unencoded data
|
|
* @return this node, for chaining
|
|
*/
|
|
@discardableResult
|
|
open func setWholeData(_ data: String) -> DataNode {
|
|
do {
|
|
try attributes?.put(DataNode.DATA_KEY, data)
|
|
} catch {}
|
|
return self
|
|
}
|
|
|
|
override func outerHtmlHead(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings)throws {
|
|
accum.append(getWholeData()) // data is not escaped in return from data nodes, so " in script, style is plain
|
|
}
|
|
|
|
override func outerHtmlTail(_ accum: StringBuilder, _ depth: Int, _ out: OutputSettings) {}
|
|
|
|
open override func toString()throws->String {
|
|
return try outerHtml()
|
|
}
|
|
|
|
/**
|
|
Create a new DataNode from HTML encoded data.
|
|
@param encodedData encoded data
|
|
@param baseUri bass URI
|
|
@return new DataNode
|
|
*/
|
|
open static func createFromEncoded(_ encodedData: String, _ baseUri: String)throws->DataNode {
|
|
let data = try Entities.unescape(encodedData)
|
|
return DataNode(data, baseUri)
|
|
}
|
|
|
|
public override func copy(with zone: NSZone? = nil) -> Any {
|
|
let clone = DataNode(attributes!.get(key: DataNode.DATA_KEY), baseUri!)
|
|
return copy(clone: clone)
|
|
}
|
|
|
|
public override func copy(parent: Node?) -> Node {
|
|
let clone = DataNode(attributes!.get(key: DataNode.DATA_KEY), baseUri!)
|
|
return copy(clone: clone, parent: parent)
|
|
}
|
|
|
|
public override func copy(clone: Node, parent: Node?) -> Node {
|
|
return super.copy(clone: clone, parent: parent)
|
|
}
|
|
}
|