Expand description
§string-width
Accurate Unicode string width calculation for terminal applications.
This library correctly handles:
- Emoji sequences (👨👩👧👦, 🇺🇸, 1️⃣)
- East Asian characters (你好, こんにちは, 안녕하세요)
- Combining marks and diacritics (é, ñ, ü)
- Zero-width characters (ZWJ, ZWNJ, format characters)
- ANSI escape sequences (colors, cursor movement)
- Ambiguous width characters (±, ×, ÷)
§Quick Start
use string_width::string_width;
// ASCII text
assert_eq!(string_width("Hello"), 5);
// East Asian characters (full-width)
assert_eq!(string_width("你好"), 4);
// Emoji
assert_eq!(string_width("👋"), 2);
assert_eq!(string_width("🇺🇸"), 2); // Flag
assert_eq!(string_width("1️⃣"), 2); // Keycap sequence
// Mixed content
assert_eq!(string_width("Hello 👋 世界"), 13);
// ANSI escape sequences are ignored by default
assert_eq!(string_width("\x1b[31mRed\x1b[0m"), 3);§Advanced Configuration
use string_width::{string_width, string_width_with_options, StringWidthOptions, AmbiguousWidthTreatment};
// Direct configuration
let options = StringWidthOptions {
count_ansi: true, // Count ANSI escape sequences
ambiguous_width: AmbiguousWidthTreatment::Wide, // Treat ambiguous as wide
};
assert_eq!(string_width_with_options("±×÷", options.clone()), 6); // Ambiguous chars as wide
assert_eq!(string_width_with_options("\x1b[31mRed\x1b[0m", options), 12); // Count ANSI
// Using the builder pattern (recommended)
let options = StringWidthOptions::builder()
.count_ansi(true)
.ambiguous_as_wide()
.build();
assert_eq!(string_width_with_options("±×÷", options), 6);§Using the DisplayWidth Trait
use string_width::{DisplayWidth, StringWidthOptions};
let text = "Hello 🌍";
println!("Width: {}", text.display_width());
// With custom options
let options = StringWidthOptions::default();
println!("Width: {}", text.display_width_with_options(options));Structs§
- String
Width Options - Configuration options for string width calculation
- String
Width Options Builder - Builder for StringWidthOptions following the builder pattern
Enums§
- Ambiguous
Width Treatment - How to treat ambiguous width characters
Traits§
- Display
Width - Trait for types that can have their display width calculated
Functions§
- string_
width - Convenience function for calculating string width with default options
- string_
width_ with_ options - Main function that calculates the display width of a string