ftml/parsing/rule/impls/
bibcite.rs1use super::prelude::*;
22
23pub const RULE_BIBCITE: Rule = Rule {
24 name: "bibcite",
25 position: LineRequirement::Any,
26 try_consume_fn,
27};
28
29fn try_consume_fn<'r, 't>(
30 parser: &mut Parser<'r, 't>,
31) -> ParseResult<'r, 't, Elements<'t>> {
32 debug!("Trying to create bibcite element");
33 assert_step(parser, Token::LeftParentheses)?;
34
35 let current = parser.current();
37 if current.token != Token::Identifier
38 && !current.slice.eq_ignore_ascii_case("bibcite")
39 {
40 warn!("'((' not followed by 'bibcite', failing rule");
41 return Err(parser.make_err(ParseErrorKind::RuleFailed));
42 }
43 parser.step()?;
44
45 if !matches!(parser.current().token, Token::Whitespace) {
47 warn!("'((bibcite' not followed by a space, failing rule");
48 return Err(parser.make_err(ParseErrorKind::RuleFailed));
49 }
50 parser.step()?;
51
52 let label = collect_text(
53 parser,
54 RULE_BIBCITE,
55 &[ParseCondition::current(Token::RightParentheses)],
56 &[
57 ParseCondition::current(Token::Whitespace),
58 ParseCondition::current(Token::ParagraphBreak),
59 ParseCondition::current(Token::LineBreak),
60 ],
61 None,
62 )?;
63
64 ok!(Element::BibliographyCite {
65 label: cow!(label),
66 brackets: false,
67 })
68}