use crate::Rational;
use crate::gaussian_rational::{
ComparableGaussianRational, ComparableGaussianRationalRef, GaussianRational,
};
use core::fmt::{Display, Formatter, Result, Write};
use malachite_base::strings::typst::ToTypst;
fn fmt_typst_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 ToTypst for GaussianRational {
fn fmt_typst(&self, f: &mut Formatter) -> Result {
if self.imaginary == 0u32 {
return self.real.fmt_typst(f);
}
if self.real != 0u32 {
self.real.fmt_typst(f)?;
if self.imaginary > 0u32 {
f.write_char('+')?;
} else {
f.write_char('-')?;
}
} else if self.imaginary < 0u32 {
f.write_char('-')?;
}
fmt_typst_unsigned_imaginary_term(&self.imaginary, f)
}
}
impl ToTypst for ComparableGaussianRational {
#[inline]
fn fmt_typst(&self, f: &mut Formatter) -> Result {
self.0.fmt_typst(f)
}
}
impl ToTypst for ComparableGaussianRationalRef<'_> {
#[inline]
fn fmt_typst(&self, f: &mut Formatter) -> Result {
self.0.fmt_typst(f)
}
}