A world-class math input for the web
1import { CaretInfixParselet, CharToken, TokensTag } from "@caret-js/core";
2import { CaretNode, CaretParser } from "@caret-js/core";
3import { EquationNode } from "../nodes/equation";
4import { FunctionDefinitionNode } from "../nodes/functionDefinition";
5
6export class EquationParselet extends CaretInfixParselet {
7 public readonly associativity = "left";
8
9 parse(
10 parser: CaretParser,
11 left: CaretNode
12 ): EquationNode | FunctionDefinitionNode {
13 const token = parser.consume();
14 this.assert(
15 token instanceof CharToken && token.char === "=",
16 "Expected '=' token"
17 );
18
19 const right = parser.parseMinBP(this);
20 return EquationNode.from([left, right]).addTag(new TokensTag([token]));
21 }
22}