use super::{impls::*, Rule};
use crate::parsing::token::{ExtractedToken, Token};
use enum_map::EnumMap;
lazy_static! {
pub static ref RULE_MAP: EnumMap<Token, Vec<Rule>> = {
enum_map! {
Token::LeftBracket => vec![RULE_LINK_SINGLE, RULE_TEXT],
Token::LeftBracketAnchor => vec![RULE_LINK_ANCHOR],
Token::LeftBracketSpecial => vec![RULE_LINK_SINGLE_NEW_TAB],
Token::RightBracket => vec![RULE_TEXT],
Token::LeftBlock => vec![RULE_BLOCK],
Token::LeftBlockEnd => vec![],
Token::LeftBlockSpecial => vec![RULE_BLOCK_SPECIAL],
Token::RightBlock => vec![],
Token::DoubleDash => vec![RULE_STRIKETHROUGH, RULE_DASH],
Token::TripleDash => vec![RULE_HORIZONTAL_RULE],
Token::LeftDoubleAngle => vec![RULE_DOUBLE_ANGLE],
Token::ClearFloatNeutral => vec![RULE_TODO], Token::ClearFloatCenter => vec![RULE_TODO], Token::ClearFloatLeft => vec![RULE_TODO], Token::ClearFloatRight => vec![RULE_TODO], Token::Pipe => vec![RULE_TEXT],
Token::Equals => vec![RULE_TODO, RULE_TEXT], Token::Underscore => vec![RULE_TEXT],
Token::Quote => vec![RULE_DOUBLE_ANGLE, RULE_TEXT],
Token::Heading => vec![RULE_TODO, RULE_TEXT], Token::LineBreak => vec![RULE_BLOCKQUOTE, RULE_LIST, RULE_BLOCK_SKIP, RULE_LINE_BREAK],
Token::ParagraphBreak => vec![RULE_LINE_BREAK_PARAGRAPH],
Token::Whitespace => vec![RULE_TEXT],
Token::Strong => vec![RULE_STRONG],
Token::Emphasis => vec![RULE_EMPHASIS],
Token::Underline => vec![RULE_UNDERLINE],
Token::Superscript => vec![RULE_SUPERSCRIPT],
Token::Subscript => vec![RULE_SUBSCRIPT],
Token::LeftMonospace => vec![RULE_MONOSPACE],
Token::RightMonospace => vec![],
Token::Color => vec![RULE_COLOR],
Token::Raw => vec![RULE_RAW],
Token::LeftRaw => vec![RULE_RAW],
Token::RightRaw => vec![],
Token::BulletItem => vec![RULE_TEXT],
Token::NumberedItem => vec![RULE_TEXT],
Token::LeftLink => vec![RULE_LINK_TRIPLE],
Token::LeftLinkSpecial => vec![RULE_LINK_TRIPLE_NEW_TAB],
Token::RightLink => vec![],
Token::TableColumn => vec![RULE_TODO], Token::TableColumnTitle => vec![RULE_TODO],
Token::RightAlignOpen => vec![RULE_TODO], Token::RightAlignClose => vec![],
Token::LeftAlignOpen => vec![RULE_TODO], Token::LeftAlignClose => vec![],
Token::CenterAlignOpen => vec![RULE_TODO], Token::CenterAlignClose => vec![],
Token::JustifyAlignOpen => vec![RULE_TODO], Token::JustifyAlignClose => vec![],
Token::Identifier => vec![RULE_TEXT],
Token::Email => vec![RULE_EMAIL],
Token::Url => vec![RULE_URL],
Token::Variable => vec![RULE_TEXT],
Token::String => vec![RULE_TEXT],
Token::LeftComment => vec![RULE_COMMENT],
Token::RightComment => vec![],
Token::InputStart => vec![RULE_BLOCKQUOTE, RULE_LIST, RULE_NULL],
Token::InputEnd => vec![RULE_NULL],
Token::Other => vec![RULE_TEXT],
}
};
}
#[inline]
pub fn get_rules_for_token(current: &ExtractedToken) -> &'static [Rule] {
&RULE_MAP[current.token]
}