defineAstRenderRule
How to read this API
These are TypeScript APIs compiled into SnapTeX; a .tex project cannot load them at runtime.
function name(...)is a helper that your rule imports and calls.apply(...),render(...),extract(...), andcollect(...)are callbacks that your rule implements and SnapTeX calls.renderer.name(...),context.name(...),input.name(...), anddeps.name(...)are methods SnapTeX supplies to callbacks; do not import or construct them.service.name(...)is an instance method called after your host or test constructsPreviewUpdateService.
Register extension declarations through SNAP_TEX_RULES in src/rules.ts. See Source API Scope for imports, value ownership, output safety, rebuilds, and testing.
Preserves an AST rule unchanged while providing contextual TypeScript typing. Use it while declaring a rule in src/rules.ts; adding the result to astRenderRules is the separate registration step.
Signature
ts
function defineAstRenderRule(rule: AstRenderRule): AstRenderRuleParameters
| Parameter | Description |
|---|---|
rule | AST render callback |
Returns
The same callback. The helper does not register, sort, clone, or wrap it.
Call relationships
- Called by: rule declarations in
src/rules.ts. - Registered through:
RuleRegistry.astRenderRules. - Executed by: the AST renderer in array order.
text
callback -> defineAstRenderRule -> astRenderRules registration -> AST walkerExample
ts
const RULE = defineAstRenderRule((input, context) => {
if (!isMacroNode(input.node, 'badge')) {
return undefined;
}
const args = readAstCommandArguments(input, 1);
const content = args.requiredArgs[0];
return content === undefined ? undefined : {
html: `<span>${context.escapeHtml(content)}</span>`,
consumedNodes: args.consumedNodes
};
});Prefer readAstCommandArguments for commands with arguments.