Build Status Platforms Documentation Matrix

连字

一个 Swift 软件包,用于辅助文本选择、分组和操作。

Ligature 包含必要的别名和实现,以使 UIKit 和 AppKit 文本接口的部分内容源码兼容。 核心类型实际上更进一步,应该是完全文本系统无关的。

您可能也会对 Glyph 感兴趣,这是一个 TextKit 1/2 抽象系统,以及通用的 AppKit/UIKit 内容,例如 NSUIKeyCodes

安装

dependencies: [
    .package(url: "https://github.com/ChimeHQ/Ligature", branch: "main")
],

用法

用于分词功能的核心协议是 TextTokenizer。 它比 UITextInputTokenizer 稍微抽象一些,但最终是兼容的。 对于 UIKit,TextInputStringTokenizer 只是 UITextInputStringTokenizer 的类型别名。 Ligature 提供了用于 AppKit 的实现。

警告

虽然非常好用,但 TextTokenizer API 支持的某些功能尚未在 AppKit 实现中完全实现。

// on UIKit
let tokenizer = TextInputStringTokenizer(textInput: someUITextView)

// with AppKit
let tokenizer = TextInputStringTokenizer(textInput: someNSTextInputClient)

Ligature 使用平台无关的别名来表示许多与文本相关的结构。 在大多数情况下,这些别名基于其 UIKit 表示。 通常,AppKit 没有源码兼容的实现,因此提供了包装器和/或兼容的实现。

typealias TextPosition = UITextPosition
typealias TextRange = UITextRange
typealias TextGranularity = UITextGranularity
typealias TextStorageDirection = UITextStorageDirection
typealias TextDirection = UITextDirection
typealias UserInterfaceLayoutDirection = UIUserInterfaceLayoutDirection

AppKit、UIKit 甚至 TextKit 1 和 2 之间存在各种范围/位置模型。 不幸的是,要对此进行建模需要进行一些抽象,而这是有成本的。 如果在 NSRange 值范围内操作很重要,您可以直接使用 UTF16CodePointTextViewTextTokenizer

贡献与协作

我很乐意听取您的意见! Issue 或 pull request 都很好。 Matrix spaceDiscord 均可提供实时帮助,但我强烈倾向于以文档的形式回答。 您也可以在这里找到我 here

我更喜欢协作,如果您有类似的项目,我很乐意找到合作的方式。

我更喜欢使用制表符缩进以提高可访问性。 但是,我宁愿您使用您想要的系统并提交 PR,也不愿因为空格而犹豫。

参与此项目即表示您同意遵守贡献者行为准则