office2pdf 0.5.0

Convert DOCX, XLSX, and PPTX files to PDF using pure Rust
Documentation
//! Unicode-to-Typst character mapping for OMML math symbols.

/// Map a single Unicode character to its Typst math identifier, if applicable.
pub(crate) fn unicode_to_typst(ch: char) -> Option<&'static str> {
    match ch {
        // Greek lowercase
        'α' => Some("alpha"),
        'β' => Some("beta"),
        'γ' => Some("gamma"),
        'δ' => Some("delta"),
        'ε' => Some("epsilon"),
        'ζ' => Some("zeta"),
        'η' => Some("eta"),
        'θ' => Some("theta"),
        'ι' => Some("iota"),
        'κ' => Some("kappa"),
        'λ' => Some("lambda"),
        'μ' => Some("mu"),
        'ν' => Some("nu"),
        'ξ' => Some("xi"),
        'ο' => Some("omicron"),
        'π' => Some("pi"),
        'ρ' => Some("rho"),
        'σ' | 'ς' => Some("sigma"),
        'τ' => Some("tau"),
        'υ' => Some("upsilon"),
        'φ' => Some("phi"),
        'χ' => Some("chi"),
        'ψ' => Some("psi"),
        'ω' => Some("omega"),
        // Greek uppercase
        'Α' => Some("Alpha"),
        'Β' => Some("Beta"),
        'Γ' => Some("Gamma"),
        'Δ' => Some("Delta"),
        'Ε' => Some("Epsilon"),
        'Ζ' => Some("Zeta"),
        'Η' => Some("Eta"),
        'Θ' => Some("Theta"),
        'Ι' => Some("Iota"),
        'Κ' => Some("Kappa"),
        'Λ' => Some("Lambda"),
        'Μ' => Some("Mu"),
        'Ν' => Some("Nu"),
        'Ξ' => Some("Xi"),
        'Ο' => Some("Omicron"),
        'Π' => Some("Pi"),
        'Ρ' => Some("Rho"),
        'Σ' => Some("Sigma"),
        'Τ' => Some("Tau"),
        'Υ' => Some("Upsilon"),
        'Φ' => Some("Phi"),
        'Χ' => Some("Chi"),
        'Ψ' => Some("Psi"),
        'Ω' => Some("Omega"),
        // Math symbols
        '' => Some("infinity"),
        '' => Some("partial"),
        '' => Some("nabla"),
        '' => Some("emptyset"),
        '±' => Some("plus.minus"),
        '×' => Some("times"),
        '÷' => Some("div"),
        '' => Some("lt.eq"),
        '' => Some("gt.eq"),
        '' => Some("eq.not"),
        '' => Some("approx"),
        '' => Some("in"),
        '' => Some("in.not"),
        '' => Some("subset"),
        '' => Some("supset"),
        '' => Some("union"),
        '' => Some("sect"),
        // Additional operators
        '' => Some("angle"),
        '' => Some("and"),
        '' => Some("or"),
        '' => Some("compose"),
        '' => Some("dot.op"),
        '' => Some("minus.plus"),
        '¬' => Some("not"),
        '' => Some("plus.circle"),
        '' => Some("times.circle"),
        '' => Some("dot.circle"),
        '' => Some("tack.r"),
        '' => Some("tack.l"),
        '' => Some("top"),
        '' => Some("perp"),
        // Arrows
        '' => Some("arrow.l"),
        '' => Some("arrow.t"),
        '' => Some("arrow.r"),
        '' => Some("arrow.b"),
        '' => Some("arrow.l.r"),
        '' => Some("arrow.r.bar"),
        '' => Some("arrow.r.hook"),
        '' => Some("harpoon.lt"),
        '' => Some("harpoon.rt"),
        '' => Some("arrow.l.double"),
        '' => Some("arrow.r.double"),
        '' => Some("arrow.l.r.double"),
        // Extended relations
        '' => Some("equiv"),
        '' => Some("tilde.op"),
        '' => Some("tilde.eq"),
        '' => Some("lt.double"),
        '' => Some("gt.double"),
        '' => Some("subset.eq"),
        '' => Some("supset.eq"),
        '' => Some("prop"),
        '' => Some("therefore"),
        '' => Some("because"),
        // Blackboard bold (double-struck) letters
        '' => Some("CC"),
        '' => Some("HH"),
        '' => Some("NN"),
        '' => Some("PP"),
        '' => Some("QQ"),
        '' => Some("RR"),
        '' => Some("ZZ"),
        _ => None,
    }
}