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)), "abfg1278" );

```