NativeMarkKit

Tests Swift Package Manager compatible

NativeMark 是 Markdown 的一种变体,旨在由原生应用程序渲染(即,它编译为原生类型,而不是 HTML)。具体来说,它实现了 CommonMark 规范,但有一个重要的例外:原始 HTML 标签。 NativeMark 将把原始 HTML 标签视为纯文本。它还支持 Github Flavored Markdown 的一些扩展,例如删除线。

NativeMark 的目标是提供一种简单直观的方式,在原生应用程序中创建样式化文本。 NativeMarkKit 是 macOS、iOS 和 tvOS 平台的 NativeMark 实现。 NativeMarkKit 支持深色模式、动态类型,并在可用时支持 SwiftUI。

要求

安装

目前,NativeMarkKit 仅作为 Swift 包提供。

...使用 Package.swift 文件

打开 Package.swift 文件并进行编辑

  1. 将 NativeMarkKit 仓库添加到 dependencies 数组。
  2. 将 NativeMarkKit 添加为将使用它的目标的依赖项
// 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

...使用 Xcode

使用项目中的 Swift Packages 选项卡添加 NativeMarkKit

  1. 打开要添加 NativeMarkKit 的 Xcode 工作区或项目
  2. 在文件浏览器中,选择项目以在右侧显示项目/目标的列表
  3. 在右侧的项目/目标列表中,选择项目
  4. 选择“Swift Packages”选项卡
  5. 单击“+”按钮以添加包
  6. 在“选择 Package Repository”表中,搜索“https://github.com/andyfinnell/NativeMarkKit.git
  7. 单击“下一步”
  8. 选择所需的版本规则
  9. 单击“下一步”
  10. 选择要将 NativeMarkKit 添加到的目标
  11. 单击“完成”

用法

...使用视图

使用 NativeMarkKit 的最简单方法是使用 NativeMarkLabel

import NativeMarkKit

let label = NativeMarkLabel(nativeMark: "**Hello**, _world_!")

// Assuming myView is an NSView or UIView
myView.addSubview(label)

...使用 SwiftUI

NativeMarkKit 有一个围绕 NativeMarkLabel 的基本 SwiftUI 封装器,称为 NativeMarkText

import SwiftUI
import NativeMarkKit

struct ContentView: View {
    var body: some View {
         NativeMarkText("**Hello**, _world_!")
    }
}

...样式

NativeMarkKit 提供了一个样式表数据结构,因此可以自定义 NativeMark 以匹配应用程序的样式。默认情况下,NativeMarkLabelNativeMarkText 使用 .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