use super::prelude::*;
use crate::id_prefix::isolate_ids;
use std::borrow::Cow;
pub const RULE_ANCHOR: Rule = Rule {
name: "anchor",
position: LineRequirement::Any,
try_consume_fn,
};
fn try_consume_fn<'r, 't>(
parser: &mut Parser<'r, 't>,
) -> ParseResult<'r, 't, Elements<'t>> {
debug!("Trying to create a named anchor");
assert_step(parser, Token::LeftBlockAnchor)?;
parser.get_token(Token::Whitespace, ParseErrorKind::RuleFailed)?;
let name = collect_text(
parser,
RULE_ANCHOR,
&[ParseCondition::current(Token::RightBlock)],
&[
ParseCondition::current(Token::Whitespace),
ParseCondition::current(Token::ParagraphBreak),
ParseCondition::current(Token::LineBreak),
],
None,
)?;
let name = if parser.settings().isolate_user_ids {
Cow::Owned(isolate_ids(name))
} else {
cow!(name)
};
ok!(Element::AnchorName(name))
}