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