UNPKG

mathsteps-experimental-fork

Version:

Step by step math solutions. Experimental Fork

63 lines (60 loc) 2.01 kB
import '../config.js'; import '../cache.js'; import { kemuFlatten } from '../simplifyExpression/kemuSimplifyCommonServices.js'; function setUpNewNodeTree(context, newNode, newTopNode = null) { if (!newTopNode) newTopNode = newNode; if (context.parent) { context.parent.args[context.index] = newNode; } else if (newNode.type === context.topNode.type) { Object.keys(context.topNode).forEach((key) => delete context.topNode[key]); Object.assign(context.topNode, newTopNode); } else { context.topNode = newNode; } } function travelTreeExpanded(node, fn, context = {}) { if (!context.visited) { context.visited = /* @__PURE__ */ new Set(); node = kemuFlatten(node); context.topNode = node; context.depth = 0; } const stack = [{ node, parent: null, parentParent: null, parentIndex: null, index: null, depth: 0 }]; while (stack.length > 0) { const current = stack.pop(); if (!current) continue; const { node: node2, parent, parentParent, parentIndex, index, depth } = current; if (context.visited.has(node2)) continue; context.visited.add(node2); fn(node2, { ...context, parent, parentParent, parentIndex, index, depth }); if (parent && parent.args) parent.args[index] = node2; if (parentParent && parentParent.args) parentParent.args[parentIndex] = parent; if (node2.args) { const currentParentIndex = index !== null ? index : 0; for (let i = node2.args.length - 1; i >= 0; i--) { stack.push({ node: node2.args[i], parent: node2, parentParent: parent, parentIndex: currentParentIndex, index: i, depth: depth + 1 }); } } } } function removeImplicitMultiplicationFromNode(node) { node.traverse((node2) => { const node_ = node2; if (node_.implicit) node_.implicit = false; }); return node; } export { removeImplicitMultiplicationFromNode, setUpNewNodeTree, travelTreeExpanded };