diff options
| author | salmonik <salmonik@tuta.io> | 2026-10-29 17:25:50 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-10-29 17:25:50 +0100 |
| commit | eb68b1266ac833a00ee5a11b3e2d9a9d516d7a3c (patch) | |
| tree | 0ab54d0a37e48676425fe419f1e427bce6455cc2 /src/client | |
| parent | v2.1.1: color-code roulette numbers red and green (diff) | |
| download | zagan-bet-eb68b1266ac833a00ee5a11b3e2d9a9d516d7a3c.tar.gz zagan-bet-eb68b1266ac833a00ee5a11b3e2d9a9d516d7a3c.zip | |
v2.1.2: ignore ANSI when measuring board height
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/ui.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/client/ui.rs b/src/client/ui.rs index 11cedc7..1a35db1 100644 --- a/src/client/ui.rs +++ b/src/client/ui.rs | |||
| @@ -159,7 +159,29 @@ pub fn parse_bet_arg(raw: &str) -> Result<u64, String> { | |||
| 159 | /// ASCII, Latin diacritics, combining marks, CJK, and the common emoji ranges | 159 | /// ASCII, Latin diacritics, combining marks, CJK, and the common emoji ranges |
| 160 | /// without adding a dependency. | 160 | /// without adding a dependency. |
| 161 | pub fn display_width(text: &str) -> usize { | 161 | pub fn display_width(text: &str) -> usize { |
| 162 | text.chars().map(char_width).sum() | 162 | let mut width = 0; |
| 163 | let mut chars = text.chars().peekable(); | ||
| 164 | |||
| 165 | while let Some(character) = chars.next() { | ||
| 166 | if character == '\x1b' { | ||
| 167 | if chars.peek() == Some(&'[') { | ||
| 168 | chars.next(); | ||
| 169 | // Skip CSI parameters until the final byte (@ through ~). | ||
| 170 | for character in chars.by_ref() { | ||
| 171 | if ('@'..='~').contains(&character) { | ||
| 172 | break; | ||
| 173 | } | ||
| 174 | } | ||
| 175 | } else { | ||
| 176 | // Two-character escape sequence. | ||
| 177 | chars.next(); | ||
| 178 | } | ||
| 179 | continue; | ||
| 180 | } | ||
| 181 | width += char_width(character); | ||
| 182 | } | ||
| 183 | |||
| 184 | width | ||
| 163 | } | 185 | } |
| 164 | 186 | ||
| 165 | fn char_width(c: char) -> usize { | 187 | fn char_width(c: char) -> usize { |
