use crate::Rational;
use crate::gaussian_rational::{
ComparableGaussianRational, ComparableGaussianRationalRef, GaussianRational,
};
use core::fmt::{Display, Formatter, Result, Write};
use malachite_base::strings::latex::ToLatex;
fn fmt_latex_unsigned_imaginary_term(q: &Rational, f: &mut Formatter) -> Result {
let n = q.numerator_ref();
let d = q.denominator_ref();
if *d == 1u32 {
if *n != 1u32 {
Display::fmt(n, f)?;
}
return f.write_char('i');
}
f.write_str("\\frac{")?;
if *n != 1u32 {
Display::fmt(n, f)?;
}
f.write_char('i')?;
f.write_str("}{")?;
Display::fmt(d, f)?;
f.write_str("}")
}
impl ToLatex for GaussianRational {
fn fmt_latex(&self, f: &mut Formatter) -> Result {
if self.imaginary == 0u32 {
return self.real.fmt_latex(f);
}
if self.real != 0u32 {
self.real.fmt_latex(f)?;
if self.imaginary > 0u32 {
f.write_char('+')?;
} else {
f.write_char('-')?;
}
} else if self.imaginary < 0u32 {
f.write_char('-')?;
}
fmt_latex_unsigned_imaginary_term(&self.imaginary, f)
}
}
impl ToLatex for ComparableGaussianRational {
#[inline]
fn fmt_latex(&self, f: &mut Formatter) -> Result {
self.0.fmt_latex(f)
}
}
impl ToLatex for ComparableGaussianRationalRef<'_> {
#[inline]
fn fmt_latex(&self, f: &mut Formatter) -> Result {
self.0.fmt_latex(f)
}
}