use markdown_that::parser::inline::{InlineRule, InlineState};
use markdown_that::{MarkdownThat, 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 MarkdownThat) {
md.inline.add_rule::<FerrisInlineScanner>();
}