Files
galaxy/static/scripts/libs/bibtex.js
T
John Chilton cb9fc095fc Initial BibTeX/DOI citation support in tools and histories.
Allow tool authors to specify citations using a DOI or BibTeX. BibTeX can be specified either by pointing at a BibTeX file in the tool directory or by embedding bibtex entries right in tool citation blocks. If referencing a file parallel to the tool, the file should contain only a single BibTeX entry, this restriction can be easily lifted by adding a BibTeX parser as a Python dependency for Galaxy - but I do not have permission to do this.

These citations will appear at the bottom of the tool form in a formatted way but the user will have to option to select RAW BibTeX for copying and pasting. Likewise, the history menu now has an option allowing users to aggregatesuch citations across an analysis a comparable list of citations.

UI interactions are implemented using a Backbone model and view and data is fetched from the Galaxy server as BibTeX using the API. Two API entry points have been added - one to fetch the BibTeX entries for a tool and another for a history.

BibTeX entries for citations annotated with DOIs will be fetched from http://dx.doi.org/ and cached using Beaker.

Additional Limitations:

 - I am not super happy with a few different GUI elements of this. It is ugly and I didn't write the BibTeX parser but I did write the code that takes parsed BibTeX and converts it to a formatted entry. If merged, I will outline a Trello card to follow up and improve the UI and find some more standard way to build a formatted HTML citation from a parsed BibTeX entry.

 - BibTeX Limitations: LaTeX embedded in the BibTeX entries doesn't render properly when producing a "pretty" citation in the GUI (should still be exported to citation managers properly though). Cross references aren't supported at this time.

Alternative Implementations:

BibTex/DOI vs. PROV:

There was some discussion of PROV encoding citation information on the development mailing list. The citation tags on tools are typed so this could certainly be added - but it was discussed at the BOSC 2014 codefest and there was some conensus that tool authors are more likely to already have BibTeX or DOIs available for the tool's references and the major reference managers end users will likely plug these citations into while writing papers are more likely to be able to consume BibTeX than anything else.

The bench biologist using Galaxy is the consumer of this work I most concerned with - if we need to convert citations into other formats such as EndNote or Word's bibliography support there is a suite of tools we could optionally plug into Galaxy (http://sourceforge.net/p/bibutils/home/Bibutils/) to enable this down the road. PROV seems to have such an ecosystem to leverage - I could not even find a tool to convert it BibTeX.

Parse BibTeX Client vs Server:

As mentioned above it would be nice in some ways to be able to parse and reason about BibTeX on the backend - but it would require adding a new dependency to Python. Since we have to ship BibTeX to the browser anyway to allow users to copy and paste it - I decided it was easier to start with parsing and formatting BibTeX on the client side. I therefore added the following library BSD JavaScript dependency https://github.com/mayanklahiri/bib2json to enable this. I would be happy to revisit this decision and produce formatted entries server side - there seem to be more Python options for doing this than JavaScript.
2014-07-23 15:43:13 -05:00

1866 lines
66 KiB
JavaScript

