{"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","const 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 only known ops can end with one.\n  if (value.endsWith(\".\") && !KNOWN_OPS.has(value)) {\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":["empty","multiscripts","maybeStopAtPipe","literal","handlers","term","space","alpha","number","backtick","quote","octothorpe","backslash","newline","infix","groupSep","parenOpen","parenClose","operator","unhandled","notNull","tokenizer"],"mappings":"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"}