Ignore graphemes of width 0 when writing to buffer

This commit is contained in:
Joscha 2022-05-28 22:43:10 +02:00
parent 37634139b0
commit 6b9e4cbc63
3 changed files with 6 additions and 4 deletions

View file

@ -10,8 +10,8 @@ fn draw(f: &mut Frame) {
"After this sentence come two newlines, so it should always break here.\n", "After this sentence come two newlines, so it should always break here.\n",
"\n", "\n",
"Since the wrapping algorithm is aware of the Unicode Standard Annex #14, ", "Since the wrapping algorithm is aware of the Unicode Standard Annex #14, ",
"it understands things like nonbreaking spaces: ", "it understands things like non-breaking spaces and word joiners: ",
"This\u{00a0}sentence\u{00a0}is\u{00a0}separated\u{00a0}by\u{00a0}nonbreaking\u{00a0}spaces.\n", "This\u{00a0}sentence\u{00a0}is\u{00a0}separated\u{00a0}by\u{00a0}non-\u{2060}breaking\u{00a0}spaces.\n",
"\n", "\n",
"It can also properly handle wide graphemes (like emoji 🤔), ", "It can also properly handle wide graphemes (like emoji 🤔), ",
"including ones usually displayed incorrectly by terminal emulators, like 👩‍🔬 (a female scientist emoji).", "including ones usually displayed incorrectly by terminal emulators, like 👩‍🔬 (a female scientist emoji).",

View file

@ -142,7 +142,9 @@ impl Buffer {
for grapheme in content.graphemes(true) { for grapheme in content.graphemes(true) {
let width = widthdb.grapheme_width(grapheme); let width = widthdb.grapheme_width(grapheme);
self.write_grapheme(pos.x, y, width, grapheme, style); if width > 0 {
self.write_grapheme(pos.x, y, width, grapheme, style);
}
pos.x += width as i32; pos.x += width as i32;
} }
} }

View file

@ -65,7 +65,7 @@ impl WidthDB {
.queue(MoveTo(0, 0))? .queue(MoveTo(0, 0))?
.queue(Print(&grapheme))?; .queue(Print(&grapheme))?;
out.flush()?; out.flush()?;
let width = crossterm::cursor::position()?.0.max(1) as u8; let width = crossterm::cursor::position()?.0 as u8;
self.known.insert(grapheme, width); self.known.insert(grapheme, width);
} }
Ok(()) Ok(())