sable-markdown/src/parser/blocks/tests/custom_parser.rs@main
raw
1use crate::ast::*;
2use crate::parser::{parse_markdown, MarkdownParserState};
3use nom::combinator::value;
4use std::cell::RefCell;
5use std::rc::Rc;
6
7#[test]
8fn custom_parser1() {
9 use nom::Parser;
10 let config = crate::parser::config::MarkdownParserConfig::default().with_custom_block_parser(
11 Rc::new(RefCell::new(Box::new(|input: &str| {
12 value(vec![Block::ThematicBreak], nom::bytes::complete::tag("///")).parse(input)
13 }))),
14 );
15 let doc = parse_markdown(MarkdownParserState::with_config(config), "///\ntext\n===").unwrap();
16 assert_eq!(
17 doc,
18 Document {
19 blocks: vec![
20 Block::ThematicBreak,
21 Block::Heading(Heading {
22 kind: HeadingKind::Setext(SetextHeading::Level1),
23 content: vec![Inline::Text("text".to_owned())]
24 })
25 ]
26 }
27 );
28}
29