diff options
-rw-r--r-- | vtcol.rs | 81 |
1 files changed, 70 insertions, 11 deletions
@@ -4,6 +4,63 @@ extern crate libc; extern crate getopts; #[derive(Show)] +enum Color { + Black, Red, Green, Yellow, + Blue, Magenta, Cyan, White +} + +impl Color { + + fn + of_value (val : u8) + -> Color + { + match (val) + { + 0x00_u8 => Color::Black, + 0x01_u8 => Color::Red, + 0x02_u8 => Color::Green, + 0x03_u8 => Color::Yellow, + 0x04_u8 => Color::Blue, + 0x05_u8 => Color::Magenta, + 0x06_u8 => Color::Cyan, + 0x07_u8 => Color::White, + + 0x08_u8 => Color::Black, + 0x09_u8 => Color::Red, + 0x0a_u8 => Color::Green, + 0x0b_u8 => Color::Yellow, + 0x0c_u8 => Color::Blue, + 0x0d_u8 => Color::Magenta, + 0x0e_u8 => Color::Cyan, + 0x0f_u8 => Color::White, + + _ => panic!("invalid color value: {}", val) + } + } + + fn + to_string + (&self) + -> String + { + let id : &str = match (*self) + { + Color::Black => "black", + Color::Red => "red", + Color::Green => "green", + Color::Yellow => "yellow", + Color::Blue => "blue", + Color::Magenta => "magenta", + Color::Cyan => "cyan", + Color::White => "white", + }; + id.to_string() + } + +} /* [impl Color] */ + +#[derive(Show)] enum Scheme { Default, SolarizedDark, SolarizedLight } impl std::fmt::String for Scheme { @@ -20,7 +77,7 @@ impl std::fmt::String for Scheme { write!(f, "{}", id) } -} /* [impl String for Scheme] */ +} /* [impl std::fmt::String for Scheme] */ extern { fn exit (code : libc::c_int) -> !; } @@ -206,15 +263,16 @@ impl Palette fn dump (&self) { - let mut i : usize = 0; + let mut i : usize = 0_us; let mut buf : [u8; 3] = [ 0u8, 0u8, 0u8 ]; for col in self.colors.iter() { let idx : usize = i % 3; buf[idx] = *col; if idx == 2us { - println!("[{:02.x}] 0x{:02.X}{:02.X}{:02.X}", - i / 3, buf[0us], buf[1us], buf[2us]); + println!("{:>9} => 0x{:02.X}{:02.X}{:02.X}", + Color::of_value((i / 3) as u8).to_string(), + buf[0us], buf[1us], buf[2us]); } i = i + 1; } @@ -313,13 +371,14 @@ impl std::fmt::Debug for Palette { f : &mut std::fmt::Formatter) -> std::fmt::Result { - let mut i : usize = 0_us; - while i < PALETTE_BYTES { - let r = self.colors[i + 0_us]; - let g = self.colors[i + 1_us]; - let b = self.colors[i + 2_us]; - write!(f, "{:02} => 0x{:02.X}{:02.X}{:02.X}\n", i, r, g, b); - i = i + 3_us; + let mut i : u8 = 0_u8; + while (i as usize) < PALETTE_BYTES { + let r = self.colors[i as usize + 0_us]; + let g = self.colors[i as usize + 1_us]; + let b = self.colors[i as usize + 2_us]; + write!(f, "{} => 0x{:02.X}{:02.X}{:02.X}\n", + Color::of_value(i).to_string(), r, g, b); + i = i + 3_u8; } std::result::Result::Ok(()) } |