A world-class math input for the web
at main 29 lines 825 B view raw
1import { 2 CaretJuxtapositionParselet, 3 CaretNode, 4 CaretParser, 5 TokensTag, 6} from "@caret-js/core"; 7import { VariableNode } from "../nodes/variable"; 8import { FunctionCallNode } from "../nodes/functionCall"; 9import { ParenthesesChildTag } from "./parentheses"; 10 11export class FunctionCallParselet extends CaretJuxtapositionParselet { 12 constructor(private funcNames: Set<string>) { 13 super(); 14 } 15 16 canParse(left: CaretNode, right: CaretNode): boolean { 17 return ( 18 left instanceof VariableNode && 19 this.funcNames.has(left.name) && 20 right.hasTag(ParenthesesChildTag) 21 ); 22 } 23 24 parse(parser: CaretParser, left: VariableNode, right: CaretNode): CaretNode { 25 return FunctionCallNode.from(left.name, [right]).addTag( 26 new TokensTag([...(left.getTag(TokensTag)?.ownTokens ?? [])]) 27 ); 28 } 29}