Module an_rope::metric [] [src]

Metrics for indexing Ropes.

A Metric represents a measurement with which indices into a Rope may be calculated.

All Rope methods are optionally parameterised with Metrics. This means that you can split, insert, or delete Ropes on character, line, or grapheme indices, without necessitating the addition of a whole bunch of new, wordy method names like split_on_grapheme_index and so on.

Examples

If I wanted to delete characters 10 to 15 from rope r, I could say:

let r = Rope::from("this is a long rope");
let r = r.delete(10..15);
assert_eq!(&r, "this is a rope");

Suppose my Rope contained some strange Unicode characters, and I realised that I actually wanted to delete graphemes 10 to 13. In that case, I could say:

use an_rope::metric::Grapheme;
let r = Rope::from("this is a 🆒🆕 rope, 🆗!");
let r = r.delete(Grapheme(10)..Grapheme(13));
assert_eq!(&r, "this is a rope, 🆗!");

Or, suppose my Rope spanned multiple lines:

use an_rope::metric::Line;
let r = Rope::from("this is\n\
                        a\n\
                        multi\n\
                        line\n\
                        rope");
let r = r.delete(Line(2)..Line(3));
assert_eq!(&r, "this is\na\nrope");

Structs

Grapheme

A metric for calculating indices in Ropes based on Unicode graphemes.

Line

A metric for calculating indices in Ropes based on line numbering.

Traits

Measured

Trait indicating that a type may be measured with Metric M.

Metric

A monoid that can be applied to a type as a measurement.

Monoid

The class of monoids