use markdown_it::parser::inline::{InlineRule, InlineState};
use markdown_it::{MarkdownIt, Node, NodeValue, Renderer};
const CRAB_CLAW : &str = r#"(\/)"#;
#[derive(Debug)]
pub struct InlineFerris;
impl NodeValue for InlineFerris {
fn render(&self, node: &Node, fmt: &mut dyn Renderer) {
let mut attrs = node.attrs.clone();
attrs.push(("class", "ferris-inline".into()));
fmt.open("span", &attrs);
fmt.text("🦀");
fmt.close("span");
}
}
struct FerrisInlineScanner;
impl InlineRule for FerrisInlineScanner {
const MARKER: char = '(';
fn run(state: &mut InlineState) -> Option<(Node, usize)> {
let input = &state.src[state.pos..state.pos_max]; if !input.starts_with(CRAB_CLAW) { return None; }
Some((
Node::new(InlineFerris),
CRAB_CLAW.len(),
))
}
}
pub fn add(md: &mut MarkdownIt) {
md.inline.add_rule::<FerrisInlineScanner>();
}