AttributedText is a view for displaying some HTML-tagged text using SwiftUI Text View.
A simple example of usage.
Code example:
AttributedText("A unit of <i>length</i> equal to <b>one hundred-millionth of a centimetre</b>, 10<sup>−10</sup> metre, used mainly to express <u>wavelengths and interatomic distances</u>.")
Result:
You can clone the repo and run the AttributedTextExample project to explore the AttributedText
features.
These are the main points to pay attention to.
-
You can define the tags you need or use the defaults.
You need to set the required tags and provide associated closures. Each closure must be a modifier that is applied to the SwiftUI Text View when a specific tag is encountered.
@main struct ExampleApp: App { init() { AttributedText.tags = [ "b": { $0.bold() }, "i": { $0.italic() } ] } }
In this case only <b> and <i> tags will be processed. All other tags will be ignored or deleted.
private let tags: Dictionary<String, (Text) -> (Text)> = [ // Set the necessary values. ] var body: some View { AttributedText("Text", tags: tags) }
-
Basic modifiers can still be applied, such as changing the font and color of the text.
Code example:
AttributedText("This is <b>bold</b> and <i>italic</i> text.") .foregroundColor(.blue) .font(.title)
Result:
-
Handles unopened/unclosed tags.
Code example:
AttributedText("This is italic</i> and <b>bold text.")
Result:
-
Supports overlapping tags.
Code example:
AttributedText("This is <b>bold only, <i>bold and italic</b> and italic only</i> text.")
Result:
-
Deletes tags that have no modifiers.
Code example:
AttributedText("<unknown>This is <b>bold</b> and <i>italic</i> text.</unknown>")
Result:
-
Does not handle HTML characters such as
&
.Code example:
AttributedText("This is <b>bold</b> & <i>italic</i> text.")
Result:
-
Only single-word tags are supported. Tags with more than one word or containing any characters besides letters or numbers are ignored and not removed.
Code example:
AttributedText("This is <tag attribute1=\"value1\"> <b>bold</b> and <i>italic</i> text</tag>.")
Result:
- In Xcode 11 or greater select
File ▸ Swift Packages ▸ Add Package Dependency
. - Paste the link to this repo https://github.com/Iaenhaall/AttributedText.git and click Next.
- Define the package options for this package or select the default. Click Next.
- Xcode downloads the code from GitHub and adds the package to the your project target. Click Finish.
- Add AttributedText.swift and HTML2TextParser.swift files to your project.