【译】 第五章:文本编辑器

本文翻译自:Hecto, Chapter 5: A text editor – Philipp Flenker – Engineering Manager,封面图也来源自此。 现在 hecto 能读取文件了,让我们看看能不能让它也能编辑文件。 插入常规字符 首先,让我们写一个函数,在给定的位置将字符插入到 Document 中。我们先在指定位置向字符串添加一个字符。 到 GitHub 查看这一步。 // 译者注:52-53 行代码如下 let mut result: String = self.string[..].graphemes(true).take(at).collect(); let mut remainder: String = self.string[..].grephemes(true).skip(at).collect(); 先看看 Row 中的改动。我们处理了两种情况:如果插入位置碰巧在字符串末尾,则插入该字符。该情况发生于用户在行尾不断打字的情景下。另外一种情况,通过逐个遍历字符来重建字符串。我们使用了迭代器的 take 和 skip 函数来创建新的迭代器。一个迭代器从 0 到 at (包含 at ),另一个迭代器从at 后到末尾。我们使用 collect 来组合这两个迭代器为字符串。collect 非常有用并且能转换为不同的集合。因为 collect 能创建多种集合,所以我们需要声明 result 和 remainder 的类型,否则 Rust 无法知道创建的集合的类型。现在也为 Row 派生了 default。我们将在 Document 中使用它。 与 Row 中做法类似,我们要处理用户试图在 Document 底部插入字符的情况。对于该情况,创建一个新行即可。 ...

May 7, 2022 · 4 min · 扬扬得意