HighlightSwift

Swift 和 SwiftUI 的语法高亮

CodeCard

目录

Highlight

Swift 类,用于将代码的 String 转换为语法高亮的 AttributedString

CodeText

SwiftUI 视图,用于显示具有语法高亮的代码 String

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

创建一个包含一些代码的 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
            }
        ...
    }
}

安装

项目

  1. 在 Xcode 中,转到 File > Add packages...
  2. 在字段中输入 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 文件。