diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-10-31 13:38:53 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-10-31 13:38:53 -0400 |
commit | 085115797e5698f1fa4599de41863999050d4b98 (patch) | |
tree | 782c71b216e2146a11ff7f6da1a9fe4034eac189 /src/row.rs | |
parent | d808c39162273da61fec4d3273550149097726de (diff) | |
download | vt100-rust-085115797e5698f1fa4599de41863999050d4b98.tar.gz vt100-rust-085115797e5698f1fa4599de41863999050d4b98.zip |
implement zero-width and wide character handling
Diffstat (limited to 'src/row.rs')
-rw-r--r-- | src/row.rs | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -40,25 +40,39 @@ impl Row { self.wrapped = wrap; } + pub fn wrapped(&self) -> bool { + self.wrapped + } + pub fn contents(&self, col_start: u16, col_end: u16) -> String { + let mut prev_was_wide = false; // XXX very inefficient let mut max_col = None; for (col, cell) in self.cells.iter().enumerate() { - if cell.has_contents() { + if cell.has_contents() || prev_was_wide { max_col = Some(col); + prev_was_wide = cell.is_wide(); } } + prev_was_wide = false; let mut contents = String::new(); if let Some(max_col) = max_col { for col in col_start..=(col_end.min(max_col as u16)) { - let cell_contents = self.cells[col as usize].contents(); + if prev_was_wide { + prev_was_wide = false; + continue; + } + + let cell = &self.cells[col as usize]; + let cell_contents = cell.contents(); let cell_contents = if cell_contents == "" { " " } else { cell_contents }; contents += cell_contents; + prev_was_wide = cell.is_wide(); } } if !self.wrapped { |