katex-parser 0.1.0

A port of the KaTeX parser: lexing and parsing LaTeX math expressions with macro expansion into a typed AST, plus a Unicode rendering backend
Documentation
use crate::ast::ParseNode;
use crate::error::ParseError;
use crate::function_registry::{ArgType, FunctionContext, FunctionParser, FunctionSpec};

use super::{ord_argument, require_function_arg};

pub(crate) fn text_spec() -> FunctionSpec {
    FunctionSpec {
        names: vec![
            "\\text".to_string(),
            "\\textrm".to_string(),
            "\\textsf".to_string(),
            "\\texttt".to_string(),
            "\\textnormal".to_string(),
            "\\textbf".to_string(),
            "\\textmd".to_string(),
            "\\textit".to_string(),
            "\\textup".to_string(),
            "\\emph".to_string(),
        ],
        num_args: 1,
        arg_types: vec![ArgType::TextArg],
        allowed_in_argument: true,
        allowed_in_text: true,
        handler: Some(text_handler),
        ..Default::default()
    }
}

fn text_handler(
    _parser: &mut dyn FunctionParser,
    context: &FunctionContext,
    args: &[ParseNode],
    _opt_args: &[Option<ParseNode>],
) -> Result<ParseNode, ParseError> {
    Ok(ParseNode::Text {
        mode: context.mode,
        body: ord_argument(require_function_arg(args, 0, &context.func_name)?),
        font: context.func_name.clone(),
    })
}