此插件旨在为您的 Publish 站点添加语法高亮(支持多种语言),且操作简便。目前支持使用以下方式定义语法:
您可以通过 Swift 包管理器 安装 SyntaxHighlightPublishPlugin,只需将以下行添加到您的 Package.swift
文件中
import PackageDescription
let package = Package(
[...]
dependencies: [
.package(url: "https://github.com/nerdsupremacist/syntax-highlight-publish-plugin.git", from: "0.1.0")
]
)
您有三种方式可以为您的站点添加新的语法
您可以根据需要添加任意数量的语法。插件会根据每个代码块中的语言选择正确的语法。
try MyPublishSite().publish(using: [
...
// use plugin and include all the grammars that you want to use (note: we only ship this plugin with Swift)
.installPlugin(.syntaxHighlighting(.swift, .kotlin, .scala, .java, .json, .graphql)),
])
Syntax 是一个类似 SwiftUI 的解析器构建 DSL,您可以使用它以结构化的方式定义自定义语法。例如,以下是如何编写一个可以解析 FizzBuzz 输出的解析器
enum FizzBuzzValue {
case number(Int)
case fizz
case buzz
case fizzBuzz
}
struct FizzBuzzParser: Parser {
var body: AnyParser<[FizzBuzzValue]> {
Repeat {
Either {
IntLiteral().map { FizzBuzzValue.number($0) }
Word("FizzBuzz").map(to: FizzBuzzValue.fizzBuzz)
Word("Fizz").map(to: FizzBuzzValue.fizz)
Word("Buzz").map(to: FizzBuzzValue.buzz)
}
}
}
}
为了将其添加到我们的站点,我们使用解析器创建一个 Grammar
import SyntaxHighlightPublishPlugin
extension Grammar {
// define Fizz Buzz Grammar
static let fizzBuzz = Grammar(name: "FizzBuzz") {
FizzBuzzParser()
}
}
try MyPublishSite().publish(using: [
...
// use plugin and include your Grammar
.installPlugin(.syntaxHighlighting(.fizzbuzz)),
])
大多数编程语言都有 TextMate 定义,因此您无需花费精力从头开始编写。
您只需搜索您选择的语言的 VS Code 插件,在仓库中您很可能会找到一个 .tmLanguage 文件。这就是在您的站点上添加对该语言的支持所需的全部内容。
假设您想添加对 Kotlin 的支持
import SyntaxHighlightPublishPlugin
extension Grammar {
static let kotlin = try! Grammar(textMateFile: URL(fileURLWithPath: "/path/to/Kotlin.tmLanguage"))
}
try MyPublishSite().publish(using: [
...
.installPlugin(.syntaxHighlighting(.kotlin)),
])
如果您之前已经在您的站点上使用 Splash,并且投入精力添加了自定义 Splash 语法。没问题。我们也可以使用它
import SyntaxHighlightPublishPlugin
extension Grammar {
static let myLanguage = Grammar(name: "MyLanguage", grammar: MyGrammar())
}
try MyPublishSite().publish(using: [
...
.installPlugin(.syntaxHighlighting(.myLanguage)),
])
欢迎并鼓励贡献代码!
SyntaxHighlightPublishPlugin 基于 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。