Skip to content

Commit

Permalink
Moved from unicode-width to unicode-display-width for visual grapheme…
Browse files Browse the repository at this point in the history
… width estimation
  • Loading branch information
TapGhoul authored Apr 4, 2024
1 parent de2f15a commit 8f385eb
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 18 deletions.
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "console"
description = "A terminal and console abstraction for Rust"
version = "0.15.8"
version = "0.16.0"
keywords = ["cli", "terminal", "colors", "console", "ansi"]
authors = ["Armin Ronacher <armin.ronacher@active-4.com>"]
license = "MIT"
Expand All @@ -13,13 +13,13 @@ readme = "README.md"
rust-version = "1.56.0"

[features]
default = ["unicode-width", "ansi-parsing"]
default = ["unicode-display-width", "ansi-parsing"]
windows-console-colors = ["ansi-parsing"]
ansi-parsing = []

[dependencies]
libc = "0.2.99"
unicode-width = { version = "0.1", optional = true }
unicode-display-width = { version = "0.3", optional = true }
lazy_static = "1.4.0"

[target.'cfg(windows)'.dependencies]
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ are useful for more complex formatting.

## Unicode Width Support

By default this crate depends on the `unicode-width` crate to calculate
By default this crate depends on the `unicode-display-width` crate to calculate
the width of terminal characters. If you do not need this you can disable
the `unicode-width` feature which will cut down on dependencies.
the `unicode-display-width` feature which will cut down on dependencies.

License: MIT
6 changes: 3 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,15 @@
//!
//! # Unicode Width Support
//!
//! By default this crate depends on the `unicode-width` crate to calculate
//! By default this crate depends on the `unicode-display-width` crate to calculate
//! the width of terminal characters. If you do not need this you can disable
//! the `unicode-width` feature which will cut down on dependencies.
//! the `unicode-display-width` feature which will cut down on dependencies.
//!
//! # Features
//!
//! By default all features are enabled. The following features exist:
//!
//! * `unicode-width`: adds support for unicode width calculations
//! * `unicode-display-width`: adds support for unicode width calculations
//! * `ansi-parsing`: adds support for parsing ansi codes (this adds support
//! for stripping and taking ansi escape codes into account for length
//! calculations).
Expand Down
21 changes: 11 additions & 10 deletions src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -707,25 +707,26 @@ impl<'a, 'b> fmt::Display for Emoji<'a, 'b> {
}

fn str_width(s: &str) -> usize {
#[cfg(feature = "unicode-width")]
#[cfg(feature = "unicode-display-width")]
{
use unicode_width::UnicodeWidthStr;
s.width()
unicode_display_width::width(s) as usize
}
#[cfg(not(feature = "unicode-width"))]
#[cfg(not(feature = "unicode-display-width"))]
{
s.chars().count()
}
}

#[cfg(feature = "ansi-parsing")]
fn char_width(c: char) -> usize {
#[cfg(feature = "unicode-width")]
#[cfg(feature = "unicode-display-width")]
{
use unicode_width::UnicodeWidthChar;
c.width().unwrap_or(0)
match unicode_display_width::is_double_width(c) {
true => 2,
false => 1,
}
}
#[cfg(not(feature = "unicode-width"))]
#[cfg(not(feature = "unicode-display-width"))]
{
let _c = c;
1
Expand Down Expand Up @@ -873,7 +874,7 @@ fn test_text_width() {
measure_text_width(&s),
if cfg!(feature = "ansi-parsing") {
3
} else if cfg!(feature = "unicode-width") {
} else if cfg!(feature = "unicode-display-width") {
17
} else {
21
Expand All @@ -882,7 +883,7 @@ fn test_text_width() {
}

#[test]
#[cfg(all(feature = "unicode-width", feature = "ansi-parsing"))]
#[cfg(all(feature = "unicode-display-width", feature = "ansi-parsing"))]
fn test_truncate_str() {
let s = format!("foo {}", style("bar").red().force_styling(true));
assert_eq!(
Expand Down

0 comments on commit 8f385eb

Please sign in to comment.