NativeMark 是 Markdown 的一种变体,旨在由原生应用程序渲染(即,它编译为原生类型,而不是 HTML)。具体来说,它实现了 CommonMark 规范,但有一个重要的例外:原始 HTML 标签。 NativeMark 将把原始 HTML 标签视为纯文本。它还支持 Github Flavored Markdown 的一些扩展,例如删除线。
NativeMark 的目标是提供一种简单直观的方式,在原生应用程序中创建样式化文本。 NativeMarkKit 是 macOS、iOS 和 tvOS 平台的 NativeMark 实现。 NativeMarkKit 支持深色模式、动态类型,并在可用时支持 SwiftUI。
目前,NativeMarkKit 仅作为 Swift 包提供。
打开 Package.swift 文件并进行编辑
dependencies
数组。// swift-tools-version:5.1
import PackageDescription
let package = Package(
// ...snip...
dependencies: [
.package(url: "https://github.com/andyfinnell/NativeMarkKit.git", from: "2.0.0")
],
targets: [
.target(name: "MyTarget", dependencies: ["NativeMarkKit"])
]
)
然后构建以拉取依赖项
$ swift build
使用项目中的 Swift Packages 选项卡添加 NativeMarkKit
使用 NativeMarkKit 的最简单方法是使用 NativeMarkLabel
import NativeMarkKit
let label = NativeMarkLabel(nativeMark: "**Hello**, _world_!")
// Assuming myView is an NSView or UIView
myView.addSubview(label)
NativeMarkKit 有一个围绕 NativeMarkLabel
的基本 SwiftUI 封装器,称为 NativeMarkText
import SwiftUI
import NativeMarkKit
struct ContentView: View {
var body: some View {
NativeMarkText("**Hello**, _world_!")
}
}
NativeMarkKit 提供了一个样式表数据结构,因此可以自定义 NativeMark 以匹配应用程序的样式。默认情况下,NativeMarkLabel
和 NativeMarkText
使用 .default
StyleSheet
来控制 NativeMark 的呈现方式。您可以修改 .default
以创建全局默认样式表,或者您可以 .duplicate()
.default
以针对特定用例创建一次性样式表。
例如,如果您希望链接使用品牌颜色,您可以更改 .default
StyleSheet
StyleSheet.default.mutate(inline: [
.link: [
.textColor(.purple)
]
])
上面的代码将导致所有使用 .default
样式表的 NativeMark 文本都以紫色呈现链接。
如果您只想对特定的 NativeMarkLabel
(或 NativeMarkText
) 执行此操作,您可以 .duplicate()
.default
并将新的样式表传递给需要它的标签。
let purpleLinksStyleSheet = StyleSheet.default.duplicate().mutate(inline: [
.link: [
.textColor(.purple)
]
])
然后在创建 NativeMarkLabel
时
import NativeMarkKit
let label = NativeMarkLabel(nativeMark: "**Hello**, [Apple](https://www.apple.com)!", styleSheet: purpleLinksStyleSheet)
默认情况下,当单击/点击链接时,NativeMarkKit 将在默认浏览器中打开链接。如果您想提供自定义行为,您可以为 NativeMarkLabel
提供一个闭包。
import NativeMarkKit
let label = NativeMarkLabel(nativeMark: "**Hello**, [Apple](https://www.apple.com)!")
label.onOpenLink = { url in
// your custom code here
print("Opening \(url)")
}
更多 文档。
NativeMarkKit 项目谨此感谢 CommonMark 项目为记录标准化的 Markdown 变体所做的工作。 NativeMarkKit 的前端解析基于 CommonMark 的解析策略和参考实现 CommonMark.js。此外,该项目从 CommonMark 的规范派生了其解析测试套件。
对于 Github Flavored Markdown 扩展,使用了 Github Flavored Markdown Spec。