Skip to content

Commit

Permalink
Rename Style to Color
Browse files Browse the repository at this point in the history
  • Loading branch information
twe4ked committed May 18, 2020
1 parent f8d5fa5 commit 2a24a30
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 72 deletions.
4 changes: 2 additions & 2 deletions src/component.rs
Expand Up @@ -6,6 +6,7 @@ use std::fmt;
use crate::token::{self, Condition, Token};
use crate::{Context, Shell};

pub mod color;
pub mod cwd;
pub mod git_branch;
pub mod git_commit;
Expand All @@ -14,7 +15,6 @@ pub mod git_status;
pub mod hostname;
pub mod jobs;
pub mod reset;
pub mod style;
pub mod user;

#[derive(Debug, PartialEq)]
Expand Down Expand Up @@ -48,7 +48,7 @@ pub fn components_from_tokens(
for token in tokens.into_iter() {
match token {
Token::Static(s) => components.push(Some(Component::Static(s.to_string()))),
Token::Style(style) => components.push(style::display(&style, &shell)),
Token::Color(color) => components.push(color::display(&color, &shell)),
Token::Reset => components.push(reset::display(&shell)),
Token::Component { name, mut options } => {
let c = match name {
Expand Down
48 changes: 48 additions & 0 deletions src/component/color.rs
@@ -0,0 +1,48 @@
use crate::component::Component;
use crate::token::Color;
use crate::utility::wrap_no_change_cursor_position as wrap;
use crate::Shell;

use crossterm::style::{Color as CrosstermColor, SetForegroundColor};

pub fn display(color: &Color, shell: &Shell) -> Option<Component> {
let color = match color {
Color::Black => CrosstermColor::Black,
Color::DarkGrey => CrosstermColor::DarkGrey,
Color::Blue => CrosstermColor::Blue,
Color::DarkBlue => CrosstermColor::DarkBlue,
Color::Green => CrosstermColor::Green,
Color::DarkGreen => CrosstermColor::DarkGreen,
Color::Red => CrosstermColor::Red,
Color::DarkRed => CrosstermColor::DarkRed,
Color::Cyan => CrosstermColor::Cyan,
Color::DarkCyan => CrosstermColor::DarkCyan,
Color::Magenta => CrosstermColor::Magenta,
Color::DarkMagenta => CrosstermColor::DarkMagenta,
Color::Yellow => CrosstermColor::Yellow,
Color::DarkYellow => CrosstermColor::DarkYellow,
Color::White => CrosstermColor::White,
};

Some(Component::Color(wrap(SetForegroundColor(color), shell)))
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn display_green() {
if let Some(Component::Color(green)) = display(&Color::Green, &Shell::Zsh) {
assert_eq!(format!("{}", green), "%{\u{1b}[38;5;10m%}".to_string());
} else {
unreachable!();
}

if let Some(Component::Color(green)) = display(&Color::Green, &Shell::Bash) {
assert_eq!(format!("{}", green), "\\[\u{1b}[38;5;10m\\]".to_string());
} else {
unreachable!();
}
}
}
54 changes: 0 additions & 54 deletions src/component/style.rs

This file was deleted.

19 changes: 8 additions & 11 deletions src/parser.rs
@@ -1,4 +1,4 @@
use crate::token::{Component, Condition, StyleToken, Token};
use crate::token::{Color, Component, Condition, Token};
use anyhow::Result;
use nom::branch::alt;
use nom::bytes::complete::tag;
Expand Down Expand Up @@ -47,12 +47,12 @@ fn start_identifier_end(input: &str) -> IResult<&str, &str> {
terminated(preceded(start_tag, identifier), end_tag)(input)
}

fn style_token(input: &str) -> IResult<&str, StyleToken> {
map_res(start_identifier_end, StyleToken::try_from)(input)
fn color_internal(input: &str) -> IResult<&str, Color> {
map_res(start_identifier_end, Color::try_from)(input)
}

fn style(input: &str) -> IResult<&str, Token> {
map(style_token, Token::Style)(input)
fn color(input: &str) -> IResult<&str, Token> {
map(color_internal, Token::Color)(input)
}

fn reset(input: &str) -> IResult<&str, Token> {
Expand Down Expand Up @@ -163,7 +163,7 @@ fn component(input: &str) -> IResult<&str, Token> {
fn tokens(input: &str) -> IResult<&str, Vec<Token>> {
many1(alt((
static_component,
style,
color,
reset,
conditional,
component,
Expand Down Expand Up @@ -354,17 +354,14 @@ mod tests {

#[test]
fn it_parses_style_components() {
assert_eq!(
parse(&"{green}").unwrap(),
vec![Token::Style(StyleToken::Green)]
);
assert_eq!(parse(&"{green}").unwrap(), vec![Token::Color(Color::Green)]);
}

#[test]
fn it_parses_style_with_whitespace() {
assert_eq!(
parse(&"{ green }").unwrap(),
vec![Token::Style(StyleToken::Green)]
vec![Token::Color(Color::Green)]
);
}

Expand Down
9 changes: 4 additions & 5 deletions src/token.rs
Expand Up @@ -4,7 +4,7 @@ use std::collections::HashMap;
use std::convert::TryFrom;

#[derive(Debug, PartialEq)]
pub enum StyleToken {
pub enum Color {
Black,
DarkGrey,
Blue,
Expand All @@ -22,11 +22,11 @@ pub enum StyleToken {
White,
}

impl TryFrom<&str> for StyleToken {
impl TryFrom<&str> for Color {
type Error = ();

fn try_from(value: &str) -> Result<Self, Self::Error> {
use StyleToken::*;
use Color::*;
match value {
"black" => Ok(Black),
"dark_grey" => Ok(DarkGrey),
Expand Down Expand Up @@ -102,8 +102,7 @@ pub enum Token {
options: HashMap<String, String>,
},
Static(String),
// TODO: Rename Color(Color),
Style(StyleToken),
Color(Color),
Reset,
Conditional {
condition: Condition,
Expand Down

0 comments on commit 2a24a30

Please sign in to comment.