use codex::styling::MathVariant;
use crate::foundations::{Cast, Content, func};
use crate::math::EquationElem;
#[func(keywords = ["mathbf"])]
pub fn bold(
body: Content,
) -> Content {
body.set(EquationElem::bold, true)
}
#[func(keywords = ["mathup"])]
pub fn upright(
body: Content,
) -> Content {
body.set(EquationElem::italic, Some(false))
}
#[func(keywords = ["mathit"])]
pub fn italic(
body: Content,
) -> Content {
body.set(EquationElem::italic, Some(true))
}
#[func(keywords = ["mathrm"])]
pub fn serif(
body: Content,
) -> Content {
body.set(EquationElem::variant, Some(MathVariant::Plain))
}
#[func(title = "Sans Serif", keywords = ["mathsf"])]
pub fn sans(
body: Content,
) -> Content {
body.set(EquationElem::variant, Some(MathVariant::SansSerif))
}
#[func(title = "Calligraphic", keywords = ["mathcal", "chancery"])]
pub fn cal(
body: Content,
) -> Content {
body.set(EquationElem::variant, Some(MathVariant::Chancery))
}
#[func(title = "Script Style", keywords = ["mathscr", "roundhand"])]
pub fn scr(
body: Content,
) -> Content {
body.set(EquationElem::variant, Some(MathVariant::Roundhand))
}
#[func(title = "Fraktur", keywords = ["mathfrak"])]
pub fn frak(
body: Content,
) -> Content {
body.set(EquationElem::variant, Some(MathVariant::Fraktur))
}
#[func(title = "Monospace", keywords = ["mathtt"])]
pub fn mono(
body: Content,
) -> Content {
body.set(EquationElem::variant, Some(MathVariant::Monospace))
}
#[func(title = "Blackboard Bold", keywords = ["mathbb"])]
pub fn bb(
body: Content,
) -> Content {
body.set(EquationElem::variant, Some(MathVariant::DoubleStruck))
}
#[func(title = "Display Size", keywords = ["displaystyle"])]
pub fn display(
body: Content,
#[named]
#[default(false)]
cramped: bool,
) -> Content {
body.set(EquationElem::size, MathSize::Display)
.set(EquationElem::cramped, cramped)
}
#[func(title = "Inline Size", keywords = ["textstyle"])]
pub fn inline(
body: Content,
#[named]
#[default(false)]
cramped: bool,
) -> Content {
body.set(EquationElem::size, MathSize::Text)
.set(EquationElem::cramped, cramped)
}
#[func(title = "Script Size", keywords = ["scriptstyle"])]
pub fn script(
body: Content,
#[named]
#[default(true)]
cramped: bool,
) -> Content {
body.set(EquationElem::size, MathSize::Script)
.set(EquationElem::cramped, cramped)
}
#[func(title = "Script-Script Size", keywords = ["scriptscriptstyle"])]
pub fn sscript(
body: Content,
#[named]
#[default(true)]
cramped: bool,
) -> Content {
body.set(EquationElem::size, MathSize::ScriptScript)
.set(EquationElem::cramped, cramped)
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Cast)]
pub enum MathSize {
ScriptScript,
Script,
Text,
Display,
}