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