一个 Swift 软件包,用于辅助文本选择、分组和操作。
Ligature 包含必要的别名和实现,以使 UIKit 和 AppKit 文本接口的部分内容源码兼容。 核心类型实际上更进一步,应该是完全文本系统无关的。
您可能也会对 Glyph 感兴趣,这是一个 TextKit 1/2 抽象系统,以及通用的 AppKit/UIKit 内容,例如 NSUI 或 KeyCodes。
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 space 和 Discord 均可提供实时帮助,但我强烈倾向于以文档的形式回答。 您也可以在这里找到我 here。
我更喜欢协作,如果您有类似的项目,我很乐意找到合作的方式。
我更喜欢使用制表符缩进以提高可访问性。 但是,我宁愿您使用您想要的系统并提交 PR,也不愿因为空格而犹豫。
参与此项目即表示您同意遵守贡献者行为准则。