diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-04-27 02:51:35 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-04-27 03:03:46 -0400 |
commit | ea0444f2bb0ad94431a597e29f15d61cfa237508 (patch) | |
tree | 6a12efd1cc30a7d936306bc40a9860a22f047fcb | |
parent | df328c13903d5a0e595d27b14f79e2a61f66f8fc (diff) | |
download | vt100-rust-ea0444f2bb0ad94431a597e29f15d61cfa237508.tar.gz vt100-rust-ea0444f2bb0ad94431a597e29f15d61cfa237508.zip |
implement the rest of the cell attrs
-rw-r--r-- | src/cell.rs | 26 | ||||
-rw-r--r-- | src/ffi.c | 25 | ||||
-rw-r--r-- | src/ffi.rs | 5 | ||||
-rw-r--r-- | tests/basic.rs | 9 |
4 files changed, 65 insertions, 0 deletions
diff --git a/src/cell.rs b/src/cell.rs index 4c0d6fb..ef12756 100644 --- a/src/cell.rs +++ b/src/cell.rs @@ -2,6 +2,7 @@ use libc; use std; use color; +use ffi; use types; pub struct Cell(*mut types::CellImpl); @@ -56,4 +57,29 @@ impl Cell { let attrs = unsafe { &(*prefix).attrs }; color::Color::new(&attrs.bgcolor) } + + pub fn is_wide(&self) -> bool { + let Cell(cell_impl) = *self; + unsafe { ffi::vt100_wrapper_cell_is_wide(cell_impl) != 0 } + } + + pub fn bold(&self) -> bool { + let Cell(cell_impl) = *self; + unsafe { ffi::vt100_wrapper_cell_bold(cell_impl) != 0 } + } + + pub fn italic(&self) -> bool { + let Cell(cell_impl) = *self; + unsafe { ffi::vt100_wrapper_cell_italic(cell_impl) != 0 } + } + + pub fn underline(&self) -> bool { + let Cell(cell_impl) = *self; + unsafe { ffi::vt100_wrapper_cell_underline(cell_impl) != 0 } + } + + pub fn inverse(&self) -> bool { + let Cell(cell_impl) = *self; + unsafe { ffi::vt100_wrapper_cell_inverse(cell_impl) != 0 } + } } @@ -10,3 +10,28 @@ int vt100_wrapper_cols(VT100Screen *vt) { return vt->grid->max.col; } + +int vt100_wrapper_cell_is_wide(struct vt100_cell *cell) +{ + return cell->is_wide; +} + +int vt100_wrapper_cell_bold(struct vt100_cell *cell) +{ + return cell->attrs.bold; +} + +int vt100_wrapper_cell_italic(struct vt100_cell *cell) +{ + return cell->attrs.italic; +} + +int vt100_wrapper_cell_underline(struct vt100_cell *cell) +{ + return cell->attrs.underline; +} + +int vt100_wrapper_cell_inverse(struct vt100_cell *cell) +{ + return cell->attrs.inverse; +} @@ -40,6 +40,11 @@ extern "C" { pub fn vt100_wrapper_rows(screen: *mut types::ScreenImpl) -> libc::c_int; pub fn vt100_wrapper_cols(screen: *mut types::ScreenImpl) -> libc::c_int; + pub fn vt100_wrapper_cell_is_wide(cell: *mut types::CellImpl) -> libc::c_int; + pub fn vt100_wrapper_cell_bold(cell: *mut types::CellImpl) -> libc::c_int; + pub fn vt100_wrapper_cell_italic(cell: *mut types::CellImpl) -> libc::c_int; + pub fn vt100_wrapper_cell_underline(cell: *mut types::CellImpl) -> libc::c_int; + pub fn vt100_wrapper_cell_inverse(cell: *mut types::CellImpl) -> libc::c_int; } #[cfg(test)] diff --git a/tests/basic.rs b/tests/basic.rs index 7af33f0..f6cbad0 100644 --- a/tests/basic.rs +++ b/tests/basic.rs @@ -67,4 +67,13 @@ mod tests { vt100::Color::ColorIdx(2) ); } + + #[test] + fn cell_attrs() { + let mut screen = vt100::Screen::new(24, 80); + let input = b"foo\x1b[31m\x1b[32mb\x1b[3;7;42ma\x1b[23mr"; + screen.process(input); + + assert!(screen.cell(0, 4).unwrap().italic()); + } } |