A package for syntax highlighting in Swift and SwiftUI
HighlightSwift ?
Syntax Highlighting in Swift and SwiftUI
Contents
Highlight
Convert any String
of code into a syntax highlighted AttributedString
- ? Automatic language detection
- ? Works for 50 common languages
- ? Choose from 30 classic color styles
- ? Built with highlight.js and
JavaScriptCore
- ?️ Supported on iOS, iPadOS, macOS, and tvOS
CodeText
Drop-in replacement for the SwiftUI Text
view
- ⬜️ Clear or style-colored background
- ? Supports most
Text
modifiers like.font()
- ? Color style syncs automatically with Dark Mode
CodeCard
Simple iOS card view built with the CodeText
view
- ? Displays the detected language
- ? Tap for style controls, double tap to reset
How to use
Highlight
Convert a String
of code into a syntax highlighted AttributedString
:
let text: String = """
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
"""
let result = try await Highlight.code(text)
let attributedText: AttributedString = result.text
The result also includes the detected language and other details:
let illegal: Bool = result.illegal
let language: String = result.language
let relevance: Int32 = result.relevance
let languageName: String = result.languageName
let backgroundColor: Color = result.backgroundColor
Use the language:
parameter to skip automatic detection:
let highlightResult = try await Highlight.code(text, language: "swift")
Use the style:
parameter to set the highlight style and color scheme:
let highlightResult = try await Highlight.code(text, style: .dark(.solarFlare))
CodeText
Create a CodeText
view with a String
of code:
let text: String = """
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
"""
var body: some View {
CodeText(text)
}
Most Text
modifiers like .font()
work as normal, just the font design and width cannot be changed:
CodeText(text)
.font(.system(.callout, weight: .semibold))
Use the style:
and showBackground:
parameters to adjust the appearance:
CodeText(text, style: .atomOne, showBackground: true)
.font(.body)
The result callback includes the detected language and other details:
CodeText(text) { result in
let illegal: Bool = result.illegal
let language: String = result.language
let relevance: Int32 = result.relevance
let languageName: String = result.languageName
let attributedText: AttributedString = result.text
let backgroundColor: Color = result.backgroundColor
}
CodeCard
Create a CodeCard
with a String
of code:
let text: String = """
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
"""
var body: some View {
CodeCard(text)
}
Use the style:
and textStyle:
parameters to adjust the initial appearance:
CodeCard(text, style: .paraiso, textStyle: .caption)
Installation
Project
- In Xcode, go to
File
>Add packages...
- Enter
https://github.com/appstefan/highlightswift
in the field and clickAdd Package
Package
In Package.swift
add this repository as a dependency:
dependencies: [
.package(url: "https://github.com/appstefan/highlightswift.git", from: "1.0.0")
],
targets: [
.target(
name: "YourPackageName",
dependencies: ["HighlightSwift"]
)
]
Author
Stefan, thrower_ranges.0d@icloud.com
License
HighlightSwift is available under the MIT license. See the LICENSE.md file.
Highlight.js is available under the BSD license. See the LICENSE.md file.