这为 Swift 提供了快速且简单的 Markdown 支持,兼容 macOS 和 Linux。它封装了 C Discount 库,该库完成了几乎所有工作。
如果你正在运行 macOS,你应该像这样安装 discount
库
brew install discount
如果你正在使用 Linux,你应该像这样安装 libmarkdown2-dev
包
sudo apt-get install libmarkdown2-dev
最后,像这样将此包添加到你的 Package.swift 文件中
.package(url: "https://github.com/twostraws/Markdown.git", .upToNextMinor(from: "1.0.0"))
根据你的系统配置,你可能需要为 Markdown 库指定一个链接器标志。例如
swift build -Xlinker -L/usr/local/lib
你可以通过从 Swift 字符串创建一个 Markdown
实例来解析文档,就像这样
if let md = Markdown(string: "# Headline Text") {
print(md.html)
}
这将打印以下 HTML
<h1>Headline Text</h1>
在创建 Markdown 实例时,你可以传入一组配置选项
.none
:标准的 Markdown 处理选项集;默认使用。.allowMarkdownInsideHTML
:即使在 HTML 内部也启用 Markdown 标签的处理。.automaticallyCreateLinks
:即使链接在尖括号之外也启用链接检测。.cData
:根据需要添加 <![CDATA[...]]>
块。.createSafeLinks
:启用对链接协议的偏执检查。.disableAlphanumericLists
:禁用字母数字列表。.disableDefinitionList
:禁用定义列表。.disableHTML
:完全禁用任何类型的原始 HTML。.disableImages
:阻止所有图像标签。.disableLinks
:阻止所有锚标签。.disableSmartFormatting
:禁用转换智能引号、破折号、省略号等。.disableStrikethrough
:禁用使用波浪号的删除线。.disableSuperscript
:禁用使用 A^2 获取上标。.disableTables
:禁用对 PHP Markdown 表格语法的支持.enableFencedCode
:启用对 Github 风格的代码围栏块的支持,例如 ```swift
。.enableMarkdownExtraFootnotes
:启用对 PHP Markdown Extra 脚注的支持.expandSpacesToTabs
:将所有制表符展开为四个空格.generateTableOfContents
:启用目录生成。如果你打算读取已处理 Markdown 文档的 tableOfContents
属性,这是一个必需的选项。例如
let md = Markdown(string: "# Heading 1", options: .enableFencedCode)
如果你使用 .generateTableOfContents
选项创建了文档,那么你也可以像这样提取文档的目录
if let md = Markdown(string: "# Heading 1\nHello, world!", options: .generateTableOfContents) {
print(md.tableOfContents)
}
输出将是
<ul>
<li><a href=\"#Heading-1\">Heading 1</a></li>
</ul>
如果你的 Markdown 文档包含内联 <style>
标签,你可以通过其 css
属性读取它们,就像这样
if let md = Markdown(string: "<style> body { margin: 0; } </style>\n# Hello, world!") {
print(md.css)
}
输出将是
<style> body { margin: 0; } </style>
如果你的文档开头有 Pandoc 风格的元数据,你可以使用 Markdown 文档的 title
、author
和 date
属性读取它,所有这些都是可选字符串。这意味着文档的前三行像这样开始
% Your Document Title
% Author Name(s)
% Whatever Date You Want
例如
let metadataExample = """
% Pride and Prejudice
% Jane Austen
% 28th January 1813
It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.
"""
let md = Markdown(string: metadataExample)
print("Title: ", md?.title ?? "Unknown title")
print("Author: ", md?.author ?? "Unknown author")
print("Date: ", md?.date ?? "Unknown author")
输出将是
Title: Pride and Prejudice
Author: Jane Austen
Date: 28th January 1813
此软件包在 MIT 许可证下发布,许可证内容如下。
版权所有 (c) 2019 Paul Hudson
特此授予许可,免费向任何获得本软件和相关文档文件(“软件”)副本的人员授予许可,不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向为此目的提供软件的人员授予许可,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、适用于特定用途和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,因本软件或其使用或其他交易而产生、源于或与之相关。