use super::Span;
use nom::{
bytes::complete::{tag, take_until},
IResult,
};
pub fn display_math(input: Span) -> IResult<Span, Span> {
log::debug!("Parsing display math at: {:?}", input.fragment());
let (input, _) = tag("$$")(input)?;
let (input, content) = take_until("$$")(input)?;
let (input, _) = tag("$$")(input)?;
log::debug!("Display math content: {:?}", content.fragment());
Ok((input, content))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn smoke_test_display_math_basic() {
let input = Span::new("$$x^2 + y^2 = r^2$$ text");
let result = display_math(input);
assert!(result.is_ok());
let (rest, content) = result.unwrap();
assert_eq!(*content.fragment(), "x^2 + y^2 = r^2");
assert_eq!(*rest.fragment(), " text");
}
#[test]
fn smoke_test_display_math_multiline() {
let input = Span::new("$$\\int_0^\\infty e^{-x^2} dx\n= \\sqrt{\\pi}$$");
let result = display_math(input);
assert!(result.is_ok());
let (_, content) = result.unwrap();
assert!(content.fragment().contains("\\int"));
assert!(content.fragment().contains("\\sqrt"));
}
}