2个不稳定版本

0.2.0 2021年11月27日
0.1.0 2020年6月29日

#196 in 文本编辑器

Download history 52/week @ 2024-04-18 61/week @ 2024-04-25 43/week @ 2024-05-02 43/week @ 2024-05-09 51/week @ 2024-05-16 43/week @ 2024-05-23 51/week @ 2024-05-30 43/week @ 2024-06-06 42/week @ 2024-06-13 45/week @ 2024-06-20 20/week @ 2024-06-27 7/week @ 2024-07-04 28/week @ 2024-07-11 52/week @ 2024-07-18 51/week @ 2024-07-25 26/week @ 2024-08-01

162 每月下载量
flo_binding 中使用

Apache-2.0

110KB
2K SLoC

flo_rope

这是一个包含 rope 数据结构实现的 Rust 库。Ropes 是字符串类型的扩展,支持高效操作大量数据。

flo_rope 向数据结构的常规功能添加了一些扩展

  • 它允许任何 'cell' 类型的 rope,因此它不仅是字符字符串的替代品,也是具有相同编辑属性的向量类型
  • 它支持将属性附加到 rope 中的区域。这使得它适合表示具有附加格式信息的文本等任务。
  • 它提供了一种 'push' 和 'pull' 模型,用于在 rope 的其他地方镜像更改。(例如,更新用户界面以响应 rope 的更改)

Ropes 通常用于文本编辑器,因为它们的性能特点:flo_rope 提供了一种表示文本颜色并设置管道以使用这些颜色进行语法高亮的方式。'pull' 模型非常适合在响应式用户界面中表示文本区域(和其他集合数据结构)。

配套库 flo_binding 将提供对 rope 的响应式模型的支持,适合集成到用户界面中。

示例

替换 rope 中的范围

use flo_rope::*;

let mut rope = AttributedRope::<_, ()>::from(vec![1, 2, 3, 4, 5, 6, 7, 8]);

rope.replace(1..3, vec![42]);
assert!(rope.read_cells(0..rope.len()).cloned().collect::<Vec<_>>() == vec![1,42,4,5,6,7,8]);

无运行时依赖