aboutsummaryrefslogtreecommitdiffstats
path: root/src/row.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-10-31 13:38:53 -0400
committerJesse Luehrs <doy@tozt.net>2019-10-31 13:38:53 -0400
commit085115797e5698f1fa4599de41863999050d4b98 (patch)
tree782c71b216e2146a11ff7f6da1a9fe4034eac189 /src/row.rs
parentd808c39162273da61fec4d3273550149097726de (diff)
downloadvt100-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.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/row.rs b/src/row.rs
index 65f3cd2..1d9df56 100644
--- a/src/row.rs
+++ b/src/row.rs
@@ -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 {