use crate::shell::prompt::prompt_types::{PromptEscape, PromptCmdPart, PromptCmd, Argument};
grammar;
match {
"%%" => ESCAPE_CHAR,
"%n" => USERNAME,
"%F" => START_FG_COLOR,
"%f" => END_FG_COLOR,
"%K" => START_BG_COLOR,
"%k" => END_BG_COLOR,
"%g" => GIT,
"{" => LBRACE,
"}" => RBRACE,
r#"%([d/])"# => CWD,
r#"%~"# => CWD_HOME,
r#"%~>"# => CWD_HOME_CURRENT,
r#"%~<"# => CWD_HOME_PARENTS,
r#"[A-Z|a-z]*"# => WORD,
r#"[0-1]?[0-9]?[0-9]"# => U8_LOW, // 0 -> 199
r#"2[0-4][0-9]"# => U8_MID, // 200 -> 249
r#"25[0-5]"# => U8_HIGH, // 250 -> 255
} else {
r#"[^{}%]*"# => TEXT,
}
pub U8: u8 = {
<n: U8_LOW> => n.parse::<u8>().unwrap(),
<n: U8_MID> => n.parse::<u8>().unwrap(),
<n: U8_HIGH> => n.parse::<u8>().unwrap(),
}
pub PromptCmd: PromptCmd = {
<parts: PromptCmdPart*> => parts,
}
pub PromptCmdPart: PromptCmdPart = {
<e: PromptExpansion> => PromptCmdPart::Escaped(e),
TEXT => PromptCmdPart::Cmd(String::from(<>)),
}
PromptExpansion: PromptEscape = {
ESCAPE_CHAR => PromptEscape::EscapeChar,
USERNAME => PromptEscape::Username,
CWD => PromptEscape::Cwd,
CWD_HOME => PromptEscape::CwdHome,
CWD_HOME_CURRENT => PromptEscape::CwdHomeCurrent,
CWD_HOME_PARENTS => PromptEscape::CwdHomeParents,
START_FG_COLOR LBRACE <a: Argument> RBRACE => PromptEscape::FGColorStart(a),
END_FG_COLOR => PromptEscape::FGColorEnd,
START_BG_COLOR LBRACE <a: Argument> RBRACE => PromptEscape::BGColorStart(a),
END_BG_COLOR => PromptEscape::BGColorEnd,
GIT => PromptEscape::Git,
}
Argument: Argument = {
<w: WORD> => Argument::Word(String::from(w)),
<n: U8> => Argument::Number(n),
}