Skip to content

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(...), and collect(...) are callbacks that your rule implements and SnapTeX calls.
  • renderer.name(...), context.name(...), input.name(...), and deps.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 constructs PreviewUpdateService.

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): AstRenderRule

Parameters ​

ParameterDescription
ruleAST 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 walker

Example ​

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.

See also ​

A fast structural preview, not a replacement for a full TeX compiler.