Skip to content

Instantly share code, notes, and snippets.

@alexpersian
Created June 8, 2023 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexpersian/82746a931fa31b1ba0b6526e5887e25a to your computer and use it in GitHub Desktop.
Save alexpersian/82746a931fa31b1ba0b6526e5887e25a to your computer and use it in GitHub Desktop.
func processHTML(_ string: String) -> NSAttributedString {
let stringData = string.data(using: .utf8)!
let attrString = try! NSMutableAttributedString(
data: stringData,
options: [.documentType: NSAttributedString.DocumentType.html],
documentAttributes: nil
)
var boldRanges: [NSRange] = []
var italicRanges: [NSRange] = []
var regularRanges: [NSRange] = []
attrString.enumerateAttribute(.font, in: NSRange(0..<attrString.length), options: .longestEffectiveRangeNotRequired) { value, range, pointer in
guard let currentFont = value as? UIFont else { return }
if currentFont.fontDescriptor.symbolicTraits.contains(.traitBold) {
boldRanges.append(range)
} else if currentFont.fontDescriptor.symbolicTraits.contains(.traitItalic) {
italicRanges.append(range)
} else {
regularRanges.append(range)
}
}
boldRanges.forEach { range in
attrString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.systemRed, range: range)
}
italicRanges.forEach { range in
attrString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.systemBlue, range: range)
}
regularRanges.forEach { range in
attrString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.systemGreen, range: range)
}
return attrString
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment