mathjslab
Version:
MathJSLab - An interpreter with language syntax like MATLAB®/Octave, ISBN 978-65-00-82338-7.
33 lines (32 loc) • 1.48 kB
TypeScript
/**
* Minimal rendering surface required by runtime values.
*
* Runtime values should not depend on the concrete `Interpreter` class just to
* render child values or inspect operator precedence. The interpreter implements
* this interface, but tests and future renderers can provide smaller objects.
*/
type RuntimeDisplay = {
/** Operator precedence table used when adding parentheses. */
precedenceTable: Record<string, number>;
/** Render a runtime or AST value as source-like text. */
Unparse(value: unknown, parentPrecedence?: number): string;
/** Render a runtime or AST value as MathML. */
UnparserMathML(value: unknown, parentPrecedence?: number): string;
};
/**
* Minimal evaluation surface required when runtime containers evaluate their
* child expressions.
*/
type RuntimeEvaluationContext = RuntimeDisplay & {
/** Evaluate a runtime/AST value inside an optional caller scope. */
Evaluator(value: unknown, scope?: unknown): unknown;
/** Comma-list expansion hooks used when array literals evaluate elements. */
context: {
pushCommaListExpansion(): void;
popCommaListExpansion(): void;
expandCommaSeparatedList(value: unknown): unknown[];
};
/** Optional class-aware concatenation hook used by array literals. */
concatenateOverload?(name: 'horzcat' | 'vertcat', values: unknown[], parent: unknown): unknown | undefined;
};
export type { RuntimeDisplay, RuntimeEvaluationContext };