mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2024-12-25 01:01:21 +01:00
Call out to RSParser for entity decoding
This commit is contained in:
parent
e8d39ded0d
commit
d06e7447f0
@ -6,6 +6,8 @@
|
|||||||
// Copyright © 2020 Ranchero Software. All rights reserved.
|
// Copyright © 2020 Ranchero Software. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import RSParser
|
||||||
|
|
||||||
#if canImport(AppKit)
|
#if canImport(AppKit)
|
||||||
import AppKit
|
import AppKit
|
||||||
typealias Font = NSFont
|
typealias Font = NSFont
|
||||||
@ -124,46 +126,6 @@ extension NSAttributedString {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static func decode(entity: String) -> String {
|
|
||||||
// TODO: Support all named entities
|
|
||||||
|
|
||||||
guard entity.hasPrefix("&"), entity.hasSuffix(";") else { return entity }
|
|
||||||
|
|
||||||
let name = entity.dropFirst().dropLast()
|
|
||||||
|
|
||||||
if name.hasPrefix("#") {
|
|
||||||
let value = name.dropFirst()
|
|
||||||
var number: Int? = nil
|
|
||||||
|
|
||||||
if value.hasPrefix("x") {
|
|
||||||
number = Int(value.dropFirst(), radix: 16)
|
|
||||||
} else {
|
|
||||||
number = Int(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
if let number = number, let c = UnicodeScalar(number) {
|
|
||||||
return String(c)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch name {
|
|
||||||
case "lt":
|
|
||||||
return "<"
|
|
||||||
case "gt":
|
|
||||||
return ">"
|
|
||||||
case "amp":
|
|
||||||
return "&"
|
|
||||||
case "quot":
|
|
||||||
return "\""
|
|
||||||
case "apos":
|
|
||||||
return "'"
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return entity
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns an attributed string initialized from HTML text containing basic inline stylistic tags.
|
/// Returns an attributed string initialized from HTML text containing basic inline stylistic tags.
|
||||||
///
|
///
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
@ -255,7 +217,7 @@ extension NSAttributedString {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
result.mutableString.append(Self.decode(entity: entity))
|
result.mutableString.append(entity.decodedEntity)
|
||||||
|
|
||||||
if let lastchar = lastchar { result.mutableString.append(String(lastchar)) }
|
if let lastchar = lastchar { result.mutableString.append(String(lastchar)) }
|
||||||
} else {
|
} else {
|
||||||
@ -360,3 +322,9 @@ struct CountedSet<Element> where Element: Hashable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension String {
|
||||||
|
var decodedEntity: String {
|
||||||
|
(self as NSString).rsparser_stringByDecodingHTMLEntities() as String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user