mtj0928/syntaxink
A syntax highlighter for Swift.
Usage
You can get AttributedString from String easily.
let sourceCode = """
let person = Person(name: "matsuji")
try! await person.say("Hi, SyntaxInk can highlight Swift code!")
"""
#Preview {
let syntaxHighlighter = SwiftSyntaxHighlighter(theme: .default)
let attributedString = syntaxHighlighter.highlight(sourceCode)
Text(attributedString)
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.background(Color.xcodeBackgroundDefaultColor)
}This is the results of the preview.
<img width="734" alt="screenshot" src="https://github.com/user-attachments/assets/d51f8e9c-acff-4e44-887e-dcf997beeae8" />
You can specify dafaultDark as a theme and xcodeBackgroundDefaultDarkColor as a background.
#Preview {
let syntaxHighlighter = SwiftSyntaxHighlighter(theme: .defaultDark) // Change the theme
// ...
Text(attributedString)
// ...
.background(Color.xcodeBackgroundDefaultDarkColor) // Change the background
}<img width="734" alt="screenshot_dark" src="https://github.com/user-attachments/assets/a1c015bd-fc1f-49e9-899d-d2bcf27c5dc9" />
Theme
SyntaxInk supports custom theme feature, and you can control the color and font.
Swift
Please build SyntaxStyle in a closure of SwiftTheme. The kind corresponds to Xcode's theme kind.
let theme = SwiftTheme { kind in
var base = SyntaxStyle(
font: .system(size: 16, weight: .medium, design: .monospaced),
color: SyntaxColor(red: 255, green: 255, blue: 255)
)
switch kind {
case .keywords:
style.font.weight = .bold
default: break
}
return style
}
let syntaxHighlighter = SwiftSyntaxHighlighter(theme: theme)Install
let package = Package(
// ...
dependencies: [
.package(url: "https://github.com/mtj0928/SyntaxInk.git", from: "0.0.1"),
],
targets: [
.target(name: "YOU_TARGET", dependencies: [
.product(name: "SwiftSyntaxInk", package: "SyntaxInk"),
.product(name: "SyntaxInk", package: "SyntaxInk")
])
]
)Support Environment
- Swift 6.0+
- macOS 12+, iOS 15+, tvOS 15+, watchOS 8+, visionOS 1+
Package Metadata
Repository: mtj0928/syntaxink
Default branch: main
README: README.md