// Copyright (c) 2024 LinZeming
// Released under the MIT License
//
// MoonBit Template Engine — A Jinja2/Tera-inspired template rendering engine.
//
// # Quick Start
//
// ```
// let tpl = Template::parse("Hello, {{ name }}!")?
// let ctx = Context::new().set("name", Str("World"))
// let result = tpl.render(ctx)?
// ```

///|
/// Version of the template engine.
pub const VERSION : String = "0.1.0"

// ---------------------------------------------------------------------------
// Public API overview
// ---------------------------------------------------------------------------
//
// Types:
//   Token, TokenKind           — lexer tokens (lexer.mbt)
//   Value, Expr, Node,
//   BinOpKind, UnaryOpKind,
//   ElifBranch                  — AST nodes (ast.mbt)
//   Context                     — nested-scope storage (context.mbt)
//   Evaluator                   — expression evaluator (evaluator.mbt)
//   Parser                      — token → AST parser (parser.mbt)
//   Renderer                    — AST → string renderer (renderer.mbt)
//   Template                    — parse + render entry (template.mbt)
//   FilterRegistry, FilterFn    — filter system (filters.mbt)
//   TemplateLoader              — include resolver (loader.mbt)
//
//   ErrorKind, SourceLocation,
//   TemplateError              — unified error types (errors.mbt)
//
// Key functions:
//   tokenize(input) → Result[Array[Token], String]
//   Template::parse(source) → Result[Template, TemplateError]
//   Template::render(ctx) → Result[String, TemplateError]
//   Parser::make_error(kind, msg) → TemplateError
//   TemplateError::to_string() → String (human-readable)
//   extract_snippet(source, line) → String