1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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::LeftBracketStar => vec![RULE_LINK_SINGLE_NEW_TAB],
Token::RightBracket => vec![RULE_TEXT],
Token::LeftBlock => vec![RULE_BLOCK],
Token::LeftBlockEnd => vec![],
Token::LeftBlockAnchor => vec![RULE_ANCHOR],
Token::LeftBlockStar => vec![RULE_BLOCK_STAR],
Token::RightBlock => vec![],
Token::LeftParentheses => vec![RULE_BIBCITE, RULE_TEXT],
Token::RightParentheses => vec![RULE_BIBCITE, RULE_TEXT],
Token::LeftMath => vec![RULE_MATH],
Token::RightMath => vec![],
Token::DoubleDash => vec![RULE_STRIKETHROUGH, RULE_DASH],
Token::TripleDash => vec![RULE_HORIZONTAL_RULE],
Token::LeftDoubleAngle => vec![RULE_DOUBLE_ANGLE],
Token::ClearFloatBoth => vec![RULE_CLEAR_FLOAT],
Token::ClearFloatLeft => vec![RULE_CLEAR_FLOAT],
Token::ClearFloatRight => vec![RULE_CLEAR_FLOAT],
Token::Pipe => vec![RULE_TEXT],
Token::Equals => vec![RULE_CENTER, RULE_TEXT],
Token::Colon => vec![RULE_DEFINITION_LIST, RULE_TEXT],
Token::Underscore => vec![RULE_UNDERSCORE_LINE_BREAK, RULE_TEXT],
Token::Quote => vec![RULE_BLOCKQUOTE, RULE_DOUBLE_ANGLE, RULE_TEXT],
Token::Heading => vec![RULE_HEADER, RULE_TEXT],
Token::Whitespace => vec![RULE_UNDERSCORE_LINE_BREAK, RULE_LIST, RULE_TEXT],
Token::Bold => vec![RULE_BOLD],
Token::Italics => vec![RULE_ITALICS],
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_LIST, RULE_TEXT],
Token::NumberedItem => vec![RULE_LIST, RULE_TEXT],
Token::LeftLink => vec![RULE_LINK_TRIPLE],
Token::LeftLinkStar => vec![RULE_LINK_TRIPLE_NEW_TAB],
Token::RightLink => vec![],
Token::TableColumn => vec![RULE_TABLE],
Token::TableColumnLeft => vec![RULE_TABLE],
Token::TableColumnRight => vec![RULE_TABLE],
Token::TableColumnCenter => vec![RULE_TABLE],
Token::TableColumnTitle => vec![RULE_TABLE],
Token::Identifier => vec![RULE_TEXT],
Token::Email => vec![RULE_EMAIL],
Token::Url => vec![RULE_URL],
Token::Variable => vec![RULE_VARIABLE, RULE_TEXT],
Token::String => vec![RULE_TEXT],
Token::LineBreak => vec![RULE_BLOCK_SKIP_NEWLINE, RULE_DEFINITION_LIST_SKIP_NEWLINE, RULE_LINE_BREAK],
Token::ParagraphBreak => vec![RULE_LINE_BREAK_PARAGRAPH],
Token::InputStart => vec![RULE_NULL],
Token::InputEnd => vec![RULE_NULL],
Token::LeftComment => vec![RULE_COMMENT],
Token::RightComment => vec![],
Token::Other => vec![RULE_TEXT],
}
};
}
#[inline]
pub fn get_rules_for_token(current: &ExtractedToken) -> &'static [Rule] {
&RULE_MAP[current.token]
}