use wrap_ansi::{WrapError, WrapOptions, wrap_ansi, wrap_ansi_checked};
fn main() -> Result<(), WrapError> {
println!("=== Wrap-ANSI Improved Features Demo ===\n");
println!("1. Builder Pattern for Options:");
let options = WrapOptions::builder()
.hard_wrap(true)
.trim_whitespace(false)
.word_wrap(true)
.build();
let text = "This is a verylongwordthatexceedslimit example";
let wrapped = wrap_ansi(text, 15, Some(options));
println!("Input: {}", text);
println!("Output:\n{}\n", wrapped);
println!("2. Error Handling:");
match wrap_ansi_checked("Hello world", 10, None) {
Ok(result) => println!("Valid input wrapped: {}", result.replace('\n', "\\n")),
Err(e) => println!("Error: {}", e),
}
match wrap_ansi_checked("Hello world", 0, None) {
Ok(result) => println!("Result: {}", result),
Err(e) => println!("Expected error: {}", e),
}
let large_text = "x".repeat(100);
match wrap_ansi_checked(&large_text, 10, None) {
Ok(result) => println!(
"Large input handled: {} chars -> {} chars",
large_text.len(),
result.len()
),
Err(e) => println!("Error with large input: {}", e),
}
println!();
println!("3. ANSI Color Preservation:");
let colored_text =
"\u{001B}[31mThis is red text that will be wrapped across multiple lines\u{001B}[39m";
let wrapped_colored = wrap_ansi(colored_text, 20, None);
println!("Colored text wrapped:");
println!("{}", wrapped_colored);
println!();
println!("4. Hyperlink Preservation:");
let hyperlink_text = "\u{001B}]8;;https://example.com\u{0007}This is a clickable link that spans multiple lines\u{001B}]8;;\u{0007}";
let wrapped_hyperlink = wrap_ansi(hyperlink_text, 15, None);
println!("Hyperlink text wrapped:");
println!("{}", wrapped_hyperlink);
println!();
println!("5. Complex ANSI Sequences:");
let complex_text =
"\u{001B}[31m\u{001B}[42mRed text on green background\u{001B}[39m\u{001B}[49m normal text";
let wrapped_complex = wrap_ansi(complex_text, 12, None);
println!("Complex ANSI wrapped:");
println!("{}", wrapped_complex);
println!();
println!("6. Unicode Support:");
let unicode_text = "Hello δΈη π γγγ«γ‘γ―";
let wrapped_unicode = wrap_ansi(unicode_text, 10, None);
println!("Unicode text wrapped:");
println!("{}", wrapped_unicode);
Ok(())
}