freemarker 0.1.1

Apache FreeMarker 语义兼容的 Rust 模板引擎(freemarker-core 迁移)
Documentation
//! 宏/函数定义 —— 对应 Java `freemarker.core.Macro`
//! (<#macro> / <#function> 定义;参数语义见 docs/04 §4.2)

use crate::core::Element;
use crate::core::Expr;
use crate::span::Span;

#[derive(Debug, Clone)]
pub struct MacroDef {
    pub name: String,
    pub is_function: bool,
    pub params: Vec<MacroParam>,
    pub body: Vec<Element>,
    /// 命名空间限定名(`<@ns.macro>` 中的 ns,None 表示当前命名空间)
    pub namespace: Option<String>,
    /// 宏定义所在模板的查找名(Java `Macro` 的 `template` 字段——`setLocation` 于
    /// 解析期绑定,TemplateObject.java:55-83;`.caller_template_name` 的调用点词法
    /// 模板判定依赖它,BuiltinVariable.java:264-267)
    pub template_name: String,
    pub span: Span,
}

#[derive(Debug, Clone)]
pub struct MacroParam {
    pub name: String,
    pub default: Option<Expr>,
    pub optional: bool,
    pub catch_all: bool, // args...
}