Swift 和 SwiftUI 的语法高亮
Swift 类,用于将代码的 String
转换为语法高亮的 AttributedString
JavaScriptCore
构建SwiftUI 视图,用于显示具有语法高亮的代码 String
.card
样式中Text
修饰符,如 .bold()
或 .font()
Highlight
环境条目,内存效率高创建 Highlight
的实例,并将代码 String
转换为语法高亮的 AttributedString
let someCode = """
print(\"Hello World\")
"""
let highlight = Highlight()
let attributedText = try await highlight.attributedText(someCode)
添加 language:
参数以设置语言并禁用自动语言检测
let attributedText = try await highlight.attributedText(someCode, language: "swift")
使用 colors:
参数更改颜色主题。
let attributedText = try await highlight.attributedText(someCode, colors: .dark(.github))
使用 .custom
选项应用自定义 CSS 主题。 有关详细信息,请参阅 highlight.js 主题指南
let someCSS = """
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
}
"""
let attributedText = try await highlight.attributedText(someCode, colors: .custom(css: someCSS))
.request()
函数返回带有额外信息的 HighlightResult
let result: HighlightResult = try await highlight.request(someCode)
print(result)
HighlightResult(
attributedText: "...",
relevance: 5,
language: "swift",
languageName: "Swift?",
backgroundColor: #1F2024FF,
hasIllegal: false,
isUndefined: false)
创建一个包含一些代码的 CodeText
视图
let someCode: String = """
print(\"Hello World\")
"""
var body: some View {
CodeText(someCode)
}
字体设计始终为 .monospaced
。可以应用其他文本修饰符
CodeText(someCode)
.font(.callout)
.fontWeight(.semibold)
添加 .highlightLanguage()
修饰符以设置语言并禁用自动检测
CodeText(someCode)
.highlightLanguage(.swift)
添加 .codeTextColors()
修饰符以设置颜色主题。内置颜色主题会自动使用深色模式更新为相应的深色变体。
CodeText(someCode)
.codeTextColors(.github)
选择 .custom
选项以使用任何自定义 CSS 颜色主题。 有关更多信息,请参阅官方 highlight.js 主题指南。
CodeText(someCode)
.codeTextColors(.custom(dark: .custom(css: someDarkCSS), light: .custom(css: someLightCSS)))
默认样式为 .plain
,没有任何背景或填充。 有些颜色主题使用其相应的背景颜色更容易阅读。 添加 .codeTextStyle()
修饰符并选择 .card
样式以显示背景
CodeText(someCode)
.codeTextStyle(.card)
.card
样式有一些自定义选项,例如
CodeText(someCode)
.codeTextStyle(.card(cornerRadius: 0, stroke: .separator, verticalPadding: 12))
添加 .onHighlightSuccess()
以获取高亮结果,包括检测到的语言、相关性评分、背景颜色和其他详细信息。 意外错误不太可能发生,但如果需要进行调试,可以使用 .onHighlightFailure()
进行处理。
CodeText(someCode)
.onHighlightSuccess { result in
...
}
.onHighlightFailure { error in
...
}
还有一个组合的 .onHighlightResult()
,相当于上面的两个回调。
CodeText(someCode)
.onHighlightResult { result in
switch result {
case .success:
...
case .failure:
...
}
}
先前存储的高亮结果可以传递给 CodeText
。 与 .onHighlightSuccess()
结合使用,可以在视图可能频繁重新出现时(例如在列表视图中)保留结果
let someCode: String = """
print(\"Hello World\")
"""
@State var result: HighlightResult?
var body: some View {
List {
...
CodeText(someCode, result: result)
.onHighlightSuccess { result in
self.result = result
}
...
}
}
File
> Add packages...
https://github.com/appstefan/highlightswift
并单击 Add Package
在 Package.swift
中,将此存储库添加为依赖项
dependencies: [
.package(url: "https://github.com/appstefan/highlightswift.git", from: "1.1")
],
targets: [
.target(
name: "YourPackageName",
dependencies: ["HighlightSwift"]
)
]
Stefan, thrower_ranges.0d@icloud.com
HighlightSwift 在 MIT 许可证下可用。 请参阅 LICENSE.md 文件。Highlight.js 在 BSD 许可证下可用。 请参阅 LICENSE.md 文件。