//
// https://mczachurski.dev
// Copyright © 2022 Marcin Czachurski and the repository contributors.
// Licensed under the MIT License.
//
import UIKit
import SwiftUI
struct HTMLFormattedText: UIViewRepresentable {
@EnvironmentObject var applicationState: ApplicationState
private let text: String
private let textView = UITextView()
private let fontSize: Int
private let width: Int
init(_ content: String, withFontSize fontSize: Int = 16, andWidth width: Int? = nil) {
self.text = content
self.fontSize = fontSize
self.width = width ?? Int(UIScreen.main.bounds.width) - 16
}
func makeUIView(context: UIViewRepresentableContext) -> UITextView {
textView.widthAnchor.constraint(equalToConstant: CGFloat(self.width)).isActive = true
textView.isSelectable = false
textView.isUserInteractionEnabled = false
textView.translatesAutoresizingMaskIntoConstraints = false
textView.isScrollEnabled = false
textView.backgroundColor = UIColor(.clear)
return textView
}
func updateUIView(_ uiView: UITextView, context: UIViewRepresentableContext) {
Task { @MainActor in
if let attributeText = self.converHTML(text: text) {
textView.attributedText = attributeText
} else {
textView.text = String.empty()
}
}
}
private func converHTML(text: String) -> NSAttributedString?{
guard let data = text.data(using: .utf16) else {
return nil
}
let largeAttributes = [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: CGFloat(self.fontSize)),
NSAttributedString.Key.foregroundColor: UIColor(.mainTextColor)
]
let linkAttributes = [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: CGFloat(self.fontSize)),
NSAttributedString.Key.foregroundColor: UIColor(applicationState.tintColor.color())
]
if let attributedString = try? NSMutableAttributedString(data: data,
options: [.documentType: NSAttributedString.DocumentType.html],
documentAttributes: nil) {
attributedString.enumerateAttributes(in: NSRange(0..Danish-made 1st class kebab
Say yes thanks to 2kg. delicious kebab, which is confused and cooked.
Yes thanks for 149.95
Now you can make the most delicious sandwiches, kebab mix and much more at home
")
}
}