Logo

MarkdownKit

Version Carthage compatible License Platform CI

MarkdownKit 是一个可定制和可扩展的 Markdown 解析器,适用于 iOS 和 macOS。它通过使用正则表达式支持许多标准的 Markdown 元素。它还允许自定义所有 Markdown 元素的字体和颜色属性。

截图

Example

安装

通过 CocoaPods 安装

MarkdownKit 可通过 CocoaPods 获得。CocoaPods 是一个依赖管理器,可以自动执行并简化在项目中使用 MarkdownKit 等第三方库的过程。您可以使用以下命令安装 CocoaPods

gem install cocoapods

要使用 CocoaPods 将 MarkdownKit 集成到您的 Xcode 项目中,只需将以下行添加到您的 Podfile 中

pod "MarkdownKit"

之后,运行以下命令

pod install

通过 Carthage 安装

MarkdownKit 可通过 Carthage 获得。Carthage 是一个去中心化的依赖管理器,可以构建您的依赖项并为您提供二进制框架。

您可以通过 Homebrew 使用以下命令安装 Carthage

brew update
brew install carthage

要使用 Carthage 将 MarkdownKit 集成到您的 Xcode 项目中,只需将以下行添加到您的 Cartfile 中

github "ivanbruel/MarkdownKit"

之后,运行以下命令

carthage update --use-xcframeworks

通过 Swift Package Manager 安装

MarkdownKit 可通过 Swift Package Manager 获得。

要将 MarkdownKit 添加为 Swift 包的依赖项,只需将以下行添加到您的 Package.swift 文件中

.package(url: "https://github.com/bmoliveira/MarkdownKit.git", from: "1.7.0")

支持的元素

*italic* or _italics_
**bold** or __bold__
~~strikethrough~~

# Header 1
## Header 2
### Header 3
#### Header 4
##### Header 5
###### Header 6

> Quote

* List
- List
+ List

`code` or ```code```
[Links](http://github.com/ivanbruel/MarkdownKit/)

用法

为了使用 MarkdownKit 将 Markdown 转换为 NSAttributedString,您只需创建一个 MarkdownParser 实例并调用 parse(_) 函数。

let markdownParser = MarkdownParser()
let markdown = "I support a *lot* of custom Markdown **Elements**, even `code`!"
label.attributedText = markdownParser.parse(markdown)

自定义

let markdownParser = MarkdownParser(font: UIFont.systemFont(ofSize: 18))
markdownParser.enabledElements = .disabledAutomaticLink
markdownParser.bold.color = UIColor.red
markdownParser.italic.font = UIFont.italicSystemFont(ofSize: 300)
markdownParser.header.fontIncrease = 4

可扩展性

要添加新的 Markdown 元素,您只需实现 MarkdownElement 协议(或其子类),并将其添加到 MarkdownParser 中。

import MarkdownKit

class MarkdownSubreddit: MarkdownLink {

  private static let regex = "(^|\\s|\\W)(/?r/(\\w+)/?)"

  override var regex: String {
    return MarkdownSubreddit.regex
  }

  override func match(match: NSTextCheckingResult,
                             attributedString: NSMutableAttributedString) {
    let subredditName = attributedString.attributedSubstringFromRange(match.rangeAtIndex(3)).string
    let linkURLString = "http://reddit.com/r/\(subredditName)"
    formatText(attributedString, range: match.range, link: linkURLString)
    addAttributes(attributedString, range: match.range, link: linkURLString)
  }

}
let markdownParser = MarkdownParser(customElements: [MarkdownSubreddit()])
let markdown = "**/r/iosprogramming** can be *markdown* as well!"
label.attributedText = markdownParser.parse(markdown)

示例

要运行示例项目,请克隆存储库,然后首先从 Example 目录运行 pod install

鸣谢

该库深受 TSMarkdownParserSwiftyMarkdown 的启发。

特别感谢 Michael BrownUTF-16 转义/取消转义 方面提供的帮助。

许可

MarkdownKit 在 MIT 许可下可用。有关更多信息,请参见 LICENSE 文件。