use oxyl_diagnostics::DiagSpan;
use oxyl_lexer::{Span, TokenKind};
use crate::ast::{Arg, Node};
pub(super) fn diag_span(s: Span) -> DiagSpan {
DiagSpan::new(s.start, s.end)
}
pub(super) fn is_display_math_close(k: &TokenKind) -> bool {
matches!(k, TokenKind::ControlSeq(s) if s == "]")
}
pub(super) fn is_end_control_seq(k: &TokenKind) -> bool {
matches!(k, TokenKind::ControlSeq(s) if s == "end")
}
pub(super) fn find_env_name(args: &[Arg]) -> Option<(usize, String)> {
for (i, arg) in args.iter().enumerate() {
if let Arg::Mandatory(children) = arg {
let mut name = String::new();
for child in children {
if let Node::Text(t, _) = child {
name.push_str(t);
} else {
return None;
}
}
let trimmed = name.trim().to_owned();
if !trimmed.is_empty() {
return Some((i, trimmed));
}
}
}
None
}