stylish_stringlike
This crate provides a string-like API for styled text objects,
and widgets for displaying those styled text objects specifically
oriented towards terminal output.
usage
Add this to you Cargo.toml
:
toml
[dependencies.stylish-stringlike]
git = "https://github.com/Jason-S-Ross/stylish-stringlike.git"
version = "0.1.0"
Example
``` rust
use std::borrow::Cow;
use stylishstringlike::text::{Joinable, Paintable, Replaceable, Sliceable, Span, Spans, Tag};
use stylishstringlike::widget::{HBox, TextWidget, TruncationStyle};
let italic = Tag::new("", "");
let bold = Tag::new("", "");
let underline = Tag::new("", "");
let foo: Span = Span::new(Cow::Borrowed(&italic), Cow::Borrowed("foo"));
let bar: Span = Span::new(Cow::Borrowed(&bold), Cow::Borrowed("bar"));
let foobar = foo.join(&bar);
asserteq!(format!("{}", foobar), "foobar");
let foobaz = foobar.replace("bar", "baz");
asserteq!(format!("{}", foobaz), "foobaz");
let mut buz: Spans = Default::default();
buz = buz.join(&Span::new(
Cow::Borrowed(&underline),
Cow::Owned(String::from("buz")),
));
let foobuz = foobar.replace("bar", &buz);
asserteq!(format!("{}", foobuz), "foobuz");
let foob = foobar.slice(..4).unwrap();
asserteq!(format!("{}", foob), "foob");
fn makespans(style: &Tag, text: &str) -> Spans {
let mut spans: Spans = Default::default();
let span: Span = Span::new(Cow::Borrowed(style), Cow::Borrowed(text));
spans = spans.join(&span);
spans
}
let truncation = TruncationStyle::Inner(Some(Span::new(
Cow::Borrowed(&underline),
Cow::Owned(String::from("…")),
)));
let firstspans = makespans(&italic, "abcdefg");
let secondspans = makespans(&bold, "12345678");
let firstsegment = TextWidget::new(&first_spans, &truncation);
let secondsegment = TextWidget::new(&secondspans, &truncation);
let mut hbox: HBox> = Default::default();
hbox.push(&firstsegment);
hbox.push(&secondsegment);
assert_eq!(
format!("{}", hbox.truncate(10)),
"ab…fg12…78"
);
```