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",
"\n",
"Since the wrapping algorithm is aware of the Unicode Standard Annex #14, ",
"it understands things like nonbreaking spaces: ",
"This\u{00a0}sentence\u{00a0}is\u{00a0}separated\u{00a0}by\u{00a0}nonbreaking\u{00a0}spaces.\n",
"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}non-\u{2060}breaking\u{00a0}spaces.\n",
"\n",
"It can also properly handle wide graphemes (like 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) {
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;
}
}

View file

@ -65,7 +65,7 @@ impl WidthDB {
.queue(MoveTo(0, 0))?
.queue(Print(&grapheme))?;
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);
}
Ok(())