1use crate::prelude as txl;
2use crate::token;
3use crate::traits::*;
4use crate::vm;
5
6pub fn parse_keyword<S: TexlangState>(
10 input: &mut vm::ExpandedStream<S>,
11 keyword: &str,
12) -> txl::Result<bool> {
13 let Some(c) = keyword.chars().next() else {
14 return Ok(true);
16 };
17 let Some(token) = input.next()? else {
18 return Ok(false);
20 };
21 if token.value() != token::Value::Letter(c.to_ascii_lowercase())
22 && token.value() != token::Value::Letter(c.to_ascii_uppercase())
23 {
24 input.back(token);
25 return Ok(false);
26 }
27 let result = parse_keyword(input, &keyword[c.len_utf8()..]);
29 if let Ok(false) = result {
30 input.back(token);
32 }
33 result
34}