mazer-core 0.12.0

A minimal, simple math markup language that compiles to HTML, written in Rust
Documentation
use crate::parser::{LispExpr, MathML};

impl MathML {
    pub fn addition(args: &[LispExpr]) -> Self {
        let args_mathml: Vec<String> = args.iter()
            .map(|arg| MathML::from(arg).to_string())
            .collect();
        
        format!("<mrow>{}</mrow>", args_mathml.join("<mo>+</mo>")).into()
    }

    pub fn subtraction(args: &[LispExpr]) -> Self {
        let args_mathml: Vec<String> = args.iter()
            .map(|arg| MathML::from(arg).to_string())
            .collect();

        format!("<mrow>{}</mrow>", args_mathml.join("<mo>-</mo>")).into()
    }

    pub fn multiplication(args: &[LispExpr]) -> Self {
        let args_mathml: Vec<String> = args.iter()
            .map(|arg| MathML::from(arg).to_string())
            .collect();

        format!("<mrow>{}</mrow>", args_mathml.join("<mo>*</mo>")).into()
    }

    pub fn division(args: &[LispExpr]) -> Self {
        let args_mathml: Vec<String> = args.iter()
            .map(|arg| MathML::from(arg).to_string())
            .collect();

        format!("<mrow>{}</mrow>", args_mathml.join("<mo>/</mo>")).into()
    }

    pub fn matrix(args: &[LispExpr]) -> Self {
        let rows_mathml = args.iter().map(|row| {
            if let LispExpr::List(cells) = row {
                let cells_mathml = cells.iter()
                    .map(|cell| format!("<mtd>{}</mtd>", MathML::from(cell).to_string()))
                    .collect::<Vec<String>>()
                    .join("");
                format!("<mtr>{}</mtr>", cells_mathml)
            } else {
                "<mtr><mtd>Error: matrix row must be a list</mtd></mtr>".to_string()
            }
        }).collect::<Vec<String>>().join("");
        
        format!("<mrow><mo>[</mo><mtable>{}</mtable><mo>]</mo></mrow>", rows_mathml).into()
    }

    pub fn fraction(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn subscript(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn superscript(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn vector(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn derivative(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn integral(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn limit(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn sum(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn abs(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn sqrt(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

    pub fn nth_root(_args: &[LispExpr]) -> Self {
        unimplemented!()
    }

}