use super::mapping::get_module_rule_with_name;
use super::prelude::*;
pub const BLOCK_MODULE: BlockRule = BlockRule {
name: "block-module",
accepts_names: &["module", "module654"],
accepts_star: false,
accepts_score: false,
accepts_newlines: true,
parse_fn,
};
fn parse_fn<'r, 't>(
parser: &mut Parser<'r, 't>,
name: &'t str,
flag_star: bool,
flag_score: bool,
in_head: bool,
) -> ParseResult<'r, 't, Elements<'t>> {
debug!("Parsing module block (in-head {in_head})");
parser.check_page_syntax()?;
assert!(!flag_star, "Module doesn't allow star flag");
assert!(!flag_score, "Module doesn't allow score flag");
assert_block_name(&BLOCK_MODULE, name);
let (subname, arguments) = parser.get_head_name_map(&BLOCK_MODULE, in_head)?;
let module_rule = match get_module_rule_with_name(subname) {
Some(rule) => rule,
None => return Err(parser.make_err(ParseErrorKind::NoSuchModule)),
};
parser.set_module(module_rule);
let (elements, errors, paragraph_safe) =
(module_rule.parse_fn)(parser, subname, arguments)?.into();
ok!(paragraph_safe; elements, errors)
}