Markdown

Twitter: @twostraws

这为 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

解析字符串中的 Markdown

你可以通过从 Swift 字符串创建一个 Markdown 实例来解析文档,就像这样

if let md = Markdown(string: "# Headline Text") {
    print(md.html)
}

这将打印以下 HTML

<h1>Headline Text</h1>

在创建 Markdown 实例时,你可以传入一组配置选项

例如

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 文档的 titleauthordate 属性读取它,所有这些都是可选字符串。这意味着文档的前三行像这样开始

% 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

特此授予许可,免费向任何获得本软件和相关文档文件(“软件”)副本的人员授予许可,不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向为此目的提供软件的人员授予许可,但须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、适用于特定用途和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,因本软件或其使用或其他交易而产生、源于或与之相关。