katex 0.16.32 → 0.16.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/contrib/auto-render/{auto-render.js → auto-render.ts} +41 -19
- package/contrib/auto-render/{splitAtDelimiters.js → splitAtDelimiters.ts} +18 -4
- package/contrib/auto-render/test/{auto-render-spec.js → auto-render-spec.ts} +10 -2
- package/contrib/copy-tex/README.md +2 -2
- package/contrib/copy-tex/{copy-tex.js → copy-tex.ts} +4 -6
- package/contrib/copy-tex/{katex2tex.js → katex2tex.ts} +2 -3
- package/contrib/mathtex-script-type/README.md +5 -5
- package/contrib/mhchem/README.md +1 -1
- package/contrib/render-a11y-string/{render-a11y-string.js → render-a11y-string.ts} +18 -33
- package/contrib/render-a11y-string/test/{render-a11y-string-spec.js → render-a11y-string-spec.ts} +0 -1
- package/dist/README.md +3 -3
- package/dist/contrib/auto-render.js +24 -57
- package/dist/contrib/auto-render.min.js +1 -1
- package/dist/contrib/auto-render.mjs +16586 -210
- package/dist/contrib/copy-tex.js +23 -37
- package/dist/contrib/copy-tex.min.js +1 -1
- package/dist/contrib/copy-tex.mjs +77 -95
- package/dist/contrib/mathtex-script-type.js +0 -3
- package/dist/contrib/mathtex-script-type.mjs +16427 -4
- package/dist/contrib/mhchem.js +55 -303
- package/dist/contrib/mhchem.mjs +12884 -723
- package/dist/contrib/render-a11y-string.js +13 -108
- package/dist/contrib/render-a11y-string.min.js +1 -1
- package/dist/contrib/render-a11y-string.mjs +17020 -760
- package/dist/katex-swap.css +2 -1
- package/dist/katex-swap.min.css +1 -1
- package/dist/katex.css +2 -1
- package/dist/katex.js +4547 -5680
- package/dist/katex.min.css +1 -1
- package/dist/katex.min.js +1 -1
- package/dist/katex.mjs +11854 -13828
- package/{katex.js → katex.ts} +8 -5
- package/package.json +34 -31
- package/src/{Lexer.js → Lexer.ts} +1 -2
- package/src/{MacroExpander.js → MacroExpander.ts} +11 -15
- package/src/{Namespace.js → Namespace.ts} +4 -6
- package/src/{Options.js → Options.ts} +7 -12
- package/src/{ParseError.js → ParseError.ts} +16 -26
- package/src/{Parser.js → Parser.ts} +68 -56
- package/src/{Settings.js → Settings.ts} +70 -70
- package/src/{SourceLocation.js → SourceLocation.ts} +6 -7
- package/src/{Style.js → Style.ts} +4 -5
- package/src/{Token.js → Token.ts} +8 -6
- package/src/{buildCommon.js → buildCommon.ts} +62 -55
- package/src/{buildHTML.js → buildHTML.ts} +29 -25
- package/src/{buildMathML.js → buildMathML.ts} +15 -13
- package/src/{buildTree.js → buildTree.ts} +1 -2
- package/src/{defineEnvironment.js → defineEnvironment.ts} +26 -27
- package/src/{defineFunction.js → defineFunction.ts} +54 -56
- package/src/{defineMacro.js → defineMacro.ts} +12 -13
- package/src/{delimiter.js → delimiter.ts} +19 -17
- package/src/{domTree.js → domTree.ts} +94 -103
- package/src/environments/{array.js → array.ts} +109 -99
- package/src/environments/{cd.js → cd.ts} +9 -11
- package/src/{environments.js → environments.ts} +0 -1
- package/src/{fontMetrics.js → fontMetrics.ts} +10 -12
- package/src/fontMetricsData.d.ts +3 -0
- package/src/functions/{accent.js → accent.ts} +1 -2
- package/src/functions/{accentunder.js → accentunder.ts} +0 -1
- package/src/functions/{arrow.js → arrow.ts} +4 -6
- package/src/functions/{char.js → char.ts} +0 -1
- package/src/functions/{color.js → color.ts} +5 -6
- package/src/functions/{cr.js → cr.ts} +0 -1
- package/src/functions/{def.js → def.ts} +9 -7
- package/src/functions/{delimsizing.js → delimsizing.ts} +11 -9
- package/src/functions/{enclose.js → enclose.ts} +3 -4
- package/src/functions/{environment.js → environment.ts} +2 -3
- package/src/functions/{font.js → font.ts} +4 -4
- package/src/functions/{genfrac.js → genfrac.ts} +14 -15
- package/src/functions/{hbox.js → hbox.ts} +0 -1
- package/src/functions/{horizBrace.js → horizBrace.ts} +4 -5
- package/src/functions/{href.js → href.ts} +4 -4
- package/src/functions/{html.js → html.ts} +3 -3
- package/src/functions/{htmlmathml.js → htmlmathml.ts} +0 -1
- package/src/functions/{includegraphics.js → includegraphics.ts} +0 -1
- package/src/functions/{kern.js → kern.ts} +0 -1
- package/src/functions/{lap.js → lap.ts} +0 -1
- package/src/functions/{math.js → math.ts} +0 -1
- package/src/functions/{mathchoice.js → mathchoice.ts} +2 -2
- package/src/functions/{mclass.js → mclass.ts} +5 -6
- package/src/functions/{op.js → op.ts} +9 -11
- package/src/functions/{operatorname.js → operatorname.ts} +4 -7
- package/src/functions/{ordgroup.js → ordgroup.ts} +0 -2
- package/src/functions/{overline.js → overline.ts} +0 -1
- package/src/functions/{phantom.js → phantom.ts} +0 -1
- package/src/functions/{pmb.js → pmb.ts} +0 -1
- package/src/functions/{raisebox.js → raisebox.ts} +0 -1
- package/src/functions/{relax.js → relax.ts} +0 -1
- package/src/functions/{rule.js → rule.ts} +0 -1
- package/src/functions/{sizing.js → sizing.ts} +0 -1
- package/src/functions/{smash.js → smash.ts} +2 -4
- package/src/functions/{sqrt.js → sqrt.ts} +0 -1
- package/src/functions/{styling.js → styling.ts} +3 -3
- package/src/functions/{supsub.js → supsub.ts} +6 -8
- package/src/functions/{symbolsOp.js → symbolsOp.ts} +0 -2
- package/src/functions/{symbolsOrd.js → symbolsOrd.ts} +1 -2
- package/src/functions/{symbolsSpacing.js → symbolsSpacing.ts} +2 -3
- package/src/functions/{tag.js → tag.ts} +0 -2
- package/src/functions/{text.js → text.ts} +7 -6
- package/src/functions/{underline.js → underline.ts} +0 -1
- package/src/functions/utils/{assembleSupSub.js → assembleSupSub.ts} +2 -3
- package/src/functions/{vcenter.js → vcenter.ts} +0 -2
- package/src/functions/{verb.js → verb.ts} +0 -1
- package/src/{functions.js → functions.ts} +0 -1
- package/src/{macros.js → macros.ts} +10 -8
- package/src/{mathMLTree.js → mathMLTree.ts} +5 -6
- package/src/parseNode.ts +522 -0
- package/src/{parseTree.js → parseTree.ts} +5 -3
- package/src/{spacingData.js → spacingData.ts} +11 -12
- package/src/{stretchy.js → stretchy.ts} +7 -7
- package/src/styles/katex-swap.scss +1 -4
- package/src/styles/katex.scss +9 -0
- package/src/{svgGeometry.js → svgGeometry.ts} +1 -2
- package/src/{symbols.js → symbols.ts} +6 -6
- package/src/{tree.js → tree.ts} +5 -7
- package/src/{types.js → types.ts} +1 -2
- package/src/unicodeAccents.js +4 -1
- package/src/{unicodeScripts.js → unicodeScripts.ts} +1 -3
- package/src/{unicodeSupOrSub.js → unicodeSupOrSub.ts} +1 -1
- package/src/unicodeSymbols.js +4 -3
- package/src/{units.js → units.ts} +2 -4
- package/src/{utils.js → utils.ts} +2 -3
- package/src/{wide-character.js → wide-character.ts} +8 -10
- package/types/katex.d.ts +13 -12
- package/src/parseNode.js +0 -523
package/dist/contrib/mhchem.js
CHANGED
|
@@ -80,9 +80,7 @@ var __webpack_exports__ = {};
|
|
|
80
80
|
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(757);
|
|
81
81
|
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
|
|
82
82
|
/* eslint-disable */
|
|
83
|
-
|
|
84
83
|
/* -*- Mode: JavaScript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
|
|
85
|
-
|
|
86
84
|
/* vim: set ts=2 et sw=2 tw=80: */
|
|
87
85
|
|
|
88
86
|
/*************************************************************
|
|
@@ -125,26 +123,30 @@ var __webpack_exports__ = {};
|
|
|
125
123
|
* See the License for the specific language governing permissions and
|
|
126
124
|
* limitations under the License.
|
|
127
125
|
*/
|
|
126
|
+
|
|
128
127
|
//
|
|
129
128
|
// Coding Style
|
|
130
129
|
// - use '' for identifiers that can by minified/uglified
|
|
131
130
|
// - use "" for strings that need to stay untouched
|
|
131
|
+
|
|
132
132
|
// version: "3.3.0" for MathJax and KaTeX
|
|
133
|
+
|
|
133
134
|
// Add \ce, \pu, and \tripledash to the KaTeX macros.
|
|
135
|
+
|
|
134
136
|
katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\ce", function (context) {
|
|
135
137
|
return chemParse(context.consumeArgs(1)[0], "ce");
|
|
136
138
|
});
|
|
137
|
-
|
|
138
139
|
katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\pu", function (context) {
|
|
139
140
|
return chemParse(context.consumeArgs(1)[0], "pu");
|
|
140
|
-
});
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// Needed for \bond for the ~ forms
|
|
141
144
|
// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not
|
|
142
145
|
// a mathematical minus, U+2212. So we need that extra 0.56.
|
|
143
|
-
|
|
144
|
-
|
|
145
146
|
katex__WEBPACK_IMPORTED_MODULE_0___default().__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");
|
|
146
147
|
|
|
147
|
-
|
|
148
|
+
|
|
149
|
+
//
|
|
148
150
|
// This is the main function for handing the \ce and \pu commands.
|
|
149
151
|
// It takes the argument to \ce or \pu and returns the corresponding TeX string.
|
|
150
152
|
//
|
|
@@ -153,27 +155,23 @@ var chemParse = function (tokens, stateMachine) {
|
|
|
153
155
|
// Recreate the argument string from KaTeX's array of tokens.
|
|
154
156
|
var str = "";
|
|
155
157
|
var expectedLoc = tokens.length && tokens[tokens.length - 1].loc.start;
|
|
156
|
-
|
|
157
158
|
for (var i = tokens.length - 1; i >= 0; i--) {
|
|
158
159
|
if (tokens[i].loc.start > expectedLoc) {
|
|
159
160
|
// context.consumeArgs has eaten a space.
|
|
160
161
|
str += " ";
|
|
161
162
|
expectedLoc = tokens[i].loc.start;
|
|
162
163
|
}
|
|
163
|
-
|
|
164
164
|
str += tokens[i].text;
|
|
165
165
|
expectedLoc += tokens[i].text.length;
|
|
166
166
|
}
|
|
167
|
-
|
|
168
167
|
var tex = texify.go(mhchemParser.go(str, stateMachine));
|
|
169
168
|
return tex;
|
|
170
|
-
};
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
//
|
|
171
172
|
// Core parser for mhchem syntax (recursive)
|
|
172
173
|
//
|
|
173
|
-
|
|
174
174
|
/** @type {MhchemParser} */
|
|
175
|
-
|
|
176
|
-
|
|
177
175
|
var mhchemParser = {
|
|
178
176
|
//
|
|
179
177
|
// Parses mchem \ce syntax
|
|
@@ -185,12 +183,12 @@ var mhchemParser = {
|
|
|
185
183
|
if (!input) {
|
|
186
184
|
return [];
|
|
187
185
|
}
|
|
188
|
-
|
|
189
186
|
if (stateMachine === undefined) {
|
|
190
187
|
stateMachine = 'ce';
|
|
191
188
|
}
|
|
189
|
+
var state = '0';
|
|
192
190
|
|
|
193
|
-
|
|
191
|
+
//
|
|
194
192
|
// String buffers for parsing:
|
|
195
193
|
//
|
|
196
194
|
// buffer.a == amount
|
|
@@ -223,79 +221,68 @@ var mhchemParser = {
|
|
|
223
221
|
// 3 == next atom
|
|
224
222
|
// c == macro
|
|
225
223
|
//
|
|
226
|
-
|
|
227
224
|
/** @type {Buffer} */
|
|
228
|
-
|
|
229
225
|
var buffer = {};
|
|
230
226
|
buffer['parenthesisLevel'] = 0;
|
|
231
227
|
input = input.replace(/\n/g, " ");
|
|
232
228
|
input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-");
|
|
233
|
-
input = input.replace(/[\u2026]/g, "...");
|
|
229
|
+
input = input.replace(/[\u2026]/g, "...");
|
|
230
|
+
|
|
231
|
+
//
|
|
234
232
|
// Looks through mhchemParser.transitions, to execute a matching action
|
|
235
233
|
// (recursive)
|
|
236
234
|
//
|
|
237
|
-
|
|
238
235
|
var lastInput;
|
|
239
236
|
var watchdog = 10;
|
|
240
237
|
/** @type {ParserOutput[]} */
|
|
241
|
-
|
|
242
238
|
var output = [];
|
|
243
|
-
|
|
244
239
|
while (true) {
|
|
245
240
|
if (lastInput !== input) {
|
|
246
241
|
watchdog = 10;
|
|
247
242
|
lastInput = input;
|
|
248
243
|
} else {
|
|
249
244
|
watchdog--;
|
|
250
|
-
}
|
|
245
|
+
}
|
|
246
|
+
//
|
|
251
247
|
// Find actions in transition table
|
|
252
248
|
//
|
|
253
|
-
|
|
254
|
-
|
|
255
249
|
var machine = mhchemParser.stateMachines[stateMachine];
|
|
256
250
|
var t = machine.transitions[state] || machine.transitions['*'];
|
|
257
|
-
|
|
258
251
|
iterateTransitions: for (var i = 0; i < t.length; i++) {
|
|
259
252
|
var matches = mhchemParser.patterns.match_(t[i].pattern, input);
|
|
260
|
-
|
|
261
253
|
if (matches) {
|
|
262
254
|
//
|
|
263
255
|
// Execute actions
|
|
264
256
|
//
|
|
265
257
|
var task = t[i].task;
|
|
266
|
-
|
|
267
258
|
for (var iA = 0; iA < task.action_.length; iA++) {
|
|
268
|
-
var o;
|
|
259
|
+
var o;
|
|
260
|
+
//
|
|
269
261
|
// Find and execute action
|
|
270
262
|
//
|
|
271
|
-
|
|
272
263
|
if (machine.actions[task.action_[iA].type_]) {
|
|
273
264
|
o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
|
|
274
265
|
} else if (mhchemParser.actions[task.action_[iA].type_]) {
|
|
275
266
|
o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);
|
|
276
267
|
} else {
|
|
277
268
|
throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action
|
|
278
|
-
}
|
|
269
|
+
}
|
|
270
|
+
//
|
|
279
271
|
// Add output
|
|
280
272
|
//
|
|
281
|
-
|
|
282
|
-
|
|
283
273
|
mhchemParser.concatArray(output, o);
|
|
284
|
-
}
|
|
274
|
+
}
|
|
275
|
+
//
|
|
285
276
|
// Set next state,
|
|
286
277
|
// Shorten input,
|
|
287
278
|
// Continue with next character
|
|
288
279
|
// (= apply only one transition per position)
|
|
289
280
|
//
|
|
290
|
-
|
|
291
|
-
|
|
292
281
|
state = task.nextState || state;
|
|
293
|
-
|
|
294
282
|
if (input.length > 0) {
|
|
295
283
|
if (!task.revisit) {
|
|
296
284
|
input = matches.remainder;
|
|
297
285
|
}
|
|
298
|
-
|
|
299
286
|
if (!task.toContinue) {
|
|
300
287
|
break iterateTransitions;
|
|
301
288
|
}
|
|
@@ -303,11 +290,10 @@ var mhchemParser = {
|
|
|
303
290
|
return output;
|
|
304
291
|
}
|
|
305
292
|
}
|
|
306
|
-
}
|
|
293
|
+
}
|
|
294
|
+
//
|
|
307
295
|
// Prevent infinite loop
|
|
308
296
|
//
|
|
309
|
-
|
|
310
|
-
|
|
311
297
|
if (watchdog <= 0) {
|
|
312
298
|
throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character
|
|
313
299
|
}
|
|
@@ -351,46 +337,37 @@ var mhchemParser = {
|
|
|
351
337
|
'-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/,
|
|
352
338
|
'(-)(9.,9)(e)(99)': function (input) {
|
|
353
339
|
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]+\}))?/);
|
|
354
|
-
|
|
355
340
|
if (m && m[0]) {
|
|
356
341
|
return {
|
|
357
342
|
match_: m.splice(1),
|
|
358
343
|
remainder: input.substr(m[0].length)
|
|
359
344
|
};
|
|
360
345
|
}
|
|
361
|
-
|
|
362
346
|
return null;
|
|
363
347
|
},
|
|
364
348
|
'(-)(9)^(-9)': function (input) {
|
|
365
349
|
var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);
|
|
366
|
-
|
|
367
350
|
if (m && m[0]) {
|
|
368
351
|
return {
|
|
369
352
|
match_: m.splice(1),
|
|
370
353
|
remainder: input.substr(m[0].length)
|
|
371
354
|
};
|
|
372
355
|
}
|
|
373
|
-
|
|
374
356
|
return null;
|
|
375
357
|
},
|
|
376
358
|
'state of aggregation $': function (input) {
|
|
377
359
|
// ... or crystal system
|
|
378
360
|
var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat)
|
|
379
|
-
|
|
380
361
|
if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) {
|
|
381
362
|
return a;
|
|
382
363
|
} // AND end of 'phrase'
|
|
383
|
-
|
|
384
|
-
|
|
385
364
|
var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$)
|
|
386
|
-
|
|
387
365
|
if (m) {
|
|
388
366
|
return {
|
|
389
367
|
match_: m[0],
|
|
390
368
|
remainder: input.substr(m[0].length)
|
|
391
369
|
};
|
|
392
370
|
}
|
|
393
|
-
|
|
394
371
|
return null;
|
|
395
372
|
},
|
|
396
373
|
'_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/,
|
|
@@ -512,23 +489,19 @@ var mhchemParser = {
|
|
|
512
489
|
'roman numeral': /^[IVX]+/,
|
|
513
490
|
'1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,
|
|
514
491
|
'amount': function (input) {
|
|
515
|
-
var match;
|
|
516
|
-
|
|
492
|
+
var match;
|
|
493
|
+
// e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing
|
|
517
494
|
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))/);
|
|
518
|
-
|
|
519
495
|
if (match) {
|
|
520
496
|
return {
|
|
521
497
|
match_: match[0],
|
|
522
498
|
remainder: input.substr(match[0].length)
|
|
523
499
|
};
|
|
524
500
|
}
|
|
525
|
-
|
|
526
501
|
var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", "");
|
|
527
|
-
|
|
528
502
|
if (a) {
|
|
529
503
|
// e.g. $2n-1$, $-$
|
|
530
504
|
match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/);
|
|
531
|
-
|
|
532
505
|
if (match) {
|
|
533
506
|
return {
|
|
534
507
|
match_: match[0],
|
|
@@ -536,7 +509,6 @@ var mhchemParser = {
|
|
|
536
509
|
};
|
|
537
510
|
}
|
|
538
511
|
}
|
|
539
|
-
|
|
540
512
|
return null;
|
|
541
513
|
},
|
|
542
514
|
'amount2': function (input) {
|
|
@@ -547,17 +519,13 @@ var mhchemParser = {
|
|
|
547
519
|
if (input.match(/^\([a-z]+\)$/)) {
|
|
548
520
|
return null;
|
|
549
521
|
} // state of aggregation = no formula
|
|
550
|
-
|
|
551
|
-
|
|
552
522
|
var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);
|
|
553
|
-
|
|
554
523
|
if (match) {
|
|
555
524
|
return {
|
|
556
525
|
match_: match[0],
|
|
557
526
|
remainder: input.substr(match[0].length)
|
|
558
527
|
};
|
|
559
528
|
}
|
|
560
|
-
|
|
561
529
|
return null;
|
|
562
530
|
},
|
|
563
531
|
'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,
|
|
@@ -572,29 +540,21 @@ var mhchemParser = {
|
|
|
572
540
|
if (input.indexOf(pattern) !== 0) {
|
|
573
541
|
return null;
|
|
574
542
|
}
|
|
575
|
-
|
|
576
543
|
return pattern;
|
|
577
544
|
} else {
|
|
578
545
|
var match = input.match(pattern);
|
|
579
|
-
|
|
580
546
|
if (!match) {
|
|
581
547
|
return null;
|
|
582
548
|
}
|
|
583
|
-
|
|
584
549
|
return match[0];
|
|
585
550
|
}
|
|
586
551
|
};
|
|
587
552
|
/** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */
|
|
588
|
-
|
|
589
|
-
|
|
590
553
|
var _findObserveGroups = function (input, i, endChars) {
|
|
591
554
|
var braces = 0;
|
|
592
|
-
|
|
593
555
|
while (i < input.length) {
|
|
594
556
|
var a = input.charAt(i);
|
|
595
|
-
|
|
596
557
|
var match = _match(input.substr(i), endChars);
|
|
597
|
-
|
|
598
558
|
if (match !== null && braces === 0) {
|
|
599
559
|
return {
|
|
600
560
|
endMatchBegin: i,
|
|
@@ -609,38 +569,27 @@ var mhchemParser = {
|
|
|
609
569
|
braces--;
|
|
610
570
|
}
|
|
611
571
|
}
|
|
612
|
-
|
|
613
572
|
i++;
|
|
614
573
|
}
|
|
615
|
-
|
|
616
574
|
if (braces > 0) {
|
|
617
575
|
return null;
|
|
618
576
|
}
|
|
619
|
-
|
|
620
577
|
return null;
|
|
621
578
|
};
|
|
622
|
-
|
|
623
579
|
var match = _match(input, begExcl);
|
|
624
|
-
|
|
625
580
|
if (match === null) {
|
|
626
581
|
return null;
|
|
627
582
|
}
|
|
628
|
-
|
|
629
583
|
input = input.substr(match.length);
|
|
630
584
|
match = _match(input, begIncl);
|
|
631
|
-
|
|
632
585
|
if (match === null) {
|
|
633
586
|
return null;
|
|
634
587
|
}
|
|
635
|
-
|
|
636
588
|
var e = _findObserveGroups(input, match.length, endIncl || endExcl);
|
|
637
|
-
|
|
638
589
|
if (e === null) {
|
|
639
590
|
return null;
|
|
640
591
|
}
|
|
641
|
-
|
|
642
592
|
var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin);
|
|
643
|
-
|
|
644
593
|
if (!(beg2Excl || beg2Incl)) {
|
|
645
594
|
return {
|
|
646
595
|
match_: match1,
|
|
@@ -648,13 +597,10 @@ var mhchemParser = {
|
|
|
648
597
|
};
|
|
649
598
|
} else {
|
|
650
599
|
var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl);
|
|
651
|
-
|
|
652
600
|
if (group2 === null) {
|
|
653
601
|
return null;
|
|
654
602
|
}
|
|
655
603
|
/** @type {string[]} */
|
|
656
|
-
|
|
657
|
-
|
|
658
604
|
var matchRet = [match1, group2.match_];
|
|
659
605
|
return {
|
|
660
606
|
match_: combine ? matchRet.join("") : matchRet,
|
|
@@ -669,7 +615,6 @@ var mhchemParser = {
|
|
|
669
615
|
//
|
|
670
616
|
match_: function (m, input) {
|
|
671
617
|
var pattern = mhchemParser.patterns.patterns[m];
|
|
672
|
-
|
|
673
618
|
if (pattern === undefined) {
|
|
674
619
|
throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern
|
|
675
620
|
} else if (typeof pattern === "function") {
|
|
@@ -677,10 +622,8 @@ var mhchemParser = {
|
|
|
677
622
|
} else {
|
|
678
623
|
// RegExp
|
|
679
624
|
var match = input.match(pattern);
|
|
680
|
-
|
|
681
625
|
if (match) {
|
|
682
626
|
var mm;
|
|
683
|
-
|
|
684
627
|
if (match[2]) {
|
|
685
628
|
mm = [match[1], match[2]];
|
|
686
629
|
} else if (match[1]) {
|
|
@@ -688,13 +631,11 @@ var mhchemParser = {
|
|
|
688
631
|
} else {
|
|
689
632
|
mm = match[0];
|
|
690
633
|
}
|
|
691
|
-
|
|
692
634
|
return {
|
|
693
635
|
match_: mm,
|
|
694
636
|
remainder: input.substr(match[0].length)
|
|
695
637
|
};
|
|
696
638
|
}
|
|
697
|
-
|
|
698
639
|
return null;
|
|
699
640
|
}
|
|
700
641
|
}
|
|
@@ -787,12 +728,10 @@ var mhchemParser = {
|
|
|
787
728
|
'1/2': function (buffer, m) {
|
|
788
729
|
/** @type {ParserOutput[]} */
|
|
789
730
|
var ret = [];
|
|
790
|
-
|
|
791
731
|
if (m.match(/^[+\-]/)) {
|
|
792
732
|
ret.push(m.substr(0, 1));
|
|
793
733
|
m = m.substr(1);
|
|
794
734
|
}
|
|
795
|
-
|
|
796
735
|
var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);
|
|
797
736
|
n[1] = n[1].replace(/\$/g, "");
|
|
798
737
|
ret.push({
|
|
@@ -800,7 +739,6 @@ var mhchemParser = {
|
|
|
800
739
|
p1: n[1],
|
|
801
740
|
p2: n[2]
|
|
802
741
|
});
|
|
803
|
-
|
|
804
742
|
if (n[3]) {
|
|
805
743
|
n[3] = n[3].replace(/\$/g, "");
|
|
806
744
|
ret.push({
|
|
@@ -808,7 +746,6 @@ var mhchemParser = {
|
|
|
808
746
|
p1: n[3]
|
|
809
747
|
});
|
|
810
748
|
}
|
|
811
|
-
|
|
812
749
|
return ret;
|
|
813
750
|
},
|
|
814
751
|
'9,9': function (buffer, m) {
|
|
@@ -823,46 +760,37 @@ var mhchemParser = {
|
|
|
823
760
|
createTransitions: function (o) {
|
|
824
761
|
var pattern, state;
|
|
825
762
|
/** @type {string[]} */
|
|
826
|
-
|
|
827
763
|
var stateArray;
|
|
828
|
-
var i;
|
|
764
|
+
var i;
|
|
765
|
+
//
|
|
829
766
|
// 1. Collect all states
|
|
830
767
|
//
|
|
831
|
-
|
|
832
768
|
/** @type {Transitions} */
|
|
833
|
-
|
|
834
769
|
var transitions = {};
|
|
835
|
-
|
|
836
770
|
for (pattern in o) {
|
|
837
771
|
for (state in o[pattern]) {
|
|
838
772
|
stateArray = state.split("|");
|
|
839
773
|
o[pattern][state].stateArray = stateArray;
|
|
840
|
-
|
|
841
774
|
for (i = 0; i < stateArray.length; i++) {
|
|
842
775
|
transitions[stateArray[i]] = [];
|
|
843
776
|
}
|
|
844
777
|
}
|
|
845
|
-
}
|
|
778
|
+
}
|
|
779
|
+
//
|
|
846
780
|
// 2. Fill states
|
|
847
781
|
//
|
|
848
|
-
|
|
849
|
-
|
|
850
782
|
for (pattern in o) {
|
|
851
783
|
for (state in o[pattern]) {
|
|
852
784
|
stateArray = o[pattern][state].stateArray || [];
|
|
853
|
-
|
|
854
785
|
for (i = 0; i < stateArray.length; i++) {
|
|
855
786
|
//
|
|
856
787
|
// 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}]
|
|
857
788
|
// (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)
|
|
858
789
|
//
|
|
859
|
-
|
|
860
790
|
/** @type {any} */
|
|
861
791
|
var p = o[pattern][state];
|
|
862
|
-
|
|
863
792
|
if (p.action_) {
|
|
864
793
|
p.action_ = [].concat(p.action_);
|
|
865
|
-
|
|
866
794
|
for (var k = 0; k < p.action_.length; k++) {
|
|
867
795
|
if (typeof p.action_[k] === "string") {
|
|
868
796
|
p.action_[k] = {
|
|
@@ -872,13 +800,11 @@ var mhchemParser = {
|
|
|
872
800
|
}
|
|
873
801
|
} else {
|
|
874
802
|
p.action_ = [];
|
|
875
|
-
}
|
|
803
|
+
}
|
|
804
|
+
//
|
|
876
805
|
// 2.b Multi-insert
|
|
877
806
|
//
|
|
878
|
-
|
|
879
|
-
|
|
880
807
|
var patternArray = pattern.split("|");
|
|
881
|
-
|
|
882
808
|
for (var j = 0; j < patternArray.length; j++) {
|
|
883
809
|
if (stateArray[i] === '*') {
|
|
884
810
|
// insert into all
|
|
@@ -898,14 +824,14 @@ var mhchemParser = {
|
|
|
898
824
|
}
|
|
899
825
|
}
|
|
900
826
|
}
|
|
901
|
-
|
|
902
827
|
return transitions;
|
|
903
828
|
},
|
|
904
829
|
stateMachines: {}
|
|
905
|
-
};
|
|
830
|
+
};
|
|
831
|
+
|
|
832
|
+
//
|
|
906
833
|
// Definition of state machines
|
|
907
834
|
//
|
|
908
|
-
|
|
909
835
|
mhchemParser.stateMachines = {
|
|
910
836
|
//
|
|
911
837
|
// \ce state machines
|
|
@@ -1553,7 +1479,6 @@ mhchemParser.stateMachines = {
|
|
|
1553
1479
|
actions: {
|
|
1554
1480
|
'o after d': function (buffer, m) {
|
|
1555
1481
|
var ret;
|
|
1556
|
-
|
|
1557
1482
|
if ((buffer.d || "").match(/^[0-9]+$/)) {
|
|
1558
1483
|
var tmp = buffer.d;
|
|
1559
1484
|
buffer.d = undefined;
|
|
@@ -1562,7 +1487,6 @@ mhchemParser.stateMachines = {
|
|
|
1562
1487
|
} else {
|
|
1563
1488
|
ret = this['output'](buffer);
|
|
1564
1489
|
}
|
|
1565
|
-
|
|
1566
1490
|
mhchemParser.actions['o='](buffer, m);
|
|
1567
1491
|
return ret;
|
|
1568
1492
|
},
|
|
@@ -1587,15 +1511,11 @@ mhchemParser.stateMachines = {
|
|
|
1587
1511
|
var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || "");
|
|
1588
1512
|
var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || "");
|
|
1589
1513
|
var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4);
|
|
1590
|
-
|
|
1591
1514
|
if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) {
|
|
1592
1515
|
buffer.o = '$' + buffer.o + '$';
|
|
1593
1516
|
}
|
|
1594
1517
|
/** @type {ParserOutput[]} */
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
1518
|
var ret = [];
|
|
1598
|
-
|
|
1599
1519
|
if (hyphenFollows) {
|
|
1600
1520
|
mhchemParser.concatArray(ret, this['output'](buffer));
|
|
1601
1521
|
ret.push({
|
|
@@ -1603,7 +1523,6 @@ mhchemParser.stateMachines = {
|
|
|
1603
1523
|
});
|
|
1604
1524
|
} else {
|
|
1605
1525
|
c1 = mhchemParser.patterns.match_('digits', buffer.d || "");
|
|
1606
|
-
|
|
1607
1526
|
if (isAfterD && c1 && c1.remainder === '') {
|
|
1608
1527
|
mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m));
|
|
1609
1528
|
mhchemParser.concatArray(ret, this['output'](buffer));
|
|
@@ -1612,7 +1531,6 @@ mhchemParser.stateMachines = {
|
|
|
1612
1531
|
mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-"));
|
|
1613
1532
|
}
|
|
1614
1533
|
}
|
|
1615
|
-
|
|
1616
1534
|
return ret;
|
|
1617
1535
|
},
|
|
1618
1536
|
'a to o': function (buffer) {
|
|
@@ -1646,7 +1564,6 @@ mhchemParser.stateMachines = {
|
|
|
1646
1564
|
'comma': function (buffer, m) {
|
|
1647
1565
|
var a = m.replace(/\s*$/, '');
|
|
1648
1566
|
var withSpace = a !== m;
|
|
1649
|
-
|
|
1650
1567
|
if (withSpace && buffer['parenthesisLevel'] === 0) {
|
|
1651
1568
|
return {
|
|
1652
1569
|
type_: 'comma enumeration L',
|
|
@@ -1664,21 +1581,18 @@ mhchemParser.stateMachines = {
|
|
|
1664
1581
|
// undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)
|
|
1665
1582
|
// 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)
|
|
1666
1583
|
// 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as)
|
|
1667
|
-
|
|
1668
1584
|
/** @type {ParserOutput | ParserOutput[]} */
|
|
1669
1585
|
var ret;
|
|
1670
|
-
|
|
1671
1586
|
if (!buffer.r) {
|
|
1672
1587
|
ret = [];
|
|
1673
|
-
|
|
1674
|
-
|
|
1588
|
+
if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {
|
|
1589
|
+
//ret = [];
|
|
1675
1590
|
} else {
|
|
1676
1591
|
if (buffer.sb) {
|
|
1677
1592
|
ret.push({
|
|
1678
1593
|
type_: 'entitySkip'
|
|
1679
1594
|
});
|
|
1680
1595
|
}
|
|
1681
|
-
|
|
1682
1596
|
if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) {
|
|
1683
1597
|
buffer.o = buffer.a;
|
|
1684
1598
|
buffer.a = undefined;
|
|
@@ -1694,7 +1608,6 @@ mhchemParser.stateMachines = {
|
|
|
1694
1608
|
buffer.dType = undefined;
|
|
1695
1609
|
}
|
|
1696
1610
|
}
|
|
1697
|
-
|
|
1698
1611
|
ret.push({
|
|
1699
1612
|
type_: 'chemfive',
|
|
1700
1613
|
a: mhchemParser.go(buffer.a, 'a'),
|
|
@@ -1708,10 +1621,8 @@ mhchemParser.stateMachines = {
|
|
|
1708
1621
|
}
|
|
1709
1622
|
} else {
|
|
1710
1623
|
// r
|
|
1711
|
-
|
|
1712
1624
|
/** @type {ParserOutput[]} */
|
|
1713
1625
|
var rd;
|
|
1714
|
-
|
|
1715
1626
|
if (buffer.rdt === 'M') {
|
|
1716
1627
|
rd = mhchemParser.go(buffer.rd, 'tex-math');
|
|
1717
1628
|
} else if (buffer.rdt === 'T') {
|
|
@@ -1723,10 +1634,7 @@ mhchemParser.stateMachines = {
|
|
|
1723
1634
|
rd = mhchemParser.go(buffer.rd);
|
|
1724
1635
|
}
|
|
1725
1636
|
/** @type {ParserOutput[]} */
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
1637
|
var rq;
|
|
1729
|
-
|
|
1730
1638
|
if (buffer.rqt === 'M') {
|
|
1731
1639
|
rq = mhchemParser.go(buffer.rq, 'tex-math');
|
|
1732
1640
|
} else if (buffer.rqt === 'T') {
|
|
@@ -1737,7 +1645,6 @@ mhchemParser.stateMachines = {
|
|
|
1737
1645
|
} else {
|
|
1738
1646
|
rq = mhchemParser.go(buffer.rq);
|
|
1739
1647
|
}
|
|
1740
|
-
|
|
1741
1648
|
ret = {
|
|
1742
1649
|
type_: 'arrow',
|
|
1743
1650
|
r: buffer.r,
|
|
@@ -1745,13 +1652,11 @@ mhchemParser.stateMachines = {
|
|
|
1745
1652
|
rq: rq
|
|
1746
1653
|
};
|
|
1747
1654
|
}
|
|
1748
|
-
|
|
1749
1655
|
for (var p in buffer) {
|
|
1750
1656
|
if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') {
|
|
1751
1657
|
delete buffer[p];
|
|
1752
1658
|
}
|
|
1753
1659
|
}
|
|
1754
|
-
|
|
1755
1660
|
return ret;
|
|
1756
1661
|
},
|
|
1757
1662
|
'oxidation-output': function (buffer, m) {
|
|
@@ -1949,11 +1854,9 @@ mhchemParser.stateMachines = {
|
|
|
1949
1854
|
type_: 'text',
|
|
1950
1855
|
p1: buffer.text_
|
|
1951
1856
|
};
|
|
1952
|
-
|
|
1953
1857
|
for (var p in buffer) {
|
|
1954
1858
|
delete buffer[p];
|
|
1955
1859
|
}
|
|
1956
|
-
|
|
1957
1860
|
return ret;
|
|
1958
1861
|
}
|
|
1959
1862
|
}
|
|
@@ -2242,11 +2145,9 @@ mhchemParser.stateMachines = {
|
|
|
2242
2145
|
type_: 'tex-math',
|
|
2243
2146
|
p1: buffer.o
|
|
2244
2147
|
};
|
|
2245
|
-
|
|
2246
2148
|
for (var p in buffer) {
|
|
2247
2149
|
delete buffer[p];
|
|
2248
2150
|
}
|
|
2249
|
-
|
|
2250
2151
|
return ret;
|
|
2251
2152
|
}
|
|
2252
2153
|
}
|
|
@@ -2291,11 +2192,9 @@ mhchemParser.stateMachines = {
|
|
|
2291
2192
|
type_: 'tex-math',
|
|
2292
2193
|
p1: buffer.o
|
|
2293
2194
|
};
|
|
2294
|
-
|
|
2295
2195
|
for (var p in buffer) {
|
|
2296
2196
|
delete buffer[p];
|
|
2297
2197
|
}
|
|
2298
|
-
|
|
2299
2198
|
return ret;
|
|
2300
2199
|
}
|
|
2301
2200
|
}
|
|
@@ -2408,16 +2307,13 @@ mhchemParser.stateMachines = {
|
|
|
2408
2307
|
'enumber': function (buffer, m) {
|
|
2409
2308
|
/** @type {ParserOutput[]} */
|
|
2410
2309
|
var ret = [];
|
|
2411
|
-
|
|
2412
2310
|
if (m[0] === "+-" || m[0] === "+/-") {
|
|
2413
2311
|
ret.push("\\pm ");
|
|
2414
2312
|
} else if (m[0]) {
|
|
2415
2313
|
ret.push(m[0]);
|
|
2416
2314
|
}
|
|
2417
|
-
|
|
2418
2315
|
if (m[1]) {
|
|
2419
2316
|
mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
|
|
2420
|
-
|
|
2421
2317
|
if (m[2]) {
|
|
2422
2318
|
if (m[2].match(/[,.]/)) {
|
|
2423
2319
|
mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9'));
|
|
@@ -2425,12 +2321,9 @@ mhchemParser.stateMachines = {
|
|
|
2425
2321
|
ret.push(m[2]);
|
|
2426
2322
|
}
|
|
2427
2323
|
}
|
|
2428
|
-
|
|
2429
2324
|
m[3] = m[4] || m[3];
|
|
2430
|
-
|
|
2431
2325
|
if (m[3]) {
|
|
2432
2326
|
m[3] = m[3].trim();
|
|
2433
|
-
|
|
2434
2327
|
if (m[3] === "e" || m[3].substr(0, 1) === "*") {
|
|
2435
2328
|
ret.push({
|
|
2436
2329
|
type_: 'cdot'
|
|
@@ -2442,23 +2335,19 @@ mhchemParser.stateMachines = {
|
|
|
2442
2335
|
}
|
|
2443
2336
|
}
|
|
2444
2337
|
}
|
|
2445
|
-
|
|
2446
2338
|
if (m[3]) {
|
|
2447
2339
|
ret.push("10^{" + m[5] + "}");
|
|
2448
2340
|
}
|
|
2449
|
-
|
|
2450
2341
|
return ret;
|
|
2451
2342
|
},
|
|
2452
2343
|
'number^': function (buffer, m) {
|
|
2453
2344
|
/** @type {ParserOutput[]} */
|
|
2454
2345
|
var ret = [];
|
|
2455
|
-
|
|
2456
2346
|
if (m[0] === "+-" || m[0] === "+/-") {
|
|
2457
2347
|
ret.push("\\pm ");
|
|
2458
2348
|
} else if (m[0]) {
|
|
2459
2349
|
ret.push(m[0]);
|
|
2460
2350
|
}
|
|
2461
|
-
|
|
2462
2351
|
mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));
|
|
2463
2352
|
ret.push("^{" + m[2] + "}");
|
|
2464
2353
|
return ret;
|
|
@@ -2478,22 +2367,17 @@ mhchemParser.stateMachines = {
|
|
|
2478
2367
|
/** @type {ParserOutput | ParserOutput[]} */
|
|
2479
2368
|
var ret;
|
|
2480
2369
|
var md = mhchemParser.patterns.match_('{(...)}', buffer.d || "");
|
|
2481
|
-
|
|
2482
2370
|
if (md && md.remainder === '') {
|
|
2483
2371
|
buffer.d = md.match_;
|
|
2484
2372
|
}
|
|
2485
|
-
|
|
2486
2373
|
var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || "");
|
|
2487
|
-
|
|
2488
2374
|
if (mq && mq.remainder === '') {
|
|
2489
2375
|
buffer.q = mq.match_;
|
|
2490
2376
|
}
|
|
2491
|
-
|
|
2492
2377
|
if (buffer.d) {
|
|
2493
2378
|
buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
|
|
2494
2379
|
buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F");
|
|
2495
2380
|
}
|
|
2496
|
-
|
|
2497
2381
|
if (buffer.q) {
|
|
2498
2382
|
// fraction
|
|
2499
2383
|
buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C");
|
|
@@ -2502,7 +2386,6 @@ mhchemParser.stateMachines = {
|
|
|
2502
2386
|
d: mhchemParser.go(buffer.d, 'pu'),
|
|
2503
2387
|
q: mhchemParser.go(buffer.q, 'pu')
|
|
2504
2388
|
};
|
|
2505
|
-
|
|
2506
2389
|
if (buffer.o === '//') {
|
|
2507
2390
|
ret = {
|
|
2508
2391
|
type_: 'pu-frac',
|
|
@@ -2511,7 +2394,6 @@ mhchemParser.stateMachines = {
|
|
|
2511
2394
|
};
|
|
2512
2395
|
} else {
|
|
2513
2396
|
ret = b5.d;
|
|
2514
|
-
|
|
2515
2397
|
if (b5.d.length > 1 || b5.q.length > 1) {
|
|
2516
2398
|
ret.push({
|
|
2517
2399
|
type_: ' / '
|
|
@@ -2521,18 +2403,15 @@ mhchemParser.stateMachines = {
|
|
|
2521
2403
|
type_: '/'
|
|
2522
2404
|
});
|
|
2523
2405
|
}
|
|
2524
|
-
|
|
2525
2406
|
mhchemParser.concatArray(ret, b5.q);
|
|
2526
2407
|
}
|
|
2527
2408
|
} else {
|
|
2528
2409
|
// no fraction
|
|
2529
2410
|
ret = mhchemParser.go(buffer.d, 'pu-2');
|
|
2530
2411
|
}
|
|
2531
|
-
|
|
2532
2412
|
for (var p in buffer) {
|
|
2533
2413
|
delete buffer[p];
|
|
2534
2414
|
}
|
|
2535
|
-
|
|
2536
2415
|
return ret;
|
|
2537
2416
|
}
|
|
2538
2417
|
}
|
|
@@ -2600,10 +2479,8 @@ mhchemParser.stateMachines = {
|
|
|
2600
2479
|
'output': function (buffer) {
|
|
2601
2480
|
/** @type {ParserOutput | ParserOutput[]} */
|
|
2602
2481
|
var ret = [];
|
|
2603
|
-
|
|
2604
2482
|
if (buffer.rm) {
|
|
2605
2483
|
var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || "");
|
|
2606
|
-
|
|
2607
2484
|
if (mrm && mrm.remainder === '') {
|
|
2608
2485
|
ret = mhchemParser.go(mrm.match_, 'pu');
|
|
2609
2486
|
} else {
|
|
@@ -2613,11 +2490,9 @@ mhchemParser.stateMachines = {
|
|
|
2613
2490
|
};
|
|
2614
2491
|
}
|
|
2615
2492
|
}
|
|
2616
|
-
|
|
2617
2493
|
for (var p in buffer) {
|
|
2618
2494
|
delete buffer[p];
|
|
2619
2495
|
}
|
|
2620
|
-
|
|
2621
2496
|
return ret;
|
|
2622
2497
|
}
|
|
2623
2498
|
}
|
|
@@ -2660,109 +2535,90 @@ mhchemParser.stateMachines = {
|
|
|
2660
2535
|
/** @type {ParserOutput[]} */
|
|
2661
2536
|
var ret = [];
|
|
2662
2537
|
buffer.text_ = buffer.text_ || "";
|
|
2663
|
-
|
|
2664
2538
|
if (buffer.text_.length > 4) {
|
|
2665
2539
|
var a = buffer.text_.length % 3;
|
|
2666
|
-
|
|
2667
2540
|
if (a === 0) {
|
|
2668
2541
|
a = 3;
|
|
2669
2542
|
}
|
|
2670
|
-
|
|
2671
2543
|
for (var i = buffer.text_.length - 3; i > 0; i -= 3) {
|
|
2672
2544
|
ret.push(buffer.text_.substr(i, 3));
|
|
2673
2545
|
ret.push({
|
|
2674
2546
|
type_: '1000 separator'
|
|
2675
2547
|
});
|
|
2676
2548
|
}
|
|
2677
|
-
|
|
2678
2549
|
ret.push(buffer.text_.substr(0, a));
|
|
2679
2550
|
ret.reverse();
|
|
2680
2551
|
} else {
|
|
2681
2552
|
ret.push(buffer.text_);
|
|
2682
2553
|
}
|
|
2683
|
-
|
|
2684
2554
|
for (var p in buffer) {
|
|
2685
2555
|
delete buffer[p];
|
|
2686
2556
|
}
|
|
2687
|
-
|
|
2688
2557
|
return ret;
|
|
2689
2558
|
},
|
|
2690
2559
|
'output-o': function (buffer) {
|
|
2691
2560
|
/** @type {ParserOutput[]} */
|
|
2692
2561
|
var ret = [];
|
|
2693
2562
|
buffer.text_ = buffer.text_ || "";
|
|
2694
|
-
|
|
2695
2563
|
if (buffer.text_.length > 4) {
|
|
2696
2564
|
var a = buffer.text_.length - 3;
|
|
2697
|
-
|
|
2698
2565
|
for (var i = 0; i < a; i += 3) {
|
|
2699
2566
|
ret.push(buffer.text_.substr(i, 3));
|
|
2700
2567
|
ret.push({
|
|
2701
2568
|
type_: '1000 separator'
|
|
2702
2569
|
});
|
|
2703
2570
|
}
|
|
2704
|
-
|
|
2705
2571
|
ret.push(buffer.text_.substr(i));
|
|
2706
2572
|
} else {
|
|
2707
2573
|
ret.push(buffer.text_);
|
|
2708
2574
|
}
|
|
2709
|
-
|
|
2710
2575
|
for (var p in buffer) {
|
|
2711
2576
|
delete buffer[p];
|
|
2712
2577
|
}
|
|
2713
|
-
|
|
2714
2578
|
return ret;
|
|
2715
2579
|
}
|
|
2716
2580
|
}
|
|
2717
|
-
}
|
|
2581
|
+
}
|
|
2582
|
+
//#endregion
|
|
2583
|
+
};
|
|
2718
2584
|
|
|
2719
|
-
|
|
2585
|
+
//
|
|
2720
2586
|
// texify: Take MhchemParser output and convert it to TeX
|
|
2721
2587
|
//
|
|
2722
|
-
|
|
2723
2588
|
/** @type {Texify} */
|
|
2724
|
-
|
|
2725
2589
|
var texify = {
|
|
2726
2590
|
go: function (input, isInner) {
|
|
2727
2591
|
// (recursive, max 4 levels)
|
|
2728
2592
|
if (!input) {
|
|
2729
2593
|
return "";
|
|
2730
2594
|
}
|
|
2731
|
-
|
|
2732
2595
|
var res = "";
|
|
2733
2596
|
var cee = false;
|
|
2734
|
-
|
|
2735
2597
|
for (var i = 0; i < input.length; i++) {
|
|
2736
2598
|
var inputi = input[i];
|
|
2737
|
-
|
|
2738
2599
|
if (typeof inputi === "string") {
|
|
2739
2600
|
res += inputi;
|
|
2740
2601
|
} else {
|
|
2741
2602
|
res += texify._go2(inputi);
|
|
2742
|
-
|
|
2743
2603
|
if (inputi.type_ === '1st-level escape') {
|
|
2744
2604
|
cee = true;
|
|
2745
2605
|
}
|
|
2746
2606
|
}
|
|
2747
2607
|
}
|
|
2748
|
-
|
|
2749
2608
|
if (!isInner && !cee && res) {
|
|
2750
2609
|
res = "{" + res + "}";
|
|
2751
2610
|
}
|
|
2752
|
-
|
|
2753
2611
|
return res;
|
|
2754
2612
|
},
|
|
2755
2613
|
_goInner: function (input) {
|
|
2756
2614
|
if (!input) {
|
|
2757
2615
|
return input;
|
|
2758
2616
|
}
|
|
2759
|
-
|
|
2760
2617
|
return texify.go(input, true);
|
|
2761
2618
|
},
|
|
2762
2619
|
_go2: function (buf) {
|
|
2763
2620
|
/** @type {undefined | string} */
|
|
2764
2621
|
var res;
|
|
2765
|
-
|
|
2766
2622
|
switch (buf.type_) {
|
|
2767
2623
|
case 'chemfive':
|
|
2768
2624
|
res = "";
|
|
@@ -2773,52 +2629,45 @@ var texify = {
|
|
|
2773
2629
|
o: texify._goInner(buf.o),
|
|
2774
2630
|
q: texify._goInner(buf.q),
|
|
2775
2631
|
d: texify._goInner(buf.d)
|
|
2776
|
-
};
|
|
2632
|
+
};
|
|
2633
|
+
//
|
|
2777
2634
|
// a
|
|
2778
2635
|
//
|
|
2779
|
-
|
|
2780
2636
|
if (b5.a) {
|
|
2781
2637
|
if (b5.a.match(/^[+\-]/)) {
|
|
2782
2638
|
b5.a = "{" + b5.a + "}";
|
|
2783
2639
|
}
|
|
2784
|
-
|
|
2785
2640
|
res += b5.a + "\\,";
|
|
2786
|
-
}
|
|
2641
|
+
}
|
|
2642
|
+
//
|
|
2787
2643
|
// b and p
|
|
2788
2644
|
//
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
2645
|
if (b5.b || b5.p) {
|
|
2792
2646
|
res += "{\\vphantom{X}}";
|
|
2793
2647
|
res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}";
|
|
2794
2648
|
res += "{\\vphantom{X}}";
|
|
2795
2649
|
res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}";
|
|
2796
2650
|
res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}";
|
|
2797
|
-
}
|
|
2651
|
+
}
|
|
2652
|
+
//
|
|
2798
2653
|
// o
|
|
2799
2654
|
//
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
2655
|
if (b5.o) {
|
|
2803
2656
|
if (b5.o.match(/^[+\-]/)) {
|
|
2804
2657
|
b5.o = "{" + b5.o + "}";
|
|
2805
2658
|
}
|
|
2806
|
-
|
|
2807
2659
|
res += b5.o;
|
|
2808
|
-
}
|
|
2660
|
+
}
|
|
2661
|
+
//
|
|
2809
2662
|
// q and d
|
|
2810
2663
|
//
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
2664
|
if (buf.dType === 'kv') {
|
|
2814
2665
|
if (b5.d || b5.q) {
|
|
2815
2666
|
res += "{\\vphantom{X}}";
|
|
2816
2667
|
}
|
|
2817
|
-
|
|
2818
2668
|
if (b5.d) {
|
|
2819
2669
|
res += "^{" + b5.d + "}";
|
|
2820
2670
|
}
|
|
2821
|
-
|
|
2822
2671
|
if (b5.q) {
|
|
2823
2672
|
res += "_{\\smash[t]{" + b5.q + "}}";
|
|
2824
2673
|
}
|
|
@@ -2827,7 +2676,6 @@ var texify = {
|
|
|
2827
2676
|
res += "{\\vphantom{X}}";
|
|
2828
2677
|
res += "^{" + b5.d + "}";
|
|
2829
2678
|
}
|
|
2830
|
-
|
|
2831
2679
|
if (b5.q) {
|
|
2832
2680
|
res += "{\\vphantom{X}}";
|
|
2833
2681
|
res += "_{\\smash[t]{" + b5.q + "}}";
|
|
@@ -2837,19 +2685,15 @@ var texify = {
|
|
|
2837
2685
|
res += "{\\vphantom{X}}";
|
|
2838
2686
|
res += "_{\\smash[t]{" + b5.q + "}}";
|
|
2839
2687
|
}
|
|
2840
|
-
|
|
2841
2688
|
if (b5.d) {
|
|
2842
2689
|
res += "{\\vphantom{X}}";
|
|
2843
2690
|
res += "^{" + b5.d + "}";
|
|
2844
2691
|
}
|
|
2845
2692
|
}
|
|
2846
|
-
|
|
2847
2693
|
break;
|
|
2848
|
-
|
|
2849
2694
|
case 'rm':
|
|
2850
2695
|
res = "\\mathrm{" + buf.p1 + "}";
|
|
2851
2696
|
break;
|
|
2852
|
-
|
|
2853
2697
|
case 'text':
|
|
2854
2698
|
if (buf.p1.match(/[\^_]/)) {
|
|
2855
2699
|
buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}");
|
|
@@ -2857,196 +2701,147 @@ var texify = {
|
|
|
2857
2701
|
} else {
|
|
2858
2702
|
res = "\\text{" + buf.p1 + "}";
|
|
2859
2703
|
}
|
|
2860
|
-
|
|
2861
2704
|
break;
|
|
2862
|
-
|
|
2863
2705
|
case 'roman numeral':
|
|
2864
2706
|
res = "\\mathrm{" + buf.p1 + "}";
|
|
2865
2707
|
break;
|
|
2866
|
-
|
|
2867
2708
|
case 'state of aggregation':
|
|
2868
2709
|
res = "\\mskip2mu " + texify._goInner(buf.p1);
|
|
2869
2710
|
break;
|
|
2870
|
-
|
|
2871
2711
|
case 'state of aggregation subscript':
|
|
2872
2712
|
res = "\\mskip1mu " + texify._goInner(buf.p1);
|
|
2873
2713
|
break;
|
|
2874
|
-
|
|
2875
2714
|
case 'bond':
|
|
2876
2715
|
res = texify._getBond(buf.kind_);
|
|
2877
|
-
|
|
2878
2716
|
if (!res) {
|
|
2879
2717
|
throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"];
|
|
2880
2718
|
}
|
|
2881
|
-
|
|
2882
2719
|
break;
|
|
2883
|
-
|
|
2884
2720
|
case 'frac':
|
|
2885
2721
|
var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}";
|
|
2886
2722
|
res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}";
|
|
2887
2723
|
break;
|
|
2888
|
-
|
|
2889
2724
|
case 'pu-frac':
|
|
2890
2725
|
var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
|
|
2891
2726
|
res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}";
|
|
2892
2727
|
break;
|
|
2893
|
-
|
|
2894
2728
|
case 'tex-math':
|
|
2895
2729
|
res = buf.p1 + " ";
|
|
2896
2730
|
break;
|
|
2897
|
-
|
|
2898
2731
|
case 'frac-ce':
|
|
2899
2732
|
res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
|
|
2900
2733
|
break;
|
|
2901
|
-
|
|
2902
2734
|
case 'overset':
|
|
2903
2735
|
res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
|
|
2904
2736
|
break;
|
|
2905
|
-
|
|
2906
2737
|
case 'underset':
|
|
2907
2738
|
res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}";
|
|
2908
2739
|
break;
|
|
2909
|
-
|
|
2910
2740
|
case 'underbrace':
|
|
2911
2741
|
res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}";
|
|
2912
2742
|
break;
|
|
2913
|
-
|
|
2914
2743
|
case 'color':
|
|
2915
2744
|
res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}";
|
|
2916
2745
|
break;
|
|
2917
|
-
|
|
2918
2746
|
case 'color0':
|
|
2919
2747
|
res = "\\color{" + buf.color + "}";
|
|
2920
2748
|
break;
|
|
2921
|
-
|
|
2922
2749
|
case 'arrow':
|
|
2923
2750
|
var b6 = {
|
|
2924
2751
|
rd: texify._goInner(buf.rd),
|
|
2925
2752
|
rq: texify._goInner(buf.rq)
|
|
2926
2753
|
};
|
|
2927
|
-
|
|
2928
2754
|
var arrow = "\\x" + texify._getArrow(buf.r);
|
|
2929
|
-
|
|
2930
2755
|
if (b6.rq) {
|
|
2931
2756
|
arrow += "[{" + b6.rq + "}]";
|
|
2932
2757
|
}
|
|
2933
|
-
|
|
2934
2758
|
if (b6.rd) {
|
|
2935
2759
|
arrow += "{" + b6.rd + "}";
|
|
2936
2760
|
} else {
|
|
2937
2761
|
arrow += "{}";
|
|
2938
2762
|
}
|
|
2939
|
-
|
|
2940
2763
|
res = arrow;
|
|
2941
2764
|
break;
|
|
2942
|
-
|
|
2943
2765
|
case 'operator':
|
|
2944
2766
|
res = texify._getOperator(buf.kind_);
|
|
2945
2767
|
break;
|
|
2946
|
-
|
|
2947
2768
|
case '1st-level escape':
|
|
2948
2769
|
res = buf.p1 + " "; // &, \\\\, \\hlin
|
|
2949
|
-
|
|
2950
2770
|
break;
|
|
2951
|
-
|
|
2952
2771
|
case 'space':
|
|
2953
2772
|
res = " ";
|
|
2954
2773
|
break;
|
|
2955
|
-
|
|
2956
2774
|
case 'entitySkip':
|
|
2957
2775
|
res = "~";
|
|
2958
2776
|
break;
|
|
2959
|
-
|
|
2960
2777
|
case 'pu-space-1':
|
|
2961
2778
|
res = "~";
|
|
2962
2779
|
break;
|
|
2963
|
-
|
|
2964
2780
|
case 'pu-space-2':
|
|
2965
2781
|
res = "\\mkern3mu ";
|
|
2966
2782
|
break;
|
|
2967
|
-
|
|
2968
2783
|
case '1000 separator':
|
|
2969
2784
|
res = "\\mkern2mu ";
|
|
2970
2785
|
break;
|
|
2971
|
-
|
|
2972
2786
|
case 'commaDecimal':
|
|
2973
2787
|
res = "{,}";
|
|
2974
2788
|
break;
|
|
2975
|
-
|
|
2976
2789
|
case 'comma enumeration L':
|
|
2977
2790
|
res = "{" + buf.p1 + "}\\mkern6mu ";
|
|
2978
2791
|
break;
|
|
2979
|
-
|
|
2980
2792
|
case 'comma enumeration M':
|
|
2981
2793
|
res = "{" + buf.p1 + "}\\mkern3mu ";
|
|
2982
2794
|
break;
|
|
2983
|
-
|
|
2984
2795
|
case 'comma enumeration S':
|
|
2985
2796
|
res = "{" + buf.p1 + "}\\mkern1mu ";
|
|
2986
2797
|
break;
|
|
2987
|
-
|
|
2988
2798
|
case 'hyphen':
|
|
2989
2799
|
res = "\\text{-}";
|
|
2990
2800
|
break;
|
|
2991
|
-
|
|
2992
2801
|
case 'addition compound':
|
|
2993
2802
|
res = "\\,{\\cdot}\\,";
|
|
2994
2803
|
break;
|
|
2995
|
-
|
|
2996
2804
|
case 'electron dot':
|
|
2997
2805
|
res = "\\mkern1mu \\bullet\\mkern1mu ";
|
|
2998
2806
|
break;
|
|
2999
|
-
|
|
3000
2807
|
case 'KV x':
|
|
3001
2808
|
res = "{\\times}";
|
|
3002
2809
|
break;
|
|
3003
|
-
|
|
3004
2810
|
case 'prime':
|
|
3005
2811
|
res = "\\prime ";
|
|
3006
2812
|
break;
|
|
3007
|
-
|
|
3008
2813
|
case 'cdot':
|
|
3009
2814
|
res = "\\cdot ";
|
|
3010
2815
|
break;
|
|
3011
|
-
|
|
3012
2816
|
case 'tight cdot':
|
|
3013
2817
|
res = "\\mkern1mu{\\cdot}\\mkern1mu ";
|
|
3014
2818
|
break;
|
|
3015
|
-
|
|
3016
2819
|
case 'times':
|
|
3017
2820
|
res = "\\times ";
|
|
3018
2821
|
break;
|
|
3019
|
-
|
|
3020
2822
|
case 'circa':
|
|
3021
2823
|
res = "{\\sim}";
|
|
3022
2824
|
break;
|
|
3023
|
-
|
|
3024
2825
|
case '^':
|
|
3025
2826
|
res = "uparrow";
|
|
3026
2827
|
break;
|
|
3027
|
-
|
|
3028
2828
|
case 'v':
|
|
3029
2829
|
res = "downarrow";
|
|
3030
2830
|
break;
|
|
3031
|
-
|
|
3032
2831
|
case 'ellipsis':
|
|
3033
2832
|
res = "\\ldots ";
|
|
3034
2833
|
break;
|
|
3035
|
-
|
|
3036
2834
|
case '/':
|
|
3037
2835
|
res = "/";
|
|
3038
2836
|
break;
|
|
3039
|
-
|
|
3040
2837
|
case ' / ':
|
|
3041
2838
|
res = "\\,/\\,";
|
|
3042
2839
|
break;
|
|
3043
|
-
|
|
3044
2840
|
default:
|
|
3045
2841
|
assertNever(buf);
|
|
3046
2842
|
throw ["MhchemBugT", "mhchem bug T. Please report."];
|
|
3047
2843
|
// Missing texify rule or unknown MhchemParser output
|
|
3048
2844
|
}
|
|
3049
|
-
|
|
3050
2845
|
assertString(res);
|
|
3051
2846
|
return res;
|
|
3052
2847
|
},
|
|
@@ -3054,34 +2849,24 @@ var texify = {
|
|
|
3054
2849
|
switch (a) {
|
|
3055
2850
|
case "->":
|
|
3056
2851
|
return "rightarrow";
|
|
3057
|
-
|
|
3058
2852
|
case "\u2192":
|
|
3059
2853
|
return "rightarrow";
|
|
3060
|
-
|
|
3061
2854
|
case "\u27F6":
|
|
3062
2855
|
return "rightarrow";
|
|
3063
|
-
|
|
3064
2856
|
case "<-":
|
|
3065
2857
|
return "leftarrow";
|
|
3066
|
-
|
|
3067
2858
|
case "<->":
|
|
3068
2859
|
return "leftrightarrow";
|
|
3069
|
-
|
|
3070
2860
|
case "<-->":
|
|
3071
2861
|
return "rightleftarrows";
|
|
3072
|
-
|
|
3073
2862
|
case "<=>":
|
|
3074
2863
|
return "rightleftharpoons";
|
|
3075
|
-
|
|
3076
2864
|
case "\u21CC":
|
|
3077
2865
|
return "rightleftharpoons";
|
|
3078
|
-
|
|
3079
2866
|
case "<=>>":
|
|
3080
2867
|
return "rightequilibrium";
|
|
3081
|
-
|
|
3082
2868
|
case "<<=>":
|
|
3083
2869
|
return "leftequilibrium";
|
|
3084
|
-
|
|
3085
2870
|
default:
|
|
3086
2871
|
assertNever(a);
|
|
3087
2872
|
throw ["MhchemBugT", "mhchem bug T. Please report."];
|
|
@@ -3091,55 +2876,38 @@ var texify = {
|
|
|
3091
2876
|
switch (a) {
|
|
3092
2877
|
case "-":
|
|
3093
2878
|
return "{-}";
|
|
3094
|
-
|
|
3095
2879
|
case "1":
|
|
3096
2880
|
return "{-}";
|
|
3097
|
-
|
|
3098
2881
|
case "=":
|
|
3099
2882
|
return "{=}";
|
|
3100
|
-
|
|
3101
2883
|
case "2":
|
|
3102
2884
|
return "{=}";
|
|
3103
|
-
|
|
3104
2885
|
case "#":
|
|
3105
2886
|
return "{\\equiv}";
|
|
3106
|
-
|
|
3107
2887
|
case "3":
|
|
3108
2888
|
return "{\\equiv}";
|
|
3109
|
-
|
|
3110
2889
|
case "~":
|
|
3111
2890
|
return "{\\tripledash}";
|
|
3112
|
-
|
|
3113
2891
|
case "~-":
|
|
3114
2892
|
return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";
|
|
3115
|
-
|
|
3116
2893
|
case "~=":
|
|
3117
2894
|
return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
|
|
3118
|
-
|
|
3119
2895
|
case "~--":
|
|
3120
2896
|
return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";
|
|
3121
|
-
|
|
3122
2897
|
case "-~-":
|
|
3123
2898
|
return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";
|
|
3124
|
-
|
|
3125
2899
|
case "...":
|
|
3126
2900
|
return "{{\\cdot}{\\cdot}{\\cdot}}";
|
|
3127
|
-
|
|
3128
2901
|
case "....":
|
|
3129
2902
|
return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";
|
|
3130
|
-
|
|
3131
2903
|
case "->":
|
|
3132
2904
|
return "{\\rightarrow}";
|
|
3133
|
-
|
|
3134
2905
|
case "<-":
|
|
3135
2906
|
return "{\\leftarrow}";
|
|
3136
|
-
|
|
3137
2907
|
case "<":
|
|
3138
2908
|
return "{<}";
|
|
3139
|
-
|
|
3140
2909
|
case ">":
|
|
3141
2910
|
return "{>}";
|
|
3142
|
-
|
|
3143
2911
|
default:
|
|
3144
2912
|
assertNever(a);
|
|
3145
2913
|
throw ["MhchemBugT", "mhchem bug T. Please report."];
|
|
@@ -3149,62 +2917,46 @@ var texify = {
|
|
|
3149
2917
|
switch (a) {
|
|
3150
2918
|
case "+":
|
|
3151
2919
|
return " {}+{} ";
|
|
3152
|
-
|
|
3153
2920
|
case "-":
|
|
3154
2921
|
return " {}-{} ";
|
|
3155
|
-
|
|
3156
2922
|
case "=":
|
|
3157
2923
|
return " {}={} ";
|
|
3158
|
-
|
|
3159
2924
|
case "<":
|
|
3160
2925
|
return " {}<{} ";
|
|
3161
|
-
|
|
3162
2926
|
case ">":
|
|
3163
2927
|
return " {}>{} ";
|
|
3164
|
-
|
|
3165
2928
|
case "<<":
|
|
3166
2929
|
return " {}\\ll{} ";
|
|
3167
|
-
|
|
3168
2930
|
case ">>":
|
|
3169
2931
|
return " {}\\gg{} ";
|
|
3170
|
-
|
|
3171
2932
|
case "\\pm":
|
|
3172
2933
|
return " {}\\pm{} ";
|
|
3173
|
-
|
|
3174
2934
|
case "\\approx":
|
|
3175
2935
|
return " {}\\approx{} ";
|
|
3176
|
-
|
|
3177
2936
|
case "$\\approx$":
|
|
3178
2937
|
return " {}\\approx{} ";
|
|
3179
|
-
|
|
3180
2938
|
case "v":
|
|
3181
2939
|
return " \\downarrow{} ";
|
|
3182
|
-
|
|
3183
2940
|
case "(v)":
|
|
3184
2941
|
return " \\downarrow{} ";
|
|
3185
|
-
|
|
3186
2942
|
case "^":
|
|
3187
2943
|
return " \\uparrow{} ";
|
|
3188
|
-
|
|
3189
2944
|
case "(^)":
|
|
3190
2945
|
return " \\uparrow{} ";
|
|
3191
|
-
|
|
3192
2946
|
default:
|
|
3193
2947
|
assertNever(a);
|
|
3194
2948
|
throw ["MhchemBugT", "mhchem bug T. Please report."];
|
|
3195
2949
|
}
|
|
3196
2950
|
}
|
|
3197
|
-
};
|
|
2951
|
+
};
|
|
2952
|
+
|
|
2953
|
+
//
|
|
3198
2954
|
// Helpers for code analysis
|
|
3199
2955
|
// Will show type error at calling position
|
|
3200
2956
|
//
|
|
3201
|
-
|
|
3202
2957
|
/** @param {number} a */
|
|
3203
|
-
|
|
3204
2958
|
function assertNever(a) {}
|
|
3205
2959
|
/** @param {string} a */
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
2960
|
function assertString(a) {}
|
|
3209
2961
|
__webpack_exports__ = __webpack_exports__["default"];
|
|
3210
2962
|
/******/ return __webpack_exports__;
|