markdown_it/parser/core/
rule.rs1use crate::{MarkdownIt, Node};
2
3pub trait CoreRule : 'static {
5 fn run(root: &mut Node, md: &MarkdownIt);
6}
7
8macro_rules! rule_builder {
9 ($var: ident) => {
10 pub struct RuleBuilder<'a, T> {
12 item: &'a mut crate::common::ruler::RuleItem<crate::common::TypeKey, T>
13 }
14
15 impl<'a, T> RuleBuilder<'a, T> {
16 pub(crate) fn new(item: &'a mut crate::common::ruler::RuleItem<crate::common::TypeKey, T>) -> Self {
17 Self { item }
18 }
19
20 pub fn before<U: $var>(self) -> Self {
21 self.item.before(crate::common::TypeKey::of::<U>());
22 self
23 }
24
25 pub fn after<U: $var>(self) -> Self {
26 self.item.after(crate::common::TypeKey::of::<U>());
27 self
28 }
29
30 pub fn before_all(self) -> Self {
31 self.item.before_all();
32 self
33 }
34
35 pub fn after_all(self) -> Self {
36 self.item.after_all();
37 self
38 }
39
40 pub fn alias<U: $var>(self) -> Self {
41 self.item.alias(crate::common::TypeKey::of::<U>());
42 self
43 }
44
45 pub fn require<U: $var>(self) -> Self {
46 self.item.require(crate::common::TypeKey::of::<U>());
47 self
48 }
49 }
50 };
51}
52
53rule_builder!(CoreRule);
54
55pub(crate) use rule_builder;