Skip to main content

katex_parser/
lib.rs

1//! A Rust port of the KaTeX parser: lexes and parses LaTeX math expressions
2//! with macro expansion into a typed [`ParseNode`] AST, and renders that AST
3//! to Unicode text.
4//!
5//! The parser mirrors the MoonBit `katex-parser` package (itself a port of
6//! [KaTeX](https://katex.org)). Entry points:
7//!
8//! - [`parse`] / [`parse_with_specs`] — parse LaTeX into a `ParseNode` list.
9//! - [`render`] — render a parsed node list as Unicode text.
10//! - [`Settings`] — parser configuration (display mode, macros, strictness,
11//!   trust policy, and a persistent macro store).
12
13mod ast;
14mod anvil;
15mod builtin_macros;
16mod builtin_macros_commands;
17mod builtin_macros_control;
18mod builtin_macros_dots;
19mod builtin_macros_special;
20mod builtin_macros_static;
21mod environments;
22mod error;
23mod function_registry;
24mod functions;
25mod lexer;
26mod macro_definition;
27mod macro_expander;
28mod namespace;
29mod parser;
30mod settings;
31mod source_location;
32mod symbol_registry;
33mod text_ligature;
34mod token;
35mod unicode;
36mod unicode_font;
37mod unicode_scripts;
38mod unicode_symbols;
39
40pub use anvil::{atom_family_name, cancel_bin_atoms, command_name, em_value, is_null_delimiter,
41    join_with_spacing, katex_size_multiplier, math_choice_variant, math_spacing, resolve_symbol,
42    SpacableItem, SpacingSpec};
43pub use ast::{
44    ArrayColumn, AtomFamily, ColumnSeparationType, LapAlignment, Measurement, Mode,
45    OperatorContent, ParseNode, StyleLevel,
46};
47pub use environments::{
48    build_environment_registry, EnvironmentContext, EnvironmentHandler, EnvironmentParser,
49    EnvironmentRegistry, EnvironmentSpec, ArrayEnvironmentOptions,
50};
51pub use error::{Diagnostic, ParseError};
52pub use function_registry::{
53    build_function_registry, ArgType, FunctionContext, FunctionHandler, FunctionParser,
54    FunctionRegistry, FunctionSpec,
55};
56pub use macro_definition::{MacroDefinition, MacroExpansion};
57pub use parser::{parse, parse_with_specs};
58pub use settings::{Macros, Settings, StrictHandler, StrictResponse, Strictness,
59    StrictWarningHandler, TrustContext, TrustHandler, TrustPolicy};
60pub use source_location::SourceLocation;
61pub use symbol_registry::unicode_symbol;
62pub use token::{token_location, Token};
63pub use unicode::{line_style_frac_bar, render, unicode_text_spacing, Block, LineStyle, RenderConfig};
64pub use unicode_font::unicode_font_character;
65pub use unicode_scripts::{supported_codepoint, unicode_script_character, UnicodeScriptKind};
66
67#[cfg(test)]
68mod tests;