#
manifold
is the highlighting crate powering tailspin
.
### Getting started
Run the following Cargo command in your project directory:
```terminal
cargo add inlet_manifold
```
### Create highlighter from default
The quickest way to get starting with manifold is using the default constructor. It will provide you with a highlighter
with most of the highlighters enabled and sensible ordering and defaults.
Note that colors, ordering and highlight groups might change between versions. To ensure a more deterministic behavior,
use the **builder pattern**.
```rust
let highlighter = Highlighter::default();
let input = "Hello 42 world".to_string();
let output = highlighter.apply(input);
println!("{}", input); // "Hello 42 world"
println!("{}", output); // "Hello \u{1b}[36m42\u{1b}[0m world!"
```
### Create highlighter with builder pattern
Use the builder pattern to specify both styling and ordering of the highlighters. The order in which each highlighter is
added is significant. `manifold` will apply the highlighters in the order they were added.
Once an item is highlighted, it will not be overwritten by a subsequent highlighter.
```rust
let mut builder = Highlighter::builder();
builder
.with_number_highlighter(NumberConfig {
number: Style {
fg: Some(Color::Cyan),
..Style::default()
},
})
.with_quote_highlighter(QuoteConfig {
quotes_token: '"',
color: Style {
fg: Some(Color::Yellow),
..Style::default()
},
})
.with_uuid_highlighter(UuidConfig::default());
// Using the highlight builder can fail if the regexes inside don't compile
let highlighter = match builder.build {
Ok(h) => h,
Err(_) => panic!("Failed to build highlighter"),
};
let input = "Hello 42 world".to_string();
let output = highlighter.apply(input);
println!("{}", input); // "Hello 42 world"
println!("{}", output); // "Hello \u{1b}[36m42\u{1b}[0m world!"
```