improved_features/
improved_features.rs

1use wrap_ansi::{WrapError, WrapOptions, wrap_ansi, wrap_ansi_checked};
2
3fn main() -> Result<(), WrapError> {
4    println!("=== Wrap-ANSI Improved Features Demo ===\n");
5
6    // 1. Builder Pattern for Options
7    println!("1. Builder Pattern for Options:");
8    let options = WrapOptions::builder()
9        .hard_wrap(true)
10        .trim_whitespace(false)
11        .word_wrap(true)
12        .build();
13
14    let text = "This is a verylongwordthatexceedslimit example";
15    let wrapped = wrap_ansi(text, 15, Some(options));
16    println!("Input: {}", text);
17    println!("Output:\n{}\n", wrapped);
18
19    // 2. Error Handling with Input Validation
20    println!("2. Error Handling:");
21
22    // Valid input
23    match wrap_ansi_checked("Hello world", 10, None) {
24        Ok(result) => println!("Valid input wrapped: {}", result.replace('\n', "\\n")),
25        Err(e) => println!("Error: {}", e),
26    }
27
28    // Invalid column width
29    match wrap_ansi_checked("Hello world", 0, None) {
30        Ok(result) => println!("Result: {}", result),
31        Err(e) => println!("Expected error: {}", e),
32    }
33
34    // Large input (simulated)
35    let large_text = "x".repeat(100);
36    match wrap_ansi_checked(&large_text, 10, None) {
37        Ok(result) => println!(
38            "Large input handled: {} chars -> {} chars",
39            large_text.len(),
40            result.len()
41        ),
42        Err(e) => println!("Error with large input: {}", e),
43    }
44
45    println!();
46
47    // 3. ANSI Color Preservation with Named Constants
48    println!("3. ANSI Color Preservation:");
49    let colored_text =
50        "\u{001B}[31mThis is red text that will be wrapped across multiple lines\u{001B}[39m";
51    let wrapped_colored = wrap_ansi(colored_text, 20, None);
52    println!("Colored text wrapped:");
53    println!("{}", wrapped_colored);
54    println!();
55
56    // 4. Hyperlink Preservation
57    println!("4. Hyperlink Preservation:");
58    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}";
59    let wrapped_hyperlink = wrap_ansi(hyperlink_text, 15, None);
60    println!("Hyperlink text wrapped:");
61    println!("{}", wrapped_hyperlink);
62    println!();
63
64    // 5. Performance with Complex ANSI Sequences
65    println!("5. Complex ANSI Sequences:");
66    let complex_text =
67        "\u{001B}[31m\u{001B}[42mRed text on green background\u{001B}[39m\u{001B}[49m normal text";
68    let wrapped_complex = wrap_ansi(complex_text, 12, None);
69    println!("Complex ANSI wrapped:");
70    println!("{}", wrapped_complex);
71    println!();
72
73    // 6. Unicode Support
74    println!("6. Unicode Support:");
75    let unicode_text = "Hello δΈ–η•Œ 🌍 こんにけは";
76    let wrapped_unicode = wrap_ansi(unicode_text, 10, None);
77    println!("Unicode text wrapped:");
78    println!("{}", wrapped_unicode);
79
80    Ok(())
81}