diffmatchpatch 0.0.4

Rewrite of diff-match-patch in Rust
Documentation
# DiffMatchPatch - diffmatchpatch

The Diff Match and Patch libraries offer robust algorithms to perform the operations required for synchronising plain text. This repository contains a Rust version of the original [diff-match-patch](https://github.com/google/diff-match-patch) library, using up-to-date crate packages.

## Modification Compared to the Upstream

- Use `Chars(Vec<char>)` to represent text instead of `String` to avoid unnecessary traversing of the string
- Extend `diff_lines_to_chars` to `diff_any_to_chars` to support words, lines, text blocks, and any sequence of comparable items
- Test cases from [google/diff-match-patch]https://github.com/google/diff-match-patch and [distill-io/diff-match-patch.rs]https://github.com/distill-io/diff-match-patch.rs
- [ ] Implement the `patch` part
- Helper `prelude` mod

## Demo

The same example is copied from <https://neil.fraser.name/software/diff_match_patch/demos/diff.html>.

```rust
use diffmatchpatch::prelude::*;

fn main() {
    let text1 = r#"I am the very model of a modern Major-General,
I've information vegetable, animal, and mineral,
I know the kings of England, and I quote the fights historical,
From Marathon to Waterloo, in order categorical."#;
    let text2 = r#"I am the very model of a cartoon individual,
My animation's comical, unusual, and whimsical,
I'm quite adept at funny gags, comedic theory I have read,
From wicked puns and stupid jokes to anvils that drop on your head."#;

    // No Cleanup
    //let diffs = diff_main(text2, text1);
    //println!("diffs {:#?}", diffs);

    // Semantic Cleanup
    let diffs = diff_semantic(text2, text1);
    println!("Semantic diffs {:#?}", diffs);

    // Word mode
    let diffs = diff_word_mode(text2, text1);
    println!("Word diffs {:#?}", diffs);

    // diff_word_mode is also avaliable, but is meaningless to this example
}
```

## Original

This code is forked originally from [dmp](https://github.com/surrealdb/dmp), licensed under the [MIT](https://choosealicense.com/licenses/mit/) license.

### Features

- Diffing and patching library for plain text
- Retrieve differences between two blocks of text
- Create a set of patches for converting a block of text into another
- Apply a set of patches onto a block of text to convert it to another block of text
- Uses best-effort to apply patch even when the underlying text doesn't fully match.

## speedtest

On an M1 Pro MacBook Pro:

```text
Python3                         8.695004s
JS(Chrome)                      0.469s
speedtest                       147.20 ms
```