1e5c31af7Sopenharmony_ciimport katex from '../katex.mjs'; 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci/* eslint-disable */ 4e5c31af7Sopenharmony_ci 5e5c31af7Sopenharmony_ci/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ 6e5c31af7Sopenharmony_ci 7e5c31af7Sopenharmony_ci/* vim: set ts=2 et sw=2 tw=80: */ 8e5c31af7Sopenharmony_ci 9e5c31af7Sopenharmony_ci/************************************************************* 10e5c31af7Sopenharmony_ci * 11e5c31af7Sopenharmony_ci * KaTeX mhchem.js 12e5c31af7Sopenharmony_ci * 13e5c31af7Sopenharmony_ci * This file implements a KaTeX version of mhchem version 3.3.0. 14e5c31af7Sopenharmony_ci * It is adapted from MathJax/extensions/TeX/mhchem.js 15e5c31af7Sopenharmony_ci * It differs from the MathJax version as follows: 16e5c31af7Sopenharmony_ci * 1. The interface is changed so that it can be called from KaTeX, not MathJax. 17e5c31af7Sopenharmony_ci * 2. \rlap and \llap are replaced with \mathrlap and \mathllap. 18e5c31af7Sopenharmony_ci * 3. Four lines of code are edited in order to use \raisebox instead of \raise. 19e5c31af7Sopenharmony_ci * 4. The reaction arrow code is simplified. All reaction arrows are rendered 20e5c31af7Sopenharmony_ci * using KaTeX extensible arrows instead of building non-extensible arrows. 21e5c31af7Sopenharmony_ci * 5. \tripledash vertical alignment is slightly adjusted. 22e5c31af7Sopenharmony_ci * 23e5c31af7Sopenharmony_ci * This code, as other KaTeX code, is released under the MIT license. 24e5c31af7Sopenharmony_ci * 25e5c31af7Sopenharmony_ci * /************************************************************* 26e5c31af7Sopenharmony_ci * 27e5c31af7Sopenharmony_ci * MathJax/extensions/TeX/mhchem.js 28e5c31af7Sopenharmony_ci * 29e5c31af7Sopenharmony_ci * Implements the \ce command for handling chemical formulas 30e5c31af7Sopenharmony_ci * from the mhchem LaTeX package. 31e5c31af7Sopenharmony_ci * 32e5c31af7Sopenharmony_ci * --------------------------------------------------------------------- 33e5c31af7Sopenharmony_ci * 34e5c31af7Sopenharmony_ci * Copyright (c) 2011-2015 The MathJax Consortium 35e5c31af7Sopenharmony_ci * Copyright (c) 2015-2018 Martin Hensel 36e5c31af7Sopenharmony_ci * 37e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 38e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 39e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 40e5c31af7Sopenharmony_ci * 41e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 42e5c31af7Sopenharmony_ci * 43e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 44e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 45e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 46e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 47e5c31af7Sopenharmony_ci * limitations under the License. 48e5c31af7Sopenharmony_ci */ 49e5c31af7Sopenharmony_ci// 50e5c31af7Sopenharmony_ci// Coding Style 51e5c31af7Sopenharmony_ci// - use '' for identifiers that can by minified/uglified 52e5c31af7Sopenharmony_ci// - use "" for strings that need to stay untouched 53e5c31af7Sopenharmony_ci// version: "3.3.0" for MathJax and KaTeX 54e5c31af7Sopenharmony_ci// Add \ce, \pu, and \tripledash to the KaTeX macros. 55e5c31af7Sopenharmony_cikatex.__defineMacro("\\ce", function (context) { 56e5c31af7Sopenharmony_ci return chemParse(context.consumeArgs(1)[0], "ce"); 57e5c31af7Sopenharmony_ci}); 58e5c31af7Sopenharmony_ci 59e5c31af7Sopenharmony_cikatex.__defineMacro("\\pu", function (context) { 60e5c31af7Sopenharmony_ci return chemParse(context.consumeArgs(1)[0], "pu"); 61e5c31af7Sopenharmony_ci}); // Needed for \bond for the ~ forms 62e5c31af7Sopenharmony_ci// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not 63e5c31af7Sopenharmony_ci// a mathematical minus, U+2212. So we need that extra 0.56. 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ci 66e5c31af7Sopenharmony_cikatex.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}"); 67e5c31af7Sopenharmony_ci// This is the main function for handing the \ce and \pu commands. 68e5c31af7Sopenharmony_ci// It takes the argument to \ce or \pu and returns the corresponding TeX string. 69e5c31af7Sopenharmony_ci// 70e5c31af7Sopenharmony_ci 71e5c31af7Sopenharmony_civar chemParse = function chemParse(tokens, stateMachine) { 72e5c31af7Sopenharmony_ci // Recreate the argument string from KaTeX's array of tokens. 73e5c31af7Sopenharmony_ci var str = ""; 74e5c31af7Sopenharmony_ci var expectedLoc = tokens[tokens.length - 1].loc.start; 75e5c31af7Sopenharmony_ci 76e5c31af7Sopenharmony_ci for (var i = tokens.length - 1; i >= 0; i--) { 77e5c31af7Sopenharmony_ci if (tokens[i].loc.start > expectedLoc) { 78e5c31af7Sopenharmony_ci // context.consumeArgs has eaten a space. 79e5c31af7Sopenharmony_ci str += " "; 80e5c31af7Sopenharmony_ci expectedLoc = tokens[i].loc.start; 81e5c31af7Sopenharmony_ci } 82e5c31af7Sopenharmony_ci 83e5c31af7Sopenharmony_ci str += tokens[i].text; 84e5c31af7Sopenharmony_ci expectedLoc += tokens[i].text.length; 85e5c31af7Sopenharmony_ci } 86e5c31af7Sopenharmony_ci 87e5c31af7Sopenharmony_ci var tex = texify.go(mhchemParser.go(str, stateMachine)); 88e5c31af7Sopenharmony_ci return tex; 89e5c31af7Sopenharmony_ci}; // 90e5c31af7Sopenharmony_ci// Core parser for mhchem syntax (recursive) 91e5c31af7Sopenharmony_ci// 92e5c31af7Sopenharmony_ci 93e5c31af7Sopenharmony_ci/** @type {MhchemParser} */ 94e5c31af7Sopenharmony_ci 95e5c31af7Sopenharmony_ci 96e5c31af7Sopenharmony_civar mhchemParser = { 97e5c31af7Sopenharmony_ci // 98e5c31af7Sopenharmony_ci // Parses mchem \ce syntax 99e5c31af7Sopenharmony_ci // 100e5c31af7Sopenharmony_ci // Call like 101e5c31af7Sopenharmony_ci // go("H2O"); 102e5c31af7Sopenharmony_ci // 103e5c31af7Sopenharmony_ci go: function go(input, stateMachine) { 104e5c31af7Sopenharmony_ci if (!input) { 105e5c31af7Sopenharmony_ci return []; 106e5c31af7Sopenharmony_ci } 107e5c31af7Sopenharmony_ci 108e5c31af7Sopenharmony_ci if (stateMachine === undefined) { 109e5c31af7Sopenharmony_ci stateMachine = 'ce'; 110e5c31af7Sopenharmony_ci } 111e5c31af7Sopenharmony_ci 112e5c31af7Sopenharmony_ci var state = '0'; // 113e5c31af7Sopenharmony_ci // String buffers for parsing: 114e5c31af7Sopenharmony_ci // 115e5c31af7Sopenharmony_ci // buffer.a == amount 116e5c31af7Sopenharmony_ci // buffer.o == element 117e5c31af7Sopenharmony_ci // buffer.b == left-side superscript 118e5c31af7Sopenharmony_ci // buffer.p == left-side subscript 119e5c31af7Sopenharmony_ci // buffer.q == right-side subscript 120e5c31af7Sopenharmony_ci // buffer.d == right-side superscript 121e5c31af7Sopenharmony_ci // 122e5c31af7Sopenharmony_ci // buffer.r == arrow 123e5c31af7Sopenharmony_ci // buffer.rdt == arrow, script above, type 124e5c31af7Sopenharmony_ci // buffer.rd == arrow, script above, content 125e5c31af7Sopenharmony_ci // buffer.rqt == arrow, script below, type 126e5c31af7Sopenharmony_ci // buffer.rq == arrow, script below, content 127e5c31af7Sopenharmony_ci // 128e5c31af7Sopenharmony_ci // buffer.text_ 129e5c31af7Sopenharmony_ci // buffer.rm 130e5c31af7Sopenharmony_ci // etc. 131e5c31af7Sopenharmony_ci // 132e5c31af7Sopenharmony_ci // buffer.parenthesisLevel == int, starting at 0 133e5c31af7Sopenharmony_ci // buffer.sb == bool, space before 134e5c31af7Sopenharmony_ci // buffer.beginsWithBond == bool 135e5c31af7Sopenharmony_ci // 136e5c31af7Sopenharmony_ci // These letters are also used as state names. 137e5c31af7Sopenharmony_ci // 138e5c31af7Sopenharmony_ci // Other states: 139e5c31af7Sopenharmony_ci // 0 == begin of main part (arrow/operator unlikely) 140e5c31af7Sopenharmony_ci // 1 == next entity 141e5c31af7Sopenharmony_ci // 2 == next entity (arrow/operator unlikely) 142e5c31af7Sopenharmony_ci // 3 == next atom 143e5c31af7Sopenharmony_ci // c == macro 144e5c31af7Sopenharmony_ci // 145e5c31af7Sopenharmony_ci 146e5c31af7Sopenharmony_ci /** @type {Buffer} */ 147e5c31af7Sopenharmony_ci 148e5c31af7Sopenharmony_ci var buffer = {}; 149e5c31af7Sopenharmony_ci buffer['parenthesisLevel'] = 0; 150e5c31af7Sopenharmony_ci input = input.replace(/\n/g, " "); 151e5c31af7Sopenharmony_ci input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); 152e5c31af7Sopenharmony_ci input = input.replace(/[\u2026]/g, "..."); // 153e5c31af7Sopenharmony_ci // Looks through mhchemParser.transitions, to execute a matching action 154e5c31af7Sopenharmony_ci // (recursive) 155e5c31af7Sopenharmony_ci // 156e5c31af7Sopenharmony_ci 157e5c31af7Sopenharmony_ci var lastInput; 158e5c31af7Sopenharmony_ci var watchdog = 10; 159e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 160e5c31af7Sopenharmony_ci 161e5c31af7Sopenharmony_ci var output = []; 162e5c31af7Sopenharmony_ci 163e5c31af7Sopenharmony_ci while (true) { 164e5c31af7Sopenharmony_ci if (lastInput !== input) { 165e5c31af7Sopenharmony_ci watchdog = 10; 166e5c31af7Sopenharmony_ci lastInput = input; 167e5c31af7Sopenharmony_ci } else { 168e5c31af7Sopenharmony_ci watchdog--; 169e5c31af7Sopenharmony_ci } // 170e5c31af7Sopenharmony_ci // Find actions in transition table 171e5c31af7Sopenharmony_ci // 172e5c31af7Sopenharmony_ci 173e5c31af7Sopenharmony_ci 174e5c31af7Sopenharmony_ci var machine = mhchemParser.stateMachines[stateMachine]; 175e5c31af7Sopenharmony_ci var t = machine.transitions[state] || machine.transitions['*']; 176e5c31af7Sopenharmony_ci 177e5c31af7Sopenharmony_ci iterateTransitions: for (var i = 0; i < t.length; i++) { 178e5c31af7Sopenharmony_ci var matches = mhchemParser.patterns.match_(t[i].pattern, input); 179e5c31af7Sopenharmony_ci 180e5c31af7Sopenharmony_ci if (matches) { 181e5c31af7Sopenharmony_ci // 182e5c31af7Sopenharmony_ci // Execute actions 183e5c31af7Sopenharmony_ci // 184e5c31af7Sopenharmony_ci var task = t[i].task; 185e5c31af7Sopenharmony_ci 186e5c31af7Sopenharmony_ci for (var iA = 0; iA < task.action_.length; iA++) { 187e5c31af7Sopenharmony_ci var o; // 188e5c31af7Sopenharmony_ci // Find and execute action 189e5c31af7Sopenharmony_ci // 190e5c31af7Sopenharmony_ci 191e5c31af7Sopenharmony_ci if (machine.actions[task.action_[iA].type_]) { 192e5c31af7Sopenharmony_ci o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); 193e5c31af7Sopenharmony_ci } else if (mhchemParser.actions[task.action_[iA].type_]) { 194e5c31af7Sopenharmony_ci o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); 195e5c31af7Sopenharmony_ci } else { 196e5c31af7Sopenharmony_ci throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action 197e5c31af7Sopenharmony_ci } // 198e5c31af7Sopenharmony_ci // Add output 199e5c31af7Sopenharmony_ci // 200e5c31af7Sopenharmony_ci 201e5c31af7Sopenharmony_ci 202e5c31af7Sopenharmony_ci mhchemParser.concatArray(output, o); 203e5c31af7Sopenharmony_ci } // 204e5c31af7Sopenharmony_ci // Set next state, 205e5c31af7Sopenharmony_ci // Shorten input, 206e5c31af7Sopenharmony_ci // Continue with next character 207e5c31af7Sopenharmony_ci // (= apply only one transition per position) 208e5c31af7Sopenharmony_ci // 209e5c31af7Sopenharmony_ci 210e5c31af7Sopenharmony_ci 211e5c31af7Sopenharmony_ci state = task.nextState || state; 212e5c31af7Sopenharmony_ci 213e5c31af7Sopenharmony_ci if (input.length > 0) { 214e5c31af7Sopenharmony_ci if (!task.revisit) { 215e5c31af7Sopenharmony_ci input = matches.remainder; 216e5c31af7Sopenharmony_ci } 217e5c31af7Sopenharmony_ci 218e5c31af7Sopenharmony_ci if (!task.toContinue) { 219e5c31af7Sopenharmony_ci break iterateTransitions; 220e5c31af7Sopenharmony_ci } 221e5c31af7Sopenharmony_ci } else { 222e5c31af7Sopenharmony_ci return output; 223e5c31af7Sopenharmony_ci } 224e5c31af7Sopenharmony_ci } 225e5c31af7Sopenharmony_ci } // 226e5c31af7Sopenharmony_ci // Prevent infinite loop 227e5c31af7Sopenharmony_ci // 228e5c31af7Sopenharmony_ci 229e5c31af7Sopenharmony_ci 230e5c31af7Sopenharmony_ci if (watchdog <= 0) { 231e5c31af7Sopenharmony_ci throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character 232e5c31af7Sopenharmony_ci } 233e5c31af7Sopenharmony_ci } 234e5c31af7Sopenharmony_ci }, 235e5c31af7Sopenharmony_ci concatArray: function concatArray(a, b) { 236e5c31af7Sopenharmony_ci if (b) { 237e5c31af7Sopenharmony_ci if (Array.isArray(b)) { 238e5c31af7Sopenharmony_ci for (var iB = 0; iB < b.length; iB++) { 239e5c31af7Sopenharmony_ci a.push(b[iB]); 240e5c31af7Sopenharmony_ci } 241e5c31af7Sopenharmony_ci } else { 242e5c31af7Sopenharmony_ci a.push(b); 243e5c31af7Sopenharmony_ci } 244e5c31af7Sopenharmony_ci } 245e5c31af7Sopenharmony_ci }, 246e5c31af7Sopenharmony_ci patterns: { 247e5c31af7Sopenharmony_ci // 248e5c31af7Sopenharmony_ci // Matching patterns 249e5c31af7Sopenharmony_ci // either regexps or function that return null or {match_:"a", remainder:"bc"} 250e5c31af7Sopenharmony_ci // 251e5c31af7Sopenharmony_ci patterns: { 252e5c31af7Sopenharmony_ci // property names must not look like integers ("2") for correct property traversal order, later on 253e5c31af7Sopenharmony_ci 'empty': /^$/, 254e5c31af7Sopenharmony_ci 'else': /^./, 255e5c31af7Sopenharmony_ci 'else2': /^./, 256e5c31af7Sopenharmony_ci 'space': /^\s/, 257e5c31af7Sopenharmony_ci 'space A': /^\s(?=[A-Z\\$])/, 258e5c31af7Sopenharmony_ci 'space$': /^\s$/, 259e5c31af7Sopenharmony_ci 'a-z': /^[a-z]/, 260e5c31af7Sopenharmony_ci 'x': /^x/, 261e5c31af7Sopenharmony_ci 'x$': /^x$/, 262e5c31af7Sopenharmony_ci 'i$': /^i$/, 263e5c31af7Sopenharmony_ci 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, 264e5c31af7Sopenharmony_ci '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, 265e5c31af7Sopenharmony_ci 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, 266e5c31af7Sopenharmony_ci '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, 267e5c31af7Sopenharmony_ci 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, 268e5c31af7Sopenharmony_ci 'digits': /^[0-9]+/, 269e5c31af7Sopenharmony_ci '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, 270e5c31af7Sopenharmony_ci '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, 271e5c31af7Sopenharmony_ci '(-)(9.,9)(e)(99)': function e99(input) { 272e5c31af7Sopenharmony_ci var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); 273e5c31af7Sopenharmony_ci 274e5c31af7Sopenharmony_ci if (m && m[0]) { 275e5c31af7Sopenharmony_ci return { 276e5c31af7Sopenharmony_ci match_: m.splice(1), 277e5c31af7Sopenharmony_ci remainder: input.substr(m[0].length) 278e5c31af7Sopenharmony_ci }; 279e5c31af7Sopenharmony_ci } 280e5c31af7Sopenharmony_ci 281e5c31af7Sopenharmony_ci return null; 282e5c31af7Sopenharmony_ci }, 283e5c31af7Sopenharmony_ci '(-)(9)^(-9)': function _(input) { 284e5c31af7Sopenharmony_ci var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); 285e5c31af7Sopenharmony_ci 286e5c31af7Sopenharmony_ci if (m && m[0]) { 287e5c31af7Sopenharmony_ci return { 288e5c31af7Sopenharmony_ci match_: m.splice(1), 289e5c31af7Sopenharmony_ci remainder: input.substr(m[0].length) 290e5c31af7Sopenharmony_ci }; 291e5c31af7Sopenharmony_ci } 292e5c31af7Sopenharmony_ci 293e5c31af7Sopenharmony_ci return null; 294e5c31af7Sopenharmony_ci }, 295e5c31af7Sopenharmony_ci 'state of aggregation $': function stateOfAggregation$(input) { 296e5c31af7Sopenharmony_ci // ... or crystal system 297e5c31af7Sopenharmony_ci var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) 298e5c31af7Sopenharmony_ci 299e5c31af7Sopenharmony_ci if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { 300e5c31af7Sopenharmony_ci return a; 301e5c31af7Sopenharmony_ci } // AND end of 'phrase' 302e5c31af7Sopenharmony_ci 303e5c31af7Sopenharmony_ci 304e5c31af7Sopenharmony_ci var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) 305e5c31af7Sopenharmony_ci 306e5c31af7Sopenharmony_ci if (m) { 307e5c31af7Sopenharmony_ci return { 308e5c31af7Sopenharmony_ci match_: m[0], 309e5c31af7Sopenharmony_ci remainder: input.substr(m[0].length) 310e5c31af7Sopenharmony_ci }; 311e5c31af7Sopenharmony_ci } 312e5c31af7Sopenharmony_ci 313e5c31af7Sopenharmony_ci return null; 314e5c31af7Sopenharmony_ci }, 315e5c31af7Sopenharmony_ci '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, 316e5c31af7Sopenharmony_ci '{[(': /^(?:\\\{|\[|\()/, 317e5c31af7Sopenharmony_ci ')]}': /^(?:\)|\]|\\\})/, 318e5c31af7Sopenharmony_ci ', ': /^[,;]\s*/, 319e5c31af7Sopenharmony_ci ',': /^[,;]/, 320e5c31af7Sopenharmony_ci '.': /^[.]/, 321e5c31af7Sopenharmony_ci '. ': /^([.\u22C5\u00B7\u2022])\s*/, 322e5c31af7Sopenharmony_ci '...': /^\.\.\.(?=$|[^.])/, 323e5c31af7Sopenharmony_ci '* ': /^([*])\s*/, 324e5c31af7Sopenharmony_ci '^{(...)}': function _(input) { 325e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}"); 326e5c31af7Sopenharmony_ci }, 327e5c31af7Sopenharmony_ci '^($...$)': function $$(input) { 328e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", ""); 329e5c31af7Sopenharmony_ci }, 330e5c31af7Sopenharmony_ci '^a': /^\^([0-9]+|[^\\_])/, 331e5c31af7Sopenharmony_ci '^\\x{}{}': function x(input) { 332e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); 333e5c31af7Sopenharmony_ci }, 334e5c31af7Sopenharmony_ci '^\\x{}': function x(input) { 335e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", ""); 336e5c31af7Sopenharmony_ci }, 337e5c31af7Sopenharmony_ci '^\\x': /^\^(\\[a-zA-Z]+)\s*/, 338e5c31af7Sopenharmony_ci '^(-1)': /^\^(-?\d+)/, 339e5c31af7Sopenharmony_ci '\'': /^'/, 340e5c31af7Sopenharmony_ci '_{(...)}': function _(input) { 341e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}"); 342e5c31af7Sopenharmony_ci }, 343e5c31af7Sopenharmony_ci '_($...$)': function _$$(input) { 344e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", ""); 345e5c31af7Sopenharmony_ci }, 346e5c31af7Sopenharmony_ci '_9': /^_([+\-]?[0-9]+|[^\\])/, 347e5c31af7Sopenharmony_ci '_\\x{}{}': function _X(input) { 348e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); 349e5c31af7Sopenharmony_ci }, 350e5c31af7Sopenharmony_ci '_\\x{}': function _X(input) { 351e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", ""); 352e5c31af7Sopenharmony_ci }, 353e5c31af7Sopenharmony_ci '_\\x': /^_(\\[a-zA-Z]+)\s*/, 354e5c31af7Sopenharmony_ci '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, 355e5c31af7Sopenharmony_ci '{}': /^\{\}/, 356e5c31af7Sopenharmony_ci '{...}': function _(input) { 357e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); 358e5c31af7Sopenharmony_ci }, 359e5c31af7Sopenharmony_ci '{(...)}': function _(input) { 360e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); 361e5c31af7Sopenharmony_ci }, 362e5c31af7Sopenharmony_ci '$...$': function $$(input) { 363e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); 364e5c31af7Sopenharmony_ci }, 365e5c31af7Sopenharmony_ci '${(...)}$': function $$(input) { 366e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$"); 367e5c31af7Sopenharmony_ci }, 368e5c31af7Sopenharmony_ci '$(...)$': function $$(input) { 369e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); 370e5c31af7Sopenharmony_ci }, 371e5c31af7Sopenharmony_ci '=<>': /^[=<>]/, 372e5c31af7Sopenharmony_ci '#': /^[#\u2261]/, 373e5c31af7Sopenharmony_ci '+': /^\+/, 374e5c31af7Sopenharmony_ci '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, 375e5c31af7Sopenharmony_ci // -space -, -; -] -/ -$ -state-of-aggregation 376e5c31af7Sopenharmony_ci '-9': /^-(?=[0-9])/, 377e5c31af7Sopenharmony_ci '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, 378e5c31af7Sopenharmony_ci '-': /^-/, 379e5c31af7Sopenharmony_ci 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, 380e5c31af7Sopenharmony_ci 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, 381e5c31af7Sopenharmony_ci 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, 382e5c31af7Sopenharmony_ci '\\bond{(...)}': function bond(input) { 383e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}"); 384e5c31af7Sopenharmony_ci }, 385e5c31af7Sopenharmony_ci '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, 386e5c31af7Sopenharmony_ci 'CMT': /^[CMT](?=\[)/, 387e5c31af7Sopenharmony_ci '[(...)]': function _(input) { 388e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); 389e5c31af7Sopenharmony_ci }, 390e5c31af7Sopenharmony_ci '1st-level escape': /^(&|\\\\|\\hline)\s*/, 391e5c31af7Sopenharmony_ci '\\,': /^(?:\\[,\ ;:])/, 392e5c31af7Sopenharmony_ci // \\x - but output no space before 393e5c31af7Sopenharmony_ci '\\x{}{}': function x(input) { 394e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); 395e5c31af7Sopenharmony_ci }, 396e5c31af7Sopenharmony_ci '\\x{}': function x(input) { 397e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", ""); 398e5c31af7Sopenharmony_ci }, 399e5c31af7Sopenharmony_ci '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, 400e5c31af7Sopenharmony_ci '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, 401e5c31af7Sopenharmony_ci 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, 402e5c31af7Sopenharmony_ci // only those with numbers in front, because the others will be formatted correctly anyway 403e5c31af7Sopenharmony_ci 'others': /^[\/~|]/, 404e5c31af7Sopenharmony_ci '\\frac{(...)}': function frac(input) { 405e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}"); 406e5c31af7Sopenharmony_ci }, 407e5c31af7Sopenharmony_ci '\\overset{(...)}': function overset(input) { 408e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}"); 409e5c31af7Sopenharmony_ci }, 410e5c31af7Sopenharmony_ci '\\underset{(...)}': function underset(input) { 411e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}"); 412e5c31af7Sopenharmony_ci }, 413e5c31af7Sopenharmony_ci '\\underbrace{(...)}': function underbrace(input) { 414e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); 415e5c31af7Sopenharmony_ci }, 416e5c31af7Sopenharmony_ci '\\color{(...)}0': function color0(input) { 417e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}"); 418e5c31af7Sopenharmony_ci }, 419e5c31af7Sopenharmony_ci '\\color{(...)}{(...)}1': function color1(input) { 420e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}"); 421e5c31af7Sopenharmony_ci }, 422e5c31af7Sopenharmony_ci '\\color(...){(...)}2': function color2(input) { 423e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); 424e5c31af7Sopenharmony_ci }, 425e5c31af7Sopenharmony_ci '\\ce{(...)}': function ce(input) { 426e5c31af7Sopenharmony_ci return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}"); 427e5c31af7Sopenharmony_ci }, 428e5c31af7Sopenharmony_ci 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, 429e5c31af7Sopenharmony_ci 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, 430e5c31af7Sopenharmony_ci // 0 could be oxidation or charge 431e5c31af7Sopenharmony_ci 'roman numeral': /^[IVX]+/, 432e5c31af7Sopenharmony_ci '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, 433e5c31af7Sopenharmony_ci 'amount': function amount(input) { 434e5c31af7Sopenharmony_ci var match; // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing 435e5c31af7Sopenharmony_ci 436e5c31af7Sopenharmony_ci match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); 437e5c31af7Sopenharmony_ci 438e5c31af7Sopenharmony_ci if (match) { 439e5c31af7Sopenharmony_ci return { 440e5c31af7Sopenharmony_ci match_: match[0], 441e5c31af7Sopenharmony_ci remainder: input.substr(match[0].length) 442e5c31af7Sopenharmony_ci }; 443e5c31af7Sopenharmony_ci } 444e5c31af7Sopenharmony_ci 445e5c31af7Sopenharmony_ci var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); 446e5c31af7Sopenharmony_ci 447e5c31af7Sopenharmony_ci if (a) { 448e5c31af7Sopenharmony_ci // e.g. $2n-1$, $-$ 449e5c31af7Sopenharmony_ci match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); 450e5c31af7Sopenharmony_ci 451e5c31af7Sopenharmony_ci if (match) { 452e5c31af7Sopenharmony_ci return { 453e5c31af7Sopenharmony_ci match_: match[0], 454e5c31af7Sopenharmony_ci remainder: input.substr(match[0].length) 455e5c31af7Sopenharmony_ci }; 456e5c31af7Sopenharmony_ci } 457e5c31af7Sopenharmony_ci } 458e5c31af7Sopenharmony_ci 459e5c31af7Sopenharmony_ci return null; 460e5c31af7Sopenharmony_ci }, 461e5c31af7Sopenharmony_ci 'amount2': function amount2(input) { 462e5c31af7Sopenharmony_ci return this['amount'](input); 463e5c31af7Sopenharmony_ci }, 464e5c31af7Sopenharmony_ci '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, 465e5c31af7Sopenharmony_ci 'formula$': function formula$(input) { 466e5c31af7Sopenharmony_ci if (input.match(/^\([a-z]+\)$/)) { 467e5c31af7Sopenharmony_ci return null; 468e5c31af7Sopenharmony_ci } // state of aggregation = no formula 469e5c31af7Sopenharmony_ci 470e5c31af7Sopenharmony_ci 471e5c31af7Sopenharmony_ci var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); 472e5c31af7Sopenharmony_ci 473e5c31af7Sopenharmony_ci if (match) { 474e5c31af7Sopenharmony_ci return { 475e5c31af7Sopenharmony_ci match_: match[0], 476e5c31af7Sopenharmony_ci remainder: input.substr(match[0].length) 477e5c31af7Sopenharmony_ci }; 478e5c31af7Sopenharmony_ci } 479e5c31af7Sopenharmony_ci 480e5c31af7Sopenharmony_ci return null; 481e5c31af7Sopenharmony_ci }, 482e5c31af7Sopenharmony_ci 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, 483e5c31af7Sopenharmony_ci '/': /^\s*(\/)\s*/, 484e5c31af7Sopenharmony_ci '//': /^\s*(\/\/)\s*/, 485e5c31af7Sopenharmony_ci '*': /^\s*[*.]\s*/ 486e5c31af7Sopenharmony_ci }, 487e5c31af7Sopenharmony_ci findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { 488e5c31af7Sopenharmony_ci /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */ 489e5c31af7Sopenharmony_ci var _match = function _match(input, pattern) { 490e5c31af7Sopenharmony_ci if (typeof pattern === "string") { 491e5c31af7Sopenharmony_ci if (input.indexOf(pattern) !== 0) { 492e5c31af7Sopenharmony_ci return null; 493e5c31af7Sopenharmony_ci } 494e5c31af7Sopenharmony_ci 495e5c31af7Sopenharmony_ci return pattern; 496e5c31af7Sopenharmony_ci } else { 497e5c31af7Sopenharmony_ci var match = input.match(pattern); 498e5c31af7Sopenharmony_ci 499e5c31af7Sopenharmony_ci if (!match) { 500e5c31af7Sopenharmony_ci return null; 501e5c31af7Sopenharmony_ci } 502e5c31af7Sopenharmony_ci 503e5c31af7Sopenharmony_ci return match[0]; 504e5c31af7Sopenharmony_ci } 505e5c31af7Sopenharmony_ci }; 506e5c31af7Sopenharmony_ci /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */ 507e5c31af7Sopenharmony_ci 508e5c31af7Sopenharmony_ci 509e5c31af7Sopenharmony_ci var _findObserveGroups = function _findObserveGroups(input, i, endChars) { 510e5c31af7Sopenharmony_ci var braces = 0; 511e5c31af7Sopenharmony_ci 512e5c31af7Sopenharmony_ci while (i < input.length) { 513e5c31af7Sopenharmony_ci var a = input.charAt(i); 514e5c31af7Sopenharmony_ci 515e5c31af7Sopenharmony_ci var match = _match(input.substr(i), endChars); 516e5c31af7Sopenharmony_ci 517e5c31af7Sopenharmony_ci if (match !== null && braces === 0) { 518e5c31af7Sopenharmony_ci return { 519e5c31af7Sopenharmony_ci endMatchBegin: i, 520e5c31af7Sopenharmony_ci endMatchEnd: i + match.length 521e5c31af7Sopenharmony_ci }; 522e5c31af7Sopenharmony_ci } else if (a === "{") { 523e5c31af7Sopenharmony_ci braces++; 524e5c31af7Sopenharmony_ci } else if (a === "}") { 525e5c31af7Sopenharmony_ci if (braces === 0) { 526e5c31af7Sopenharmony_ci throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; 527e5c31af7Sopenharmony_ci } else { 528e5c31af7Sopenharmony_ci braces--; 529e5c31af7Sopenharmony_ci } 530e5c31af7Sopenharmony_ci } 531e5c31af7Sopenharmony_ci 532e5c31af7Sopenharmony_ci i++; 533e5c31af7Sopenharmony_ci } 534e5c31af7Sopenharmony_ci 535e5c31af7Sopenharmony_ci if (braces > 0) { 536e5c31af7Sopenharmony_ci return null; 537e5c31af7Sopenharmony_ci } 538e5c31af7Sopenharmony_ci 539e5c31af7Sopenharmony_ci return null; 540e5c31af7Sopenharmony_ci }; 541e5c31af7Sopenharmony_ci 542e5c31af7Sopenharmony_ci var match = _match(input, begExcl); 543e5c31af7Sopenharmony_ci 544e5c31af7Sopenharmony_ci if (match === null) { 545e5c31af7Sopenharmony_ci return null; 546e5c31af7Sopenharmony_ci } 547e5c31af7Sopenharmony_ci 548e5c31af7Sopenharmony_ci input = input.substr(match.length); 549e5c31af7Sopenharmony_ci match = _match(input, begIncl); 550e5c31af7Sopenharmony_ci 551e5c31af7Sopenharmony_ci if (match === null) { 552e5c31af7Sopenharmony_ci return null; 553e5c31af7Sopenharmony_ci } 554e5c31af7Sopenharmony_ci 555e5c31af7Sopenharmony_ci var e = _findObserveGroups(input, match.length, endIncl || endExcl); 556e5c31af7Sopenharmony_ci 557e5c31af7Sopenharmony_ci if (e === null) { 558e5c31af7Sopenharmony_ci return null; 559e5c31af7Sopenharmony_ci } 560e5c31af7Sopenharmony_ci 561e5c31af7Sopenharmony_ci var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin); 562e5c31af7Sopenharmony_ci 563e5c31af7Sopenharmony_ci if (!(beg2Excl || beg2Incl)) { 564e5c31af7Sopenharmony_ci return { 565e5c31af7Sopenharmony_ci match_: match1, 566e5c31af7Sopenharmony_ci remainder: input.substr(e.endMatchEnd) 567e5c31af7Sopenharmony_ci }; 568e5c31af7Sopenharmony_ci } else { 569e5c31af7Sopenharmony_ci var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); 570e5c31af7Sopenharmony_ci 571e5c31af7Sopenharmony_ci if (group2 === null) { 572e5c31af7Sopenharmony_ci return null; 573e5c31af7Sopenharmony_ci } 574e5c31af7Sopenharmony_ci /** @type {string[]} */ 575e5c31af7Sopenharmony_ci 576e5c31af7Sopenharmony_ci 577e5c31af7Sopenharmony_ci var matchRet = [match1, group2.match_]; 578e5c31af7Sopenharmony_ci return { 579e5c31af7Sopenharmony_ci match_: combine ? matchRet.join("") : matchRet, 580e5c31af7Sopenharmony_ci remainder: group2.remainder 581e5c31af7Sopenharmony_ci }; 582e5c31af7Sopenharmony_ci } 583e5c31af7Sopenharmony_ci }, 584e5c31af7Sopenharmony_ci // 585e5c31af7Sopenharmony_ci // Matching function 586e5c31af7Sopenharmony_ci // e.g. match("a", input) will look for the regexp called "a" and see if it matches 587e5c31af7Sopenharmony_ci // returns null or {match_:"a", remainder:"bc"} 588e5c31af7Sopenharmony_ci // 589e5c31af7Sopenharmony_ci match_: function match_(m, input) { 590e5c31af7Sopenharmony_ci var pattern = mhchemParser.patterns.patterns[m]; 591e5c31af7Sopenharmony_ci 592e5c31af7Sopenharmony_ci if (pattern === undefined) { 593e5c31af7Sopenharmony_ci throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern 594e5c31af7Sopenharmony_ci } else if (typeof pattern === "function") { 595e5c31af7Sopenharmony_ci return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser 596e5c31af7Sopenharmony_ci } else { 597e5c31af7Sopenharmony_ci // RegExp 598e5c31af7Sopenharmony_ci var match = input.match(pattern); 599e5c31af7Sopenharmony_ci 600e5c31af7Sopenharmony_ci if (match) { 601e5c31af7Sopenharmony_ci var mm; 602e5c31af7Sopenharmony_ci 603e5c31af7Sopenharmony_ci if (match[2]) { 604e5c31af7Sopenharmony_ci mm = [match[1], match[2]]; 605e5c31af7Sopenharmony_ci } else if (match[1]) { 606e5c31af7Sopenharmony_ci mm = match[1]; 607e5c31af7Sopenharmony_ci } else { 608e5c31af7Sopenharmony_ci mm = match[0]; 609e5c31af7Sopenharmony_ci } 610e5c31af7Sopenharmony_ci 611e5c31af7Sopenharmony_ci return { 612e5c31af7Sopenharmony_ci match_: mm, 613e5c31af7Sopenharmony_ci remainder: input.substr(match[0].length) 614e5c31af7Sopenharmony_ci }; 615e5c31af7Sopenharmony_ci } 616e5c31af7Sopenharmony_ci 617e5c31af7Sopenharmony_ci return null; 618e5c31af7Sopenharmony_ci } 619e5c31af7Sopenharmony_ci } 620e5c31af7Sopenharmony_ci }, 621e5c31af7Sopenharmony_ci // 622e5c31af7Sopenharmony_ci // Generic state machine actions 623e5c31af7Sopenharmony_ci // 624e5c31af7Sopenharmony_ci actions: { 625e5c31af7Sopenharmony_ci 'a=': function a(buffer, m) { 626e5c31af7Sopenharmony_ci buffer.a = (buffer.a || "") + m; 627e5c31af7Sopenharmony_ci }, 628e5c31af7Sopenharmony_ci 'b=': function b(buffer, m) { 629e5c31af7Sopenharmony_ci buffer.b = (buffer.b || "") + m; 630e5c31af7Sopenharmony_ci }, 631e5c31af7Sopenharmony_ci 'p=': function p(buffer, m) { 632e5c31af7Sopenharmony_ci buffer.p = (buffer.p || "") + m; 633e5c31af7Sopenharmony_ci }, 634e5c31af7Sopenharmony_ci 'o=': function o(buffer, m) { 635e5c31af7Sopenharmony_ci buffer.o = (buffer.o || "") + m; 636e5c31af7Sopenharmony_ci }, 637e5c31af7Sopenharmony_ci 'q=': function q(buffer, m) { 638e5c31af7Sopenharmony_ci buffer.q = (buffer.q || "") + m; 639e5c31af7Sopenharmony_ci }, 640e5c31af7Sopenharmony_ci 'd=': function d(buffer, m) { 641e5c31af7Sopenharmony_ci buffer.d = (buffer.d || "") + m; 642e5c31af7Sopenharmony_ci }, 643e5c31af7Sopenharmony_ci 'rm=': function rm(buffer, m) { 644e5c31af7Sopenharmony_ci buffer.rm = (buffer.rm || "") + m; 645e5c31af7Sopenharmony_ci }, 646e5c31af7Sopenharmony_ci 'text=': function text(buffer, m) { 647e5c31af7Sopenharmony_ci buffer.text_ = (buffer.text_ || "") + m; 648e5c31af7Sopenharmony_ci }, 649e5c31af7Sopenharmony_ci 'insert': function insert(buffer, m, a) { 650e5c31af7Sopenharmony_ci return { 651e5c31af7Sopenharmony_ci type_: a 652e5c31af7Sopenharmony_ci }; 653e5c31af7Sopenharmony_ci }, 654e5c31af7Sopenharmony_ci 'insert+p1': function insertP1(buffer, m, a) { 655e5c31af7Sopenharmony_ci return { 656e5c31af7Sopenharmony_ci type_: a, 657e5c31af7Sopenharmony_ci p1: m 658e5c31af7Sopenharmony_ci }; 659e5c31af7Sopenharmony_ci }, 660e5c31af7Sopenharmony_ci 'insert+p1+p2': function insertP1P2(buffer, m, a) { 661e5c31af7Sopenharmony_ci return { 662e5c31af7Sopenharmony_ci type_: a, 663e5c31af7Sopenharmony_ci p1: m[0], 664e5c31af7Sopenharmony_ci p2: m[1] 665e5c31af7Sopenharmony_ci }; 666e5c31af7Sopenharmony_ci }, 667e5c31af7Sopenharmony_ci 'copy': function copy(buffer, m) { 668e5c31af7Sopenharmony_ci return m; 669e5c31af7Sopenharmony_ci }, 670e5c31af7Sopenharmony_ci 'rm': function rm(buffer, m) { 671e5c31af7Sopenharmony_ci return { 672e5c31af7Sopenharmony_ci type_: 'rm', 673e5c31af7Sopenharmony_ci p1: m || "" 674e5c31af7Sopenharmony_ci }; 675e5c31af7Sopenharmony_ci }, 676e5c31af7Sopenharmony_ci 'text': function text(buffer, m) { 677e5c31af7Sopenharmony_ci return mhchemParser.go(m, 'text'); 678e5c31af7Sopenharmony_ci }, 679e5c31af7Sopenharmony_ci '{text}': function text(buffer, m) { 680e5c31af7Sopenharmony_ci var ret = ["{"]; 681e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.go(m, 'text')); 682e5c31af7Sopenharmony_ci ret.push("}"); 683e5c31af7Sopenharmony_ci return ret; 684e5c31af7Sopenharmony_ci }, 685e5c31af7Sopenharmony_ci 'tex-math': function texMath(buffer, m) { 686e5c31af7Sopenharmony_ci return mhchemParser.go(m, 'tex-math'); 687e5c31af7Sopenharmony_ci }, 688e5c31af7Sopenharmony_ci 'tex-math tight': function texMathTight(buffer, m) { 689e5c31af7Sopenharmony_ci return mhchemParser.go(m, 'tex-math tight'); 690e5c31af7Sopenharmony_ci }, 691e5c31af7Sopenharmony_ci 'bond': function bond(buffer, m, k) { 692e5c31af7Sopenharmony_ci return { 693e5c31af7Sopenharmony_ci type_: 'bond', 694e5c31af7Sopenharmony_ci kind_: k || m 695e5c31af7Sopenharmony_ci }; 696e5c31af7Sopenharmony_ci }, 697e5c31af7Sopenharmony_ci 'color0-output': function color0Output(buffer, m) { 698e5c31af7Sopenharmony_ci return { 699e5c31af7Sopenharmony_ci type_: 'color0', 700e5c31af7Sopenharmony_ci color: m[0] 701e5c31af7Sopenharmony_ci }; 702e5c31af7Sopenharmony_ci }, 703e5c31af7Sopenharmony_ci 'ce': function ce(buffer, m) { 704e5c31af7Sopenharmony_ci return mhchemParser.go(m); 705e5c31af7Sopenharmony_ci }, 706e5c31af7Sopenharmony_ci '1/2': function _(buffer, m) { 707e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 708e5c31af7Sopenharmony_ci var ret = []; 709e5c31af7Sopenharmony_ci 710e5c31af7Sopenharmony_ci if (m.match(/^[+\-]/)) { 711e5c31af7Sopenharmony_ci ret.push(m.substr(0, 1)); 712e5c31af7Sopenharmony_ci m = m.substr(1); 713e5c31af7Sopenharmony_ci } 714e5c31af7Sopenharmony_ci 715e5c31af7Sopenharmony_ci var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); 716e5c31af7Sopenharmony_ci n[1] = n[1].replace(/\$/g, ""); 717e5c31af7Sopenharmony_ci ret.push({ 718e5c31af7Sopenharmony_ci type_: 'frac', 719e5c31af7Sopenharmony_ci p1: n[1], 720e5c31af7Sopenharmony_ci p2: n[2] 721e5c31af7Sopenharmony_ci }); 722e5c31af7Sopenharmony_ci 723e5c31af7Sopenharmony_ci if (n[3]) { 724e5c31af7Sopenharmony_ci n[3] = n[3].replace(/\$/g, ""); 725e5c31af7Sopenharmony_ci ret.push({ 726e5c31af7Sopenharmony_ci type_: 'tex-math', 727e5c31af7Sopenharmony_ci p1: n[3] 728e5c31af7Sopenharmony_ci }); 729e5c31af7Sopenharmony_ci } 730e5c31af7Sopenharmony_ci 731e5c31af7Sopenharmony_ci return ret; 732e5c31af7Sopenharmony_ci }, 733e5c31af7Sopenharmony_ci '9,9': function _(buffer, m) { 734e5c31af7Sopenharmony_ci return mhchemParser.go(m, '9,9'); 735e5c31af7Sopenharmony_ci } 736e5c31af7Sopenharmony_ci }, 737e5c31af7Sopenharmony_ci // 738e5c31af7Sopenharmony_ci // createTransitions 739e5c31af7Sopenharmony_ci // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } 740e5c31af7Sopenharmony_ci // with expansion of 'a|b' to 'a' and 'b' (at 2 places) 741e5c31af7Sopenharmony_ci // 742e5c31af7Sopenharmony_ci createTransitions: function createTransitions(o) { 743e5c31af7Sopenharmony_ci var pattern, state; 744e5c31af7Sopenharmony_ci /** @type {string[]} */ 745e5c31af7Sopenharmony_ci 746e5c31af7Sopenharmony_ci var stateArray; 747e5c31af7Sopenharmony_ci var i; // 748e5c31af7Sopenharmony_ci // 1. Collect all states 749e5c31af7Sopenharmony_ci // 750e5c31af7Sopenharmony_ci 751e5c31af7Sopenharmony_ci /** @type {Transitions} */ 752e5c31af7Sopenharmony_ci 753e5c31af7Sopenharmony_ci var transitions = {}; 754e5c31af7Sopenharmony_ci 755e5c31af7Sopenharmony_ci for (pattern in o) { 756e5c31af7Sopenharmony_ci for (state in o[pattern]) { 757e5c31af7Sopenharmony_ci stateArray = state.split("|"); 758e5c31af7Sopenharmony_ci o[pattern][state].stateArray = stateArray; 759e5c31af7Sopenharmony_ci 760e5c31af7Sopenharmony_ci for (i = 0; i < stateArray.length; i++) { 761e5c31af7Sopenharmony_ci transitions[stateArray[i]] = []; 762e5c31af7Sopenharmony_ci } 763e5c31af7Sopenharmony_ci } 764e5c31af7Sopenharmony_ci } // 765e5c31af7Sopenharmony_ci // 2. Fill states 766e5c31af7Sopenharmony_ci // 767e5c31af7Sopenharmony_ci 768e5c31af7Sopenharmony_ci 769e5c31af7Sopenharmony_ci for (pattern in o) { 770e5c31af7Sopenharmony_ci for (state in o[pattern]) { 771e5c31af7Sopenharmony_ci stateArray = o[pattern][state].stateArray || []; 772e5c31af7Sopenharmony_ci 773e5c31af7Sopenharmony_ci for (i = 0; i < stateArray.length; i++) { 774e5c31af7Sopenharmony_ci // 775e5c31af7Sopenharmony_ci // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}] 776e5c31af7Sopenharmony_ci // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).) 777e5c31af7Sopenharmony_ci // 778e5c31af7Sopenharmony_ci 779e5c31af7Sopenharmony_ci /** @type {any} */ 780e5c31af7Sopenharmony_ci var p = o[pattern][state]; 781e5c31af7Sopenharmony_ci 782e5c31af7Sopenharmony_ci if (p.action_) { 783e5c31af7Sopenharmony_ci p.action_ = [].concat(p.action_); 784e5c31af7Sopenharmony_ci 785e5c31af7Sopenharmony_ci for (var k = 0; k < p.action_.length; k++) { 786e5c31af7Sopenharmony_ci if (typeof p.action_[k] === "string") { 787e5c31af7Sopenharmony_ci p.action_[k] = { 788e5c31af7Sopenharmony_ci type_: p.action_[k] 789e5c31af7Sopenharmony_ci }; 790e5c31af7Sopenharmony_ci } 791e5c31af7Sopenharmony_ci } 792e5c31af7Sopenharmony_ci } else { 793e5c31af7Sopenharmony_ci p.action_ = []; 794e5c31af7Sopenharmony_ci } // 795e5c31af7Sopenharmony_ci // 2.b Multi-insert 796e5c31af7Sopenharmony_ci // 797e5c31af7Sopenharmony_ci 798e5c31af7Sopenharmony_ci 799e5c31af7Sopenharmony_ci var patternArray = pattern.split("|"); 800e5c31af7Sopenharmony_ci 801e5c31af7Sopenharmony_ci for (var j = 0; j < patternArray.length; j++) { 802e5c31af7Sopenharmony_ci if (stateArray[i] === '*') { 803e5c31af7Sopenharmony_ci // insert into all 804e5c31af7Sopenharmony_ci for (var t in transitions) { 805e5c31af7Sopenharmony_ci transitions[t].push({ 806e5c31af7Sopenharmony_ci pattern: patternArray[j], 807e5c31af7Sopenharmony_ci task: p 808e5c31af7Sopenharmony_ci }); 809e5c31af7Sopenharmony_ci } 810e5c31af7Sopenharmony_ci } else { 811e5c31af7Sopenharmony_ci transitions[stateArray[i]].push({ 812e5c31af7Sopenharmony_ci pattern: patternArray[j], 813e5c31af7Sopenharmony_ci task: p 814e5c31af7Sopenharmony_ci }); 815e5c31af7Sopenharmony_ci } 816e5c31af7Sopenharmony_ci } 817e5c31af7Sopenharmony_ci } 818e5c31af7Sopenharmony_ci } 819e5c31af7Sopenharmony_ci } 820e5c31af7Sopenharmony_ci 821e5c31af7Sopenharmony_ci return transitions; 822e5c31af7Sopenharmony_ci }, 823e5c31af7Sopenharmony_ci stateMachines: {} 824e5c31af7Sopenharmony_ci}; // 825e5c31af7Sopenharmony_ci// Definition of state machines 826e5c31af7Sopenharmony_ci// 827e5c31af7Sopenharmony_ci 828e5c31af7Sopenharmony_cimhchemParser.stateMachines = { 829e5c31af7Sopenharmony_ci // 830e5c31af7Sopenharmony_ci // \ce state machines 831e5c31af7Sopenharmony_ci // 832e5c31af7Sopenharmony_ci //#region ce 833e5c31af7Sopenharmony_ci 'ce': { 834e5c31af7Sopenharmony_ci // main parser 835e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 836e5c31af7Sopenharmony_ci 'empty': { 837e5c31af7Sopenharmony_ci '*': { 838e5c31af7Sopenharmony_ci action_: 'output' 839e5c31af7Sopenharmony_ci } 840e5c31af7Sopenharmony_ci }, 841e5c31af7Sopenharmony_ci 'else': { 842e5c31af7Sopenharmony_ci '0|1|2': { 843e5c31af7Sopenharmony_ci action_: 'beginsWithBond=false', 844e5c31af7Sopenharmony_ci revisit: true, 845e5c31af7Sopenharmony_ci toContinue: true 846e5c31af7Sopenharmony_ci } 847e5c31af7Sopenharmony_ci }, 848e5c31af7Sopenharmony_ci 'oxidation$': { 849e5c31af7Sopenharmony_ci '0': { 850e5c31af7Sopenharmony_ci action_: 'oxidation-output' 851e5c31af7Sopenharmony_ci } 852e5c31af7Sopenharmony_ci }, 853e5c31af7Sopenharmony_ci 'CMT': { 854e5c31af7Sopenharmony_ci 'r': { 855e5c31af7Sopenharmony_ci action_: 'rdt=', 856e5c31af7Sopenharmony_ci nextState: 'rt' 857e5c31af7Sopenharmony_ci }, 858e5c31af7Sopenharmony_ci 'rd': { 859e5c31af7Sopenharmony_ci action_: 'rqt=', 860e5c31af7Sopenharmony_ci nextState: 'rdt' 861e5c31af7Sopenharmony_ci } 862e5c31af7Sopenharmony_ci }, 863e5c31af7Sopenharmony_ci 'arrowUpDown': { 864e5c31af7Sopenharmony_ci '0|1|2|as': { 865e5c31af7Sopenharmony_ci action_: ['sb=false', 'output', 'operator'], 866e5c31af7Sopenharmony_ci nextState: '1' 867e5c31af7Sopenharmony_ci } 868e5c31af7Sopenharmony_ci }, 869e5c31af7Sopenharmony_ci 'uprightEntities': { 870e5c31af7Sopenharmony_ci '0|1|2': { 871e5c31af7Sopenharmony_ci action_: ['o=', 'output'], 872e5c31af7Sopenharmony_ci nextState: '1' 873e5c31af7Sopenharmony_ci } 874e5c31af7Sopenharmony_ci }, 875e5c31af7Sopenharmony_ci 'orbital': { 876e5c31af7Sopenharmony_ci '0|1|2|3': { 877e5c31af7Sopenharmony_ci action_: 'o=', 878e5c31af7Sopenharmony_ci nextState: 'o' 879e5c31af7Sopenharmony_ci } 880e5c31af7Sopenharmony_ci }, 881e5c31af7Sopenharmony_ci '->': { 882e5c31af7Sopenharmony_ci '0|1|2|3': { 883e5c31af7Sopenharmony_ci action_: 'r=', 884e5c31af7Sopenharmony_ci nextState: 'r' 885e5c31af7Sopenharmony_ci }, 886e5c31af7Sopenharmony_ci 'a|as': { 887e5c31af7Sopenharmony_ci action_: ['output', 'r='], 888e5c31af7Sopenharmony_ci nextState: 'r' 889e5c31af7Sopenharmony_ci }, 890e5c31af7Sopenharmony_ci '*': { 891e5c31af7Sopenharmony_ci action_: ['output', 'r='], 892e5c31af7Sopenharmony_ci nextState: 'r' 893e5c31af7Sopenharmony_ci } 894e5c31af7Sopenharmony_ci }, 895e5c31af7Sopenharmony_ci '+': { 896e5c31af7Sopenharmony_ci 'o': { 897e5c31af7Sopenharmony_ci action_: 'd= kv', 898e5c31af7Sopenharmony_ci nextState: 'd' 899e5c31af7Sopenharmony_ci }, 900e5c31af7Sopenharmony_ci 'd|D': { 901e5c31af7Sopenharmony_ci action_: 'd=', 902e5c31af7Sopenharmony_ci nextState: 'd' 903e5c31af7Sopenharmony_ci }, 904e5c31af7Sopenharmony_ci 'q': { 905e5c31af7Sopenharmony_ci action_: 'd=', 906e5c31af7Sopenharmony_ci nextState: 'qd' 907e5c31af7Sopenharmony_ci }, 908e5c31af7Sopenharmony_ci 'qd|qD': { 909e5c31af7Sopenharmony_ci action_: 'd=', 910e5c31af7Sopenharmony_ci nextState: 'qd' 911e5c31af7Sopenharmony_ci }, 912e5c31af7Sopenharmony_ci 'dq': { 913e5c31af7Sopenharmony_ci action_: ['output', 'd='], 914e5c31af7Sopenharmony_ci nextState: 'd' 915e5c31af7Sopenharmony_ci }, 916e5c31af7Sopenharmony_ci '3': { 917e5c31af7Sopenharmony_ci action_: ['sb=false', 'output', 'operator'], 918e5c31af7Sopenharmony_ci nextState: '0' 919e5c31af7Sopenharmony_ci } 920e5c31af7Sopenharmony_ci }, 921e5c31af7Sopenharmony_ci 'amount': { 922e5c31af7Sopenharmony_ci '0|2': { 923e5c31af7Sopenharmony_ci action_: 'a=', 924e5c31af7Sopenharmony_ci nextState: 'a' 925e5c31af7Sopenharmony_ci } 926e5c31af7Sopenharmony_ci }, 927e5c31af7Sopenharmony_ci 'pm-operator': { 928e5c31af7Sopenharmony_ci '0|1|2|a|as': { 929e5c31af7Sopenharmony_ci action_: ['sb=false', 'output', { 930e5c31af7Sopenharmony_ci type_: 'operator', 931e5c31af7Sopenharmony_ci option: '\\pm' 932e5c31af7Sopenharmony_ci }], 933e5c31af7Sopenharmony_ci nextState: '0' 934e5c31af7Sopenharmony_ci } 935e5c31af7Sopenharmony_ci }, 936e5c31af7Sopenharmony_ci 'operator': { 937e5c31af7Sopenharmony_ci '0|1|2|a|as': { 938e5c31af7Sopenharmony_ci action_: ['sb=false', 'output', 'operator'], 939e5c31af7Sopenharmony_ci nextState: '0' 940e5c31af7Sopenharmony_ci } 941e5c31af7Sopenharmony_ci }, 942e5c31af7Sopenharmony_ci '-$': { 943e5c31af7Sopenharmony_ci 'o|q': { 944e5c31af7Sopenharmony_ci action_: ['charge or bond', 'output'], 945e5c31af7Sopenharmony_ci nextState: 'qd' 946e5c31af7Sopenharmony_ci }, 947e5c31af7Sopenharmony_ci 'd': { 948e5c31af7Sopenharmony_ci action_: 'd=', 949e5c31af7Sopenharmony_ci nextState: 'd' 950e5c31af7Sopenharmony_ci }, 951e5c31af7Sopenharmony_ci 'D': { 952e5c31af7Sopenharmony_ci action_: ['output', { 953e5c31af7Sopenharmony_ci type_: 'bond', 954e5c31af7Sopenharmony_ci option: "-" 955e5c31af7Sopenharmony_ci }], 956e5c31af7Sopenharmony_ci nextState: '3' 957e5c31af7Sopenharmony_ci }, 958e5c31af7Sopenharmony_ci 'q': { 959e5c31af7Sopenharmony_ci action_: 'd=', 960e5c31af7Sopenharmony_ci nextState: 'qd' 961e5c31af7Sopenharmony_ci }, 962e5c31af7Sopenharmony_ci 'qd': { 963e5c31af7Sopenharmony_ci action_: 'd=', 964e5c31af7Sopenharmony_ci nextState: 'qd' 965e5c31af7Sopenharmony_ci }, 966e5c31af7Sopenharmony_ci 'qD|dq': { 967e5c31af7Sopenharmony_ci action_: ['output', { 968e5c31af7Sopenharmony_ci type_: 'bond', 969e5c31af7Sopenharmony_ci option: "-" 970e5c31af7Sopenharmony_ci }], 971e5c31af7Sopenharmony_ci nextState: '3' 972e5c31af7Sopenharmony_ci } 973e5c31af7Sopenharmony_ci }, 974e5c31af7Sopenharmony_ci '-9': { 975e5c31af7Sopenharmony_ci '3|o': { 976e5c31af7Sopenharmony_ci action_: ['output', { 977e5c31af7Sopenharmony_ci type_: 'insert', 978e5c31af7Sopenharmony_ci option: 'hyphen' 979e5c31af7Sopenharmony_ci }], 980e5c31af7Sopenharmony_ci nextState: '3' 981e5c31af7Sopenharmony_ci } 982e5c31af7Sopenharmony_ci }, 983e5c31af7Sopenharmony_ci '- orbital overlap': { 984e5c31af7Sopenharmony_ci 'o': { 985e5c31af7Sopenharmony_ci action_: ['output', { 986e5c31af7Sopenharmony_ci type_: 'insert', 987e5c31af7Sopenharmony_ci option: 'hyphen' 988e5c31af7Sopenharmony_ci }], 989e5c31af7Sopenharmony_ci nextState: '2' 990e5c31af7Sopenharmony_ci }, 991e5c31af7Sopenharmony_ci 'd': { 992e5c31af7Sopenharmony_ci action_: ['output', { 993e5c31af7Sopenharmony_ci type_: 'insert', 994e5c31af7Sopenharmony_ci option: 'hyphen' 995e5c31af7Sopenharmony_ci }], 996e5c31af7Sopenharmony_ci nextState: '2' 997e5c31af7Sopenharmony_ci } 998e5c31af7Sopenharmony_ci }, 999e5c31af7Sopenharmony_ci '-': { 1000e5c31af7Sopenharmony_ci '0|1|2': { 1001e5c31af7Sopenharmony_ci action_: [{ 1002e5c31af7Sopenharmony_ci type_: 'output', 1003e5c31af7Sopenharmony_ci option: 1 1004e5c31af7Sopenharmony_ci }, 'beginsWithBond=true', { 1005e5c31af7Sopenharmony_ci type_: 'bond', 1006e5c31af7Sopenharmony_ci option: "-" 1007e5c31af7Sopenharmony_ci }], 1008e5c31af7Sopenharmony_ci nextState: '3' 1009e5c31af7Sopenharmony_ci }, 1010e5c31af7Sopenharmony_ci '3': { 1011e5c31af7Sopenharmony_ci action_: { 1012e5c31af7Sopenharmony_ci type_: 'bond', 1013e5c31af7Sopenharmony_ci option: "-" 1014e5c31af7Sopenharmony_ci } 1015e5c31af7Sopenharmony_ci }, 1016e5c31af7Sopenharmony_ci 'a': { 1017e5c31af7Sopenharmony_ci action_: ['output', { 1018e5c31af7Sopenharmony_ci type_: 'insert', 1019e5c31af7Sopenharmony_ci option: 'hyphen' 1020e5c31af7Sopenharmony_ci }], 1021e5c31af7Sopenharmony_ci nextState: '2' 1022e5c31af7Sopenharmony_ci }, 1023e5c31af7Sopenharmony_ci 'as': { 1024e5c31af7Sopenharmony_ci action_: [{ 1025e5c31af7Sopenharmony_ci type_: 'output', 1026e5c31af7Sopenharmony_ci option: 2 1027e5c31af7Sopenharmony_ci }, { 1028e5c31af7Sopenharmony_ci type_: 'bond', 1029e5c31af7Sopenharmony_ci option: "-" 1030e5c31af7Sopenharmony_ci }], 1031e5c31af7Sopenharmony_ci nextState: '3' 1032e5c31af7Sopenharmony_ci }, 1033e5c31af7Sopenharmony_ci 'b': { 1034e5c31af7Sopenharmony_ci action_: 'b=' 1035e5c31af7Sopenharmony_ci }, 1036e5c31af7Sopenharmony_ci 'o': { 1037e5c31af7Sopenharmony_ci action_: { 1038e5c31af7Sopenharmony_ci type_: '- after o/d', 1039e5c31af7Sopenharmony_ci option: false 1040e5c31af7Sopenharmony_ci }, 1041e5c31af7Sopenharmony_ci nextState: '2' 1042e5c31af7Sopenharmony_ci }, 1043e5c31af7Sopenharmony_ci 'q': { 1044e5c31af7Sopenharmony_ci action_: { 1045e5c31af7Sopenharmony_ci type_: '- after o/d', 1046e5c31af7Sopenharmony_ci option: false 1047e5c31af7Sopenharmony_ci }, 1048e5c31af7Sopenharmony_ci nextState: '2' 1049e5c31af7Sopenharmony_ci }, 1050e5c31af7Sopenharmony_ci 'd|qd|dq': { 1051e5c31af7Sopenharmony_ci action_: { 1052e5c31af7Sopenharmony_ci type_: '- after o/d', 1053e5c31af7Sopenharmony_ci option: true 1054e5c31af7Sopenharmony_ci }, 1055e5c31af7Sopenharmony_ci nextState: '2' 1056e5c31af7Sopenharmony_ci }, 1057e5c31af7Sopenharmony_ci 'D|qD|p': { 1058e5c31af7Sopenharmony_ci action_: ['output', { 1059e5c31af7Sopenharmony_ci type_: 'bond', 1060e5c31af7Sopenharmony_ci option: "-" 1061e5c31af7Sopenharmony_ci }], 1062e5c31af7Sopenharmony_ci nextState: '3' 1063e5c31af7Sopenharmony_ci } 1064e5c31af7Sopenharmony_ci }, 1065e5c31af7Sopenharmony_ci 'amount2': { 1066e5c31af7Sopenharmony_ci '1|3': { 1067e5c31af7Sopenharmony_ci action_: 'a=', 1068e5c31af7Sopenharmony_ci nextState: 'a' 1069e5c31af7Sopenharmony_ci } 1070e5c31af7Sopenharmony_ci }, 1071e5c31af7Sopenharmony_ci 'letters': { 1072e5c31af7Sopenharmony_ci '0|1|2|3|a|as|b|p|bp|o': { 1073e5c31af7Sopenharmony_ci action_: 'o=', 1074e5c31af7Sopenharmony_ci nextState: 'o' 1075e5c31af7Sopenharmony_ci }, 1076e5c31af7Sopenharmony_ci 'q|dq': { 1077e5c31af7Sopenharmony_ci action_: ['output', 'o='], 1078e5c31af7Sopenharmony_ci nextState: 'o' 1079e5c31af7Sopenharmony_ci }, 1080e5c31af7Sopenharmony_ci 'd|D|qd|qD': { 1081e5c31af7Sopenharmony_ci action_: 'o after d', 1082e5c31af7Sopenharmony_ci nextState: 'o' 1083e5c31af7Sopenharmony_ci } 1084e5c31af7Sopenharmony_ci }, 1085e5c31af7Sopenharmony_ci 'digits': { 1086e5c31af7Sopenharmony_ci 'o': { 1087e5c31af7Sopenharmony_ci action_: 'q=', 1088e5c31af7Sopenharmony_ci nextState: 'q' 1089e5c31af7Sopenharmony_ci }, 1090e5c31af7Sopenharmony_ci 'd|D': { 1091e5c31af7Sopenharmony_ci action_: 'q=', 1092e5c31af7Sopenharmony_ci nextState: 'dq' 1093e5c31af7Sopenharmony_ci }, 1094e5c31af7Sopenharmony_ci 'q': { 1095e5c31af7Sopenharmony_ci action_: ['output', 'o='], 1096e5c31af7Sopenharmony_ci nextState: 'o' 1097e5c31af7Sopenharmony_ci }, 1098e5c31af7Sopenharmony_ci 'a': { 1099e5c31af7Sopenharmony_ci action_: 'o=', 1100e5c31af7Sopenharmony_ci nextState: 'o' 1101e5c31af7Sopenharmony_ci } 1102e5c31af7Sopenharmony_ci }, 1103e5c31af7Sopenharmony_ci 'space A': { 1104e5c31af7Sopenharmony_ci 'b|p|bp': {} 1105e5c31af7Sopenharmony_ci }, 1106e5c31af7Sopenharmony_ci 'space': { 1107e5c31af7Sopenharmony_ci 'a': { 1108e5c31af7Sopenharmony_ci nextState: 'as' 1109e5c31af7Sopenharmony_ci }, 1110e5c31af7Sopenharmony_ci '0': { 1111e5c31af7Sopenharmony_ci action_: 'sb=false' 1112e5c31af7Sopenharmony_ci }, 1113e5c31af7Sopenharmony_ci '1|2': { 1114e5c31af7Sopenharmony_ci action_: 'sb=true' 1115e5c31af7Sopenharmony_ci }, 1116e5c31af7Sopenharmony_ci 'r|rt|rd|rdt|rdq': { 1117e5c31af7Sopenharmony_ci action_: 'output', 1118e5c31af7Sopenharmony_ci nextState: '0' 1119e5c31af7Sopenharmony_ci }, 1120e5c31af7Sopenharmony_ci '*': { 1121e5c31af7Sopenharmony_ci action_: ['output', 'sb=true'], 1122e5c31af7Sopenharmony_ci nextState: '1' 1123e5c31af7Sopenharmony_ci } 1124e5c31af7Sopenharmony_ci }, 1125e5c31af7Sopenharmony_ci '1st-level escape': { 1126e5c31af7Sopenharmony_ci '1|2': { 1127e5c31af7Sopenharmony_ci action_: ['output', { 1128e5c31af7Sopenharmony_ci type_: 'insert+p1', 1129e5c31af7Sopenharmony_ci option: '1st-level escape' 1130e5c31af7Sopenharmony_ci }] 1131e5c31af7Sopenharmony_ci }, 1132e5c31af7Sopenharmony_ci '*': { 1133e5c31af7Sopenharmony_ci action_: ['output', { 1134e5c31af7Sopenharmony_ci type_: 'insert+p1', 1135e5c31af7Sopenharmony_ci option: '1st-level escape' 1136e5c31af7Sopenharmony_ci }], 1137e5c31af7Sopenharmony_ci nextState: '0' 1138e5c31af7Sopenharmony_ci } 1139e5c31af7Sopenharmony_ci }, 1140e5c31af7Sopenharmony_ci '[(...)]': { 1141e5c31af7Sopenharmony_ci 'r|rt': { 1142e5c31af7Sopenharmony_ci action_: 'rd=', 1143e5c31af7Sopenharmony_ci nextState: 'rd' 1144e5c31af7Sopenharmony_ci }, 1145e5c31af7Sopenharmony_ci 'rd|rdt': { 1146e5c31af7Sopenharmony_ci action_: 'rq=', 1147e5c31af7Sopenharmony_ci nextState: 'rdq' 1148e5c31af7Sopenharmony_ci } 1149e5c31af7Sopenharmony_ci }, 1150e5c31af7Sopenharmony_ci '...': { 1151e5c31af7Sopenharmony_ci 'o|d|D|dq|qd|qD': { 1152e5c31af7Sopenharmony_ci action_: ['output', { 1153e5c31af7Sopenharmony_ci type_: 'bond', 1154e5c31af7Sopenharmony_ci option: "..." 1155e5c31af7Sopenharmony_ci }], 1156e5c31af7Sopenharmony_ci nextState: '3' 1157e5c31af7Sopenharmony_ci }, 1158e5c31af7Sopenharmony_ci '*': { 1159e5c31af7Sopenharmony_ci action_: [{ 1160e5c31af7Sopenharmony_ci type_: 'output', 1161e5c31af7Sopenharmony_ci option: 1 1162e5c31af7Sopenharmony_ci }, { 1163e5c31af7Sopenharmony_ci type_: 'insert', 1164e5c31af7Sopenharmony_ci option: 'ellipsis' 1165e5c31af7Sopenharmony_ci }], 1166e5c31af7Sopenharmony_ci nextState: '1' 1167e5c31af7Sopenharmony_ci } 1168e5c31af7Sopenharmony_ci }, 1169e5c31af7Sopenharmony_ci '. |* ': { 1170e5c31af7Sopenharmony_ci '*': { 1171e5c31af7Sopenharmony_ci action_: ['output', { 1172e5c31af7Sopenharmony_ci type_: 'insert', 1173e5c31af7Sopenharmony_ci option: 'addition compound' 1174e5c31af7Sopenharmony_ci }], 1175e5c31af7Sopenharmony_ci nextState: '1' 1176e5c31af7Sopenharmony_ci } 1177e5c31af7Sopenharmony_ci }, 1178e5c31af7Sopenharmony_ci 'state of aggregation $': { 1179e5c31af7Sopenharmony_ci '*': { 1180e5c31af7Sopenharmony_ci action_: ['output', 'state of aggregation'], 1181e5c31af7Sopenharmony_ci nextState: '1' 1182e5c31af7Sopenharmony_ci } 1183e5c31af7Sopenharmony_ci }, 1184e5c31af7Sopenharmony_ci '{[(': { 1185e5c31af7Sopenharmony_ci 'a|as|o': { 1186e5c31af7Sopenharmony_ci action_: ['o=', 'output', 'parenthesisLevel++'], 1187e5c31af7Sopenharmony_ci nextState: '2' 1188e5c31af7Sopenharmony_ci }, 1189e5c31af7Sopenharmony_ci '0|1|2|3': { 1190e5c31af7Sopenharmony_ci action_: ['o=', 'output', 'parenthesisLevel++'], 1191e5c31af7Sopenharmony_ci nextState: '2' 1192e5c31af7Sopenharmony_ci }, 1193e5c31af7Sopenharmony_ci '*': { 1194e5c31af7Sopenharmony_ci action_: ['output', 'o=', 'output', 'parenthesisLevel++'], 1195e5c31af7Sopenharmony_ci nextState: '2' 1196e5c31af7Sopenharmony_ci } 1197e5c31af7Sopenharmony_ci }, 1198e5c31af7Sopenharmony_ci ')]}': { 1199e5c31af7Sopenharmony_ci '0|1|2|3|b|p|bp|o': { 1200e5c31af7Sopenharmony_ci action_: ['o=', 'parenthesisLevel--'], 1201e5c31af7Sopenharmony_ci nextState: 'o' 1202e5c31af7Sopenharmony_ci }, 1203e5c31af7Sopenharmony_ci 'a|as|d|D|q|qd|qD|dq': { 1204e5c31af7Sopenharmony_ci action_: ['output', 'o=', 'parenthesisLevel--'], 1205e5c31af7Sopenharmony_ci nextState: 'o' 1206e5c31af7Sopenharmony_ci } 1207e5c31af7Sopenharmony_ci }, 1208e5c31af7Sopenharmony_ci ', ': { 1209e5c31af7Sopenharmony_ci '*': { 1210e5c31af7Sopenharmony_ci action_: ['output', 'comma'], 1211e5c31af7Sopenharmony_ci nextState: '0' 1212e5c31af7Sopenharmony_ci } 1213e5c31af7Sopenharmony_ci }, 1214e5c31af7Sopenharmony_ci '^_': { 1215e5c31af7Sopenharmony_ci // ^ and _ without a sensible argument 1216e5c31af7Sopenharmony_ci '*': {} 1217e5c31af7Sopenharmony_ci }, 1218e5c31af7Sopenharmony_ci '^{(...)}|^($...$)': { 1219e5c31af7Sopenharmony_ci '0|1|2|as': { 1220e5c31af7Sopenharmony_ci action_: 'b=', 1221e5c31af7Sopenharmony_ci nextState: 'b' 1222e5c31af7Sopenharmony_ci }, 1223e5c31af7Sopenharmony_ci 'p': { 1224e5c31af7Sopenharmony_ci action_: 'b=', 1225e5c31af7Sopenharmony_ci nextState: 'bp' 1226e5c31af7Sopenharmony_ci }, 1227e5c31af7Sopenharmony_ci '3|o': { 1228e5c31af7Sopenharmony_ci action_: 'd= kv', 1229e5c31af7Sopenharmony_ci nextState: 'D' 1230e5c31af7Sopenharmony_ci }, 1231e5c31af7Sopenharmony_ci 'q': { 1232e5c31af7Sopenharmony_ci action_: 'd=', 1233e5c31af7Sopenharmony_ci nextState: 'qD' 1234e5c31af7Sopenharmony_ci }, 1235e5c31af7Sopenharmony_ci 'd|D|qd|qD|dq': { 1236e5c31af7Sopenharmony_ci action_: ['output', 'd='], 1237e5c31af7Sopenharmony_ci nextState: 'D' 1238e5c31af7Sopenharmony_ci } 1239e5c31af7Sopenharmony_ci }, 1240e5c31af7Sopenharmony_ci '^a|^\\x{}{}|^\\x{}|^\\x|\'': { 1241e5c31af7Sopenharmony_ci '0|1|2|as': { 1242e5c31af7Sopenharmony_ci action_: 'b=', 1243e5c31af7Sopenharmony_ci nextState: 'b' 1244e5c31af7Sopenharmony_ci }, 1245e5c31af7Sopenharmony_ci 'p': { 1246e5c31af7Sopenharmony_ci action_: 'b=', 1247e5c31af7Sopenharmony_ci nextState: 'bp' 1248e5c31af7Sopenharmony_ci }, 1249e5c31af7Sopenharmony_ci '3|o': { 1250e5c31af7Sopenharmony_ci action_: 'd= kv', 1251e5c31af7Sopenharmony_ci nextState: 'd' 1252e5c31af7Sopenharmony_ci }, 1253e5c31af7Sopenharmony_ci 'q': { 1254e5c31af7Sopenharmony_ci action_: 'd=', 1255e5c31af7Sopenharmony_ci nextState: 'qd' 1256e5c31af7Sopenharmony_ci }, 1257e5c31af7Sopenharmony_ci 'd|qd|D|qD': { 1258e5c31af7Sopenharmony_ci action_: 'd=' 1259e5c31af7Sopenharmony_ci }, 1260e5c31af7Sopenharmony_ci 'dq': { 1261e5c31af7Sopenharmony_ci action_: ['output', 'd='], 1262e5c31af7Sopenharmony_ci nextState: 'd' 1263e5c31af7Sopenharmony_ci } 1264e5c31af7Sopenharmony_ci }, 1265e5c31af7Sopenharmony_ci '_{(state of aggregation)}$': { 1266e5c31af7Sopenharmony_ci 'd|D|q|qd|qD|dq': { 1267e5c31af7Sopenharmony_ci action_: ['output', 'q='], 1268e5c31af7Sopenharmony_ci nextState: 'q' 1269e5c31af7Sopenharmony_ci } 1270e5c31af7Sopenharmony_ci }, 1271e5c31af7Sopenharmony_ci '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { 1272e5c31af7Sopenharmony_ci '0|1|2|as': { 1273e5c31af7Sopenharmony_ci action_: 'p=', 1274e5c31af7Sopenharmony_ci nextState: 'p' 1275e5c31af7Sopenharmony_ci }, 1276e5c31af7Sopenharmony_ci 'b': { 1277e5c31af7Sopenharmony_ci action_: 'p=', 1278e5c31af7Sopenharmony_ci nextState: 'bp' 1279e5c31af7Sopenharmony_ci }, 1280e5c31af7Sopenharmony_ci '3|o': { 1281e5c31af7Sopenharmony_ci action_: 'q=', 1282e5c31af7Sopenharmony_ci nextState: 'q' 1283e5c31af7Sopenharmony_ci }, 1284e5c31af7Sopenharmony_ci 'd|D': { 1285e5c31af7Sopenharmony_ci action_: 'q=', 1286e5c31af7Sopenharmony_ci nextState: 'dq' 1287e5c31af7Sopenharmony_ci }, 1288e5c31af7Sopenharmony_ci 'q|qd|qD|dq': { 1289e5c31af7Sopenharmony_ci action_: ['output', 'q='], 1290e5c31af7Sopenharmony_ci nextState: 'q' 1291e5c31af7Sopenharmony_ci } 1292e5c31af7Sopenharmony_ci }, 1293e5c31af7Sopenharmony_ci '=<>': { 1294e5c31af7Sopenharmony_ci '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { 1295e5c31af7Sopenharmony_ci action_: [{ 1296e5c31af7Sopenharmony_ci type_: 'output', 1297e5c31af7Sopenharmony_ci option: 2 1298e5c31af7Sopenharmony_ci }, 'bond'], 1299e5c31af7Sopenharmony_ci nextState: '3' 1300e5c31af7Sopenharmony_ci } 1301e5c31af7Sopenharmony_ci }, 1302e5c31af7Sopenharmony_ci '#': { 1303e5c31af7Sopenharmony_ci '0|1|2|3|a|as|o': { 1304e5c31af7Sopenharmony_ci action_: [{ 1305e5c31af7Sopenharmony_ci type_: 'output', 1306e5c31af7Sopenharmony_ci option: 2 1307e5c31af7Sopenharmony_ci }, { 1308e5c31af7Sopenharmony_ci type_: 'bond', 1309e5c31af7Sopenharmony_ci option: "#" 1310e5c31af7Sopenharmony_ci }], 1311e5c31af7Sopenharmony_ci nextState: '3' 1312e5c31af7Sopenharmony_ci } 1313e5c31af7Sopenharmony_ci }, 1314e5c31af7Sopenharmony_ci '{}': { 1315e5c31af7Sopenharmony_ci '*': { 1316e5c31af7Sopenharmony_ci action_: { 1317e5c31af7Sopenharmony_ci type_: 'output', 1318e5c31af7Sopenharmony_ci option: 1 1319e5c31af7Sopenharmony_ci }, 1320e5c31af7Sopenharmony_ci nextState: '1' 1321e5c31af7Sopenharmony_ci } 1322e5c31af7Sopenharmony_ci }, 1323e5c31af7Sopenharmony_ci '{...}': { 1324e5c31af7Sopenharmony_ci '0|1|2|3|a|as|b|p|bp': { 1325e5c31af7Sopenharmony_ci action_: 'o=', 1326e5c31af7Sopenharmony_ci nextState: 'o' 1327e5c31af7Sopenharmony_ci }, 1328e5c31af7Sopenharmony_ci 'o|d|D|q|qd|qD|dq': { 1329e5c31af7Sopenharmony_ci action_: ['output', 'o='], 1330e5c31af7Sopenharmony_ci nextState: 'o' 1331e5c31af7Sopenharmony_ci } 1332e5c31af7Sopenharmony_ci }, 1333e5c31af7Sopenharmony_ci '$...$': { 1334e5c31af7Sopenharmony_ci 'a': { 1335e5c31af7Sopenharmony_ci action_: 'a=' 1336e5c31af7Sopenharmony_ci }, 1337e5c31af7Sopenharmony_ci // 2$n$ 1338e5c31af7Sopenharmony_ci '0|1|2|3|as|b|p|bp|o': { 1339e5c31af7Sopenharmony_ci action_: 'o=', 1340e5c31af7Sopenharmony_ci nextState: 'o' 1341e5c31af7Sopenharmony_ci }, 1342e5c31af7Sopenharmony_ci // not 'amount' 1343e5c31af7Sopenharmony_ci 'as|o': { 1344e5c31af7Sopenharmony_ci action_: 'o=' 1345e5c31af7Sopenharmony_ci }, 1346e5c31af7Sopenharmony_ci 'q|d|D|qd|qD|dq': { 1347e5c31af7Sopenharmony_ci action_: ['output', 'o='], 1348e5c31af7Sopenharmony_ci nextState: 'o' 1349e5c31af7Sopenharmony_ci } 1350e5c31af7Sopenharmony_ci }, 1351e5c31af7Sopenharmony_ci '\\bond{(...)}': { 1352e5c31af7Sopenharmony_ci '*': { 1353e5c31af7Sopenharmony_ci action_: [{ 1354e5c31af7Sopenharmony_ci type_: 'output', 1355e5c31af7Sopenharmony_ci option: 2 1356e5c31af7Sopenharmony_ci }, 'bond'], 1357e5c31af7Sopenharmony_ci nextState: "3" 1358e5c31af7Sopenharmony_ci } 1359e5c31af7Sopenharmony_ci }, 1360e5c31af7Sopenharmony_ci '\\frac{(...)}': { 1361e5c31af7Sopenharmony_ci '*': { 1362e5c31af7Sopenharmony_ci action_: [{ 1363e5c31af7Sopenharmony_ci type_: 'output', 1364e5c31af7Sopenharmony_ci option: 1 1365e5c31af7Sopenharmony_ci }, 'frac-output'], 1366e5c31af7Sopenharmony_ci nextState: '3' 1367e5c31af7Sopenharmony_ci } 1368e5c31af7Sopenharmony_ci }, 1369e5c31af7Sopenharmony_ci '\\overset{(...)}': { 1370e5c31af7Sopenharmony_ci '*': { 1371e5c31af7Sopenharmony_ci action_: [{ 1372e5c31af7Sopenharmony_ci type_: 'output', 1373e5c31af7Sopenharmony_ci option: 2 1374e5c31af7Sopenharmony_ci }, 'overset-output'], 1375e5c31af7Sopenharmony_ci nextState: '3' 1376e5c31af7Sopenharmony_ci } 1377e5c31af7Sopenharmony_ci }, 1378e5c31af7Sopenharmony_ci '\\underset{(...)}': { 1379e5c31af7Sopenharmony_ci '*': { 1380e5c31af7Sopenharmony_ci action_: [{ 1381e5c31af7Sopenharmony_ci type_: 'output', 1382e5c31af7Sopenharmony_ci option: 2 1383e5c31af7Sopenharmony_ci }, 'underset-output'], 1384e5c31af7Sopenharmony_ci nextState: '3' 1385e5c31af7Sopenharmony_ci } 1386e5c31af7Sopenharmony_ci }, 1387e5c31af7Sopenharmony_ci '\\underbrace{(...)}': { 1388e5c31af7Sopenharmony_ci '*': { 1389e5c31af7Sopenharmony_ci action_: [{ 1390e5c31af7Sopenharmony_ci type_: 'output', 1391e5c31af7Sopenharmony_ci option: 2 1392e5c31af7Sopenharmony_ci }, 'underbrace-output'], 1393e5c31af7Sopenharmony_ci nextState: '3' 1394e5c31af7Sopenharmony_ci } 1395e5c31af7Sopenharmony_ci }, 1396e5c31af7Sopenharmony_ci '\\color{(...)}{(...)}1|\\color(...){(...)}2': { 1397e5c31af7Sopenharmony_ci '*': { 1398e5c31af7Sopenharmony_ci action_: [{ 1399e5c31af7Sopenharmony_ci type_: 'output', 1400e5c31af7Sopenharmony_ci option: 2 1401e5c31af7Sopenharmony_ci }, 'color-output'], 1402e5c31af7Sopenharmony_ci nextState: '3' 1403e5c31af7Sopenharmony_ci } 1404e5c31af7Sopenharmony_ci }, 1405e5c31af7Sopenharmony_ci '\\color{(...)}0': { 1406e5c31af7Sopenharmony_ci '*': { 1407e5c31af7Sopenharmony_ci action_: [{ 1408e5c31af7Sopenharmony_ci type_: 'output', 1409e5c31af7Sopenharmony_ci option: 2 1410e5c31af7Sopenharmony_ci }, 'color0-output'] 1411e5c31af7Sopenharmony_ci } 1412e5c31af7Sopenharmony_ci }, 1413e5c31af7Sopenharmony_ci '\\ce{(...)}': { 1414e5c31af7Sopenharmony_ci '*': { 1415e5c31af7Sopenharmony_ci action_: [{ 1416e5c31af7Sopenharmony_ci type_: 'output', 1417e5c31af7Sopenharmony_ci option: 2 1418e5c31af7Sopenharmony_ci }, 'ce'], 1419e5c31af7Sopenharmony_ci nextState: '3' 1420e5c31af7Sopenharmony_ci } 1421e5c31af7Sopenharmony_ci }, 1422e5c31af7Sopenharmony_ci '\\,': { 1423e5c31af7Sopenharmony_ci '*': { 1424e5c31af7Sopenharmony_ci action_: [{ 1425e5c31af7Sopenharmony_ci type_: 'output', 1426e5c31af7Sopenharmony_ci option: 1 1427e5c31af7Sopenharmony_ci }, 'copy'], 1428e5c31af7Sopenharmony_ci nextState: '1' 1429e5c31af7Sopenharmony_ci } 1430e5c31af7Sopenharmony_ci }, 1431e5c31af7Sopenharmony_ci '\\x{}{}|\\x{}|\\x': { 1432e5c31af7Sopenharmony_ci '0|1|2|3|a|as|b|p|bp|o|c0': { 1433e5c31af7Sopenharmony_ci action_: ['o=', 'output'], 1434e5c31af7Sopenharmony_ci nextState: '3' 1435e5c31af7Sopenharmony_ci }, 1436e5c31af7Sopenharmony_ci '*': { 1437e5c31af7Sopenharmony_ci action_: ['output', 'o=', 'output'], 1438e5c31af7Sopenharmony_ci nextState: '3' 1439e5c31af7Sopenharmony_ci } 1440e5c31af7Sopenharmony_ci }, 1441e5c31af7Sopenharmony_ci 'others': { 1442e5c31af7Sopenharmony_ci '*': { 1443e5c31af7Sopenharmony_ci action_: [{ 1444e5c31af7Sopenharmony_ci type_: 'output', 1445e5c31af7Sopenharmony_ci option: 1 1446e5c31af7Sopenharmony_ci }, 'copy'], 1447e5c31af7Sopenharmony_ci nextState: '3' 1448e5c31af7Sopenharmony_ci } 1449e5c31af7Sopenharmony_ci }, 1450e5c31af7Sopenharmony_ci 'else2': { 1451e5c31af7Sopenharmony_ci 'a': { 1452e5c31af7Sopenharmony_ci action_: 'a to o', 1453e5c31af7Sopenharmony_ci nextState: 'o', 1454e5c31af7Sopenharmony_ci revisit: true 1455e5c31af7Sopenharmony_ci }, 1456e5c31af7Sopenharmony_ci 'as': { 1457e5c31af7Sopenharmony_ci action_: ['output', 'sb=true'], 1458e5c31af7Sopenharmony_ci nextState: '1', 1459e5c31af7Sopenharmony_ci revisit: true 1460e5c31af7Sopenharmony_ci }, 1461e5c31af7Sopenharmony_ci 'r|rt|rd|rdt|rdq': { 1462e5c31af7Sopenharmony_ci action_: ['output'], 1463e5c31af7Sopenharmony_ci nextState: '0', 1464e5c31af7Sopenharmony_ci revisit: true 1465e5c31af7Sopenharmony_ci }, 1466e5c31af7Sopenharmony_ci '*': { 1467e5c31af7Sopenharmony_ci action_: ['output', 'copy'], 1468e5c31af7Sopenharmony_ci nextState: '3' 1469e5c31af7Sopenharmony_ci } 1470e5c31af7Sopenharmony_ci } 1471e5c31af7Sopenharmony_ci }), 1472e5c31af7Sopenharmony_ci actions: { 1473e5c31af7Sopenharmony_ci 'o after d': function oAfterD(buffer, m) { 1474e5c31af7Sopenharmony_ci var ret; 1475e5c31af7Sopenharmony_ci 1476e5c31af7Sopenharmony_ci if ((buffer.d || "").match(/^[0-9]+$/)) { 1477e5c31af7Sopenharmony_ci var tmp = buffer.d; 1478e5c31af7Sopenharmony_ci buffer.d = undefined; 1479e5c31af7Sopenharmony_ci ret = this['output'](buffer); 1480e5c31af7Sopenharmony_ci buffer.b = tmp; 1481e5c31af7Sopenharmony_ci } else { 1482e5c31af7Sopenharmony_ci ret = this['output'](buffer); 1483e5c31af7Sopenharmony_ci } 1484e5c31af7Sopenharmony_ci 1485e5c31af7Sopenharmony_ci mhchemParser.actions['o='](buffer, m); 1486e5c31af7Sopenharmony_ci return ret; 1487e5c31af7Sopenharmony_ci }, 1488e5c31af7Sopenharmony_ci 'd= kv': function dKv(buffer, m) { 1489e5c31af7Sopenharmony_ci buffer.d = m; 1490e5c31af7Sopenharmony_ci buffer.dType = 'kv'; 1491e5c31af7Sopenharmony_ci }, 1492e5c31af7Sopenharmony_ci 'charge or bond': function chargeOrBond(buffer, m) { 1493e5c31af7Sopenharmony_ci if (buffer['beginsWithBond']) { 1494e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 1495e5c31af7Sopenharmony_ci var ret = []; 1496e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, this['output'](buffer)); 1497e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); 1498e5c31af7Sopenharmony_ci return ret; 1499e5c31af7Sopenharmony_ci } else { 1500e5c31af7Sopenharmony_ci buffer.d = m; 1501e5c31af7Sopenharmony_ci } 1502e5c31af7Sopenharmony_ci }, 1503e5c31af7Sopenharmony_ci '- after o/d': function afterOD(buffer, m, isAfterD) { 1504e5c31af7Sopenharmony_ci var c1 = mhchemParser.patterns.match_('orbital', buffer.o || ""); 1505e5c31af7Sopenharmony_ci var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || ""); 1506e5c31af7Sopenharmony_ci var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || ""); 1507e5c31af7Sopenharmony_ci var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || ""); 1508e5c31af7Sopenharmony_ci var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); 1509e5c31af7Sopenharmony_ci 1510e5c31af7Sopenharmony_ci if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { 1511e5c31af7Sopenharmony_ci buffer.o = '$' + buffer.o + '$'; 1512e5c31af7Sopenharmony_ci } 1513e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 1514e5c31af7Sopenharmony_ci 1515e5c31af7Sopenharmony_ci 1516e5c31af7Sopenharmony_ci var ret = []; 1517e5c31af7Sopenharmony_ci 1518e5c31af7Sopenharmony_ci if (hyphenFollows) { 1519e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, this['output'](buffer)); 1520e5c31af7Sopenharmony_ci ret.push({ 1521e5c31af7Sopenharmony_ci type_: 'hyphen' 1522e5c31af7Sopenharmony_ci }); 1523e5c31af7Sopenharmony_ci } else { 1524e5c31af7Sopenharmony_ci c1 = mhchemParser.patterns.match_('digits', buffer.d || ""); 1525e5c31af7Sopenharmony_ci 1526e5c31af7Sopenharmony_ci if (isAfterD && c1 && c1.remainder === '') { 1527e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m)); 1528e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, this['output'](buffer)); 1529e5c31af7Sopenharmony_ci } else { 1530e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, this['output'](buffer)); 1531e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); 1532e5c31af7Sopenharmony_ci } 1533e5c31af7Sopenharmony_ci } 1534e5c31af7Sopenharmony_ci 1535e5c31af7Sopenharmony_ci return ret; 1536e5c31af7Sopenharmony_ci }, 1537e5c31af7Sopenharmony_ci 'a to o': function aToO(buffer) { 1538e5c31af7Sopenharmony_ci buffer.o = buffer.a; 1539e5c31af7Sopenharmony_ci buffer.a = undefined; 1540e5c31af7Sopenharmony_ci }, 1541e5c31af7Sopenharmony_ci 'sb=true': function sbTrue(buffer) { 1542e5c31af7Sopenharmony_ci buffer.sb = true; 1543e5c31af7Sopenharmony_ci }, 1544e5c31af7Sopenharmony_ci 'sb=false': function sbFalse(buffer) { 1545e5c31af7Sopenharmony_ci buffer.sb = false; 1546e5c31af7Sopenharmony_ci }, 1547e5c31af7Sopenharmony_ci 'beginsWithBond=true': function beginsWithBondTrue(buffer) { 1548e5c31af7Sopenharmony_ci buffer['beginsWithBond'] = true; 1549e5c31af7Sopenharmony_ci }, 1550e5c31af7Sopenharmony_ci 'beginsWithBond=false': function beginsWithBondFalse(buffer) { 1551e5c31af7Sopenharmony_ci buffer['beginsWithBond'] = false; 1552e5c31af7Sopenharmony_ci }, 1553e5c31af7Sopenharmony_ci 'parenthesisLevel++': function parenthesisLevel(buffer) { 1554e5c31af7Sopenharmony_ci buffer['parenthesisLevel']++; 1555e5c31af7Sopenharmony_ci }, 1556e5c31af7Sopenharmony_ci 'parenthesisLevel--': function parenthesisLevel(buffer) { 1557e5c31af7Sopenharmony_ci buffer['parenthesisLevel']--; 1558e5c31af7Sopenharmony_ci }, 1559e5c31af7Sopenharmony_ci 'state of aggregation': function stateOfAggregation(buffer, m) { 1560e5c31af7Sopenharmony_ci return { 1561e5c31af7Sopenharmony_ci type_: 'state of aggregation', 1562e5c31af7Sopenharmony_ci p1: mhchemParser.go(m, 'o') 1563e5c31af7Sopenharmony_ci }; 1564e5c31af7Sopenharmony_ci }, 1565e5c31af7Sopenharmony_ci 'comma': function comma(buffer, m) { 1566e5c31af7Sopenharmony_ci var a = m.replace(/\s*$/, ''); 1567e5c31af7Sopenharmony_ci var withSpace = a !== m; 1568e5c31af7Sopenharmony_ci 1569e5c31af7Sopenharmony_ci if (withSpace && buffer['parenthesisLevel'] === 0) { 1570e5c31af7Sopenharmony_ci return { 1571e5c31af7Sopenharmony_ci type_: 'comma enumeration L', 1572e5c31af7Sopenharmony_ci p1: a 1573e5c31af7Sopenharmony_ci }; 1574e5c31af7Sopenharmony_ci } else { 1575e5c31af7Sopenharmony_ci return { 1576e5c31af7Sopenharmony_ci type_: 'comma enumeration M', 1577e5c31af7Sopenharmony_ci p1: a 1578e5c31af7Sopenharmony_ci }; 1579e5c31af7Sopenharmony_ci } 1580e5c31af7Sopenharmony_ci }, 1581e5c31af7Sopenharmony_ci 'output': function output(buffer, m, entityFollows) { 1582e5c31af7Sopenharmony_ci // entityFollows: 1583e5c31af7Sopenharmony_ci // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) 1584e5c31af7Sopenharmony_ci // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) 1585e5c31af7Sopenharmony_ci // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) 1586e5c31af7Sopenharmony_ci 1587e5c31af7Sopenharmony_ci /** @type {ParserOutput | ParserOutput[]} */ 1588e5c31af7Sopenharmony_ci var ret; 1589e5c31af7Sopenharmony_ci 1590e5c31af7Sopenharmony_ci if (!buffer.r) { 1591e5c31af7Sopenharmony_ci ret = []; 1592e5c31af7Sopenharmony_ci 1593e5c31af7Sopenharmony_ci if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) ; else { 1594e5c31af7Sopenharmony_ci if (buffer.sb) { 1595e5c31af7Sopenharmony_ci ret.push({ 1596e5c31af7Sopenharmony_ci type_: 'entitySkip' 1597e5c31af7Sopenharmony_ci }); 1598e5c31af7Sopenharmony_ci } 1599e5c31af7Sopenharmony_ci 1600e5c31af7Sopenharmony_ci if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { 1601e5c31af7Sopenharmony_ci buffer.o = buffer.a; 1602e5c31af7Sopenharmony_ci buffer.a = undefined; 1603e5c31af7Sopenharmony_ci } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { 1604e5c31af7Sopenharmony_ci buffer.o = buffer.a; 1605e5c31af7Sopenharmony_ci buffer.d = buffer.b; 1606e5c31af7Sopenharmony_ci buffer.q = buffer.p; 1607e5c31af7Sopenharmony_ci buffer.a = buffer.b = buffer.p = undefined; 1608e5c31af7Sopenharmony_ci } else { 1609e5c31af7Sopenharmony_ci if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) { 1610e5c31af7Sopenharmony_ci buffer.dType = 'oxidation'; 1611e5c31af7Sopenharmony_ci } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) { 1612e5c31af7Sopenharmony_ci buffer.dType = undefined; 1613e5c31af7Sopenharmony_ci } 1614e5c31af7Sopenharmony_ci } 1615e5c31af7Sopenharmony_ci 1616e5c31af7Sopenharmony_ci ret.push({ 1617e5c31af7Sopenharmony_ci type_: 'chemfive', 1618e5c31af7Sopenharmony_ci a: mhchemParser.go(buffer.a, 'a'), 1619e5c31af7Sopenharmony_ci b: mhchemParser.go(buffer.b, 'bd'), 1620e5c31af7Sopenharmony_ci p: mhchemParser.go(buffer.p, 'pq'), 1621e5c31af7Sopenharmony_ci o: mhchemParser.go(buffer.o, 'o'), 1622e5c31af7Sopenharmony_ci q: mhchemParser.go(buffer.q, 'pq'), 1623e5c31af7Sopenharmony_ci d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'), 1624e5c31af7Sopenharmony_ci dType: buffer.dType 1625e5c31af7Sopenharmony_ci }); 1626e5c31af7Sopenharmony_ci } 1627e5c31af7Sopenharmony_ci } else { 1628e5c31af7Sopenharmony_ci // r 1629e5c31af7Sopenharmony_ci 1630e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 1631e5c31af7Sopenharmony_ci var rd; 1632e5c31af7Sopenharmony_ci 1633e5c31af7Sopenharmony_ci if (buffer.rdt === 'M') { 1634e5c31af7Sopenharmony_ci rd = mhchemParser.go(buffer.rd, 'tex-math'); 1635e5c31af7Sopenharmony_ci } else if (buffer.rdt === 'T') { 1636e5c31af7Sopenharmony_ci rd = [{ 1637e5c31af7Sopenharmony_ci type_: 'text', 1638e5c31af7Sopenharmony_ci p1: buffer.rd || "" 1639e5c31af7Sopenharmony_ci }]; 1640e5c31af7Sopenharmony_ci } else { 1641e5c31af7Sopenharmony_ci rd = mhchemParser.go(buffer.rd); 1642e5c31af7Sopenharmony_ci } 1643e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 1644e5c31af7Sopenharmony_ci 1645e5c31af7Sopenharmony_ci 1646e5c31af7Sopenharmony_ci var rq; 1647e5c31af7Sopenharmony_ci 1648e5c31af7Sopenharmony_ci if (buffer.rqt === 'M') { 1649e5c31af7Sopenharmony_ci rq = mhchemParser.go(buffer.rq, 'tex-math'); 1650e5c31af7Sopenharmony_ci } else if (buffer.rqt === 'T') { 1651e5c31af7Sopenharmony_ci rq = [{ 1652e5c31af7Sopenharmony_ci type_: 'text', 1653e5c31af7Sopenharmony_ci p1: buffer.rq || "" 1654e5c31af7Sopenharmony_ci }]; 1655e5c31af7Sopenharmony_ci } else { 1656e5c31af7Sopenharmony_ci rq = mhchemParser.go(buffer.rq); 1657e5c31af7Sopenharmony_ci } 1658e5c31af7Sopenharmony_ci 1659e5c31af7Sopenharmony_ci ret = { 1660e5c31af7Sopenharmony_ci type_: 'arrow', 1661e5c31af7Sopenharmony_ci r: buffer.r, 1662e5c31af7Sopenharmony_ci rd: rd, 1663e5c31af7Sopenharmony_ci rq: rq 1664e5c31af7Sopenharmony_ci }; 1665e5c31af7Sopenharmony_ci } 1666e5c31af7Sopenharmony_ci 1667e5c31af7Sopenharmony_ci for (var p in buffer) { 1668e5c31af7Sopenharmony_ci if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { 1669e5c31af7Sopenharmony_ci delete buffer[p]; 1670e5c31af7Sopenharmony_ci } 1671e5c31af7Sopenharmony_ci } 1672e5c31af7Sopenharmony_ci 1673e5c31af7Sopenharmony_ci return ret; 1674e5c31af7Sopenharmony_ci }, 1675e5c31af7Sopenharmony_ci 'oxidation-output': function oxidationOutput(buffer, m) { 1676e5c31af7Sopenharmony_ci var ret = ["{"]; 1677e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation')); 1678e5c31af7Sopenharmony_ci ret.push("}"); 1679e5c31af7Sopenharmony_ci return ret; 1680e5c31af7Sopenharmony_ci }, 1681e5c31af7Sopenharmony_ci 'frac-output': function fracOutput(buffer, m) { 1682e5c31af7Sopenharmony_ci return { 1683e5c31af7Sopenharmony_ci type_: 'frac-ce', 1684e5c31af7Sopenharmony_ci p1: mhchemParser.go(m[0]), 1685e5c31af7Sopenharmony_ci p2: mhchemParser.go(m[1]) 1686e5c31af7Sopenharmony_ci }; 1687e5c31af7Sopenharmony_ci }, 1688e5c31af7Sopenharmony_ci 'overset-output': function oversetOutput(buffer, m) { 1689e5c31af7Sopenharmony_ci return { 1690e5c31af7Sopenharmony_ci type_: 'overset', 1691e5c31af7Sopenharmony_ci p1: mhchemParser.go(m[0]), 1692e5c31af7Sopenharmony_ci p2: mhchemParser.go(m[1]) 1693e5c31af7Sopenharmony_ci }; 1694e5c31af7Sopenharmony_ci }, 1695e5c31af7Sopenharmony_ci 'underset-output': function undersetOutput(buffer, m) { 1696e5c31af7Sopenharmony_ci return { 1697e5c31af7Sopenharmony_ci type_: 'underset', 1698e5c31af7Sopenharmony_ci p1: mhchemParser.go(m[0]), 1699e5c31af7Sopenharmony_ci p2: mhchemParser.go(m[1]) 1700e5c31af7Sopenharmony_ci }; 1701e5c31af7Sopenharmony_ci }, 1702e5c31af7Sopenharmony_ci 'underbrace-output': function underbraceOutput(buffer, m) { 1703e5c31af7Sopenharmony_ci return { 1704e5c31af7Sopenharmony_ci type_: 'underbrace', 1705e5c31af7Sopenharmony_ci p1: mhchemParser.go(m[0]), 1706e5c31af7Sopenharmony_ci p2: mhchemParser.go(m[1]) 1707e5c31af7Sopenharmony_ci }; 1708e5c31af7Sopenharmony_ci }, 1709e5c31af7Sopenharmony_ci 'color-output': function colorOutput(buffer, m) { 1710e5c31af7Sopenharmony_ci return { 1711e5c31af7Sopenharmony_ci type_: 'color', 1712e5c31af7Sopenharmony_ci color1: m[0], 1713e5c31af7Sopenharmony_ci color2: mhchemParser.go(m[1]) 1714e5c31af7Sopenharmony_ci }; 1715e5c31af7Sopenharmony_ci }, 1716e5c31af7Sopenharmony_ci 'r=': function r(buffer, m) { 1717e5c31af7Sopenharmony_ci buffer.r = m; 1718e5c31af7Sopenharmony_ci }, 1719e5c31af7Sopenharmony_ci 'rdt=': function rdt(buffer, m) { 1720e5c31af7Sopenharmony_ci buffer.rdt = m; 1721e5c31af7Sopenharmony_ci }, 1722e5c31af7Sopenharmony_ci 'rd=': function rd(buffer, m) { 1723e5c31af7Sopenharmony_ci buffer.rd = m; 1724e5c31af7Sopenharmony_ci }, 1725e5c31af7Sopenharmony_ci 'rqt=': function rqt(buffer, m) { 1726e5c31af7Sopenharmony_ci buffer.rqt = m; 1727e5c31af7Sopenharmony_ci }, 1728e5c31af7Sopenharmony_ci 'rq=': function rq(buffer, m) { 1729e5c31af7Sopenharmony_ci buffer.rq = m; 1730e5c31af7Sopenharmony_ci }, 1731e5c31af7Sopenharmony_ci 'operator': function operator(buffer, m, p1) { 1732e5c31af7Sopenharmony_ci return { 1733e5c31af7Sopenharmony_ci type_: 'operator', 1734e5c31af7Sopenharmony_ci kind_: p1 || m 1735e5c31af7Sopenharmony_ci }; 1736e5c31af7Sopenharmony_ci } 1737e5c31af7Sopenharmony_ci } 1738e5c31af7Sopenharmony_ci }, 1739e5c31af7Sopenharmony_ci 'a': { 1740e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 1741e5c31af7Sopenharmony_ci 'empty': { 1742e5c31af7Sopenharmony_ci '*': {} 1743e5c31af7Sopenharmony_ci }, 1744e5c31af7Sopenharmony_ci '1/2$': { 1745e5c31af7Sopenharmony_ci '0': { 1746e5c31af7Sopenharmony_ci action_: '1/2' 1747e5c31af7Sopenharmony_ci } 1748e5c31af7Sopenharmony_ci }, 1749e5c31af7Sopenharmony_ci 'else': { 1750e5c31af7Sopenharmony_ci '0': { 1751e5c31af7Sopenharmony_ci nextState: '1', 1752e5c31af7Sopenharmony_ci revisit: true 1753e5c31af7Sopenharmony_ci } 1754e5c31af7Sopenharmony_ci }, 1755e5c31af7Sopenharmony_ci '$(...)$': { 1756e5c31af7Sopenharmony_ci '*': { 1757e5c31af7Sopenharmony_ci action_: 'tex-math tight', 1758e5c31af7Sopenharmony_ci nextState: '1' 1759e5c31af7Sopenharmony_ci } 1760e5c31af7Sopenharmony_ci }, 1761e5c31af7Sopenharmony_ci ',': { 1762e5c31af7Sopenharmony_ci '*': { 1763e5c31af7Sopenharmony_ci action_: { 1764e5c31af7Sopenharmony_ci type_: 'insert', 1765e5c31af7Sopenharmony_ci option: 'commaDecimal' 1766e5c31af7Sopenharmony_ci } 1767e5c31af7Sopenharmony_ci } 1768e5c31af7Sopenharmony_ci }, 1769e5c31af7Sopenharmony_ci 'else2': { 1770e5c31af7Sopenharmony_ci '*': { 1771e5c31af7Sopenharmony_ci action_: 'copy' 1772e5c31af7Sopenharmony_ci } 1773e5c31af7Sopenharmony_ci } 1774e5c31af7Sopenharmony_ci }), 1775e5c31af7Sopenharmony_ci actions: {} 1776e5c31af7Sopenharmony_ci }, 1777e5c31af7Sopenharmony_ci 'o': { 1778e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 1779e5c31af7Sopenharmony_ci 'empty': { 1780e5c31af7Sopenharmony_ci '*': {} 1781e5c31af7Sopenharmony_ci }, 1782e5c31af7Sopenharmony_ci '1/2$': { 1783e5c31af7Sopenharmony_ci '0': { 1784e5c31af7Sopenharmony_ci action_: '1/2' 1785e5c31af7Sopenharmony_ci } 1786e5c31af7Sopenharmony_ci }, 1787e5c31af7Sopenharmony_ci 'else': { 1788e5c31af7Sopenharmony_ci '0': { 1789e5c31af7Sopenharmony_ci nextState: '1', 1790e5c31af7Sopenharmony_ci revisit: true 1791e5c31af7Sopenharmony_ci } 1792e5c31af7Sopenharmony_ci }, 1793e5c31af7Sopenharmony_ci 'letters': { 1794e5c31af7Sopenharmony_ci '*': { 1795e5c31af7Sopenharmony_ci action_: 'rm' 1796e5c31af7Sopenharmony_ci } 1797e5c31af7Sopenharmony_ci }, 1798e5c31af7Sopenharmony_ci '\\ca': { 1799e5c31af7Sopenharmony_ci '*': { 1800e5c31af7Sopenharmony_ci action_: { 1801e5c31af7Sopenharmony_ci type_: 'insert', 1802e5c31af7Sopenharmony_ci option: 'circa' 1803e5c31af7Sopenharmony_ci } 1804e5c31af7Sopenharmony_ci } 1805e5c31af7Sopenharmony_ci }, 1806e5c31af7Sopenharmony_ci '\\x{}{}|\\x{}|\\x': { 1807e5c31af7Sopenharmony_ci '*': { 1808e5c31af7Sopenharmony_ci action_: 'copy' 1809e5c31af7Sopenharmony_ci } 1810e5c31af7Sopenharmony_ci }, 1811e5c31af7Sopenharmony_ci '${(...)}$|$(...)$': { 1812e5c31af7Sopenharmony_ci '*': { 1813e5c31af7Sopenharmony_ci action_: 'tex-math' 1814e5c31af7Sopenharmony_ci } 1815e5c31af7Sopenharmony_ci }, 1816e5c31af7Sopenharmony_ci '{(...)}': { 1817e5c31af7Sopenharmony_ci '*': { 1818e5c31af7Sopenharmony_ci action_: '{text}' 1819e5c31af7Sopenharmony_ci } 1820e5c31af7Sopenharmony_ci }, 1821e5c31af7Sopenharmony_ci 'else2': { 1822e5c31af7Sopenharmony_ci '*': { 1823e5c31af7Sopenharmony_ci action_: 'copy' 1824e5c31af7Sopenharmony_ci } 1825e5c31af7Sopenharmony_ci } 1826e5c31af7Sopenharmony_ci }), 1827e5c31af7Sopenharmony_ci actions: {} 1828e5c31af7Sopenharmony_ci }, 1829e5c31af7Sopenharmony_ci 'text': { 1830e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 1831e5c31af7Sopenharmony_ci 'empty': { 1832e5c31af7Sopenharmony_ci '*': { 1833e5c31af7Sopenharmony_ci action_: 'output' 1834e5c31af7Sopenharmony_ci } 1835e5c31af7Sopenharmony_ci }, 1836e5c31af7Sopenharmony_ci '{...}': { 1837e5c31af7Sopenharmony_ci '*': { 1838e5c31af7Sopenharmony_ci action_: 'text=' 1839e5c31af7Sopenharmony_ci } 1840e5c31af7Sopenharmony_ci }, 1841e5c31af7Sopenharmony_ci '${(...)}$|$(...)$': { 1842e5c31af7Sopenharmony_ci '*': { 1843e5c31af7Sopenharmony_ci action_: 'tex-math' 1844e5c31af7Sopenharmony_ci } 1845e5c31af7Sopenharmony_ci }, 1846e5c31af7Sopenharmony_ci '\\greek': { 1847e5c31af7Sopenharmony_ci '*': { 1848e5c31af7Sopenharmony_ci action_: ['output', 'rm'] 1849e5c31af7Sopenharmony_ci } 1850e5c31af7Sopenharmony_ci }, 1851e5c31af7Sopenharmony_ci '\\,|\\x{}{}|\\x{}|\\x': { 1852e5c31af7Sopenharmony_ci '*': { 1853e5c31af7Sopenharmony_ci action_: ['output', 'copy'] 1854e5c31af7Sopenharmony_ci } 1855e5c31af7Sopenharmony_ci }, 1856e5c31af7Sopenharmony_ci 'else': { 1857e5c31af7Sopenharmony_ci '*': { 1858e5c31af7Sopenharmony_ci action_: 'text=' 1859e5c31af7Sopenharmony_ci } 1860e5c31af7Sopenharmony_ci } 1861e5c31af7Sopenharmony_ci }), 1862e5c31af7Sopenharmony_ci actions: { 1863e5c31af7Sopenharmony_ci 'output': function output(buffer) { 1864e5c31af7Sopenharmony_ci if (buffer.text_) { 1865e5c31af7Sopenharmony_ci /** @type {ParserOutput} */ 1866e5c31af7Sopenharmony_ci var ret = { 1867e5c31af7Sopenharmony_ci type_: 'text', 1868e5c31af7Sopenharmony_ci p1: buffer.text_ 1869e5c31af7Sopenharmony_ci }; 1870e5c31af7Sopenharmony_ci 1871e5c31af7Sopenharmony_ci for (var p in buffer) { 1872e5c31af7Sopenharmony_ci delete buffer[p]; 1873e5c31af7Sopenharmony_ci } 1874e5c31af7Sopenharmony_ci 1875e5c31af7Sopenharmony_ci return ret; 1876e5c31af7Sopenharmony_ci } 1877e5c31af7Sopenharmony_ci } 1878e5c31af7Sopenharmony_ci } 1879e5c31af7Sopenharmony_ci }, 1880e5c31af7Sopenharmony_ci 'pq': { 1881e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 1882e5c31af7Sopenharmony_ci 'empty': { 1883e5c31af7Sopenharmony_ci '*': {} 1884e5c31af7Sopenharmony_ci }, 1885e5c31af7Sopenharmony_ci 'state of aggregation $': { 1886e5c31af7Sopenharmony_ci '*': { 1887e5c31af7Sopenharmony_ci action_: 'state of aggregation' 1888e5c31af7Sopenharmony_ci } 1889e5c31af7Sopenharmony_ci }, 1890e5c31af7Sopenharmony_ci 'i$': { 1891e5c31af7Sopenharmony_ci '0': { 1892e5c31af7Sopenharmony_ci nextState: '!f', 1893e5c31af7Sopenharmony_ci revisit: true 1894e5c31af7Sopenharmony_ci } 1895e5c31af7Sopenharmony_ci }, 1896e5c31af7Sopenharmony_ci '(KV letters),': { 1897e5c31af7Sopenharmony_ci '0': { 1898e5c31af7Sopenharmony_ci action_: 'rm', 1899e5c31af7Sopenharmony_ci nextState: '0' 1900e5c31af7Sopenharmony_ci } 1901e5c31af7Sopenharmony_ci }, 1902e5c31af7Sopenharmony_ci 'formula$': { 1903e5c31af7Sopenharmony_ci '0': { 1904e5c31af7Sopenharmony_ci nextState: 'f', 1905e5c31af7Sopenharmony_ci revisit: true 1906e5c31af7Sopenharmony_ci } 1907e5c31af7Sopenharmony_ci }, 1908e5c31af7Sopenharmony_ci '1/2$': { 1909e5c31af7Sopenharmony_ci '0': { 1910e5c31af7Sopenharmony_ci action_: '1/2' 1911e5c31af7Sopenharmony_ci } 1912e5c31af7Sopenharmony_ci }, 1913e5c31af7Sopenharmony_ci 'else': { 1914e5c31af7Sopenharmony_ci '0': { 1915e5c31af7Sopenharmony_ci nextState: '!f', 1916e5c31af7Sopenharmony_ci revisit: true 1917e5c31af7Sopenharmony_ci } 1918e5c31af7Sopenharmony_ci }, 1919e5c31af7Sopenharmony_ci '${(...)}$|$(...)$': { 1920e5c31af7Sopenharmony_ci '*': { 1921e5c31af7Sopenharmony_ci action_: 'tex-math' 1922e5c31af7Sopenharmony_ci } 1923e5c31af7Sopenharmony_ci }, 1924e5c31af7Sopenharmony_ci '{(...)}': { 1925e5c31af7Sopenharmony_ci '*': { 1926e5c31af7Sopenharmony_ci action_: 'text' 1927e5c31af7Sopenharmony_ci } 1928e5c31af7Sopenharmony_ci }, 1929e5c31af7Sopenharmony_ci 'a-z': { 1930e5c31af7Sopenharmony_ci 'f': { 1931e5c31af7Sopenharmony_ci action_: 'tex-math' 1932e5c31af7Sopenharmony_ci } 1933e5c31af7Sopenharmony_ci }, 1934e5c31af7Sopenharmony_ci 'letters': { 1935e5c31af7Sopenharmony_ci '*': { 1936e5c31af7Sopenharmony_ci action_: 'rm' 1937e5c31af7Sopenharmony_ci } 1938e5c31af7Sopenharmony_ci }, 1939e5c31af7Sopenharmony_ci '-9.,9': { 1940e5c31af7Sopenharmony_ci '*': { 1941e5c31af7Sopenharmony_ci action_: '9,9' 1942e5c31af7Sopenharmony_ci } 1943e5c31af7Sopenharmony_ci }, 1944e5c31af7Sopenharmony_ci ',': { 1945e5c31af7Sopenharmony_ci '*': { 1946e5c31af7Sopenharmony_ci action_: { 1947e5c31af7Sopenharmony_ci type_: 'insert+p1', 1948e5c31af7Sopenharmony_ci option: 'comma enumeration S' 1949e5c31af7Sopenharmony_ci } 1950e5c31af7Sopenharmony_ci } 1951e5c31af7Sopenharmony_ci }, 1952e5c31af7Sopenharmony_ci '\\color{(...)}{(...)}1|\\color(...){(...)}2': { 1953e5c31af7Sopenharmony_ci '*': { 1954e5c31af7Sopenharmony_ci action_: 'color-output' 1955e5c31af7Sopenharmony_ci } 1956e5c31af7Sopenharmony_ci }, 1957e5c31af7Sopenharmony_ci '\\color{(...)}0': { 1958e5c31af7Sopenharmony_ci '*': { 1959e5c31af7Sopenharmony_ci action_: 'color0-output' 1960e5c31af7Sopenharmony_ci } 1961e5c31af7Sopenharmony_ci }, 1962e5c31af7Sopenharmony_ci '\\ce{(...)}': { 1963e5c31af7Sopenharmony_ci '*': { 1964e5c31af7Sopenharmony_ci action_: 'ce' 1965e5c31af7Sopenharmony_ci } 1966e5c31af7Sopenharmony_ci }, 1967e5c31af7Sopenharmony_ci '\\,|\\x{}{}|\\x{}|\\x': { 1968e5c31af7Sopenharmony_ci '*': { 1969e5c31af7Sopenharmony_ci action_: 'copy' 1970e5c31af7Sopenharmony_ci } 1971e5c31af7Sopenharmony_ci }, 1972e5c31af7Sopenharmony_ci 'else2': { 1973e5c31af7Sopenharmony_ci '*': { 1974e5c31af7Sopenharmony_ci action_: 'copy' 1975e5c31af7Sopenharmony_ci } 1976e5c31af7Sopenharmony_ci } 1977e5c31af7Sopenharmony_ci }), 1978e5c31af7Sopenharmony_ci actions: { 1979e5c31af7Sopenharmony_ci 'state of aggregation': function stateOfAggregation(buffer, m) { 1980e5c31af7Sopenharmony_ci return { 1981e5c31af7Sopenharmony_ci type_: 'state of aggregation subscript', 1982e5c31af7Sopenharmony_ci p1: mhchemParser.go(m, 'o') 1983e5c31af7Sopenharmony_ci }; 1984e5c31af7Sopenharmony_ci }, 1985e5c31af7Sopenharmony_ci 'color-output': function colorOutput(buffer, m) { 1986e5c31af7Sopenharmony_ci return { 1987e5c31af7Sopenharmony_ci type_: 'color', 1988e5c31af7Sopenharmony_ci color1: m[0], 1989e5c31af7Sopenharmony_ci color2: mhchemParser.go(m[1], 'pq') 1990e5c31af7Sopenharmony_ci }; 1991e5c31af7Sopenharmony_ci } 1992e5c31af7Sopenharmony_ci } 1993e5c31af7Sopenharmony_ci }, 1994e5c31af7Sopenharmony_ci 'bd': { 1995e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 1996e5c31af7Sopenharmony_ci 'empty': { 1997e5c31af7Sopenharmony_ci '*': {} 1998e5c31af7Sopenharmony_ci }, 1999e5c31af7Sopenharmony_ci 'x$': { 2000e5c31af7Sopenharmony_ci '0': { 2001e5c31af7Sopenharmony_ci nextState: '!f', 2002e5c31af7Sopenharmony_ci revisit: true 2003e5c31af7Sopenharmony_ci } 2004e5c31af7Sopenharmony_ci }, 2005e5c31af7Sopenharmony_ci 'formula$': { 2006e5c31af7Sopenharmony_ci '0': { 2007e5c31af7Sopenharmony_ci nextState: 'f', 2008e5c31af7Sopenharmony_ci revisit: true 2009e5c31af7Sopenharmony_ci } 2010e5c31af7Sopenharmony_ci }, 2011e5c31af7Sopenharmony_ci 'else': { 2012e5c31af7Sopenharmony_ci '0': { 2013e5c31af7Sopenharmony_ci nextState: '!f', 2014e5c31af7Sopenharmony_ci revisit: true 2015e5c31af7Sopenharmony_ci } 2016e5c31af7Sopenharmony_ci }, 2017e5c31af7Sopenharmony_ci '-9.,9 no missing 0': { 2018e5c31af7Sopenharmony_ci '*': { 2019e5c31af7Sopenharmony_ci action_: '9,9' 2020e5c31af7Sopenharmony_ci } 2021e5c31af7Sopenharmony_ci }, 2022e5c31af7Sopenharmony_ci '.': { 2023e5c31af7Sopenharmony_ci '*': { 2024e5c31af7Sopenharmony_ci action_: { 2025e5c31af7Sopenharmony_ci type_: 'insert', 2026e5c31af7Sopenharmony_ci option: 'electron dot' 2027e5c31af7Sopenharmony_ci } 2028e5c31af7Sopenharmony_ci } 2029e5c31af7Sopenharmony_ci }, 2030e5c31af7Sopenharmony_ci 'a-z': { 2031e5c31af7Sopenharmony_ci 'f': { 2032e5c31af7Sopenharmony_ci action_: 'tex-math' 2033e5c31af7Sopenharmony_ci } 2034e5c31af7Sopenharmony_ci }, 2035e5c31af7Sopenharmony_ci 'x': { 2036e5c31af7Sopenharmony_ci '*': { 2037e5c31af7Sopenharmony_ci action_: { 2038e5c31af7Sopenharmony_ci type_: 'insert', 2039e5c31af7Sopenharmony_ci option: 'KV x' 2040e5c31af7Sopenharmony_ci } 2041e5c31af7Sopenharmony_ci } 2042e5c31af7Sopenharmony_ci }, 2043e5c31af7Sopenharmony_ci 'letters': { 2044e5c31af7Sopenharmony_ci '*': { 2045e5c31af7Sopenharmony_ci action_: 'rm' 2046e5c31af7Sopenharmony_ci } 2047e5c31af7Sopenharmony_ci }, 2048e5c31af7Sopenharmony_ci '\'': { 2049e5c31af7Sopenharmony_ci '*': { 2050e5c31af7Sopenharmony_ci action_: { 2051e5c31af7Sopenharmony_ci type_: 'insert', 2052e5c31af7Sopenharmony_ci option: 'prime' 2053e5c31af7Sopenharmony_ci } 2054e5c31af7Sopenharmony_ci } 2055e5c31af7Sopenharmony_ci }, 2056e5c31af7Sopenharmony_ci '${(...)}$|$(...)$': { 2057e5c31af7Sopenharmony_ci '*': { 2058e5c31af7Sopenharmony_ci action_: 'tex-math' 2059e5c31af7Sopenharmony_ci } 2060e5c31af7Sopenharmony_ci }, 2061e5c31af7Sopenharmony_ci '{(...)}': { 2062e5c31af7Sopenharmony_ci '*': { 2063e5c31af7Sopenharmony_ci action_: 'text' 2064e5c31af7Sopenharmony_ci } 2065e5c31af7Sopenharmony_ci }, 2066e5c31af7Sopenharmony_ci '\\color{(...)}{(...)}1|\\color(...){(...)}2': { 2067e5c31af7Sopenharmony_ci '*': { 2068e5c31af7Sopenharmony_ci action_: 'color-output' 2069e5c31af7Sopenharmony_ci } 2070e5c31af7Sopenharmony_ci }, 2071e5c31af7Sopenharmony_ci '\\color{(...)}0': { 2072e5c31af7Sopenharmony_ci '*': { 2073e5c31af7Sopenharmony_ci action_: 'color0-output' 2074e5c31af7Sopenharmony_ci } 2075e5c31af7Sopenharmony_ci }, 2076e5c31af7Sopenharmony_ci '\\ce{(...)}': { 2077e5c31af7Sopenharmony_ci '*': { 2078e5c31af7Sopenharmony_ci action_: 'ce' 2079e5c31af7Sopenharmony_ci } 2080e5c31af7Sopenharmony_ci }, 2081e5c31af7Sopenharmony_ci '\\,|\\x{}{}|\\x{}|\\x': { 2082e5c31af7Sopenharmony_ci '*': { 2083e5c31af7Sopenharmony_ci action_: 'copy' 2084e5c31af7Sopenharmony_ci } 2085e5c31af7Sopenharmony_ci }, 2086e5c31af7Sopenharmony_ci 'else2': { 2087e5c31af7Sopenharmony_ci '*': { 2088e5c31af7Sopenharmony_ci action_: 'copy' 2089e5c31af7Sopenharmony_ci } 2090e5c31af7Sopenharmony_ci } 2091e5c31af7Sopenharmony_ci }), 2092e5c31af7Sopenharmony_ci actions: { 2093e5c31af7Sopenharmony_ci 'color-output': function colorOutput(buffer, m) { 2094e5c31af7Sopenharmony_ci return { 2095e5c31af7Sopenharmony_ci type_: 'color', 2096e5c31af7Sopenharmony_ci color1: m[0], 2097e5c31af7Sopenharmony_ci color2: mhchemParser.go(m[1], 'bd') 2098e5c31af7Sopenharmony_ci }; 2099e5c31af7Sopenharmony_ci } 2100e5c31af7Sopenharmony_ci } 2101e5c31af7Sopenharmony_ci }, 2102e5c31af7Sopenharmony_ci 'oxidation': { 2103e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 2104e5c31af7Sopenharmony_ci 'empty': { 2105e5c31af7Sopenharmony_ci '*': {} 2106e5c31af7Sopenharmony_ci }, 2107e5c31af7Sopenharmony_ci 'roman numeral': { 2108e5c31af7Sopenharmony_ci '*': { 2109e5c31af7Sopenharmony_ci action_: 'roman-numeral' 2110e5c31af7Sopenharmony_ci } 2111e5c31af7Sopenharmony_ci }, 2112e5c31af7Sopenharmony_ci '${(...)}$|$(...)$': { 2113e5c31af7Sopenharmony_ci '*': { 2114e5c31af7Sopenharmony_ci action_: 'tex-math' 2115e5c31af7Sopenharmony_ci } 2116e5c31af7Sopenharmony_ci }, 2117e5c31af7Sopenharmony_ci 'else': { 2118e5c31af7Sopenharmony_ci '*': { 2119e5c31af7Sopenharmony_ci action_: 'copy' 2120e5c31af7Sopenharmony_ci } 2121e5c31af7Sopenharmony_ci } 2122e5c31af7Sopenharmony_ci }), 2123e5c31af7Sopenharmony_ci actions: { 2124e5c31af7Sopenharmony_ci 'roman-numeral': function romanNumeral(buffer, m) { 2125e5c31af7Sopenharmony_ci return { 2126e5c31af7Sopenharmony_ci type_: 'roman numeral', 2127e5c31af7Sopenharmony_ci p1: m || "" 2128e5c31af7Sopenharmony_ci }; 2129e5c31af7Sopenharmony_ci } 2130e5c31af7Sopenharmony_ci } 2131e5c31af7Sopenharmony_ci }, 2132e5c31af7Sopenharmony_ci 'tex-math': { 2133e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 2134e5c31af7Sopenharmony_ci 'empty': { 2135e5c31af7Sopenharmony_ci '*': { 2136e5c31af7Sopenharmony_ci action_: 'output' 2137e5c31af7Sopenharmony_ci } 2138e5c31af7Sopenharmony_ci }, 2139e5c31af7Sopenharmony_ci '\\ce{(...)}': { 2140e5c31af7Sopenharmony_ci '*': { 2141e5c31af7Sopenharmony_ci action_: ['output', 'ce'] 2142e5c31af7Sopenharmony_ci } 2143e5c31af7Sopenharmony_ci }, 2144e5c31af7Sopenharmony_ci '{...}|\\,|\\x{}{}|\\x{}|\\x': { 2145e5c31af7Sopenharmony_ci '*': { 2146e5c31af7Sopenharmony_ci action_: 'o=' 2147e5c31af7Sopenharmony_ci } 2148e5c31af7Sopenharmony_ci }, 2149e5c31af7Sopenharmony_ci 'else': { 2150e5c31af7Sopenharmony_ci '*': { 2151e5c31af7Sopenharmony_ci action_: 'o=' 2152e5c31af7Sopenharmony_ci } 2153e5c31af7Sopenharmony_ci } 2154e5c31af7Sopenharmony_ci }), 2155e5c31af7Sopenharmony_ci actions: { 2156e5c31af7Sopenharmony_ci 'output': function output(buffer) { 2157e5c31af7Sopenharmony_ci if (buffer.o) { 2158e5c31af7Sopenharmony_ci /** @type {ParserOutput} */ 2159e5c31af7Sopenharmony_ci var ret = { 2160e5c31af7Sopenharmony_ci type_: 'tex-math', 2161e5c31af7Sopenharmony_ci p1: buffer.o 2162e5c31af7Sopenharmony_ci }; 2163e5c31af7Sopenharmony_ci 2164e5c31af7Sopenharmony_ci for (var p in buffer) { 2165e5c31af7Sopenharmony_ci delete buffer[p]; 2166e5c31af7Sopenharmony_ci } 2167e5c31af7Sopenharmony_ci 2168e5c31af7Sopenharmony_ci return ret; 2169e5c31af7Sopenharmony_ci } 2170e5c31af7Sopenharmony_ci } 2171e5c31af7Sopenharmony_ci } 2172e5c31af7Sopenharmony_ci }, 2173e5c31af7Sopenharmony_ci 'tex-math tight': { 2174e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 2175e5c31af7Sopenharmony_ci 'empty': { 2176e5c31af7Sopenharmony_ci '*': { 2177e5c31af7Sopenharmony_ci action_: 'output' 2178e5c31af7Sopenharmony_ci } 2179e5c31af7Sopenharmony_ci }, 2180e5c31af7Sopenharmony_ci '\\ce{(...)}': { 2181e5c31af7Sopenharmony_ci '*': { 2182e5c31af7Sopenharmony_ci action_: ['output', 'ce'] 2183e5c31af7Sopenharmony_ci } 2184e5c31af7Sopenharmony_ci }, 2185e5c31af7Sopenharmony_ci '{...}|\\,|\\x{}{}|\\x{}|\\x': { 2186e5c31af7Sopenharmony_ci '*': { 2187e5c31af7Sopenharmony_ci action_: 'o=' 2188e5c31af7Sopenharmony_ci } 2189e5c31af7Sopenharmony_ci }, 2190e5c31af7Sopenharmony_ci '-|+': { 2191e5c31af7Sopenharmony_ci '*': { 2192e5c31af7Sopenharmony_ci action_: 'tight operator' 2193e5c31af7Sopenharmony_ci } 2194e5c31af7Sopenharmony_ci }, 2195e5c31af7Sopenharmony_ci 'else': { 2196e5c31af7Sopenharmony_ci '*': { 2197e5c31af7Sopenharmony_ci action_: 'o=' 2198e5c31af7Sopenharmony_ci } 2199e5c31af7Sopenharmony_ci } 2200e5c31af7Sopenharmony_ci }), 2201e5c31af7Sopenharmony_ci actions: { 2202e5c31af7Sopenharmony_ci 'tight operator': function tightOperator(buffer, m) { 2203e5c31af7Sopenharmony_ci buffer.o = (buffer.o || "") + "{" + m + "}"; 2204e5c31af7Sopenharmony_ci }, 2205e5c31af7Sopenharmony_ci 'output': function output(buffer) { 2206e5c31af7Sopenharmony_ci if (buffer.o) { 2207e5c31af7Sopenharmony_ci /** @type {ParserOutput} */ 2208e5c31af7Sopenharmony_ci var ret = { 2209e5c31af7Sopenharmony_ci type_: 'tex-math', 2210e5c31af7Sopenharmony_ci p1: buffer.o 2211e5c31af7Sopenharmony_ci }; 2212e5c31af7Sopenharmony_ci 2213e5c31af7Sopenharmony_ci for (var p in buffer) { 2214e5c31af7Sopenharmony_ci delete buffer[p]; 2215e5c31af7Sopenharmony_ci } 2216e5c31af7Sopenharmony_ci 2217e5c31af7Sopenharmony_ci return ret; 2218e5c31af7Sopenharmony_ci } 2219e5c31af7Sopenharmony_ci } 2220e5c31af7Sopenharmony_ci } 2221e5c31af7Sopenharmony_ci }, 2222e5c31af7Sopenharmony_ci '9,9': { 2223e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 2224e5c31af7Sopenharmony_ci 'empty': { 2225e5c31af7Sopenharmony_ci '*': {} 2226e5c31af7Sopenharmony_ci }, 2227e5c31af7Sopenharmony_ci ',': { 2228e5c31af7Sopenharmony_ci '*': { 2229e5c31af7Sopenharmony_ci action_: 'comma' 2230e5c31af7Sopenharmony_ci } 2231e5c31af7Sopenharmony_ci }, 2232e5c31af7Sopenharmony_ci 'else': { 2233e5c31af7Sopenharmony_ci '*': { 2234e5c31af7Sopenharmony_ci action_: 'copy' 2235e5c31af7Sopenharmony_ci } 2236e5c31af7Sopenharmony_ci } 2237e5c31af7Sopenharmony_ci }), 2238e5c31af7Sopenharmony_ci actions: { 2239e5c31af7Sopenharmony_ci 'comma': function comma() { 2240e5c31af7Sopenharmony_ci return { 2241e5c31af7Sopenharmony_ci type_: 'commaDecimal' 2242e5c31af7Sopenharmony_ci }; 2243e5c31af7Sopenharmony_ci } 2244e5c31af7Sopenharmony_ci } 2245e5c31af7Sopenharmony_ci }, 2246e5c31af7Sopenharmony_ci //#endregion 2247e5c31af7Sopenharmony_ci // 2248e5c31af7Sopenharmony_ci // \pu state machines 2249e5c31af7Sopenharmony_ci // 2250e5c31af7Sopenharmony_ci //#region pu 2251e5c31af7Sopenharmony_ci 'pu': { 2252e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 2253e5c31af7Sopenharmony_ci 'empty': { 2254e5c31af7Sopenharmony_ci '*': { 2255e5c31af7Sopenharmony_ci action_: 'output' 2256e5c31af7Sopenharmony_ci } 2257e5c31af7Sopenharmony_ci }, 2258e5c31af7Sopenharmony_ci 'space$': { 2259e5c31af7Sopenharmony_ci '*': { 2260e5c31af7Sopenharmony_ci action_: ['output', 'space'] 2261e5c31af7Sopenharmony_ci } 2262e5c31af7Sopenharmony_ci }, 2263e5c31af7Sopenharmony_ci '{[(|)]}': { 2264e5c31af7Sopenharmony_ci '0|a': { 2265e5c31af7Sopenharmony_ci action_: 'copy' 2266e5c31af7Sopenharmony_ci } 2267e5c31af7Sopenharmony_ci }, 2268e5c31af7Sopenharmony_ci '(-)(9)^(-9)': { 2269e5c31af7Sopenharmony_ci '0': { 2270e5c31af7Sopenharmony_ci action_: 'number^', 2271e5c31af7Sopenharmony_ci nextState: 'a' 2272e5c31af7Sopenharmony_ci } 2273e5c31af7Sopenharmony_ci }, 2274e5c31af7Sopenharmony_ci '(-)(9.,9)(e)(99)': { 2275e5c31af7Sopenharmony_ci '0': { 2276e5c31af7Sopenharmony_ci action_: 'enumber', 2277e5c31af7Sopenharmony_ci nextState: 'a' 2278e5c31af7Sopenharmony_ci } 2279e5c31af7Sopenharmony_ci }, 2280e5c31af7Sopenharmony_ci 'space': { 2281e5c31af7Sopenharmony_ci '0|a': {} 2282e5c31af7Sopenharmony_ci }, 2283e5c31af7Sopenharmony_ci 'pm-operator': { 2284e5c31af7Sopenharmony_ci '0|a': { 2285e5c31af7Sopenharmony_ci action_: { 2286e5c31af7Sopenharmony_ci type_: 'operator', 2287e5c31af7Sopenharmony_ci option: '\\pm' 2288e5c31af7Sopenharmony_ci }, 2289e5c31af7Sopenharmony_ci nextState: '0' 2290e5c31af7Sopenharmony_ci } 2291e5c31af7Sopenharmony_ci }, 2292e5c31af7Sopenharmony_ci 'operator': { 2293e5c31af7Sopenharmony_ci '0|a': { 2294e5c31af7Sopenharmony_ci action_: 'copy', 2295e5c31af7Sopenharmony_ci nextState: '0' 2296e5c31af7Sopenharmony_ci } 2297e5c31af7Sopenharmony_ci }, 2298e5c31af7Sopenharmony_ci '//': { 2299e5c31af7Sopenharmony_ci 'd': { 2300e5c31af7Sopenharmony_ci action_: 'o=', 2301e5c31af7Sopenharmony_ci nextState: '/' 2302e5c31af7Sopenharmony_ci } 2303e5c31af7Sopenharmony_ci }, 2304e5c31af7Sopenharmony_ci '/': { 2305e5c31af7Sopenharmony_ci 'd': { 2306e5c31af7Sopenharmony_ci action_: 'o=', 2307e5c31af7Sopenharmony_ci nextState: '/' 2308e5c31af7Sopenharmony_ci } 2309e5c31af7Sopenharmony_ci }, 2310e5c31af7Sopenharmony_ci '{...}|else': { 2311e5c31af7Sopenharmony_ci '0|d': { 2312e5c31af7Sopenharmony_ci action_: 'd=', 2313e5c31af7Sopenharmony_ci nextState: 'd' 2314e5c31af7Sopenharmony_ci }, 2315e5c31af7Sopenharmony_ci 'a': { 2316e5c31af7Sopenharmony_ci action_: ['space', 'd='], 2317e5c31af7Sopenharmony_ci nextState: 'd' 2318e5c31af7Sopenharmony_ci }, 2319e5c31af7Sopenharmony_ci '/|q': { 2320e5c31af7Sopenharmony_ci action_: 'q=', 2321e5c31af7Sopenharmony_ci nextState: 'q' 2322e5c31af7Sopenharmony_ci } 2323e5c31af7Sopenharmony_ci } 2324e5c31af7Sopenharmony_ci }), 2325e5c31af7Sopenharmony_ci actions: { 2326e5c31af7Sopenharmony_ci 'enumber': function enumber(buffer, m) { 2327e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 2328e5c31af7Sopenharmony_ci var ret = []; 2329e5c31af7Sopenharmony_ci 2330e5c31af7Sopenharmony_ci if (m[0] === "+-" || m[0] === "+/-") { 2331e5c31af7Sopenharmony_ci ret.push("\\pm "); 2332e5c31af7Sopenharmony_ci } else if (m[0]) { 2333e5c31af7Sopenharmony_ci ret.push(m[0]); 2334e5c31af7Sopenharmony_ci } 2335e5c31af7Sopenharmony_ci 2336e5c31af7Sopenharmony_ci if (m[1]) { 2337e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); 2338e5c31af7Sopenharmony_ci 2339e5c31af7Sopenharmony_ci if (m[2]) { 2340e5c31af7Sopenharmony_ci if (m[2].match(/[,.]/)) { 2341e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9')); 2342e5c31af7Sopenharmony_ci } else { 2343e5c31af7Sopenharmony_ci ret.push(m[2]); 2344e5c31af7Sopenharmony_ci } 2345e5c31af7Sopenharmony_ci } 2346e5c31af7Sopenharmony_ci 2347e5c31af7Sopenharmony_ci m[3] = m[4] || m[3]; 2348e5c31af7Sopenharmony_ci 2349e5c31af7Sopenharmony_ci if (m[3]) { 2350e5c31af7Sopenharmony_ci m[3] = m[3].trim(); 2351e5c31af7Sopenharmony_ci 2352e5c31af7Sopenharmony_ci if (m[3] === "e" || m[3].substr(0, 1) === "*") { 2353e5c31af7Sopenharmony_ci ret.push({ 2354e5c31af7Sopenharmony_ci type_: 'cdot' 2355e5c31af7Sopenharmony_ci }); 2356e5c31af7Sopenharmony_ci } else { 2357e5c31af7Sopenharmony_ci ret.push({ 2358e5c31af7Sopenharmony_ci type_: 'times' 2359e5c31af7Sopenharmony_ci }); 2360e5c31af7Sopenharmony_ci } 2361e5c31af7Sopenharmony_ci } 2362e5c31af7Sopenharmony_ci } 2363e5c31af7Sopenharmony_ci 2364e5c31af7Sopenharmony_ci if (m[3]) { 2365e5c31af7Sopenharmony_ci ret.push("10^{" + m[5] + "}"); 2366e5c31af7Sopenharmony_ci } 2367e5c31af7Sopenharmony_ci 2368e5c31af7Sopenharmony_ci return ret; 2369e5c31af7Sopenharmony_ci }, 2370e5c31af7Sopenharmony_ci 'number^': function number(buffer, m) { 2371e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 2372e5c31af7Sopenharmony_ci var ret = []; 2373e5c31af7Sopenharmony_ci 2374e5c31af7Sopenharmony_ci if (m[0] === "+-" || m[0] === "+/-") { 2375e5c31af7Sopenharmony_ci ret.push("\\pm "); 2376e5c31af7Sopenharmony_ci } else if (m[0]) { 2377e5c31af7Sopenharmony_ci ret.push(m[0]); 2378e5c31af7Sopenharmony_ci } 2379e5c31af7Sopenharmony_ci 2380e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); 2381e5c31af7Sopenharmony_ci ret.push("^{" + m[2] + "}"); 2382e5c31af7Sopenharmony_ci return ret; 2383e5c31af7Sopenharmony_ci }, 2384e5c31af7Sopenharmony_ci 'operator': function operator(buffer, m, p1) { 2385e5c31af7Sopenharmony_ci return { 2386e5c31af7Sopenharmony_ci type_: 'operator', 2387e5c31af7Sopenharmony_ci kind_: p1 || m 2388e5c31af7Sopenharmony_ci }; 2389e5c31af7Sopenharmony_ci }, 2390e5c31af7Sopenharmony_ci 'space': function space() { 2391e5c31af7Sopenharmony_ci return { 2392e5c31af7Sopenharmony_ci type_: 'pu-space-1' 2393e5c31af7Sopenharmony_ci }; 2394e5c31af7Sopenharmony_ci }, 2395e5c31af7Sopenharmony_ci 'output': function output(buffer) { 2396e5c31af7Sopenharmony_ci /** @type {ParserOutput | ParserOutput[]} */ 2397e5c31af7Sopenharmony_ci var ret; 2398e5c31af7Sopenharmony_ci var md = mhchemParser.patterns.match_('{(...)}', buffer.d || ""); 2399e5c31af7Sopenharmony_ci 2400e5c31af7Sopenharmony_ci if (md && md.remainder === '') { 2401e5c31af7Sopenharmony_ci buffer.d = md.match_; 2402e5c31af7Sopenharmony_ci } 2403e5c31af7Sopenharmony_ci 2404e5c31af7Sopenharmony_ci var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || ""); 2405e5c31af7Sopenharmony_ci 2406e5c31af7Sopenharmony_ci if (mq && mq.remainder === '') { 2407e5c31af7Sopenharmony_ci buffer.q = mq.match_; 2408e5c31af7Sopenharmony_ci } 2409e5c31af7Sopenharmony_ci 2410e5c31af7Sopenharmony_ci if (buffer.d) { 2411e5c31af7Sopenharmony_ci buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); 2412e5c31af7Sopenharmony_ci buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); 2413e5c31af7Sopenharmony_ci } 2414e5c31af7Sopenharmony_ci 2415e5c31af7Sopenharmony_ci if (buffer.q) { 2416e5c31af7Sopenharmony_ci // fraction 2417e5c31af7Sopenharmony_ci buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); 2418e5c31af7Sopenharmony_ci buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); 2419e5c31af7Sopenharmony_ci var b5 = { 2420e5c31af7Sopenharmony_ci d: mhchemParser.go(buffer.d, 'pu'), 2421e5c31af7Sopenharmony_ci q: mhchemParser.go(buffer.q, 'pu') 2422e5c31af7Sopenharmony_ci }; 2423e5c31af7Sopenharmony_ci 2424e5c31af7Sopenharmony_ci if (buffer.o === '//') { 2425e5c31af7Sopenharmony_ci ret = { 2426e5c31af7Sopenharmony_ci type_: 'pu-frac', 2427e5c31af7Sopenharmony_ci p1: b5.d, 2428e5c31af7Sopenharmony_ci p2: b5.q 2429e5c31af7Sopenharmony_ci }; 2430e5c31af7Sopenharmony_ci } else { 2431e5c31af7Sopenharmony_ci ret = b5.d; 2432e5c31af7Sopenharmony_ci 2433e5c31af7Sopenharmony_ci if (b5.d.length > 1 || b5.q.length > 1) { 2434e5c31af7Sopenharmony_ci ret.push({ 2435e5c31af7Sopenharmony_ci type_: ' / ' 2436e5c31af7Sopenharmony_ci }); 2437e5c31af7Sopenharmony_ci } else { 2438e5c31af7Sopenharmony_ci ret.push({ 2439e5c31af7Sopenharmony_ci type_: '/' 2440e5c31af7Sopenharmony_ci }); 2441e5c31af7Sopenharmony_ci } 2442e5c31af7Sopenharmony_ci 2443e5c31af7Sopenharmony_ci mhchemParser.concatArray(ret, b5.q); 2444e5c31af7Sopenharmony_ci } 2445e5c31af7Sopenharmony_ci } else { 2446e5c31af7Sopenharmony_ci // no fraction 2447e5c31af7Sopenharmony_ci ret = mhchemParser.go(buffer.d, 'pu-2'); 2448e5c31af7Sopenharmony_ci } 2449e5c31af7Sopenharmony_ci 2450e5c31af7Sopenharmony_ci for (var p in buffer) { 2451e5c31af7Sopenharmony_ci delete buffer[p]; 2452e5c31af7Sopenharmony_ci } 2453e5c31af7Sopenharmony_ci 2454e5c31af7Sopenharmony_ci return ret; 2455e5c31af7Sopenharmony_ci } 2456e5c31af7Sopenharmony_ci } 2457e5c31af7Sopenharmony_ci }, 2458e5c31af7Sopenharmony_ci 'pu-2': { 2459e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 2460e5c31af7Sopenharmony_ci 'empty': { 2461e5c31af7Sopenharmony_ci '*': { 2462e5c31af7Sopenharmony_ci action_: 'output' 2463e5c31af7Sopenharmony_ci } 2464e5c31af7Sopenharmony_ci }, 2465e5c31af7Sopenharmony_ci '*': { 2466e5c31af7Sopenharmony_ci '*': { 2467e5c31af7Sopenharmony_ci action_: ['output', 'cdot'], 2468e5c31af7Sopenharmony_ci nextState: '0' 2469e5c31af7Sopenharmony_ci } 2470e5c31af7Sopenharmony_ci }, 2471e5c31af7Sopenharmony_ci '\\x': { 2472e5c31af7Sopenharmony_ci '*': { 2473e5c31af7Sopenharmony_ci action_: 'rm=' 2474e5c31af7Sopenharmony_ci } 2475e5c31af7Sopenharmony_ci }, 2476e5c31af7Sopenharmony_ci 'space': { 2477e5c31af7Sopenharmony_ci '*': { 2478e5c31af7Sopenharmony_ci action_: ['output', 'space'], 2479e5c31af7Sopenharmony_ci nextState: '0' 2480e5c31af7Sopenharmony_ci } 2481e5c31af7Sopenharmony_ci }, 2482e5c31af7Sopenharmony_ci '^{(...)}|^(-1)': { 2483e5c31af7Sopenharmony_ci '1': { 2484e5c31af7Sopenharmony_ci action_: '^(-1)' 2485e5c31af7Sopenharmony_ci } 2486e5c31af7Sopenharmony_ci }, 2487e5c31af7Sopenharmony_ci '-9.,9': { 2488e5c31af7Sopenharmony_ci '0': { 2489e5c31af7Sopenharmony_ci action_: 'rm=', 2490e5c31af7Sopenharmony_ci nextState: '0' 2491e5c31af7Sopenharmony_ci }, 2492e5c31af7Sopenharmony_ci '1': { 2493e5c31af7Sopenharmony_ci action_: '^(-1)', 2494e5c31af7Sopenharmony_ci nextState: '0' 2495e5c31af7Sopenharmony_ci } 2496e5c31af7Sopenharmony_ci }, 2497e5c31af7Sopenharmony_ci '{...}|else': { 2498e5c31af7Sopenharmony_ci '*': { 2499e5c31af7Sopenharmony_ci action_: 'rm=', 2500e5c31af7Sopenharmony_ci nextState: '1' 2501e5c31af7Sopenharmony_ci } 2502e5c31af7Sopenharmony_ci } 2503e5c31af7Sopenharmony_ci }), 2504e5c31af7Sopenharmony_ci actions: { 2505e5c31af7Sopenharmony_ci 'cdot': function cdot() { 2506e5c31af7Sopenharmony_ci return { 2507e5c31af7Sopenharmony_ci type_: 'tight cdot' 2508e5c31af7Sopenharmony_ci }; 2509e5c31af7Sopenharmony_ci }, 2510e5c31af7Sopenharmony_ci '^(-1)': function _(buffer, m) { 2511e5c31af7Sopenharmony_ci buffer.rm += "^{" + m + "}"; 2512e5c31af7Sopenharmony_ci }, 2513e5c31af7Sopenharmony_ci 'space': function space() { 2514e5c31af7Sopenharmony_ci return { 2515e5c31af7Sopenharmony_ci type_: 'pu-space-2' 2516e5c31af7Sopenharmony_ci }; 2517e5c31af7Sopenharmony_ci }, 2518e5c31af7Sopenharmony_ci 'output': function output(buffer) { 2519e5c31af7Sopenharmony_ci /** @type {ParserOutput | ParserOutput[]} */ 2520e5c31af7Sopenharmony_ci var ret = []; 2521e5c31af7Sopenharmony_ci 2522e5c31af7Sopenharmony_ci if (buffer.rm) { 2523e5c31af7Sopenharmony_ci var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || ""); 2524e5c31af7Sopenharmony_ci 2525e5c31af7Sopenharmony_ci if (mrm && mrm.remainder === '') { 2526e5c31af7Sopenharmony_ci ret = mhchemParser.go(mrm.match_, 'pu'); 2527e5c31af7Sopenharmony_ci } else { 2528e5c31af7Sopenharmony_ci ret = { 2529e5c31af7Sopenharmony_ci type_: 'rm', 2530e5c31af7Sopenharmony_ci p1: buffer.rm 2531e5c31af7Sopenharmony_ci }; 2532e5c31af7Sopenharmony_ci } 2533e5c31af7Sopenharmony_ci } 2534e5c31af7Sopenharmony_ci 2535e5c31af7Sopenharmony_ci for (var p in buffer) { 2536e5c31af7Sopenharmony_ci delete buffer[p]; 2537e5c31af7Sopenharmony_ci } 2538e5c31af7Sopenharmony_ci 2539e5c31af7Sopenharmony_ci return ret; 2540e5c31af7Sopenharmony_ci } 2541e5c31af7Sopenharmony_ci } 2542e5c31af7Sopenharmony_ci }, 2543e5c31af7Sopenharmony_ci 'pu-9,9': { 2544e5c31af7Sopenharmony_ci transitions: mhchemParser.createTransitions({ 2545e5c31af7Sopenharmony_ci 'empty': { 2546e5c31af7Sopenharmony_ci '0': { 2547e5c31af7Sopenharmony_ci action_: 'output-0' 2548e5c31af7Sopenharmony_ci }, 2549e5c31af7Sopenharmony_ci 'o': { 2550e5c31af7Sopenharmony_ci action_: 'output-o' 2551e5c31af7Sopenharmony_ci } 2552e5c31af7Sopenharmony_ci }, 2553e5c31af7Sopenharmony_ci ',': { 2554e5c31af7Sopenharmony_ci '0': { 2555e5c31af7Sopenharmony_ci action_: ['output-0', 'comma'], 2556e5c31af7Sopenharmony_ci nextState: 'o' 2557e5c31af7Sopenharmony_ci } 2558e5c31af7Sopenharmony_ci }, 2559e5c31af7Sopenharmony_ci '.': { 2560e5c31af7Sopenharmony_ci '0': { 2561e5c31af7Sopenharmony_ci action_: ['output-0', 'copy'], 2562e5c31af7Sopenharmony_ci nextState: 'o' 2563e5c31af7Sopenharmony_ci } 2564e5c31af7Sopenharmony_ci }, 2565e5c31af7Sopenharmony_ci 'else': { 2566e5c31af7Sopenharmony_ci '*': { 2567e5c31af7Sopenharmony_ci action_: 'text=' 2568e5c31af7Sopenharmony_ci } 2569e5c31af7Sopenharmony_ci } 2570e5c31af7Sopenharmony_ci }), 2571e5c31af7Sopenharmony_ci actions: { 2572e5c31af7Sopenharmony_ci 'comma': function comma() { 2573e5c31af7Sopenharmony_ci return { 2574e5c31af7Sopenharmony_ci type_: 'commaDecimal' 2575e5c31af7Sopenharmony_ci }; 2576e5c31af7Sopenharmony_ci }, 2577e5c31af7Sopenharmony_ci 'output-0': function output0(buffer) { 2578e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 2579e5c31af7Sopenharmony_ci var ret = []; 2580e5c31af7Sopenharmony_ci buffer.text_ = buffer.text_ || ""; 2581e5c31af7Sopenharmony_ci 2582e5c31af7Sopenharmony_ci if (buffer.text_.length > 4) { 2583e5c31af7Sopenharmony_ci var a = buffer.text_.length % 3; 2584e5c31af7Sopenharmony_ci 2585e5c31af7Sopenharmony_ci if (a === 0) { 2586e5c31af7Sopenharmony_ci a = 3; 2587e5c31af7Sopenharmony_ci } 2588e5c31af7Sopenharmony_ci 2589e5c31af7Sopenharmony_ci for (var i = buffer.text_.length - 3; i > 0; i -= 3) { 2590e5c31af7Sopenharmony_ci ret.push(buffer.text_.substr(i, 3)); 2591e5c31af7Sopenharmony_ci ret.push({ 2592e5c31af7Sopenharmony_ci type_: '1000 separator' 2593e5c31af7Sopenharmony_ci }); 2594e5c31af7Sopenharmony_ci } 2595e5c31af7Sopenharmony_ci 2596e5c31af7Sopenharmony_ci ret.push(buffer.text_.substr(0, a)); 2597e5c31af7Sopenharmony_ci ret.reverse(); 2598e5c31af7Sopenharmony_ci } else { 2599e5c31af7Sopenharmony_ci ret.push(buffer.text_); 2600e5c31af7Sopenharmony_ci } 2601e5c31af7Sopenharmony_ci 2602e5c31af7Sopenharmony_ci for (var p in buffer) { 2603e5c31af7Sopenharmony_ci delete buffer[p]; 2604e5c31af7Sopenharmony_ci } 2605e5c31af7Sopenharmony_ci 2606e5c31af7Sopenharmony_ci return ret; 2607e5c31af7Sopenharmony_ci }, 2608e5c31af7Sopenharmony_ci 'output-o': function outputO(buffer) { 2609e5c31af7Sopenharmony_ci /** @type {ParserOutput[]} */ 2610e5c31af7Sopenharmony_ci var ret = []; 2611e5c31af7Sopenharmony_ci buffer.text_ = buffer.text_ || ""; 2612e5c31af7Sopenharmony_ci 2613e5c31af7Sopenharmony_ci if (buffer.text_.length > 4) { 2614e5c31af7Sopenharmony_ci var a = buffer.text_.length - 3; 2615e5c31af7Sopenharmony_ci 2616e5c31af7Sopenharmony_ci for (var i = 0; i < a; i += 3) { 2617e5c31af7Sopenharmony_ci ret.push(buffer.text_.substr(i, 3)); 2618e5c31af7Sopenharmony_ci ret.push({ 2619e5c31af7Sopenharmony_ci type_: '1000 separator' 2620e5c31af7Sopenharmony_ci }); 2621e5c31af7Sopenharmony_ci } 2622e5c31af7Sopenharmony_ci 2623e5c31af7Sopenharmony_ci ret.push(buffer.text_.substr(i)); 2624e5c31af7Sopenharmony_ci } else { 2625e5c31af7Sopenharmony_ci ret.push(buffer.text_); 2626e5c31af7Sopenharmony_ci } 2627e5c31af7Sopenharmony_ci 2628e5c31af7Sopenharmony_ci for (var p in buffer) { 2629e5c31af7Sopenharmony_ci delete buffer[p]; 2630e5c31af7Sopenharmony_ci } 2631e5c31af7Sopenharmony_ci 2632e5c31af7Sopenharmony_ci return ret; 2633e5c31af7Sopenharmony_ci } 2634e5c31af7Sopenharmony_ci } //#endregion 2635e5c31af7Sopenharmony_ci 2636e5c31af7Sopenharmony_ci } 2637e5c31af7Sopenharmony_ci}; // 2638e5c31af7Sopenharmony_ci// texify: Take MhchemParser output and convert it to TeX 2639e5c31af7Sopenharmony_ci// 2640e5c31af7Sopenharmony_ci 2641e5c31af7Sopenharmony_ci/** @type {Texify} */ 2642e5c31af7Sopenharmony_ci 2643e5c31af7Sopenharmony_civar texify = { 2644e5c31af7Sopenharmony_ci go: function go(input, isInner) { 2645e5c31af7Sopenharmony_ci // (recursive, max 4 levels) 2646e5c31af7Sopenharmony_ci if (!input) { 2647e5c31af7Sopenharmony_ci return ""; 2648e5c31af7Sopenharmony_ci } 2649e5c31af7Sopenharmony_ci 2650e5c31af7Sopenharmony_ci var res = ""; 2651e5c31af7Sopenharmony_ci var cee = false; 2652e5c31af7Sopenharmony_ci 2653e5c31af7Sopenharmony_ci for (var i = 0; i < input.length; i++) { 2654e5c31af7Sopenharmony_ci var inputi = input[i]; 2655e5c31af7Sopenharmony_ci 2656e5c31af7Sopenharmony_ci if (typeof inputi === "string") { 2657e5c31af7Sopenharmony_ci res += inputi; 2658e5c31af7Sopenharmony_ci } else { 2659e5c31af7Sopenharmony_ci res += texify._go2(inputi); 2660e5c31af7Sopenharmony_ci 2661e5c31af7Sopenharmony_ci if (inputi.type_ === '1st-level escape') { 2662e5c31af7Sopenharmony_ci cee = true; 2663e5c31af7Sopenharmony_ci } 2664e5c31af7Sopenharmony_ci } 2665e5c31af7Sopenharmony_ci } 2666e5c31af7Sopenharmony_ci 2667e5c31af7Sopenharmony_ci if (!isInner && !cee && res) { 2668e5c31af7Sopenharmony_ci res = "{" + res + "}"; 2669e5c31af7Sopenharmony_ci } 2670e5c31af7Sopenharmony_ci 2671e5c31af7Sopenharmony_ci return res; 2672e5c31af7Sopenharmony_ci }, 2673e5c31af7Sopenharmony_ci _goInner: function _goInner(input) { 2674e5c31af7Sopenharmony_ci if (!input) { 2675e5c31af7Sopenharmony_ci return input; 2676e5c31af7Sopenharmony_ci } 2677e5c31af7Sopenharmony_ci 2678e5c31af7Sopenharmony_ci return texify.go(input, true); 2679e5c31af7Sopenharmony_ci }, 2680e5c31af7Sopenharmony_ci _go2: function _go2(buf) { 2681e5c31af7Sopenharmony_ci /** @type {undefined | string} */ 2682e5c31af7Sopenharmony_ci var res; 2683e5c31af7Sopenharmony_ci 2684e5c31af7Sopenharmony_ci switch (buf.type_) { 2685e5c31af7Sopenharmony_ci case 'chemfive': 2686e5c31af7Sopenharmony_ci res = ""; 2687e5c31af7Sopenharmony_ci var b5 = { 2688e5c31af7Sopenharmony_ci a: texify._goInner(buf.a), 2689e5c31af7Sopenharmony_ci b: texify._goInner(buf.b), 2690e5c31af7Sopenharmony_ci p: texify._goInner(buf.p), 2691e5c31af7Sopenharmony_ci o: texify._goInner(buf.o), 2692e5c31af7Sopenharmony_ci q: texify._goInner(buf.q), 2693e5c31af7Sopenharmony_ci d: texify._goInner(buf.d) 2694e5c31af7Sopenharmony_ci }; // 2695e5c31af7Sopenharmony_ci // a 2696e5c31af7Sopenharmony_ci // 2697e5c31af7Sopenharmony_ci 2698e5c31af7Sopenharmony_ci if (b5.a) { 2699e5c31af7Sopenharmony_ci if (b5.a.match(/^[+\-]/)) { 2700e5c31af7Sopenharmony_ci b5.a = "{" + b5.a + "}"; 2701e5c31af7Sopenharmony_ci } 2702e5c31af7Sopenharmony_ci 2703e5c31af7Sopenharmony_ci res += b5.a + "\\,"; 2704e5c31af7Sopenharmony_ci } // 2705e5c31af7Sopenharmony_ci // b and p 2706e5c31af7Sopenharmony_ci // 2707e5c31af7Sopenharmony_ci 2708e5c31af7Sopenharmony_ci 2709e5c31af7Sopenharmony_ci if (b5.b || b5.p) { 2710e5c31af7Sopenharmony_ci res += "{\\vphantom{X}}"; 2711e5c31af7Sopenharmony_ci res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; 2712e5c31af7Sopenharmony_ci res += "{\\vphantom{X}}"; 2713e5c31af7Sopenharmony_ci res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}"; 2714e5c31af7Sopenharmony_ci res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}"; 2715e5c31af7Sopenharmony_ci } // 2716e5c31af7Sopenharmony_ci // o 2717e5c31af7Sopenharmony_ci // 2718e5c31af7Sopenharmony_ci 2719e5c31af7Sopenharmony_ci 2720e5c31af7Sopenharmony_ci if (b5.o) { 2721e5c31af7Sopenharmony_ci if (b5.o.match(/^[+\-]/)) { 2722e5c31af7Sopenharmony_ci b5.o = "{" + b5.o + "}"; 2723e5c31af7Sopenharmony_ci } 2724e5c31af7Sopenharmony_ci 2725e5c31af7Sopenharmony_ci res += b5.o; 2726e5c31af7Sopenharmony_ci } // 2727e5c31af7Sopenharmony_ci // q and d 2728e5c31af7Sopenharmony_ci // 2729e5c31af7Sopenharmony_ci 2730e5c31af7Sopenharmony_ci 2731e5c31af7Sopenharmony_ci if (buf.dType === 'kv') { 2732e5c31af7Sopenharmony_ci if (b5.d || b5.q) { 2733e5c31af7Sopenharmony_ci res += "{\\vphantom{X}}"; 2734e5c31af7Sopenharmony_ci } 2735e5c31af7Sopenharmony_ci 2736e5c31af7Sopenharmony_ci if (b5.d) { 2737e5c31af7Sopenharmony_ci res += "^{" + b5.d + "}"; 2738e5c31af7Sopenharmony_ci } 2739e5c31af7Sopenharmony_ci 2740e5c31af7Sopenharmony_ci if (b5.q) { 2741e5c31af7Sopenharmony_ci res += "_{\\smash[t]{" + b5.q + "}}"; 2742e5c31af7Sopenharmony_ci } 2743e5c31af7Sopenharmony_ci } else if (buf.dType === 'oxidation') { 2744e5c31af7Sopenharmony_ci if (b5.d) { 2745e5c31af7Sopenharmony_ci res += "{\\vphantom{X}}"; 2746e5c31af7Sopenharmony_ci res += "^{" + b5.d + "}"; 2747e5c31af7Sopenharmony_ci } 2748e5c31af7Sopenharmony_ci 2749e5c31af7Sopenharmony_ci if (b5.q) { 2750e5c31af7Sopenharmony_ci res += "{\\vphantom{X}}"; 2751e5c31af7Sopenharmony_ci res += "_{\\smash[t]{" + b5.q + "}}"; 2752e5c31af7Sopenharmony_ci } 2753e5c31af7Sopenharmony_ci } else { 2754e5c31af7Sopenharmony_ci if (b5.q) { 2755e5c31af7Sopenharmony_ci res += "{\\vphantom{X}}"; 2756e5c31af7Sopenharmony_ci res += "_{\\smash[t]{" + b5.q + "}}"; 2757e5c31af7Sopenharmony_ci } 2758e5c31af7Sopenharmony_ci 2759e5c31af7Sopenharmony_ci if (b5.d) { 2760e5c31af7Sopenharmony_ci res += "{\\vphantom{X}}"; 2761e5c31af7Sopenharmony_ci res += "^{" + b5.d + "}"; 2762e5c31af7Sopenharmony_ci } 2763e5c31af7Sopenharmony_ci } 2764e5c31af7Sopenharmony_ci 2765e5c31af7Sopenharmony_ci break; 2766e5c31af7Sopenharmony_ci 2767e5c31af7Sopenharmony_ci case 'rm': 2768e5c31af7Sopenharmony_ci res = "\\mathrm{" + buf.p1 + "}"; 2769e5c31af7Sopenharmony_ci break; 2770e5c31af7Sopenharmony_ci 2771e5c31af7Sopenharmony_ci case 'text': 2772e5c31af7Sopenharmony_ci if (buf.p1.match(/[\^_]/)) { 2773e5c31af7Sopenharmony_ci buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); 2774e5c31af7Sopenharmony_ci res = "\\mathrm{" + buf.p1 + "}"; 2775e5c31af7Sopenharmony_ci } else { 2776e5c31af7Sopenharmony_ci res = "\\text{" + buf.p1 + "}"; 2777e5c31af7Sopenharmony_ci } 2778e5c31af7Sopenharmony_ci 2779e5c31af7Sopenharmony_ci break; 2780e5c31af7Sopenharmony_ci 2781e5c31af7Sopenharmony_ci case 'roman numeral': 2782e5c31af7Sopenharmony_ci res = "\\mathrm{" + buf.p1 + "}"; 2783e5c31af7Sopenharmony_ci break; 2784e5c31af7Sopenharmony_ci 2785e5c31af7Sopenharmony_ci case 'state of aggregation': 2786e5c31af7Sopenharmony_ci res = "\\mskip2mu " + texify._goInner(buf.p1); 2787e5c31af7Sopenharmony_ci break; 2788e5c31af7Sopenharmony_ci 2789e5c31af7Sopenharmony_ci case 'state of aggregation subscript': 2790e5c31af7Sopenharmony_ci res = "\\mskip1mu " + texify._goInner(buf.p1); 2791e5c31af7Sopenharmony_ci break; 2792e5c31af7Sopenharmony_ci 2793e5c31af7Sopenharmony_ci case 'bond': 2794e5c31af7Sopenharmony_ci res = texify._getBond(buf.kind_); 2795e5c31af7Sopenharmony_ci 2796e5c31af7Sopenharmony_ci if (!res) { 2797e5c31af7Sopenharmony_ci throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"]; 2798e5c31af7Sopenharmony_ci } 2799e5c31af7Sopenharmony_ci 2800e5c31af7Sopenharmony_ci break; 2801e5c31af7Sopenharmony_ci 2802e5c31af7Sopenharmony_ci case 'frac': 2803e5c31af7Sopenharmony_ci var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; 2804e5c31af7Sopenharmony_ci res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; 2805e5c31af7Sopenharmony_ci break; 2806e5c31af7Sopenharmony_ci 2807e5c31af7Sopenharmony_ci case 'pu-frac': 2808e5c31af7Sopenharmony_ci var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; 2809e5c31af7Sopenharmony_ci res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; 2810e5c31af7Sopenharmony_ci break; 2811e5c31af7Sopenharmony_ci 2812e5c31af7Sopenharmony_ci case 'tex-math': 2813e5c31af7Sopenharmony_ci res = buf.p1 + " "; 2814e5c31af7Sopenharmony_ci break; 2815e5c31af7Sopenharmony_ci 2816e5c31af7Sopenharmony_ci case 'frac-ce': 2817e5c31af7Sopenharmony_ci res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; 2818e5c31af7Sopenharmony_ci break; 2819e5c31af7Sopenharmony_ci 2820e5c31af7Sopenharmony_ci case 'overset': 2821e5c31af7Sopenharmony_ci res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; 2822e5c31af7Sopenharmony_ci break; 2823e5c31af7Sopenharmony_ci 2824e5c31af7Sopenharmony_ci case 'underset': 2825e5c31af7Sopenharmony_ci res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; 2826e5c31af7Sopenharmony_ci break; 2827e5c31af7Sopenharmony_ci 2828e5c31af7Sopenharmony_ci case 'underbrace': 2829e5c31af7Sopenharmony_ci res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; 2830e5c31af7Sopenharmony_ci break; 2831e5c31af7Sopenharmony_ci 2832e5c31af7Sopenharmony_ci case 'color': 2833e5c31af7Sopenharmony_ci res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; 2834e5c31af7Sopenharmony_ci break; 2835e5c31af7Sopenharmony_ci 2836e5c31af7Sopenharmony_ci case 'color0': 2837e5c31af7Sopenharmony_ci res = "\\color{" + buf.color + "}"; 2838e5c31af7Sopenharmony_ci break; 2839e5c31af7Sopenharmony_ci 2840e5c31af7Sopenharmony_ci case 'arrow': 2841e5c31af7Sopenharmony_ci var b6 = { 2842e5c31af7Sopenharmony_ci rd: texify._goInner(buf.rd), 2843e5c31af7Sopenharmony_ci rq: texify._goInner(buf.rq) 2844e5c31af7Sopenharmony_ci }; 2845e5c31af7Sopenharmony_ci 2846e5c31af7Sopenharmony_ci var arrow = "\\x" + texify._getArrow(buf.r); 2847e5c31af7Sopenharmony_ci 2848e5c31af7Sopenharmony_ci if (b6.rq) { 2849e5c31af7Sopenharmony_ci arrow += "[{" + b6.rq + "}]"; 2850e5c31af7Sopenharmony_ci } 2851e5c31af7Sopenharmony_ci 2852e5c31af7Sopenharmony_ci if (b6.rd) { 2853e5c31af7Sopenharmony_ci arrow += "{" + b6.rd + "}"; 2854e5c31af7Sopenharmony_ci } else { 2855e5c31af7Sopenharmony_ci arrow += "{}"; 2856e5c31af7Sopenharmony_ci } 2857e5c31af7Sopenharmony_ci 2858e5c31af7Sopenharmony_ci res = arrow; 2859e5c31af7Sopenharmony_ci break; 2860e5c31af7Sopenharmony_ci 2861e5c31af7Sopenharmony_ci case 'operator': 2862e5c31af7Sopenharmony_ci res = texify._getOperator(buf.kind_); 2863e5c31af7Sopenharmony_ci break; 2864e5c31af7Sopenharmony_ci 2865e5c31af7Sopenharmony_ci case '1st-level escape': 2866e5c31af7Sopenharmony_ci res = buf.p1 + " "; // &, \\\\, \\hlin 2867e5c31af7Sopenharmony_ci 2868e5c31af7Sopenharmony_ci break; 2869e5c31af7Sopenharmony_ci 2870e5c31af7Sopenharmony_ci case 'space': 2871e5c31af7Sopenharmony_ci res = " "; 2872e5c31af7Sopenharmony_ci break; 2873e5c31af7Sopenharmony_ci 2874e5c31af7Sopenharmony_ci case 'entitySkip': 2875e5c31af7Sopenharmony_ci res = "~"; 2876e5c31af7Sopenharmony_ci break; 2877e5c31af7Sopenharmony_ci 2878e5c31af7Sopenharmony_ci case 'pu-space-1': 2879e5c31af7Sopenharmony_ci res = "~"; 2880e5c31af7Sopenharmony_ci break; 2881e5c31af7Sopenharmony_ci 2882e5c31af7Sopenharmony_ci case 'pu-space-2': 2883e5c31af7Sopenharmony_ci res = "\\mkern3mu "; 2884e5c31af7Sopenharmony_ci break; 2885e5c31af7Sopenharmony_ci 2886e5c31af7Sopenharmony_ci case '1000 separator': 2887e5c31af7Sopenharmony_ci res = "\\mkern2mu "; 2888e5c31af7Sopenharmony_ci break; 2889e5c31af7Sopenharmony_ci 2890e5c31af7Sopenharmony_ci case 'commaDecimal': 2891e5c31af7Sopenharmony_ci res = "{,}"; 2892e5c31af7Sopenharmony_ci break; 2893e5c31af7Sopenharmony_ci 2894e5c31af7Sopenharmony_ci case 'comma enumeration L': 2895e5c31af7Sopenharmony_ci res = "{" + buf.p1 + "}\\mkern6mu "; 2896e5c31af7Sopenharmony_ci break; 2897e5c31af7Sopenharmony_ci 2898e5c31af7Sopenharmony_ci case 'comma enumeration M': 2899e5c31af7Sopenharmony_ci res = "{" + buf.p1 + "}\\mkern3mu "; 2900e5c31af7Sopenharmony_ci break; 2901e5c31af7Sopenharmony_ci 2902e5c31af7Sopenharmony_ci case 'comma enumeration S': 2903e5c31af7Sopenharmony_ci res = "{" + buf.p1 + "}\\mkern1mu "; 2904e5c31af7Sopenharmony_ci break; 2905e5c31af7Sopenharmony_ci 2906e5c31af7Sopenharmony_ci case 'hyphen': 2907e5c31af7Sopenharmony_ci res = "\\text{-}"; 2908e5c31af7Sopenharmony_ci break; 2909e5c31af7Sopenharmony_ci 2910e5c31af7Sopenharmony_ci case 'addition compound': 2911e5c31af7Sopenharmony_ci res = "\\,{\\cdot}\\,"; 2912e5c31af7Sopenharmony_ci break; 2913e5c31af7Sopenharmony_ci 2914e5c31af7Sopenharmony_ci case 'electron dot': 2915e5c31af7Sopenharmony_ci res = "\\mkern1mu \\bullet\\mkern1mu "; 2916e5c31af7Sopenharmony_ci break; 2917e5c31af7Sopenharmony_ci 2918e5c31af7Sopenharmony_ci case 'KV x': 2919e5c31af7Sopenharmony_ci res = "{\\times}"; 2920e5c31af7Sopenharmony_ci break; 2921e5c31af7Sopenharmony_ci 2922e5c31af7Sopenharmony_ci case 'prime': 2923e5c31af7Sopenharmony_ci res = "\\prime "; 2924e5c31af7Sopenharmony_ci break; 2925e5c31af7Sopenharmony_ci 2926e5c31af7Sopenharmony_ci case 'cdot': 2927e5c31af7Sopenharmony_ci res = "\\cdot "; 2928e5c31af7Sopenharmony_ci break; 2929e5c31af7Sopenharmony_ci 2930e5c31af7Sopenharmony_ci case 'tight cdot': 2931e5c31af7Sopenharmony_ci res = "\\mkern1mu{\\cdot}\\mkern1mu "; 2932e5c31af7Sopenharmony_ci break; 2933e5c31af7Sopenharmony_ci 2934e5c31af7Sopenharmony_ci case 'times': 2935e5c31af7Sopenharmony_ci res = "\\times "; 2936e5c31af7Sopenharmony_ci break; 2937e5c31af7Sopenharmony_ci 2938e5c31af7Sopenharmony_ci case 'circa': 2939e5c31af7Sopenharmony_ci res = "{\\sim}"; 2940e5c31af7Sopenharmony_ci break; 2941e5c31af7Sopenharmony_ci 2942e5c31af7Sopenharmony_ci case '^': 2943e5c31af7Sopenharmony_ci res = "uparrow"; 2944e5c31af7Sopenharmony_ci break; 2945e5c31af7Sopenharmony_ci 2946e5c31af7Sopenharmony_ci case 'v': 2947e5c31af7Sopenharmony_ci res = "downarrow"; 2948e5c31af7Sopenharmony_ci break; 2949e5c31af7Sopenharmony_ci 2950e5c31af7Sopenharmony_ci case 'ellipsis': 2951e5c31af7Sopenharmony_ci res = "\\ldots "; 2952e5c31af7Sopenharmony_ci break; 2953e5c31af7Sopenharmony_ci 2954e5c31af7Sopenharmony_ci case '/': 2955e5c31af7Sopenharmony_ci res = "/"; 2956e5c31af7Sopenharmony_ci break; 2957e5c31af7Sopenharmony_ci 2958e5c31af7Sopenharmony_ci case ' / ': 2959e5c31af7Sopenharmony_ci res = "\\,/\\,"; 2960e5c31af7Sopenharmony_ci break; 2961e5c31af7Sopenharmony_ci 2962e5c31af7Sopenharmony_ci default: 2963e5c31af7Sopenharmony_ci throw ["MhchemBugT", "mhchem bug T. Please report."]; 2964e5c31af7Sopenharmony_ci // Missing texify rule or unknown MhchemParser output 2965e5c31af7Sopenharmony_ci } 2966e5c31af7Sopenharmony_ci return res; 2967e5c31af7Sopenharmony_ci }, 2968e5c31af7Sopenharmony_ci _getArrow: function _getArrow(a) { 2969e5c31af7Sopenharmony_ci switch (a) { 2970e5c31af7Sopenharmony_ci case "->": 2971e5c31af7Sopenharmony_ci return "rightarrow"; 2972e5c31af7Sopenharmony_ci 2973e5c31af7Sopenharmony_ci case "\u2192": 2974e5c31af7Sopenharmony_ci return "rightarrow"; 2975e5c31af7Sopenharmony_ci 2976e5c31af7Sopenharmony_ci case "\u27F6": 2977e5c31af7Sopenharmony_ci return "rightarrow"; 2978e5c31af7Sopenharmony_ci 2979e5c31af7Sopenharmony_ci case "<-": 2980e5c31af7Sopenharmony_ci return "leftarrow"; 2981e5c31af7Sopenharmony_ci 2982e5c31af7Sopenharmony_ci case "<->": 2983e5c31af7Sopenharmony_ci return "leftrightarrow"; 2984e5c31af7Sopenharmony_ci 2985e5c31af7Sopenharmony_ci case "<-->": 2986e5c31af7Sopenharmony_ci return "rightleftarrows"; 2987e5c31af7Sopenharmony_ci 2988e5c31af7Sopenharmony_ci case "<=>": 2989e5c31af7Sopenharmony_ci return "rightleftharpoons"; 2990e5c31af7Sopenharmony_ci 2991e5c31af7Sopenharmony_ci case "\u21CC": 2992e5c31af7Sopenharmony_ci return "rightleftharpoons"; 2993e5c31af7Sopenharmony_ci 2994e5c31af7Sopenharmony_ci case "<=>>": 2995e5c31af7Sopenharmony_ci return "rightequilibrium"; 2996e5c31af7Sopenharmony_ci 2997e5c31af7Sopenharmony_ci case "<<=>": 2998e5c31af7Sopenharmony_ci return "leftequilibrium"; 2999e5c31af7Sopenharmony_ci 3000e5c31af7Sopenharmony_ci default: 3001e5c31af7Sopenharmony_ci throw ["MhchemBugT", "mhchem bug T. Please report."]; 3002e5c31af7Sopenharmony_ci } 3003e5c31af7Sopenharmony_ci }, 3004e5c31af7Sopenharmony_ci _getBond: function _getBond(a) { 3005e5c31af7Sopenharmony_ci switch (a) { 3006e5c31af7Sopenharmony_ci case "-": 3007e5c31af7Sopenharmony_ci return "{-}"; 3008e5c31af7Sopenharmony_ci 3009e5c31af7Sopenharmony_ci case "1": 3010e5c31af7Sopenharmony_ci return "{-}"; 3011e5c31af7Sopenharmony_ci 3012e5c31af7Sopenharmony_ci case "=": 3013e5c31af7Sopenharmony_ci return "{=}"; 3014e5c31af7Sopenharmony_ci 3015e5c31af7Sopenharmony_ci case "2": 3016e5c31af7Sopenharmony_ci return "{=}"; 3017e5c31af7Sopenharmony_ci 3018e5c31af7Sopenharmony_ci case "#": 3019e5c31af7Sopenharmony_ci return "{\\equiv}"; 3020e5c31af7Sopenharmony_ci 3021e5c31af7Sopenharmony_ci case "3": 3022e5c31af7Sopenharmony_ci return "{\\equiv}"; 3023e5c31af7Sopenharmony_ci 3024e5c31af7Sopenharmony_ci case "~": 3025e5c31af7Sopenharmony_ci return "{\\tripledash}"; 3026e5c31af7Sopenharmony_ci 3027e5c31af7Sopenharmony_ci case "~-": 3028e5c31af7Sopenharmony_ci return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}"; 3029e5c31af7Sopenharmony_ci 3030e5c31af7Sopenharmony_ci case "~=": 3031e5c31af7Sopenharmony_ci return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; 3032e5c31af7Sopenharmony_ci 3033e5c31af7Sopenharmony_ci case "~--": 3034e5c31af7Sopenharmony_ci return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; 3035e5c31af7Sopenharmony_ci 3036e5c31af7Sopenharmony_ci case "-~-": 3037e5c31af7Sopenharmony_ci return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}"; 3038e5c31af7Sopenharmony_ci 3039e5c31af7Sopenharmony_ci case "...": 3040e5c31af7Sopenharmony_ci return "{{\\cdot}{\\cdot}{\\cdot}}"; 3041e5c31af7Sopenharmony_ci 3042e5c31af7Sopenharmony_ci case "....": 3043e5c31af7Sopenharmony_ci return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; 3044e5c31af7Sopenharmony_ci 3045e5c31af7Sopenharmony_ci case "->": 3046e5c31af7Sopenharmony_ci return "{\\rightarrow}"; 3047e5c31af7Sopenharmony_ci 3048e5c31af7Sopenharmony_ci case "<-": 3049e5c31af7Sopenharmony_ci return "{\\leftarrow}"; 3050e5c31af7Sopenharmony_ci 3051e5c31af7Sopenharmony_ci case "<": 3052e5c31af7Sopenharmony_ci return "{<}"; 3053e5c31af7Sopenharmony_ci 3054e5c31af7Sopenharmony_ci case ">": 3055e5c31af7Sopenharmony_ci return "{>}"; 3056e5c31af7Sopenharmony_ci 3057e5c31af7Sopenharmony_ci default: 3058e5c31af7Sopenharmony_ci throw ["MhchemBugT", "mhchem bug T. Please report."]; 3059e5c31af7Sopenharmony_ci } 3060e5c31af7Sopenharmony_ci }, 3061e5c31af7Sopenharmony_ci _getOperator: function _getOperator(a) { 3062e5c31af7Sopenharmony_ci switch (a) { 3063e5c31af7Sopenharmony_ci case "+": 3064e5c31af7Sopenharmony_ci return " {}+{} "; 3065e5c31af7Sopenharmony_ci 3066e5c31af7Sopenharmony_ci case "-": 3067e5c31af7Sopenharmony_ci return " {}-{} "; 3068e5c31af7Sopenharmony_ci 3069e5c31af7Sopenharmony_ci case "=": 3070e5c31af7Sopenharmony_ci return " {}={} "; 3071e5c31af7Sopenharmony_ci 3072e5c31af7Sopenharmony_ci case "<": 3073e5c31af7Sopenharmony_ci return " {}<{} "; 3074e5c31af7Sopenharmony_ci 3075e5c31af7Sopenharmony_ci case ">": 3076e5c31af7Sopenharmony_ci return " {}>{} "; 3077e5c31af7Sopenharmony_ci 3078e5c31af7Sopenharmony_ci case "<<": 3079e5c31af7Sopenharmony_ci return " {}\\ll{} "; 3080e5c31af7Sopenharmony_ci 3081e5c31af7Sopenharmony_ci case ">>": 3082e5c31af7Sopenharmony_ci return " {}\\gg{} "; 3083e5c31af7Sopenharmony_ci 3084e5c31af7Sopenharmony_ci case "\\pm": 3085e5c31af7Sopenharmony_ci return " {}\\pm{} "; 3086e5c31af7Sopenharmony_ci 3087e5c31af7Sopenharmony_ci case "\\approx": 3088e5c31af7Sopenharmony_ci return " {}\\approx{} "; 3089e5c31af7Sopenharmony_ci 3090e5c31af7Sopenharmony_ci case "$\\approx$": 3091e5c31af7Sopenharmony_ci return " {}\\approx{} "; 3092e5c31af7Sopenharmony_ci 3093e5c31af7Sopenharmony_ci case "v": 3094e5c31af7Sopenharmony_ci return " \\downarrow{} "; 3095e5c31af7Sopenharmony_ci 3096e5c31af7Sopenharmony_ci case "(v)": 3097e5c31af7Sopenharmony_ci return " \\downarrow{} "; 3098e5c31af7Sopenharmony_ci 3099e5c31af7Sopenharmony_ci case "^": 3100e5c31af7Sopenharmony_ci return " \\uparrow{} "; 3101e5c31af7Sopenharmony_ci 3102e5c31af7Sopenharmony_ci case "(^)": 3103e5c31af7Sopenharmony_ci return " \\uparrow{} "; 3104e5c31af7Sopenharmony_ci 3105e5c31af7Sopenharmony_ci default: 3106e5c31af7Sopenharmony_ci throw ["MhchemBugT", "mhchem bug T. Please report."]; 3107e5c31af7Sopenharmony_ci } 3108e5c31af7Sopenharmony_ci } 3109e5c31af7Sopenharmony_ci}; // 3110