/**
* Parser.js
* Copyright 2012-13 Mayank Lahiri
* mlahiri@gmail.com
* Released under the BSD License.
*
* A forgiving Bibtex parser that can:
*
* (1) operate in streaming or block mode, extracting entries as dictionaries.
* (2) convert Latex special characters to UTF-8.
* (3) best-effort parse malformed entries.
* (4) run in a CommonJS environment or a browser, without any dependencies.
* (5) be advanced-compiled by Google Closure Compiler.
*
* Handwritten as a labor of love, not auto-generated from a grammar.
*
* Modes of usage:
*
* (1) Synchronous, string
*
* var entries = BibtexParser(text);
* console.log(entries);
*
* (2) Asynchronous, stream
*
* var entryCallback = function(entry) { console.log(entry); }
* var parser = new BibtexParser(entryCallback);
* parser.parse(chunk1);
* parser.parse(chunk2);
* ...
*
* @param {text|function(Object)} arg Either a Bibtex string or callback
* function for processing parsed entries.
* @constructor
*/
function BibtexParser(arg0) {
// Determine how this function is to be used
if (typeof arg0 == 'string') {
// Passed a string, synchronous call without 'new'
var tempStorage = {};
var entries = [];
function accumulator(entry) {
entries.push(entry);
}
var parser = BibtexParser.call(tempStorage, accumulator);
parser.parse(arg0);
return {
'entries': entries,
'errors': parser.getErrors()
}
}
if (typeof arg0 != 'function') {
throw 'Invalid parser construction.';
}
/** @enum {number} */
this.STATES_ = {
ENTRY_OR_JUNK: 0,
OBJECT_TYPE: 1,
ENTRY_KEY: 2,
KV_KEY: 3,
EQUALS: 4,
KV_VALUE: 5
}
/** @private */ this.DATA_ = {};
/** @private */ this.CALLBACK_ = arg0;
/** @private */ this.CHAR_ = 0;
/** @private */ this.LINE_ = 1;
/** @private */ this.CHAR_IN_LINE_ = 0;
/** @private */ this.SKIPWS_ = true;
/** @private */ this.SKIPCOMMENT_ = true;
/** @private */ this.PARSETMP_ = {};
/** @private */ this.SKIPTILLEOL_ = false;
/** @private */ this.VALBRACES_ = null;
/** @private */ this.BRACETYPE_ = null;
/** @private */ this.BRACECOUNT_ = 0;
/** @private */ this.STATE_ = this.STATES_.ENTRY_OR_JUNK;
/** @private */ this.ERRORS_ = [];
/** @private */ this.ENTRY_TYPES_ = {
'inproceedings' : 1,
'proceedings' : 2,
'article' : 3,
'techreport' : 4,
'misc' : 5,
'mastersthesis' : 6,
'book' : 7,
'phdthesis' : 8,
'incollection' : 9,
'unpublished' : 10,
'inbook' : 11,
'manual' : 12,
'periodical' : 13,
'booklet' : 14,
'masterthesis' : 15,
'conference' : 16
}
/** @private */ this.MACROS_ = {
'jan' : 'January',
'feb' : 'February',
'mar' : 'March',
'apr' : 'April',
'may' : 'May',
'jun' : 'June',
'jul' : 'July',
'aug' : 'August',
'sep' : 'September',
'oct' : 'October',
'nov' : 'November',
'dec' : 'December',
'Jan' : 'January',
'Feb' : 'February',
'Mar' : 'March',
'Apr' : 'April',
'May' : 'May',
'Jun' : 'June',
'Jul' : 'July',
'Aug' : 'August',
'Sep' : 'September',
'Oct' : 'October',
'Nov' : 'November',
'Dec' : 'December'
}
/**
* Gets an array of all errors encountered during parsing.
* Array entries are of the format:
* [ line number, character in line, character in stream, error text ]
*
* @returns Array<Array>
* @public
*/
this.getErrors = function() {
return this.ERRORS_;
}
/**
* Processes a chunk of data
* @public
*/
this.parse = function(chunk) {
for (var i = 0; i < chunk.length; i++)
this.processCharacter_(chunk[i]);
}
/**
* Logs error at current stream position.
*
* @private
*/
this.error_ = function(text) {
this.ERRORS_.push([ this.LINE_,
this.CHAR_IN_LINE_,
this.CHAR_,
text ])
}
/**
* Called after an entire entry has been parsed from the stream.
* Performs post-processing and invokes the entry callback pointed to by
* this.CALLBACK_. Parsed (but unprocessed) entry data is in this.DATA_.
*/
this.processEntry_ = function() {
var data = this.DATA_;
if (data.Fields)
for (var f in data.Fields) {
var raw = data.Fields[f];
// Convert Latex/Bibtex special characters to UTF-8 equivalents
for (var i = 0; i < this.CHARCONV_.length; i++) {
var re = this.CHARCONV_[i][0];
var rep = this.CHARCONV_[i][1];
raw = raw.replace(re, rep);
}
// Basic substitutions
raw = raw.replace(/[\n\r\t]/g, ' ')
.replace(/\s\s+/g, ' ')
.replace(/^\s+|\s+$/g, '')
// Remove braces and backslashes
var len = raw.length;
var processed = '';
for (var i = 0; i < len; i++) {
var c = raw[i];
var skip = false;
if (c == '\\' && i < len-1)
c = raw[++i];
else {
if (c == '{' || c == '}')
skip = true;
}
if (!skip)
processed += c;
}
data.Fields[f] = processed
}
if (data.ObjectType == 'string') {
for (var f in data.Fields) {
this.MACROS_[f] = data.Fields[f];
}
} else {
// Parsed a new Bibtex entry
this.CALLBACK_(data);
}
}
/**
* Processes next character in the stream, invoking the callback after
* each entry has been found and processed.
*
* @private
* @param {string} c Next character in input stream
*/
this.processCharacter_ = function(c) {
// Housekeeping
this.CHAR_++;
this.CHAR_IN_LINE_++;
if (c == '\n') {
this.LINE_++;
this.CHAR_IN_LINE_ = 1;
}
// Convenience states for skipping whitespace when needed
if (this.SKIPTILLEOL_) {
if (c == '\n')
this.SKIPTILLEOL_ = false;
return;
}
if (this.SKIPCOMMENT_ && c == '%') {
this.SKIPTILLEOL_ = true;
return;
}
if (this.SKIPWS_ && /\s/.test(c))
return;
this.SKIPWS_ = false;
this.SKIPCOMMENT_ = false;
this.SKIPTILLEOL_ = false;
// Main state machine
var AnotherIteration = true;
while (AnotherIteration) {
//console.log(this.LINE_, this.CHAR_IN_LINE_, this.STATE_, c)
AnotherIteration = false;
switch(this.STATE_) {
// -- Scan for an object marker ('@')
// -- Reset temporary data structure in case previous entry was garbled
case this.STATES_.ENTRY_OR_JUNK:
if (c == '@') {
// SUCCESS: Parsed a valid start-of-object marker.
// NEXT_STATE: OBJECT_TYPE
this.STATE_ = this.STATES_.OBJECT_TYPE;
this.DATA_ = {
ObjectType : ''
};
}
this.BRACETYPE_ = null;
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
break;
// Start at first non-whitespace character after start-of-object '@'
// -- Accept [A-Za-z], break on non-matching character
// -- Populate this.DATA_.EntryType and this.DATA_.ObjectType
case this.STATES_.OBJECT_TYPE:
if (/[A-Za-z]/.test(c)) {
this.DATA_.ObjectType += c.toLowerCase();
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
} else {
// Break from state and validate object type
var ot = this.DATA_.ObjectType;
if (ot == 'comment') {
this.STATE_ = this.STATES_.ENTRY_OR_JUNK;
} else {
if (ot == 'string') {
this.DATA_.ObjectType = ot;
this.DATA_.Fields = {};
this.BRACETYPE_ = c;
this.BRACECOUNT_ = 1;
this.STATE_ = this.STATES_.KV_KEY;
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
this.PARSETMP_ = {
Key: ''
}
} else {
if (ot == 'preamble') {
this.STATE_ = this.STATES_.ENTRY_OR_JUNK;
} else {
if (ot in this.ENTRY_TYPES_) {
// SUCCESS: Parsed a valid object type.
// NEXT_STATE: ENTRY_KEY
this.DATA_.ObjectType = 'entry';
this.DATA_.EntryType = ot;
this.DATA_.EntryKey = '';
this.STATE_ = this.STATES_.ENTRY_KEY;
AnotherIteration = true;
} else {
// ERROR: Unrecognized object type.
// NEXT_STATE: ENTRY_OR_JUNK
this.error_('Unrecognized object type: "' +
this.DATA_.ObjectType + '"')
this.STATE_ = this.STATES_.ENTRY_OR_JUNK;
}
}
}
}
}
break;
// Start at first non-alphabetic character after an entry type
// -- Populate this.DATA_.EntryKey
case this.STATES_.ENTRY_KEY:
if ((c === '{' || c === '(') && this.BRACETYPE_ == null) {
this.BRACETYPE_ = c;
this.BRACECOUNT_ = 1;
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
break;
}
if (/[,%\s]/.test(c)) {
if (this.DATA_.EntryKey.length < 1) {
// Skip comments and whitespace before entry key
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
} else {
if (this.BRACETYPE_ == null) {
// ERROR: No opening brace for object
// NEXT_STATE: ENTRY_OR_JUNK
this.error_('No opening brace for object.');
this.STATE_ = this.STATES_.ENTRY_OR_JUNK;
} else {
// SUCCESS: Parsed an entry key
// NEXT_STATE: KV_KEY
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
AnotherIteration = true;
this.STATE_ = this.STATES_.KV_KEY;
this.PARSETMP_.Key= '';
this.DATA_.Fields = {};
}
}
} else {
this.DATA_.EntryKey += c;
this.SKIPWS_ = false;
this.SKIPCOMMENT_ = false;
}
break;
// Start at first non-whitespace/comment character after entry key.
// -- Populate this.PARSETMP_.Key
case this.STATES_.KV_KEY:
// Test for end of entry
if ((c == '}' && this.BRACETYPE_ == '{') ||
(c == ')' && this.BRACETYPE_ == '(')) {
// SUCCESS: Parsed an entry, possible incomplete
// NEXT_STATE: ENTRY_OR_JUNK
this.processEntry_();
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
this.STATE_ = this.STATES_.ENTRY_OR_JUNK;
break;
}
if (/[\-A-Za-z:]/.test(c)) {
// Add to key
this.PARSETMP_.Key += c;
this.SKIPWS_ = false;
this.SKIPCOMMENT_ = false;
} else {
// Either end of key or we haven't encountered start of key
if (this.PARSETMP_.Key.length < 1) {
// Keep going till we see a key
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
} else {
// SUCCESS: Found full key in K/V pair
// NEXT_STATE: EQUALS
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
this.STATE_ = this.STATES_.EQUALS;
AnotherIteration = true;
}
}
break;
// Start at first non-alphabetic character after K/V pair key.
case this.STATES_.EQUALS:
if ((c == '}' && this.BRACETYPE_ == '{') ||
(c == ')' && this.BRACETYPE_ == '(')) {
// ERROR: K/V pair with key but no value
// NEXT_STATE: ENTRY_OR_JUNK
this.error_('Key-value pair has key "' +
this.PARSETMP_.Key + '", but no value.');
this.processEntry_();
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
this.STATE_ = this.STATES_.ENTRY_OR_JUNK;
break;
}
if (c == '=') {
// SUCCESS: found an equal signs separating key and value
// NEXT_STATE: KV_VALUE
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
this.STATE_ = this.STATES_.KV_VALUE;
this.PARSETMP_.Value = '';
this.VALBRACES_ = { '"' : [], '{' : [] };
}
break;
// Start at first non-whitespace/comment character after '='
// -- Populate this.PARSETMP_.Value
case this.STATES_.KV_VALUE:
var delim = this.VALBRACES_;
var val = this.PARSETMP_.Value;
var doneParsingValue = false;
// Test for special characters
if (c == '"' || c == '{' || c == '}' || c == ',') {
if (c == ',') {
// This comma can mean:
// (1) just another comma literal
// (2) end of a macro reference
if (0 === delim['"'].length + delim['{'].length) {
// end of a macro reference
var macro = this.PARSETMP_.Value.trim();
if (macro in this.MACROS_) {
// Successful macro reference
this.PARSETMP_.Value = this.MACROS_[macro];
} else {
// Reference to an undefined macro
this.error_('Reference to an undefined macro: '+macro);
}
doneParsingValue = true;
}
}
if (c == '"') {
// This quote can mean:
// (1) opening delimiter
// (2) closing delimiter
// (3) literal, if we have a '{' on the stack
if (0 === delim['"'].length + delim['{'].length) {
// opening delimiter
delim['"'].push(this.CHAR_)
this.SKIPWS_ = false;
this.SKIPCOMMENT_ = false;
break;
}
if (delim['"'].length == 1 && delim['{'].length == 0 &&
(val.length==0 || val[val.length-1] != '\\')) {
// closing delimiter
doneParsingValue = true;
} else {
// literal, add to value
}
}
if (c == '{') {
// This brace can mean:
// (1) opening delimiter
// (2) stacked verbatim delimiter
if (val.length == 0 || val[val.length-1] != '\\') {
delim['{'].push(this.CHAR_)
this.SKIPWS_ = false;
this.SKIPCOMMENT_ = false;
} else {
// literal, add to value
}
}
if (c == '}') {
// This brace can mean:
// (1) closing delimiter
// (2) closing stacked verbatim delimiter
// (3) end of object definition if value was a macro
if (0 === delim['"'].length + delim['{'].length) {
// end of object definition, after macro
var macro = this.PARSETMP_.Value.trim();
if (macro in this.MACROS_) {
// Successful macro reference
this.PARSETMP_.Value = this.MACROS_[macro];
} else {
// Reference to an undefined macro
this.error_('Reference to an undefined macro: '+macro);
}
AnotherIteration = true;
doneParsingValue = true;
} else {
if (val.length == 0 || val[val.length-1] != '\\') {
if (delim['{'].length > 0) {
// pop stack for stacked verbatim delimiter
delim['{'].splice(delim['{'].length-1, 1)
if (0 == delim['{'].length + delim['"'].length) {
// closing delimiter
doneParsingValue = true;
} else {
// end verbatim block
}
}
} else {
// literal, add to value
}
}
}
}
// If here, then we are either done parsing the value or
// have a literal that should be added to the value.
if (doneParsingValue) {
// SUCCESS: value parsed
// NEXT_STATE: KV_KEY
this.SKIPWS_ = true;
this.SKIPCOMMENT_ = true;
this.STATE_ = this.STATES_.KV_KEY;
this.DATA_.Fields[this.PARSETMP_.Key] = this.PARSETMP_.Value;
this.PARSETMP_ = { Key: '' };
this.VALBRACES_ = null;
} else {
this.PARSETMP_.Value += c;
}
break;
} // end switch (this.STATE_)
} // end while(AnotherIteration)
} // end function processCharacter
/** @private */ this.CHARCONV_ = [
[ /\\space /g, '\u0020' ],
[ /\\textdollar /g, '\u0024' ],
[ /\\textquotesingle /g, '\u0027' ],
[ /\\ast /g, '\u002A' ],
[ /\\textbackslash /g, '\u005C' ],
[ /\\\^\{\}/g, '\u005E' ],
[ /\\textasciigrave /g, '\u0060' ],
[ /\\lbrace /g, '\u007B' ],
[ /\\vert /g, '\u007C' ],
[ /\\rbrace /g, '\u007D' ],
[ /\\textasciitilde /g, '\u007E' ],
[ /\\textexclamdown /g, '\u00A1' ],
[ /\\textcent /g, '\u00A2' ],
[ /\\textsterling /g, '\u00A3' ],
[ /\\textcurrency /g, '\u00A4' ],
[ /\\textyen /g, '\u00A5' ],
[ /\\textbrokenbar /g, '\u00A6' ],
[ /\\textsection /g, '\u00A7' ],
[ /\\textasciidieresis /g, '\u00A8' ],
[ /\\textcopyright /g, '\u00A9' ],
[ /\\textordfeminine /g, '\u00AA' ],
[ /\\guillemotleft /g, '\u00AB' ],
[ /\\lnot /g, '\u00AC' ],
[ /\\textregistered /g, '\u00AE' ],
[ /\\textasciimacron /g, '\u00AF' ],
[ /\\textdegree /g, '\u00B0' ],
[ /\\pm /g, '\u00B1' ],
[ /\\textasciiacute /g, '\u00B4' ],
[ /\\mathrm\{\\mu\}/g, '\u00B5' ],
[ /\\textparagraph /g, '\u00B6' ],
[ /\\cdot /g, '\u00B7' ],
[ /\\c\{\}/g, '\u00B8' ],
[ /\\textordmasculine /g, '\u00BA' ],
[ /\\guillemotright /g, '\u00BB' ],
[ /\\textonequarter /g, '\u00BC' ],
[ /\\textonehalf /g, '\u00BD' ],
[ /\\textthreequarters /g, '\u00BE' ],
[ /\\textquestiondown /g, '\u00BF' ],
[ /\\`\{A\}/g, '\u00C0' ],
[ /\\'\{A\}/g, '\u00C1' ],
[ /\\\^\{A\}/g, '\u00C2' ],
[ /\\~\{A\}/g, '\u00C3' ],
[ /\\"\{A\}/g, '\u00C4' ],
[ /\\AA /g, '\u00C5' ],
[ /\\AE /g, '\u00C6' ],
[ /\\c\{C\}/g, '\u00C7' ],
[ /\\`\{E\}/g, '\u00C8' ],
[ /\\'\{E\}/g, '\u00C9' ],
[ /\\\^\{E\}/g, '\u00CA' ],
[ /\\"\{E\}/g, '\u00CB' ],
[ /\\`\{I\}/g, '\u00CC' ],
[ /\\'\{I\}/g, '\u00CD' ],
[ /\\\^\{I\}/g, '\u00CE' ],
[ /\\"\{I\}/g, '\u00CF' ],
[ /\\DH /g, '\u00D0' ],
[ /\\~\{N\}/g, '\u00D1' ],
[ /\\`\{O\}/g, '\u00D2' ],
[ /\\'\{O\}/g, '\u00D3' ],
[ /\\\^\{O\}/g, '\u00D4' ],
[ /\\~\{O\}/g, '\u00D5' ],
[ /\\"\{O\}/g, '\u00D6' ],
[ /\\texttimes /g, '\u00D7' ],
[ /\\O /g, '\u00D8' ],
[ /\\`\{U\}/g, '\u00D9' ],
[ /\\'\{U\}/g, '\u00DA' ],
[ /\\\^\{U\}/g, '\u00DB' ],
[ /\\"\{U\}/g, '\u00DC' ],
[ /\\'\{Y\}/g, '\u00DD' ],
[ /\\TH /g, '\u00DE' ],
[ /\\ss /g, '\u00DF' ],
[ /\\`\{a\}/g, '\u00E0' ],
[ /\\'\{a\}/g, '\u00E1' ],
[ /\\\^\{a\}/g, '\u00E2' ],
[ /\\~\{a\}/g, '\u00E3' ],
[ /\\"\{a\}/g, '\u00E4' ],
[ /\\aa /g, '\u00E5' ],
[ /\\ae /g, '\u00E6' ],
[ /\\c\{c\}/g, '\u00E7' ],
[ /\\`\{e\}/g, '\u00E8' ],
[ /\\'\{e\}/g, '\u00E9' ],
[ /\\\^\{e\}/g, '\u00EA' ],
[ /\\"\{e\}/g, '\u00EB' ],
[ /\\`\{\\i\}/g, '\u00EC' ],
[ /\\'\{\\i\}/g, '\u00ED' ],
[ /\\\^\{\\i\}/g, '\u00EE' ],
[ /\\"\{\\i\}/g, '\u00EF' ],
[ /\\dh /g, '\u00F0' ],
[ /\\~\{n\}/g, '\u00F1' ],
[ /\\`\{o\}/g, '\u00F2' ],
[ /\\'\{o\}/g, '\u00F3' ],
[ /\\\^\{o\}/g, '\u00F4' ],
[ /\\~\{o\}/g, '\u00F5' ],
[ /\\"\{o\}/g, '\u00F6' ],
[ /\\div /g, '\u00F7' ],
[ /\\o /g, '\u00F8' ],
[ /\\`\{u\}/g, '\u00F9' ],
[ /\\'\{u\}/g, '\u00FA' ],
[ /\\\^\{u\}/g, '\u00FB' ],
[ /\\"\{u\}/g, '\u00FC' ],
[ /\\'\{y\}/g, '\u00FD' ],
[ /\\th /g, '\u00FE' ],
[ /\\"\{y\}/g, '\u00FF' ],
[ /\\=\{A\}/g, '\u0100' ],
[ /\\=\{a\}/g, '\u0101' ],
[ /\\u\{A\}/g, '\u0102' ],
[ /\\u\{a\}/g, '\u0103' ],
[ /\\k\{A\}/g, '\u0104' ],
[ /\\k\{a\}/g, '\u0105' ],
[ /\\'\{C\}/g, '\u0106' ],
[ /\\'\{c\}/g, '\u0107' ],
[ /\\\^\{C\}/g, '\u0108' ],
[ /\\\^\{c\}/g, '\u0109' ],
[ /\\.\{C\}/g, '\u010A' ],
[ /\\.\{c\}/g, '\u010B' ],
[ /\\v\{C\}/g, '\u010C' ],
[ /\\v\{c\}/g, '\u010D' ],
[ /\\v\{D\}/g, '\u010E' ],
[ /\\v\{d\}/g, '\u010F' ],
[ /\\DJ /g, '\u0110' ],
[ /\\dj /g, '\u0111' ],
[ /\\=\{E\}/g, '\u0112' ],
[ /\\=\{e\}/g, '\u0113' ],
[ /\\u\{E\}/g, '\u0114' ],
[ /\\u\{e\}/g, '\u0115' ],
[ /\\.\{E\}/g, '\u0116' ],
[ /\\.\{e\}/g, '\u0117' ],
[ /\\k\{E\}/g, '\u0118' ],
[ /\\k\{e\}/g, '\u0119' ],
[ /\\v\{E\}/g, '\u011A' ],
[ /\\v\{e\}/g, '\u011B' ],
[ /\\\^\{G\}/g, '\u011C' ],
[ /\\\^\{g\}/g, '\u011D' ],
[ /\\u\{G\}/g, '\u011E' ],
[ /\\u\{g\}/g, '\u011F' ],
[ /\\.\{G\}/g, '\u0120' ],
[ /\\.\{g\}/g, '\u0121' ],
[ /\\c\{G\}/g, '\u0122' ],
[ /\\c\{g\}/g, '\u0123' ],
[ /\\\^\{H\}/g, '\u0124' ],
[ /\\\^\{h\}/g, '\u0125' ],
[ /\\Elzxh /g, '\u0127' ],
[ /\\~\{I\}/g, '\u0128' ],
[ /\\~\{\\i\}/g, '\u0129' ],
[ /\\=\{I\}/g, '\u012A' ],
[ /\\=\{\\i\}/g, '\u012B' ],
[ /\\u\{I\}/g, '\u012C' ],
[ /\\u\{\\i\}/g, '\u012D' ],
[ /\\k\{I\}/g, '\u012E' ],
[ /\\k\{i\}/g, '\u012F' ],
[ /\\.\{I\}/g, '\u0130' ],
[ /\\i /g, '\u0131' ],
[ /\\\^\{J\}/g, '\u0134' ],
[ /\\\^\{\\j\}/g, '\u0135' ],
[ /\\c\{K\}/g, '\u0136' ],
[ /\\c\{k\}/g, '\u0137' ],
[ /\\'\{L\}/g, '\u0139' ],
[ /\\'\{l\}/g, '\u013A' ],
[ /\\c\{L\}/g, '\u013B' ],
[ /\\c\{l\}/g, '\u013C' ],
[ /\\v\{L\}/g, '\u013D' ],
[ /\\v\{l\}/g, '\u013E' ],
[ /\\L /g, '\u0141' ],
[ /\\l /g, '\u0142' ],
[ /\\'\{N\}/g, '\u0143' ],
[ /\\'\{n\}/g, '\u0144' ],
[ /\\c\{N\}/g, '\u0145' ],
[ /\\c\{n\}/g, '\u0146' ],
[ /\\v\{N\}/g, '\u0147' ],
[ /\\v\{n\}/g, '\u0148' ],
[ /\\NG /g, '\u014A' ],
[ /\\ng /g, '\u014B' ],
[ /\\=\{O\}/g, '\u014C' ],
[ /\\=\{o\}/g, '\u014D' ],
[ /\\u\{O\}/g, '\u014E' ],
[ /\\u\{o\}/g, '\u014F' ],
[ /\\H\{O\}/g, '\u0150' ],
[ /\\H\{o\}/g, '\u0151' ],
[ /\\OE /g, '\u0152' ],
[ /\\oe /g, '\u0153' ],
[ /\\'\{R\}/g, '\u0154' ],
[ /\\'\{r\}/g, '\u0155' ],
[ /\\c\{R\}/g, '\u0156' ],
[ /\\c\{r\}/g, '\u0157' ],
[ /\\v\{R\}/g, '\u0158' ],
[ /\\v\{r\}/g, '\u0159' ],
[ /\\'\{S\}/g, '\u015A' ],
[ /\\'\{s\}/g, '\u015B' ],
[ /\\\^\{S\}/g, '\u015C' ],
[ /\\\^\{s\}/g, '\u015D' ],
[ /\\c\{S\}/g, '\u015E' ],
[ /\\c\{s\}/g, '\u015F' ],
[ /\\v\{S\}/g, '\u0160' ],
[ /\\v\{s\}/g, '\u0161' ],
[ /\\c\{T\}/g, '\u0162' ],
[ /\\c\{t\}/g, '\u0163' ],
[ /\\v\{T\}/g, '\u0164' ],
[ /\\v\{t\}/g, '\u0165' ],
[ /\\~\{U\}/g, '\u0168' ],
[ /\\~\{u\}/g, '\u0169' ],
[ /\\=\{U\}/g, '\u016A' ],
[ /\\=\{u\}/g, '\u016B' ],
[ /\\u\{U\}/g, '\u016C' ],
[ /\\u\{u\}/g, '\u016D' ],
[ /\\r\{U\}/g, '\u016E' ],
[ /\\r\{u\}/g, '\u016F' ],
[ /\\H\{U\}/g, '\u0170' ],
[ /\\H\{u\}/g, '\u0171' ],
[ /\\k\{U\}/g, '\u0172' ],
[ /\\k\{u\}/g, '\u0173' ],
[ /\\\^\{W\}/g, '\u0174' ],
[ /\\\^\{w\}/g, '\u0175' ],
[ /\\\^\{Y\}/g, '\u0176' ],
[ /\\\^\{y\}/g, '\u0177' ],
[ /\\"\{Y\}/g, '\u0178' ],
[ /\\'\{Z\}/g, '\u0179' ],
[ /\\'\{z\}/g, '\u017A' ],
[ /\\.\{Z\}/g, '\u017B' ],
[ /\\.\{z\}/g, '\u017C' ],
[ /\\v\{Z\}/g, '\u017D' ],
[ /\\v\{z\}/g, '\u017E' ],
[ /\\texthvlig /g, '\u0195' ],
[ /\\textnrleg /g, '\u019E' ],
[ /\\eth /g, '\u01AA' ],
[ /\\textdoublepipe /g, '\u01C2' ],
[ /\\'\{g\}/g, '\u01F5' ],
[ /\\Elztrna /g, '\u0250' ],
[ /\\Elztrnsa /g, '\u0252' ],
[ /\\Elzopeno /g, '\u0254' ],
[ /\\Elzrtld /g, '\u0256' ],
[ /\\Elzschwa /g, '\u0259' ],
[ /\\varepsilon /g, '\u025B' ],
[ /\\Elzpgamma /g, '\u0263' ],
[ /\\Elzpbgam /g, '\u0264' ],
[ /\\Elztrnh /g, '\u0265' ],
[ /\\Elzbtdl /g, '\u026C' ],
[ /\\Elzrtll /g, '\u026D' ],
[ /\\Elztrnm /g, '\u026F' ],
[ /\\Elztrnmlr /g, '\u0270' ],
[ /\\Elzltlmr /g, '\u0271' ],
[ /\\Elzltln /g, '\u0272' ],
[ /\\Elzrtln /g, '\u0273' ],
[ /\\Elzclomeg /g, '\u0277' ],
[ /\\textphi /g, '\u0278' ],
[ /\\Elztrnr /g, '\u0279' ],
[ /\\Elztrnrl /g, '\u027A' ],
[ /\\Elzrttrnr /g, '\u027B' ],
[ /\\Elzrl /g, '\u027C' ],
[ /\\Elzrtlr /g, '\u027D' ],
[ /\\Elzfhr /g, '\u027E' ],
[ /\\Elzrtls /g, '\u0282' ],
[ /\\Elzesh /g, '\u0283' ],
[ /\\Elztrnt /g, '\u0287' ],
[ /\\Elzrtlt /g, '\u0288' ],
[ /\\Elzpupsil /g, '\u028A' ],
[ /\\Elzpscrv /g, '\u028B' ],
[ /\\Elzinvv /g, '\u028C' ],
[ /\\Elzinvw /g, '\u028D' ],
[ /\\Elztrny /g, '\u028E' ],
[ /\\Elzrtlz /g, '\u0290' ],
[ /\\Elzyogh /g, '\u0292' ],
[ /\\Elzglst /g, '\u0294' ],
[ /\\Elzreglst /g, '\u0295' ],
[ /\\Elzinglst /g, '\u0296' ],
[ /\\textturnk /g, '\u029E' ],
[ /\\Elzdyogh /g, '\u02A4' ],
[ /\\Elztesh /g, '\u02A7' ],
[ /\\textasciicaron /g, '\u02C7' ],
[ /\\Elzverts /g, '\u02C8' ],
[ /\\Elzverti /g, '\u02CC' ],
[ /\\Elzlmrk /g, '\u02D0' ],
[ /\\Elzhlmrk /g, '\u02D1' ],
[ /\\Elzsbrhr /g, '\u02D2' ],
[ /\\Elzsblhr /g, '\u02D3' ],
[ /\\Elzrais /g, '\u02D4' ],
[ /\\Elzlow /g, '\u02D5' ],
[ /\\textasciibreve /g, '\u02D8' ],
[ /\\textperiodcentered /g, '\u02D9' ],
[ /\\r\{\}/g, '\u02DA' ],
[ /\\k\{\}/g, '\u02DB' ],
[ /\\texttildelow /g, '\u02DC' ],
[ /\\H\{\}/g, '\u02DD' ],
[ /\\tone\{55\}/g, '\u02E5' ],
[ /\\tone\{44\}/g, '\u02E6' ],
[ /\\tone\{33\}/g, '\u02E7' ],
[ /\\tone\{22\}/g, '\u02E8' ],
[ /\\tone\{11\}/g, '\u02E9' ],
[ /\\cyrchar\\C/g, '\u030F' ],
[ /\\Elzpalh /g, '\u0321' ],
[ /\\Elzrh /g, '\u0322' ],
[ /\\Elzsbbrg /g, '\u032A' ],
[ /\\Elzxl /g, '\u0335' ],
[ /\\Elzbar /g, '\u0336' ],
[ /\\'\{A\}/g, '\u0386' ],
[ /\\'\{E\}/g, '\u0388' ],
[ /\\'\{H\}/g, '\u0389' ],
[ /\\'\{\}\{I\}/g, '\u038A' ],
[ /\\'\{\}O/g, '\u038C' ],
[ /\\mathrm\{'Y\}/g, '\u038E' ],
[ /\\mathrm\{'\\Omega\}/g, '\u038F' ],
[ /\\acute\{\\ddot\{\\iota\}\}/g, '\u0390' ],
[ /\\Alpha /g, '\u0391' ],
[ /\\Beta /g, '\u0392' ],
[ /\\Gamma /g, '\u0393' ],
[ /\\Delta /g, '\u0394' ],
[ /\\Epsilon /g, '\u0395' ],
[ /\\Zeta /g, '\u0396' ],
[ /\\Eta /g, '\u0397' ],
[ /\\Theta /g, '\u0398' ],
[ /\\Iota /g, '\u0399' ],
[ /\\Kappa /g, '\u039A' ],
[ /\\Lambda /g, '\u039B' ],
[ /\\Xi /g, '\u039E' ],
[ /\\Pi /g, '\u03A0' ],
[ /\\Rho /g, '\u03A1' ],
[ /\\Sigma /g, '\u03A3' ],
[ /\\Tau /g, '\u03A4' ],
[ /\\Upsilon /g, '\u03A5' ],
[ /\\Phi /g, '\u03A6' ],
[ /\\Chi /g, '\u03A7' ],
[ /\\Psi /g, '\u03A8' ],
[ /\\Omega /g, '\u03A9' ],
[ /\\mathrm\{\\ddot\{I\}\}/g, '\u03AA' ],
[ /\\mathrm\{\\ddot\{Y\}\}/g, '\u03AB' ],
[ /\\'\{\$\\alpha\$\}/g, '\u03AC' ],
[ /\\acute\{\\epsilon\}/g, '\u03AD' ],
[ /\\acute\{\\eta\}/g, '\u03AE' ],
[ /\\acute\{\\iota\}/g, '\u03AF' ],
[ /\\acute\{\\ddot\{\\upsilon\}\}/g, '\u03B0' ],
[ /\\alpha /g, '\u03B1' ],
[ /\\beta /g, '\u03B2' ],
[ /\\gamma /g, '\u03B3' ],
[ /\\delta /g, '\u03B4' ],
[ /\\epsilon /g, '\u03B5' ],
[ /\\zeta /g, '\u03B6' ],
[ /\\eta /g, '\u03B7' ],
[ /\\texttheta /g, '\u03B8' ],
[ /\\iota /g, '\u03B9' ],
[ /\\kappa /g, '\u03BA' ],
[ /\\lambda /g, '\u03BB' ],
[ /\\mu /g, '\u03BC' ],
[ /\\nu /g, '\u03BD' ],
[ /\\xi /g, '\u03BE' ],
[ /\\pi /g, '\u03C0' ],
[ /\\rho /g, '\u03C1' ],
[ /\\varsigma /g, '\u03C2' ],
[ /\\sigma /g, '\u03C3' ],
[ /\\tau /g, '\u03C4' ],
[ /\\upsilon /g, '\u03C5' ],
[ /\\varphi /g, '\u03C6' ],
[ /\\chi /g, '\u03C7' ],
[ /\\psi /g, '\u03C8' ],
[ /\\omega /g, '\u03C9' ],
[ /\\ddot\{\\iota\}/g, '\u03CA' ],
[ /\\ddot\{\\upsilon\}/g, '\u03CB' ],
[ /\\'\{o\}/g, '\u03CC' ],
[ /\\acute\{\\upsilon\}/g, '\u03CD' ],
[ /\\acute\{\\omega\}/g, '\u03CE' ],
[ /\\Pisymbol\{ppi022\}\{87\}/g, '\u03D0' ],
[ /\\textvartheta /g, '\u03D1' ],
[ /\\Upsilon /g, '\u03D2' ],
[ /\\phi /g, '\u03D5' ],
[ /\\varpi /g, '\u03D6' ],
[ /\\Stigma /g, '\u03DA' ],
[ /\\Digamma /g, '\u03DC' ],
[ /\\digamma /g, '\u03DD' ],
[ /\\Koppa /g, '\u03DE' ],
[ /\\Sampi /g, '\u03E0' ],
[ /\\varkappa /g, '\u03F0' ],
[ /\\varrho /g, '\u03F1' ],
[ /\\textTheta /g, '\u03F4' ],
[ /\\backepsilon /g, '\u03F6' ],
[ /\\cyrchar\\CYRYO /g, '\u0401' ],
[ /\\cyrchar\\CYRDJE /g, '\u0402' ],
[ /\\cyrchar\{\\'\\CYRG\}/g, '\u0403' ],
[ /\\cyrchar\\CYRIE /g, '\u0404' ],
[ /\\cyrchar\\CYRDZE /g, '\u0405' ],
[ /\\cyrchar\\CYRII /g, '\u0406' ],
[ /\\cyrchar\\CYRYI /g, '\u0407' ],
[ /\\cyrchar\\CYRJE /g, '\u0408' ],
[ /\\cyrchar\\CYRLJE /g, '\u0409' ],
[ /\\cyrchar\\CYRNJE /g, '\u040A' ],
[ /\\cyrchar\\CYRTSHE /g, '\u040B' ],
[ /\\cyrchar\{\\'\\CYRK\}/g, '\u040C' ],
[ /\\cyrchar\\CYRUSHRT /g, '\u040E' ],
[ /\\cyrchar\\CYRDZHE /g, '\u040F' ],
[ /\\cyrchar\\CYRA /g, '\u0410' ],
[ /\\cyrchar\\CYRB /g, '\u0411' ],
[ /\\cyrchar\\CYRV /g, '\u0412' ],
[ /\\cyrchar\\CYRG /g, '\u0413' ],
[ /\\cyrchar\\CYRD /g, '\u0414' ],
[ /\\cyrchar\\CYRE /g, '\u0415' ],
[ /\\cyrchar\\CYRZH /g, '\u0416' ],
[ /\\cyrchar\\CYRZ /g, '\u0417' ],
[ /\\cyrchar\\CYRI /g, '\u0418' ],
[ /\\cyrchar\\CYRISHRT /g, '\u0419' ],
[ /\\cyrchar\\CYRK /g, '\u041A' ],
[ /\\cyrchar\\CYRL /g, '\u041B' ],
[ /\\cyrchar\\CYRM /g, '\u041C' ],
[ /\\cyrchar\\CYRN /g, '\u041D' ],
[ /\\cyrchar\\CYRO /g, '\u041E' ],
[ /\\cyrchar\\CYRP /g, '\u041F' ],
[ /\\cyrchar\\CYRR /g, '\u0420' ],
[ /\\cyrchar\\CYRS /g, '\u0421' ],
[ /\\cyrchar\\CYRT /g, '\u0422' ],
[ /\\cyrchar\\CYRU /g, '\u0423' ],
[ /\\cyrchar\\CYRF /g, '\u0424' ],
[ /\\cyrchar\\CYRH /g, '\u0425' ],
[ /\\cyrchar\\CYRC /g, '\u0426' ],
[ /\\cyrchar\\CYRCH /g, '\u0427' ],
[ /\\cyrchar\\CYRSH /g, '\u0428' ],
[ /\\cyrchar\\CYRSHCH /g, '\u0429' ],
[ /\\cyrchar\\CYRHRDSN /g, '\u042A' ],
[ /\\cyrchar\\CYRERY /g, '\u042B' ],
[ /\\cyrchar\\CYRSFTSN /g, '\u042C' ],
[ /\\cyrchar\\CYREREV /g, '\u042D' ],
[ /\\cyrchar\\CYRYU /g, '\u042E' ],
[ /\\cyrchar\\CYRYA /g, '\u042F' ],
[ /\\cyrchar\\cyra /g, '\u0430' ],
[ /\\cyrchar\\cyrb /g, '\u0431' ],
[ /\\cyrchar\\cyrv /g, '\u0432' ],
[ /\\cyrchar\\cyrg /g, '\u0433' ],
[ /\\cyrchar\\cyrd /g, '\u0434' ],
[ /\\cyrchar\\cyre /g, '\u0435' ],
[ /\\cyrchar\\cyrzh /g, '\u0436' ],
[ /\\cyrchar\\cyrz /g, '\u0437' ],
[ /\\cyrchar\\cyri /g, '\u0438' ],
[ /\\cyrchar\\cyrishrt /g, '\u0439' ],
[ /\\cyrchar\\cyrk /g, '\u043A' ],
[ /\\cyrchar\\cyrl /g, '\u043B' ],
[ /\\cyrchar\\cyrm /g, '\u043C' ],
[ /\\cyrchar\\cyrn /g, '\u043D' ],
[ /\\cyrchar\\cyro /g, '\u043E' ],
[ /\\cyrchar\\cyrp /g, '\u043F' ],
[ /\\cyrchar\\cyrr /g, '\u0440' ],
[ /\\cyrchar\\cyrs /g, '\u0441' ],
[ /\\cyrchar\\cyrt /g, '\u0442' ],
[ /\\cyrchar\\cyru /g, '\u0443' ],
[ /\\cyrchar\\cyrf /g, '\u0444' ],
[ /\\cyrchar\\cyrh /g, '\u0445' ],
[ /\\cyrchar\\cyrc /g, '\u0446' ],
[ /\\cyrchar\\cyrch /g, '\u0447' ],
[ /\\cyrchar\\cyrsh /g, '\u0448' ],
[ /\\cyrchar\\cyrshch /g, '\u0449' ],
[ /\\cyrchar\\cyrhrdsn /g, '\u044A' ],
[ /\\cyrchar\\cyrery /g, '\u044B' ],
[ /\\cyrchar\\cyrsftsn /g, '\u044C' ],
[ /\\cyrchar\\cyrerev /g, '\u044D' ],
[ /\\cyrchar\\cyryu /g, '\u044E' ],
[ /\\cyrchar\\cyrya /g, '\u044F' ],
[ /\\cyrchar\\cyryo /g, '\u0451' ],
[ /\\cyrchar\\cyrdje /g, '\u0452' ],
[ /\\cyrchar\{\\'\\cyrg\}/g, '\u0453' ],
[ /\\cyrchar\\cyrie /g, '\u0454' ],
[ /\\cyrchar\\cyrdze /g, '\u0455' ],
[ /\\cyrchar\\cyrii /g, '\u0456' ],
[ /\\cyrchar\\cyryi /g, '\u0457' ],
[ /\\cyrchar\\cyrje /g, '\u0458' ],
[ /\\cyrchar\\cyrlje /g, '\u0459' ],
[ /\\cyrchar\\cyrnje /g, '\u045A' ],
[ /\\cyrchar\\cyrtshe /g, '\u045B' ],
[ /\\cyrchar\{\\'\\cyrk\}/g, '\u045C' ],
[ /\\cyrchar\\cyrushrt /g, '\u045E' ],
[ /\\cyrchar\\cyrdzhe /g, '\u045F' ],
[ /\\cyrchar\\CYROMEGA /g, '\u0460' ],
[ /\\cyrchar\\cyromega /g, '\u0461' ],
[ /\\cyrchar\\CYRYAT /g, '\u0462' ],
[ /\\cyrchar\\CYRIOTE /g, '\u0464' ],
[ /\\cyrchar\\cyriote /g, '\u0465' ],
[ /\\cyrchar\\CYRLYUS /g, '\u0466' ],
[ /\\cyrchar\\cyrlyus /g, '\u0467' ],
[ /\\cyrchar\\CYRIOTLYUS /g, '\u0468' ],
[ /\\cyrchar\\cyriotlyus /g, '\u0469' ],
[ /\\cyrchar\\CYRBYUS /g, '\u046A' ],
[ /\\cyrchar\\CYRIOTBYUS /g, '\u046C' ],
[ /\\cyrchar\\cyriotbyus /g, '\u046D' ],
[ /\\cyrchar\\CYRKSI /g, '\u046E' ],
[ /\\cyrchar\\cyrksi /g, '\u046F' ],
[ /\\cyrchar\\CYRPSI /g, '\u0470' ],
[ /\\cyrchar\\cyrpsi /g, '\u0471' ],
[ /\\cyrchar\\CYRFITA /g, '\u0472' ],
[ /\\cyrchar\\CYRIZH /g, '\u0474' ],
[ /\\cyrchar\\CYRUK /g, '\u0478' ],
[ /\\cyrchar\\cyruk /g, '\u0479' ],
[ /\\cyrchar\\CYROMEGARND /g, '\u047A' ],
[ /\\cyrchar\\cyromegarnd /g, '\u047B' ],
[ /\\cyrchar\\CYROMEGATITLO /g, '\u047C' ],
[ /\\cyrchar\\cyromegatitlo /g, '\u047D' ],
[ /\\cyrchar\\CYROT /g, '\u047E' ],
[ /\\cyrchar\\cyrot /g, '\u047F' ],
[ /\\cyrchar\\CYRKOPPA /g, '\u0480' ],
[ /\\cyrchar\\cyrkoppa /g, '\u0481' ],
[ /\\cyrchar\\cyrthousands /g, '\u0482' ],
[ /\\cyrchar\\cyrhundredthousands /g, '\u0488' ],
[ /\\cyrchar\\cyrmillions /g, '\u0489' ],
[ /\\cyrchar\\CYRSEMISFTSN /g, '\u048C' ],
[ /\\cyrchar\\cyrsemisftsn /g, '\u048D' ],
[ /\\cyrchar\\CYRRTICK /g, '\u048E' ],
[ /\\cyrchar\\cyrrtick /g, '\u048F' ],
[ /\\cyrchar\\CYRGUP /g, '\u0490' ],
[ /\\cyrchar\\cyrgup /g, '\u0491' ],
[ /\\cyrchar\\CYRGHCRS /g, '\u0492' ],
[ /\\cyrchar\\cyrghcrs /g, '\u0493' ],
[ /\\cyrchar\\CYRGHK /g, '\u0494' ],
[ /\\cyrchar\\cyrghk /g, '\u0495' ],
[ /\\cyrchar\\CYRZHDSC /g, '\u0496' ],
[ /\\cyrchar\\cyrzhdsc /g, '\u0497' ],
[ /\\cyrchar\\CYRZDSC /g, '\u0498' ],
[ /\\cyrchar\\cyrzdsc /g, '\u0499' ],
[ /\\cyrchar\\CYRKDSC /g, '\u049A' ],
[ /\\cyrchar\\cyrkdsc /g, '\u049B' ],
[ /\\cyrchar\\CYRKVCRS /g, '\u049C' ],
[ /\\cyrchar\\cyrkvcrs /g, '\u049D' ],
[ /\\cyrchar\\CYRKHCRS /g, '\u049E' ],
[ /\\cyrchar\\cyrkhcrs /g, '\u049F' ],
[ /\\cyrchar\\CYRKBEAK /g, '\u04A0' ],
[ /\\cyrchar\\cyrkbeak /g, '\u04A1' ],
[ /\\cyrchar\\CYRNDSC /g, '\u04A2' ],
[ /\\cyrchar\\cyrndsc /g, '\u04A3' ],
[ /\\cyrchar\\CYRNG /g, '\u04A4' ],
[ /\\cyrchar\\cyrng /g, '\u04A5' ],
[ /\\cyrchar\\CYRPHK /g, '\u04A6' ],
[ /\\cyrchar\\cyrphk /g, '\u04A7' ],
[ /\\cyrchar\\CYRABHHA /g, '\u04A8' ],
[ /\\cyrchar\\cyrabhha /g, '\u04A9' ],
[ /\\cyrchar\\CYRSDSC /g, '\u04AA' ],
[ /\\cyrchar\\cyrsdsc /g, '\u04AB' ],
[ /\\cyrchar\\CYRTDSC /g, '\u04AC' ],
[ /\\cyrchar\\cyrtdsc /g, '\u04AD' ],
[ /\\cyrchar\\CYRY /g, '\u04AE' ],
[ /\\cyrchar\\cyry /g, '\u04AF' ],
[ /\\cyrchar\\CYRYHCRS /g, '\u04B0' ],
[ /\\cyrchar\\cyryhcrs /g, '\u04B1' ],
[ /\\cyrchar\\CYRHDSC /g, '\u04B2' ],
[ /\\cyrchar\\cyrhdsc /g, '\u04B3' ],
[ /\\cyrchar\\CYRTETSE /g, '\u04B4' ],
[ /\\cyrchar\\cyrtetse /g, '\u04B5' ],
[ /\\cyrchar\\CYRCHRDSC /g, '\u04B6' ],
[ /\\cyrchar\\cyrchrdsc /g, '\u04B7' ],
[ /\\cyrchar\\CYRCHVCRS /g, '\u04B8' ],
[ /\\cyrchar\\cyrchvcrs /g, '\u04B9' ],
[ /\\cyrchar\\CYRSHHA /g, '\u04BA' ],
[ /\\cyrchar\\cyrshha /g, '\u04BB' ],
[ /\\cyrchar\\CYRABHCH /g, '\u04BC' ],
[ /\\cyrchar\\cyrabhch /g, '\u04BD' ],
[ /\\cyrchar\\CYRABHCHDSC /g, '\u04BE' ],
[ /\\cyrchar\\cyrabhchdsc /g, '\u04BF' ],
[ /\\cyrchar\\CYRpalochka /g, '\u04C0' ],
[ /\\cyrchar\\CYRKHK /g, '\u04C3' ],
[ /\\cyrchar\\cyrkhk /g, '\u04C4' ],
[ /\\cyrchar\\CYRNHK /g, '\u04C7' ],
[ /\\cyrchar\\cyrnhk /g, '\u04C8' ],
[ /\\cyrchar\\CYRCHLDSC /g, '\u04CB' ],
[ /\\cyrchar\\cyrchldsc /g, '\u04CC' ],
[ /\\cyrchar\\CYRAE /g, '\u04D4' ],
[ /\\cyrchar\\cyrae /g, '\u04D5' ],
[ /\\cyrchar\\CYRSCHWA /g, '\u04D8' ],
[ /\\cyrchar\\cyrschwa /g, '\u04D9' ],
[ /\\cyrchar\\CYRABHDZE /g, '\u04E0' ],
[ /\\cyrchar\\cyrabhdze /g, '\u04E1' ],
[ /\\cyrchar\\CYROTLD /g, '\u04E8' ],
[ /\\cyrchar\\cyrotld /g, '\u04E9' ],
[ /\\hspace\{0.6em\}/g, '\u2002' ],
[ /\\hspace\{1em\}/g, '\u2003' ],
[ /\\hspace\{0.33em\}/g, '\u2004' ],
[ /\\hspace\{0.25em\}/g, '\u2005' ],
[ /\\hspace\{0.166em\}/g, '\u2006' ],
[ /\\hphantom\{0\}/g, '\u2007' ],
[ /\\hphantom\{,\}/g, '\u2008' ],
[ /\\hspace\{0.167em\}/g, '\u2009' ],
[ /\\mkern1mu /g, '\u200A' ],
[ /\\textendash /g, '\u2013' ],
[ /\\textemdash /g, '\u2014' ],
[ /\\rule\{1em\}\{1pt\}/g, '\u2015' ],
[ /\\Vert /g, '\u2016' ],
[ /\\Elzreapos /g, '\u201B' ],
[ /\\textquotedblleft /g, '\u201C' ],
[ /\\textquotedblright /g, '\u201D' ],
[ /\\textdagger /g, '\u2020' ],
[ /\\textdaggerdbl /g, '\u2021' ],
[ /\\textbullet /g, '\u2022' ],
[ /\\ldots /g, '\u2026' ],
[ /\\textperthousand /g, '\u2030' ],
[ /\\textpertenthousand /g, '\u2031' ],
[ /\\backprime /g, '\u2035' ],
[ /\\guilsinglleft /g, '\u2039' ],
[ /\\guilsinglright /g, '\u203A' ],
[ /\\mkern4mu /g, '\u205F' ],
[ /\\nolinebreak /g, '\u2060' ],
[ /\\ensuremath\{\\Elzpes\}/g, '\u20A7' ],
[ /\\mbox\{\\texteuro\} /g, '\u20AC' ],
[ /\\dddot /g, '\u20DB' ],
[ /\\ddddot /g, '\u20DC' ],
[ /\\mathbb\{C\}/g, '\u2102' ],
[ /\\mathscr\{g\}/g, '\u210A' ],
[ /\\mathscr\{H\}/g, '\u210B' ],
[ /\\mathfrak\{H\}/g, '\u210C' ],
[ /\\mathbb\{H\}/g, '\u210D' ],
[ /\\hslash /g, '\u210F' ],
[ /\\mathscr\{I\}/g, '\u2110' ],
[ /\\mathfrak\{I\}/g, '\u2111' ],
[ /\\mathscr\{L\}/g, '\u2112' ],
[ /\\mathscr\{l\}/g, '\u2113' ],
[ /\\mathbb\{N\}/g, '\u2115' ],
[ /\\cyrchar\\textnumero /g, '\u2116' ],
[ /\\wp /g, '\u2118' ],
[ /\\mathbb\{P\}/g, '\u2119' ],
[ /\\mathbb\{Q\}/g, '\u211A' ],
[ /\\mathscr\{R\}/g, '\u211B' ],
[ /\\mathfrak\{R\}/g, '\u211C' ],
[ /\\mathbb\{R\}/g, '\u211D' ],
[ /\\Elzxrat /g, '\u211E' ],
[ /\\texttrademark /g, '\u2122' ],
[ /\\mathbb\{Z\}/g, '\u2124' ],
[ /\\Omega /g, '\u2126' ],
[ /\\mho /g, '\u2127' ],
[ /\\mathfrak\{Z\}/g, '\u2128' ],
[ /\\ElsevierGlyph\{2129\}/g, '\u2129' ],
[ /\\AA /g, '\u212B' ],
[ /\\mathscr\{B\}/g, '\u212C' ],
[ /\\mathfrak\{C\}/g, '\u212D' ],
[ /\\mathscr\{e\}/g, '\u212F' ],
[ /\\mathscr\{E\}/g, '\u2130' ],
[ /\\mathscr\{F\}/g, '\u2131' ],
[ /\\mathscr\{M\}/g, '\u2133' ],
[ /\\mathscr\{o\}/g, '\u2134' ],
[ /\\aleph /g, '\u2135' ],
[ /\\beth /g, '\u2136' ],
[ /\\gimel /g, '\u2137' ],
[ /\\daleth /g, '\u2138' ],
[ /\\textfrac\{1\}\{3\}/g, '\u2153' ],
[ /\\textfrac\{2\}\{3\}/g, '\u2154' ],
[ /\\textfrac\{1\}\{5\}/g, '\u2155' ],
[ /\\textfrac\{2\}\{5\}/g, '\u2156' ],
[ /\\textfrac\{3\}\{5\}/g, '\u2157' ],
[ /\\textfrac\{4\}\{5\}/g, '\u2158' ],
[ /\\textfrac\{1\}\{6\}/g, '\u2159' ],
[ /\\textfrac\{5\}\{6\}/g, '\u215A' ],
[ /\\textfrac\{1\}\{8\}/g, '\u215B' ],
[ /\\textfrac\{3\}\{8\}/g, '\u215C' ],
[ /\\textfrac\{5\}\{8\}/g, '\u215D' ],
[ /\\textfrac\{7\}\{8\}/g, '\u215E' ],
[ /\\leftarrow /g, '\u2190' ],
[ /\\uparrow /g, '\u2191' ],
[ /\\rightarrow /g, '\u2192' ],
[ /\\downarrow /g, '\u2193' ],
[ /\\leftrightarrow /g, '\u2194' ],
[ /\\updownarrow /g, '\u2195' ],
[ /\\nwarrow /g, '\u2196' ],
[ /\\nearrow /g, '\u2197' ],
[ /\\searrow /g, '\u2198' ],
[ /\\swarrow /g, '\u2199' ],
[ /\\nleftarrow /g, '\u219A' ],
[ /\\nrightarrow /g, '\u219B' ],
[ /\\arrowwaveright /g, '\u219C' ],
[ /\\arrowwaveright /g, '\u219D' ],
[ /\\twoheadleftarrow /g, '\u219E' ],
[ /\\twoheadrightarrow /g, '\u21A0' ],
[ /\\leftarrowtail /g, '\u21A2' ],
[ /\\rightarrowtail /g, '\u21A3' ],
[ /\\mapsto /g, '\u21A6' ],
[ /\\hookleftarrow /g, '\u21A9' ],
[ /\\hookrightarrow /g, '\u21AA' ],
[ /\\looparrowleft /g, '\u21AB' ],
[ /\\looparrowright /g, '\u21AC' ],
[ /\\leftrightsquigarrow /g, '\u21AD' ],
[ /\\nleftrightarrow /g, '\u21AE' ],
[ /\\Lsh /g, '\u21B0' ],
[ /\\Rsh /g, '\u21B1' ],
[ /\\ElsevierGlyph\{21B3\}/g, '\u21B3' ],
[ /\\curvearrowleft /g, '\u21B6' ],
[ /\\curvearrowright /g, '\u21B7' ],
[ /\\circlearrowleft /g, '\u21BA' ],
[ /\\circlearrowright /g, '\u21BB' ],
[ /\\leftharpoonup /g, '\u21BC' ],
[ /\\leftharpoondown /g, '\u21BD' ],
[ /\\upharpoonright /g, '\u21BE' ],
[ /\\upharpoonleft /g, '\u21BF' ],
[ /\\rightharpoonup /g, '\u21C0' ],
[ /\\rightharpoondown /g, '\u21C1' ],
[ /\\downharpoonright /g, '\u21C2' ],
[ /\\downharpoonleft /g, '\u21C3' ],
[ /\\rightleftarrows /g, '\u21C4' ],
[ /\\dblarrowupdown /g, '\u21C5' ],
[ /\\leftrightarrows /g, '\u21C6' ],
[ /\\leftleftarrows /g, '\u21C7' ],
[ /\\upuparrows /g, '\u21C8' ],
[ /\\rightrightarrows /g, '\u21C9' ],
[ /\\downdownarrows /g, '\u21CA' ],
[ /\\leftrightharpoons /g, '\u21CB' ],
[ /\\rightleftharpoons /g, '\u21CC' ],
[ /\\nLeftarrow /g, '\u21CD' ],
[ /\\nLeftrightarrow /g, '\u21CE' ],
[ /\\nRightarrow /g, '\u21CF' ],
[ /\\Leftarrow /g, '\u21D0' ],
[ /\\Uparrow /g, '\u21D1' ],
[ /\\Rightarrow /g, '\u21D2' ],
[ /\\Downarrow /g, '\u21D3' ],
[ /\\Leftrightarrow /g, '\u21D4' ],
[ /\\Updownarrow /g, '\u21D5' ],
[ /\\Lleftarrow /g, '\u21DA' ],
[ /\\Rrightarrow /g, '\u21DB' ],
[ /\\rightsquigarrow /g, '\u21DD' ],
[ /\\DownArrowUpArrow /g, '\u21F5' ],
[ /\\forall /g, '\u2200' ],
[ /\\complement /g, '\u2201' ],
[ /\\partial /g, '\u2202' ],
[ /\\exists /g, '\u2203' ],
[ /\\nexists /g, '\u2204' ],
[ /\\varnothing /g, '\u2205' ],
[ /\\nabla /g, '\u2207' ],
[ /\\in /g, '\u2208' ],
[ /\\not\\in /g, '\u2209' ],
[ /\\ni /g, '\u220B' ],
[ /\\not\\ni /g, '\u220C' ],
[ /\\prod /g, '\u220F' ],
[ /\\coprod /g, '\u2210' ],
[ /\\sum /g, '\u2211' ],
[ /\\mp /g, '\u2213' ],
[ /\\dotplus /g, '\u2214' ],
[ /\\setminus /g, '\u2216' ],
[ /\\circ /g, '\u2218' ],
[ /\\bullet /g, '\u2219' ],
[ /\\surd /g, '\u221A' ],
[ /\\propto /g, '\u221D' ],
[ /\\infty /g, '\u221E' ],
[ /\\rightangle /g, '\u221F' ],
[ /\\angle /g, '\u2220' ],
[ /\\measuredangle /g, '\u2221' ],
[ /\\sphericalangle /g, '\u2222' ],
[ /\\mid /g, '\u2223' ],
[ /\\nmid /g, '\u2224' ],
[ /\\parallel /g, '\u2225' ],
[ /\\nparallel /g, '\u2226' ],
[ /\\wedge /g, '\u2227' ],
[ /\\vee /g, '\u2228' ],
[ /\\cap /g, '\u2229' ],
[ /\\cup /g, '\u222A' ],
[ /\\int /g, '\u222B' ],
[ /\\int\\!\\int /g, '\u222C' ],
[ /\\int\\!\\int\\!\\int /g, '\u222D' ],
[ /\\oint /g, '\u222E' ],
[ /\\surfintegral /g, '\u222F' ],
[ /\\volintegral /g, '\u2230' ],
[ /\\clwintegral /g, '\u2231' ],
[ /\\ElsevierGlyph\{2232\}/g, '\u2232' ],
[ /\\ElsevierGlyph\{2233\}/g, '\u2233' ],
[ /\\therefore /g, '\u2234' ],
[ /\\because /g, '\u2235' ],
[ /\\Colon /g, '\u2237' ],
[ /\\ElsevierGlyph\{2238\}/g, '\u2238' ],
[ /\\mathbin\{\{:\}\\!\\!\{\-\}\\!\\!\{:\}\}/g, '\u223A' ],
[ /\\homothetic /g, '\u223B' ],
[ /\\sim /g, '\u223C' ],
[ /\\backsim /g, '\u223D' ],
[ /\\lazysinv /g, '\u223E' ],
[ /\\wr /g, '\u2240' ],
[ /\\not\\sim /g, '\u2241' ],
[ /\\ElsevierGlyph\{2242\}/g, '\u2242' ],
[ /\\NotEqualTilde /g, '\u2242-00338' ],
[ /\\simeq /g, '\u2243' ],
[ /\\not\\simeq /g, '\u2244' ],
[ /\\cong /g, '\u2245' ],
[ /\\approxnotequal /g, '\u2246' ],
[ /\\not\\cong /g, '\u2247' ],
[ /\\approx /g, '\u2248' ],
[ /\\not\\approx /g, '\u2249' ],
[ /\\approxeq /g, '\u224A' ],
[ /\\tildetrpl /g, '\u224B' ],
[ /\\not\\apid /g, '\u224B-00338' ],
[ /\\allequal /g, '\u224C' ],
[ /\\asymp /g, '\u224D' ],
[ /\\Bumpeq /g, '\u224E' ],
[ /\\NotHumpDownHump /g, '\u224E-00338' ],
[ /\\bumpeq /g, '\u224F' ],
[ /\\NotHumpEqual /g, '\u224F-00338' ],
[ /\\doteq /g, '\u2250' ],
[ /\\not\\doteq/g, '\u2250-00338' ],
[ /\\doteqdot /g, '\u2251' ],
[ /\\fallingdotseq /g, '\u2252' ],
[ /\\risingdotseq /g, '\u2253' ],
[ /\\eqcirc /g, '\u2256' ],
[ /\\circeq /g, '\u2257' ],
[ /\\estimates /g, '\u2259' ],
[ /\\ElsevierGlyph\{225A\}/g, '\u225A' ],
[ /\\starequal /g, '\u225B' ],
[ /\\triangleq /g, '\u225C' ],
[ /\\ElsevierGlyph\{225F\}/g, '\u225F' ],
[ /\\not =/g, '\u2260' ],
[ /\\equiv /g, '\u2261' ],
[ /\\not\\equiv /g, '\u2262' ],
[ /\\leq /g, '\u2264' ],
[ /\\geq /g, '\u2265' ],
[ /\\leqq /g, '\u2266' ],
[ /\\geqq /g, '\u2267' ],
[ /\\lneqq /g, '\u2268' ],
[ /\\lvertneqq /g, '\u2268-0FE00' ],
[ /\\gneqq /g, '\u2269' ],
[ /\\gvertneqq /g, '\u2269-0FE00' ],
[ /\\ll /g, '\u226A' ],
[ /\\NotLessLess /g, '\u226A-00338' ],
[ /\\gg /g, '\u226B' ],
[ /\\NotGreaterGreater /g, '\u226B-00338' ],
[ /\\between /g, '\u226C' ],
[ /\\not\\kern\-0.3em\\times /g, '\u226D' ],
[ /\\not</g, '\u226E' ],
[ /\\not>/g, '\u226F' ],
[ /\\not\\leq /g, '\u2270' ],
[ /\\not\\geq /g, '\u2271' ],
[ /\\lessequivlnt /g, '\u2272' ],
[ /\\greaterequivlnt /g, '\u2273' ],
[ /\\ElsevierGlyph\{2274\}/g, '\u2274' ],
[ /\\ElsevierGlyph\{2275\}/g, '\u2275' ],
[ /\\lessgtr /g, '\u2276' ],
[ /\\gtrless /g, '\u2277' ],
[ /\\notlessgreater /g, '\u2278' ],
[ /\\notgreaterless /g, '\u2279' ],
[ /\\prec /g, '\u227A' ],
[ /\\succ /g, '\u227B' ],
[ /\\preccurlyeq /g, '\u227C' ],
[ /\\succcurlyeq /g, '\u227D' ],
[ /\\precapprox /g, '\u227E' ],
[ /\\NotPrecedesTilde /g, '\u227E-00338' ],
[ /\\succapprox /g, '\u227F' ],
[ /\\NotSucceedsTilde /g, '\u227F-00338' ],
[ /\\not\\prec /g, '\u2280' ],
[ /\\not\\succ /g, '\u2281' ],
[ /\\subset /g, '\u2282' ],
[ /\\supset /g, '\u2283' ],
[ /\\not\\subset /g, '\u2284' ],
[ /\\not\\supset /g, '\u2285' ],
[ /\\subseteq /g, '\u2286' ],
[ /\\supseteq /g, '\u2287' ],
[ /\\not\\subseteq /g, '\u2288' ],
[ /\\not\\supseteq /g, '\u2289' ],
[ /\\subsetneq /g, '\u228A' ],
[ /\\varsubsetneqq /g, '\u228A-0FE00' ],
[ /\\supsetneq /g, '\u228B' ],
[ /\\varsupsetneq /g, '\u228B-0FE00' ],
[ /\\uplus /g, '\u228E' ],
[ /\\sqsubset /g, '\u228F' ],
[ /\\NotSquareSubset /g, '\u228F-00338' ],
[ /\\sqsupset /g, '\u2290' ],
[ /\\NotSquareSuperset /g, '\u2290-00338' ],
[ /\\sqsubseteq /g, '\u2291' ],
[ /\\sqsupseteq /g, '\u2292' ],
[ /\\sqcap /g, '\u2293' ],
[ /\\sqcup /g, '\u2294' ],
[ /\\oplus /g, '\u2295' ],
[ /\\ominus /g, '\u2296' ],
[ /\\otimes /g, '\u2297' ],
[ /\\oslash /g, '\u2298' ],
[ /\\odot /g, '\u2299' ],
[ /\\circledcirc /g, '\u229A' ],
[ /\\circledast /g, '\u229B' ],
[ /\\circleddash /g, '\u229D' ],
[ /\\boxplus /g, '\u229E' ],
[ /\\boxminus /g, '\u229F' ],
[ /\\boxtimes /g, '\u22A0' ],
[ /\\boxdot /g, '\u22A1' ],
[ /\\vdash /g, '\u22A2' ],
[ /\\dashv /g, '\u22A3' ],
[ /\\top /g, '\u22A4' ],
[ /\\perp /g, '\u22A5' ],
[ /\\truestate /g, '\u22A7' ],
[ /\\forcesextra /g, '\u22A8' ],
[ /\\Vdash /g, '\u22A9' ],
[ /\\Vvdash /g, '\u22AA' ],
[ /\\VDash /g, '\u22AB' ],
[ /\\nvdash /g, '\u22AC' ],
[ /\\nvDash /g, '\u22AD' ],
[ /\\nVdash /g, '\u22AE' ],
[ /\\nVDash /g, '\u22AF' ],
[ /\\vartriangleleft /g, '\u22B2' ],
[ /\\vartriangleright /g, '\u22B3' ],
[ /\\trianglelefteq /g, '\u22B4' ],
[ /\\trianglerighteq /g, '\u22B5' ],
[ /\\original /g, '\u22B6' ],
[ /\\image /g, '\u22B7' ],
[ /\\multimap /g, '\u22B8' ],
[ /\\hermitconjmatrix /g, '\u22B9' ],
[ /\\intercal /g, '\u22BA' ],
[ /\\veebar /g, '\u22BB' ],
[ /\\rightanglearc /g, '\u22BE' ],
[ /\\ElsevierGlyph\{22C0\}/g, '\u22C0' ],
[ /\\ElsevierGlyph\{22C1\}/g, '\u22C1' ],
[ /\\bigcap /g, '\u22C2' ],
[ /\\bigcup /g, '\u22C3' ],
[ /\\diamond /g, '\u22C4' ],
[ /\\cdot /g, '\u22C5' ],
[ /\\star /g, '\u22C6' ],
[ /\\divideontimes /g, '\u22C7' ],
[ /\\bowtie /g, '\u22C8' ],
[ /\\ltimes /g, '\u22C9' ],
[ /\\rtimes /g, '\u22CA' ],
[ /\\leftthreetimes /g, '\u22CB' ],
[ /\\rightthreetimes /g, '\u22CC' ],
[ /\\backsimeq /g, '\u22CD' ],
[ /\\curlyvee /g, '\u22CE' ],
[ /\\curlywedge /g, '\u22CF' ],
[ /\\Subset /g, '\u22D0' ],
[ /\\Supset /g, '\u22D1' ],
[ /\\Cap /g, '\u22D2' ],
[ /\\Cup /g, '\u22D3' ],
[ /\\pitchfork /g, '\u22D4' ],
[ /\\lessdot /g, '\u22D6' ],
[ /\\gtrdot /g, '\u22D7' ],
[ /\\verymuchless /g, '\u22D8' ],
[ /\\verymuchgreater /g, '\u22D9' ],
[ /\\lesseqgtr /g, '\u22DA' ],
[ /\\gtreqless /g, '\u22DB' ],
[ /\\curlyeqprec /g, '\u22DE' ],
[ /\\curlyeqsucc /g, '\u22DF' ],
[ /\\not\\sqsubseteq /g, '\u22E2' ],
[ /\\not\\sqsupseteq /g, '\u22E3' ],
[ /\\Elzsqspne /g, '\u22E5' ],
[ /\\lnsim /g, '\u22E6' ],
[ /\\gnsim /g, '\u22E7' ],
[ /\\precedesnotsimilar /g, '\u22E8' ],
[ /\\succnsim /g, '\u22E9' ],
[ /\\ntriangleleft /g, '\u22EA' ],
[ /\\ntriangleright /g, '\u22EB' ],
[ /\\ntrianglelefteq /g, '\u22EC' ],
[ /\\ntrianglerighteq /g, '\u22ED' ],
[ /\\vdots /g, '\u22EE' ],
[ /\\cdots /g, '\u22EF' ],
[ /\\upslopeellipsis /g, '\u22F0' ],
[ /\\downslopeellipsis /g, '\u22F1' ],
[ /\\barwedge /g, '\u2305' ],
[ /\\perspcorrespond /g, '\u2306' ],
[ /\\lceil /g, '\u2308' ],
[ /\\rceil /g, '\u2309' ],
[ /\\lfloor /g, '\u230A' ],
[ /\\rfloor /g, '\u230B' ],
[ /\\recorder /g, '\u2315' ],
[ /\\mathchar"2208/g, '\u2316' ],
[ /\\ulcorner /g, '\u231C' ],
[ /\\urcorner /g, '\u231D' ],
[ /\\llcorner /g, '\u231E' ],
[ /\\lrcorner /g, '\u231F' ],
[ /\\frown /g, '\u2322' ],
[ /\\smile /g, '\u2323' ],
[ /\\langle /g, '\u2329' ],
[ /\\rangle /g, '\u232A' ],
[ /\\ElsevierGlyph\{E838\}/g, '\u233D' ],
[ /\\Elzdlcorn /g, '\u23A3' ],
[ /\\lmoustache /g, '\u23B0' ],
[ /\\rmoustache /g, '\u23B1' ],
[ /\\textvisiblespace /g, '\u2423' ],
[ /\\ding\{172\}/g, '\u2460' ],
[ /\\ding\{173\}/g, '\u2461' ],
[ /\\ding\{174\}/g, '\u2462' ],
[ /\\ding\{175\}/g, '\u2463' ],
[ /\\ding\{176\}/g, '\u2464' ],
[ /\\ding\{177\}/g, '\u2465' ],
[ /\\ding\{178\}/g, '\u2466' ],
[ /\\ding\{179\}/g, '\u2467' ],
[ /\\ding\{180\}/g, '\u2468' ],
[ /\\ding\{181\}/g, '\u2469' ],
[ /\\circledS /g, '\u24C8' ],
[ /\\Elzdshfnc /g, '\u2506' ],
[ /\\Elzsqfnw /g, '\u2519' ],
[ /\\diagup /g, '\u2571' ],
[ /\\ding\{110\}/g, '\u25A0' ],
[ /\\square /g, '\u25A1' ],
[ /\\blacksquare /g, '\u25AA' ],
[ /\\fbox\{~~\}/g, '\u25AD' ],
[ /\\Elzvrecto /g, '\u25AF' ],
[ /\\ElsevierGlyph\{E381\}/g, '\u25B1' ],
[ /\\ding\{115\}/g, '\u25B2' ],
[ /\\bigtriangleup /g, '\u25B3' ],
[ /\\blacktriangle /g, '\u25B4' ],
[ /\\vartriangle /g, '\u25B5' ],
[ /\\blacktriangleright /g, '\u25B8' ],
[ /\\triangleright /g, '\u25B9' ],
[ /\\ding\{116\}/g, '\u25BC' ],
[ /\\bigtriangledown /g, '\u25BD' ],
[ /\\blacktriangledown /g, '\u25BE' ],
[ /\\triangledown /g, '\u25BF' ],
[ /\\blacktriangleleft /g, '\u25C2' ],
[ /\\triangleleft /g, '\u25C3' ],
[ /\\ding\{117\}/g, '\u25C6' ],
[ /\\lozenge /g, '\u25CA' ],
[ /\\bigcirc /g, '\u25CB' ],
[ /\\ding\{108\}/g, '\u25CF' ],
[ /\\Elzcirfl /g, '\u25D0' ],
[ /\\Elzcirfr /g, '\u25D1' ],
[ /\\Elzcirfb /g, '\u25D2' ],
[ /\\ding\{119\}/g, '\u25D7' ],
[ /\\Elzrvbull /g, '\u25D8' ],
[ /\\Elzsqfl /g, '\u25E7' ],
[ /\\Elzsqfr /g, '\u25E8' ],
[ /\\Elzsqfse /g, '\u25EA' ],
[ /\\bigcirc /g, '\u25EF' ],
[ /\\ding\{72\}/g, '\u2605' ],
[ /\\ding\{73\}/g, '\u2606' ],
[ /\\ding\{37\}/g, '\u260E' ],
[ /\\ding\{42\}/g, '\u261B' ],
[ /\\ding\{43\}/g, '\u261E' ],
[ /\\rightmoon /g, '\u263E' ],
[ /\\mercury /g, '\u263F' ],
[ /\\venus /g, '\u2640' ],
[ /\\male /g, '\u2642' ],
[ /\\jupiter /g, '\u2643' ],
[ /\\saturn /g, '\u2644' ],
[ /\\uranus /g, '\u2645' ],
[ /\\neptune /g, '\u2646' ],
[ /\\pluto /g, '\u2647' ],
[ /\\aries /g, '\u2648' ],
[ /\\taurus /g, '\u2649' ],
[ /\\gemini /g, '\u264A' ],
[ /\\cancer /g, '\u264B' ],
[ /\\leo /g, '\u264C' ],
[ /\\virgo /g, '\u264D' ],
[ /\\libra /g, '\u264E' ],
[ /\\scorpio /g, '\u264F' ],
[ /\\sagittarius /g, '\u2650' ],
[ /\\capricornus /g, '\u2651' ],
[ /\\aquarius /g, '\u2652' ],
[ /\\pisces /g, '\u2653' ],
[ /\\ding\{171\}/g, '\u2660' ],
[ /\\diamond /g, '\u2662' ],
[ /\\ding\{168\}/g, '\u2663' ],
[ /\\ding\{170\}/g, '\u2665' ],
[ /\\ding\{169\}/g, '\u2666' ],
[ /\\quarternote /g, '\u2669' ],
[ /\\eighthnote /g, '\u266A' ],
[ /\\flat /g, '\u266D' ],
[ /\\natural /g, '\u266E' ],
[ /\\sharp /g, '\u266F' ],
[ /\\ding\{33\}/g, '\u2701' ],
[ /\\ding\{34\}/g, '\u2702' ],
[ /\\ding\{35\}/g, '\u2703' ],
[ /\\ding\{36\}/g, '\u2704' ],
[ /\\ding\{38\}/g, '\u2706' ],
[ /\\ding\{39\}/g, '\u2707' ],
[ /\\ding\{40\}/g, '\u2708' ],
[ /\\ding\{41\}/g, '\u2709' ],
[ /\\ding\{44\}/g, '\u270C' ],
[ /\\ding\{45\}/g, '\u270D' ],
[ /\\ding\{46\}/g, '\u270E' ],
[ /\\ding\{47\}/g, '\u270F' ],
[ /\\ding\{48\}/g, '\u2710' ],
[ /\\ding\{49\}/g, '\u2711' ],
[ /\\ding\{50\}/g, '\u2712' ],
[ /\\ding\{51\}/g, '\u2713' ],
[ /\\ding\{52\}/g, '\u2714' ],
[ /\\ding\{53\}/g, '\u2715' ],
[ /\\ding\{54\}/g, '\u2716' ],
[ /\\ding\{55\}/g, '\u2717' ],
[ /\\ding\{56\}/g, '\u2718' ],
[ /\\ding\{57\}/g, '\u2719' ],
[ /\\ding\{58\}/g, '\u271A' ],
[ /\\ding\{59\}/g, '\u271B' ],
[ /\\ding\{60\}/g, '\u271C' ],
[ /\\ding\{61\}/g, '\u271D' ],
[ /\\ding\{62\}/g, '\u271E' ],
[ /\\ding\{63\}/g, '\u271F' ],
[ /\\ding\{64\}/g, '\u2720' ],
[ /\\ding\{65\}/g, '\u2721' ],
[ /\\ding\{66\}/g, '\u2722' ],
[ /\\ding\{67\}/g, '\u2723' ],
[ /\\ding\{68\}/g, '\u2724' ],
[ /\\ding\{69\}/g, '\u2725' ],
[ /\\ding\{70\}/g, '\u2726' ],
[ /\\ding\{71\}/g, '\u2727' ],
[ /\\ding\{73\}/g, '\u2729' ],
[ /\\ding\{74\}/g, '\u272A' ],
[ /\\ding\{75\}/g, '\u272B' ],
[ /\\ding\{76\}/g, '\u272C' ],
[ /\\ding\{77\}/g, '\u272D' ],
[ /\\ding\{78\}/g, '\u272E' ],
[ /\\ding\{79\}/g, '\u272F' ],
[ /\\ding\{80\}/g, '\u2730' ],
[ /\\ding\{81\}/g, '\u2731' ],
[ /\\ding\{82\}/g, '\u2732' ],
[ /\\ding\{83\}/g, '\u2733' ],
[ /\\ding\{84\}/g, '\u2734' ],
[ /\\ding\{85\}/g, '\u2735' ],
[ /\\ding\{86\}/g, '\u2736' ],
[ /\\ding\{87\}/g, '\u2737' ],
[ /\\ding\{88\}/g, '\u2738' ],
[ /\\ding\{89\}/g, '\u2739' ],
[ /\\ding\{90\}/g, '\u273A' ],
[ /\\ding\{91\}/g, '\u273B' ],
[ /\\ding\{92\}/g, '\u273C' ],
[ /\\ding\{93\}/g, '\u273D' ],
[ /\\ding\{94\}/g, '\u273E' ],
[ /\\ding\{95\}/g, '\u273F' ],
[ /\\ding\{96\}/g, '\u2740' ],
[ /\\ding\{97\}/g, '\u2741' ],
[ /\\ding\{98\}/g, '\u2742' ],
[ /\\ding\{99\}/g, '\u2743' ],
[ /\\ding\{100\}/g, '\u2744' ],
[ /\\ding\{101\}/g, '\u2745' ],
[ /\\ding\{102\}/g, '\u2746' ],
[ /\\ding\{103\}/g, '\u2747' ],
[ /\\ding\{104\}/g, '\u2748' ],
[ /\\ding\{105\}/g, '\u2749' ],
[ /\\ding\{106\}/g, '\u274A' ],
[ /\\ding\{107\}/g, '\u274B' ],
[ /\\ding\{109\}/g, '\u274D' ],
[ /\\ding\{111\}/g, '\u274F' ],
[ /\\ding\{112\}/g, '\u2750' ],
[ /\\ding\{113\}/g, '\u2751' ],
[ /\\ding\{114\}/g, '\u2752' ],
[ /\\ding\{118\}/g, '\u2756' ],
[ /\\ding\{120\}/g, '\u2758' ],
[ /\\ding\{121\}/g, '\u2759' ],
[ /\\ding\{122\}/g, '\u275A' ],
[ /\\ding\{123\}/g, '\u275B' ],
[ /\\ding\{124\}/g, '\u275C' ],
[ /\\ding\{125\}/g, '\u275D' ],
[ /\\ding\{126\}/g, '\u275E' ],
[ /\\ding\{161\}/g, '\u2761' ],
[ /\\ding\{162\}/g, '\u2762' ],
[ /\\ding\{163\}/g, '\u2763' ],
[ /\\ding\{164\}/g, '\u2764' ],
[ /\\ding\{165\}/g, '\u2765' ],
[ /\\ding\{166\}/g, '\u2766' ],
[ /\\ding\{167\}/g, '\u2767' ],
[ /\\ding\{182\}/g, '\u2776' ],
[ /\\ding\{183\}/g, '\u2777' ],
[ /\\ding\{184\}/g, '\u2778' ],
[ /\\ding\{185\}/g, '\u2779' ],
[ /\\ding\{186\}/g, '\u277A' ],
[ /\\ding\{187\}/g, '\u277B' ],
[ /\\ding\{188\}/g, '\u277C' ],
[ /\\ding\{189\}/g, '\u277D' ],
[ /\\ding\{190\}/g, '\u277E' ],
[ /\\ding\{191\}/g, '\u277F' ],
[ /\\ding\{192\}/g, '\u2780' ],
[ /\\ding\{193\}/g, '\u2781' ],
[ /\\ding\{194\}/g, '\u2782' ],
[ /\\ding\{195\}/g, '\u2783' ],
[ /\\ding\{196\}/g, '\u2784' ],
[ /\\ding\{197\}/g, '\u2785' ],
[ /\\ding\{198\}/g, '\u2786' ],
[ /\\ding\{199\}/g, '\u2787' ],
[ /\\ding\{200\}/g, '\u2788' ],
[ /\\ding\{201\}/g, '\u2789' ],
[ /\\ding\{202\}/g, '\u278A' ],
[ /\\ding\{203\}/g, '\u278B' ],
[ /\\ding\{204\}/g, '\u278C' ],
[ /\\ding\{205\}/g, '\u278D' ],
[ /\\ding\{206\}/g, '\u278E' ],
[ /\\ding\{207\}/g, '\u278F' ],
[ /\\ding\{208\}/g, '\u2790' ],
[ /\\ding\{209\}/g, '\u2791' ],
[ /\\ding\{210\}/g, '\u2792' ],
[ /\\ding\{211\}/g, '\u2793' ],
[ /\\ding\{212\}/g, '\u2794' ],
[ /\\ding\{216\}/g, '\u2798' ],
[ /\\ding\{217\}/g, '\u2799' ],
[ /\\ding\{218\}/g, '\u279A' ],
[ /\\ding\{219\}/g, '\u279B' ],
[ /\\ding\{220\}/g, '\u279C' ],
[ /\\ding\{221\}/g, '\u279D' ],
[ /\\ding\{222\}/g, '\u279E' ],
[ /\\ding\{223\}/g, '\u279F' ],
[ /\\ding\{224\}/g, '\u27A0' ],
[ /\\ding\{225\}/g, '\u27A1' ],
[ /\\ding\{226\}/g, '\u27A2' ],
[ /\\ding\{227\}/g, '\u27A3' ],
[ /\\ding\{228\}/g, '\u27A4' ],
[ /\\ding\{229\}/g, '\u27A5' ],
[ /\\ding\{230\}/g, '\u27A6' ],
[ /\\ding\{231\}/g, '\u27A7' ],
[ /\\ding\{232\}/g, '\u27A8' ],
[ /\\ding\{233\}/g, '\u27A9' ],
[ /\\ding\{234\}/g, '\u27AA' ],
[ /\\ding\{235\}/g, '\u27AB' ],
[ /\\ding\{236\}/g, '\u27AC' ],
[ /\\ding\{237\}/g, '\u27AD' ],
[ /\\ding\{238\}/g, '\u27AE' ],
[ /\\ding\{239\}/g, '\u27AF' ],
[ /\\ding\{241\}/g, '\u27B1' ],
[ /\\ding\{242\}/g, '\u27B2' ],
[ /\\ding\{243\}/g, '\u27B3' ],
[ /\\ding\{244\}/g, '\u27B4' ],
[ /\\ding\{245\}/g, '\u27B5' ],
[ /\\ding\{246\}/g, '\u27B6' ],
[ /\\ding\{247\}/g, '\u27B7' ],
[ /\\ding\{248\}/g, '\u27B8' ],
[ /\\ding\{249\}/g, '\u27B9' ],
[ /\\ding\{250\}/g, '\u27BA' ],
[ /\\ding\{251\}/g, '\u27BB' ],
[ /\\ding\{252\}/g, '\u27BC' ],
[ /\\ding\{253\}/g, '\u27BD' ],
[ /\\ding\{254\}/g, '\u27BE' ],
[ /\\longleftarrow /g, '\u27F5' ],
[ /\\longrightarrow /g, '\u27F6' ],
[ /\\longleftrightarrow /g, '\u27F7' ],
[ /\\Longleftarrow /g, '\u27F8' ],
[ /\\Longrightarrow /g, '\u27F9' ],
[ /\\Longleftrightarrow /g, '\u27FA' ],
[ /\\longmapsto /g, '\u27FC' ],
[ /\\sim\\joinrel\\leadsto/g, '\u27FF' ],
[ /\\ElsevierGlyph\{E212\}/g, '\u2905' ],
[ /\\UpArrowBar /g, '\u2912' ],
[ /\\DownArrowBar /g, '\u2913' ],
[ /\\ElsevierGlyph\{E20C\}/g, '\u2923' ],
[ /\\ElsevierGlyph\{E20D\}/g, '\u2924' ],
[ /\\ElsevierGlyph\{E20B\}/g, '\u2925' ],
[ /\\ElsevierGlyph\{E20A\}/g, '\u2926' ],
[ /\\ElsevierGlyph\{E211\}/g, '\u2927' ],
[ /\\ElsevierGlyph\{E20E\}/g, '\u2928' ],
[ /\\ElsevierGlyph\{E20F\}/g, '\u2929' ],
[ /\\ElsevierGlyph\{E210\}/g, '\u292A' ],
[ /\\ElsevierGlyph\{E21C\}/g, '\u2933' ],
[ /\\ElsevierGlyph\{E21D\}/g, '\u2933-00338' ],
[ /\\ElsevierGlyph\{E21A\}/g, '\u2936' ],
[ /\\ElsevierGlyph\{E219\}/g, '\u2937' ],
[ /\\Elolarr /g, '\u2940' ],
[ /\\Elorarr /g, '\u2941' ],
[ /\\ElzRlarr /g, '\u2942' ],
[ /\\ElzrLarr /g, '\u2944' ],
[ /\\Elzrarrx /g, '\u2947' ],
[ /\\LeftRightVector /g, '\u294E' ],
[ /\\RightUpDownVector /g, '\u294F' ],
[ /\\DownLeftRightVector /g, '\u2950' ],
[ /\\LeftUpDownVector /g, '\u2951' ],
[ /\\LeftVectorBar /g, '\u2952' ],
[ /\\RightVectorBar /g, '\u2953' ],
[ /\\RightUpVectorBar /g, '\u2954' ],
[ /\\RightDownVectorBar /g, '\u2955' ],
[ /\\DownLeftVectorBar /g, '\u2956' ],
[ /\\DownRightVectorBar /g, '\u2957' ],
[ /\\LeftUpVectorBar /g, '\u2958' ],
[ /\\LeftDownVectorBar /g, '\u2959' ],
[ /\\LeftTeeVector /g, '\u295A' ],
[ /\\RightTeeVector /g, '\u295B' ],
[ /\\RightUpTeeVector /g, '\u295C' ],
[ /\\RightDownTeeVector /g, '\u295D' ],
[ /\\DownLeftTeeVector /g, '\u295E' ],
[ /\\DownRightTeeVector /g, '\u295F' ],
[ /\\LeftUpTeeVector /g, '\u2960' ],
[ /\\LeftDownTeeVector /g, '\u2961' ],
[ /\\UpEquilibrium /g, '\u296E' ],
[ /\\ReverseUpEquilibrium /g, '\u296F' ],
[ /\\RoundImplies /g, '\u2970' ],
[ /\\ElsevierGlyph\{E214\}/g, '\u297C' ],
[ /\\ElsevierGlyph\{E215\}/g, '\u297D' ],
[ /\\Elztfnc /g, '\u2980' ],
[ /\\ElsevierGlyph\{3018\}/g, '\u2985' ],
[ /\\Elroang /g, '\u2986' ],
[ /\\ElsevierGlyph\{E291\}/g, '\u2994' ],
[ /\\Elzddfnc /g, '\u2999' ],
[ /\\Angle /g, '\u299C' ],
[ /\\Elzlpargt /g, '\u29A0' ],
[ /\\ElsevierGlyph\{E260\}/g, '\u29B5' ],
[ /\\ElsevierGlyph\{E61B\}/g, '\u29B6' ],
[ /\\ElzLap /g, '\u29CA' ],
[ /\\Elzdefas /g, '\u29CB' ],
[ /\\LeftTriangleBar /g, '\u29CF' ],
[ /\\NotLeftTriangleBar /g, '\u29CF-00338' ],
[ /\\RightTriangleBar /g, '\u29D0' ],
[ /\\NotRightTriangleBar /g, '\u29D0-00338' ],
[ /\\ElsevierGlyph\{E372\}/g, '\u29DC' ],
[ /\\blacklozenge /g, '\u29EB' ],
[ /\\RuleDelayed /g, '\u29F4' ],
[ /\\Elxuplus /g, '\u2A04' ],
[ /\\ElzThr /g, '\u2A05' ],
[ /\\Elxsqcup /g, '\u2A06' ],
[ /\\ElzInf /g, '\u2A07' ],
[ /\\ElzSup /g, '\u2A08' ],
[ /\\ElzCint /g, '\u2A0D' ],
[ /\\clockoint /g, '\u2A0F' ],
[ /\\ElsevierGlyph\{E395\}/g, '\u2A10' ],
[ /\\sqrint /g, '\u2A16' ],
[ /\\ElsevierGlyph\{E25A\}/g, '\u2A25' ],
[ /\\ElsevierGlyph\{E25B\}/g, '\u2A2A' ],
[ /\\ElsevierGlyph\{E25C\}/g, '\u2A2D' ],
[ /\\ElsevierGlyph\{E25D\}/g, '\u2A2E' ],
[ /\\ElzTimes /g, '\u2A2F' ],
[ /\\ElsevierGlyph\{E25E\}/g, '\u2A34' ],
[ /\\ElsevierGlyph\{E25E\}/g, '\u2A35' ],
[ /\\ElsevierGlyph\{E259\}/g, '\u2A3C' ],
[ /\\amalg /g, '\u2A3F' ],
[ /\\ElzAnd /g, '\u2A53' ],
[ /\\ElzOr /g, '\u2A54' ],
[ /\\ElsevierGlyph\{E36E\}/g, '\u2A55' ],
[ /\\ElOr /g, '\u2A56' ],
[ /\\perspcorrespond /g, '\u2A5E' ],
[ /\\Elzminhat /g, '\u2A5F' ],
[ /\\ElsevierGlyph\{225A\}/g, '\u2A63' ],
[ /\\stackrel\{*\}\{=\}/g, '\u2A6E' ],
[ /\\Equal /g, '\u2A75' ],
[ /\\leqslant /g, '\u2A7D' ],
[ /\\nleqslant /g, '\u2A7D-00338' ],
[ /\\geqslant /g, '\u2A7E' ],
[ /\\ngeqslant /g, '\u2A7E-00338' ],
[ /\\lessapprox /g, '\u2A85' ],
[ /\\gtrapprox /g, '\u2A86' ],
[ /\\lneq /g, '\u2A87' ],
[ /\\gneq /g, '\u2A88' ],
[ /\\lnapprox /g, '\u2A89' ],
[ /\\gnapprox /g, '\u2A8A' ],
[ /\\lesseqqgtr /g, '\u2A8B' ],
[ /\\gtreqqless /g, '\u2A8C' ],
[ /\\eqslantless /g, '\u2A95' ],
[ /\\eqslantgtr /g, '\u2A96' ],
[ /\\Pisymbol\{ppi020\}\{117\}/g, '\u2A9D' ],
[ /\\Pisymbol\{ppi020\}\{105\}/g, '\u2A9E' ],
[ /\\NestedLessLess /g, '\u2AA1' ],
[ /\\NotNestedLessLess /g, '\u2AA1-00338' ],
[ /\\NestedGreaterGreater /g, '\u2AA2' ],
[ /\\NotNestedGreaterGreater /g, '\u2AA2-00338' ],
[ /\\preceq /g, '\u2AAF' ],
[ /\\not\\preceq /g, '\u2AAF-00338' ],
[ /\\succeq /g, '\u2AB0' ],
[ /\\not\\succeq /g, '\u2AB0-00338' ],
[ /\\precneqq /g, '\u2AB5' ],
[ /\\succneqq /g, '\u2AB6' ],
[ /\\precapprox /g, '\u2AB7' ],
[ /\\succapprox /g, '\u2AB8' ],
[ /\\precnapprox /g, '\u2AB9' ],
[ /\\succnapprox /g, '\u2ABA' ],
[ /\\subseteqq /g, '\u2AC5' ],
[ /\\nsubseteqq /g, '\u2AC5-00338' ],
[ /\\supseteqq /g, '\u2AC6' ],
[ /\\nsupseteqq/g, '\u2AC6-00338' ],
[ /\\subsetneqq /g, '\u2ACB' ],
[ /\\supsetneqq /g, '\u2ACC' ],
[ /\\ElsevierGlyph\{E30D\}/g, '\u2AEB' ],
[ /\\Elztdcol /g, '\u2AF6' ],
[ /\\ElsevierGlyph\{300A\}/g, '\u300A' ],
[ /\\ElsevierGlyph\{300B\}/g, '\u300B' ],
[ /\\ElsevierGlyph\{3018\}/g, '\u3018' ],
[ /\\ElsevierGlyph\{3019\}/g, '\u3019' ],
[ /\\openbracketleft /g, '\u301A' ],
[ /\\openbracketright /g, '\u301B' ]
]
return this;
} // end function BibtexParser
if (typeof module !== 'undefined' && module.exports) {
module.exports = BibtexParser;
}