aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-04-27 02:51:35 -0400
committerJesse Luehrs <doy@tozt.net>2016-04-27 03:03:46 -0400
commitea0444f2bb0ad94431a597e29f15d61cfa237508 (patch)
tree6a12efd1cc30a7d936306bc40a9860a22f047fcb
parentdf328c13903d5a0e595d27b14f79e2a61f66f8fc (diff)
downloadvt100-rust-ea0444f2bb0ad94431a597e29f15d61cfa237508.tar.gz
vt100-rust-ea0444f2bb0ad94431a597e29f15d61cfa237508.zip
implement the rest of the cell attrs
-rw-r--r--src/cell.rs26
-rw-r--r--src/ffi.c25
-rw-r--r--src/ffi.rs5
-rw-r--r--tests/basic.rs9
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 }
+ }
}
diff --git a/src/ffi.c b/src/ffi.c
index a4af5ba..fb2a3b3 100644
--- a/src/ffi.c
+++ b/src/ffi.c
@@ -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;
+}
diff --git a/src/ffi.rs b/src/ffi.rs
index e498361..550e3b0 100644
--- a/src/ffi.rs
+++ b/src/ffi.rs
@@ -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());
+ }
}