Marklight
适用于iOS和macOS的Markdown语法高亮器。
描述
Marklight是一个可直接使用的组件,用于轻松地为iOS和macOS应用程序中的任何用户可编辑的文本视图添加实时Markdown语法高亮。Marklight不包含从Markdown生成HTML的功能,但您可以使用许多其他可用的组件之一,如Markingbird。
正则表达式来自Markingbird,这是一个Markdown解析器和HTML生成器。
功能
- 适用于任何
UITextView
。 -
NSTextStorage
子类,可直接使用。 - 结构优化以提高性能。
- 适配Swift 4.1。
- 支持动态文本样式。
- 选择Markdown语法颜色。
- 选择代码块的字体和颜色。
- 选择引用的字体和颜色。
- 选择动态字体样式文本。
- 引用缩进。
- 已文档化。
- 兼容macOS。
- 解析测试。
- 性能测试。
需求
- iOS 8.0+
- Xcode 9.3+
- macOS 10.11+
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。可以使用以下命令进行安装:
$ gem install cocoapods
构建 Marklight 需要 CocoaPods 1.0.0+。
要使用 CocoaPods 将 Marklight 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
pod 'Marklight'
然后,运行以下命令:
$ pod install
Carthage
Carthage 是一个去中心化的依赖管理器,它会构建您的依赖并提供二进制框架。
您可以使用以下命令通过 Homebrew 安装 Carthage:
$ brew update
$ brew install carthage
要使用 Carthage 将 Marklight 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它。
github "macteo/Marklight"
运行 carthage update --platform iOS
来构建框架,并将构建的 Marklight.framework
拖入您的 Xcode 项目。
手动
将 Marklight Xcode 项目添加到您的项目中。然后根据需要将 Marklight
框架添加到应用程序目标的嵌入二进制文件中。
使用
在本存储库中,您可以在ViewController
类中找到一个带有少量代码的示例项目,以快速入门。
示例代码是用Swift编写的,但也应该支持Objective-C,如果您发现任何不兼容性,请提交问题。
集成
要创建一个带有Markdown语法高亮的可编辑UITextView
,最简单的方法是将提供的MarklightTextStorage
类作为NSTextStorage
使用,并将UITextView
的textLayout
添加到MarklightTextStorage
文本存储中。
将Marklight模块导入您的Swift类
import Marklight
或者,如果您正在编写Objective-C
#import <Marklight/Marklight-Swift.h>
请注意,您必须让项目生成桥接头,否则集成可能会失败。
在您的UIViewController
子类中保存此MarklightTextStorage
类的强实例。
let textStorage = MarklightTextStorage()
根据需要自定义外观
- 动态文本样式。
- Markdown语法颜色。
- 代码字体和颜色。
- 引用字体和颜色。
根据Apple的文档,将UITextView
的NSLayoutManager
分配给NSTextStorage
子类应该足够了,在我们的例子中是MarklightTextStorage
。
textStorage.addLayoutManager(textView.layoutManager)
然而,如果您想预加载一些文本而不是让用户从新文本开始,我会遇到一些崩溃。下面提出了一种解决方案。
为了简单起见,我们假设您有一个要在从Storyboard加载的可编辑UITextView
内部高亮的String
。
let string = "# My awesome markdown string"
将NSAttributedString
let attributedString = NSAttributedString(string: string)
将加载的字符串设置到UITextView
textView.attributedText = attributedString
将加载的字符串追加到NSTextStorage
textStorage.appendAttributedString(attributedString)
享受。
致谢
Marklight大量依赖于Markingbird,所以非常感谢Kristopher Johnson以及基于Markingbird的所有先前贡献。
许可证
Marklight是在MIT许可证下发布的。有关详细信息,请参阅LICENSE。