{"version":3,"file":"mathup.cjs","sources":["../../src/compiler/parser/utils.js","../../src/compiler/parser/handlers/multiscripts.js","../../src/compiler/parser/handlers/group.js","../../src/compiler/parser/handlers/command.js","../../src/compiler/parser/handlers/prefix.js","../../src/compiler/parser/handlers/space.js","../../src/compiler/parser/handlers/index.js","../../src/compiler/parser/handlers/infix.js","../../src/compiler/parser/handlers/term.js","../../src/compiler/parser/handlers/expr.js","../../src/compiler/parser/parse.js","../../src/compiler/renders/to-dom.js","../../src/compiler/renders/to-string.js","../../src/compiler/renders/update-dom.js","../../src/compiler/tokenizer/lexemes.js","../../src/compiler/tokenizer/scanners/utils.js","../../src/compiler/tokenizer/scanners/alpha.js","../../src/compiler/tokenizer/scanners/backslash.js","../../src/compiler/tokenizer/scanners/backtick.js","../../src/compiler/tokenizer/scanners/group-sep.js","../../src/compiler/tokenizer/scanners/infix.js","../../src/compiler/tokenizer/scanners/newline.js","../../src/compiler/tokenizer/scanners/number.js","../../src/compiler/tokenizer/scanners/octothorpe.js","../../src/compiler/tokenizer/scanners/operator.js","../../src/compiler/tokenizer/scanners/paren-close.js","../../src/compiler/tokenizer/scanners/paren-open.js","../../src/compiler/tokenizer/scanners/quote.js","../../src/compiler/tokenizer/scanners/space.js","../../src/compiler/tokenizer/scanners/unhandled.js","../../src/compiler/tokenizer/scanners/index.js","../../src/compiler/tokenizer/index.js","../../src/compiler/transformer/transforms/fenced-group.js","../../src/compiler/transformer/transforms/literal.js","../../src/compiler/transformer/transforms/matrix-group.js","../../src/compiler/transformer/transforms/multiscripts.js","../../src/compiler/transformer/transforms/operation.js","../../src/compiler/transformer/transforms/sentence.js","../../src/compiler/transformer/transforms/space-literal.js","../../src/compiler/transformer/transforms/styles.js","../../src/compiler/transformer/transforms/term.js","../../src/compiler/transformer/transforms/text-transforms.js","../../src/compiler/transformer/transforms/unary-operation.js","../../src/compiler/transformer/transforms/index.js","../../src/compiler/transformer/index.js","../../src/compiler/index.js","../../src/index.js"],"sourcesContent":["/**\n * @typedef {import(\"../tokenizer/index.js\").Token} Token\n * @typedef {import(\"./index.js\").Node} Node\n */\n\n/**\n * @param {Token} token\n * @returns {boolean}\n */\nexport function isPipeOperator(token) {\n  return token.type === \"operator\" && token.value === \"|\";\n}\n\n/**\n * @param {Token} token\n * @returns {boolean}\n */\nexport function isDoublePipeOperator(token) {\n  return token.type === \"operator\" && token.value === \"∥\";\n}\n\n/**\n * Double pipe defaults to the parallel-to character which is behaves\n * wrong when used as a fence.\n * @param {Node[]} items\n * @returns {void}\n */\nexport function maybeFixDoublePipe(items) {\n  if (items.length < 2) {\n    return;\n  }\n\n  const first = items.at(0);\n  if (first?.type === \"OperatorLiteral\" && first.value === \"∥\") {\n    first.value = \"‖\";\n  }\n\n  const last = items.at(-1);\n  if (last?.type === \"OperatorLiteral\" && last.value === \"∥\") {\n    last.value = \"‖\";\n  }\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function addZeroLSpaceToOperator(node) {\n  let first = node;\n  while (\n    first &&\n    (first.type === \"Term\" ||\n      first.type === \"UnaryOperation\" ||\n      first.type === \"BinaryOperation\" ||\n      first.type === \"TernaryOperation\")\n  ) {\n    [first] = first.items;\n  }\n\n  if (!first) {\n    return;\n  }\n\n  if (first.type === \"OperatorLiteral\") {\n    if (!first.attrs) {\n      first.attrs = {};\n    }\n\n    if (typeof first.attrs.lspace === \"undefined\") {\n      first.attrs.lspace = 0;\n    }\n  }\n}\n","import expr from \"./expr.js\";\n\n/**\n * @typedef {import(\"../../tokenizer/index.js\").Token} Token\n * @typedef {import(\"../index.js\").Node} Node\n * @typedef {import(\"../index.js\").Term} Term\n * @typedef {import(\"../index.js\").MultiScripts} MultiScripts\n */\n\n/** @returns {Term} */\nfunction empty() {\n  return { type: \"Term\", items: [] };\n}\n\n/**\n * @param {Token} token\n * @returns {boolean}\n */\nfunction isIndexBreak(token) {\n  if (token.type === \"sep.row\" || token.type === \"sep.col\") {\n    return true;\n  }\n\n  if (token.type !== \"infix\") {\n    return false;\n  }\n\n  return token.value === \"sub\" || token.value === \"sup\";\n}\n\n/**\n * @param {Node[] | null} nodes\n * @returns {Node[]}\n */\nfunction prepareScript(nodes) {\n  if (!nodes) {\n    return [];\n  }\n\n  if (nodes.at(-1)?.type === \"SpaceLiteral\") {\n    // ignore trailing space\n    nodes.pop();\n  }\n\n  if (nodes.length !== 1) {\n    return nodes;\n  }\n\n  const [node] = nodes;\n\n  if (node.type !== \"FencedGroup\" || node.items.length !== 1) {\n    return nodes;\n  }\n\n  const [cell] = node.items;\n\n  if (cell.length === 1) {\n    const [first] = cell;\n    const term =\n      first.type === \"Term\" && first.items.length === 1\n        ? first.items[0]\n        : first;\n\n    if (term.type.endsWith(\"Literal\")) {\n      // We fenced a single item for a reason, lets keep them.\n      return nodes;\n    }\n  }\n  return [\n    {\n      type: \"Term\",\n      items: cell,\n    },\n  ];\n}\n\n/**\n * Parse the series of sub- and sup indices of the multiscript. Note\n * we assume the first two tokens have already been checked.\n *\n * @param {import(\"../parse.js\").State} state\n * @returns {{ scripts: [Node[], Node[]][], end: number }}\n */\nfunction parseScripts(state) {\n  let i = state.start + 1;\n  let token = state.tokens.at(i);\n\n  /** @type {[Node[], Node[]][]} */\n  const scripts = [];\n  /** @type {Node[] | null} */\n  let sub = null;\n  /** @type {Node[] | null} */\n  let sup = null;\n\n  /**\n   * @returns {void}\n   */\n  function commit() {\n    if ((sub && sub.length > 0) || (sup && sup.length > 0)) {\n      scripts.push([prepareScript(sub), prepareScript(sup)]);\n    }\n\n    sub = null;\n    sup = null;\n  }\n\n  // Remember previous position to allow repeat positions.\n  let position = token?.value ?? \"sub\";\n\n  while (token && isIndexBreak(token)) {\n    if (token.type === \"infix\") {\n      // Update current position\n      position = token.value;\n    }\n\n    i += 1;\n    token = state.tokens[i];\n\n    if (token && token.type === \"space\") {\n      i += 1;\n      token = state.tokens[i];\n    }\n\n    /** @type {Node[]} */\n    const items = [];\n    while (token && token.type !== \"paren.close\" && !isIndexBreak(token)) {\n      const next = expr({\n        ...state,\n        start: i,\n        stack: [],\n        nestLevel: state.nestLevel + 1,\n        stopAt(other) {\n          return (\n            other.type === \"infix\" &&\n            (other.value === \"sub\" || other.value === \"sup\")\n          );\n        },\n      });\n\n      items.push(next.node);\n      i = next.end;\n      token = state.tokens[i];\n    }\n\n    if (position === \"sup\") {\n      if (sup) {\n        commit();\n      }\n      sup = items;\n    } else {\n      if (sub) {\n        commit();\n      }\n      sub = items;\n    }\n  }\n\n  if (sub || sup) {\n    commit();\n  }\n\n  if (token?.type === \"paren.close\") {\n    i += 1;\n  }\n\n  return {\n    scripts,\n    end: i,\n  };\n}\n\n/**\n * Parse a multiscript. Note that we assume the first two tokens been\n * checked.\n *\n * @param {import(\"../parse.js\").State} state\n * @returns {{ node: MultiScripts, end: number }}\n */\nexport default function multiscripts(state) {\n  let { scripts, end: i } = parseScripts(state);\n  let token = state.tokens.at(i);\n\n  /** @type {Node | undefined} */\n  let base;\n  /** @type {[Node[], Node[]][] | undefined} */\n  let prescripts;\n\n  if (!token || token.type === \"space\") {\n    // There is nothing after the already parsed scripts. Apply as postscripts.\n    base = state.stack.pop();\n    if (base?.type === \"SpaceLiteral\") {\n      base = empty();\n    }\n  } else {\n    // existing scripts are prescripts. See if there are postscripts.\n    prescripts = scripts;\n    scripts = [];\n\n    const next = expr({\n      ...state,\n      start: i,\n      stack: [],\n      nestLevel: state.nestLevel + 1,\n      stopAt(other) {\n        return other.type === \"paren.open\";\n      },\n    });\n\n    base = next.node;\n    i = next.end;\n    token = state.tokens[i];\n\n    if (token?.type === \"paren.open\") {\n      const nextToken = state.tokens.at(i + 1);\n\n      if (\n        nextToken?.type === \"infix\" &&\n        (nextToken.value === \"sub\" || nextToken.value === \"sup\")\n      ) {\n        ({ scripts, end: i } = parseScripts({ ...state, start: i }));\n      }\n    }\n  }\n\n  /** @type {MultiScripts} */\n  const node = {\n    type: \"MultiScripts\",\n    base: base ?? empty(),\n    post: scripts,\n  };\n\n  if (prescripts) {\n    node.pre = prescripts;\n  }\n\n  return {\n    node,\n    end: i,\n  };\n}\n","import { addZeroLSpaceToOperator } from \"../utils.js\";\n\nimport expr from \"./expr.js\";\nimport multiscripts from \"./multiscripts.js\";\n\n/**\n * @typedef {import(\"../../tokenizer/index.js\").Token} Token\n * @typedef {import(\"../index.js\").Node} Node\n * @typedef {import(\"../index.js\").FencedGroup} FencedGroup\n * @typedef {import(\"../index.js\").MatrixGroup} MatrixGroup\n * @typedef {import(\"../index.js\").MultiScripts} MultiScripts\n * @typedef {import(\"../index.js\").LiteralAttrs} LiteralAttrs\n */\n\n/**\n * @param {Token} token\n * @returns {Omit<Token, \"type\">}\n */\nfunction omitType(token) {\n  const { type: _type, ...rest } = token;\n\n  return rest;\n}\n\n/**\n * @param {import(\"../parse.js\").State} state\n * @returns {{ node: FencedGroup | MatrixGroup | MultiScripts, end: number }}\n */\nexport default function group(state) {\n  let i = state.start;\n  let token = state.tokens[i];\n\n  const open = token;\n\n  /** @type {{ value: string, attrs?: LiteralAttrs }[]} */\n  const seps = [];\n\n  /** @type {Node[]} */\n  let cell = [];\n\n  /** @type {Node[][]} */\n  let cols = [];\n\n  /** @type {Node[][][]} */\n  const rows = [];\n\n  i += 1;\n  token = state.tokens[i];\n\n  if (token && token.type === \"space\") {\n    // Ignore leading space.\n    i += 1;\n    token = state.tokens[i];\n  }\n\n  if (\n    token &&\n    token.type === \"infix\" &&\n    (token.value === \"sub\" || token.value === \"sup\")\n  ) {\n    return multiscripts({ ...state, start: i - 1 });\n  }\n\n  while (token && token.type !== \"paren.close\") {\n    if (token.type === \"space\" && token.value === \" \") {\n      // No need to add tokens which don’t render elements to our\n      // cell.\n      i += 1;\n      token = state.tokens[i];\n\n      continue;\n    }\n\n    if (token.type === \"sep.col\") {\n      /** @type {{ value: string, attrs?: LiteralAttrs }} */\n      const sepToken = { value: token.value };\n      if (token.attrs) {\n        sepToken.attrs = token.attrs;\n      }\n\n      seps.push(sepToken);\n      cols.push(cell);\n      cell = [];\n      i += 1;\n      token = state.tokens[i];\n\n      // Ignore leading space.\n      if (token && token.type === \"space\") {\n        i += 1;\n        token = state.tokens[i];\n      }\n\n      continue;\n    }\n\n    if (token.type === \"sep.row\") {\n      cols.push(cell);\n      rows.push(cols);\n      cell = [];\n      cols = [];\n      i += 1;\n      token = state.tokens[i];\n\n      // Ignore leading space.\n      if (token && token.type === \"space\") {\n        i += 1;\n        token = state.tokens[i];\n      }\n\n      continue;\n    }\n\n    if (cell.length === 1) {\n      // If first element is an operator it may throw alignment out\n      // with its implicit lspace.\n      addZeroLSpaceToOperator(cell[0]);\n    }\n\n    const next = expr({\n      ...state,\n      start: i,\n      stack: cell,\n      nestLevel: state.nestLevel + 1,\n    });\n\n    cell.push(next.node);\n    i = next.end;\n    token = state.tokens[i];\n  }\n\n  if (cell.length > 0) {\n    cols.push(cell);\n  }\n\n  const end = i + 1;\n  const close = token && token.type === \"paren.close\" ? token : null;\n\n  const attrs = {\n    open: omitType(open),\n    close: close ? omitType(close) : null,\n    seps,\n  };\n\n  if (attrs.close?.value === \"|\" && !open.value) {\n    // Add a small space before the \"evaluate at\" operator\n    if (!attrs.close.attrs) {\n      attrs.close.attrs = {};\n    }\n    attrs.close.attrs.lspace = \"0.35ex\";\n  }\n\n  if (rows.length === 0) {\n    return {\n      node: { type: \"FencedGroup\", items: cols, attrs },\n      end,\n    };\n  }\n\n  const rowItems = rows;\n\n  if (cols.length > 0) {\n    rowItems.push(cols);\n  }\n\n  return {\n    node: { type: \"MatrixGroup\", items: rowItems, attrs },\n    end,\n  };\n}\n","import { isDoublePipeOperator, isPipeOperator } from \"../utils.js\";\n\nimport expr from \"./expr.js\";\n\n/**\n * @typedef {import(\"../../tokenizer/index.js\").Token} Token\n * @typedef {import(\"../index.js\").Node} Node\n * @typedef {import(\"../index.js\").UnaryOperation} UnaryOperation\n * @typedef {import(\"../index.js\").BinaryOperation} BinaryOperation\n * @typedef {import(\"../index.js\").TernaryOperation} TernaryOperation\n * @typedef {UnaryOperation | BinaryOperation | TernaryOperation} Operation\n * @typedef {import(\"../index.js\").Term} Term\n * @typedef {import(\"../parse.js\").State} State\n */\n\n/**\n * @param {Node} node\n * @param {string[]} transforms\n * @returns {Operation | Term}\n */\nfunction insertTransformNode(node, transforms) {\n  if (node.type === \"Term\" && node.items.length > 0) {\n    // Only apply transform to first node.\n    const [first, ...rest] = node.items;\n    return {\n      ...node,\n      items: [insertTransformNode(first, transforms), ...rest],\n    };\n  }\n\n  if (node.type === \"BinaryOperation\") {\n    const [left, right] = node.items;\n    return {\n      ...node,\n      items: [insertTransformNode(left, transforms), right],\n    };\n  }\n\n  if (node.type === \"TernaryOperation\") {\n    const [a, b, c] = node.items;\n    return {\n      ...node,\n      items: [insertTransformNode(a, transforms), b, c],\n    };\n  }\n\n  return {\n    type: \"UnaryOperation\",\n    name: \"command\",\n    transforms,\n    items: [node],\n  };\n}\n\n/**\n * @param {State} state\n * @returns {((token: Token) => boolean) | undefined}\n */\nfunction maybeStopAtPipe({ start, tokens, stack, stopAt }) {\n  if (stopAt) {\n    return stopAt;\n  }\n\n  if (stack.length !== 1) {\n    return undefined;\n  }\n\n  const lastToken = start > 0 ? tokens[start - 1] : undefined;\n  if (!lastToken || lastToken.type !== \"operator\") {\n    return undefined;\n  }\n\n  if (lastToken.value === \"|\") {\n    return isPipeOperator;\n  }\n\n  if (lastToken.value === \"∥\") {\n    return isDoublePipeOperator;\n  }\n\n  return undefined;\n}\n\n/**\n * @param {State} state\n * @returns {{ node: Operation | Term; end: number }}\n */\nexport default function command(state) {\n  const token = state.tokens[state.start];\n\n  if (!token.name) {\n    throw new Error(\"Got command token without a name\");\n  }\n\n  /** @type {string[]} */\n  const textTransforms = [];\n\n  /** @type {Map<string, string>} */\n  const styles = new Map();\n\n  /**\n   * @param {Token} token\n   * @returns {void}\n   */\n  function handleCommandToken({ name, value }) {\n    if (!value) {\n      return;\n    }\n\n    if (name === \"text-transform\") {\n      textTransforms.push(value);\n    } else if (name) {\n      styles.set(name, value);\n    }\n  }\n\n  const stopAt = maybeStopAtPipe(state);\n  handleCommandToken(token);\n\n  let pos = state.start + 1;\n  let nextToken = state.tokens[pos];\n  while (\n    nextToken &&\n    (nextToken.type === \"command\" || nextToken.type === \"space\")\n  ) {\n    if (nextToken.type === \"command\") {\n      handleCommandToken(nextToken);\n    }\n\n    pos += 1;\n    nextToken = state.tokens[pos];\n  }\n\n  const next = expr({\n    ...state,\n    stack: [],\n    start: pos,\n    nestLevel: state.nestLevel + 1,\n    textTransforms,\n    stopAt,\n  });\n\n  if (textTransforms.length === 0) {\n    // Only apply styles.\n    return {\n      node: {\n        type: \"UnaryOperation\",\n        name: \"command\",\n        styles,\n        items: [next.node],\n      },\n      end: next.end,\n    };\n  }\n\n  const node = insertTransformNode(next.node, textTransforms);\n\n  if (styles.size > 0) {\n    return {\n      node: {\n        type: \"UnaryOperation\",\n        name: \"command\",\n        styles,\n        items: [node],\n      },\n      end: next.end,\n    };\n  }\n\n  return {\n    node,\n    end: next.end,\n  };\n}\n","import { isDoublePipeOperator, isPipeOperator } from \"../utils.js\";\n\nimport expr from \"./expr.js\";\n\n/**\n * @typedef {import(\"../../tokenizer/index.js\").Token} Token\n * @typedef {import(\"../index.js\").Node} Node\n * @typedef {import(\"../index.js\").UnaryOperation} UnaryOperation\n * @typedef {import(\"../index.js\").BinaryOperation} BinaryOperation\n * @typedef {import(\"../parse.js\").State} State\n */\n\n/**\n * @param {Node[]} nodes\n * @returns {Node}\n */\nfunction toTermOrUnwrap(nodes) {\n  if (nodes.length === 1) {\n    return nodes[0];\n  }\n\n  return { type: \"Term\", items: nodes };\n}\n\n/**\n * @param {State} state\n * @returns {((token: Token) => boolean) | undefined}\n */\nfunction maybeStopAtPipe({ start, tokens, stack, stopAt }) {\n  if (stopAt) {\n    return stopAt;\n  }\n\n  if (stack.length !== 1) {\n    return undefined;\n  }\n\n  const token = tokens[start];\n  if (!token || (token.arity && token.arity !== 1)) {\n    return undefined;\n  }\n\n  const lastToken = start > 0 ? tokens[start - 1] : undefined;\n  if (!lastToken || lastToken.type !== \"operator\") {\n    return undefined;\n  }\n\n  if (lastToken.value === \"|\") {\n    return isPipeOperator;\n  }\n\n  if (lastToken.value === \"∥\") {\n    return isDoublePipeOperator;\n  }\n\n  return undefined;\n}\n\n/**\n * @param {import(\"../parse.js\").State} state\n * @returns {{ node: UnaryOperation | BinaryOperation; end: number }}\n */\nexport default function prefix(state) {\n  const { tokens, start } = state;\n  const token = tokens[start];\n  const nestLevel = state.nestLevel + 1;\n\n  if (!token.name) {\n    throw new Error(\"Got prefix token without a name\");\n  }\n\n  const stopAt = maybeStopAtPipe(state);\n\n  let next = expr({\n    ...state,\n    stack: [],\n    start: start + 1,\n    nestLevel,\n    stopAt,\n  });\n  if (next && next.node && next.node.type === \"SpaceLiteral\") {\n    next = expr({\n      ...state,\n      stack: [],\n      start: next.end,\n      nestLevel,\n      stopAt,\n    });\n  }\n\n  // XXX: Arity > 2 not implemented.\n  if (token.arity === 2) {\n    if (\n      next &&\n      next.node &&\n      next.node.type === \"FencedGroup\" &&\n      next.node.items.length === 2\n    ) {\n      const [first, second] = next.node.items;\n      /** @type {[Node, Node]} */\n      const items =\n        token.name === \"root\"\n          ? [toTermOrUnwrap(second), toTermOrUnwrap(first)]\n          : [toTermOrUnwrap(first), toTermOrUnwrap(second)];\n\n      return {\n        node: {\n          type: \"BinaryOperation\",\n          name: token.name,\n          attrs: token.attrs,\n          items,\n        },\n        end: next.end,\n      };\n    }\n\n    const first = next;\n    let second =\n      next &&\n      expr({\n        ...state,\n        stack: [],\n        start: next.end,\n        nestLevel,\n      });\n\n    if (second && second.node && second.node.type === \"SpaceLiteral\") {\n      second = expr({\n        ...state,\n        stack: [],\n        start: second.end,\n        nestLevel,\n      });\n    }\n\n    /** @type {BinaryOperation} */\n    const node = {\n      type: \"BinaryOperation\",\n      name: token.name,\n      items: [first.node, second.node],\n    };\n\n    if (token.name === \"root\") {\n      node.items = [second.node, first.node];\n    }\n\n    if (token.attrs) {\n      node.attrs = token.attrs;\n    }\n\n    return {\n      node,\n      end: second.end,\n    };\n  }\n\n  /** @type {UnaryOperation} */\n  const node = {\n    type: \"UnaryOperation\",\n    name: token.name,\n    items: [next.node],\n  };\n\n  if (token.accent) {\n    node.accent = token.accent;\n  }\n\n  if (token.attrs) {\n    node.attrs = token.attrs;\n  }\n\n  if (\n    next &&\n    next.node &&\n    next.node.type === \"FencedGroup\" &&\n    next.node.items.length === 1\n  ) {\n    // The operand is not a matrix.\n\n    node.items = [toTermOrUnwrap(next.node.items[0])];\n  }\n\n  return {\n    node,\n    end: next.end,\n  };\n}\n","/**\n * @typedef {import(\"../parse.js\").State} State\n * @typedef {import(\"../index.js\").SpaceLiteral} SpaceLiteral\n */\n\n/**\n * @param {number} n - Number of space literals\n * @returns {number} - The width in units of ex\n */\nfunction spaceWidth(n) {\n  if (n <= 0) {\n    return 0;\n  }\n\n  if (n <= 3) {\n    return 0.35 * (n - 1);\n  }\n\n  if (n <= 5) {\n    return 0.5 * (n - 1);\n  }\n\n  return n - 3;\n}\n\n/**\n * @param {State} state\n * @returns {{ node: SpaceLiteral, end: number }}\n */\nexport default function space(state) {\n  const token = state.tokens[state.start];\n  const lineBreak = token.value.startsWith(\"\\n\");\n\n  const width = lineBreak ? 0 : token.value.length;\n\n  return {\n    node: {\n      type: \"SpaceLiteral\",\n      attrs: { width: `${spaceWidth(width)}ex` },\n    },\n    end: state.start + 1,\n  };\n}\n","import command from \"./command.js\";\nimport group from \"./group.js\";\nimport infix from \"./infix.js\";\nimport prefix from \"./prefix.js\";\nimport space from \"./space.js\";\n\n/**\n * @typedef {import(\"../../tokenizer/index.js\").TokenType} TokenType\n * @typedef {import(\"../parse.js\").State} State\n * @typedef {import(\"../index.js\").Node} Node\n * @typedef {import(\"../index.js\").Literal} Literal\n * @typedef {(state: State) => { node: Node, end: number }} Handler\n * @typedef {\"Ident\" | \"Number\" | \"Operator\" | \"Text\"} LiteralType\n */\n\n/**\n * @param {LiteralType} type\n * @returns {Handler}\n */\nconst literal =\n  (type) =>\n  ({ start, tokens }) => {\n    const { value, attrs } = tokens[start];\n\n    /** @type {Literal} */\n    const node = {\n      type: `${type}Literal`,\n      value,\n    };\n\n    if (attrs) {\n      node.attrs = attrs;\n    }\n\n    return {\n      node,\n      end: start + 1,\n    };\n  };\n\n/** @type {[TokenType, Handler][]} */\nconst handlers = [\n  [\"command\", command],\n  [\"ident\", literal(\"Ident\")],\n  [\"number\", literal(\"Number\")],\n  [\"operator\", literal(\"Operator\")],\n  [\"text\", literal(\"Text\")],\n  [\"infix\", infix],\n  [\"paren.open\", group],\n  [\"prefix\", prefix],\n  [\"space\", space],\n];\n\nexport default new Map(handlers);\n","import { addZeroLSpaceToOperator, maybeFixDoublePipe } from \"../utils.js\";\n\nimport expr from \"./expr.js\";\n\nimport handlers from \"./index.js\";\n\n/**\n * @typedef {import(\"../parse.js\").State} State\n * @typedef {import(\"../index.js\").Node} Node\n * @typedef {import(\"../index.js\").Term} Term\n * @typedef {import(\"../index.js\").BinaryOperation} BinaryOperation\n * @typedef {import(\"../index.js\").TernaryOperation} TernaryOperation\n */\n\n/** @returns {Term} */\nfunction empty() {\n  return { type: \"Term\", items: [] };\n}\n\nconst SHOULD_STOP = [\"ident\", \"number\", \"operator\", \"text\"];\n\n/**\n * Remove surrounding brackets.\n *\n * @template {BinaryOperation | TernaryOperation} Operation\n * @param {Operation} node\n * @returns {Operation}\n */\nfunction maybeRemoveFence(node) {\n  const mutated = node;\n\n  mutated.items.forEach((item, i) => {\n    if (item.type !== \"FencedGroup\" || item.items.length !== 1) {\n      // No fences to remove.\n      return;\n    }\n\n    if (i === 0 && node.name !== \"frac\") {\n      // Keep fences around base in sub- and superscripts.\n      return;\n    }\n\n    const [cell] = item.items;\n\n    if (cell.length !== 1) {\n      mutated.items[i] = { type: \"Term\", items: cell };\n      return;\n    }\n\n    const [first] = cell;\n    const term =\n      first.type === \"Term\" && first.items.length === 1\n        ? first.items[0]\n        : first;\n\n    if (term.type.endsWith(\"Literal\")) {\n      // We fenced a single item for a reason, lets keep them.\n      return;\n    }\n\n    mutated.items[i] = term;\n  });\n\n  return mutated;\n}\n\n/**\n * Change `lim` to `under`, and `sum` and `prod` to `under` or `over`.\n *\n * @template {BinaryOperation | TernaryOperation} Operation\n * @param {Operation} node\n * @returns {Operation}\n */\nfunction maybeApplyUnderOver(node) {\n  const mutated = node;\n  const [operator] = node.items;\n\n  if (operator.type !== \"OperatorLiteral\") {\n    return mutated;\n  }\n\n  if (\n    node.name === \"sub\" &&\n    [\"lim\", \"∑\", \"∏\", \"⋂\", \"⋃\", \"⋀\", \"⋁\"].includes(operator.value)\n  ) {\n    mutated.name = \"under\";\n\n    return mutated;\n  }\n\n  if (\n    node.name === \"subsup\" &&\n    [\"∑\", \"∏\", \"⋂\", \"⋃\", \"⋀\", \"⋁\"].includes(operator.value)\n  ) {\n    mutated.name = \"underover\";\n\n    return mutated;\n  }\n\n  return mutated;\n}\n\n/**\n * @template {BinaryOperation | TernaryOperation} Operation\n * @param {Operation} node\n * @returns {Operation}\n */\nfunction fixFracSpacing(node) {\n  if (node.name !== \"frac\") {\n    return node;\n  }\n\n  for (const item of node.items) {\n    addZeroLSpaceToOperator(item);\n  }\n\n  return node;\n}\n\n/**\n * @template {BinaryOperation | TernaryOperation} Operation\n * @param {Operation} node\n * @returns {Operation}\n */\nfunction post(node) {\n  return fixFracSpacing(maybeRemoveFence(maybeApplyUnderOver(node)));\n}\n\n/**\n * @param {string} op\n * @param {BinaryOperation} left\n * @param {Node} right\n * @returns {BinaryOperation | TernaryOperation}\n */\nfunction maybeTernary(op, left, right) {\n  if (left.name === \"sub\" && op === \"sup\") {\n    const [base, sub] = left.items;\n\n    return {\n      type: \"TernaryOperation\",\n      name: \"subsup\",\n      items: [base, sub, right],\n    };\n  }\n\n  if (left.name === \"sup\" && op === \"sub\") {\n    const [base, sup] = left.items;\n\n    return {\n      type: \"TernaryOperation\",\n      name: \"subsup\",\n      items: [base, right, sup],\n    };\n  }\n\n  if (left.name === \"under\" && (op === \"over\" || op === \"sup\")) {\n    const [base, under] = left.items;\n\n    return {\n      type: \"TernaryOperation\",\n      name: \"underover\",\n      items: [base, under, right],\n    };\n  }\n\n  if (left.name === \"over\" && (op === \"under\" || op === \"sub\")) {\n    const [base, over] = left.items;\n\n    return {\n      type: \"TernaryOperation\",\n      name: \"underover\",\n      items: [base, right, over],\n    };\n  }\n\n  const node = post({\n    type: \"BinaryOperation\",\n    name: op,\n    items: [left, right],\n  });\n\n  return rightAssociate(node.name, node.items);\n}\n\n/**\n * @param {string} op\n * @param {[Node, Node]} operands\n * @returns {BinaryOperation}\n */\nfunction rightAssociate(op, [left, right]) {\n  if (left.type !== \"BinaryOperation\" || op === \"frac\") {\n    return {\n      type: \"BinaryOperation\",\n      name: op,\n      items: [left, right],\n    };\n  }\n\n  const [a, b] = left.items;\n\n  return {\n    type: \"BinaryOperation\",\n    name: left.name,\n    items: [a, rightAssociate(op, [b, right])],\n  };\n}\n\n/**\n * @param {Node[]} nodes\n * @returns {boolean}\n */\nfunction isPipeDelimited(nodes) {\n  if (nodes.length < 3) {\n    return false;\n  }\n\n  const open = nodes.at(0);\n  const close = nodes.at(-1);\n\n  return (\n    open?.type === \"OperatorLiteral\" &&\n    close?.type === \"OperatorLiteral\" &&\n    (open.value === \"|\" || open.value === \"∥\" || open.value === \"‖\") &&\n    open.value === close.value\n  );\n}\n\n/**\n * @param {State} state\n * @returns {{ node: BinaryOperation | TernaryOperation; end: number }}\n */\nexport default function infix(state) {\n  const { tokens, start, stack } = state;\n  const nestLevel = state.nestLevel + 1;\n  const token = tokens[start];\n\n  /** @type {Node | undefined} */\n  let left;\n  if (isPipeDelimited(stack)) {\n    maybeFixDoublePipe(stack);\n    left = {\n      type: \"Term\",\n      items: [...stack],\n    };\n    stack.splice(0, stack.length);\n  } else {\n    left = stack.pop();\n\n    if (left?.type === \"SpaceLiteral\") {\n      left = stack.pop();\n    }\n  }\n\n  if (!left) {\n    left = empty();\n  }\n\n  const nextToken = tokens[start + 1];\n\n  let next;\n  if (nextToken && SHOULD_STOP.includes(nextToken.type)) {\n    const handleRight = handlers.get(nextToken.type);\n\n    if (!handleRight) {\n      throw new Error(\"Unknown handler\");\n    }\n\n    next = handleRight({\n      ...state,\n      stack: [],\n      start: start + 1,\n      nestLevel,\n    });\n  } else {\n    next = expr({\n      ...state,\n      stack: [],\n      start: start + 1,\n      nestLevel,\n    });\n  }\n\n  if (next && next.node && next.node.type === \"SpaceLiteral\") {\n    next = expr({\n      ...state,\n      stack: [],\n      start: next.end,\n      nestLevel,\n    });\n  }\n\n  const { end, node: right } = next;\n\n  if (left.type === \"BinaryOperation\") {\n    return {\n      end,\n      node: post(maybeTernary(token.value, left, right)),\n    };\n  }\n\n  return {\n    end,\n    node: post({\n      type: \"BinaryOperation\",\n      name: token.value,\n      items: [left, right],\n    }),\n  };\n}\n","import { maybeFixDoublePipe } from \"../utils.js\";\n\nimport handlers from \"./index.js\";\n\n/**\n * @typedef {import(\"../index.js\").IdentLiteral} IdentLiteral\n * @typedef {import(\"../index.js\").Literal} Literal\n * @typedef {import(\"../index.js\").LiteralAttrs} LiteralAttrs\n * @typedef {import(\"../index.js\").Node} Node\n * @typedef {import(\"../index.js\").OperatorLiteral} OperatorLiteral\n * @typedef {import(\"../index.js\").Term} Term\n * @typedef {import(\"../index.js\").UnaryOperation} UnaryOperation\n * @typedef {import(\"../parse.js\").State} State\n */\n\nconst KEEP_GOING_TYPES = [\n  \"command\",\n  \"ident\",\n  \"infix\",\n  \"number\",\n  \"operator\",\n  \"paren.open\",\n  \"prefix\",\n  \"text\",\n];\n\n/**\n * @param {Node[]} items\n * @param {string[]} [textTransforms]\n * @returns {void}\n */\nfunction maybeFixDifferential(items, textTransforms) {\n  // We may want to make the differnetial d operator an actual\n  // operator to fix some spacing during integration.\n  if (items.length < 2) {\n    return;\n  }\n\n  const [first, second] = items;\n\n  if (first.type !== \"IdentLiteral\" || first.value !== \"d\") {\n    return;\n  }\n\n  let operand = second;\n  while (\n    operand.type === \"UnaryOperation\" ||\n    operand.type === \"BinaryOperation\" ||\n    operand.type === \"TernaryOperation\"\n  ) {\n    [operand] = operand.items;\n  }\n\n  if (operand.type !== \"IdentLiteral\") {\n    return;\n  }\n\n  const value = (textTransforms?.length ?? 0) > 0 ? first.value : \"𝑑\";\n\n  /** @type {OperatorLiteral & { attrs: LiteralAttrs }} */\n  const node = {\n    ...items[0],\n    type: \"OperatorLiteral\",\n    value,\n    attrs: {\n      ...(first.attrs ?? {}),\n      rspace: \"0\",\n    },\n  };\n\n  items[0] = node;\n}\n\n/**\n * @param {State} state\n * @returns {{ node: Term; end: number }}\n */\nexport default function term(state) {\n  let i = state.start;\n  let token = state.tokens[i];\n  /** @type {Node[]} */\n  const items = [];\n\n  while (\n    token &&\n    KEEP_GOING_TYPES.includes(token.type) &&\n    // Perhaps the parent handler wants to use this token.\n    !state.stopAt?.(token)\n  ) {\n    const handler = handlers.get(token.type);\n\n    if (!handler) {\n      throw new Error(\"Unknown Hander\");\n    }\n\n    const next = handler({\n      ...state,\n      start: i,\n      stack: items,\n    });\n\n    items.push(next.node);\n\n    i = next.end;\n    token = state.tokens[i];\n  }\n\n  maybeFixDifferential(items, state.textTransforms);\n  maybeFixDoublePipe(items);\n\n  return {\n    node: {\n      type: \"Term\",\n      items,\n    },\n    end: i,\n  };\n}\n","import group from \"./group.js\";\nimport infix from \"./infix.js\";\nimport prefix from \"./prefix.js\";\nimport space from \"./space.js\";\nimport term from \"./term.js\";\n\n/** @typedef {import(\"../index.js\").Node} Node */\n\n/**\n * @param {import(\"../parse.js\").State} state\n * @returns {{ node: Node; end: number }}\n */\nexport default function expr(state) {\n  if (state.start >= state.tokens.length) {\n    return {\n      node: {\n        type: \"Term\",\n        items: [],\n      },\n\n      end: state.start,\n    };\n  }\n\n  const { type } = state.tokens[state.start];\n\n  if (type === \"paren.open\") {\n    return group(state);\n  }\n\n  if (type === \"space\") {\n    return space(state);\n  }\n\n  if (type === \"infix\") {\n    return infix(state);\n  }\n\n  if (type === \"prefix\") {\n    return prefix(state);\n  }\n\n  return term(state);\n}\n","import expr from \"./handlers/expr.js\";\n\n/**\n * @typedef {import(\"../tokenizer/index.js\").Token} Token\n * @typedef {import(\"./index.js\").Node} Node\n * @typedef {import(\"./index.js\").Sentence} Sentence\n *\n * @typedef {object} State\n * @property {Token[]} tokens\n * @property {number} start\n * @property {Node[]} stack\n * @property {number} nestLevel\n * @property {(token: Token) => boolean} [stopAt]\n * @property {string[]} [textTransforms]\n *\n * @param {Token[]} tokens\n * @returns {Sentence}\n */\nexport default function parse(tokens) {\n  const body = [];\n  let pos = 0;\n\n  while (pos < tokens.length) {\n    const state = {\n      tokens,\n      start: pos,\n      stack: body,\n      nestLevel: 1,\n    };\n\n    const next = expr(state);\n\n    pos = next.end;\n    body.push(next.node);\n  }\n\n  return {\n    type: \"Sentence\",\n    body,\n  };\n}\n","/* eslint-env browser */\n\nconst NS = \"http://www.w3.org/1998/Math/MathML\";\n\n/**\n * @typedef {Required<import(\"./index.js\").RenderOptions>} Options\n * @param {import(\"../transformer/index.js\").Tag} node\n * @param {Options} options\n * @returns {Element | DocumentFragment}\n */\nexport default function toDOM(node, { bare }) {\n  /** @type {Element | DocumentFragment} */\n  let element;\n\n  if (node.tag === \"math\" && bare) {\n    element = document.createDocumentFragment();\n  } else {\n    element = document.createElementNS(NS, node.tag);\n  }\n\n  if (element instanceof Element && node.attrs) {\n    for (const [name, value] of Object.entries(node.attrs)) {\n      element.setAttribute(name, `${value}`);\n    }\n  }\n\n  if (node.textContent) {\n    element.textContent = node.textContent;\n  }\n\n  if (node.childNodes) {\n    for (const childNode of node.childNodes) {\n      if (childNode) {\n        element.appendChild(toDOM(childNode, { bare: false }));\n      }\n    }\n  }\n\n  return element;\n}\n","/**\n * @param {string} str\n * @returns {string}\n */\nfunction escapeTextContent(str) {\n  return str.replace(/[&<]/g, (c) => {\n    if (c === \"&\") {\n      return \"&amp;\";\n    }\n\n    return \"&lt;\";\n  });\n}\n\n/**\n * @param {string} str\n * @returns {string}\n */\nfunction escapeAttrValue(str) {\n  return str.replace(/\"/g, \"&quot;\");\n}\n\n/**\n * @param {import(\"../transformer/index.js\").Tag} node\n * @param {Required<import(\"./index.js\").RenderOptions>} options\n * @returns {string}\n */\nexport default function toString(node, { bare }) {\n  const attrString = Object.entries(node.attrs || {})\n    .map(([name, value]) => `${name}=\"${escapeAttrValue(`${value}`)}\"`)\n    .join(\" \");\n\n  const openContent = attrString ? `${node.tag} ${attrString}` : node.tag;\n\n  if (node.textContent) {\n    const textContent = escapeTextContent(node.textContent);\n    return `<${openContent}>${textContent}</${node.tag}>`;\n  }\n\n  if (node.childNodes) {\n    const content = node.childNodes\n      .map((child) => (child ? toString(child, { bare: false }) : \"\"))\n      .join(\"\");\n\n    if (node.tag === \"math\" && bare) {\n      return content;\n    }\n\n    return `<${openContent}>${content}</${node.tag}>`;\n  }\n\n  return `<${openContent} />`;\n}\n","import toDOM from \"./to-dom.js\";\n\n/**\n * @yields {never}\n */\nfunction* nullIter() {}\n\n/**\n * @template {unknown[]} T - Tuple type with item type of each input iterator\n * @param {{ [K in keyof T]: Iterable<T[K]> }} iterables - The iterators to be\n *   zipped\n * @yields {T}\n */\nfunction* zip(iterables) {\n  const iterators = iterables.map((iterable) =>\n    iterable ? iterable[Symbol.iterator]() : nullIter(),\n  );\n\n  while (true) {\n    const next = iterators.map((iterator) => iterator.next());\n\n    if (next.every(({ done }) => done)) {\n      return;\n    }\n\n    yield /** @type {T} */ (next.map(({ value }) => value));\n  }\n}\n\n/**\n * @typedef {import(\"../transformer/index.js\").Tag} Tag\n *\n * @param {Element} parent\n * @param {Tag} node\n * @param {Required<import(\"./index.js\").RenderOptions>} options\n * @returns {void}\n */\nexport default function updateDOM(parent, node, options) {\n  if (!parent) {\n    throw new Error(\"updateDOM called on null\");\n  }\n\n  if (parent.tagName.toLowerCase() !== node.tag) {\n    throw new Error(\"tag name mismatch\");\n  }\n\n  if (!(node.tag === \"math\" && options.bare)) {\n    const desiredAttrs = node.attrs || {};\n    const removeAttrs = [];\n\n    for (const attr of parent.attributes) {\n      const newValue = desiredAttrs[attr.name];\n\n      if (!newValue) {\n        removeAttrs.push(attr.name);\n      } else if (newValue !== attr.value) {\n        parent.setAttribute(attr.name, `${newValue}`);\n      }\n    }\n\n    for (const name of removeAttrs) {\n      parent.removeAttribute(name);\n    }\n\n    for (const [name, value] of Object.entries(desiredAttrs)) {\n      if (!parent.getAttribute(name)) {\n        parent.setAttribute(name, `${value}`);\n      }\n    }\n  }\n\n  if ([\"mi\", \"mn\", \"mo\", \"mspace\", \"mtext\"].includes(node.tag)) {\n    if (parent.textContent !== node.textContent) {\n      parent.textContent = node.textContent ?? \"\";\n    }\n\n    return;\n  }\n\n  // Collect in arrays to prevent the live updating from interfering\n  // with the schedule.\n  const appendChilds = [];\n  const removeChilds = [];\n  const replaceChilds = [];\n\n  for (const [child, desired] of zip(\n    /** @type {[HTMLCollection, (Tag | null)[]]} */ ([\n      parent.children,\n      node.childNodes,\n    ]),\n  )) {\n    if (!child && !desired) {\n      continue;\n    }\n\n    if (!desired) {\n      // parent.removeChild(child);\n      removeChilds.push(child);\n    } else if (!child) {\n      // parent.appendChild(toDOM(desired, options));\n      appendChilds.push(toDOM(desired, options));\n    } else if (child.tagName.toLowerCase() !== desired.tag) {\n      // parent.replaceChild(toDOM(desired, options), child);\n      replaceChilds.push([child, toDOM(desired, options)]);\n    } else {\n      updateDOM(child, desired, { bare: false });\n    }\n  }\n\n  for (const child of removeChilds) {\n    parent.removeChild(child);\n  }\n\n  for (const child of appendChilds) {\n    parent.appendChild(child);\n  }\n\n  for (const [oldChild, desired] of replaceChilds) {\n    parent.replaceChild(desired, oldChild);\n  }\n}\n","/**\n * @typedef {import(\"./index.js\").Token} Token\n * @typedef {(char: string) => boolean} LeximeTest\n */\n\nconst LETTER_RE = /^\\p{L}/u;\n\n/** @type {LeximeTest} */\nexport function isAlphabetic(char) {\n  if (!char) {\n    return false;\n  }\n\n  return LETTER_RE.test(char);\n}\n\nconst LETTER_NUMBER_RE = /^[\\p{L}\\p{N}]/u;\n\n/** @type {LeximeTest} */\nexport function isAlphanumeric(char) {\n  if (!char) {\n    return false;\n  }\n\n  return LETTER_NUMBER_RE.test(char);\n}\n\nconst MARK_RE = /^\\p{M}/u;\n\n/** @type {LeximeTest} */\nexport function isMark(char) {\n  if (!char) {\n    return false;\n  }\n\n  return MARK_RE.test(char);\n}\n\n// Duodecimal literals are in the So category.\nconst NUMBER_RE = /^[\\p{N}\\u{218a}-\\u{218b}]/u;\n\n/** @type {LeximeTest} */\nexport function isNumeric(char) {\n  if (!char) {\n    return false;\n  }\n\n  return NUMBER_RE.test(char);\n}\n\n// Invisible opperators are in the Cf category.\nconst OPERATOR_RE = /^[\\p{P}\\p{Sm}\\p{So}\\u{2061}-\\u{2064}]/u;\n\n/** @type {LeximeTest} */\nexport function isOperational(char) {\n  if (!char) {\n    return false;\n  }\n\n  return OPERATOR_RE.test(char);\n}\n\nconst PUNCT_OPEN_RE = /^\\p{Pe}/u;\n\n/** @type {LeximeTest} */\nexport function isPunctClose(char) {\n  if (!char) {\n    return false;\n  }\n\n  return PUNCT_OPEN_RE.test(char);\n}\n\nconst PUNCT_CLOSE_RE = /^\\p{Ps}/u;\n\n/** @type {LeximeTest} */\nexport function isPunctOpen(char) {\n  if (!char) {\n    return false;\n  }\n\n  return PUNCT_CLOSE_RE.test(char);\n}\n\nconst FUNCTION_IDENT_ATTRS = { class: \"mathup-function-ident\" };\n\nexport const KNOWN_IDENTS = new Map([\n  [\"CC\", { value: \"ℂ\" }],\n  [\"Delta\", { value: \"Δ\", attrs: { mathvariant: \"normal\" } }],\n  [\"Gamma\", { value: \"Γ\", attrs: { mathvariant: \"normal\" } }],\n  [\"Lambda\", { value: \"Λ\", attrs: { mathvariant: \"normal\" } }],\n  [\"NN\", { value: \"ℕ\" }],\n  [\"O/\", { value: \"∅\" }],\n  [\"Omega\", { value: \"Ω\", attrs: { mathvariant: \"normal\" } }],\n  [\"Phi\", { value: \"Φ\", attrs: { mathvariant: \"normal\" } }],\n  [\"Pi\", { value: \"Π\", attrs: { mathvariant: \"normal\" } }],\n  [\"Psi\", { value: \"Ψ\", attrs: { mathvariant: \"normal\" } }],\n  [\"QQ\", { value: \"ℚ\" }],\n  [\"RR\", { value: \"ℝ\" }],\n  [\"Sigma\", { value: \"Σ\", attrs: { mathvariant: \"normal\" } }],\n  [\"Theta\", { value: \"Θ\", attrs: { mathvariant: \"normal\" } }],\n  [\"Xi\", { value: \"Ξ\", attrs: { mathvariant: \"normal\" } }],\n  [\"ZZ\", { value: \"ℤ\" }],\n  [\"alpha\", { value: \"α\" }],\n  [\"beta\", { value: \"β\" }],\n  [\"chi\", { value: \"χ\" }],\n  [\"cos\", { value: \"cos\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"cosh\", { value: \"cosh\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"cot\", { value: \"cot\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"csc\", { value: \"csc\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"cosec\", { value: \"cosec\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"delta\", { value: \"δ\" }],\n  [\"det\", { value: \"det\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"dim\", { value: \"dim\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"epsilon\", { value: \"ɛ\" }],\n  [\"eta\", { value: \"η\" }],\n  [\"gamma\", { value: \"γ\" }],\n  [\"gcd\", { value: \"gcd\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"iota\", { value: \"ι\" }],\n  [\"kappa\", { value: \"κ\" }],\n  [\"lambda\", { value: \"λ\" }],\n  [\"lcm\", { value: \"lcm\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"ln\", { value: \"ln\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"log\", { value: \"log\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"max\", { value: \"max\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"min\", { value: \"min\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"mu\", { value: \"μ\" }],\n  [\"nu\", { value: \"ν\" }],\n  [\"omega\", { value: \"ω\" }],\n  [\"oo\", { value: \"∞\" }],\n  [\"phi\", { value: \"φ\" }],\n  [\"phiv\", { value: \"ϕ\" }],\n  [\"pi\", { value: \"π\" }],\n  [\"psi\", { value: \"ψ\" }],\n  [\"rho\", { value: \"ρ\" }],\n  [\"sec\", { value: \"sec\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"sigma\", { value: \"σ\" }],\n  [\"sin\", { value: \"sin\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"sinh\", { value: \"sinh\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"tan\", { value: \"tan\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"tanh\", { value: \"tanh\", attrs: { ...FUNCTION_IDENT_ATTRS } }],\n  [\"tau\", { value: \"τ\" }],\n  [\"theta\", { value: \"θ\" }],\n  [\"upsilon\", { value: \"υ\" }],\n  [\"xi\", { value: \"ξ\" }],\n  [\"zeta\", { value: \"ζ\" }],\n]);\n\nexport const KNOWN_OPS = new Map([\n  [\"-\", { value: \"−\" }],\n  [\"!=\", { value: \"≠\" }],\n  [\"!==\", { value: \"≢\" }],\n  [\"!in\", { value: \"∉\" }],\n  [\".$\", { value: \"\\u2061\", attrs: { class: \"mathup-function-application\" } }],\n  [\".*\", { value: \"\\u2062\", attrs: { class: \"mathup-invisible-times\" } }],\n  [\".+\", { value: \"\\u2064\", attrs: { class: \"mathup-invisible-add\" } }],\n  [\".,\", { value: \"\\u2063\", attrs: { class: \"mathup-invisible-separator\" } }],\n  [\"'\", { value: \"′\", attrs: { lspace: 0, rspace: 0 } }],\n  [\"''\", { value: \"″\", attrs: { lspace: 0, rspace: 0 } }],\n  [\"'''\", { value: \"‴\", attrs: { lspace: 0, rspace: 0 } }],\n  [\"''''\", { value: \"⁗\", attrs: { lspace: 0, rspace: 0 } }],\n  [\"*\", { value: \"·\" }],\n  [\"**\", { value: \"∗\" }],\n  [\"***\", { value: \"⋆\" }],\n  [\"+-\", { value: \"±\" }],\n  [\"-+\", { value: \"∓\" }],\n  [\"-:\", { value: \"÷\" }],\n  [\"-<\", { value: \"≺\" }],\n  [\"-<=\", { value: \"⪯\" }],\n  [\"-=\", { value: \"≡\" }],\n  [\"->\", { value: \"→\" }],\n  [\"->>\", { value: \"↠\" }],\n  [\"...\", { value: \"…\" }],\n  [\"//\", { value: \"⁄\" }],\n  [\"/_\", { value: \"∠\" }],\n  [\"/_\\\\\", { value: \"△\" }],\n  [\":.\", { value: \"∴\" }],\n  [\":|:\", { value: \"|\", attrs: { stretchy: true }, sep: true }],\n  [\"<-\", { value: \"←\" }],\n  [\"<<<\", { value: \"≪\" }],\n  [\"<=\", { value: \"≤\" }],\n  [\"<=>\", { value: \"⇔\" }],\n  [\"<>\", { value: \"⋄\" }],\n  [\"<|\", { value: \"⊲\" }],\n  [\"==\", { value: \"≡\" }],\n  [\"=>\", { value: \"⇒\" }],\n  [\">-\", { value: \"≻\" }],\n  [\">-=\", { value: \"⪰\" }],\n  [\">->\", { value: \"↣\" }],\n  [\">->>\", { value: \"⤖\" }],\n  [\"><|\", { value: \"⋊\" }],\n  [\">=\", { value: \"≥\" }],\n  [\">>>\", { value: \"≫\" }],\n  [\"@\", { value: \"∘\" }],\n  [\"AA\", { value: \"∀\" }],\n  [\"EE\", { value: \"∃\" }],\n  [\"TT\", { value: \"⊤\" }],\n  [\"[]\", { value: \"□\" }],\n  [\"^^\", { value: \"∧\" }],\n  [\"^^^\", { value: \"⋀\" }],\n  [\"_|_\", { value: \"⊥\" }],\n  [\"aleph\", { value: \"ℵ\" }],\n  [\"and\", { value: \"and\" }],\n  [\"cdots\", { value: \"⋯\" }],\n  [\"darr\", { value: \"↓\" }],\n  [\"ddots\", { value: \"⋱\" }],\n  [\"del\", { value: \"∂\" }],\n  [\"diamond\", { value: \"⋄\" }],\n  [\"dint\", { value: \"∬\" }],\n  [\"grad\", { value: \"∇\" }],\n  [\"hArr\", { value: \"⇔\" }],\n  [\"harr\", { value: \"↔\" }],\n  [\"if\", { value: \"if\" }],\n  [\"iff\", { value: \"⇔\" }],\n  [\"in\", { value: \"∈\" }],\n  [\"int\", { value: \"∫\" }],\n  [\"lArr\", { value: \"⇐\" }],\n  [\"larr\", { value: \"←\" }],\n  [\"lim\", { value: \"lim\" }],\n  [\"mod\", { value: \"mod\" }],\n  [\"nn\", { value: \"∩\" }],\n  [\"nnn\", { value: \"⋂\" }],\n  [\"not\", { value: \"¬\" }],\n  [\"o+\", { value: \"⊕\" }],\n  [\"o.\", { value: \"⊙\" }],\n  [\"oc\", { value: \"∝\" }],\n  [\"oint\", { value: \"∮\" }],\n  [\"or\", { value: \"or\" }],\n  [\"otherwise\", { value: \"otherwise\" }],\n  [\"ox\", { value: \"⊗\" }],\n  [\"prod\", { value: \"∏\" }],\n  [\"prop\", { value: \"∝\" }],\n  [\"rArr\", { value: \"⇒\" }],\n  [\"rarr\", { value: \"→\" }],\n  [\"square\", { value: \"□\" }],\n  [\"sub\", { value: \"⊂\" }],\n  [\"sube\", { value: \"⊆\" }],\n  [\"sum\", { value: \"∑\" }],\n  [\"sup\", { value: \"⊃\" }],\n  [\"supe\", { value: \"⊇\" }],\n  [\"uarr\", { value: \"↑\" }],\n  [\"uu\", { value: \"∪\" }],\n  [\"uuu\", { value: \"⋃\" }],\n  [\"vdots\", { value: \"⋮\" }],\n  [\"vv\", { value: \"∨\" }],\n  [\"vvv\", { value: \"⋁\" }],\n  [\"xx\", { value: \"×\" }],\n  [\"|--\", { value: \"⊢\" }],\n  [\"|->\", { value: \"↦\" }],\n  [\"|==\", { value: \"⊨\" }],\n  [\"|>\", { value: \"⊳\" }],\n  [\"|><\", { value: \"⋉\" }],\n  [\"|><|\", { value: \"⋈\" }],\n  [\"||\", { value: \"∥\" }],\n  [\"~=\", { value: \"≅\" }],\n  [\"~~\", { value: \"≈\" }],\n]);\n\n/** @type {Map<string, Omit<Token, \"type\">>} */\nexport const KNOWN_PARENS_OPEN = new Map([\n  [\"(:\", { value: \"⟨\" }],\n  [\"<<\", { value: \"⟨\" }],\n  [\"{:\", { value: \"\" }],\n  [\"|(\", { value: \"|\" }],\n  [\"|:\", { value: \"|\" }],\n  [\"|__\", { value: \"⌊\" }],\n  [\"||(\", { value: \"‖\" }],\n  [\"||:\", { value: \"‖\" }],\n  [\"|~\", { value: \"⌈\" }],\n  [\n    \"(mod\",\n    {\n      value: \"(\",\n      attrs: { lspace: \"1.65ex\" },\n      extraTokensAfter: [\n        { type: \"operator\", value: \"mod\", attrs: { lspace: 0 } },\n      ],\n    },\n  ],\n]);\n\nexport const KNOWN_PARENS_CLOSE = new Map([\n  [\")|\", { value: \"|\" }],\n  [\")||\", { value: \"‖\" }],\n  [\":)\", { value: \"⟩\" }],\n  [\":|\", { value: \"|\" }],\n  [\":||\", { value: \"‖\" }],\n  [\":}\", { value: \"\" }],\n  [\">>\", { value: \"⟩\" }],\n  [\"__|\", { value: \"⌋\" }],\n  [\"~|\", { value: \"⌉\" }],\n]);\n\nexport const KNOWN_PREFIX = new Map([\n  // Accents\n  [\"bar\", { name: \"over\", accent: \"‾\" }],\n  [\"ddot\", { name: \"over\", accent: \"⋅⋅\" }],\n  [\"dot\", { name: \"over\", accent: \"⋅\" }],\n  [\"hat\", { name: \"over\", accent: \"^\" }],\n  [\"obrace\", { name: \"over\", accent: \"⏞\" }],\n  [\"obracket\", { name: \"over\", accent: \"⎴\" }],\n  [\"oparen\", { name: \"over\", accent: \"⏜\" }],\n  [\"oshell\", { name: \"over\", accent: \"⏠\" }],\n  [\"tilde\", { name: \"over\", accent: \"˜\" }],\n  [\"ubrace\", { name: \"under\", accent: \"⏟\" }],\n  [\"ubrace\", { name: \"under\", accent: \"⏟\" }],\n  [\"ubracket\", { name: \"under\", accent: \"⎵\" }],\n  [\"ul\", { name: \"under\", accent: \"_\" }],\n  [\"uparen\", { name: \"under\", accent: \"⏝\" }],\n  [\"ushell\", { name: \"under\", accent: \"⏡\" }],\n  [\"vec\", { name: \"over\", accent: \"→\" }],\n\n  // Groups\n  [\"abs\", { name: \"fence\", attrs: { open: \"|\", close: \"|\" } }],\n  [\n    \"binom\",\n    {\n      name: \"frac\",\n      arity: 2,\n      attrs: { linethickness: 0, open: \"(\", close: \")\" },\n    },\n  ],\n  [\"ceil\", { name: \"fence\", attrs: { open: \"⌈\", close: \"⌉\" } }],\n  [\"floor\", { name: \"fence\", attrs: { open: \"⌊\", close: \"⌋\" } }],\n  [\"norm\", { name: \"fence\", attrs: { open: \"‖\", close: \"‖\" } }],\n\n  // Roots\n  [\"root\", { name: \"root\", arity: 2 }],\n  [\"sqrt\", { name: \"sqrt\" }],\n\n  // Enclose\n  [\"cancel\", { name: \"row\", attrs: { class: \"mathup-enclose-cancel\" } }],\n]);\n\nexport const KNOWN_COMMANDS = new Map([\n  // Fonts\n  [\"rm\", { name: \"text-transform\", value: \"normal\" }],\n  [\"bf\", { name: \"text-transform\", value: \"bold\" }],\n  [\"it\", { name: \"text-transform\", value: \"italic\" }],\n  [\"bb\", { name: \"text-transform\", value: \"double-struck\" }],\n  [\"cc\", { name: \"text-transform\", value: \"script\" }],\n  [\"tt\", { name: \"text-transform\", value: \"monospace\" }],\n  [\"fr\", { name: \"text-transform\", value: \"fraktur\" }],\n  [\"sf\", { name: \"text-transform\", value: \"sans-serif\" }],\n\n  // Colors\n  [\"black\", { name: \"color\", value: \"black\" }],\n  [\"\\u{26ab}\", { name: \"color\", value: \"black\" }],\n  [\"blue\", { name: \"color\", value: \"blue\" }],\n  [\"\\u{1f535}\", { name: \"color\", value: \"blue\" }],\n  [\"brown\", { name: \"color\", value: \"brown\" }],\n  [\"\\u{1f7e4}\", { name: \"color\", value: \"brown\" }],\n  [\"cyan\", { name: \"color\", value: \"cyan\" }],\n  [\"gray\", { name: \"color\", value: \"gray\" }],\n  [\"green\", { name: \"color\", value: \"green\" }],\n  [\"\\u{1f7e2}\", { name: \"color\", value: \"green\" }],\n  [\"lightgray\", { name: \"color\", value: \"lightgray\" }],\n  [\"orange\", { name: \"color\", value: \"orange\" }],\n  [\"\\u{1f7e0}\", { name: \"color\", value: \"orange\" }],\n  [\"purple\", { name: \"color\", value: \"purple\" }],\n  [\"\\u{1f7e3}\", { name: \"color\", value: \"purple\" }],\n  [\"red\", { name: \"color\", value: \"red\" }],\n  [\"\\u{1f534}\", { name: \"color\", value: \"red\" }],\n  [\"white\", { name: \"color\", value: \"white\" }],\n  [\"\\u{26aa}\", { name: \"color\", value: \"white\" }],\n  [\"yellow\", { name: \"color\", value: \"yellow\" }],\n  [\"\\u{1f7e1}\", { name: \"color\", value: \"yellow\" }],\n\n  // Background Colors\n  [\"bg.black\", { name: \"background\", value: \"black\" }],\n  [\"\\u{2b1b}\", { name: \"background\", value: \"black\" }],\n  [\"bg.blue\", { name: \"background\", value: \"blue\" }],\n  [\"\\u{1f7e6}\", { name: \"background\", value: \"blue\" }],\n  [\"bg.brown\", { name: \"background\", value: \"brown\" }],\n  [\"\\u{1f7eb}\", { name: \"background\", value: \"brown\" }],\n  [\"bg.cyan\", { name: \"background\", value: \"cyan\" }],\n  [\"bg.gray\", { name: \"background\", value: \"gray\" }],\n  [\"bg.green\", { name: \"background\", value: \"green\" }],\n  [\"\\u{1f7e9}\", { name: \"background\", value: \"green\" }],\n  [\"bg.lightgray\", { name: \"background\", value: \"lightgray\" }],\n  [\"bg.orange\", { name: \"background\", value: \"orange\" }],\n  [\"\\u{1f7e7}\", { name: \"background\", value: \"orange\" }],\n  [\"bg.purple\", { name: \"background\", value: \"purple\" }],\n  [\"\\u{1f7ea}\", { name: \"background\", value: \"purple\" }],\n  [\"bg.red\", { name: \"background\", value: \"red\" }],\n  [\"\\u{1f7e5}\", { name: \"background\", value: \"red\" }],\n  [\"bg.white\", { name: \"background\", value: \"white\" }],\n  [\"\\u{2b1c}\", { name: \"background\", value: \"white\" }],\n  [\"bg.yellow\", { name: \"background\", value: \"yellow\" }],\n  [\"\\u{1f7e8}\", { name: \"background\", value: \"yellow\" }],\n]);\n","import {\n  KNOWN_PARENS_CLOSE,\n  isAlphanumeric,\n  isPunctClose,\n} from \"../lexemes.js\";\n\n/**\n * @param {string} char\n * @param {number} pos\n * @param {string} input\n * @param {{ offset?: number }} options\n * @returns {{ value: string; end: number }}\n */\nfunction handleFence(char, pos, input, { offset = 0 } = {}) {\n  let len = 0;\n\n  while (input[pos + offset + len] === char) {\n    len += 1;\n  }\n\n  let value = \"\";\n  let closeLen = 0;\n  let i = pos + offset + len;\n\n  while (closeLen < len) {\n    if (i >= input.length) {\n      break;\n    }\n\n    if (input[i] === char) {\n      closeLen += 1;\n    } else {\n      if (closeLen > 0) {\n        value += char.repeat(closeLen);\n        closeLen = 0;\n      }\n\n      value += input[i];\n    }\n\n    i += 1;\n  }\n\n  return {\n    value: value.trim(),\n    end: i,\n  };\n}\n\n/**\n * @param {number} pos\n * @param {string} input\n * @param {{ offset?: number }} [options]\n * @returns {ReturnType<typeof handleFence>}\n */\nexport function handleBacktick(pos, input, options) {\n  return handleFence(\"`\", pos, input, options);\n}\n\n/**\n * @param {number} pos\n * @param {string} input\n * @param {{ offset?: number }} [options]\n * @returns {ReturnType<typeof handleFence>}\n */\nexport function handleQuote(pos, input, options) {\n  return handleFence('\"', pos, input, options);\n}\n\n/**\n * @param {string} prefix\n * @param {number} pos\n * @param {string} input\n * @returns {{ value: string; end: number }}\n */\nexport function handlePrefixed(prefix, pos, input) {\n  const start = pos + prefix.length;\n  let value = \"\";\n  let [char] = input.slice(start);\n\n  if (!char) {\n    return { value: prefix, end: start };\n  }\n\n  if (isAlphanumeric(char)) {\n    while (isAlphanumeric(char)) {\n      value += char;\n      [char] = input.slice(start + value.length);\n    }\n\n    return { value, end: start + value.length };\n  }\n\n  if (char === \"`\") {\n    return handleBacktick(pos, input, { offset: prefix.length });\n  }\n\n  return { value: char, end: start + char.length };\n}\n\n/**\n * @param {string} input\n * @param {number} start\n * @returns {boolean}\n */\nfunction isKnownParenCloseAt(input, start) {\n  for (const key of KNOWN_PARENS_CLOSE.keys()) {\n    if (input.startsWith(key, start)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * @param {string} input\n * @param {number} start\n * @param {boolean} isGrouping\n * @returns {boolean}\n */\nexport function hasOperand(input, start, isGrouping) {\n  let pos = start;\n  let postPrefixChar = input.at(pos);\n  while (postPrefixChar === \" \" || postPrefixChar === \"\\n\") {\n    pos += 1;\n    postPrefixChar = input.at(pos);\n  }\n\n  if (!postPrefixChar) {\n    return false;\n  }\n\n  return !(\n    isGrouping &&\n    (isPunctClose(postPrefixChar) || isKnownParenCloseAt(input, pos))\n  );\n}\n\n/**\n * @param {Pick<import(\"./index.js\").Token, \"name\">} prefix\n * @returns {boolean}\n */\nexport function allowedStandalonePrefix(prefix) {\n  return prefix.name === \"root\" || prefix.name === \"sqrt\";\n}\n","import {\n  KNOWN_COMMANDS,\n  KNOWN_IDENTS,\n  KNOWN_OPS,\n  KNOWN_PREFIX,\n  isAlphabetic,\n  isAlphanumeric,\n  isMark,\n} from \"../lexemes.js\";\n\nimport { allowedStandalonePrefix, hasOperand } from \"./utils.js\";\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function alphaScanner(char, input, { start, grouping }) {\n  if (!isAlphabetic(char)) {\n    return null;\n  }\n\n  let nextChar = char;\n  let value = \"\";\n\n  while (\n    isAlphabetic(nextChar) ||\n    isMark(nextChar) ||\n    (value.length > 0 && nextChar === \".\")\n  ) {\n    const i = start + value.length + nextChar.length;\n\n    value += nextChar;\n    [nextChar] = input.slice(i);\n  }\n\n  // alpha may contain a period, but not never end with one.\n  if (value.endsWith(\".\")) {\n    value = value.slice(0, -1);\n  }\n\n  let end = start + value.length;\n\n  {\n    const operator = KNOWN_OPS.get(value);\n\n    if (operator) {\n      return {\n        type: \"operator\",\n        value: operator.value,\n        attrs: operator.attrs,\n        end: start + value.length,\n      };\n    }\n  }\n\n  {\n    const ident = KNOWN_IDENTS.get(value);\n\n    if (ident) {\n      return {\n        type: \"ident\",\n        value: ident.value,\n        attrs: ident.attrs,\n        end: start + value.length,\n      };\n    }\n  }\n\n  const potential = `${value}${nextChar}`;\n  const [nextNextChar] = input.slice(start + potential.length);\n\n  {\n    const operator = KNOWN_OPS.get(potential);\n\n    if (operator && !isAlphanumeric(nextNextChar)) {\n      return {\n        type: \"operator\",\n        value: operator.value,\n        attrs: operator.attrs,\n        end: start + potential.length,\n      };\n    }\n  }\n\n  {\n    const ident = KNOWN_IDENTS.get(potential);\n\n    if (ident && !isAlphanumeric(nextNextChar)) {\n      return {\n        type: \"ident\",\n        value: ident.value,\n        attrs: ident.attrs,\n        end: start + potential.length,\n      };\n    }\n  }\n\n  {\n    const prefix = KNOWN_PREFIX.get(value);\n    if (\n      prefix &&\n      (allowedStandalonePrefix(prefix) || hasOperand(input, end, grouping))\n    ) {\n      return {\n        type: \"prefix\",\n        value: \"\",\n        end,\n        ...prefix,\n      };\n    }\n  }\n\n  {\n    const command = KNOWN_COMMANDS.get(value);\n    if (command && hasOperand(input, end, grouping)) {\n      return {\n        type: \"command\",\n        end,\n        ...command,\n      };\n    }\n  }\n\n  if (value.includes(\".\")) {\n    // Period not used, lets toss it.\n    value = value.slice(0, value.indexOf(\".\"));\n    end = start + value.length;\n  }\n\n  return {\n    type: \"ident\",\n    value,\n    end,\n    split: true,\n  };\n}\n","import { handlePrefixed } from \"./utils.js\";\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function backslashScanner(char, input, { start }) {\n  if (char !== \"\\\\\") {\n    return null;\n  }\n\n  return {\n    type: \"operator\",\n    ...handlePrefixed(\"\\\\\", start, input),\n  };\n}\n","import { handleBacktick } from \"./utils.js\";\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function backtickScanner(char, input, { start }) {\n  if (char !== \"`\") {\n    return null;\n  }\n\n  const { end, value } = handleBacktick(start, input);\n\n  return {\n    type: \"ident\",\n    value,\n    end,\n  };\n}\n","/** @type {import(\"./index.js\").Scanner} */\nexport default function groupSepScanner(\n  _char,\n  input,\n  { grouping, start },\n  { colSep, rowSep },\n) {\n  if (!grouping) {\n    return null;\n  }\n\n  const colSepEnd = start + colSep.length;\n  const rowSepEnd = start + rowSep.length;\n\n  if (input.slice(start, rowSepEnd) === rowSep) {\n    return {\n      type: \"sep.row\",\n      value: rowSep,\n      end: rowSepEnd,\n    };\n  }\n\n  if (input.slice(start, colSepEnd) === colSep) {\n    return {\n      type: \"sep.col\",\n      value: colSep,\n      end: colSepEnd,\n    };\n  }\n\n  return null;\n}\n","import {\n  KNOWN_COMMANDS,\n  KNOWN_IDENTS,\n  KNOWN_OPS,\n  KNOWN_PARENS_CLOSE,\n  KNOWN_PARENS_OPEN,\n  KNOWN_PREFIX,\n} from \"../lexemes.js\";\n\nconst INFIX_MAP = new Map([\n  [\"^\", \"sup\"],\n  [\"/\", \"frac\"],\n  [\"_\", \"sub\"],\n  [\".^\", \"over\"],\n  [\"._\", \"under\"],\n]);\n\n/** @type {Set<string>} */\nconst COLLISIONS = new Set();\n\nfor (const map of [\n  KNOWN_COMMANDS,\n  KNOWN_IDENTS,\n  KNOWN_OPS,\n  KNOWN_PARENS_CLOSE,\n  KNOWN_PARENS_OPEN,\n  KNOWN_PREFIX,\n]) {\n  for (const key of map.keys()) {\n    if (\"^/_\".includes(key[0])) {\n      COLLISIONS.add(key);\n    }\n  }\n}\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function infixScanner(char, input, { start }) {\n  if (char === \".\") {\n    const next = input[start + 1];\n    const infix = INFIX_MAP.get(`.${next}`);\n\n    if (infix) {\n      for (const key of COLLISIONS) {\n        if (key === input.slice(start + 1, start + 1 + key.length)) {\n          return null;\n        }\n      }\n\n      return {\n        type: \"infix\",\n        value: infix,\n        end: start + 2,\n      };\n    }\n  }\n\n  const infix = INFIX_MAP.get(char);\n\n  if (infix) {\n    for (const key of COLLISIONS) {\n      if (key === input.slice(start, start + key.length)) {\n        return null;\n      }\n    }\n\n    return {\n      type: \"infix\",\n      value: infix,\n      end: start + 1,\n    };\n  }\n\n  return null;\n}\n","/** @type {import(\"./index.js\").Scanner} */\nexport default function newlineScanner(char, input, { start, grouping }) {\n  if (char !== \"\\n\") {\n    return null;\n  }\n\n  let i = start;\n  let nextChar = char;\n  let value = \"\";\n\n  while (nextChar === \"\\n\") {\n    value += nextChar;\n    i += 1;\n    nextChar = input[i];\n  }\n\n  return {\n    type: grouping ? \"sep.row\" : \"space\",\n    value,\n    end: i,\n  };\n}\n","import { isNumeric } from \"../lexemes.js\";\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function numberScanner(char, input, { start }, { decimalMark }) {\n  if (!isNumeric(char)) {\n    return null;\n  }\n\n  let nextChar = char;\n  let value = \"\";\n\n  while (isNumeric(nextChar)) {\n    value += nextChar;\n    [nextChar] = input.slice(start + value.length);\n  }\n\n  if (nextChar === decimalMark) {\n    [nextChar] = input.slice(start + value.length + decimalMark.length);\n\n    if (isNumeric(nextChar)) {\n      value += decimalMark;\n\n      while (isNumeric(nextChar)) {\n        value += nextChar;\n        [nextChar] = input.slice(start + value.length);\n      }\n    }\n  }\n\n  return {\n    type: \"number\",\n    value,\n    end: start + value.length,\n  };\n}\n","import { handlePrefixed } from \"./utils.js\";\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function octothorpeScanner(char, input, { start }) {\n  if (char !== \"#\") {\n    return null;\n  }\n\n  const { end, value } = handlePrefixed(\"#\", start, input);\n\n  return {\n    type: \"number\",\n    value,\n    end,\n  };\n}\n","/**\n * @typedef {import(\"./index.js\").Token} Token\n */\n\nimport { KNOWN_COMMANDS, KNOWN_OPS, isOperational } from \"../lexemes.js\";\n\n/**\n * @param {string} partial\n * @returns {boolean}\n */\nfunction opsPotential(partial) {\n  for (const [op] of KNOWN_OPS) {\n    if (op.startsWith(partial)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function operatorScanner(char, input, { start, grouping }) {\n  let value = char;\n\n  if (opsPotential(value)) {\n    let [nextChar] = input.slice(start + value.length);\n    let nextValue = value + nextChar;\n\n    while (nextChar && opsPotential(nextValue)) {\n      value += nextChar;\n      [nextChar] = input.slice(start + value.length);\n      nextValue = value + nextChar;\n    }\n  }\n\n  const known = KNOWN_OPS.get(value);\n\n  if (known) {\n    return {\n      type: known.sep && grouping ? \"sep.col\" : \"operator\",\n      value: known.value,\n      attrs: known.attrs,\n      end: start + value.length,\n    };\n  }\n\n  const command = KNOWN_COMMANDS.get(value);\n  if (command) {\n    return {\n      type: \"command\",\n      end: start + value.length,\n      ...command,\n    };\n  }\n\n  if (!isOperational(char)) {\n    return null;\n  }\n\n  /** @type {Token & { end: number }} */\n  const token = {\n    type: \"operator\",\n    value: char,\n    end: start + char.length,\n  };\n\n  const isStretchy =\n    char === \"|\" && input.at(start - 1) === \" \" && input.at(start + 1) === \" \";\n\n  if (isStretchy) {\n    token.attrs = { stretchy: true };\n  }\n\n  return token;\n}\n","import { KNOWN_OPS, KNOWN_PARENS_CLOSE, isPunctClose } from \"../lexemes.js\";\n\n/**\n * @param {string} partial\n * @returns {boolean}\n */\nfunction parenClosePotential(partial) {\n  for (const [paren] of KNOWN_PARENS_CLOSE) {\n    if (paren.startsWith(partial)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function parenCloseScanner(char, input, { grouping, start }) {\n  if (!grouping) {\n    return null;\n  }\n\n  let value = char;\n\n  if (parenClosePotential(value)) {\n    let [nextChar] = input.slice(start + value.length);\n    let nextValue = value + nextChar;\n\n    while (nextChar && parenClosePotential(nextValue)) {\n      value += nextChar;\n      [nextChar] = input.slice(start + value.length);\n      nextValue = value + nextChar;\n    }\n  }\n\n  {\n    const [nextChar] = input.slice(start + value.length);\n    const nextValue = value + nextChar;\n\n    if (KNOWN_OPS.has(nextValue)) {\n      return null;\n    }\n  }\n\n  const known = KNOWN_PARENS_CLOSE.get(value);\n\n  if (known) {\n    return {\n      type: \"paren.close\",\n      value: known.value,\n      end: start + value.length,\n    };\n  }\n\n  if (isPunctClose(char)) {\n    return {\n      type: \"paren.close\",\n      value: char,\n      end: start + char.length,\n    };\n  }\n\n  return null;\n}\n","import { KNOWN_OPS, KNOWN_PARENS_OPEN, isPunctOpen } from \"../lexemes.js\";\n\n/**\n * @param {string} partial\n * @returns {boolean}\n */\nfunction parenOpenPotential(partial) {\n  for (const [paren] of KNOWN_PARENS_OPEN) {\n    if (paren.startsWith(partial)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function parenOpenScanner(char, input, { start }) {\n  let value = char;\n\n  if (parenOpenPotential(value)) {\n    let [nextChar] = input.slice(start + value.length);\n    let nextValue = value + nextChar;\n\n    while (nextChar && parenOpenPotential(nextValue)) {\n      value += nextChar;\n      [nextChar] = input.slice(start + value.length);\n      nextValue = value + nextChar;\n    }\n  }\n\n  {\n    const [nextChar] = input.slice(start + value.length);\n    const nextValue = value + nextChar;\n\n    if (KNOWN_OPS.has(nextValue)) {\n      return null;\n    }\n  }\n\n  const known = KNOWN_PARENS_OPEN.get(value);\n\n  if (known) {\n    return {\n      ...known,\n      type: \"paren.open\",\n      end: start + value.length,\n    };\n  }\n\n  if (isPunctOpen(char)) {\n    return {\n      type: \"paren.open\",\n      value: char,\n      end: start + char.length,\n    };\n  }\n\n  return null;\n}\n","import { handleQuote } from \"./utils.js\";\n\n/** @type {import(\"./index.js\").Scanner} */\nexport default function quoteScanner(char, input, { start }) {\n  if (char !== '\"') {\n    return null;\n  }\n\n  const { end, value } = handleQuote(start, input);\n\n  return {\n    type: \"text\",\n    value,\n    end,\n  };\n}\n","/** @type {import(\"./index.js\").Scanner} */\nexport default function spaceScanner(char, input, { start }) {\n  if (char !== \" \") {\n    return null;\n  }\n\n  let i = start;\n  let nextChar = char;\n  let value = \"\";\n\n  while (nextChar === \" \") {\n    value += nextChar;\n    i += 1;\n    nextChar = input[i];\n  }\n\n  return {\n    type: \"space\",\n    value,\n    end: i,\n  };\n}\n","/**\n * @typedef {import(\"./index.js\").Scanner} Scanner\n * @type {(\n *   ...args: Parameters<Scanner>\n * ) => NonNullable<ReturnType<Scanner>>}\n */\nexport default function unhandledScanner(char, _input, { start }) {\n  return {\n    type: \"ident\",\n    value: char,\n    end: start + char.length,\n  };\n}\n","import alpha from \"./alpha.js\";\nimport backslash from \"./backslash.js\";\nimport backtick from \"./backtick.js\";\nimport groupSep from \"./group-sep.js\";\nimport infix from \"./infix.js\";\nimport newline from \"./newline.js\";\nimport number from \"./number.js\";\nimport octothorpe from \"./octothorpe.js\";\nimport operator from \"./operator.js\";\nimport parenClose from \"./paren-close.js\";\nimport parenOpen from \"./paren-open.js\";\nimport quote from \"./quote.js\";\nimport space from \"./space.js\";\n\nexport { default as unhandled } from \"./unhandled.js\";\n\n/**\n * @typedef {Required<import(\"../index.js\").TokenizerOptions>} Options\n * @typedef {import(\"../index.js\").State} State\n * @typedef {import(\"../index.js\").Token} Token\n * @typedef {(\n *   char: string,\n *   input: string,\n *   state: State,\n *   options: Options,\n * ) => (Token & { end: number }) | null} Scanner\n * @type {Scanner[]}\n */\nexport default [\n  space,\n  alpha,\n  number,\n  backtick,\n  quote,\n  octothorpe,\n  backslash,\n  newline,\n  infix,\n  groupSep,\n  parenOpen,\n  parenClose,\n  operator,\n];\n","import { isMark } from \"./lexemes.js\";\nimport scanners, { unhandled } from \"./scanners/index.js\";\n\n/**\n * @typedef {\"command\"\n *   | \"ident\"\n *   | \"infix\"\n *   | \"number\"\n *   | \"operator\"\n *   | \"paren.close\"\n *   | \"paren.open\"\n *   | \"prefix\"\n *   | \"sep.col\"\n *   | \"sep.row\"\n *   | \"space\"\n *   | \"text\"} TokenType\n *\n * @typedef {object} Token\n * @property {TokenType} type\n * @property {string} value\n * @property {string} [accent]\n * @property {number} [arity]\n * @property {string} [name]\n * @property {boolean} [split] - Can be broken up into smaller units.\n * @property {boolean} [sep] - Can function as a group seperator.\n * @property {Record<string, string | number | boolean | null | undefined>} [attrs]\n * @property {Token[]} [extraTokensAfter]\n *\n * @typedef {object} State\n * @property {number} start\n * @property {boolean} grouping\n *\n * @typedef {object} TokenizerOptions\n * @property {string} [decimalMark=\".\"] - Decimal separator. Default is `\".\"`\n * @property {string} [colSep=\",\"] - Column separator e.g. for arrays and\n *   matrices. Default is `\",\"`\n * @property {string} [rowSep=\";\"] - Row separator e.g. for matrices. Default is\n *   `\";\"`\n *\n * @param {Required<TokenizerOptions>} options\n * @returns {(input: string) => Generator<Token>}\n */\nexport default function createTokenizer(options) {\n  /**\n   * @param {string} input\n   * @param {State} state\n   * @returns {Token & { end: number }}\n   */\n  function nextToken(input, state) {\n    const [char] = input.slice(state.start);\n\n    for (const scan of scanners) {\n      const token = scan(char, input, state, options);\n\n      if (token) {\n        return token;\n      }\n    }\n\n    return unhandled(char, input, state, options);\n  }\n\n  /**\n   * @param {string} input\n   * @yields {Token}\n   */\n  return function* tokenize(input) {\n    let pos = 0;\n    let nestLevel = 0;\n\n    while (pos < input.length) {\n      const { type, value, end, split, extraTokensAfter, ...attrs } = nextToken(\n        input,\n        {\n          start: pos,\n          grouping: nestLevel > 0,\n        },\n      );\n\n      if (split) {\n        let char = \"\";\n\n        for (const codePoint of value) {\n          if (isMark(codePoint)) {\n            char += codePoint;\n          } else if (char) {\n            yield {\n              type,\n              value: char,\n            };\n\n            char = codePoint;\n          } else {\n            char = codePoint;\n          }\n        }\n\n        if (char) {\n          yield {\n            type,\n            value: char,\n          };\n        }\n      } else {\n        yield {\n          type,\n          value,\n          ...attrs,\n        };\n      }\n\n      if (extraTokensAfter) {\n        for (const token of extraTokensAfter) {\n          yield token;\n        }\n      }\n\n      pos = end;\n\n      if (type === \"paren.open\") {\n        nestLevel += 1;\n      } else if (type === \"paren.close\" && nestLevel > 0) {\n        nestLevel -= 1;\n      }\n    }\n  };\n}\n","/**\n * @typedef {import(\"../../parser/index.js\").FencedGroup} FencedGroup\n */\n\n/**\n * @param {import(\"../index.js\").Tag | null} tag\n * @returns {boolean}\n */\nfunction notNull(tag) {\n  return tag !== null;\n}\n\n/** @type {import(\"../index.js\").TransformFn<FencedGroup>} */\nexport default function fencedGroup(node, transform) {\n  const cols = node.items\n    .map((col) => {\n      if (col.length === 1) {\n        return transform(col[0]);\n      }\n\n      return {\n        tag: \"mrow\",\n        childNodes: col.map(transform).filter(notNull),\n      };\n    })\n    .reduce(\n      (joined, next, i) => {\n        joined?.childNodes?.push(next);\n\n        const sep = node.attrs.seps[i];\n        if (sep) {\n          const { value, attrs = {} } = sep;\n          joined?.childNodes?.push({\n            tag: \"mo\",\n            textContent: value,\n            attrs: { ...attrs, separator: true },\n          });\n        }\n\n        return joined;\n      },\n      {\n        tag: \"mrow\",\n        childNodes: [],\n      },\n    );\n\n  const { open, close } = node.attrs;\n\n  if (cols && !open.value && !close?.value) {\n    return cols;\n  }\n\n  const childNodes = [];\n\n  if (open.value) {\n    childNodes.push({\n      tag: \"mo\",\n      textContent: open.value,\n      attrs: {\n        ...open.attrs,\n        fence: \"true\",\n      },\n    });\n  }\n\n  if (cols?.childNodes?.length === 1) {\n    childNodes.push(cols.childNodes[0]);\n  } else {\n    childNodes.push(cols);\n  }\n\n  if (close?.value) {\n    childNodes.push({\n      tag: \"mo\",\n      textContent: close.value,\n      attrs: {\n        ...close.attrs,\n        fence: \"true\",\n      },\n    });\n  }\n\n  return {\n    tag: \"mrow\",\n    childNodes,\n  };\n}\n","/**\n * @typedef {import(\"../../parser/index.js\").Literal} Literal\n * @typedef {import(\"../../parser/index.js\").SpaceLiteral} SpaceLiteral\n */\n\n/**\n * @param {string} tag\n * @returns {import(\"../index.js\").TransformFn<\n *   Exclude<Literal, SpaceLiteral>\n * >}\n */\nexport default function literal(tag) {\n  return (node) => {\n    return {\n      tag,\n      attrs: node.attrs,\n      textContent: node.value,\n    };\n  };\n}\n","/**\n * @typedef {import(\"../../parser/index.js\").Node} Node\n * @typedef {import(\"../../parser/index.js\").MatrixGroup} MatrixGroup\n * @typedef {import(\"../index.js\").Tag} Tag\n */\n\n/**\n * @param {Tag | null} tag\n * @returns {boolean}\n */\nfunction notNull(tag) {\n  return tag !== null;\n}\n\n/** @type {import(\"../index.js\").TransformFn<MatrixGroup>} */\nexport default function matrixGroup(node, transform) {\n  const childNodes = [];\n\n  const colCount = node.items.reduce(\n    (max, row) => Math.max(max, row.length),\n    0,\n  );\n\n  const { open, close } = node.attrs;\n\n  // auto start-align tables with no close param.\n  const aligns = !close?.value\n    ? Array.from({ length: colCount }).fill(\"start\")\n    : [];\n\n  if (open.value) {\n    childNodes.push({\n      tag: \"mo\",\n      textContent: open.value,\n      attrs: {\n        ...open.attrs,\n        fence: \"true\",\n      },\n    });\n  }\n\n  childNodes.push({\n    tag: \"mtable\",\n    childNodes: node.items.map((row) => ({\n      tag: \"mtr\",\n      childNodes: row.map((col, i) => ({\n        tag: \"mtd\",\n        attrs: aligns[i] ? { style: `text-align: ${aligns[i]}` } : {},\n        childNodes: col.map(transform).filter(notNull),\n      })),\n    })),\n  });\n\n  if (close?.value) {\n    childNodes.push({\n      tag: \"mo\",\n      textContent: close.value,\n      attrs: {\n        ...close.attrs,\n        fence: \"true\",\n      },\n    });\n  }\n\n  return {\n    tag: \"mrow\",\n    childNodes,\n  };\n}\n","/**\n * @typedef {import(\"../../parser/index.js\").MultiScripts} MultiScripts\n * @type {import(\"../index.js\").TransformFn<MultiScripts>}\n */\nexport default function multiscripts(node, transform) {\n  const postscripts = node.post.flatMap((pair) =>\n    pair.map((nodes) => {\n      if (nodes.length === 1) {\n        return transform(nodes[0]);\n      }\n\n      return {\n        tag: \"mrow\",\n        childNodes: nodes.map(transform),\n      };\n    }),\n  );\n\n  const childNodes = [transform(node.base), ...postscripts];\n\n  if (node.pre && node.pre.length > 0) {\n    childNodes.push({ tag: \"mprescripts\" });\n\n    const prescripts = node.pre.flatMap((pair) =>\n      pair.map((nodes) => {\n        if (nodes.length === 1) {\n          return transform(nodes[0]);\n        }\n\n        return {\n          tag: \"mrow\",\n          childNodes: nodes.map(transform),\n        };\n      }),\n    );\n\n    childNodes.push(...prescripts);\n  }\n\n  return {\n    tag: \"mmultiscripts\",\n    childNodes,\n  };\n}\n","/**\n * @typedef {import(\"../../parser/index.js\").BinaryOperation} BinaryOperation\n * @typedef {import(\"../../parser/index.js\").TernaryOperation} TernaryOperation\n * @type {import(\"../index.js\").TransformFn<\n *   BinaryOperation | TernaryOperation\n * >}\n */\nexport default function operation(node, transform) {\n  const { open, close, ...attrs } = node.attrs || {};\n\n  const opNode = {\n    tag: `m${node.name}`,\n    childNodes: node.items.map(transform),\n    attrs,\n  };\n\n  if (open || close) {\n    return {\n      tag: \"mrow\",\n      childNodes: [\n        { tag: \"mo\", textContent: `${open}`, attrs: { fence: true } },\n        opNode,\n        { tag: \"mo\", textContent: `${close}`, attrs: { fence: true } },\n      ],\n    };\n  }\n\n  return opNode;\n}\n","/**\n * @typedef {import(\"../../parser/index.js\").Sentence} Sentence\n * @type {import(\"../index.js\").TransformFn<Sentence>}\n */\nexport default function sentence(node, transform, options) {\n  /** @type {Record<string, string>} */\n  const attrs = {};\n\n  if (options.dir) {\n    attrs.dir = options.dir;\n  }\n\n  if (options.display) {\n    attrs.display = options.display;\n  }\n\n  return {\n    tag: \"math\",\n    attrs,\n    childNodes: node.body.map(transform).filter((x) => x !== null),\n  };\n}\n","/**\n * @typedef {import(\"../../parser/index.js\").SpaceLiteral} SpaceLiteral\n * @type {import(\"../index.js\").TransformFn<SpaceLiteral>}\n */\nexport default function spaceLiteral(node) {\n  if (node.attrs.width === \"0ex\") {\n    // No 0 width whitespace.\n    return null;\n  }\n\n  return {\n    tag: \"mspace\",\n    attrs: node.attrs,\n  };\n}\n","/** @typedef {import(\"../index.js\").Tag} Tag */\n\n/**\n * @param {string} name\n * @param {string} value\n * @returns {string}\n */\nfunction withCustomProperty(name, value) {\n  return `var(--mathup-${name}-${value}, ${value})`;\n}\n\n/**\n * @param {Map<string, string> | undefined} styles\n * @param {Tag | null} tag\n * @returns {Tag | null}\n */\nexport function applyStyles(styles, tag) {\n  if (!styles || !tag) {\n    return tag;\n  }\n\n  /** @type {Map<string, string>} */\n  const combinedStyles = new Map();\n\n  for (const [name, value] of styles) {\n    if (name === \"background\") {\n      const currentValue = combinedStyles.get(\"background\");\n      const backgroundValue = withCustomProperty(name, value);\n\n      if (currentValue) {\n        combinedStyles.set(\"background\", `${currentValue},${backgroundValue}`);\n      } else {\n        combinedStyles.set(\"background\", backgroundValue);\n      }\n    } else {\n      combinedStyles.set(name, withCustomProperty(name, value));\n    }\n  }\n\n  let style = tag.attrs?.style ?? \"\";\n  for (const [name, value] of combinedStyles) {\n    style += `${name}:${value};`;\n  }\n\n  if (!style) {\n    return tag;\n  }\n\n  return {\n    ...tag,\n    attrs: tag.attrs ? { ...tag.attrs, style } : { style },\n  };\n}\n","import { applyStyles } from \"./styles.js\";\n\n/**\n * @typedef {import(\"../../parser/index.js\").Node} Node\n * @typedef {import(\"../../parser/index.js\").Term} Term\n * @typedef {import(\"../index.js\").Tag} Tag\n */\n\n/**\n * @template T\n * @param {T} node\n * @returns {boolean}\n */\nfunction notNull(node) {\n  return node !== null;\n}\n\n/** @type {import(\"../index.js\").TransformFn<Term>} */\nexport default function term(node, transform) {\n  if (node.items.length === 1 && notNull(node.items[0])) {\n    return applyStyles(node.styles, transform(node.items[0]));\n  }\n\n  return applyStyles(node.styles, {\n    tag: \"mrow\",\n    childNodes: node.items.map(transform).filter(notNull),\n  });\n}\n","// See tables at https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols\n\n/**\n * @param {(char: string) => string} fn\n * @param {string} string\n * @returns {string}\n */\nfunction mapChars(fn, string) {\n  let mapped = \"\";\n\n  for (const char of string) {\n    mapped += fn(char);\n  }\n\n  return mapped;\n}\n\n/**\n * @param {[[number, number], number][]} ranges\n * @param {Map<string, string>} [defaults]\n * @returns {(char: string) => string}\n */\nfunction createCharMapping(ranges, defaults) {\n  return (char) => {\n    if (defaults) {\n      const found = defaults.get(char);\n\n      if (found) {\n        return found;\n      }\n    }\n\n    const codePoint = char.codePointAt(0);\n\n    if (!codePoint) {\n      return char;\n    }\n\n    for (const [[min, max], offset] of ranges) {\n      if (min <= codePoint && codePoint <= max) {\n        return String.fromCodePoint(codePoint + offset);\n      }\n    }\n\n    return char;\n  };\n}\n\n/**\n * @param {[number, number]} range\n * @returns {(offset: number) => [[number, number], number]}\n */\nfunction createRange([min, max]) {\n  return (offset) => [[min, max], offset - min];\n}\n\nconst digitRange = createRange([0x30, 0x39]);\nconst latinCapitalLetterRange = createRange([0x41, 0x5a]);\nconst latinSmallLetterRange = createRange([0x61, 0x7a]);\nconst greekCapitalLetterRange = createRange([0x0391, 0x03a9]);\nconst greekSmallLetterRange = createRange([0x03b1, 0x03c9]);\n\nconst bold = createCharMapping(\n  [\n    digitRange(0x1d7ce),\n    latinCapitalLetterRange(0x1d400),\n    latinSmallLetterRange(0x1d41a),\n    greekCapitalLetterRange(0x1d6a8),\n    greekSmallLetterRange(0x1d6c2),\n  ],\n  new Map([\n    [\"ϴ\", \"𝚹\"],\n    [\"∇\", \"𝛁\"],\n    [\"∂\", \"𝛛\"],\n    [\"ϵ\", \"𝛜\"],\n    [\"ϑ\", \"𝛝\"],\n    [\"ϰ\", \"𝛞\"],\n    [\"ϕ\", \"𝛟\"],\n    [\"ϱ\", \"𝛠\"],\n    [\"ϖ\", \"𝛡\"],\n    [\"Ϝ\", \"𝟊\"],\n    [\"ϝ\", \"𝟋\"],\n  ]),\n);\n\nconst italic = createCharMapping(\n  [\n    latinCapitalLetterRange(0x1d434),\n    latinSmallLetterRange(0x1d44e),\n    greekCapitalLetterRange(0x1d6e2),\n    greekSmallLetterRange(0x1d6fc),\n  ],\n  new Map([\n    [\"h\", \"ℎ\"],\n    [\"ı\", \"𝚤\"],\n    [\"ȷ\", \"𝚥\"],\n    [\"ϴ\", \"𝛳\"],\n    [\"∇\", \"𝛻\"],\n    [\"∂\", \"𝜕\"],\n    [\"ϵ\", \"𝜖 \"],\n    [\"ϑ\", \"𝜗\"],\n    [\"ϰ\", \"𝜘\"],\n    [\"ϕ\", \"𝜙\"],\n    [\"ϱ\", \"𝜚\"],\n    [\"ϖ\", \"𝜛\"],\n  ]),\n);\n\nconst boldItalic = createCharMapping(\n  [\n    latinCapitalLetterRange(0x1d468),\n    latinSmallLetterRange(0x1d482),\n    greekCapitalLetterRange(0x1d71c),\n    greekSmallLetterRange(0x1d736),\n  ],\n  new Map([\n    [\"ϴ\", \"𝜭\"],\n    [\"∇\", \"𝜵\"],\n    [\"∂\", \"𝝏\"],\n    [\"ϵ\", \"𝝐\"],\n    [\"ϑ\", \"𝝑\"],\n    [\"ϰ\", \"𝝒\"],\n    [\"ϕ\", \"𝝓\"],\n    [\"ϱ\", \"𝝔\"],\n    [\"ϖ\", \"𝝕\"],\n  ]),\n);\n\nconst doubleStruck = createCharMapping(\n  [\n    digitRange(0x1d7d8),\n    latinCapitalLetterRange(0x1d538),\n    latinSmallLetterRange(0x1d552),\n  ],\n  new Map([\n    [\"C\", \"ℂ\"],\n    [\"H\", \"ℍ\"],\n    [\"N\", \"ℕ\"],\n    [\"P\", \"ℙ\"],\n    [\"Q\", \"ℚ\"],\n    [\"R\", \"ℝ\"],\n    [\"Z\", \"ℤ\"],\n    [\"π\", \"ℼ\"],\n    [\"γ\", \"ℽ\"],\n    [\"Π\", \"ℿ\"],\n    [\"∑\", \"⅀\"],\n  ]),\n);\n\nconst italicDoubleStruck = createCharMapping(\n  [],\n  new Map([\n    [\"D\", \"ⅅ\"],\n    [\"d\", \"ⅆ\"],\n    [\"i\", \"ⅈ\"],\n    [\"j\", \"ⅉ\"],\n  ]),\n);\n\nconst fraktur = createCharMapping(\n  [latinCapitalLetterRange(0x1d504), latinSmallLetterRange(0x1d51e)],\n  new Map([\n    [\"C\", \"ℭ\"],\n    [\"H\", \"ℌ\"],\n    [\"I\", \"ℑ\"],\n    [\"R\", \"ℜ\"],\n    [\"Z\", \"ℨ\"],\n  ]),\n);\n\nconst boldFraktur = createCharMapping([\n  latinCapitalLetterRange(0x1d56c),\n  latinSmallLetterRange(0x1d586),\n]);\n\nconst monospace = createCharMapping([\n  digitRange(0x1d7f6),\n  latinCapitalLetterRange(0x1d670),\n  latinSmallLetterRange(0x1d68a),\n]);\n\nconst sansSerif = createCharMapping([\n  digitRange(0x1d7e2),\n  latinCapitalLetterRange(0x1d5a0),\n  latinSmallLetterRange(0x1d5ba),\n]);\n\nconst boldSansSerif = createCharMapping(\n  [\n    digitRange(0x1d7ec),\n    latinCapitalLetterRange(0x1d5d4),\n    latinSmallLetterRange(0x1d5ee),\n    greekCapitalLetterRange(0x1d756),\n    greekSmallLetterRange(0x1d770),\n  ],\n  new Map([\n    [\"ϴ\", \"𝝧\"],\n    [\"∇\", \"𝝯\"],\n    [\"∂\", \"𝞉\"],\n    [\"ϵ\", \"𝞊\"],\n    [\"ϑ\", \"𝞋\"],\n    [\"ϰ\", \"𝞌\"],\n    [\"ϕ\", \"𝞍\"],\n    [\"ϱ\", \"𝞎\"],\n    [\"ϖ\", \"𝞏\"],\n  ]),\n);\n\nconst italicSansSerif = createCharMapping([\n  latinCapitalLetterRange(0x1d608),\n  latinSmallLetterRange(0x1d622),\n]);\n\nconst boldItalicSansSerif = createCharMapping(\n  [\n    latinCapitalLetterRange(0x1d63c),\n    latinSmallLetterRange(0x1d656),\n    greekCapitalLetterRange(0x1d790),\n    greekSmallLetterRange(0x1d7aa),\n  ],\n  new Map([\n    [\"ϴ\", \"𝞡\"],\n    [\"∇\", \"𝞩\"],\n    [\"∂\", \"𝟃\"],\n    [\"ϵ\", \"𝟄\"],\n    [\"ϑ\", \"𝟅\"],\n    [\"ϰ\", \"𝟆\"],\n    [\"ϕ\", \"𝟇\"],\n    [\"ϱ\", \"𝟈\"],\n    [\"ϖ\", \"𝟉\"],\n  ]),\n);\n\nconst script = createCharMapping(\n  [latinCapitalLetterRange(0x1d49c), latinSmallLetterRange(0x1d4b6)],\n  new Map([\n    [\"B\", \"ℬ\"],\n    [\"E\", \"ℰ\"],\n    [\"F\", \"ℱ\"],\n    [\"H\", \"ℋ\"],\n    [\"I\", \"ℐ\"],\n    [\"L\", \"ℒ\"],\n    [\"M\", \"ℳ\"],\n    [\"R\", \"ℛ\"],\n    [\"e\", \"ℯ\"],\n    [\"g\", \"ℊ\"],\n    [\"o\", \"ℴ\"],\n  ]),\n);\n\nconst boldScript = createCharMapping([\n  latinCapitalLetterRange(0x1d4d0),\n  latinSmallLetterRange(0x1d4ea),\n]);\n\n/**\n * @param {string} family\n * @returns {string}\n */\nfunction fontFamilyStyleValue(family) {\n  return `var(--mathup-font-family-${family}, ${family})`;\n}\n\n/**\n * @typedef {import(\"../../parser/index.js\").LiteralAttrs} LiteralAttrs\n * @param {LiteralAttrs} attrs\n * @param {string[]} transforms\n * @returns {LiteralAttrs}\n */\nexport function textLiteralAttrs(attrs, transforms) {\n  /** @type {Map<string, string>} */\n  const styles = new Map();\n\n  if (transforms.includes(\"bold\")) {\n    styles.set(\"font-weight\", \"bold\");\n  }\n\n  if (transforms.includes(\"italic\")) {\n    styles.set(\"font-style\", \"italic\");\n  }\n\n  // serif is default font-family, so no need to check for `rm`.\n  if (transforms.includes(\"sans-serif\")) {\n    styles.set(\"font-family\", fontFamilyStyleValue(\"sans-serif\"));\n  } else if (transforms.includes(\"monospace\")) {\n    styles.set(\"font-family\", fontFamilyStyleValue(\"monospace\"));\n  }\n\n  if (styles.size === 0) {\n    return attrs;\n  }\n\n  let style = \"\";\n  for (const [name, value] of styles) {\n    style += `${name}:${value};`;\n  }\n\n  return {\n    ...attrs,\n    style,\n  };\n}\n\n/**\n * @param {string} text\n * @param {string[]} transforms\n * @returns {string}\n */\nexport function textLiteralValue(text, transforms) {\n  if (transforms.includes(\"double-struck\")) {\n    return mapChars(doubleStruck, text);\n  }\n\n  if (transforms.includes(\"script\")) {\n    return mapChars(script, text);\n  }\n\n  if (transforms.includes(\"fraktur\")) {\n    return mapChars(fraktur, text);\n  }\n\n  return text;\n}\n\n/**\n * @param {string} text\n * @param {string[]} transforms\n * @returns {string}\n */\nexport function literalValue(text, transforms) {\n  if (transforms.includes(\"bold\")) {\n    if (transforms.includes(\"italic\")) {\n      if (transforms.includes(\"sans-serif\")) {\n        return mapChars(boldItalicSansSerif, text);\n      }\n\n      return mapChars(boldItalic, text);\n    }\n\n    if (transforms.includes(\"script\")) {\n      return mapChars(boldScript, text);\n    }\n\n    if (transforms.includes(\"fraktur\")) {\n      return mapChars(boldFraktur, text);\n    }\n\n    if (transforms.includes(\"sans-serif\")) {\n      return mapChars(boldSansSerif, text);\n    }\n\n    return mapChars(bold, text);\n  }\n\n  if (transforms.includes(\"italic\")) {\n    if (transforms.includes(\"double-struck\")) {\n      return mapChars(italicDoubleStruck, text);\n    }\n\n    if (transforms.includes(\"sans-serif\")) {\n      return mapChars(italicSansSerif, text);\n    }\n\n    return mapChars(italic, text);\n  }\n\n  if (transforms.includes(\"sans-serif\")) {\n    return mapChars(sansSerif, text);\n  }\n\n  if (transforms.includes(\"monospace\")) {\n    return mapChars(monospace, text);\n  }\n\n  return textLiteralValue(text, transforms);\n}\n","import { applyStyles } from \"./styles.js\";\nimport {\n  literalValue,\n  textLiteralAttrs,\n  textLiteralValue,\n} from \"./text-transforms.js\";\n\n/**\n * @typedef {import(\"../../parser/index.js\").Node} ASTNode\n * @typedef {import(\"../../parser/index.js\").UnaryOperation} UnaryOperation\n * @typedef {import(\"../../parser/index.js\").Literal} Literal\n * @typedef {import(\"../../parser/index.js\").SpaceLiteral} SpaceLiteral\n */\n\n/**\n * @template {ASTNode} Node\n * @overload\n * @param {Node} childNode\n * @param {UnaryOperation} node\n * @returns {Node}\n */\n\n/**\n * @template {ASTNode} Node\n * @overload\n * @param {Node[]} childNode\n * @param {UnaryOperation} node\n * @returns {Node[]}\n */\n\n/**\n * @template {ASTNode} Node\n * @overload\n * @param {Node[][]} childNode\n * @param {UnaryOperation} node\n * @returns {Node[][]}\n */\n\n/**\n * @template {ASTNode} Node\n * @param {Node | Node[] | Node[][]} childNode\n * @param {UnaryOperation} node\n * @returns {Node | Node[] | Node[][]}\n */\nfunction handleCommand(childNode, node) {\n  if (Array.isArray(childNode)) {\n    return childNode.map((grandChild) =>\n      handleCommand(/** @type {Node} */ (grandChild), node),\n    );\n  }\n\n  if (childNode.type === \"TextLiteral\") {\n    const { attrs = {}, transforms = [] } = node;\n\n    return {\n      ...childNode,\n      attrs: textLiteralAttrs(attrs, transforms),\n      value: textLiteralValue(childNode.value, transforms),\n    };\n  }\n\n  if (\n    childNode.type === \"IdentLiteral\" &&\n    childNode.value.length === 1 &&\n    node.transforms &&\n    node.transforms.length === 1 &&\n    node.transforms[0] === \"normal\"\n  ) {\n    // Disable auto-italic idents\n    return {\n      ...childNode,\n      attrs: {\n        ...(childNode.attrs ?? {}),\n        mathvariant: \"normal\",\n      },\n    };\n  }\n\n  if (\n    childNode.type === \"IdentLiteral\" ||\n    childNode.type === \"NumberLiteral\" ||\n    childNode.type === \"OperatorLiteral\"\n  ) {\n    const { transforms = [] } = node;\n\n    return {\n      ...childNode,\n      value: literalValue(childNode.value, transforms),\n    };\n  }\n\n  if (childNode.type === \"MultiScripts\") {\n    return {\n      ...childNode,\n      base: handleCommand(childNode.base, node),\n    };\n  }\n\n  if (\"items\" in childNode) {\n    return {\n      ...childNode,\n      items: childNode.items.map((grandChild) =>\n        handleCommand(/** @type {Node} */ (grandChild), node),\n      ),\n    };\n  }\n\n  return childNode;\n}\n\n/** @type {import(\"../index.js\").TransformFn<UnaryOperation>} */\nexport default function unaryOperation(node, transform) {\n  if (node.name === \"command\") {\n    return applyStyles(\n      node.styles,\n      transform(handleCommand(node.items[0], node)),\n    );\n  }\n\n  if (node.name === \"fence\") {\n    const { open, close } = node.attrs || {};\n\n    /** @type {(import(\"../index.js\").Tag | null)[]} */\n    const childNodes = [\n      { tag: \"mo\", attrs: { fence: true }, textContent: `${open}` },\n      node.items.length === 1\n        ? transform(node.items[0])\n        : { tag: \"mrow\", childNodes: node.items.map(transform) },\n      { tag: \"mo\", attrs: { fence: true }, textContent: `${close}` },\n    ];\n\n    return {\n      tag: \"mrow\",\n      childNodes,\n    };\n  }\n\n  const tag = `m${node.name}`;\n  let [operand] = node.items;\n\n  if (operand.type === \"Term\" && operand.items.length === 1) {\n    // There is no need of a singleton term.\n    [operand] = operand.items;\n  }\n\n  if (node.accent) {\n    const attrs = node.attrs ? { ...node.attrs } : {};\n    if (node.name === \"over\") {\n      attrs.accent = true;\n\n      // Remove the dot from i and j to make way for the accent.\n      if (operand.type === \"IdentLiteral\") {\n        if (operand.value === \"i\") {\n          operand.value = \"ı\";\n        } else if (operand.value === \"j\") {\n          operand.value = \"ȷ\";\n        }\n      }\n    } else if (node.name === \"under\") {\n      attrs.accentunder = true;\n    }\n\n    const childNodes = [\n      transform(operand),\n      {\n        tag: \"mo\",\n        textContent: node.accent,\n      },\n    ];\n\n    return {\n      tag,\n      childNodes,\n      attrs,\n    };\n  }\n\n  return {\n    tag,\n    childNodes: [transform(operand)],\n    attrs: node.attrs,\n  };\n}\n","import fencedGroup from \"./fenced-group.js\";\nimport literal from \"./literal.js\";\nimport matrixGroup from \"./matrix-group.js\";\nimport multiscripts from \"./multiscripts.js\";\nimport operation from \"./operation.js\";\nimport sentence from \"./sentence.js\";\nimport spaceLiteral from \"./space-literal.js\";\nimport term from \"./term.js\";\nimport unaryOperation from \"./unary-operation.js\";\n\n/** @typedef {import(\"../index.js\").TransformFn} TransformFn */\nexport default new Map([\n  [\"BinaryOperation\", /** @type {TransformFn} */ (operation)],\n  [\"FencedGroup\", /** @type {TransformFn} */ (fencedGroup)],\n  [\"IdentLiteral\", /** @type {TransformFn} */ (literal(\"mi\"))],\n  [\"MatrixGroup\", /** @type {TransformFn} */ (matrixGroup)],\n  [\"MultiScripts\", /** @type {TransformFn} */ (multiscripts)],\n  [\"NumberLiteral\", /** @type {TransformFn} */ (literal(\"mn\"))],\n  [\"OperatorLiteral\", /** @type {TransformFn} */ (literal(\"mo\"))],\n  [\"Sentence\", /** @type {TransformFn} */ (sentence)],\n  [\"SpaceLiteral\", /** @type {TransformFn} */ (spaceLiteral)],\n  [\"Term\", /** @type {TransformFn} */ (term)],\n  [\"TernaryOperation\", /** @type {TransformFn} */ (operation)],\n  [\"TextLiteral\", /** @type {TransformFn} */ (literal(\"mtext\"))],\n  [\"UnaryOperation\", /** @type {TransformFn} */ (unaryOperation)],\n]);\n","import transforms from \"./transforms/index.js\";\n\n/**\n * @typedef {import(\"../parser/index.js\").Node} ASTNode\n * @typedef {object} TransformerOptions\n * @property {\"ltr\" | \"rtl\" | null} [dir=null] - The reading direction of the\n *   output. Default is `null`\n * @property {\"block\" | \"inline\" | null} [display=null] - Whether the expression\n *   should be in display mode. Default is `null` Default is `null` Default is\n *   `null` Default is `null`\n * @typedef {object} Tag\n * @property {string} tag\n * @property {Record<string, string | number | boolean | undefined | null>} [attrs]\n * @property {(Tag | null)[]} [childNodes]\n * @property {string} [textContent]\n */\n\n/**\n * @template {ASTNode} [Node=ASTNode] Default is `ASTNode`\n * @typedef {(\n *   node: Node,\n *   transform: (node: ASTNode) => Tag | null,\n *   options: Required<TransformerOptions>,\n * ) => Tag | null} TransformFn\n */\n\n/**\n * @param {Required<TransformerOptions>} options\n * @returns {(node: ASTNode) => Tag | null}\n */\nexport default function transformer(options) {\n  return function transform(node) {\n    const transformNode = transforms.get(node.type);\n\n    if (!transformNode) {\n      return null;\n    }\n\n    return transformNode(node, transform, options);\n  };\n}\n","import { parse } from \"./parser/index.js\";\nimport { toDOM, toString, updateDOM } from \"./renders/index.js\";\nimport tokenizer from \"./tokenizer/index.js\";\nimport transformer from \"./transformer/index.js\";\n\n/**\n * @typedef {import(\"./tokenizer/index.js\").TokenizerOptions} TokenizerOptions\n * @typedef {import(\"./transformer/index.js\").TransformerOptions} TransformerOptions\n * @typedef {import(\"./renders/index.js\").RenderOptions} RenderOptions\n * @typedef {TokenizerOptions & TransformerOptions & RenderOptions} Options\n *\n * @typedef {object} Result\n * @property {() => string} toString\n * @property {() => Element | DocumentFragment} toDOM\n * @property {(root: Element) => void} updateDOM\n *\n * @param {Options} options\n * @returns {(input: string) => Result}\n */\nexport default function compiler({\n  bare = false,\n  dir = null,\n  display = null,\n\n  decimalMark = \".\",\n  colSep = decimalMark === \",\" ? \";\" : \",\",\n  rowSep = colSep === \";\" ? \";;\" : \";\",\n}) {\n  const tokenizerOptions = { decimalMark, colSep, rowSep };\n  const transformerOptions = { dir, display };\n  const renderOptions = { bare };\n\n  /**\n   * @param {string} input - Mathup expression\n   * @returns {Result}\n   */\n  return function compile(input) {\n    const tokenize = tokenizer(tokenizerOptions);\n    const tokens = tokenize(input);\n    const ast = parse([...tokens]);\n    const transform = transformer(transformerOptions);\n    const domTree = transform(ast);\n\n    if (!domTree) {\n      throw new Error(\"Failed parsing AST\");\n    }\n\n    return {\n      toDOM() {\n        return toDOM(domTree, renderOptions);\n      },\n\n      toString() {\n        return toString(domTree, renderOptions);\n      },\n\n      updateDOM(root) {\n        return updateDOM(root, domTree, renderOptions);\n      },\n    };\n  };\n}\n","import compiler from \"./compiler/index.js\";\n\n/**\n * @typedef {import(\"./compiler/index.js\").Result} Mathup\n * @typedef {import(\"./compiler/index.js\").Options} Options\n * @param {string} input\n * @param {Options} [options]\n * @returns {Mathup}\n */\nexport default function mathup(input, options = {}) {\n  const compile = compiler(options);\n\n  return compile(input);\n}\n"],"names":["isPipeOperator","token","type","value","isDoublePipeOperator","maybeFixDoublePipe","items","length","first","at","last","addZeroLSpaceToOperator","node","attrs","lspace","empty","isIndexBreak","prepareScript","nodes","pop","cell","term","endsWith","parseScripts","state","i","start","tokens","scripts","sub","sup","commit","push","position","next","expr","stack","nestLevel","stopAt","other","end","multiscripts","base","prescripts","nextToken","post","pre","omitType","_type","rest","group","open","seps","cols","rows","sepToken","close","rowItems","insertTransformNode","transforms","left","right","a","b","c","name","maybeStopAtPipe","undefined","lastToken","command","Error","textTransforms","styles","Map","handleCommandToken","set","pos","size","toTermOrUnwrap","arity","prefix","second","accent","spaceWidth","n","space","lineBreak","startsWith","width","literal","handlers","infix","SHOULD_STOP","maybeRemoveFence","mutated","forEach","item","maybeApplyUnderOver","operator","includes","fixFracSpacing","maybeTernary","op","under","over","rightAssociate","isPipeDelimited","splice","handleRight","get","KEEP_GOING_TYPES","maybeFixDifferential","operand","rspace","handler","parse","body","NS","toDOM","bare","element","tag","document","createDocumentFragment","createElementNS","Element","Object","entries","setAttribute","textContent","childNodes","childNode","appendChild","escapeTextContent","str","replace","escapeAttrValue","toString","attrString","map","join","openContent","content","child","nullIter","zip","iterables","iterators","iterable","Symbol","iterator","every","done","updateDOM","parent","options","tagName","toLowerCase","desiredAttrs","removeAttrs","attr","attributes","newValue","removeAttribute","getAttribute","appendChilds","removeChilds","replaceChilds","desired","children","removeChild","oldChild","replaceChild","LETTER_RE","isAlphabetic","char","test","LETTER_NUMBER_RE","isAlphanumeric","MARK_RE","isMark","NUMBER_RE","isNumeric","OPERATOR_RE","isOperational","PUNCT_OPEN_RE","isPunctClose","PUNCT_CLOSE_RE","isPunctOpen","FUNCTION_IDENT_ATTRS","class","KNOWN_IDENTS","mathvariant","KNOWN_OPS","stretchy","sep","KNOWN_PARENS_OPEN","extraTokensAfter","KNOWN_PARENS_CLOSE","KNOWN_PREFIX","linethickness","KNOWN_COMMANDS","handleFence","input","offset","len","closeLen","repeat","trim","handleBacktick","handleQuote","handlePrefixed","slice","isKnownParenCloseAt","key","keys","hasOperand","isGrouping","postPrefixChar","allowedStandalonePrefix","alphaScanner","grouping","nextChar","ident","potential","nextNextChar","indexOf","split","backslashScanner","backtickScanner","groupSepScanner","_char","colSep","rowSep","colSepEnd","rowSepEnd","INFIX_MAP","COLLISIONS","Set","add","infixScanner","newlineScanner","numberScanner","decimalMark","octothorpeScanner","opsPotential","partial","operatorScanner","nextValue","known","isStretchy","parenClosePotential","paren","parenCloseScanner","has","parenOpenPotential","parenOpenScanner","quoteScanner","spaceScanner","unhandledScanner","_input","alpha","number","backtick","quote","octothorpe","backslash","newline","groupSep","parenOpen","parenClose","createTokenizer","scan","scanners","unhandled","tokenize","codePoint","notNull","fencedGroup","transform","col","filter","reduce","joined","separator","fence","matrixGroup","colCount","max","row","Math","aligns","Array","from","fill","style","postscripts","flatMap","pair","operation","opNode","sentence","dir","display","x","spaceLiteral","withCustomProperty","applyStyles","combinedStyles","currentValue","backgroundValue","mapChars","fn","string","mapped","createCharMapping","ranges","defaults","found","codePointAt","min","String","fromCodePoint","createRange","digitRange","latinCapitalLetterRange","latinSmallLetterRange","greekCapitalLetterRange","greekSmallLetterRange","bold","italic","boldItalic","doubleStruck","italicDoubleStruck","fraktur","boldFraktur","monospace","sansSerif","boldSansSerif","italicSansSerif","boldItalicSansSerif","script","boldScript","fontFamilyStyleValue","family","textLiteralAttrs","textLiteralValue","text","literalValue","handleCommand","isArray","grandChild","unaryOperation","accentunder","transformer","transformNode","compiler","tokenizerOptions","transformerOptions","renderOptions","compile","tokenizer","ast","domTree","root","mathup"],"mappings":"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"}