语法高亮发布插件

此插件旨在为您的 Publish 站点添加语法高亮(支持多种语言),且操作简便。目前支持使用以下方式定义语法:

安装

Swift 包管理器

您可以通过 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

Syntax

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

大多数编程语言都有 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)),
])

Syntax

Splash

如果您之前已经在您的站点上使用 Splash,并且投入精力添加了自定义 Splash 语法。没问题。我们也可以使用它

import SyntaxHighlightPublishPlugin

extension Grammar {
    static let myLanguage = Grammar(name: "MyLanguage", grammar: MyGrammar())
}

try MyPublishSite().publish(using: [
    ...
    .installPlugin(.syntaxHighlighting(.myLanguage)),
])

贡献

欢迎并鼓励贡献代码!

许可

SyntaxHighlightPublishPlugin 基于 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。