Skip to content

Instantly share code, notes, and snippets.

Created January 7, 2016 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/10741a530178a457d4c4 to your computer and use it in GitHub Desktop.
Save anonymous/10741a530178a457d4c4 to your computer and use it in GitHub Desktop.
{
"translatorID": "ca65189f-8815-4afe-8c8b-8c7c15f0edca",
"label": "Better BibTeX",
"creator": "Simon Kornblith, Richard Karnesky and Emiliano heyns",
"target": "bib",
"minVersion": "4.0.27",
"maxVersion": "",
"priority": 199,
"configOptions": {
"getCollections": true
},
"displayOptions": {
"exportNotes": true,
"exportFileData": false,
"useJournalAbbreviation": false,
"Keep updated": false
},
"inRepository": true,
"translatorType": 3,
"browserSupport": "gcsv"
}
// SOURCE: resource/translators/json5.js
// json5.js
// Modern JSON. See README.md for details.
//
// This file is based directly off of Douglas Crockford's json_parse.js:
// https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js
var JSON5 = (typeof exports === 'object' ? exports : {});
JSON5.parse = (function () {
"use strict";
// This is a function that can parse a JSON5 text, producing a JavaScript
// data structure. It is a simple, recursive descent parser. It does not use
// eval or regular expressions, so it can be used as a model for implementing
// a JSON5 parser in other languages.
// We are defining the function inside of another function to avoid creating
// global variables.
var at, // The index of the current character
ch, // The current character
escapee = {
"'": "'",
'"': '"',
'\\': '\\',
'/': '/',
'\n': '', // Replace escaped newlines in strings w/ empty string
b: '\b',
f: '\f',
n: '\n',
r: '\r',
t: '\t'
},
ws = [
' ',
'\t',
'\r',
'\n',
'\v',
'\f',
'\xA0',
'\uFEFF'
],
text,
error = function (m) {
// Call error when something is wrong.
var error = new SyntaxError();
error.message = m;
error.at = at;
error.text = text;
throw error;
},
next = function (c) {
// If a c parameter is provided, verify that it matches the current character.
if (c && c !== ch) {
error("Expected '" + c + "' instead of '" + ch + "'");
}
// Get the next character. When there are no more characters,
// return the empty string.
ch = text.charAt(at);
at += 1;
return ch;
},
peek = function () {
// Get the next character without consuming it or
// assigning it to the ch varaible.
return text.charAt(at);
},
identifier = function () {
// Parse an identifier. Normally, reserved words are disallowed here, but we
// only use this for unquoted object keys, where reserved words are allowed,
// so we don't check for those here. References:
// - http://es5.github.com/#x7.6
// - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables
// - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm
// TODO Identifiers can have Unicode "letters" in them; add support for those.
var key = ch;
// Identifiers must start with a letter, _ or $.
if ((ch !== '_' && ch !== '$') &&
(ch < 'a' || ch > 'z') &&
(ch < 'A' || ch > 'Z')) {
error("Bad identifier");
}
// Subsequent characters can contain digits.
while (next() && (
ch === '_' || ch === '$' ||
(ch >= 'a' && ch <= 'z') ||
(ch >= 'A' && ch <= 'Z') ||
(ch >= '0' && ch <= '9'))) {
key += ch;
}
return key;
},
number = function () {
// Parse a number value.
var number,
sign = '',
string = '',
base = 10;
if (ch === '-' || ch === '+') {
sign = ch;
next(ch);
}
// support for Infinity (could tweak to allow other words):
if (ch === 'I') {
number = word();
if (typeof number !== 'number' || isNaN(number)) {
error('Unexpected word for number');
}
return (sign === '-') ? -number : number;
}
// support for NaN
if (ch === 'N' ) {
number = word();
if (!isNaN(number)) {
error('expected word to be NaN');
}
// ignore sign as -NaN also is NaN
return number;
}
if (ch === '0') {
string += ch;
next();
if (ch === 'x' || ch === 'X') {
string += ch;
next();
base = 16;
} else if (ch >= '0' && ch <= '9') {
error('Octal literal');
}
}
switch (base) {
case 10:
while (ch >= '0' && ch <= '9' ) {
string += ch;
next();
}
if (ch === '.') {
string += '.';
while (next() && ch >= '0' && ch <= '9') {
string += ch;
}
}
if (ch === 'e' || ch === 'E') {
string += ch;
next();
if (ch === '-' || ch === '+') {
string += ch;
next();
}
while (ch >= '0' && ch <= '9') {
string += ch;
next();
}
}
break;
case 16:
while (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f') {
string += ch;
next();
}
break;
}
if(sign === '-') {
number = -string;
} else {
number = +string;
}
if (!isFinite(number)) {
error("Bad number");
} else {
return number;
}
},
string = function () {
// Parse a string value.
var hex,
i,
string = '',
delim, // double quote or single quote
uffff;
// When parsing for string values, we must look for ' or " and \ characters.
if (ch === '"' || ch === "'") {
delim = ch;
while (next()) {
if (ch === delim) {
next();
return string;
} else if (ch === '\\') {
next();
if (ch === 'u') {
uffff = 0;
for (i = 0; i < 4; i += 1) {
hex = parseInt(next(), 16);
if (!isFinite(hex)) {
break;
}
uffff = uffff * 16 + hex;
}
string += String.fromCharCode(uffff);
} else if (ch === '\r') {
if (peek() === '\n') {
next();
}
} else if (typeof escapee[ch] === 'string') {
string += escapee[ch];
} else {
break;
}
} else if (ch === '\n') {
// unescaped newlines are invalid; see:
// https://github.com/aseemk/json5/issues/24
// TODO this feels special-cased; are there other
// invalid unescaped chars?
break;
} else {
string += ch;
}
}
}
error("Bad string");
},
inlineComment = function () {
// Skip an inline comment, assuming this is one. The current character should
// be the second / character in the // pair that begins this inline comment.
// To finish the inline comment, we look for a newline or the end of the text.
if (ch !== '/') {
error("Not an inline comment");
}
do {
next();
if (ch === '\n' || ch === '\r') {
next();
return;
}
} while (ch);
},
blockComment = function () {
// Skip a block comment, assuming this is one. The current character should be
// the * character in the /* pair that begins this block comment.
// To finish the block comment, we look for an ending */ pair of characters,
// but we also watch for the end of text before the comment is terminated.
if (ch !== '*') {
error("Not a block comment");
}
do {
next();
while (ch === '*') {
next('*');
if (ch === '/') {
next('/');
return;
}
}
} while (ch);
error("Unterminated block comment");
},
comment = function () {
// Skip a comment, whether inline or block-level, assuming this is one.
// Comments always begin with a / character.
if (ch !== '/') {
error("Not a comment");
}
next('/');
if (ch === '/') {
inlineComment();
} else if (ch === '*') {
blockComment();
} else {
error("Unrecognized comment");
}
},
white = function () {
// Skip whitespace and comments.
// Note that we're detecting comments by only a single / character.
// This works since regular expressions are not valid JSON(5), but this will
// break if there are other valid values that begin with a / character!
while (ch) {
if (ch === '/') {
comment();
} else if (ws.indexOf(ch) >= 0) {
next();
} else {
return;
}
}
},
word = function () {
// true, false, or null.
switch (ch) {
case 't':
next('t');
next('r');
next('u');
next('e');
return true;
case 'f':
next('f');
next('a');
next('l');
next('s');
next('e');
return false;
case 'n':
next('n');
next('u');
next('l');
next('l');
return null;
case 'I':
next('I');
next('n');
next('f');
next('i');
next('n');
next('i');
next('t');
next('y');
return Infinity;
case 'N':
next( 'N' );
next( 'a' );
next( 'N' );
return NaN;
}
error("Unexpected '" + ch + "'");
},
value, // Place holder for the value function.
array = function () {
// Parse an array value.
var array = [];
if (ch === '[') {
next('[');
white();
while (ch) {
if (ch === ']') {
next(']');
return array; // Potentially empty array
}
// ES5 allows omitting elements in arrays, e.g. [,] and
// [,null]. We don't allow this in JSON5.
if (ch === ',') {
error("Missing array element");
} else {
array.push(value());
}
white();
// If there's no comma after this value, this needs to
// be the end of the array.
if (ch !== ',') {
next(']');
return array;
}
next(',');
white();
}
}
error("Bad array");
},
object = function () {
// Parse an object value.
var key,
object = {};
if (ch === '{') {
next('{');
white();
while (ch) {
if (ch === '}') {
next('}');
return object; // Potentially empty object
}
// Keys can be unquoted. If they are, they need to be
// valid JS identifiers.
if (ch === '"' || ch === "'") {
key = string();
} else {
key = identifier();
}
white();
next(':');
object[key] = value();
white();
// If there's no comma after this pair, this needs to be
// the end of the object.
if (ch !== ',') {
next('}');
return object;
}
next(',');
white();
}
}
error("Bad object");
};
value = function () {
// Parse a JSON value. It could be an object, an array, a string, a number,
// or a word.
white();
switch (ch) {
case '{':
return object();
case '[':
return array();
case '"':
case "'":
return string();
case '-':
case '+':
case '.':
return number();
default:
return ch >= '0' && ch <= '9' ? number() : word();
}
};
// Return the json_parse function. It will have access to all of the above
// functions and variables.
return function (source, reviver) {
var result;
text = String(source);
at = 0;
ch = ' ';
result = value();
white();
if (ch) {
error("Syntax error");
}
// If there is a reviver function, we recursively walk the new structure,
// passing each name/value pair to the reviver function for possible
// transformation, starting with a temporary root object that holds the result
// in an empty key. If there is not a reviver function, we simply return the
// result.
return typeof reviver === 'function' ? (function walk(holder, key) {
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}({'': result}, '')) : result;
};
}());
// JSON5 stringify will not quote keys where appropriate
JSON5.stringify = function (obj, replacer, space) {
if (replacer && (typeof(replacer) !== "function" && !isArray(replacer))) {
throw new Error('Replacer must be a function or an array');
}
var getReplacedValueOrUndefined = function(holder, key, isTopLevel) {
var value = holder[key];
// Replace the value with its toJSON value first, if possible
if (value && value.toJSON && typeof value.toJSON === "function") {
value = value.toJSON();
}
// If the user-supplied replacer if a function, call it. If it's an array, check objects' string keys for
// presence in the array (removing the key/value pair from the resulting JSON if the key is missing).
if (typeof(replacer) === "function") {
return replacer.call(holder, key, value);
} else if(replacer) {
if (isTopLevel || isArray(holder) || replacer.indexOf(key) >= 0) {
return value;
} else {
return undefined;
}
} else {
return value;
}
};
function isWordChar(c) {
return (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c >= '0' && c <= '9') ||
c === '_' || c === '$';
}
function isWordStart(c) {
return (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
c === '_' || c === '$';
}
function isWord(key) {
if (typeof key !== 'string') {
return false;
}
if (!isWordStart(key[0])) {
return false;
}
var i = 1, length = key.length;
while (i < length) {
if (!isWordChar(key[i])) {
return false;
}
i++;
}
return true;
}
// export for use in tests
JSON5.isWord = isWord;
// polyfills
function isArray(obj) {
if (Array.isArray) {
return Array.isArray(obj);
} else {
return Object.prototype.toString.call(obj) === '[object Array]';
}
}
function isDate(obj) {
return Object.prototype.toString.call(obj) === '[object Date]';
}
var objStack = [];
function checkForCircular(obj) {
for (var i = 0; i < objStack.length; i++) {
if (objStack[i] === obj) {
throw new TypeError("Converting circular structure to JSON");
}
}
}
function makeIndent(str, num, noNewLine) {
if (!str) {
return "";
}
// indentation no more than 10 chars
if (str.length > 10) {
str = str.substring(0, 10);
}
var indent = noNewLine ? "" : "\n";
for (var i = 0; i < num; i++) {
indent += str;
}
return indent;
}
var indentStr;
if (space) {
if (typeof space === "string") {
indentStr = space;
} else if (typeof space === "number" && space >= 0) {
indentStr = makeIndent(" ", space, true);
} else {
// ignore space parameter
}
}
// Copied from Crokford's implementation of JSON
// See https://github.com/douglascrockford/JSON-js/blob/e39db4b7e6249f04a195e7dd0840e610cc9e941e/json2.js#L195
// Begin
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
};
function escapeString(string) {
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string' ?
c :
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
// End
function internalStringify(holder, key, isTopLevel) {
var buffer, res;
// Replace the value, if necessary
var obj_part = getReplacedValueOrUndefined(holder, key, isTopLevel);
if (obj_part && !isDate(obj_part)) {
// unbox objects
// don't unbox dates, since will turn it into number
obj_part = obj_part.valueOf();
}
switch(typeof obj_part) {
case "boolean":
return obj_part.toString();
case "number":
if (isNaN(obj_part) || !isFinite(obj_part)) {
return "null";
}
return obj_part.toString();
case "string":
return escapeString(obj_part.toString());
case "object":
if (obj_part === null) {
return "null";
} else if (isArray(obj_part)) {
checkForCircular(obj_part);
buffer = "[";
objStack.push(obj_part);
for (var i = 0; i < obj_part.length; i++) {
res = internalStringify(obj_part, i, false);
buffer += makeIndent(indentStr, objStack.length);
if (res === null || typeof res === "undefined") {
buffer += "null";
} else {
buffer += res;
}
if (i < obj_part.length-1) {
buffer += ",";
} else if (indentStr) {
buffer += "\n";
}
}
objStack.pop();
buffer += makeIndent(indentStr, objStack.length, true) + "]";
} else {
checkForCircular(obj_part);
buffer = "{";
var nonEmpty = false;
objStack.push(obj_part);
for (var prop in obj_part) {
if (obj_part.hasOwnProperty(prop)) {
var value = internalStringify(obj_part, prop, false);
isTopLevel = false;
if (typeof value !== "undefined" && value !== null) {
buffer += makeIndent(indentStr, objStack.length);
nonEmpty = true;
key = isWord(prop) ? prop : escapeString(prop);
buffer += key + ":" + (indentStr ? ' ' : '') + value + ",";
}
}
}
objStack.pop();
if (nonEmpty) {
buffer = buffer.substring(0, buffer.length-1) + makeIndent(indentStr, objStack.length) + "}";
} else {
buffer = '{}';
}
}
return buffer;
default:
// functions and undefined should be ignored
return undefined;
}
}
// special case...when undefined is used inside of
// a compound object/array, return null.
// but when top-level, return undefined
var topLevelHolder = {"":obj};
if (obj === undefined) {
return getReplacedValueOrUndefined(topLevelHolder, '', true);
}
return internalStringify(topLevelHolder, '', true);
};
// SOURCE: resource/translators/translator.js
// Generated by CoffeeScript 1.10.0
var JabRef, Translator, name, ref, v,
slice = [].slice,
hasProp = {}.hasOwnProperty;
Translator = {};
Translator.debug_off = function() {};
Translator.debug = Translator.debug_on = function() {
var msg;
msg = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return this._log.apply(this, [5].concat(msg));
};
Translator.log_off = function() {};
Translator.log = Translator.log_on = function() {
var msg;
msg = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return this._log.apply(this, [3].concat(msg));
};
Translator.HTMLEncode = function(text) {
return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
};
Translator.stringify = function(obj, replacer, spaces, cycleReplacer) {
var j, key, keys, len, o, str;
str = JSON.stringify(obj, this.stringifier(replacer, cycleReplacer), spaces);
if (Array.isArray(obj)) {
keys = Object.keys(obj);
if (keys.length > 0) {
o = {};
for (j = 0, len = keys.length; j < len; j++) {
key = keys[j];
if (key.match(/^\d+$/)) {
continue;
}
o[key] = obj[key];
}
str += '+' + this.stringify(o);
}
}
return str;
};
Translator.locale = function(language) {
var base, j, k, len, ll, locale, ref, v;
if (!this.languages.locales[language]) {
ll = language.toLowerCase();
ref = this.languages.langs;
for (j = 0, len = ref.length; j < len; j++) {
locale = ref[j];
for (k in locale) {
v = locale[k];
if (ll === v) {
this.languages.locales[language] = locale[1];
}
}
if (this.languages.locales[language]) {
break;
}
}
(base = this.languages.locales)[language] || (base[language] = language);
}
return this.languages.locales[language];
};
Translator.stringifier = function(replacer, cycleReplacer) {
var keys, stack;
stack = [];
keys = [];
if (cycleReplacer === null) {
cycleReplacer = function(key, value) {
if (stack[0] === value) {
return '[Circular ~]';
}
return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';
};
}
return function(key, value) {
var thisPos;
if (stack.length > 0) {
thisPos = stack.indexOf(this);
if (~thisPos) {
stack.splice(thisPos + 1);
} else {
stack.push(this);
}
if (~thisPos) {
keys.splice(thisPos, Infinity, key);
} else {
keys.push(key);
}
if (~stack.indexOf(value)) {
value = cycleReplacer.call(this, key, value);
}
} else {
stack.push(value);
}
if (replacer === null || replacer === void 0) {
return value;
}
return replacer.call(this, key, value);
};
};
Translator._log = function() {
var level, m, msg;
level = arguments[0], msg = 2 <= arguments.length ? slice.call(arguments, 1) : [];
msg = ((function() {
var j, len, ref, results;
results = [];
for (j = 0, len = msg.length; j < len; j++) {
m = msg[j];
results.push((ref = typeof m) === 'boolean' || ref === 'string' || ref === 'number' ? '' + m : Translator.stringify(m));
}
return results;
})()).join(' ');
return Zotero.debug('[better' + '-' + ("bibtex:" + this.header.label + "] ") + msg, level);
};
/* http://docs.citationstyles.org/en/stable/specification.html#appendix-iv-variables */
Translator.CSLVariables = {
archive: {},
'archive_location': {},
'archive-place': {},
authority: {
BibLaTeX: 'institution'
},
'call-number': {
BibTeX: 'lccn'
},
'collection-title': {},
'container-title': {
BibLaTeX: function() {
switch (this.item.itemType) {
case 'film':
case 'tvBroadcast':
case 'videoRecording':
return 'booktitle';
case 'bookSection':
return 'maintitle';
default:
return 'journaltitle';
}
}
},
'container-title-short': {},
dimensions: {},
DOI: {
BibTeX: 'doi',
BibLaTeX: 'doi'
},
event: {},
'event-place': {},
genre: {},
ISBN: {
BibTeX: 'isbn',
BibLaTeX: 'isbn'
},
ISSN: {
BibTeX: 'issn',
BibLaTeX: 'issn'
},
jurisdiction: {},
keyword: {},
locator: {},
medium: {},
'original-publisher': {
BibLaTeX: 'origpublisher',
type: 'literal'
},
'original-publisher-place': {
BibLaTeX: 'origlocation',
type: 'literal'
},
'original-title': {
BibLaTeX: 'origtitle'
},
page: {},
'page-first': {},
PMCID: {},
PMID: {},
publisher: {},
'publisher-place': {
BibLaTeX: 'location',
type: 'literal'
},
references: {},
'reviewed-title': {},
scale: {},
section: {},
source: {},
status: {},
title: {
BibLaTeX: function() {
if (this.referencetype === 'book') {
return 'maintitle';
} else {
return null;
}
}
},
'title-short': {},
URL: {},
version: {},
'volume-title': {
BibLaTeX: function() {
switch (this.item.itemType) {
case 'book':
return 'title';
case 'bookSection':
return 'booktitle';
default:
return null;
}
}
},
'year-suffix': {},
'chapter-number': {},
'collection-number': {},
edition: {},
issue: {},
number: {
BibLaTeX: 'number'
},
'number-of-pages': {},
'number-of-volumes': {},
volume: {
BibLaTeX: 'volume'
},
accessed: {
type: 'date'
},
container: {
type: 'date'
},
'event-date': {
type: 'date'
},
issued: {
type: 'date',
BibLaTeX: 'date'
},
'original-date': {
type: 'date',
BibLaTeX: 'origdate'
},
submitted: {
type: 'date'
},
author: {
type: 'creator',
BibLaTeX: 'author'
},
'collection-editor': {
type: 'creator'
},
composer: {
type: 'creator'
},
'container-author': {
type: 'creator'
},
director: {
type: 'creator',
BibLaTeX: 'director'
},
editor: {
type: 'creator',
BibLaTeX: 'editor'
},
'editorial-director': {
type: 'creator'
},
illustrator: {
type: 'creator'
},
interviewer: {
type: 'creator'
},
'original-author': {
type: 'creator'
},
recipient: {
type: 'creator'
},
'reviewed-author': {
type: 'creator'
},
translator: {
type: 'creator'
}
};
ref = Translator.CSLVariables;
for (name in ref) {
v = ref[name];
v.name = name;
}
Translator.CSLVariable = function(name) {
return this.CSLVariables[name] || this.CSLVariables[name.toLowerCase()] || this.CSLVariables[name.toUpperCase()];
};
Translator.CSLCreator = function(value) {
var creator;
creator = value.split(/\s*\|\|\s*/);
if (creator.length === 2) {
return {
lastName: creator[0] || '',
firstName: creator[1] || ''
};
} else {
return {
name: value
};
}
};
Translator.extractFieldsKVRE = new RegExp("^\\s*(" + (Object.keys(Translator.CSLVariables).join('|')) + "|LCCN|MR|Zbl|arXiv|JSTOR|HDL|GoogleBooksID)\\s*:\\s*(.+)\\s*$", 'i');
Translator.extractFields = function(item) {
var assignment, cslvar, data, error, extra, fields, j, json, l, len, len1, line, m, prefix, ref1, ref2, ref3, value;
if (!item.extra) {
return {};
}
fields = {};
m = /(biblatexdata|bibtex|biblatex)\[([^\]]+)\]/.exec(item.extra);
if (m) {
item.extra = item.extra.replace(m[0], '').trim();
ref1 = m[2].split(';');
for (j = 0, len = ref1.length; j < len; j++) {
assignment = ref1[j];
data = assignment.match(/^([^=]+)=\s*(.*)/);
if (data) {
fields[data[1].toLowerCase()] = {
value: data[2],
format: 'naive'
};
} else {
Translator.debug("Not an assignment: " + assignment);
}
}
}
m = /(biblatexdata|bibtex|biblatex)({[\s\S]+})/.exec(item.extra);
if (m) {
prefix = m[1];
data = m[2];
while (data.indexOf('}') >= 0) {
try {
json = JSON5.parse(data);
} catch (error) {
json = null;
}
if (json) {
break;
}
data = data.replace(/[^}]*}$/, '');
}
if (json) {
item.extra = item.extra.replace(prefix + data, '').trim();
for (name in json) {
if (!hasProp.call(json, name)) continue;
value = json[name];
fields[name.toLowerCase()] = {
value: value,
format: 'json'
};
}
}
}
/* fetch fields as per https://forums.zotero.org/discussion/3673/2/original-date-of-publication/ */
item.extra = item.extra.replace(/{:([^:]+):\s*([^}]+)}/g, (function(_this) {
return function(m, name, value) {
var cslvar, ref2;
cslvar = Translator.CSLVariable(name);
if (!cslvar) {
return '';
}
if (cslvar.type === 'creator') {
if (!Array.isArray((ref2 = fields[name]) != null ? ref2.value : void 0)) {
fields[cslvar.name] = {
value: [],
format: 'csl'
};
}
fields[cslvar.name].value.push(_this.CSLCreator(value));
} else {
fields[cslvar.name] = {
value: value,
format: 'csl'
};
}
return '';
};
})(this));
extra = [];
ref2 = item.extra.split("\n");
for (l = 0, len1 = ref2.length; l < len1; l++) {
line = ref2[l];
m = Translator.extractFieldsKVRE.exec(line);
cslvar = m ? this.CSLVariable(m[1]) : null;
switch (false) {
case !!m:
extra.push(line);
break;
case !!cslvar:
fields[m[1].toLowerCase()] = {
value: m[2].trim(),
format: 'key-value'
};
break;
case cslvar.type !== 'creator':
if (!Array.isArray((ref3 = fields[cslvar.name]) != null ? ref3.value : void 0)) {
fields[cslvar.name] = {
value: [],
format: 'csl'
};
}
fields[cslvar.name].value.push(this.CSLCreator(m[2].trim()));
break;
default:
fields[cslvar.name] = {
value: m[2].trim(),
format: 'csl'
};
}
}
item.extra = extra.join("\n");
item.extra = item.extra.trim();
if (item.extra === '') {
delete item.extra;
}
return fields;
};
Translator.initialize = function() {
var attr, base, base1, bibtex, cfg, ch, collection, f, field, i, j, k, l, len, len1, len2, len3, len4, n, option, p, pref, q, ref1, ref2, ref3, ref4, type, typeMap, word, zotero;
if (this.initialized) {
return;
}
this.initialized = true;
this.citekeys = Object.create(null);
this.attachmentCounter = 0;
this.rawLaTag = '#LaTeX';
this.BibLaTeXDataFieldMap = Object.create(null);
this.translatorID = this.header.translatorID;
this.testing = Zotero.getHiddenPref('better-bibtex.tests') !== '';
if (this.testing) {
this.testing_timestamp = Zotero.getHiddenPref('better-bibtex.test.timestamp');
}
ref1 = this.fieldMap || {};
for (attr in ref1) {
if (!hasProp.call(ref1, attr)) continue;
f = ref1[attr];
if (f.name) {
this.BibLaTeXDataFieldMap[f.name] = f;
}
}
ref2 = Object.keys(this.preferences);
for (j = 0, len = ref2.length; j < len; j++) {
pref = ref2[j];
this.preferences[pref] = this[pref] = Zotero.getHiddenPref("better-bibtex." + pref);
}
this.titleCaseLowerCase = new RegExp('^(' + ((function() {
var l, len1, ref3, results;
ref3 = this.titleCaseLowerCase.split(/\s+/);
results = [];
for (l = 0, len1 = ref3.length; l < len1; l++) {
word = ref3[l];
if (word) {
results.push(word.replace(/\./g, '\\.'));
}
}
return results;
}).call(this)).join('|') + ')$', 'i');
this.titleCaseUpperCase = new RegExp('^(' + ((function() {
var l, len1, ref3, results;
ref3 = this.titleCaseUpperCase.split(/\s+/);
results = [];
for (l = 0, len1 = ref3.length; l < len1; l++) {
word = ref3[l];
if (word) {
results.push(word.replace(/\./g, '\\.'));
}
}
return results;
}).call(this)).join('|') + ')$', 'i');
this.skipFields = (function() {
var l, len1, ref3, results;
ref3 = (this.skipFields || '').split(',');
results = [];
for (l = 0, len1 = ref3.length; l < len1; l++) {
field = ref3[l];
if (field.trim()) {
results.push(field.trim());
}
}
return results;
}).call(this);
if (this.csquotes) {
this.csquotes = {
open: '',
close: ''
};
ref3 = Translator.preferences.csquotes;
for (i = l = 0, len1 = ref3.length; l < len1; i = ++l) {
ch = ref3[i];
if (i % 2 === 0) {
this.csquotes.open += ch;
} else {
this.csquotes.close += ch;
}
}
}
this.options = {};
ref4 = ['useJournalAbbreviation', 'exportPath', 'exportFilename', 'exportCharset', 'exportFileData', 'exportNotes'];
for (n = 0, len2 = ref4.length; n < len2; n++) {
option = ref4[n];
this.options[option] = this[option] = Zotero.getOption(option);
}
this.caching = !this.exportFileData;
this.unicode = (function() {
switch (false) {
case !(this.BetterBibLaTeX || this.CollectedNotes):
return !this.asciiBibLaTeX;
case !this.BetterBibTeX:
return !this.asciiBibTeX;
default:
return true;
}
}).call(this);
if (this.typeMap) {
typeMap = this.typeMap;
this.typeMap = {
BibTeX2Zotero: Object.create(null),
Zotero2BibTeX: Object.create(null)
};
for (bibtex in typeMap) {
if (!hasProp.call(typeMap, bibtex)) continue;
zotero = typeMap[bibtex];
bibtex = bibtex.replace(/^=/, '').trim().split(/\s+/);
zotero = zotero.trim().split(/\s+/);
for (p = 0, len3 = bibtex.length; p < len3; p++) {
type = bibtex[p];
if ((base = this.typeMap.BibTeX2Zotero)[type] == null) {
base[type] = zotero[0];
}
}
for (q = 0, len4 = zotero.length; q < len4; q++) {
type = zotero[q];
if ((base1 = this.typeMap.Zotero2BibTeX)[type] == null) {
base1[type] = bibtex[0];
}
}
}
}
if (Zotero.getHiddenPref('better-bibtex.debug')) {
this.debug = this.debug_on;
this.log = this.log_on;
cfg = {};
for (k in this) {
if (!hasProp.call(this, k)) continue;
v = this[k];
if (typeof v !== 'object') {
cfg[k] = v;
}
}
this.debug("Translator initialized:", cfg);
} else {
this.debug = this.debug_off;
this.log = this.log_off;
}
this.collections = [];
if (Zotero.nextCollection) {
while (collection = Zotero.nextCollection()) {
this.debug('adding collection:', collection);
this.collections.push(this.sanitizeCollection(collection));
}
}
return this.context = {
exportCharset: (this.exportCharset || 'UTF-8').toUpperCase(),
exportNotes: !!this.exportNotes,
translatorID: this.translatorID,
useJournalAbbreviation: !!this.useJournalAbbreviation
};
};
Translator.sanitizeCollection = function(coll) {
var c, j, len, ref1, sane;
sane = {
name: coll.name,
collections: [],
items: []
};
ref1 = coll.children || coll.descendents;
for (j = 0, len = ref1.length; j < len; j++) {
c = ref1[j];
switch (c.type) {
case 'item':
sane.items.push(c.id);
break;
case 'collection':
sane.collections.push(this.sanitizeCollection(c));
break;
default:
throw "Unexpected collection member type '" + c.type + "'";
}
}
if (Translator.testing) {
sane.collections.sort((function(a, b) {
return a.name.localeCompare(b.name);
}));
}
return sane;
};
Translator.nextItem = function() {
var cached, item;
this.initialize();
while (item = Zotero.nextItem()) {
if (item.itemType === 'note' || item.itemType === 'attachment') {
continue;
}
if (this.caching) {
cached = Zotero.BetterBibTeX.cache.fetch(item.itemID, this.context);
if (cached != null ? cached.citekey : void 0) {
Translator.debug('nextItem: cached');
this.citekeys[item.itemID] = cached.citekey;
Zotero.write(cached.bibtex);
continue;
}
}
Zotero.BetterBibTeX.keymanager.extract(item, 'nextItem');
item.__citekey__ || (item.__citekey__ = Zotero.BetterBibTeX.keymanager.get(item, 'on-export').citekey);
this.citekeys[item.itemID] = item.__citekey__;
Translator.debug('nextItem: serialized');
return item;
}
return null;
};
Translator.exportGroups = function() {
var collection, groups, j, len, ref1;
this.debug('exportGroups:', this.collections);
if (this.collections.length === 0 || !this.jabrefGroups) {
return;
}
Zotero.write('@comment{jabref-meta: groupsversion:3;}\n');
Zotero.write('@comment{jabref-meta: groupstree:\n');
Zotero.write('0 AllEntriesGroup:;\n');
this.debug('exportGroups: getting groups');
groups = [];
ref1 = this.collections;
for (j = 0, len = ref1.length; j < len; j++) {
collection = ref1[j];
groups = groups.concat(JabRef.exportGroup(collection, 1));
}
this.debug('exportGroups: serialize', groups);
return Zotero.write(JabRef.serialize(groups, ';\n', true) + ';\n}\n');
};
JabRef = {
serialize: function(arr, sep, wrap) {
arr = (function() {
var j, len, results;
results = [];
for (j = 0, len = arr.length; j < len; j++) {
v = arr[j];
results.push(('' + v).replace(/;/g, "\\;"));
}
return results;
})();
if (wrap) {
arr = (function() {
var j, len, results;
results = [];
for (j = 0, len = arr.length; j < len; j++) {
v = arr[j];
results.push(v.match(/.{1,70}/g).join("\n"));
}
return results;
})();
}
return arr.join(sep);
},
exportGroup: function(collection, level) {
var coll, group, id, j, len, ref1, references, result;
group = [level + " ExplicitGroup:" + collection.name, 0];
references = (function() {
var j, len, ref1, results;
ref1 = collection.items;
results = [];
for (j = 0, len = ref1.length; j < len; j++) {
id = ref1[j];
results.push(Translator.citekeys[id]);
}
return results;
})();
if (Translator.testing) {
references.sort();
}
group = group.concat(references);
group.push('');
group = this.serialize(group, ';');
result = [group];
ref1 = collection.collections;
for (j = 0, len = ref1.length; j < len; j++) {
coll = ref1[j];
result = result.concat(JabRef.exportGroup(coll, level + 1));
}
return result;
}
};
// SOURCE: resource/translators/preferences.js
Translator.preferences = {
"asciiBibLaTeX": false,
"asciiBibTeX": true,
"attachmentsNoMetadata": false,
"autoAbbrevStyle": "",
"autoAbbrev": true,
"autoExport": "idle",
"autoExportIdleWait": 10,
"cacheFlushInterval": 5,
"cacheReset": 0,
"confirmCacheResetSize": 1000,
"caching": true,
"citeCommand": "cite",
"citekeyFormat": "[auth:lower][Title:fold:nopunct:skipwords:select,1,1:lower:alphanum:prefix,_][year:prefix,_][0]",
"citekeyFold": true,
"debug": false,
"DOIandURL": "both",
"bibtexURLs": "off",
"csquotes": "",
"keyConflictPolicy": "keep",
"langID": "babel",
"pinCitekeys": "manual",
"preserveBibTeXVariables": false,
"rawImports": false,
"scanCitekeys": true,
"showCitekeys": false,
"showItemIDs": false,
"skipFields": "",
"skipWords": "a,ab,aboard,about,above,across,after,against,al,along,amid,among,an,and,anti,around,as,at,before,behind,below,beneath,beside,besides,between,beyond,but,by,d,da,das,de,del,dell,dello,dei,degli,della,dell,delle,dem,den,der,des,despite,die,do,down,du,during,ein,eine,einem,einen,einer,eines,el,en,et,except,for,from,gli,i,il,in,inside,into,is,l,la,las,le,les,like,lo,los,near,nor,of,off,on,onto,or,over,past,per,plus,round,save,since,so,some,sur,than,the,through,to,toward,towards,un,una,unas,under,underneath,une,unlike,uno,unos,until,up,upon,versus,via,von,while,with,within,without,yet,zu,zum",
"tests": "",
"warnBulkModify": 10,
"postscript": "",
"jabrefGroups": true,
"defaultDateParserLocale": "",
"parseParticles": true,
"titleCase": false,
"titleCaseLowerCase": "about above across afore after against along alongside amid amidst among amongst anenst apropos apud around as aside astride at athwart atop barring before behind below beneath beside besides between beyond but by circa despite down during except for forenenst from given in inside into lest like modulo near next notwithstanding of off on onto out over per plus pro qua sans since than through thru throughout thruout till to toward towards under underneath until unto up upon versus vs. v. vs v via vis-à-vis with within without according to ahead of apart from as for as of as per as regards aside from back to because of close to due to except for far from inside of instead of near to next to on to out from out of outside of prior to pursuant to rather than regardless of such as _that_ their of up to where as or yet so for and nor a an the de d' von van c et ca",
"titleCaseUpperCase": "ID TV"
}
// SOURCE: resource/translators/Better BibTeX.header.js
Translator.header = {"translatorID":"ca65189f-8815-4afe-8c8b-8c7c15f0edca","label":"Better BibTeX","creator":"Simon Kornblith, Richard Karnesky and Emiliano heyns","target":"bib","minVersion":"4.0.27","maxVersion":"","priority":199,"configOptions":{"getCollections":true},"displayOptions":{"exportNotes":true,"exportFileData":false,"useJournalAbbreviation":false,"Keep updated":false},"inRepository":true,"translatorType":3,"browserSupport":"gcsv","BetterBibTeX":{"dependencies":["xregexp-all","reference","BetterBibTeXMarkupParser","unicode_translator","latex_unicode_mapping","BetterBibTeXBraceBalancer","BetterBibTeXParserSupport","BetterBibTeXParser"]}};
Translator.release = "1.6.28-1086-1452170815";
Translator.BetterBibTeX = true;
// SOURCE: resource/translators/Better BibTeX.js
// Generated by CoffeeScript 1.10.0
var JabRef, ZoteroItem, attr, base, detectImport, doExport, doImport, f, field, fields, i, len, months, ref1,
hasProp = {}.hasOwnProperty;
Translator.fieldMap = {
place: {
name: 'address',
"import": 'location'
},
section: {
name: 'chapter'
},
edition: {
name: 'edition'
},
type: {
name: 'type'
},
series: {
name: 'series'
},
title: {
name: 'title',
autoCase: true
},
volume: {
name: 'volume'
},
rights: {
name: 'copyright'
},
ISBN: {
name: 'isbn'
},
ISSN: {
name: 'issn'
},
callNumber: {
name: 'lccn'
},
shortTitle: {
name: 'shorttitle',
autoCase: true
},
DOI: {
name: 'doi'
},
abstractNote: {
name: 'abstract'
},
country: {
name: 'nationality'
},
language: {
name: 'language'
},
assignee: {
name: 'assignee'
},
issue: {
"import": 'issue'
},
publicationTitle: {
"import": 'booktitle'
},
publisher: {
"import": ['school', 'institution', 'publisher'],
enc: 'literal'
}
};
Translator.typeMap = {
'book booklet manual proceedings': 'book',
'incollection inbook': 'bookSection',
'article misc': 'journalArticle magazineArticle newspaperArticle',
'phdthesis mastersthesis': 'thesis',
unpublished: 'manuscript',
patent: 'patent',
'inproceedings conference': 'conferencePaper',
techreport: 'report',
misc: 'letter interview film artwork webpage'
};
Translator.fieldEncoding = {
url: 'url',
doi: 'verbatim'
};
months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
doExport = function() {
var authors, collaborators, creator, date, editors, i, item, j, len, len1, note, pages, primaryCreatorType, ref, ref1, ref2, ref3, ref4, ref5, translators;
Zotero.write('\n');
while (item = Translator.nextItem()) {
ref = new Reference(item);
ref.add({
name: 'number',
value: item.reportNumber || item.issue || item.seriesNumber || item.patentNumber
});
ref.add({
name: 'urldate',
value: item.accessDate && item.accessDate.replace(/\s*T?\d+:\d+:\d+.*/, '')
});
Translator.debug('urls:', {
setting: Translator.bibtexURLs
});
switch (Translator.bibtexURLs) {
case 'url':
ref.add({
name: 'url',
value: item.url,
enc: 'verbatim'
});
break;
case 'note':
case 'true':
ref.add({
name: ((ref1 = ref.referencetype) === 'misc' || ref1 === 'booklet' ? 'howpublished' : 'note'),
allowDuplicates: true,
value: item.url,
enc: 'url'
});
break;
default:
if (item.itemType === 'webpage') {
ref.add({
name: 'howpublished',
allowDuplicates: true,
value: item.url,
enc: 'url'
});
}
}
switch (false) {
case (ref2 = item.itemType) !== 'bookSection' && ref2 !== 'conferencePaper':
ref.add({
name: 'booktitle',
autoCase: true,
value: item.publicationTitle,
preserveBibTeXVariables: true
});
break;
case !ref.isBibVar(item.publicationTitle):
ref.add({
name: 'journal',
value: item.publicationTitle,
preserveBibTeXVariables: true
});
break;
default:
ref.add({
name: 'journal',
value: Translator.useJournalAbbreviation && Zotero.BetterBibTeX.keymanager.journalAbbrev(item) || item.publicationTitle,
preserveBibTeXVariables: true
});
}
switch (item.itemType) {
case 'thesis':
ref.add({
name: 'school',
value: item.publisher
});
break;
case 'report':
ref.add({
name: 'institution',
value: item.publisher
});
break;
default:
ref.add({
name: 'publisher',
value: item.publisher,
enc: 'literal'
});
}
if (item.itemType === 'thesis' && ((ref3 = item.thesisType) === 'mastersthesis' || ref3 === 'phdthesis')) {
ref.referencetype = item.thesisType;
ref.remove('type');
}
if (item.creators && item.creators.length) {
/* split creators into subcategories */
authors = [];
editors = [];
translators = [];
collaborators = [];
primaryCreatorType = Zotero.Utilities.getCreatorsForType(item.itemType)[0];
ref4 = item.creators;
for (i = 0, len = ref4.length; i < len; i++) {
creator = ref4[i];
switch (creator.creatorType) {
case 'editor':
case 'seriesEditor':
editors.push(creator);
break;
case 'translator':
translators.push(creator);
break;
case primaryCreatorType:
authors.push(creator);
break;
default:
collaborators.push(creator);
}
}
ref.add({
name: 'author',
value: authors,
enc: 'creators'
});
ref.add({
name: 'editor',
value: editors,
enc: 'creators'
});
ref.add({
name: 'translator',
value: translators,
enc: 'creators'
});
ref.add({
name: 'collaborator',
value: collaborators,
enc: 'creators'
});
}
if (item.date) {
date = Zotero.BetterBibTeX.parseDateToObject(item.date, item.language);
if (date.literal || date.year_end) {
ref.add({
name: 'year',
value: item.date
});
} else {
if (date.month) {
ref.add({
name: 'month',
value: months[date.month - 1],
bare: true
});
}
ref.add({
name: 'year',
value: '' + date.year
});
}
}
ref.add({
name: 'note',
value: item.extra,
allowDuplicates: true
});
ref.add({
name: 'keywords',
value: item.tags,
enc: 'tags'
});
if (item.pages) {
pages = item.pages;
if (!ref.raw) {
pages = pages.replace(/[-\u2012-\u2015\u2053]+/g, '--');
}
ref.add({
name: 'pages',
value: pages
});
}
if (item.notes && Translator.exportNotes) {
ref5 = item.notes;
for (j = 0, len1 = ref5.length; j < len1; j++) {
note = ref5[j];
ref.add({
name: 'annote',
value: Zotero.Utilities.unescapeHTML(note.note),
allowDuplicates: true
});
}
}
ref.add({
name: 'file',
value: item.attachments,
enc: 'attachments'
});
ref.complete();
}
Translator.exportGroups();
Zotero.write('\n');
};
detectImport = function() {
var bib, e, error, input;
try {
input = Zotero.read(102400);
Translator.log("BBT detect against " + input);
bib = BetterBibTeXParser.parse(input);
Translator.log("better-bibtex: detect: " + (bib.references.length > 0));
return bib.references.length > 0;
} catch (error) {
e = error;
Translator.log("better-bibtex: detect failed: " + e + "\n" + e.stack);
return false;
}
};
doImport = function() {
var bib, coll, data, e, error, i, item, j, len, len1, read, ref, ref1, ref2;
try {
Translator.initialize();
data = '';
while ((read = Zotero.read(0x100000)) !== false) {
data += read;
}
bib = BetterBibTeXParser.parse(data, {
raw: Translator.rawImports
});
ref1 = bib.references;
for (i = 0, len = ref1.length; i < len; i++) {
ref = ref1[i];
new ZoteroItem(ref);
}
ref2 = bib.collections;
for (j = 0, len1 = ref2.length; j < len1; j++) {
coll = ref2[j];
JabRef.importGroup(coll);
}
if (bib.errors && bib.errors.length > 0) {
item = new Zotero.Item('journalArticle');
item.title = Translator.header.label + " import errors";
item.extra = JSON.stringify({
translator: Translator.header.translatorID,
notimported: bib.errors.join("\n\n")
});
return item.complete();
}
} catch (error) {
e = error;
Translator.log("better-bibtex: import failed: " + e + "\n" + e.stack);
throw e;
}
};
JabRef = JabRef != null ? JabRef : {};
JabRef.importGroup = function(group) {
var child, collection, i, key, len, ref1;
collection = new Zotero.Collection();
collection.type = 'collection';
collection.name = group.name;
collection.children = (function() {
var i, len, ref1, results;
ref1 = group.items;
results = [];
for (i = 0, len = ref1.length; i < len; i++) {
key = ref1[i];
results.push({
type: 'item',
id: key
});
}
return results;
})();
ref1 = group.collections;
for (i = 0, len = ref1.length; i < len; i++) {
child = ref1[i];
collection.children.push(JabRef.importGroup(child));
}
collection.complete();
return collection;
};
ZoteroItem = (function() {
function ZoteroItem(bibtex) {
var base;
this.type = Translator.typeMap.BibTeX2Zotero[Zotero.Utilities.trimInternal((bibtex.type || bibtex.__type__).toLowerCase())] || 'journalArticle';
this.item = new Zotero.Item(this.type);
this.item.itemID = bibtex.__key__;
Translator.log("new reference: " + this.item.itemID);
this.biblatexdata = {};
if (bibtex.__note__) {
this.item.notes.push({
note: ('The following fields were not imported:<br/>' + bibtex.__note__).trim(),
tags: ['#BBT Import']
});
}
this["import"](bibtex);
if (Translator.rawImports) {
if ((base = this.item).tags == null) {
base.tags = [];
}
this.item.tags.push(Translator.rawLaTag);
}
this.item.complete();
}
return ZoteroItem;
})();
ZoteroItem.prototype.keywordClean = function(k) {
return k.replace(/^[\s{]+|[}\s]+$/g, '').trim();
};
ZoteroItem.prototype.addToExtra = function(str) {
if (this.item.extra && this.item.extra !== '') {
this.item.extra += " \n" + str;
} else {
this.item.extra = str;
}
};
ZoteroItem.prototype.addToExtraData = function(key, value) {
this.biblatexdata[key] = value;
if (key.match(/[\[\]=;\r\n]/) || value.match(/[\[\]=;\r\n]/)) {
this.biblatexdatajson = true;
}
};
ZoteroItem.prototype.fieldMap = Object.create(null);
ref1 = Translator.fieldMap;
for (attr in ref1) {
if (!hasProp.call(ref1, attr)) continue;
field = ref1[attr];
fields = [];
if (field.name) {
fields.push(field.name);
}
if (field["import"]) {
fields = fields.concat(field["import"]);
}
for (i = 0, len = fields.length; i < len; i++) {
f = fields[i];
if ((base = ZoteroItem.prototype.fieldMap)[f] == null) {
base[f] = attr;
}
}
}
ZoteroItem.prototype["import"] = function(bibtex) {
var att, biblatexdata, creator, hackyFields, j, k, key, keys, keywords, kw, l, len1, len2, m, month, o, ref2, value;
hackyFields = [];
for (field in bibtex) {
if (!hasProp.call(bibtex, field)) continue;
value = bibtex[field];
if (typeof value !== 'number' && !value) {
continue;
}
if (typeof value === 'string') {
value = Zotero.Utilities.trim(value);
}
if (value === '') {
continue;
}
if (this.fieldMap[field]) {
this.item[this.fieldMap[field]] = value;
continue;
}
switch (field) {
case '__note__':
case '__key__':
case 'type':
case 'added-at':
case 'timestamp':
continue;
case '__type__':
if ((ref2 = bibtex.__type__) === 'phdthesis' || ref2 === 'mastersthesis') {
this.item.thesisType = bibtex.__type__;
}
break;
case 'subtitle':
if (!this.item.title) {
this.item.title = '';
}
this.item.title = this.item.title.trim();
value = value.trim();
if (!/[-–—:!?.;]$/.test(this.item.title) && !/^[-–—:.;¡¿]/.test(value)) {
this.item.title += ': ';
} else {
if (this.item.title.length) {
this.item.title += ' ';
}
}
this.item.title += value;
break;
case 'journal':
if (this.item.publicationTitle) {
this.item.journalAbbreviation = value;
} else {
this.item.publicationTitle = value;
}
break;
case 'fjournal':
if (this.item.publicationTitle) {
this.item.journalAbbreviation = this.item.publicationTitle;
}
this.item.publicationTitle = value;
break;
case 'author':
case 'editor':
case 'translator':
for (j = 0, len1 = value.length; j < len1; j++) {
creator = value[j];
if (!creator) {
continues;
}
if (typeof creator === 'string') {
creator = Zotero.Utilities.cleanAuthor(creator, field, false);
if (creator.lastName && !creator.firstName) {
creator.fieldMode = 1;
}
} else {
creator.creatorType = field;
}
this.item.creators.push(creator);
}
break;
case 'institution':
case 'organization':
this.item.backupPublisher = value;
break;
case 'number':
switch (this.item.itemType) {
case 'report':
this.item.reportNumber = value;
break;
case 'book':
case 'bookSection':
this.item.seriesNumber = value;
break;
case 'patent':
this.item.patentNumber = value;
break;
default:
this.item.issue = value;
}
break;
case 'month':
month = months.indexOf(value.toLowerCase());
if (month >= 0) {
value = Zotero.Utilities.formatDate({
month: month
});
} else {
value += ' ';
}
if (this.item.date) {
if (value.indexOf(this.item.date) >= 0) {
/* value contains year and more */
this.item.date = value;
} else {
this.item.date = value + this.item.date;
}
} else {
this.item.date = value;
}
break;
case 'year':
if (this.item.date) {
if (this.item.date.indexOf(value) < 0) {
this.item.date += value;
}
} else {
this.item.date = value;
}
break;
case 'date':
this.item.date = value;
break;
case 'pages':
switch (this.item.itemType) {
case 'book':
case 'thesis':
case 'manuscript':
this.item.numPages = value;
break;
default:
this.item.pages = value.replace(/--/g, '-');
}
break;
case 'note':
this.addToExtra(value);
break;
case 'url':
case 'howpublished':
if (m = value.match(/^(\\url{)(https?:\/\/|mailto:)}$/i)) {
this.item.url = m[2];
} else if (field === 'url' || /^(https?:\/\/|mailto:)/i.test(value)) {
this.item.url = value;
} else {
this.addToExtraData(field, value);
}
break;
case 'lastchecked':
case 'urldate':
this.item.accessDate = value;
break;
case 'keywords':
case 'keyword':
keywords = value.split(/[,;]/);
if (keywords.length === 1) {
keywords = value.split(/\s+/);
}
this.item.tags = (function() {
var l, len2, results;
results = [];
for (l = 0, len2 = keywords.length; l < len2; l++) {
kw = keywords[l];
results.push(this.keywordClean(kw));
}
return results;
}).call(this);
break;
case 'comment':
case 'annote':
case 'review':
case 'notes':
this.item.notes.push({
note: Zotero.Utilities.text2html(value)
});
break;
case 'file':
for (l = 0, len2 = value.length; l < len2; l++) {
att = value[l];
this.item.attachments.push(att);
}
break;
case 'eprint':
case 'eprinttype':
/* Support for IDs exported by BibLaTeX */
this.item["_" + field] = value;
if (this.item._eprint && this.item._eprinttype) {
switch (this.item._eprinttype.trim().toLowerCase()) {
case 'arxiv':
hackyFields.push("arXiv: " + value);
break;
case 'jstor':
hackyFields.push("JSTOR: " + value);
break;
case 'pubmed':
hackyFields.push("PMID: " + value);
break;
case 'hdl':
hackyFields.push("HDL: " + value);
break;
case 'googlebooks':
hackyFields.push("GoogleBooksID: " + value);
}
delete this.item._eprint;
delete this.item._eprinttype;
}
break;
case 'lccn':
hackyFields.push("LCCB: " + value);
break;
case 'mrnumber':
hackyFields.push("MR: " + value);
break;
case 'zmnumber':
hackyFields.push("Zbl: " + value);
break;
case 'pmid':
hackyFields.push("PMID: " + value);
break;
case 'pmcid':
hackyFields.push("PMCID: " + value);
break;
default:
this.addToExtraData(field, value);
}
}
if (this.item.itemType === 'conferencePaper' && this.item.publicationTitle && !this.item.proceedingsTitle) {
this.item.proceedingsTitle = this.item.publicationTitle;
delete this.item.publicationTitle;
}
this.addToExtra("bibtex: " + this.item.itemID);
keys = Object.keys(this.biblatexdata);
if (keys.length > 0) {
if (Translator.testing) {
keys.sort();
}
biblatexdata = (function() {
switch (false) {
case !(this.biblatexdatajson && Translator.testing):
return 'bibtex{' + ((function() {
var len3, n, results;
results = [];
for (n = 0, len3 = keys.length; n < len3; n++) {
k = keys[n];
o = {};
o[k] = this.biblatexdata[k];
results.push(JSON5.stringify(o).slice(1, -1));
}
return results;
}).call(this)) + '}';
case !this.biblatexdatajson:
return "bibtex" + (JSON5.stringify(this.biblatexdata));
default:
return biblatexdata = 'bibtex[' + ((function() {
var len3, n, results;
results = [];
for (n = 0, len3 = keys.length; n < len3; n++) {
key = keys[n];
results.push(key + "=" + this.biblatexdata[key]);
}
return results;
}).call(this)).join(';') + ']';
}
}).call(this);
this.addToExtra(biblatexdata);
}
if (hackyFields.length > 0) {
hackyFields.sort();
this.addToExtra(hackyFields.join(" \n"));
}
if (!this.item.publisher && this.item.backupPublisher) {
this.item.publisher = this.item.backupPublisher;
delete this.item.backupPublisher;
}
};
// SOURCE: resource/translators/xregexp-all.js
/***** xregexp.js *****/
/*!
* XRegExp v2.0.0
* (c) 2007-2012 Steven Levithan <http://xregexp.com/>
* MIT License
*/
/**
* XRegExp provides augmented, extensible JavaScript regular expressions. You get new syntax,
* flags, and methods beyond what browsers support natively. XRegExp is also a regex utility belt
* with tools to make your client-side grepping simpler and more powerful, while freeing you from
* worrying about pesky cross-browser inconsistencies and the dubious `lastIndex` property. See
* XRegExp's documentation (http://xregexp.com/) for more details.
* @module xregexp
* @requires N/A
*/
var XRegExp;
// Avoid running twice; that would reset tokens and could break references to native globals
XRegExp = XRegExp || (function (undef) {
"use strict";
/*--------------------------------------
* Private variables
*------------------------------------*/
var self,
addToken,
add,
// Optional features; can be installed and uninstalled
features = {
natives: false,
extensibility: false
},
// Store native methods to use and restore ("native" is an ES3 reserved keyword)
nativ = {
exec: RegExp.prototype.exec,
test: RegExp.prototype.test,
match: String.prototype.match,
replace: String.prototype.replace,
split: String.prototype.split
},
// Storage for fixed/extended native methods
fixed = {},
// Storage for cached regexes
cache = {},
// Storage for addon tokens
tokens = [],
// Token scopes
defaultScope = "default",
classScope = "class",
// Regexes that match native regex syntax
nativeTokens = {
// Any native multicharacter token in default scope (includes octals, excludes character classes)
"default": /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/,
// Any native multicharacter token in character class scope (includes octals)
"class": /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/
},
// Any backreference in replacement strings
replacementToken = /\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g,
// Any character with a later instance in the string
duplicateFlags = /([\s\S])(?=[\s\S]*\1)/g,
// Any greedy/lazy quantifier
quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/,
// Check for correct `exec` handling of nonparticipating capturing groups
compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undef,
// Check for flag y support (Firefox 3+)
hasNativeY = RegExp.prototype.sticky !== undef,
// Used to kill infinite recursion during XRegExp construction
isInsideConstructor = false,
// Storage for known flags, including addon flags
registeredFlags = "gim" + (hasNativeY ? "y" : "");
/*--------------------------------------
* Private helper functions
*------------------------------------*/
/**
* Attaches XRegExp.prototype properties and named capture supporting data to a regex object.
* @private
* @param {RegExp} regex Regex to augment.
* @param {Array} captureNames Array with capture names, or null.
* @param {Boolean} [isNative] Whether the regex was created by `RegExp` rather than `XRegExp`.
* @returns {RegExp} Augmented regex.
*/
function augment(regex, captureNames, isNative) {
var p;
// Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value
for (p in self.prototype) {
if (self.prototype.hasOwnProperty(p)) {
regex[p] = self.prototype[p];
}
}
regex.xregexp = {captureNames: captureNames, isNative: !!isNative};
return regex;
}
/**
* Returns native `RegExp` flags used by a regex object.
* @private
* @param {RegExp} regex Regex to check.
* @returns {String} Native flags in use.
*/
function getNativeFlags(regex) {
//return nativ.exec.call(/\/([a-z]*)$/i, String(regex))[1];
return (regex.global ? "g" : "") +
(regex.ignoreCase ? "i" : "") +
(regex.multiline ? "m" : "") +
(regex.extended ? "x" : "") + // Proposed for ES6, included in AS3
(regex.sticky ? "y" : ""); // Proposed for ES6, included in Firefox 3+
}
/**
* Copies a regex object while preserving special properties for named capture and augmenting with
* `XRegExp.prototype` methods. The copy has a fresh `lastIndex` property (set to zero). Allows
* adding and removing flags while copying the regex.
* @private
* @param {RegExp} regex Regex to copy.
* @param {String} [addFlags] Flags to be added while copying the regex.
* @param {String} [removeFlags] Flags to be removed while copying the regex.
* @returns {RegExp} Copy of the provided regex, possibly with modified flags.
*/
function copy(regex, addFlags, removeFlags) {
if (!self.isRegExp(regex)) {
throw new TypeError("type RegExp expected");
}
var flags = nativ.replace.call(getNativeFlags(regex) + (addFlags || ""), duplicateFlags, "");
if (removeFlags) {
// Would need to escape `removeFlags` if this was public
flags = nativ.replace.call(flags, new RegExp("[" + removeFlags + "]+", "g"), "");
}
if (regex.xregexp && !regex.xregexp.isNative) {
// Compiling the current (rather than precompilation) source preserves the effects of nonnative source flags
regex = augment(self(regex.source, flags),
regex.xregexp.captureNames ? regex.xregexp.captureNames.slice(0) : null);
} else {
// Augment with `XRegExp.prototype` methods, but use native `RegExp` (avoid searching for special tokens)
regex = augment(new RegExp(regex.source, flags), null, true);
}
return regex;
}
/*
* Returns the last index at which a given value can be found in an array, or `-1` if it's not
* present. The array is searched backwards.
* @private
* @param {Array} array Array to search.
* @param {*} value Value to locate in the array.
* @returns {Number} Last zero-based index at which the item is found, or -1.
*/
function lastIndexOf(array, value) {
var i = array.length;
if (Array.prototype.lastIndexOf) {
return array.lastIndexOf(value); // Use the native method if available
}
while (i--) {
if (array[i] === value) {
return i;
}
}
return -1;
}
/**
* Determines whether an object is of the specified type.
* @private
* @param {*} value Object to check.
* @param {String} type Type to check for, in lowercase.
* @returns {Boolean} Whether the object matches the type.
*/
function isType(value, type) {
return Object.prototype.toString.call(value).toLowerCase() === "[object " + type + "]";
}
/**
* Prepares an options object from the given value.
* @private
* @param {String|Object} value Value to convert to an options object.
* @returns {Object} Options object.
*/
function prepareOptions(value) {
value = value || {};
if (value === "all" || value.all) {
value = {natives: true, extensibility: true};
} else if (isType(value, "string")) {
value = self.forEach(value, /[^\s,]+/, function (m) {
this[m] = true;
}, {});
}
return value;
}
/**
* Runs built-in/custom tokens in reverse insertion order, until a match is found.
* @private
* @param {String} pattern Original pattern from which an XRegExp object is being built.
* @param {Number} pos Position to search for tokens within `pattern`.
* @param {Number} scope Current regex scope.
* @param {Object} context Context object assigned to token handler functions.
* @returns {Object} Object with properties `output` (the substitution string returned by the
* successful token handler) and `match` (the token's match array), or null.
*/
function runTokens(pattern, pos, scope, context) {
var i = tokens.length,
result = null,
match,
t;
// Protect against constructing XRegExps within token handler and trigger functions
isInsideConstructor = true;
// Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws
try {
while (i--) { // Run in reverse order
t = tokens[i];
if ((t.scope === "all" || t.scope === scope) && (!t.trigger || t.trigger.call(context))) {
t.pattern.lastIndex = pos;
match = fixed.exec.call(t.pattern, pattern); // Fixed `exec` here allows use of named backreferences, etc.
if (match && match.index === pos) {
result = {
output: t.handler.call(context, match, scope),
match: match
};
break;
}
}
}
} catch (err) {
throw err;
} finally {
isInsideConstructor = false;
}
return result;
}
/**
* Enables or disables XRegExp syntax and flag extensibility.
* @private
* @param {Boolean} on `true` to enable; `false` to disable.
*/
function setExtensibility(on) {
self.addToken = addToken[on ? "on" : "off"];
features.extensibility = on;
}
/**
* Enables or disables native method overrides.
* @private
* @param {Boolean} on `true` to enable; `false` to disable.
*/
function setNatives(on) { if (on) { throw new Error("setNatives not supported in Firefox extension"); } }
/*--------------------------------------
* Constructor
*------------------------------------*/
/**
* Creates an extended regular expression object for matching text with a pattern. Differs from a
* native regular expression in that additional syntax and flags are supported. The returned object
* is in fact a native `RegExp` and works with all native methods.
* @class XRegExp
* @constructor
* @param {String|RegExp} pattern Regex pattern string, or an existing `RegExp` object to copy.
* @param {String} [flags] Any combination of flags:
* <li>`g` - global
* <li>`i` - ignore case
* <li>`m` - multiline anchors
* <li>`n` - explicit capture
* <li>`s` - dot matches all (aka singleline)
* <li>`x` - free-spacing and line comments (aka extended)
* <li>`y` - sticky (Firefox 3+ only)
* Flags cannot be provided when constructing one `RegExp` from another.
* @returns {RegExp} Extended regular expression object.
* @example
*
* // With named capture and flag x
* date = XRegExp('(?<year> [0-9]{4}) -? # year \n\
* (?<month> [0-9]{2}) -? # month \n\
* (?<day> [0-9]{2}) # day ', 'x');
*
* // Passing a regex object to copy it. The copy maintains special properties for named capture,
* // is augmented with `XRegExp.prototype` methods, and has a fresh `lastIndex` property (set to
* // zero). Native regexes are not recompiled using XRegExp syntax.
* XRegExp(/regex/);
*/
self = function (pattern, flags) {
if (self.isRegExp(pattern)) {
if (flags !== undef) {
throw new TypeError("can't supply flags when constructing one RegExp from another");
}
return copy(pattern);
}
// Tokens become part of the regex construction process, so protect against infinite recursion
// when an XRegExp is constructed within a token handler function
if (isInsideConstructor) {
throw new Error("can't call the XRegExp constructor within token definition functions");
}
var output = [],
scope = defaultScope,
tokenContext = {
hasNamedCapture: false,
captureNames: [],
hasFlag: function (flag) {
return flags.indexOf(flag) > -1;
}
},
pos = 0,
tokenResult,
match,
chr;
pattern = pattern === undef ? "" : String(pattern);
flags = flags === undef ? "" : String(flags);
if (nativ.match.call(flags, duplicateFlags)) { // Don't use test/exec because they would update lastIndex
throw new SyntaxError("invalid duplicate regular expression flag");
}
// Strip/apply leading mode modifier with any combination of flags except g or y: (?imnsx)
pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, function ($0, $1) {
if (nativ.test.call(/[gy]/, $1)) {
throw new SyntaxError("can't use flag g or y in mode modifier");
}
flags = nativ.replace.call(flags + $1, duplicateFlags, "");
return "";
});
self.forEach(flags, /[\s\S]/, function (m) {
if (registeredFlags.indexOf(m[0]) < 0) {
throw new SyntaxError("invalid regular expression flag " + m[0]);
}
});
while (pos < pattern.length) {
// Check for custom tokens at the current position
tokenResult = runTokens(pattern, pos, scope, tokenContext);
if (tokenResult) {
output.push(tokenResult.output);
pos += (tokenResult.match[0].length || 1);
} else {
// Check for native tokens (except character classes) at the current position
match = nativ.exec.call(nativeTokens[scope], pattern.slice(pos));
if (match) {
output.push(match[0]);
pos += match[0].length;
} else {
chr = pattern.charAt(pos);
if (chr === "[") {
scope = classScope;
} else if (chr === "]") {
scope = defaultScope;
}
// Advance position by one character
output.push(chr);
++pos;
}
}
}
return augment(new RegExp(output.join(""), nativ.replace.call(flags, /[^gimy]+/g, "")),
tokenContext.hasNamedCapture ? tokenContext.captureNames : null);
};
/*--------------------------------------
* Public methods/properties
*------------------------------------*/
// Installed and uninstalled states for `XRegExp.addToken`
addToken = {
on: function (regex, handler, options) {
options = options || {};
if (regex) {
tokens.push({
pattern: copy(regex, "g" + (hasNativeY ? "y" : "")),
handler: handler,
scope: options.scope || defaultScope,
trigger: options.trigger || null
});
}
// Providing `customFlags` with null `regex` and `handler` allows adding flags that do
// nothing, but don't throw an error
if (options.customFlags) {
registeredFlags = nativ.replace.call(registeredFlags + options.customFlags, duplicateFlags, "");
}
},
off: function () {
throw new Error("extensibility must be installed before using addToken");
}
};
/**
* Extends or changes XRegExp syntax and allows custom flags. This is used internally and can be
* used to create XRegExp addons. `XRegExp.install('extensibility')` must be run before calling
* this function, or an error is thrown. If more than one token can match the same string, the last
* added wins.
* @memberOf XRegExp
* @param {RegExp} regex Regex object that matches the new token.
* @param {Function} handler Function that returns a new pattern string (using native regex syntax)
* to replace the matched token within all future XRegExp regexes. Has access to persistent
* properties of the regex being built, through `this`. Invoked with two arguments:
* <li>The match array, with named backreference properties.
* <li>The regex scope where the match was found.
* @param {Object} [options] Options object with optional properties:
* <li>`scope` {String} Scopes where the token applies: 'default', 'class', or 'all'.
* <li>`trigger` {Function} Function that returns `true` when the token should be applied; e.g.,
* if a flag is set. If `false` is returned, the matched string can be matched by other tokens.
* Has access to persistent properties of the regex being built, through `this` (including
* function `this.hasFlag`).
* <li>`customFlags` {String} Nonnative flags used by the token's handler or trigger functions.
* Prevents XRegExp from throwing an invalid flag error when the specified flags are used.
* @example
*
* // Basic usage: Adds \a for ALERT character
* XRegExp.addToken(
* /\\a/,
* function () {return '\\x07';},
* {scope: 'all'}
* );
* XRegExp('\\a[\\a-\\n]+').test('\x07\n\x07'); // -> true
*/
self.addToken = addToken.off;
/**
* Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with
* the same pattern and flag combination, the cached copy is returned.
* @memberOf XRegExp
* @param {String} pattern Regex pattern string.
* @param {String} [flags] Any combination of XRegExp flags.
* @returns {RegExp} Cached XRegExp object.
* @example
*
* while (match = XRegExp.cache('.', 'gs').exec(str)) {
* // The regex is compiled once only
* }
*/
self.cache = function (pattern, flags) {
var key = pattern + "/" + (flags || "");
return cache[key] || (cache[key] = self(pattern, flags));
};
/**
* Escapes any regular expression metacharacters, for use when matching literal strings. The result
* can safely be used at any point within a regex that uses any flags.
* @memberOf XRegExp
* @param {String} str String to escape.
* @returns {String} String with regex metacharacters escaped.
* @example
*
* XRegExp.escape('Escaped? <.>');
* // -> 'Escaped\?\ <\.>'
*/
self.escape = function (str) {
return nativ.replace.call(str, /[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};
/**
* Executes a regex search in a specified string. Returns a match array or `null`. If the provided
* regex uses named capture, named backreference properties are included on the match array.
* Optional `pos` and `sticky` arguments specify the search start position, and whether the match
* must start at the specified position only. The `lastIndex` property of the provided regex is not
* used, but is updated for compatibility. Also fixes browser bugs compared to the native
* `RegExp.prototype.exec` and can be used reliably cross-browser.
* @memberOf XRegExp
* @param {String} str String to search.
* @param {RegExp} regex Regex to search with.
* @param {Number} [pos=0] Zero-based index at which to start the search.
* @param {Boolean|String} [sticky=false] Whether the match must start at the specified position
* only. The string `'sticky'` is accepted as an alternative to `true`.
* @returns {Array} Match array with named backreference properties, or null.
* @example
*
* // Basic use, with named backreference
* var match = XRegExp.exec('U+2620', XRegExp('U\\+(?<hex>[0-9A-F]{4})'));
* match.hex; // -> '2620'
*
* // With pos and sticky, in a loop
* var pos = 2, result = [], match;
* while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) {
* result.push(match[1]);
* pos = match.index + match[0].length;
* }
* // result -> ['2', '3', '4']
*/
self.exec = function (str, regex, pos, sticky) {
var r2 = copy(regex, "g" + (sticky && hasNativeY ? "y" : ""), (sticky === false ? "y" : "")),
match;
r2.lastIndex = pos = pos || 0;
match = fixed.exec.call(r2, str); // Fixed `exec` required for `lastIndex` fix, etc.
if (sticky && match && match.index !== pos) {
match = null;
}
if (regex.global) {
regex.lastIndex = match ? r2.lastIndex : 0;
}
return match;
};
/**
* Executes a provided function once per regex match.
* @memberOf XRegExp
* @param {String} str String to search.
* @param {RegExp} regex Regex to search with.
* @param {Function} callback Function to execute for each match. Invoked with four arguments:
* <li>The match array, with named backreference properties.
* <li>The zero-based match index.
* <li>The string being traversed.
* <li>The regex object being used to traverse the string.
* @param {*} [context] Object to use as `this` when executing `callback`.
* @returns {*} Provided `context` object.
* @example
*
* // Extracts every other digit from a string
* XRegExp.forEach('1a2345', /\d/, function (match, i) {
* if (i % 2) this.push(+match[0]);
* }, []);
* // -> [2, 4]
*/
self.forEach = function (str, regex, callback, context) {
var pos = 0,
i = -1,
match;
while ((match = self.exec(str, regex, pos))) {
callback.call(context, match, ++i, str, regex);
pos = match.index + (match[0].length || 1);
}
return context;
};
/**
* Copies a regex object and adds flag `g`. The copy maintains special properties for named
* capture, is augmented with `XRegExp.prototype` methods, and has a fresh `lastIndex` property
* (set to zero). Native regexes are not recompiled using XRegExp syntax.
* @memberOf XRegExp
* @param {RegExp} regex Regex to globalize.
* @returns {RegExp} Copy of the provided regex with flag `g` added.
* @example
*
* var globalCopy = XRegExp.globalize(/regex/);
* globalCopy.global; // -> true
*/
self.globalize = function (regex) {
return copy(regex, "g");
};
/**
* Installs optional features according to the specified options.
* @memberOf XRegExp
* @param {Object|String} options Options object or string.
* @example
*
* // With an options object
* XRegExp.install({
* // Overrides native regex methods with fixed/extended versions that support named
* // backreferences and fix numerous cross-browser bugs
* natives: true,
*
* // Enables extensibility of XRegExp syntax and flags
* extensibility: true
* });
*
* // With an options string
* XRegExp.install('natives extensibility');
*
* // Using a shortcut to install all optional features
* XRegExp.install('all');
*/
self.install = function (options) {
options = prepareOptions(options);
if (!features.natives && options.natives) {
setNatives(true);
}
if (!features.extensibility && options.extensibility) {
setExtensibility(true);
}
};
/**
* Checks whether an individual optional feature is installed.
* @memberOf XRegExp
* @param {String} feature Name of the feature to check. One of:
* <li>`natives`
* <li>`extensibility`
* @returns {Boolean} Whether the feature is installed.
* @example
*
* XRegExp.isInstalled('natives');
*/
self.isInstalled = function (feature) {
return !!(features[feature]);
};
/**
* Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes
* created in another frame, when `instanceof` and `constructor` checks would fail.
* @memberOf XRegExp
* @param {*} value Object to check.
* @returns {Boolean} Whether the object is a `RegExp` object.
* @example
*
* XRegExp.isRegExp('string'); // -> false
* XRegExp.isRegExp(/regex/i); // -> true
* XRegExp.isRegExp(RegExp('^', 'm')); // -> true
* XRegExp.isRegExp(XRegExp('(?s).')); // -> true
*/
self.isRegExp = function (value) {
return isType(value, "regexp");
};
/**
* Retrieves the matches from searching a string using a chain of regexes that successively search
* within previous matches. The provided `chain` array can contain regexes and objects with `regex`
* and `backref` properties. When a backreference is specified, the named or numbered backreference
* is passed forward to the next regex or returned.
* @memberOf XRegExp
* @param {String} str String to search.
* @param {Array} chain Regexes that each search for matches within preceding results.
* @returns {Array} Matches by the last regex in the chain, or an empty array.
* @example
*
* // Basic usage; matches numbers within <b> tags
* XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [
* XRegExp('(?is)<b>.*?</b>'),
* /\d+/
* ]);
* // -> ['2', '4', '56']
*
* // Passing forward and returning specific backreferences
* html = '<a href="http://xregexp.com/api/">XRegExp</a>\
* <a href="http://www.google.com/">Google</a>';
* XRegExp.matchChain(html, [
* {regex: /<a href="([^"]+)">/i, backref: 1},
* {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'}
* ]);
* // -> ['xregexp.com', 'www.google.com']
*/
self.matchChain = function (str, chain) {
return (function recurseChain(values, level) {
var item = chain[level].regex ? chain[level] : {regex: chain[level]},
matches = [],
addMatch = function (match) {
matches.push(item.backref ? (match[item.backref] || "") : match[0]);
},
i;
for (i = 0; i < values.length; ++i) {
self.forEach(values[i], item.regex, addMatch);
}
return ((level === chain.length - 1) || !matches.length) ?
matches :
recurseChain(matches, level + 1);
}([str], 0));
};
/**
* Returns a new string with one or all matches of a pattern replaced. The pattern can be a string
* or regex, and the replacement can be a string or a function to be called for each match. To
* perform a global search and replace, use the optional `scope` argument or include flag `g` if
* using a regex. Replacement strings can use `${n}` for named and numbered backreferences.
* Replacement functions can use named backreferences via `arguments[0].name`. Also fixes browser
* bugs compared to the native `String.prototype.replace` and can be used reliably cross-browser.
* @memberOf XRegExp
* @param {String} str String to search.
* @param {RegExp|String} search Search pattern to be replaced.
* @param {String|Function} replacement Replacement string or a function invoked to create it.
* Replacement strings can include special replacement syntax:
* <li>$$ - Inserts a literal '$'.
* <li>$&, $0 - Inserts the matched substring.
* <li>$` - Inserts the string that precedes the matched substring (left context).
* <li>$' - Inserts the string that follows the matched substring (right context).
* <li>$n, $nn - Where n/nn are digits referencing an existent capturing group, inserts
* backreference n/nn.
* <li>${n} - Where n is a name or any number of digits that reference an existent capturing
* group, inserts backreference n.
* Replacement functions are invoked with three or more arguments:
* <li>The matched substring (corresponds to $& above). Named backreferences are accessible as
* properties of this first argument.
* <li>0..n arguments, one for each backreference (corresponding to $1, $2, etc. above).
* <li>The zero-based index of the match within the total search string.
* <li>The total string being searched.
* @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not
* explicitly specified and using a regex with flag `g`, `scope` is 'all'.
* @returns {String} New string with one or all matches replaced.
* @example
*
* // Regex search, using named backreferences in replacement string
* var name = XRegExp('(?<first>\\w+) (?<last>\\w+)');
* XRegExp.replace('John Smith', name, '${last}, ${first}');
* // -> 'Smith, John'
*
* // Regex search, using named backreferences in replacement function
* XRegExp.replace('John Smith', name, function (match) {
* return match.last + ', ' + match.first;
* });
* // -> 'Smith, John'
*
* // Global string search/replacement
* XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all');
* // -> 'XRegExp builds XRegExps'
*/
self.replace = function (str, search, replacement, scope) {
var isRegex = self.isRegExp(search),
search2 = search,
result;
if (isRegex) {
if (scope === undef && search.global) {
scope = "all"; // Follow flag g when `scope` isn't explicit
}
// Note that since a copy is used, `search`'s `lastIndex` isn't updated *during* replacement iterations
search2 = copy(search, scope === "all" ? "g" : "", scope === "all" ? "" : "g");
} else if (scope === "all") {
search2 = new RegExp(self.escape(String(search)), "g");
}
result = fixed.replace.call(String(str), search2, replacement); // Fixed `replace` required for named backreferences, etc.
if (isRegex && search.global) {
search.lastIndex = 0; // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)
}
return result;
};
/**
* Splits a string into an array of strings using a regex or string separator. Matches of the
* separator are not included in the result array. However, if `separator` is a regex that contains
* capturing groups, backreferences are spliced into the result each time `separator` is matched.
* Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
* cross-browser.
* @memberOf XRegExp
* @param {String} str String to split.
* @param {RegExp|String} separator Regex or string to use for separating the string.
* @param {Number} [limit] Maximum number of items to include in the result array.
* @returns {Array} Array of substrings.
* @example
*
* // Basic use
* XRegExp.split('a b c', ' ');
* // -> ['a', 'b', 'c']
*
* // With limit
* XRegExp.split('a b c', ' ', 2);
* // -> ['a', 'b']
*
* // Backreferences in result array
* XRegExp.split('..word1..', /([a-z]+)(\d+)/i);
* // -> ['..', 'word', '1', '..']
*/
self.split = function (str, separator, limit) {
return fixed.split.call(str, separator, limit);
};
/**
* Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and
* `sticky` arguments specify the search start position, and whether the match must start at the
* specified position only. The `lastIndex` property of the provided regex is not used, but is
* updated for compatibility. Also fixes browser bugs compared to the native
* `RegExp.prototype.test` and can be used reliably cross-browser.
* @memberOf XRegExp
* @param {String} str String to search.
* @param {RegExp} regex Regex to search with.
* @param {Number} [pos=0] Zero-based index at which to start the search.
* @param {Boolean|String} [sticky=false] Whether the match must start at the specified position
* only. The string `'sticky'` is accepted as an alternative to `true`.
* @returns {Boolean} Whether the regex matched the provided value.
* @example
*
* // Basic use
* XRegExp.test('abc', /c/); // -> true
*
* // With pos and sticky
* XRegExp.test('abc', /c/, 0, 'sticky'); // -> false
*/
self.test = function (str, regex, pos, sticky) {
// Do this the easy way :-)
return !!self.exec(str, regex, pos, sticky);
};
/**
* Uninstalls optional features according to the specified options.
* @memberOf XRegExp
* @param {Object|String} options Options object or string.
* @example
*
* // With an options object
* XRegExp.uninstall({
* // Restores native regex methods
* natives: true,
*
* // Disables additional syntax and flag extensions
* extensibility: true
* });
*
* // With an options string
* XRegExp.uninstall('natives extensibility');
*
* // Using a shortcut to uninstall all optional features
* XRegExp.uninstall('all');
*/
self.uninstall = function (options) {
options = prepareOptions(options);
if (features.natives && options.natives) {
setNatives(false);
}
if (features.extensibility && options.extensibility) {
setExtensibility(false);
}
};
/**
* Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as
* regex objects or strings. Metacharacters are escaped in patterns provided as strings.
* Backreferences in provided regex objects are automatically renumbered to work correctly. Native
* flags used by provided regexes are ignored in favor of the `flags` argument.
* @memberOf XRegExp
* @param {Array} patterns Regexes and strings to combine.
* @param {String} [flags] Any combination of XRegExp flags.
* @returns {RegExp} Union of the provided regexes and strings.
* @example
*
* XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i');
* // -> /a\+b\*c|(dogs)\1|(cats)\2/i
*
* XRegExp.union([XRegExp('(?<pet>dogs)\\k<pet>'), XRegExp('(?<pet>cats)\\k<pet>')]);
* // -> XRegExp('(?<pet>dogs)\\k<pet>|(?<pet>cats)\\k<pet>')
*/
self.union = function (patterns, flags) {
var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,
numCaptures = 0,
numPriorCaptures,
captureNames,
rewrite = function (match, paren, backref) {
var name = captureNames[numCaptures - numPriorCaptures];
if (paren) { // Capturing group
++numCaptures;
if (name) { // If the current capture has a name
return "(?<" + name + ">";
}
} else if (backref) { // Backreference
return "\\" + (+backref + numPriorCaptures);
}
return match;
},
output = [],
pattern,
i;
if (!(isType(patterns, "array") && patterns.length)) {
throw new TypeError("patterns must be a nonempty array");
}
for (i = 0; i < patterns.length; ++i) {
pattern = patterns[i];
if (self.isRegExp(pattern)) {
numPriorCaptures = numCaptures;
captureNames = (pattern.xregexp && pattern.xregexp.captureNames) || [];
// Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns
// are independently valid; helps keep this simple. Named captures are put back
output.push(self(pattern.source).source.replace(parts, rewrite));
} else {
output.push(self.escape(pattern));
}
}
return self(output.join("|"), flags);
};
/**
* The XRegExp version number.
* @static
* @memberOf XRegExp
* @type String
*/
self.version = "2.0.0";
/*--------------------------------------
* Fixed/extended native methods
*------------------------------------*/
/**
* Adds named capture support (with backreferences returned as `result.name`), and fixes browser
* bugs in the native `RegExp.prototype.exec`. Calling `XRegExp.install('natives')` uses this to
* override the native method. Use via `XRegExp.exec` without overriding natives.
* @private
* @param {String} str String to search.
* @returns {Array} Match array with named backreference properties, or null.
*/
fixed.exec = function (str) {
var match, name, r2, origLastIndex, i;
if (!this.global) {
origLastIndex = this.lastIndex;
}
match = nativ.exec.apply(this, arguments);
if (match) {
// Fix browsers whose `exec` methods don't consistently return `undefined` for
// nonparticipating capturing groups
if (!compliantExecNpcg && match.length > 1 && lastIndexOf(match, "") > -1) {
r2 = new RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", ""));
// Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
// matching due to characters outside the match
nativ.replace.call(String(str).slice(match.index), r2, function () {
var i;
for (i = 1; i < arguments.length - 2; ++i) {
if (arguments[i] === undef) {
match[i] = undef;
}
}
});
}
// Attach named capture properties
if (this.xregexp && this.xregexp.captureNames) {
for (i = 1; i < match.length; ++i) {
name = this.xregexp.captureNames[i - 1];
if (name) {
match[name] = match[i];
}
}
}
// Fix browsers that increment `lastIndex` after zero-length matches
if (this.global && !match[0].length && (this.lastIndex > match.index)) {
this.lastIndex = match.index;
}
}
if (!this.global) {
this.lastIndex = origLastIndex; // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)
}
return match;
};
/**
* Fixes browser bugs in the native `RegExp.prototype.test`. Calling `XRegExp.install('natives')`
* uses this to override the native method.
* @private
* @param {String} str String to search.
* @returns {Boolean} Whether the regex matched the provided value.
*/
fixed.test = function (str) {
// Do this the easy way :-)
return !!fixed.exec.call(this, str);
};
/**
* Adds named capture support (with backreferences returned as `result.name`), and fixes browser
* bugs in the native `String.prototype.match`. Calling `XRegExp.install('natives')` uses this to
* override the native method.
* @private
* @param {RegExp} regex Regex to search with.
* @returns {Array} If `regex` uses flag g, an array of match strings or null. Without flag g, the
* result of calling `regex.exec(this)`.
*/
fixed.match = function (regex) {
if (!self.isRegExp(regex)) {
regex = new RegExp(regex); // Use native `RegExp`
} else if (regex.global) {
var result = nativ.match.apply(this, arguments);
regex.lastIndex = 0; // Fixes IE bug
return result;
}
return fixed.exec.call(regex, this);
};
/**
* Adds support for `${n}` tokens for named and numbered backreferences in replacement text, and
* provides named backreferences to replacement functions as `arguments[0].name`. Also fixes
* browser bugs in replacement text syntax when performing a replacement using a nonregex search
* value, and the value of a replacement regex's `lastIndex` property during replacement iterations
* and upon completion. Note that this doesn't support SpiderMonkey's proprietary third (`flags`)
* argument. Calling `XRegExp.install('natives')` uses this to override the native method. Use via
* `XRegExp.replace` without overriding natives.
* @private
* @param {RegExp|String} search Search pattern to be replaced.
* @param {String|Function} replacement Replacement string or a function invoked to create it.
* @returns {String} New string with one or all matches replaced.
*/
fixed.replace = function (search, replacement) {
var isRegex = self.isRegExp(search), captureNames, result, str, origLastIndex;
if (isRegex) {
if (search.xregexp) {
captureNames = search.xregexp.captureNames;
}
if (!search.global) {
origLastIndex = search.lastIndex;
}
} else {
search += "";
}
if (isType(replacement, "function")) {
result = nativ.replace.call(String(this), search, function () {
var args = arguments, i;
if (captureNames) {
// Change the `arguments[0]` string primitive to a `String` object that can store properties
args[0] = new String(args[0]);
// Store named backreferences on the first argument
for (i = 0; i < captureNames.length; ++i) {
if (captureNames[i]) {
args[0][captureNames[i]] = args[i + 1];
}
}
}
// Update `lastIndex` before calling `replacement`.
// Fixes IE, Chrome, Firefox, Safari bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1)
if (isRegex && search.global) {
search.lastIndex = args[args.length - 2] + args[0].length;
}
return replacement.apply(null, args);
});
} else {
str = String(this); // Ensure `args[args.length - 1]` will be a string when given nonstring `this`
result = nativ.replace.call(str, search, function () {
var args = arguments; // Keep this function's `arguments` available through closure
return nativ.replace.call(String(replacement), replacementToken, function ($0, $1, $2) {
var n;
// Named or numbered backreference with curly brackets
if ($1) {
/* XRegExp behavior for `${n}`:
* 1. Backreference to numbered capture, where `n` is 1+ digits. `0`, `00`, etc. is the entire match.
* 2. Backreference to named capture `n`, if it exists and is not a number overridden by numbered capture.
* 3. Otherwise, it's an error.
*/
n = +$1; // Type-convert; drop leading zeros
if (n <= args.length - 3) {
return args[n] || "";
}
n = captureNames ? lastIndexOf(captureNames, $1) : -1;
if (n < 0) {
throw new SyntaxError("backreference to undefined group " + $0);
}
return args[n + 1] || "";
}
// Else, special variable or numbered backreference (without curly brackets)
if ($2 === "$") return "$";
if ($2 === "&" || +$2 === 0) return args[0]; // $&, $0 (not followed by 1-9), $00
if ($2 === "`") return args[args.length - 1].slice(0, args[args.length - 2]);
if ($2 === "'") return args[args.length - 1].slice(args[args.length - 2] + args[0].length);
// Else, numbered backreference (without curly brackets)
$2 = +$2; // Type-convert; drop leading zero
/* XRegExp behavior:
* - Backreferences without curly brackets end after 1 or 2 digits. Use `${..}` for more digits.
* - `$1` is an error if there are no capturing groups.
* - `$10` is an error if there are less than 10 capturing groups. Use `${1}0` instead.
* - `$01` is equivalent to `$1` if a capturing group exists, otherwise it's an error.
* - `$0` (not followed by 1-9), `$00`, and `$&` are the entire match.
* Native behavior, for comparison:
* - Backreferences end after 1 or 2 digits. Cannot use backreference to capturing group 100+.
* - `$1` is a literal `$1` if there are no capturing groups.
* - `$10` is `$1` followed by a literal `0` if there are less than 10 capturing groups.
* - `$01` is equivalent to `$1` if a capturing group exists, otherwise it's a literal `$01`.
* - `$0` is a literal `$0`. `$&` is the entire match.
*/
if (!isNaN($2)) {
if ($2 > args.length - 3) {
throw new SyntaxError("backreference to undefined group " + $0);
}
return args[$2] || "";
}
throw new SyntaxError("invalid token " + $0);
});
});
}
if (isRegex) {
if (search.global) {
search.lastIndex = 0; // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)
} else {
search.lastIndex = origLastIndex; // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)
}
}
return result;
};
/**
* Fixes browser bugs in the native `String.prototype.split`. Calling `XRegExp.install('natives')`
* uses this to override the native method. Use via `XRegExp.split` without overriding natives.
* @private
* @param {RegExp|String} separator Regex or string to use for separating the string.
* @param {Number} [limit] Maximum number of items to include in the result array.
* @returns {Array} Array of substrings.
*/
fixed.split = function (separator, limit) {
if (!self.isRegExp(separator)) {
return nativ.split.apply(this, arguments); // use faster native method
}
var str = String(this),
origLastIndex = separator.lastIndex,
output = [],
lastLastIndex = 0,
lastLength;
/* Values for `limit`, per the spec:
* If undefined: pow(2,32) - 1
* If 0, Infinity, or NaN: 0
* If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32);
* If negative number: pow(2,32) - floor(abs(limit))
* If other: Type-convert, then use the above rules
*/
limit = (limit === undef ? -1 : limit) >>> 0;
self.forEach(str, separator, function (match) {
if ((match.index + match[0].length) > lastLastIndex) { // != `if (match[0].length)`
output.push(str.slice(lastLastIndex, match.index));
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output, match.slice(1));
}
lastLength = match[0].length;
lastLastIndex = match.index + lastLength;
}
});
if (lastLastIndex === str.length) {
if (!nativ.test.call(separator, "") || lastLength) {
output.push("");
}
} else {
output.push(str.slice(lastLastIndex));
}
separator.lastIndex = origLastIndex;
return output.length > limit ? output.slice(0, limit) : output;
};
/*--------------------------------------
* Built-in tokens
*------------------------------------*/
// Shortcut
add = addToken.on;
/* Letter identity escapes that natively match literal characters: \p, \P, etc.
* Should be SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-
* browser consistency and to reserve their syntax, but lets them be superseded by XRegExp addons.
*/
add(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4})|x(?![\dA-Fa-f]{2}))/,
function (match, scope) {
// \B is allowed in default scope only
if (match[1] === "B" && scope === defaultScope) {
return match[0];
}
throw new SyntaxError("invalid escape " + match[0]);
},
{scope: "all"});
/* Empty character class: [] or [^]
* Fixes a critical cross-browser syntax inconsistency. Unless this is standardized (per the spec),
* regex syntax can't be accurately parsed because character class endings can't be determined.
*/
add(/\[(\^?)]/,
function (match) {
// For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S].
// (?!) should work like \b\B, but is unreliable in Firefox
return match[1] ? "[\\s\\S]" : "\\b\\B";
});
/* Comment pattern: (?# )
* Inline comments are an alternative to the line comments allowed in free-spacing mode (flag x).
*/
add(/(?:\(\?#[^)]*\))+/,
function (match) {
// Keep tokens separated unless the following token is a quantifier
return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)";
});
/* Named backreference: \k<name>
* Backreference names can use the characters A-Z, a-z, 0-9, _, and $ only.
*/
add(/\\k<([\w$]+)>/,
function (match) {
var index = isNaN(match[1]) ? (lastIndexOf(this.captureNames, match[1]) + 1) : +match[1],
endIndex = match.index + match[0].length;
if (!index || index > this.captureNames.length) {
throw new SyntaxError("backreference to undefined group " + match[0]);
}
// Keep backreferences separate from subsequent literal numbers
return "\\" + index + (
endIndex === match.input.length || isNaN(match.input.charAt(endIndex)) ? "" : "(?:)"
);
});
/* Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only.
*/
add(/(?:\s+|#.*)+/,
function (match) {
// Keep tokens separated unless the following token is a quantifier
return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)";
},
{
trigger: function () {
return this.hasFlag("x");
},
customFlags: "x"
});
/* Dot, in dotall mode (aka singleline mode, flag s) only.
*/
add(/\./,
function () {
return "[\\s\\S]";
},
{
trigger: function () {
return this.hasFlag("s");
},
customFlags: "s"
});
/* Named capturing group; match the opening delimiter only: (?<name>
* Capture names can use the characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers.
* Supports Python-style (?P<name> as an alternate syntax to avoid issues in recent Opera (which
* natively supports the Python-style syntax). Otherwise, XRegExp might treat numbered
* backreferences to Python-style named capture as octals.
*/
add(/\(\?P?<([\w$]+)>/,
function (match) {
if (!isNaN(match[1])) {
// Avoid incorrect lookups, since named backreferences are added to match arrays
throw new SyntaxError("can't use integer as capture name " + match[0]);
}
this.captureNames.push(match[1]);
this.hasNamedCapture = true;
return "(";
});
/* Numbered backreference or octal, plus any following digits: \0, \11, etc.
* Octals except \0 not followed by 0-9 and backreferences to unopened capture groups throw an
* error. Other matches are returned unaltered. IE <= 8 doesn't support backreferences greater than
* \99 in regex syntax.
*/
add(/\\(\d+)/,
function (match, scope) {
if (!(scope === defaultScope && /^[1-9]/.test(match[1]) && +match[1] <= this.captureNames.length) &&
match[1] !== "0") {
throw new SyntaxError("can't use octal escape or backreference to undefined group " + match[0]);
}
return match[0];
},
{scope: "all"});
/* Capturing group; match the opening parenthesis only.
* Required for support of named capturing groups. Also adds explicit capture mode (flag n).
*/
add(/\((?!\?)/,
function () {
if (this.hasFlag("n")) {
return "(?:";
}
this.captureNames.push(null);
return "(";
},
{customFlags: "n"});
/*--------------------------------------
* Expose XRegExp
*------------------------------------*/
// For CommonJS enviroments
if (typeof exports !== "undefined") {
exports.XRegExp = self;
}
return self;
}());
/***** unicode-base.js *****/
/*!
* XRegExp Unicode Base v1.0.0
* (c) 2008-2012 Steven Levithan <http://xregexp.com/>
* MIT License
* Uses Unicode 6.1 <http://unicode.org/>
*/
/**
* Adds support for the `\p{L}` or `\p{Letter}` Unicode category. Addon packages for other Unicode
* categories, scripts, blocks, and properties are available separately. All Unicode tokens can be
* inverted using `\P{..}` or `\p{^..}`. Token names are case insensitive, and any spaces, hyphens,
* and underscores are ignored.
* @requires XRegExp
*/
(function (XRegExp) {
"use strict";
var unicode = {};
/*--------------------------------------
* Private helper functions
*------------------------------------*/
// Generates a standardized token name (lowercase, with hyphens, spaces, and underscores removed)
function slug(name) {
return name.replace(/[- _]+/g, "").toLowerCase();
}
// Expands a list of Unicode code points and ranges to be usable in a regex character class
function expand(str) {
return str.replace(/\w{4}/g, "\\u$&");
}
// Adds leading zeros if shorter than four characters
function pad4(str) {
while (str.length < 4) {
str = "0" + str;
}
return str;
}
// Converts a hexadecimal number to decimal
function dec(hex) {
return parseInt(hex, 16);
}
// Converts a decimal number to hexadecimal
function hex(dec) {
return parseInt(dec, 10).toString(16);
}
// Inverts a list of Unicode code points and ranges
function invert(range) {
var output = [],
lastEnd = -1,
start;
XRegExp.forEach(range, /\\u(\w{4})(?:-\\u(\w{4}))?/, function (m) {
start = dec(m[1]);
if (start > (lastEnd + 1)) {
output.push("\\u" + pad4(hex(lastEnd + 1)));
if (start > (lastEnd + 2)) {
output.push("-\\u" + pad4(hex(start - 1)));
}
}
lastEnd = dec(m[2] || m[1]);
});
if (lastEnd < 0xFFFF) {
output.push("\\u" + pad4(hex(lastEnd + 1)));
if (lastEnd < 0xFFFE) {
output.push("-\\uFFFF");
}
}
return output.join("");
}
// Generates an inverted token on first use
function cacheInversion(item) {
return unicode["^" + item] || (unicode["^" + item] = invert(unicode[item]));
}
/*--------------------------------------
* Core functionality
*------------------------------------*/
XRegExp.install("extensibility");
/**
* Adds to the list of Unicode properties that XRegExp regexes can match via \p{..} or \P{..}.
* @memberOf XRegExp
* @param {Object} pack Named sets of Unicode code points and ranges.
* @param {Object} [aliases] Aliases for the primary token names.
* @example
*
* XRegExp.addUnicodePackage({
* XDigit: '0030-00390041-00460061-0066' // 0-9A-Fa-f
* }, {
* XDigit: 'Hexadecimal'
* });
*/
XRegExp.addUnicodePackage = function (pack, aliases) {
var p;
if (!XRegExp.isInstalled("extensibility")) {
throw new Error("extensibility must be installed before adding Unicode packages");
}
if (pack) {
for (p in pack) {
if (pack.hasOwnProperty(p)) {
unicode[slug(p)] = expand(pack[p]);
}
}
}
if (aliases) {
for (p in aliases) {
if (aliases.hasOwnProperty(p)) {
unicode[slug(aliases[p])] = unicode[slug(p)];
}
}
}
};
/* Adds data for the Unicode `Letter` category. Addon packages include other categories, scripts,
* blocks, and properties.
*/
XRegExp.addUnicodePackage({
L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705D0-05EA05F0-05F20620-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280840-085808A008A2-08AC0904-0939093D09500958-09610971-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDAAE0-AAEAAAF2-AAF4AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC"
}, {
L: "Letter"
});
/* Adds Unicode property syntax to XRegExp: \p{..}, \P{..}, \p{^..}
*/
XRegExp.addToken(
/\\([pP]){(\^?)([^}]*)}/,
function (match, scope) {
var inv = (match[1] === "P" || match[2]) ? "^" : "",
item = slug(match[3]);
// The double negative \P{^..} is invalid
if (match[1] === "P" && match[2]) {
throw new SyntaxError("invalid double negation \\P{^");
}
if (!unicode.hasOwnProperty(item)) {
throw new SyntaxError("invalid or unknown Unicode property " + match[0]);
}
return scope === "class" ?
(inv ? cacheInversion(item) : unicode[item]) :
"[" + inv + unicode[item] + "]";
},
{scope: "all"}
);
}(XRegExp));
/***** unicode-categories.js *****/
/*!
* XRegExp Unicode Categories v1.2.0
* (c) 2010-2012 Steven Levithan <http://xregexp.com/>
* MIT License
* Uses Unicode 6.1 <http://unicode.org/>
*/
/**
* Adds support for all Unicode categories (aka properties) E.g., `\p{Lu}` or
* `\p{Uppercase Letter}`. Token names are case insensitive, and any spaces, hyphens, and
* underscores are ignored.
* @requires XRegExp, XRegExp Unicode Base
*/
(function (XRegExp) {
"use strict";
if (!XRegExp.addUnicodePackage) {
throw new ReferenceError("Unicode Base must be loaded before Unicode Categories");
}
XRegExp.install("extensibility");
XRegExp.addUnicodePackage({
//L: "", // Included in the Unicode Base addon
Ll: "0061-007A00B500DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1D2B1D6B-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7B2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7FAFB00-FB06FB13-FB17FF41-FF5A",
Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A",
Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",
Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D6A1D781D9B-1DBF2071207F2090-209C2C7C2C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A7F8A7F9A9CFAA70AADDAAF3AAF4FF70FF9EFF9F",
Lo: "00AA00BA01BB01C0-01C3029405D0-05EA05F0-05F20620-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150840-085808A008A2-08AC0904-0939093D09500958-09610972-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA10FD-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF11CF51CF62135-21382D30-2D672D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCAAE0-AAEAAAF2AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0903093A-093C093E-094F0951-0957096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F8D-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135D-135F1712-17141732-1734175217531772177317B4-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAD1BE6-1BF31C24-1C371CD0-1CD21CD4-1CE81CED1CF2-1CF41DC0-1DE61DFC-1DFF20D0-20F02CEF-2CF12D7F2DE0-2DFF302A-302F3099309AA66F-A672A674-A67DA69FA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAEB-AAEFAAF5AAF6ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",
Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0902093A093C0941-0948094D0951-095709620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F8D-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135D-135F1712-17141732-1734175217531772177317B417B517B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91BAB1BE61BE81BE91BED1BEF-1BF11C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF20D0-20DC20E120E5-20F02CEF-2CF12D7F2DE0-2DFF302A-302D3099309AA66FA674-A67DA69FA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAECAAEDAAF6ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",
Mc: "0903093B093E-09400949-094C094E094F0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1BAC1BAD1BE71BEA-1BEC1BEE1BF21BF31C24-1C2B1C341C351CE11CF21CF3302E302FA823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BAAEBAAEEAAEFAAF5ABE3ABE4ABE6ABE7ABE9ABEAABEC",
Me: "0488048920DD-20E020E2-20E4A670-A672",
N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0B72-0B770BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",
Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19D91A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",
Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",
No: "00B200B300B900BC-00BE09F4-09F90B72-0B770BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F919DA20702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA830-A835",
P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100A700AB00B600B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F3A-0F3D0F850FD0-0FD40FD90FDA104A-104F10FB1360-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2D702E00-2E2E2E30-2E3B3001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",
Pd: "002D058A05BE140018062010-20152E172E1A2E3A2E3B301C303030A0FE31FE32FE58FE63FF0D",
Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",
Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",
Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",
Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21",
Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F",
Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100A700B600B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F850FD0-0FD40FD90FDA104A-104F10FB1360-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2D702E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E30-2E393001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",
S: "0024002B003C-003E005E0060007C007E00A2-00A600A800A900AC00AE-00B100B400B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F60482058F0606-0608060B060E060F06DE06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0D790E3F0F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-139917DB194019DE-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B9210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23F32400-24262440-244A249C-24E92500-26FF2701-27672794-27C427C7-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FBB2-FBC1FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",
Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C21182140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",
Sc: "002400A2-00A5058F060B09F209F309FB0AF10BF90E3F17DB20A0-20B9A838FDFCFE69FF04FFE0FFE1FFE5FFE6",
Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFBB2-FBC1FF3EFF40FFE3",
So: "00A600A900AE00B00482060E060F06DE06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0D790F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-1399194019DE-19FF1B61-1B6A1B74-1B7C210021012103-210621082109211421162117211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23F32400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26FF2701-27672794-27BF2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",
Z: "002000A01680180E2000-200A20282029202F205F3000",
Zs: "002000A01680180E2000-200A202F205F3000",
Zl: "2028",
Zp: "2029",
C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-0605061C061D06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",
Cc: "0000-001F007F-009F",
Cf: "00AD0600-060406DD070F200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",
Co: "E000-F8FF",
Cs: "D800-DFFF",
Cn: "03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-05FF0605061C061D070E074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"
}, {
//L: "Letter", // Included in the Unicode Base addon
Ll: "Lowercase_Letter",
Lu: "Uppercase_Letter",
Lt: "Titlecase_Letter",
Lm: "Modifier_Letter",
Lo: "Other_Letter",
M: "Mark",
Mn: "Nonspacing_Mark",
Mc: "Spacing_Mark",
Me: "Enclosing_Mark",
N: "Number",
Nd: "Decimal_Number",
Nl: "Letter_Number",
No: "Other_Number",
P: "Punctuation",
Pd: "Dash_Punctuation",
Ps: "Open_Punctuation",
Pe: "Close_Punctuation",
Pi: "Initial_Punctuation",
Pf: "Final_Punctuation",
Pc: "Connector_Punctuation",
Po: "Other_Punctuation",
S: "Symbol",
Sm: "Math_Symbol",
Sc: "Currency_Symbol",
Sk: "Modifier_Symbol",
So: "Other_Symbol",
Z: "Separator",
Zs: "Space_Separator",
Zl: "Line_Separator",
Zp: "Paragraph_Separator",
C: "Other",
Cc: "Control",
Cf: "Format",
Co: "Private_Use",
Cs: "Surrogate",
Cn: "Unassigned"
});
}(XRegExp));
/***** unicode-scripts.js *****/
/*!
* XRegExp Unicode Scripts v1.2.0
* (c) 2010-2012 Steven Levithan <http://xregexp.com/>
* MIT License
* Uses Unicode 6.1 <http://unicode.org/>
*/
/**
* Adds support for all Unicode scripts in the Basic Multilingual Plane (U+0000-U+FFFF).
* E.g., `\p{Latin}`. Token names are case insensitive, and any spaces, hyphens, and underscores
* are ignored.
* @requires XRegExp, XRegExp Unicode Base
*/
(function (XRegExp) {
"use strict";
if (!XRegExp.addUnicodePackage) {
throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");
}
XRegExp.install("extensibility");
XRegExp.addUnicodePackage({
Arabic: "0600-06040606-060B060D-061A061E0620-063F0641-064A0656-065E066A-066F0671-06DC06DE-06FF0750-077F08A008A2-08AC08E4-08FEFB50-FBC1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFCFE70-FE74FE76-FEFC",
Armenian: "0531-05560559-055F0561-0587058A058FFB13-FB17",
Balinese: "1B00-1B4B1B50-1B7C",
Bamum: "A6A0-A6F7",
Batak: "1BC0-1BF31BFC-1BFF",
Bengali: "0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB",
Bopomofo: "02EA02EB3105-312D31A0-31BA",
Braille: "2800-28FF",
Buginese: "1A00-1A1B1A1E1A1F",
Buhid: "1740-1753",
Canadian_Aboriginal: "1400-167F18B0-18F5",
Cham: "AA00-AA36AA40-AA4DAA50-AA59AA5C-AA5F",
Cherokee: "13A0-13F4",
Common: "0000-0040005B-0060007B-00A900AB-00B900BB-00BF00D700F702B9-02DF02E5-02E902EC-02FF0374037E038503870589060C061B061F06400660-066906DD096409650E3F0FD5-0FD810FB16EB-16ED173517361802180318051CD31CE11CE9-1CEC1CEE-1CF31CF51CF62000-200B200E-2064206A-20702074-207E2080-208E20A0-20B92100-21252127-2129212C-21312133-214D214F-215F21892190-23F32400-24262440-244A2460-26FF2701-27FF2900-2B4C2B50-2B592E00-2E3B2FF0-2FFB3000-300430063008-30203030-3037303C-303F309B309C30A030FB30FC3190-319F31C0-31E33220-325F327F-32CF3358-33FF4DC0-4DFFA700-A721A788-A78AA830-A839FD3EFD3FFDFDFE10-FE19FE30-FE52FE54-FE66FE68-FE6BFEFFFF01-FF20FF3B-FF40FF5B-FF65FF70FF9EFF9FFFE0-FFE6FFE8-FFEEFFF9-FFFD",
Coptic: "03E2-03EF2C80-2CF32CF9-2CFF",
Cyrillic: "0400-04840487-05271D2B1D782DE0-2DFFA640-A697A69F",
Devanagari: "0900-09500953-09630966-09770979-097FA8E0-A8FB",
Ethiopic: "1200-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-13992D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDEAB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2E",
Georgian: "10A0-10C510C710CD10D0-10FA10FC-10FF2D00-2D252D272D2D",
Glagolitic: "2C00-2C2E2C30-2C5E",
Greek: "0370-03730375-0377037A-037D038403860388-038A038C038E-03A103A3-03E103F0-03FF1D26-1D2A1D5D-1D611D66-1D6A1DBF1F00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2126",
Gujarati: "0A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF1",
Gurmukhi: "0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A75",
Han: "2E80-2E992E9B-2EF32F00-2FD5300530073021-30293038-303B3400-4DB54E00-9FCCF900-FA6DFA70-FAD9",
Hangul: "1100-11FF302E302F3131-318E3200-321E3260-327EA960-A97CAC00-D7A3D7B0-D7C6D7CB-D7FBFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
Hanunoo: "1720-1734",
Hebrew: "0591-05C705D0-05EA05F0-05F4FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FB4F",
Hiragana: "3041-3096309D-309F",
Inherited: "0300-036F04850486064B-0655065F0670095109521CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF200C200D20D0-20F0302A-302D3099309AFE00-FE0FFE20-FE26",
Javanese: "A980-A9CDA9CF-A9D9A9DEA9DF",
Kannada: "0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF2",
Katakana: "30A1-30FA30FD-30FF31F0-31FF32D0-32FE3300-3357FF66-FF6FFF71-FF9D",
Kayah_Li: "A900-A92F",
Khmer: "1780-17DD17E0-17E917F0-17F919E0-19FF",
Lao: "0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF",
Latin: "0041-005A0061-007A00AA00BA00C0-00D600D8-00F600F8-02B802E0-02E41D00-1D251D2C-1D5C1D62-1D651D6B-1D771D79-1DBE1E00-1EFF2071207F2090-209C212A212B2132214E2160-21882C60-2C7FA722-A787A78B-A78EA790-A793A7A0-A7AAA7F8-A7FFFB00-FB06FF21-FF3AFF41-FF5A",
Lepcha: "1C00-1C371C3B-1C491C4D-1C4F",
Limbu: "1900-191C1920-192B1930-193B19401944-194F",
Lisu: "A4D0-A4FF",
Malayalam: "0D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F",
Mandaic: "0840-085B085E",
Meetei_Mayek: "AAE0-AAF6ABC0-ABEDABF0-ABF9",
Mongolian: "1800180118041806-180E1810-18191820-18771880-18AA",
Myanmar: "1000-109FAA60-AA7B",
New_Tai_Lue: "1980-19AB19B0-19C919D0-19DA19DE19DF",
Nko: "07C0-07FA",
Ogham: "1680-169C",
Ol_Chiki: "1C50-1C7F",
Oriya: "0B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B77",
Phags_Pa: "A840-A877",
Rejang: "A930-A953A95F",
Runic: "16A0-16EA16EE-16F0",
Samaritan: "0800-082D0830-083E",
Saurashtra: "A880-A8C4A8CE-A8D9",
Sinhala: "0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF4",
Sundanese: "1B80-1BBF1CC0-1CC7",
Syloti_Nagri: "A800-A82B",
Syriac: "0700-070D070F-074A074D-074F",
Tagalog: "1700-170C170E-1714",
Tagbanwa: "1760-176C176E-177017721773",
Tai_Le: "1950-196D1970-1974",
Tai_Tham: "1A20-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD",
Tai_Viet: "AA80-AAC2AADB-AADF",
Tamil: "0B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA",
Telugu: "0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F",
Thaana: "0780-07B1",
Thai: "0E01-0E3A0E40-0E5B",
Tibetan: "0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FD40FD90FDA",
Tifinagh: "2D30-2D672D6F2D702D7F",
Vai: "A500-A62B",
Yi: "A000-A48CA490-A4C6"
});
}(XRegExp));
/***** unicode-blocks.js *****/
/*!
* XRegExp Unicode Blocks v1.2.0
* (c) 2010-2012 Steven Levithan <http://xregexp.com/>
* MIT License
* Uses Unicode 6.1 <http://unicode.org/>
*/
/**
* Adds support for all Unicode blocks in the Basic Multilingual Plane (U+0000-U+FFFF). Unicode
* blocks use the prefix "In". E.g., `\p{InBasicLatin}`. Token names are case insensitive, and any
* spaces, hyphens, and underscores are ignored.
* @requires XRegExp, XRegExp Unicode Base
*/
(function (XRegExp) {
"use strict";
if (!XRegExp.addUnicodePackage) {
throw new ReferenceError("Unicode Base must be loaded before Unicode Blocks");
}
XRegExp.install("extensibility");
XRegExp.addUnicodePackage({
InBasic_Latin: "0000-007F",
InLatin_1_Supplement: "0080-00FF",
InLatin_Extended_A: "0100-017F",
InLatin_Extended_B: "0180-024F",
InIPA_Extensions: "0250-02AF",
InSpacing_Modifier_Letters: "02B0-02FF",
InCombining_Diacritical_Marks: "0300-036F",
InGreek_and_Coptic: "0370-03FF",
InCyrillic: "0400-04FF",
InCyrillic_Supplement: "0500-052F",
InArmenian: "0530-058F",
InHebrew: "0590-05FF",
InArabic: "0600-06FF",
InSyriac: "0700-074F",
InArabic_Supplement: "0750-077F",
InThaana: "0780-07BF",
InNKo: "07C0-07FF",
InSamaritan: "0800-083F",
InMandaic: "0840-085F",
InArabic_Extended_A: "08A0-08FF",
InDevanagari: "0900-097F",
InBengali: "0980-09FF",
InGurmukhi: "0A00-0A7F",
InGujarati: "0A80-0AFF",
InOriya: "0B00-0B7F",
InTamil: "0B80-0BFF",
InTelugu: "0C00-0C7F",
InKannada: "0C80-0CFF",
InMalayalam: "0D00-0D7F",
InSinhala: "0D80-0DFF",
InThai: "0E00-0E7F",
InLao: "0E80-0EFF",
InTibetan: "0F00-0FFF",
InMyanmar: "1000-109F",
InGeorgian: "10A0-10FF",
InHangul_Jamo: "1100-11FF",
InEthiopic: "1200-137F",
InEthiopic_Supplement: "1380-139F",
InCherokee: "13A0-13FF",
InUnified_Canadian_Aboriginal_Syllabics: "1400-167F",
InOgham: "1680-169F",
InRunic: "16A0-16FF",
InTagalog: "1700-171F",
InHanunoo: "1720-173F",
InBuhid: "1740-175F",
InTagbanwa: "1760-177F",
InKhmer: "1780-17FF",
InMongolian: "1800-18AF",
InUnified_Canadian_Aboriginal_Syllabics_Extended: "18B0-18FF",
InLimbu: "1900-194F",
InTai_Le: "1950-197F",
InNew_Tai_Lue: "1980-19DF",
InKhmer_Symbols: "19E0-19FF",
InBuginese: "1A00-1A1F",
InTai_Tham: "1A20-1AAF",
InBalinese: "1B00-1B7F",
InSundanese: "1B80-1BBF",
InBatak: "1BC0-1BFF",
InLepcha: "1C00-1C4F",
InOl_Chiki: "1C50-1C7F",
InSundanese_Supplement: "1CC0-1CCF",
InVedic_Extensions: "1CD0-1CFF",
InPhonetic_Extensions: "1D00-1D7F",
InPhonetic_Extensions_Supplement: "1D80-1DBF",
InCombining_Diacritical_Marks_Supplement: "1DC0-1DFF",
InLatin_Extended_Additional: "1E00-1EFF",
InGreek_Extended: "1F00-1FFF",
InGeneral_Punctuation: "2000-206F",
InSuperscripts_and_Subscripts: "2070-209F",
InCurrency_Symbols: "20A0-20CF",
InCombining_Diacritical_Marks_for_Symbols: "20D0-20FF",
InLetterlike_Symbols: "2100-214F",
InNumber_Forms: "2150-218F",
InArrows: "2190-21FF",
InMathematical_Operators: "2200-22FF",
InMiscellaneous_Technical: "2300-23FF",
InControl_Pictures: "2400-243F",
InOptical_Character_Recognition: "2440-245F",
InEnclosed_Alphanumerics: "2460-24FF",
InBox_Drawing: "2500-257F",
InBlock_Elements: "2580-259F",
InGeometric_Shapes: "25A0-25FF",
InMiscellaneous_Symbols: "2600-26FF",
InDingbats: "2700-27BF",
InMiscellaneous_Mathematical_Symbols_A: "27C0-27EF",
InSupplemental_Arrows_A: "27F0-27FF",
InBraille_Patterns: "2800-28FF",
InSupplemental_Arrows_B: "2900-297F",
InMiscellaneous_Mathematical_Symbols_B: "2980-29FF",
InSupplemental_Mathematical_Operators: "2A00-2AFF",
InMiscellaneous_Symbols_and_Arrows: "2B00-2BFF",
InGlagolitic: "2C00-2C5F",
InLatin_Extended_C: "2C60-2C7F",
InCoptic: "2C80-2CFF",
InGeorgian_Supplement: "2D00-2D2F",
InTifinagh: "2D30-2D7F",
InEthiopic_Extended: "2D80-2DDF",
InCyrillic_Extended_A: "2DE0-2DFF",
InSupplemental_Punctuation: "2E00-2E7F",
InCJK_Radicals_Supplement: "2E80-2EFF",
InKangxi_Radicals: "2F00-2FDF",
InIdeographic_Description_Characters: "2FF0-2FFF",
InCJK_Symbols_and_Punctuation: "3000-303F",
InHiragana: "3040-309F",
InKatakana: "30A0-30FF",
InBopomofo: "3100-312F",
InHangul_Compatibility_Jamo: "3130-318F",
InKanbun: "3190-319F",
InBopomofo_Extended: "31A0-31BF",
InCJK_Strokes: "31C0-31EF",
InKatakana_Phonetic_Extensions: "31F0-31FF",
InEnclosed_CJK_Letters_and_Months: "3200-32FF",
InCJK_Compatibility: "3300-33FF",
InCJK_Unified_Ideographs_Extension_A: "3400-4DBF",
InYijing_Hexagram_Symbols: "4DC0-4DFF",
InCJK_Unified_Ideographs: "4E00-9FFF",
InYi_Syllables: "A000-A48F",
InYi_Radicals: "A490-A4CF",
InLisu: "A4D0-A4FF",
InVai: "A500-A63F",
InCyrillic_Extended_B: "A640-A69F",
InBamum: "A6A0-A6FF",
InModifier_Tone_Letters: "A700-A71F",
InLatin_Extended_D: "A720-A7FF",
InSyloti_Nagri: "A800-A82F",
InCommon_Indic_Number_Forms: "A830-A83F",
InPhags_pa: "A840-A87F",
InSaurashtra: "A880-A8DF",
InDevanagari_Extended: "A8E0-A8FF",
InKayah_Li: "A900-A92F",
InRejang: "A930-A95F",
InHangul_Jamo_Extended_A: "A960-A97F",
InJavanese: "A980-A9DF",
InCham: "AA00-AA5F",
InMyanmar_Extended_A: "AA60-AA7F",
InTai_Viet: "AA80-AADF",
InMeetei_Mayek_Extensions: "AAE0-AAFF",
InEthiopic_Extended_A: "AB00-AB2F",
InMeetei_Mayek: "ABC0-ABFF",
InHangul_Syllables: "AC00-D7AF",
InHangul_Jamo_Extended_B: "D7B0-D7FF",
InHigh_Surrogates: "D800-DB7F",
InHigh_Private_Use_Surrogates: "DB80-DBFF",
InLow_Surrogates: "DC00-DFFF",
InPrivate_Use_Area: "E000-F8FF",
InCJK_Compatibility_Ideographs: "F900-FAFF",
InAlphabetic_Presentation_Forms: "FB00-FB4F",
InArabic_Presentation_Forms_A: "FB50-FDFF",
InVariation_Selectors: "FE00-FE0F",
InVertical_Forms: "FE10-FE1F",
InCombining_Half_Marks: "FE20-FE2F",
InCJK_Compatibility_Forms: "FE30-FE4F",
InSmall_Form_Variants: "FE50-FE6F",
InArabic_Presentation_Forms_B: "FE70-FEFF",
InHalfwidth_and_Fullwidth_Forms: "FF00-FFEF",
InSpecials: "FFF0-FFFF"
});
}(XRegExp));
/***** unicode-properties.js *****/
/*!
* XRegExp Unicode Properties v1.0.0
* (c) 2012 Steven Levithan <http://xregexp.com/>
* MIT License
* Uses Unicode 6.1 <http://unicode.org/>
*/
/**
* Adds Unicode properties necessary to meet Level 1 Unicode support (detailed in UTS#18 RL1.2).
* Includes code points from the Basic Multilingual Plane (U+0000-U+FFFF) only. Token names are
* case insensitive, and any spaces, hyphens, and underscores are ignored.
* @requires XRegExp, XRegExp Unicode Base
*/
(function (XRegExp) {
"use strict";
if (!XRegExp.addUnicodePackage) {
throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");
}
XRegExp.install("extensibility");
XRegExp.addUnicodePackage({
Alphabetic: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE03450370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705B0-05BD05BF05C105C205C405C505C705D0-05EA05F0-05F20610-061A0620-06570659-065F066E-06D306D5-06DC06E1-06E806ED-06EF06FA-06FC06FF0710-073F074D-07B107CA-07EA07F407F507FA0800-0817081A-082C0840-085808A008A2-08AC08E4-08E908F0-08FE0900-093B093D-094C094E-09500955-09630971-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BD-09C409C709C809CB09CC09CE09D709DC09DD09DF-09E309F009F10A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3E-0A420A470A480A4B0A4C0A510A59-0A5C0A5E0A70-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD-0AC50AC7-0AC90ACB0ACC0AD00AE0-0AE30B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D-0B440B470B480B4B0B4C0B560B570B5C0B5D0B5F-0B630B710B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCC0BD00BD70C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4C0C550C560C580C590C60-0C630C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD-0CC40CC6-0CC80CCA-0CCC0CD50CD60CDE0CE0-0CE30CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4C0D4E0D570D60-0D630D7A-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCF-0DD40DD60DD8-0DDF0DF20DF30E01-0E3A0E40-0E460E4D0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60ECD0EDC-0EDF0F000F40-0F470F49-0F6C0F71-0F810F88-0F970F99-0FBC1000-10361038103B-103F1050-10621065-1068106E-1086108E109C109D10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135F1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA16EE-16F01700-170C170E-17131720-17331740-17531760-176C176E-1770177217731780-17B317B6-17C817D717DC1820-18771880-18AA18B0-18F51900-191C1920-192B1930-19381950-196D1970-19741980-19AB19B0-19C91A00-1A1B1A20-1A5E1A61-1A741AA71B00-1B331B35-1B431B45-1B4B1B80-1BA91BAC-1BAF1BBA-1BE51BE7-1BF11C00-1C351C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF31CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E2160-218824B6-24E92C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2DFF2E2F3005-30073021-30293031-30353038-303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA674-A67BA67F-A697A69F-A6EFA717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A827A840-A873A880-A8C3A8F2-A8F7A8FBA90A-A92AA930-A952A960-A97CA980-A9B2A9B4-A9BFA9CFAA00-AA36AA40-AA4DAA60-AA76AA7AAA80-AABEAAC0AAC2AADB-AADDAAE0-AAEFAAF2-AAF5AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEAAC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
Uppercase: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F21452160-216F218324B6-24CF2C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A",
Lowercase: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02B802C002C102E0-02E40345037103730377037A-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1DBF1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF72071207F2090-209C210A210E210F2113212F21342139213C213D2146-2149214E2170-217F218424D0-24E92C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7D2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76F-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7F8-A7FAFB00-FB06FB13-FB17FF41-FF5A",
White_Space: "0009-000D0020008500A01680180E2000-200A20282029202F205F3000",
Noncharacter_Code_Point: "FDD0-FDEFFFFEFFFF",
Default_Ignorable_Code_Point: "00AD034F115F116017B417B5180B-180D200B-200F202A-202E2060-206F3164FE00-FE0FFEFFFFA0FFF0-FFF8",
// \p{Any} matches a code unit. To match any code point via surrogate pairs, use (?:[\0-\uD7FF\uDC00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF])
Any: "0000-FFFF", // \p{^Any} compiles to [^\u0000-\uFFFF]; [\p{^Any}] to []
Ascii: "0000-007F",
// \p{Assigned} is equivalent to \p{^Cn}
//Assigned: XRegExp("[\\p{^Cn}]").source.replace(/[[\]]|\\u/g, "") // Negation inside a character class triggers inversion
Assigned: "0000-0377037A-037E0384-038A038C038E-03A103A3-05270531-05560559-055F0561-05870589058A058F0591-05C705D0-05EA05F0-05F40600-06040606-061B061E-070D070F-074A074D-07B107C0-07FA0800-082D0830-083E0840-085B085E08A008A2-08AC08E4-08FE0900-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF10B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B770B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF40E01-0E3A0E3F-0E5B0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FDA1000-10C510C710CD10D0-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-139913A0-13F41400-169C16A0-16F01700-170C170E-17141720-17361740-17531760-176C176E-1770177217731780-17DD17E0-17E917F0-17F91800-180E1810-18191820-18771880-18AA18B0-18F51900-191C1920-192B1930-193B19401944-196D1970-19741980-19AB19B0-19C919D0-19DA19DE-1A1B1A1E-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD1B00-1B4B1B50-1B7C1B80-1BF31BFC-1C371C3B-1C491C4D-1C7F1CC0-1CC71CD0-1CF61D00-1DE61DFC-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2000-2064206A-20712074-208E2090-209C20A0-20B920D0-20F02100-21892190-23F32400-24262440-244A2460-26FF2701-2B4C2B50-2B592C00-2C2E2C30-2C5E2C60-2CF32CF9-2D252D272D2D2D30-2D672D6F2D702D7F-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2E3B2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB3000-303F3041-30963099-30FF3105-312D3131-318E3190-31BA31C0-31E331F0-321E3220-32FE3300-4DB54DC0-9FCCA000-A48CA490-A4C6A4D0-A62BA640-A697A69F-A6F7A700-A78EA790-A793A7A0-A7AAA7F8-A82BA830-A839A840-A877A880-A8C4A8CE-A8D9A8E0-A8FBA900-A953A95F-A97CA980-A9CDA9CF-A9D9A9DEA9DFAA00-AA36AA40-AA4DAA50-AA59AA5C-AA7BAA80-AAC2AADB-AAF6AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEDABF0-ABF9AC00-D7A3D7B0-D7C6D7CB-D7FBD800-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBC1FBD3-FD3FFD50-FD8FFD92-FDC7FDF0-FDFDFE00-FE19FE20-FE26FE30-FE52FE54-FE66FE68-FE6BFE70-FE74FE76-FEFCFEFFFF01-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDCFFE0-FFE6FFE8-FFEEFFF9-FFFD"
});
}(XRegExp));
/***** matchrecursive.js *****/
/*!
* XRegExp.matchRecursive v0.2.0
* (c) 2009-2012 Steven Levithan <http://xregexp.com/>
* MIT License
*/
(function (XRegExp) {
"use strict";
/**
* Returns a match detail object composed of the provided values.
* @private
*/
function row(value, name, start, end) {
return {value:value, name:name, start:start, end:end};
}
/**
* Returns an array of match strings between outermost left and right delimiters, or an array of
* objects with detailed match parts and position data. An error is thrown if delimiters are
* unbalanced within the data.
* @memberOf XRegExp
* @param {String} str String to search.
* @param {String} left Left delimiter as an XRegExp pattern.
* @param {String} right Right delimiter as an XRegExp pattern.
* @param {String} [flags] Flags for the left and right delimiters. Use any of: `gimnsxy`.
* @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options.
* @returns {Array} Array of matches, or an empty array.
* @example
*
* // Basic usage
* var str = '(t((e))s)t()(ing)';
* XRegExp.matchRecursive(str, '\\(', '\\)', 'g');
* // -> ['t((e))s', '', 'ing']
*
* // Extended information mode with valueNames
* str = 'Here is <div> <div>an</div></div> example';
* XRegExp.matchRecursive(str, '<div\\s*>', '</div>', 'gi', {
* valueNames: ['between', 'left', 'match', 'right']
* });
* // -> [
* // {name: 'between', value: 'Here is ', start: 0, end: 8},
* // {name: 'left', value: '<div>', start: 8, end: 13},
* // {name: 'match', value: ' <div>an</div>', start: 13, end: 27},
* // {name: 'right', value: '</div>', start: 27, end: 33},
* // {name: 'between', value: ' example', start: 33, end: 41}
* // ]
*
* // Omitting unneeded parts with null valueNames, and using escapeChar
* str = '...{1}\\{{function(x,y){return y+x;}}';
* XRegExp.matchRecursive(str, '{', '}', 'g', {
* valueNames: ['literal', null, 'value', null],
* escapeChar: '\\'
* });
* // -> [
* // {name: 'literal', value: '...', start: 0, end: 3},
* // {name: 'value', value: '1', start: 4, end: 5},
* // {name: 'literal', value: '\\{', start: 6, end: 8},
* // {name: 'value', value: 'function(x,y){return y+x;}', start: 9, end: 35}
* // ]
*
* // Sticky mode via flag y
* str = '<1><<<2>>><3>4<5>';
* XRegExp.matchRecursive(str, '<', '>', 'gy');
* // -> ['1', '<<2>>', '3']
*/
XRegExp.matchRecursive = function (str, left, right, flags, options) {
flags = flags || "";
options = options || {};
var global = flags.indexOf("g") > -1,
sticky = flags.indexOf("y") > -1,
basicFlags = flags.replace(/y/g, ""), // Flag y controlled internally
escapeChar = options.escapeChar,
vN = options.valueNames,
output = [],
openTokens = 0,
delimStart = 0,
delimEnd = 0,
lastOuterEnd = 0,
outerStart,
innerStart,
leftMatch,
rightMatch,
esc;
left = XRegExp(left, basicFlags);
right = XRegExp(right, basicFlags);
if (escapeChar) {
if (escapeChar.length > 1) {
throw new SyntaxError("can't use more than one escape character");
}
escapeChar = XRegExp.escape(escapeChar);
// Using XRegExp.union safely rewrites backreferences in `left` and `right`
esc = new RegExp(
"(?:" + escapeChar + "[\\S\\s]|(?:(?!" + XRegExp.union([left, right]).source + ")[^" + escapeChar + "])+)+",
flags.replace(/[^im]+/g, "") // Flags gy not needed here; flags nsx handled by XRegExp
);
}
while (true) {
// If using an escape character, advance to the delimiter's next starting position,
// skipping any escaped characters in between
if (escapeChar) {
delimEnd += (XRegExp.exec(str, esc, delimEnd, "sticky") || [""])[0].length;
}
leftMatch = XRegExp.exec(str, left, delimEnd);
rightMatch = XRegExp.exec(str, right, delimEnd);
// Keep the leftmost match only
if (leftMatch && rightMatch) {
if (leftMatch.index <= rightMatch.index) {
rightMatch = null;
} else {
leftMatch = null;
}
}
/* Paths (LM:leftMatch, RM:rightMatch, OT:openTokens):
LM | RM | OT | Result
1 | 0 | 1 | loop
1 | 0 | 0 | loop
0 | 1 | 1 | loop
0 | 1 | 0 | throw
0 | 0 | 1 | throw
0 | 0 | 0 | break
* Doesn't include the sticky mode special case
* Loop ends after the first completed match if `!global` */
if (leftMatch || rightMatch) {
delimStart = (leftMatch || rightMatch).index;
delimEnd = delimStart + (leftMatch || rightMatch)[0].length;
} else if (!openTokens) {
break;
}
if (sticky && !openTokens && delimStart > lastOuterEnd) {
break;
}
if (leftMatch) {
if (!openTokens) {
outerStart = delimStart;
innerStart = delimEnd;
}
++openTokens;
} else if (rightMatch && openTokens) {
if (!--openTokens) {
if (vN) {
if (vN[0] && outerStart > lastOuterEnd) {
output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart));
}
if (vN[1]) {
output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart));
}
if (vN[2]) {
output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart));
}
if (vN[3]) {
output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd));
}
} else {
output.push(str.slice(innerStart, delimStart));
}
lastOuterEnd = delimEnd;
if (!global) {
break;
}
}
} else {
throw new Error("string contains unbalanced delimiters");
}
// If the delimiter matched an empty string, avoid an infinite loop
if (delimStart === delimEnd) {
++delimEnd;
}
}
if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) {
output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length));
}
return output;
};
}(XRegExp));
/***** build.js *****/
/*!
* XRegExp.build v0.1.0
* (c) 2012 Steven Levithan <http://xregexp.com/>
* MIT License
* Inspired by RegExp.create by Lea Verou <http://lea.verou.me/>
*/
(function (XRegExp) {
"use strict";
var subparts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,
parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subparts], "g");
/**
* Strips a leading `^` and trailing unescaped `$`, if both are present.
* @private
* @param {String} pattern Pattern to process.
* @returns {String} Pattern with edge anchors removed.
*/
function deanchor(pattern) {
var startAnchor = /^(?:\(\?:\))?\^/, // Leading `^` or `(?:)^` (handles /x cruft)
endAnchor = /\$(?:\(\?:\))?$/; // Trailing `$` or `$(?:)` (handles /x cruft)
if (endAnchor.test(pattern.replace(/\\[\s\S]/g, ""))) { // Ensure trailing `$` isn't escaped
return pattern.replace(startAnchor, "").replace(endAnchor, "");
}
return pattern;
}
/**
* Converts the provided value to an XRegExp.
* @private
* @param {String|RegExp} value Value to convert.
* @returns {RegExp} XRegExp object with XRegExp syntax applied.
*/
function asXRegExp(value) {
return XRegExp.isRegExp(value) ?
(value.xregexp && !value.xregexp.isNative ? value : XRegExp(value.source)) :
XRegExp(value);
}
/**
* Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in the
* outer pattern and provided subpatterns are automatically renumbered to work correctly. Native
* flags used by provided subpatterns are ignored in favor of the `flags` argument.
* @memberOf XRegExp
* @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows
* `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within
* character classes.
* @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A
* leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present.
* @param {String} [flags] Any combination of XRegExp flags.
* @returns {RegExp} Regex with interpolated subpatterns.
* @example
*
* var time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', {
* hours: XRegExp.build('{{h12}} : | {{h24}}', {
* h12: /1[0-2]|0?[1-9]/,
* h24: /2[0-3]|[01][0-9]/
* }, 'x'),
* minutes: /^[0-5][0-9]$/
* });
* time.test('10:59'); // -> true
* XRegExp.exec('10:59', time).minutes; // -> '59'
*/
XRegExp.build = function (pattern, subs, flags) {
var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern),
data = {},
numCaps = 0, // Caps is short for captures
numPriorCaps,
numOuterCaps = 0,
outerCapsMap = [0],
outerCapNames,
sub,
p;
// Add flags within a leading mode modifier to the overall pattern's flags
if (inlineFlags) {
flags = flags || "";
inlineFlags[1].replace(/./g, function (flag) {
flags += (flags.indexOf(flag) > -1 ? "" : flag); // Don't add duplicates
});
}
for (p in subs) {
if (subs.hasOwnProperty(p)) {
// Passing to XRegExp enables extended syntax for subpatterns provided as strings
// and ensures independent validity, lest an unescaped `(`, `)`, `[`, or trailing
// `\` breaks the `(?:)` wrapper. For subpatterns provided as regexes, it dies on
// octals and adds the `xregexp` property, for simplicity
sub = asXRegExp(subs[p]);
// Deanchoring allows embedding independently useful anchored regexes. If you
// really need to keep your anchors, double them (i.e., `^^...$$`)
data[p] = {pattern: deanchor(sub.source), names: sub.xregexp.captureNames || []};
}
}
// Passing to XRegExp dies on octals and ensures the outer pattern is independently valid;
// helps keep this simple. Named captures will be put back
pattern = asXRegExp(pattern);
outerCapNames = pattern.xregexp.captureNames || [];
pattern = pattern.source.replace(parts, function ($0, $1, $2, $3, $4) {
var subName = $1 || $2, capName, intro;
if (subName) { // Named subpattern
if (!data.hasOwnProperty(subName)) {
throw new ReferenceError("undefined property " + $0);
}
if ($1) { // Named subpattern was wrapped in a capturing group
capName = outerCapNames[numOuterCaps];
outerCapsMap[++numOuterCaps] = ++numCaps;
// If it's a named group, preserve the name. Otherwise, use the subpattern name
// as the capture name
intro = "(?<" + (capName || subName) + ">";
} else {
intro = "(?:";
}
numPriorCaps = numCaps;
return intro + data[subName].pattern.replace(subparts, function (match, paren, backref) {
if (paren) { // Capturing group
capName = data[subName].names[numCaps - numPriorCaps];
++numCaps;
if (capName) { // If the current capture has a name, preserve the name
return "(?<" + capName + ">";
}
} else if (backref) { // Backreference
return "\\" + (+backref + numPriorCaps); // Rewrite the backreference
}
return match;
}) + ")";
}
if ($3) { // Capturing group
capName = outerCapNames[numOuterCaps];
outerCapsMap[++numOuterCaps] = ++numCaps;
if (capName) { // If the current capture has a name, preserve the name
return "(?<" + capName + ">";
}
} else if ($4) { // Backreference
return "\\" + outerCapsMap[+$4]; // Rewrite the backreference
}
return $0;
});
return XRegExp(pattern, flags);
};
}(XRegExp));
/***** prototypes.js *****/
/*!
* XRegExp Prototype Methods v1.0.0
* (c) 2012 Steven Levithan <http://xregexp.com/>
* MIT License
*/
/**
* Adds a collection of methods to `XRegExp.prototype`. RegExp objects copied by XRegExp are also
* augmented with any `XRegExp.prototype` methods. Hence, the following work equivalently:
*
* XRegExp('[a-z]', 'ig').xexec('abc');
* XRegExp(/[a-z]/ig).xexec('abc');
* XRegExp.globalize(/[a-z]/i).xexec('abc');
*/
(function (XRegExp) {
"use strict";
/**
* Copy properties of `b` to `a`.
* @private
* @param {Object} a Object that will receive new properties.
* @param {Object} b Object whose properties will be copied.
*/
function extend(a, b) {
for (var p in b) {
if (b.hasOwnProperty(p)) {
a[p] = b[p];
}
}
//return a;
}
extend(XRegExp.prototype, {
/**
* Implicitly calls the regex's `test` method with the first value in the provided arguments array.
* @memberOf XRegExp.prototype
* @param {*} context Ignored. Accepted only for congruity with `Function.prototype.apply`.
* @param {Array} args Array with the string to search as its first value.
* @returns {Boolean} Whether the regex matched the provided value.
* @example
*
* XRegExp('[a-z]').apply(null, ['abc']); // -> true
*/
apply: function (context, args) {
return this.test(args[0]);
},
/**
* Implicitly calls the regex's `test` method with the provided string.
* @memberOf XRegExp.prototype
* @param {*} context Ignored. Accepted only for congruity with `Function.prototype.call`.
* @param {String} str String to search.
* @returns {Boolean} Whether the regex matched the provided value.
* @example
*
* XRegExp('[a-z]').call(null, 'abc'); // -> true
*/
call: function (context, str) {
return this.test(str);
},
/**
* Implicitly calls {@link #XRegExp.forEach}.
* @memberOf XRegExp.prototype
* @example
*
* XRegExp('\\d').forEach('1a2345', function (match, i) {
* if (i % 2) this.push(+match[0]);
* }, []);
* // -> [2, 4]
*/
forEach: function (str, callback, context) {
return XRegExp.forEach(str, this, callback, context);
},
/**
* Implicitly calls {@link #XRegExp.globalize}.
* @memberOf XRegExp.prototype
* @example
*
* var globalCopy = XRegExp('regex').globalize();
* globalCopy.global; // -> true
*/
globalize: function () {
return XRegExp.globalize(this);
},
/**
* Implicitly calls {@link #XRegExp.exec}.
* @memberOf XRegExp.prototype
* @example
*
* var match = XRegExp('U\\+(?<hex>[0-9A-F]{4})').xexec('U+2620');
* match.hex; // -> '2620'
*/
xexec: function (str, pos, sticky) {
return XRegExp.exec(str, this, pos, sticky);
},
/**
* Implicitly calls {@link #XRegExp.test}.
* @memberOf XRegExp.prototype
* @example
*
* XRegExp('c').xtest('abc'); // -> true
*/
xtest: function (str, pos, sticky) {
return XRegExp.test(str, this, pos, sticky);
}
});
}(XRegExp));
// SOURCE: resource/translators/reference.js
// Generated by CoffeeScript 1.10.0
/*
* h1 Global object: Translator
*
* The global Translator object allows access to the current configuration of the translator
*
* @param {enum} titleCase whether titles should be title-cased
* @param {boolean} bibtexURLs set to true when BBT will generate \url{..} around the urls for BibTeX
*/
/*
* h1 class: Reference
*
* The Bib(La)TeX references are generated by the `Reference` class. Before being comitted to the cache, you can add
* postscript code that can manipulated the `fields` or the `referencetype`
*
* @param {Array} @fields Array of reference fields
* @param {String} @referencetype referencetype
* @param {Object} @item the current Zotero item being converted
*/
/*
* The fields are objects with the following keys:
* * name: name of the Bib(La)TeX field
* * value: the value of the field
* * bibtex: the LaTeX-encoded value of the field
* * enc: the encoding to use for the field
*/
var Language, Reference,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
hasProp = {}.hasOwnProperty;
Reference = (function() {
function Reference(item) {
var attr, f, langlc, ref1, ref2, ref3, sim;
this.item = item;
this.fields = [];
this.has = Object.create(null);
this.raw = (ref1 = Translator.rawLaTag, indexOf.call(this.item.tags, ref1) >= 0);
if (!this.item.language) {
this.english = true;
} else {
langlc = this.item.language.toLowerCase();
this.language = Language.babelMap[langlc.replace(/[^a-z0-9]/, '_')];
this.language || (this.language = Language.babelMap[langlc.replace(/-[a-z]+$/i, '').replace(/[^a-z0-9]/, '_')]);
if (this.language) {
this.language = this.language[0];
} else {
sim = Language.lookup(langlc);
if (sim[0].sim >= 0.9) {
this.language = sim[0].lang;
} else {
delete this.language;
}
}
this.english = (ref2 = this.language) === 'american' || ref2 === 'british' || ref2 === 'canadian' || ref2 === 'english' || ref2 === 'australian' || ref2 === 'newzealand' || ref2 === 'USenglish' || ref2 === 'UKenglish';
}
this.referencetype = Translator.typeMap.Zotero2BibTeX[this.item.itemType] || 'misc';
this.override = Translator.extractFields(this.item);
ref3 = Translator.fieldMap || {};
for (attr in ref3) {
if (!hasProp.call(ref3, attr)) continue;
f = ref3[attr];
if (f.name) {
this.add(this.clone(f, this.item[attr]));
}
}
this.add({
name: 'timestamp',
value: Translator.testing_timestamp || this.item.dateModified || this.item.dateAdded
});
}
/*
* Return a copy of the given `field` with a new value
*
* @param {field} field to be cloned
* @param {value} value to be assigned
* @return {Object} copy of field settings with new value
*/
Reference.prototype.clone = function(f, value) {
var clone;
clone = JSON.parse(JSON.stringify(f));
delete clone.bibtex;
clone.value = value;
return clone;
};
/*
* 'Encode' to raw LaTeX value
*
* @param {field} field to encode
* @return {String} unmodified `field.value`
*/
Reference.prototype.enc_raw = function(f) {
return f.value;
};
/*
* Encode to date
*
* @param {field} field to encode
* @return {String} unmodified `field.value`
*/
Reference.prototype.isodate = function(v, suffix) {
var date, day, month, year;
if (suffix == null) {
suffix = '';
}
year = v["year" + suffix];
if (!year) {
return null;
}
month = v["month" + suffix];
if (month) {
month = ("0" + month).slice(-2);
}
day = v["day" + suffix];
if (day) {
day = ("0" + day).slice(-2);
}
date = '' + year;
if (month) {
date += "-" + month;
if (day) {
date += "-" + day;
}
}
return date;
};
Reference.prototype.enc_date = function(f) {
var date, enddate, value;
if (!f.value) {
return null;
}
value = f.value;
if (typeof f.value === 'string') {
value = Zotero.BetterBibTeX.parseDateToObject(value, this.item.language);
}
if (value.literal) {
if (value.literal === 'n.d.') {
return '\\bibstring{nodate}';
}
return this.enc_latex(this.clone(f, value.literal));
}
date = this.isodate(value);
if (!date) {
return null;
}
enddate = this.isodate(value, '_end');
if (enddate) {
date += "/" + enddate;
}
return this.enc_latex({
value: date
});
};
/*
* Encode to LaTeX url
*
* @param {field} field to encode
* @return {String} field.value encoded as verbatim LaTeX string (minimal escaping). If in Better BibTeX, wraps return value in `\url{string}`
*/
Reference.prototype.enc_url = function(f) {
var value;
value = this.enc_verbatim(f);
if (Translator.BetterBibTeX) {
return "\\url{" + (this.enc_verbatim(f)) + "}";
} else {
return value;
}
};
/*
* Encode to verbatim LaTeX
*
* @param {field} field to encode
* @return {String} field.value encoded as verbatim LaTeX string (minimal escaping).
*/
Reference.prototype.enc_verbatim = function(f) {
return this.toVerbatim(f.value);
};
Reference.prototype.nonLetters = new XRegExp("[^\\p{Letter}]", 'g');
Reference.prototype.punctuationAtEnd = new XRegExp("[\\p{Punctuation}]$");
Reference.prototype.startsWithLowercase = new XRegExp("^[\\p{Ll}]");
Reference.prototype._enc_creators_postfix_particle = function(particle) {
if (particle[particle.length - 1] === ' ') {
return '';
}
if (Translator.BetterBibLaTeX) {
return ' ';
}
if (particle[particle.length - 1] === '.') {
return ' ';
}
if (XRegExp.test(particle, this.punctuationAtEnd)) {
return '';
}
return ' ';
};
Reference.prototype._enc_creators_quote_separators = function(value) {
var i, n;
return (function() {
var j, len, ref1, results;
ref1 = value.split(/(\s+and\s+|,)/i);
results = [];
for (i = j = 0, len = ref1.length; j < len; i = ++j) {
n = ref1[i];
results.push(i % 2 === 0 ? n : new String(n));
}
return results;
})();
};
Reference.prototype._enc_creators_biblatex = function(name) {
var j, k, latex, len, particle, ref1, v;
ref1 = ['non-dropping-particle', 'dropping-particle'];
for (j = 0, len = ref1.length; j < len; j++) {
particle = ref1[j];
if (name[particle]) {
name[particle] += this._enc_creators_postfix_particle(name[particle]);
}
}
for (k in name) {
v = name[k];
if (typeof v !== 'string') {
continue;
}
switch (false) {
case !(v.length > 1 && v[0] === '"' && v[v.length - 1] === '"'):
name[k] = this.enc_latex({
value: new String(v.slice(1, -1))
});
break;
case !(k === 'family' && XRegExp.test(v, this.startsWithLowercase)):
name[k] = this.enc_latex({
value: new String(v)
});
break;
default:
name[k] = this.enc_latex({
value: this._enc_creators_quote_separators(v),
sep: ' '
});
}
}
latex = '';
if (name['dropping-particle']) {
latex += name['dropping-particle'];
}
if (name['non-dropping-particle']) {
latex += name['non-dropping-particle'];
}
if (name.family) {
latex += name.family;
}
if (name.suffix) {
latex += ", " + name.suffix;
}
latex += ", " + (name.given || '');
return latex;
};
Reference.prototype._enc_creators_bibtex = function(name) {
var j, latex, len, part, particle, ref1;
ref1 = ['non-dropping-particle', 'dropping-particle'];
for (j = 0, len = ref1.length; j < len; j++) {
particle = ref1[j];
if (name[particle]) {
name[particle] += this._enc_creators_postfix_particle(name[particle]);
}
}
if (name.family.length > 1 && name.family[0] === '"' && name.family[name.family.length - 1] === '"') {
name.family = name.family.slice(1, -1);
}
latex = [
new String(((function() {
var l, len1, ref2, results;
ref2 = [name['dropping-particle'], name['non-dropping-particle'], name.family];
results = [];
for (l = 0, len1 = ref2.length; l < len1; l++) {
part = ref2[l];
if (part) {
results.push(part);
}
}
return results;
})()).join(''))
];
if (name.suffix) {
latex.push(name.suffix);
}
if (name.given) {
latex.push(name.given);
}
return this.enc_latex({
value: latex,
sep: ', '
});
};
/*
* Encode creators to author-style field
*
* @param {field} field to encode. The 'value' must be an array of Zotero-serialized `creator` objects.
* @return {String} field.value encoded as author-style value
*/
Reference.prototype._enc_creators_relax_marker = '\u0097';
Reference.prototype.enc_creators = function(f, raw) {
var creator, encoded, j, len, name, ref1;
if (f.value.length === 0) {
return null;
}
encoded = [];
ref1 = f.value;
for (j = 0, len = ref1.length; j < len; j++) {
creator = ref1[j];
switch (false) {
case !(creator.name || (creator.lastName && creator.fieldMode === 1)):
name = raw ? "{" + (creator.name || creator.lastName) + "}" : this.enc_latex({
value: new String(creator.name || creator.lastName)
});
break;
case !raw:
name = [creator.lastName || '', creator.firstName || ''].join(', ');
break;
case !(Translator.parseParticles && (creator.lastName || creator.firstName)):
name = {
family: creator.lastName || '',
given: creator.firstName || ''
};
Zotero.BetterBibTeX.CSL.parseParticles(name);
if (name.given && name.given.indexOf(this._enc_creators_relax_marker) >= 0) {
name.given = '<span class="relax">' + name.given.replace(this._enc_creators_relax_marker, '</span>');
}
this.useprefix || (this.useprefix = !!name['non-dropping-particle']);
this.juniorcomma || (this.juniorcomma = f.juniorcomma && name['comma-suffix']);
if (Translator.BetterBibTeX) {
name = this._enc_creators_bibtex(name);
} else {
name = this._enc_creators_biblatex(name);
}
break;
case !(creator.lastName || creator.firstName):
name = [];
if (creator.lastName) {
name.push(new String(creator.lastName));
}
if (creator.firstName) {
if (creator.firstName.indexOf(this._enc_creators_relax_marker) >= 0) {
creator.firstName = '<span class="relax">' + creator.firstName.replace(this._enc_creators_relax_marker, '</span>');
}
name.push(creator.firstName);
}
name = this.enc_latex({
value: name,
sep: ', '
});
break;
default:
continue;
}
encoded.push(name.trim());
}
return encoded.join(' and ');
};
/*
* Encode text to LaTeX literal list (double-braced)
*
* This encoding supports simple HTML markup.
*
* @param {field} field to encode.
* @return {String} field.value encoded as author-style value
*/
Reference.prototype.enc_literal = function(f, raw) {
return this.enc_latex({
value: new String(f.value)
}, raw);
};
/*
* Encode text to LaTeX
*
* This encoding supports simple HTML markup.
*
* @param {field} field to encode.
* @return {String} field.value encoded as author-style value
*/
Reference.prototype.enc_latex = function(f, raw) {
var value, word;
if (typeof f.value === 'number') {
return f.value;
}
if (!f.value) {
return null;
}
if (Array.isArray(f.value)) {
if (f.value.length === 0) {
return null;
}
return ((function() {
var j, len, ref1, results;
ref1 = f.value;
results = [];
for (j = 0, len = ref1.length; j < len; j++) {
word = ref1[j];
results.push(this.enc_latex(this.clone(f, word), raw));
}
return results;
}).call(this)).join(f.sep || '');
}
if (raw) {
return f.value;
}
value = LaTeX.text2latex(f.value, {
autoCase: f.autoCase && this.english
});
if (f.value instanceof String) {
value = new String("{" + value + "}");
}
return value;
};
Reference.prototype.enc_tags = function(f) {
var balanced, ch, tag, tags;
tags = (function() {
var j, len, ref1, results;
ref1 = f.value || [];
results = [];
for (j = 0, len = ref1.length; j < len; j++) {
tag = ref1[j];
if (tag && tag !== Translator.rawLaTag) {
results.push(tag);
}
}
return results;
})();
if (tags.length === 0) {
return null;
}
if (Translator.testing) {
tags.sort();
}
tags = (function() {
var j, l, len, len1, results;
results = [];
for (j = 0, len = tags.length; j < len; j++) {
tag = tags[j];
if (Translator.BetterBibTeX) {
tag = tag.replace(/([#\\%&])/g, '\\$1');
} else {
tag = tag.replace(/([#%\\])/g, '\\$1');
}
tag = tag.replace(/,/g, ';');
balanced = 0;
for (l = 0, len1 = tag.length; l < len1; l++) {
ch = tag[l];
switch (ch) {
case '{':
balanced += 1;
break;
case '}':
balanced -= 1;
}
if (balanced < 0) {
break;
}
}
if (balanced !== 0) {
tag = tag.replace(/{/g, '(').replace(/}/g, ')');
}
results.push(tag);
}
return results;
})();
return tags.join(',');
};
Reference.prototype.enc_attachments = function(f) {
var a, att, attachments, errors, j, len, part, ref1, save;
if (!f.value || f.value.length === 0) {
return null;
}
attachments = [];
errors = [];
ref1 = f.value;
for (j = 0, len = ref1.length; j < len; j++) {
att = ref1[j];
a = {
title: att.title,
path: att.localPath,
mimetype: att.mimeType || ''
};
save = Translator.exportFileData && att.defaultPath && att.saveFile;
if (save) {
a.path = att.defaultPath;
}
if (!a.path) {
continue;
}
a.title || (a.title = att.path.replace(/.*[\\\/]/, '') || 'attachment');
if (a.path.match(/[{}]/)) {
errors.push("BibTeX cannot handle file paths with braces: " + (JSON.stringify(a.path)));
continue;
}
if (!a.mimetype && a.path.slice(-4).toLowerCase() === '.pdf') {
a.mimetype = 'application/pdf';
}
switch (false) {
case !save:
att.saveFile(a.path);
break;
case !Translator.testing:
Translator.attachmentCounter += 1;
a.path = "files/" + Translator.attachmentCounter + "/" + (att.localPath.replace(/.*[\/\\]/, ''));
break;
case !(Translator.exportPath && att.localPath.indexOf(Translator.exportPath) === 0):
a.path = att.localPath.slice(Translator.exportPath.length);
}
attachments.push(a);
}
if (errors.length !== 0) {
f.errors = errors;
}
if (attachments.length === 0) {
return null;
}
attachments.sort(function(a, b) {
if (a.mimetype === 'text/html' && b.mimetype !== 'text/html') {
return 1;
}
if (b.mimetype === 'text/html' && a.mimetype !== 'text/html') {
return -1;
}
return a.path.localeCompare(b.path);
});
if (Translator.attachmentsNoMetadata) {
return ((function() {
var l, len1, results;
results = [];
for (l = 0, len1 = attachments.length; l < len1; l++) {
att = attachments[l];
results.push(att.path.replace(/([\\{};])/g, "\\$1"));
}
return results;
})()).join(';');
}
return ((function() {
var l, len1, results;
results = [];
for (l = 0, len1 = attachments.length; l < len1; l++) {
att = attachments[l];
results.push(((function() {
var len2, m, ref2, results1;
ref2 = [att.title, att.path, att.mimetype];
results1 = [];
for (m = 0, len2 = ref2.length; m < len2; m++) {
part = ref2[m];
results1.push(part.replace(/([\\{}:;])/g, "\\$1"));
}
return results1;
})()).join(':'));
}
return results;
})()).join(';');
};
Reference.prototype.isBibVarRE = /^[a-z][a-z0-9_]*$/i;
Reference.prototype.isBibVar = function(value) {
return Translator.preserveBibTeXVariables && value && typeof value === 'string' && this.isBibVarRE.test(value);
};
/*
* Add a field to the reference field set
*
* @param {field} field to add. 'name' must be set, and either 'value' or 'bibtex'. If you set 'bibtex', BBT will trust
* you and just use that as-is. If you set 'value', BBT will escape the value according the encoder passed in 'enc'; no
* 'enc' means 'enc_latex'. If you pass both 'bibtex' and 'latex', 'bibtex' takes precedence (and 'value' will be
* ignored)
*/
Reference.prototype.add = function(field) {
var enc, ref1, value;
if (!field.bibtex) {
if (typeof field.value !== 'number' && !field.value) {
return;
}
if (typeof field.value === 'string' && field.value.trim() === '') {
return;
}
if (Array.isArray(field.value) && field.value.length === 0) {
return;
}
}
if (field.replace) {
this.remove(field.name);
}
if (this.has[field.name] && !field.allowDuplicates) {
throw "duplicate field '" + field.name + "' for " + this.item.__citekey__;
}
if (!field.bibtex) {
Translator.debug('add:', {
field: field,
preserve: Translator.preserveBibTeXVariables,
match: this.isBibVar(field.value)
});
if (typeof field.value === 'number' || (field.preserveBibTeXVariables && this.isBibVar(field.value))) {
value = field.value;
} else {
enc = field.enc || ((ref1 = Translator.fieldEncoding) != null ? ref1[field.name] : void 0) || 'latex';
value = this["enc_" + enc](field, (field.enc && field.enc !== 'creators' ? false : this.raw));
if (!value) {
return;
}
if (!(field.bare && !field.value.match(/\s/))) {
value = "{" + value + "}";
}
}
field.bibtex = "" + value;
}
if (this.normalize) {
field.bibtex = field.bibtex.normalize('NFKC');
}
this.fields.push(field);
return this.has[field.name] = field;
};
/*
* Remove a field from the reference field set
*
* @param {name} field to remove.
* @return {Object} the removed field, if present
*/
Reference.prototype.remove = function(name) {
var field, removed;
if (!this.has[name]) {
return;
}
removed = this.has[name];
delete this.has[name];
this.fields = (function() {
var j, len, ref1, results;
ref1 = this.fields;
results = [];
for (j = 0, len = ref1.length; j < len; j++) {
field = ref1[j];
if (field.name !== name) {
results.push(field);
}
}
return results;
}).call(this);
return removed;
};
Reference.prototype.normalize = typeof ''.normalize === 'function';
Reference.prototype.postscript = function() {};
Reference.prototype.complete = function() {
var autoCase, cslvar, err, error, field, fields, j, l, len, len1, mapped, name, raw, ref, ref1, ref2, ref3, value;
if (Translator.DOIandURL !== 'both') {
if (this.has.doi && this.has.url) {
switch (Translator.DOIandURL) {
case 'doi':
this.remove('url');
break;
case 'url':
this.remove('doi');
}
}
}
fields = [];
ref1 = this.override;
for (name in ref1) {
if (!hasProp.call(ref1, name)) continue;
value = ref1[name];
raw = ((ref2 = value.format) === 'naive' || ref2 === 'json');
if (name === 'referencetype') {
this.referencetype = value.value;
continue;
}
if (name === 'PMID' || name === 'PMCID') {
value.format = 'key-value';
name = name.toLowerCase();
}
if (value.format === 'csl') {
cslvar = Translator.CSLVariables[name];
mapped = cslvar[(Translator.BetterBibLaTeX ? 'BibLaTeX' : 'BibTeX')];
if (typeof mapped === 'function') {
mapped = mapped.call(this);
}
autoCase = name === 'title' || name === 'shorttitle' || name === 'origtitle' || name === 'booktitle' || name === 'maintitle';
if (mapped) {
fields.push({
name: mapped,
value: value.value,
autoCase: autoCase,
enc: (cslvar.type === 'creator' ? 'creators' : cslvar.type)
});
} else {
Translator.debug('Unmapped CSL field', name, '=', value.value);
}
} else {
switch (name) {
case 'mr':
fields.push({
name: 'mrnumber',
value: value.value,
raw: raw
});
break;
case 'zbl':
fields.push({
name: 'zmnumber',
value: value.value,
raw: raw
});
break;
case 'lccn':
case 'pmcid':
fields.push({
name: name,
value: value.value,
raw: raw
});
break;
case 'pmid':
case 'arxiv':
case 'jstor':
case 'hdl':
if (Translator.BetterBibLaTeX) {
fields.push({
name: 'eprinttype',
value: name.toLowerCase()
});
fields.push({
name: 'eprint',
value: value.value,
raw: raw
});
} else {
fields.push({
name: name,
value: value.value,
raw: raw
});
}
break;
case 'googlebooksid':
if (Translator.BetterBibLaTeX) {
fields.push({
name: 'eprinttype',
value: 'googlebooks'
});
fields.push({
name: 'eprint',
value: value.value,
raw: raw
});
} else {
fields.push({
name: 'googlebooks',
value: value.value,
raw: raw
});
}
break;
case 'xref':
fields.push({
name: name,
value: value.value,
enc: 'raw'
});
break;
default:
fields.push({
name: name,
value: value.value,
raw: raw
});
}
}
}
ref3 = Translator.skipFields;
for (j = 0, len = ref3.length; j < len; j++) {
name = ref3[j];
this.remove(name);
}
for (l = 0, len1 = fields.length; l < len1; l++) {
field = fields[l];
name = field.name.split('.');
if (name.length > 1) {
if (this.referencetype !== name[0]) {
continue;
}
field.name = name[1];
}
if ((typeof field.value === 'string') && field.value.trim() === '') {
this.remove(field.name);
continue;
}
if (Translator.BibLaTeXDataFieldMap[field.name]) {
field = this.clone(Translator.BibLaTeXDataFieldMap[field.name], field.value);
}
field.replace = true;
this.add(field);
}
if (this.fields.length === 0) {
this.add({
name: 'type',
value: this.referencetype
});
}
try {
this.postscript();
} catch (error) {
err = error;
Translator.debug('postscript error:', err.message);
}
if (Translator.testing) {
this.fields.sort(function(a, b) {
return (a.name + " = " + a.value).localeCompare(b.name + " = " + b.value);
});
}
ref = "@" + this.referencetype + "{" + this.item.__citekey__ + ",\n";
ref += ((function() {
var len2, m, ref4, results;
ref4 = this.fields;
results = [];
for (m = 0, len2 = ref4.length; m < len2; m++) {
field = ref4[m];
results.push(" " + field.name + " = " + field.bibtex);
}
return results;
}).call(this)).join(',\n');
ref += '\n}\n\n';
Zotero.write(ref);
if (Translator.caching) {
return Zotero.BetterBibTeX.cache.store(this.item.itemID, Translator, this.item.__citekey__, ref);
}
};
Reference.prototype.toVerbatim = function(text) {
var value;
if (Translator.BetterBibTeX) {
value = ('' + text).replace(/([#\\%&{}])/g, '\\$1');
} else {
value = ('' + text).replace(/([\\{}])/g, '\\$1');
}
if (!Translator.unicode) {
value = value.replace(/[^\x21-\x7E]/g, (function(chr) {
return '\\%' + ('00' + chr.charCodeAt(0).toString(16).slice(-2));
}));
}
return value;
};
Reference.prototype.hasCreator = function(type) {
return (this.item.creators || []).some(function(creator) {
return creator.creatorType === type;
});
};
return Reference;
})();
Language = new ((function() {
function _Class() {
var j, k, key, lang, len, ref1, ref2, v, value;
this.babelMap = {
af: 'afrikaans',
am: 'amharic',
ar: 'arabic',
ast: 'asturian',
bg: 'bulgarian',
bn: 'bengali',
bo: 'tibetan',
br: 'breton',
ca: 'catalan',
cop: 'coptic',
cy: 'welsh',
cz: 'czech',
da: 'danish',
de_1996: 'ngerman',
de_at_1996: 'naustrian',
de_at: 'austrian',
de_de_1996: 'ngerman',
de: ['german', 'germanb'],
dsb: ['lsorbian', 'lowersorbian'],
dv: 'divehi',
el: 'greek',
el_polyton: 'polutonikogreek',
en_au: 'australian',
en_ca: 'canadian',
en: 'english',
en_gb: ['british', 'ukenglish'],
en_nz: 'newzealand',
en_us: ['american', 'usenglish'],
eo: 'esperanto',
es: 'spanish',
et: 'estonian',
eu: 'basque',
fa: 'farsi',
fi: 'finnish',
fr_ca: ['acadian', 'canadian', 'canadien'],
fr: ['french', 'francais'],
fur: 'friulan',
ga: 'irish',
gd: ['scottish', 'gaelic'],
gl: 'galician',
he: 'hebrew',
hi: 'hindi',
hr: 'croatian',
hsb: ['usorbian', 'uppersorbian'],
hu: 'magyar',
hy: 'armenian',
ia: 'interlingua',
id: ['indonesian', 'bahasa', 'bahasai', 'indon', 'meyalu'],
is: 'icelandic',
it: 'italian',
ja: 'japanese',
kn: 'kannada',
la: 'latin',
lo: 'lao',
lt: 'lithuanian',
lv: 'latvian',
ml: 'malayalam',
mn: 'mongolian',
mr: 'marathi',
nb: ['norsk', 'bokmal'],
nl: 'dutch',
nn: 'nynorsk',
no: ['norwegian', 'norsk'],
oc: 'occitan',
pl: 'polish',
pms: 'piedmontese',
pt_br: ['brazil', 'brazilian'],
pt: ['portuguese', 'portuges'],
pt_pt: 'portuguese',
rm: 'romansh',
ro: 'romanian',
ru: 'russian',
sa: 'sanskrit',
se: 'samin',
sk: 'slovak',
sl: ['slovenian', 'slovene'],
sq_al: 'albanian',
sr_cyrl: 'serbianc',
sr_latn: 'serbian',
sr: 'serbian',
sv: 'swedish',
syr: 'syriac',
ta: 'tamil',
te: 'telugu',
th: ['thai', 'thaicjk'],
tk: 'turkmen',
tr: 'turkish',
uk: 'ukrainian',
ur: 'urdu',
vi: 'vietnamese',
zh_latn: 'pinyin',
zh: 'pinyin',
zlm: ['malay', 'bahasam', 'melayu']
};
ref1 = this.babelMap;
for (key in ref1) {
if (!hasProp.call(ref1, key)) continue;
value = ref1[key];
if (typeof value === 'string') {
this.babelMap[key] = [value];
}
}
this.babelList = [];
ref2 = this.babelMap;
for (k in ref2) {
if (!hasProp.call(ref2, k)) continue;
v = ref2[k];
for (j = 0, len = v.length; j < len; j++) {
lang = v[j];
if (this.babelList.indexOf(lang) < 0) {
this.babelList.push(lang);
}
}
}
this.cache = Object.create(null);
}
return _Class;
})());
Language.get_bigrams = function(string) {
var i, s;
s = string.toLowerCase();
s = (function() {
var j, ref1, results;
results = [];
for (i = j = 0, ref1 = s.length; 0 <= ref1 ? j < ref1 : j > ref1; i = 0 <= ref1 ? ++j : --j) {
results.push(s.slice(i, i + 2));
}
return results;
})();
s.sort();
return s;
};
Language.string_similarity = function(str1, str2) {
var hit_count, pairs1, pairs2, union;
pairs1 = this.get_bigrams(str1);
pairs2 = this.get_bigrams(str2);
union = pairs1.length + pairs2.length;
hit_count = 0;
while (pairs1.length > 0 && pairs2.length > 0) {
if (pairs1[0] === pairs2[0]) {
hit_count++;
pairs1.shift();
pairs2.shift();
continue;
}
if (pairs1[0] < pairs2[0]) {
pairs1.shift();
} else {
pairs2.shift();
}
}
return (2 * hit_count) / union;
};
Language.lookup = function(langcode) {
var j, lc, len, ref1;
if (!this.cache[langcode]) {
this.cache[langcode] = [];
ref1 = Language.babelList;
for (j = 0, len = ref1.length; j < len; j++) {
lc = ref1[j];
this.cache[langcode].push({
lang: lc,
sim: this.string_similarity(langcode, lc)
});
}
this.cache[langcode].sort(function(a, b) {
return b.sim - a.sim;
});
}
return this.cache[langcode];
};
// SOURCE: resource/translators/BetterBibTeXMarkupParser.js
BetterBibTeXMarkupParser = (function() {
"use strict";
/*
* Generated by PEG.js 0.9.0.
*
* http://pegjs.org/
*/
function peg$subclass(child, parent) {
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor();
}
function peg$SyntaxError(message, expected, found, location) {
this.message = message;
this.expected = expected;
this.found = found;
this.location = location;
this.name = "SyntaxError";
if (typeof Error.captureStackTrace === "function") {
Error.captureStackTrace(this, peg$SyntaxError);
}
}
peg$subclass(peg$SyntaxError, Error);
function peg$parse(input) {
var options = arguments.length > 1 ? arguments[1] : {},
parser = this,
peg$FAILED = {},
peg$startRuleFunctions = { start: peg$parsestart },
peg$startRuleFunction = peg$parsestart,
peg$c0 = function() {return options.preserveCaps},
peg$c1 = function(words, chunks) { return {html: words + chunks.join(''), plain: plain}; },
peg$c2 = function(chunks) { return {html: chunks.join(''), plain: plain}; },
peg$c3 = "<",
peg$c4 = { type: "literal", value: "<", description: "\"<\"" },
peg$c5 = "pre",
peg$c6 = { type: "literal", value: "pre", description: "\"pre\"" },
peg$c7 = /^[^>]/,
peg$c8 = { type: "class", value: "[^>]", description: "[^>]" },
peg$c9 = ">",
peg$c10 = { type: "literal", value: ">", description: "\">\"" },
peg$c11 = function() { state.pre = true; return add('<script>'); },
peg$c12 = "</pre>",
peg$c13 = { type: "literal", value: "</pre>", description: "\"</pre>\"" },
peg$c14 = function() { state.pre = false; return add('</script>'); },
peg$c15 = function() { return state.pre },
peg$c16 = { type: "any", description: "any character" },
peg$c17 = function(char) { return add(char, char); },
peg$c18 = "<span class=\"nocase\">",
peg$c19 = { type: "literal", value: "<span class=\"nocase\">", description: "\"<span class=\\\"nocase\\\">\"" },
peg$c20 = function() { state.nocase = true; return add('<span class="nocase">'); },
peg$c21 = "</span>",
peg$c22 = { type: "literal", value: "</span>", description: "\"</span>\"" },
peg$c23 = function() { state.nocase = false; return add('</span>'); },
peg$c24 = "/",
peg$c25 = { type: "literal", value: "/", description: "\"/\"" },
peg$c26 = function(close, tag, attrs) { return add('<' + (close ? '/' : '') + tag + (attrs ? attrs : '') + '>'); },
peg$c27 = "&",
peg$c28 = { type: "literal", value: "&", description: "\"&\"" },
peg$c29 = function() { return add('&amp;', '&') },
peg$c30 = function() { return add('&lt;', '<') },
peg$c31 = function() { return add('&gt;', '>') },
peg$c32 = function() {return options.preserveCaps && !state.nocase},
peg$c33 = function(words) { return words; },
peg$c34 = function() {return options.csquotes},
peg$c35 = function(char) {return options.csquotes.open.indexOf(char) >= 0},
peg$c36 = function(char, ws) { return add('<span enquote="true">', char + ws); },
peg$c37 = function(ws, char) {return options.csquotes.close.indexOf(char) >= 0},
peg$c38 = function(ws, char) { return add('</span>', ws + char); },
peg$c39 = function(char) { return add(char, char, true); },
peg$c40 = "i",
peg$c41 = { type: "literal", value: "i", description: "\"i\"" },
peg$c42 = "italic",
peg$c43 = { type: "literal", value: "italic", description: "\"italic\"" },
peg$c44 = "b",
peg$c45 = { type: "literal", value: "b", description: "\"b\"" },
peg$c46 = "sub",
peg$c47 = { type: "literal", value: "sub", description: "\"sub\"" },
peg$c48 = "sup",
peg$c49 = { type: "literal", value: "sup", description: "\"sup\"" },
peg$c50 = "sc",
peg$c51 = { type: "literal", value: "sc", description: "\"sc\"" },
peg$c52 = "span",
peg$c53 = { type: "literal", value: "span", description: "\"span\"" },
peg$c54 = /^[ \t\n\r\xA0]/,
peg$c55 = { type: "class", value: "[ \\t\\n\\r\\u00A0]", description: "[ \\t\\n\\r\\u00A0]" },
peg$c56 = function(w) { return w.join(''); },
peg$c57 = /^[\-= \t\n\r'"a-zA-Z]/,
peg$c58 = { type: "class", value: "[-= \\t\\n\\r'\"a-zA-Z]", description: "[-= \\t\\n\\r'\"a-zA-Z]" },
peg$c59 = function(ws, attrs) { return ws + attrs.join('') },
peg$c60 = function(word, others) { var text = word + others.join(''); return add('<span class="nocase">' + text + '</span>', text); },
peg$c61 = function(pre, lu, post) { return pre.join('') + lu + post.join('') },
peg$c62 = function(lu1, pre, lu2, post) { return lu1 + pre.join('') + lu2 + post.join('') },
peg$c63 = function(word, others) { var text = word.word + others.join(''); return add(word.boundary, word.boundary, true) + add('<span class="nocase">' + text + '</span>', text); },
peg$c64 = function(boundary, pre, lu, post) { return {boundary: boundary, word: pre.join('') + lu + post.join('') } },
peg$c65 = function(boundary, pre, lu, post) { return boundary + pre.join('') + lu + post.join(''); },
peg$c66 = /^[\-\u2013]/,
peg$c67 = { type: "class", value: "[-\u2013]", description: "[-\u2013]" },
peg$c68 = /^[a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]/,
peg$c69 = { type: "class", value: "[\\u0061-\\u007A\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137-\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148-\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C-\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA-\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9-\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC-\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF-\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F-\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0-\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB-\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE-\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0561-\\u0587\\u13F8-\\u13FD\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6-\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FC7\\u1FD0-\\u1FD3\\u1FD6-\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6-\\u1FF7\\u210A\\u210E-\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C-\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65-\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73-\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3-\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7B5\\uA7B7\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]", description: "[\\u0061-\\u007A\\u00B5\\u00DF-\\u00F6\\u00F8-\\u00FF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137-\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148-\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C-\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA-\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9-\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC-\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF-\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F-\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0-\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB-\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE-\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0561-\\u0587\\u13F8-\\u13FD\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6-\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FC7\\u1FD0-\\u1FD3\\u1FD6-\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6-\\u1FF7\\u210A\\u210E-\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C-\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65-\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73-\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3-\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7B5\\uA7B7\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]" },
peg$c70 = /^[\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F]/,
peg$c71 = { type: "class", value: "[\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5-\\u06E6\\u07F4-\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C-\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D-\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C-\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F8-\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3-\\uAAF4\\uAB5C-\\uAB5F\\uFF70\\uFF9E-\\uFF9F]", description: "[\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5-\\u06E6\\u07F4-\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C-\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D-\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C-\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F8-\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3-\\uAAF4\\uAB5C-\\uAB5F\\uFF70\\uFF9E-\\uFF9F]" },
peg$c72 = /^[\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
peg$c73 = { type: "class", value: "[\\u00AA\\u00BA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E45\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10D0-\\u10FA\\u10FD-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5-\\u1CF6\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A-\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]", description: "[\\u00AA\\u00BA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E45\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10D0-\\u10FA\\u10FD-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5-\\u1CF6\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A-\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]" },
peg$c74 = /^[\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC]/,
peg$c75 = { type: "class", value: "[\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC]", description: "[\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC]" },
peg$c76 = /^[A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A]/,
peg$c77 = { type: "class", value: "[\\u0041-\\u005A\\u00C0-\\u00D6\\u00D8-\\u00DE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178-\\u0179\\u017B\\u017D\\u0181-\\u0182\\u0184\\u0186-\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193-\\u0194\\u0196-\\u0198\\u019C-\\u019D\\u019F-\\u01A0\\u01A2\\u01A4\\u01A6-\\u01A7\\u01A9\\u01AC\\u01AE-\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7-\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A-\\u023B\\u023D-\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9-\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0-\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E-\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D-\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A]", description: "[\\u0041-\\u005A\\u00C0-\\u00D6\\u00D8-\\u00DE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178-\\u0179\\u017B\\u017D\\u0181-\\u0182\\u0184\\u0186-\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193-\\u0194\\u0196-\\u0198\\u019C-\\u019D\\u019F-\\u01A0\\u01A2\\u01A4\\u01A6-\\u01A7\\u01A9\\u01AC\\u01AE-\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7-\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A-\\u023B\\u023D-\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9-\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0-\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E-\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D-\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AD\\uA7B0-\\uA7B4\\uA7B6\\uFF21-\\uFF3A]" },
peg$c78 = /^[\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E-\u094F\u0982-\u0983\u09BE-\u09C0\u09C7-\u09C8\u09CB-\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB-\u0ACC\u0B02-\u0B03\u0B3E\u0B40\u0B47-\u0B48\u0B4B-\u0B4C\u0B57\u0BBE-\u0BBF\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82-\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82-\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2-\u0DF3\u0F3E-\u0F3F\u0F7F\u102B-\u102C\u1031\u1038\u103B-\u103C\u1056-\u1057\u1062-\u1064\u1067-\u106D\u1083-\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7-\u17C8\u1923-\u1926\u1929-\u192B\u1930-\u1931\u1933-\u1938\u1A19-\u1A1A\u1A55\u1A57\u1A61\u1A63-\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B44\u1B82\u1BA1\u1BA6-\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2-\u1BF3\u1C24-\u1C2B\u1C34-\u1C35\u1CE1\u1CF2-\u1CF3\u302E-\u302F\uA823-\uA824\uA827\uA880-\uA881\uA8B4-\uA8C3\uA952-\uA953\uA983\uA9B4-\uA9B5\uA9BA-\uA9BB\uA9BD-\uA9C0\uAA2F-\uAA30\uAA33-\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE-\uAAEF\uAAF5\uABE3-\uABE4\uABE6-\uABE7\uABE9-\uABEA\uABEC]/,
peg$c79 = { type: "class", value: "[\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F\\u0982-\\u0983\\u09BE-\\u09C0\\u09C7-\\u09C8\\u09CB-\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB-\\u0ACC\\u0B02-\\u0B03\\u0B3E\\u0B40\\u0B47-\\u0B48\\u0B4B-\\u0B4C\\u0B57\\u0BBE-\\u0BBF\\u0BC1-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82-\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7-\\u0CC8\\u0CCA-\\u0CCB\\u0CD5-\\u0CD6\\u0D02-\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82-\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0F3E-\\u0F3F\\u0F7F\\u102B-\\u102C\\u1031\\u1038\\u103B-\\u103C\\u1056-\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083-\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7-\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930-\\u1931\\u1933-\\u1938\\u1A19-\\u1A1A\\u1A55\\u1A57\\u1A61\\u1A63-\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43-\\u1B44\\u1B82\\u1BA1\\u1BA6-\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2-\\u1BF3\\u1C24-\\u1C2B\\u1C34-\\u1C35\\u1CE1\\u1CF2-\\u1CF3\\u302E-\\u302F\\uA823-\\uA824\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C3\\uA952-\\uA953\\uA983\\uA9B4-\\uA9B5\\uA9BA-\\uA9BB\\uA9BD-\\uA9C0\\uAA2F-\\uAA30\\uAA33-\\uAA34\\uAA4D\\uAA7B\\uAA7D\\uAAEB\\uAAEE-\\uAAEF\\uAAF5\\uABE3-\\uABE4\\uABE6-\\uABE7\\uABE9-\\uABEA\\uABEC]", description: "[\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F\\u0982-\\u0983\\u09BE-\\u09C0\\u09C7-\\u09C8\\u09CB-\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB-\\u0ACC\\u0B02-\\u0B03\\u0B3E\\u0B40\\u0B47-\\u0B48\\u0B4B-\\u0B4C\\u0B57\\u0BBE-\\u0BBF\\u0BC1-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82-\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7-\\u0CC8\\u0CCA-\\u0CCB\\u0CD5-\\u0CD6\\u0D02-\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82-\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0F3E-\\u0F3F\\u0F7F\\u102B-\\u102C\\u1031\\u1038\\u103B-\\u103C\\u1056-\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083-\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7-\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930-\\u1931\\u1933-\\u1938\\u1A19-\\u1A1A\\u1A55\\u1A57\\u1A61\\u1A63-\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43-\\u1B44\\u1B82\\u1BA1\\u1BA6-\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2-\\u1BF3\\u1C24-\\u1C2B\\u1C34-\\u1C35\\u1CE1\\u1CF2-\\u1CF3\\u302E-\\u302F\\uA823-\\uA824\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C3\\uA952-\\uA953\\uA983\\uA9B4-\\uA9B5\\uA9BA-\\uA9BB\\uA9BD-\\uA9C0\\uAA2F-\\uAA30\\uAA33-\\uAA34\\uAA4D\\uAA7B\\uAA7D\\uAAEB\\uAAEE-\\uAAEF\\uAAF5\\uABE3-\\uABE4\\uABE6-\\uABE7\\uABE9-\\uABEA\\uABEC]" },
peg$c80 = /^[\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962-\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2-\u09E3\u0A01-\u0A02\u0A3C\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A70-\u0A71\u0A75\u0A81-\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7-\u0AC8\u0ACD\u0AE2-\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62-\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC-\u0CCD\u0CE2-\u0CE3\u0D01\u0D41-\u0D44\u0D4D\u0D62-\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86-\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8-\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8-\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099-\u309A\uA66F\uA674-\uA67D\uA69E-\uA69F\uA6F0-\uA6F1\uA802\uA806\uA80B\uA825-\uA826\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uAAEC-\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/,
peg$c81 = { type: "class", value: "[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2-\\u09E3\\u0A01-\\u0A02\\u0A3C\\u0A41-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70-\\u0A71\\u0A75\\u0A81-\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7-\\u0AC8\\u0ACD\\u0AE2-\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62-\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C00\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56\\u0C62-\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC6\\u0CCC-\\u0CCD\\u0CE2-\\u0CE3\\u0D01\\u0D41-\\u0D44\\u0D4D\\u0D62-\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB-\\u0EBC\\u0EC8-\\u0ECD\\u0F18-\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039-\\u103A\\u103D-\\u103E\\u1058-\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085-\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B4-\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193B\\u1A17-\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80-\\u1B81\\u1BA2-\\u1BA5\\u1BA8-\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8-\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8-\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099-\\u309A\\uA66F\\uA674-\\uA67D\\uA69E-\\uA69F\\uA6F0-\\uA6F1\\uA802\\uA806\\uA80B\\uA825-\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9E5\\uAA29-\\uAA2E\\uAA31-\\uAA32\\uAA35-\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7-\\uAAB8\\uAABE-\\uAABF\\uAAC1\\uAAEC-\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]", description: "[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2-\\u09E3\\u0A01-\\u0A02\\u0A3C\\u0A41-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70-\\u0A71\\u0A75\\u0A81-\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7-\\u0AC8\\u0ACD\\u0AE2-\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62-\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C00\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56\\u0C62-\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC6\\u0CCC-\\u0CCD\\u0CE2-\\u0CE3\\u0D01\\u0D41-\\u0D44\\u0D4D\\u0D62-\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB-\\u0EBC\\u0EC8-\\u0ECD\\u0F18-\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039-\\u103A\\u103D-\\u103E\\u1058-\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085-\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B4-\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193B\\u1A17-\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80-\\u1B81\\u1BA2-\\u1BA5\\u1BA8-\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8-\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8-\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099-\\u309A\\uA66F\\uA674-\\uA67D\\uA69E-\\uA69F\\uA6F0-\\uA6F1\\uA802\\uA806\\uA80B\\uA825-\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9E5\\uAA29-\\uAA2E\\uAA31-\\uAA32\\uAA35-\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7-\\uAAB8\\uAABE-\\uAABF\\uAAC1\\uAAEC-\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]" },
peg$c82 = /^[0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]/,
peg$c83 = { type: "class", value: "[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]", description: "[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]" },
peg$c84 = /^[\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF]/,
peg$c85 = { type: "class", value: "[\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF]", description: "[\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF]" },
peg$currPos = 0,
peg$savedPos = 0,
peg$posDetailsCache = [{ line: 1, column: 1, seenCR: false }],
peg$maxFailPos = 0,
peg$maxFailExpected = [],
peg$silentFails = 0,
peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function text() {
return input.substring(peg$savedPos, peg$currPos);
}
function location() {
return peg$computeLocation(peg$savedPos, peg$currPos);
}
function expected(description) {
throw peg$buildException(
null,
[{ type: "other", description: description }],
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function error(message) {
throw peg$buildException(
message,
null,
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos],
p, ch;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column,
seenCR: details.seenCR
};
while (p < pos) {
ch = input.charAt(p);
if (ch === "\n") {
if (!details.seenCR) { details.line++; }
details.column = 1;
details.seenCR = false;
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
details.line++;
details.column = 1;
details.seenCR = true;
} else {
details.column++;
details.seenCR = false;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos) {
var startPosDetails = peg$computePosDetails(startPos),
endPosDetails = peg$computePosDetails(endPos);
return {
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
}
function peg$fail(expected) {
if (peg$currPos < peg$maxFailPos) { return; }
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected);
}
function peg$buildException(message, expected, found, location) {
function cleanupExpected(expected) {
var i = 1;
expected.sort(function(a, b) {
if (a.description < b.description) {
return -1;
} else if (a.description > b.description) {
return 1;
} else {
return 0;
}
});
while (i < expected.length) {
if (expected[i - 1] === expected[i]) {
expected.splice(i, 1);
} else {
i++;
}
}
}
function buildMessage(expected, found) {
function stringEscape(s) {
function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
return s
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\x08/g, '\\b')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\f/g, '\\f')
.replace(/\r/g, '\\r')
.replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
.replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
.replace(/[\u0100-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
.replace(/[\u1000-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
}
var expectedDescs = new Array(expected.length),
expectedDesc, foundDesc, i;
for (i = 0; i < expected.length; i++) {
expectedDescs[i] = expected[i].description;
}
expectedDesc = expected.length > 1
? expectedDescs.slice(0, -1).join(", ")
+ " or "
+ expectedDescs[expected.length - 1]
: expectedDescs[0];
foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
return "Expected " + expectedDesc + " but " + foundDesc + " found.";
}
if (expected !== null) {
cleanupExpected(expected);
}
return new peg$SyntaxError(
message !== null ? message : buildMessage(expected, found),
expected,
found,
location
);
}
function peg$parsestart() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c0();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parseleadingProtectedWords();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parsechunk();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parsechunk();
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c1(s2, s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parsechunk();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsechunk();
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c2(s1);
}
s0 = s1;
}
return s0;
}
function peg$parsechunk() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 60) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 3).toLowerCase() === peg$c5) {
s2 = input.substr(peg$currPos, 3);
peg$currPos += 3;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
s4 = peg$parse_();
if (s4 !== peg$FAILED) {
s5 = [];
if (peg$c7.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c8); }
}
while (s6 !== peg$FAILED) {
s5.push(s6);
if (peg$c7.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c8); }
}
}
if (s5 !== peg$FAILED) {
s4 = [s4, s5];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = null;
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 62) {
s4 = peg$c9;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c11();
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 6).toLowerCase() === peg$c12) {
s1 = input.substr(peg$currPos, 6);
peg$currPos += 6;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c13); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c14();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c15();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c17(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 21) === peg$c18) {
s1 = peg$c18;
peg$currPos += 21;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c19); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c20();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 7) === peg$c21) {
s1 = peg$c21;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c22); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c23();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 60) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 47) {
s2 = peg$c24;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c25); }
}
if (s2 === peg$FAILED) {
s2 = null;
}
if (s2 !== peg$FAILED) {
s3 = peg$parsemarkup();
if (s3 !== peg$FAILED) {
s4 = peg$parseattributes();
if (s4 === peg$FAILED) {
s4 = null;
}
if (s4 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 62) {
s5 = peg$c9;
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c26(s2, s3, s4);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 38) {
s1 = peg$c27;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c28); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c29();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 60) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c30();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 62) {
s1 = peg$c9;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c31();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c32();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parseprotectedWords();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c33(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c34();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s3 = peg$c35(s2);
if (s3) {
s3 = void 0;
} else {
s3 = peg$FAILED;
}
if (s3 !== peg$FAILED) {
s4 = peg$parse_();
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c36(s2, s4);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c34();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parse_();
if (s2 !== peg$FAILED) {
if (input.length > peg$currPos) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s4 = peg$c37(s2, s3);
if (s4) {
s4 = void 0;
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c38(s2, s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c39(s1);
}
s0 = s1;
}
}
}
}
}
}
}
}
}
}
}
}
return s0;
}
function peg$parsemarkup() {
var s0;
if (input.substr(peg$currPos, 1).toLowerCase() === peg$c40) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c41); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 6).toLowerCase() === peg$c42) {
s0 = input.substr(peg$currPos, 6);
peg$currPos += 6;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c43); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 1).toLowerCase() === peg$c44) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c45); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 3).toLowerCase() === peg$c46) {
s0 = input.substr(peg$currPos, 3);
peg$currPos += 3;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 3).toLowerCase() === peg$c48) {
s0 = input.substr(peg$currPos, 3);
peg$currPos += 3;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c49); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 2).toLowerCase() === peg$c50) {
s0 = input.substr(peg$currPos, 2);
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c51); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 4).toLowerCase() === peg$c52) {
s0 = input.substr(peg$currPos, 4);
peg$currPos += 4;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
}
}
}
}
}
}
return s0;
}
function peg$parse_() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c54.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c54.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c55); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c56(s1);
}
s0 = s1;
return s0;
}
function peg$parseattributes() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parse_();
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c57.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c58); }
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c57.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c58); }
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c59(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseleadingProtectedWords() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parseleadingProtectedWord();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsemoreProtectedWord();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsemoreProtectedWord();
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c60(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseleadingProtectedWord() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = [];
s2 = peg$parseNonLu();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parseNonLu();
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parseLu();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parseWordChar();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parseWordChar();
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c61(s1, s2, s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseLu();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseNonLu();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseNonLu();
}
if (s2 !== peg$FAILED) {
s3 = peg$parseLu();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parseWordChar();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parseWordChar();
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c62(s1, s2, s3, s4);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseprotectedWords() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parseprotectedWord();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsemoreProtectedWord();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsemoreProtectedWord();
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c63(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseprotectedWord() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
s2 = peg$parseWordChar();
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parseNonLu();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parseNonLu();
}
if (s3 !== peg$FAILED) {
s4 = peg$parseLu();
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parseWordChar();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parseWordChar();
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c64(s2, s3, s4, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsemoreProtectedWord() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
s1 = peg$parsempwBoundary();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseNonLu();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseNonLu();
}
if (s2 !== peg$FAILED) {
s3 = peg$parseLu();
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parseWordChar();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parseWordChar();
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c65(s1, s2, s3, s4);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsempwBoundary() {
var s0;
s0 = peg$parse_();
if (s0 === peg$FAILED) {
if (peg$c66.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c67); }
}
}
return s0;
}
function peg$parseWordChar() {
var s0;
s0 = peg$parseLu();
if (s0 === peg$FAILED) {
s0 = peg$parseNonLu();
}
return s0;
}
function peg$parseNonLu() {
var s0;
s0 = peg$parseLl();
if (s0 === peg$FAILED) {
s0 = peg$parseLt();
if (s0 === peg$FAILED) {
s0 = peg$parseLm();
if (s0 === peg$FAILED) {
s0 = peg$parseLo();
if (s0 === peg$FAILED) {
s0 = peg$parseNl();
if (s0 === peg$FAILED) {
s0 = peg$parseMn();
if (s0 === peg$FAILED) {
s0 = peg$parseMc();
if (s0 === peg$FAILED) {
s0 = peg$parseNd();
}
}
}
}
}
}
}
return s0;
}
function peg$parseLl() {
var s0;
if (peg$c68.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c69); }
}
return s0;
}
function peg$parseLm() {
var s0;
if (peg$c70.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c71); }
}
return s0;
}
function peg$parseLo() {
var s0;
if (peg$c72.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c73); }
}
return s0;
}
function peg$parseLt() {
var s0;
if (peg$c74.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c75); }
}
return s0;
}
function peg$parseLu() {
var s0;
if (peg$c76.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
return s0;
}
function peg$parseMc() {
var s0;
if (peg$c78.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c79); }
}
return s0;
}
function peg$parseMn() {
var s0;
if (peg$c80.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c81); }
}
return s0;
}
function peg$parseNd() {
var s0;
if (peg$c82.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c83); }
}
return s0;
}
function peg$parseNl() {
var s0;
if (peg$c84.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c85); }
}
return s0;
}
options = options || {};
var pre = [];
var state = {
pre: false,
nocase: false
};
// input.charAt(peg$currPos)
var plain = {
text: '',
output: 0,
unprotected: {}
};
function add(html, text, mark) {
if (!options.titleCase) { return html; }
if (mark && !state.nocase) {
for (var i = 0; i < text.length; i++) {
plain.unprotected[plain.output + i] = plain.text.length + i;
}
}
if (text) { plain.text += text; }
plain.output += html.length;
return html;
}
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail({ type: "end", description: "end of input" });
}
throw peg$buildException(
null,
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length
? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)
: peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
})();
// SOURCE: resource/translators/unicode_translator.js
// Generated by CoffeeScript 1.10.0
var LaTeX;
if (!LaTeX) {
LaTeX = {};
}
LaTeX.text2latex = function(text, options) {
var latex;
if (options == null) {
options = {};
}
latex = this.html2latex(this.cleanHTML(text, options), options);
if (latex.indexOf("\\{") >= 0 || latex.indexOf("\\textleftbrace") >= 0 || latex.indexOf("\\}") >= 0 || latex.indexOf("\\textrightbrace") >= 0) {
latex = BetterBibTeXBraceBalancer.parse(latex);
}
return latex;
};
LaTeX.titleCase = function(string) {
/*
* Force a word to lowercase if all of the following apply
* 1. It is not the first word of the sentence, as smallwords at the start should be uppercased
* 2. It is not the last word of the sentence (similar)
* 3. It is a smallWord
* 4. There is not a ':' two positions before the word (indicates subtitle)
* 5. There is either not a dash immediately after the word, or there is a dash immediately preceding the word
* 6. There is a space or a dash before the word
* [0-9a-z\xD7\xDF-\xFF] = -Lu
*/
return string.replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g, function(match, index, title) {
if (index > 0 && index + match.length !== title.length && match.search(Translator.titleCaseLowerCase) === 0 && title.charAt(index - 2) !== ':' && (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && title.charAt(index - 1).search(/[^"'(\s-]/) < 0) {
Translator.debug('titleCase: LC', match);
return match;
}
if (match.search(Translator.titleCaseUpperCase) === 0) {
Translator.debug('titleCase: UC', match);
return match;
}
/*
* leave a word alone if it has an uppercase letter at the second position,
* or the second character is a period followed by anything
*/
if (match.substr(1).search(/[A-Z]|\../) > -1) {
Translator.debug('titleCase: NC', match);
return match;
}
/* uppercase */
Translator.debug('titleCase: TC', match);
return match.charAt(0).toUpperCase() + match.substr(1);
});
};
LaTeX.cleanHTML = function(text, options) {
var _html, c, html, i, j, len, plain, ref, titleCased;
ref = BetterBibTeXMarkupParser.parse(text, {
titleCase: options.autoCase && Translator.titleCase,
preserveCaps: options.autoCase,
csquotes: Translator.csquotes
}), html = ref.html, plain = ref.plain;
if (options.autoCase && Translator.titleCase) {
Translator.debug('TITLECASE:>', plain.text);
titleCased = this.titleCase(plain.text);
Translator.debug('TITLECASE:<', titleCased);
_html = '';
for (i = j = 0, len = html.length; j < len; i = ++j) {
c = html[i];
if (plain.unprotected[i] !== void 0) {
_html += titleCased[plain.unprotected[i]];
} else {
_html += c;
}
}
html = _html;
}
return html;
};
LaTeX.html2latex = function(html, options) {
var latex;
latex = (new this.HTML(html, options)).latex;
latex = latex.replace(/(\\\\)+\s*\n\n/g, "\n\n");
latex = latex.replace(/\n\n\n+/g, "\n\n");
return latex;
};
LaTeX.HTML = (function() {
function HTML(html, options1) {
this.options = options1 != null ? options1 : {};
this.latex = '';
this.mapping = (Translator.unicode ? LaTeX.toLaTeX.unicode : LaTeX.toLaTeX.ascii);
this.stack = [];
this.preserveCase = 0;
this.walk(Zotero.BetterBibTeX.HTMLParser(html));
}
HTML.prototype.walk = function(tag) {
var child, j, len, ref, ref1, ref2;
if (!tag) {
return;
}
switch (tag.name) {
case '#text':
this.chars(tag.text);
return;
case 'script':
this.latex += tag.text;
return;
}
this.stack.unshift(tag);
switch (tag.name) {
case 'i':
case 'em':
case 'italic':
if (this.options.autoCase && !this.preserveCase) {
this.latex += '{';
}
this.latex += '\\emph{';
break;
case 'b':
case 'strong':
if (this.options.autoCase && !this.preserveCase) {
this.latex += '{';
}
this.latex += '\\textbf{';
break;
case 'a':
/* zotero://open-pdf/0_5P2KA4XM/7 is actually a reference. */
if (((ref = tag.attrs.href) != null ? ref.length : void 0) > 0) {
this.latex += "\\href{" + tag.attrs.href + "}{";
}
break;
case 'sup':
if (this.options.autoCase && !this.preserveCase) {
this.latex += '{';
}
this.latex += '\\textsuperscript{';
break;
case 'sub':
if (this.options.autoCase && !this.preserveCase) {
this.latex += '{';
}
this.latex += '\\textsubscript{';
break;
case 'br':
/* line-breaks on empty line makes LaTeX sad */
if (this.latex !== '' && this.latex[this.latex.length - 1] !== "\n") {
this.latex += "\\\\";
}
this.latex += "\n";
break;
case 'p':
case 'div':
case 'table':
case 'tr':
this.latex += "\n\n";
break;
case 'h1':
case 'h2':
case 'h3':
case 'h4':
this.latex += "\n\n\\" + ((new Array(parseInt(tag.name[1]))).join('sub')) + "section{";
break;
case 'ol':
this.latex += "\n\n\\begin{enumerate}\n";
break;
case 'ul':
this.latex += "\n\n\\begin{itemize}\n";
break;
case 'li':
this.latex += "\n\\item ";
break;
case 'span':
case 'sc':
tag.smallcaps = tag.name === 'sc' || (tag.attrs.style || '').match(/small-caps/i);
tag.enquote = tag.attrs.enquote === 'true';
tag.relax = tag["class"].relax;
if (tag["class"].nocase) {
this.preserveCase += 1;
}
if (tag["class"].nocase && this.preserveCase === 1) {
this.latex += '{{';
}
if (this.options.autoCase && !this.preserveCase && (tag.relax || tag.enquote || tag.smallcaps)) {
this.latex += '{';
}
if (tag.enquote) {
this.latex += '\\enquote{';
}
if (tag.smallcaps) {
this.latex += '\\textsc{';
}
if (tag.relax) {
this.latex += '{\\relax ';
}
break;
case 'td':
case 'th':
this.latex += ' ';
break;
case 'tbody':
case '#document':
case 'html':
case 'head':
case 'body':
break;
default:
Translator.debug("unexpected tag '" + tag.name + "'");
}
ref1 = tag.children;
for (j = 0, len = ref1.length; j < len; j++) {
child = ref1[j];
this.walk(child);
}
switch (tag.name) {
case 'i':
case 'italic':
case 'em':
this.latex += '}';
if (this.options.autoCase && !this.preserveCase) {
this.latex += '}';
}
break;
case 'sup':
case 'sub':
case 'b':
case 'strong':
this.latex += '}';
if (this.options.autoCase && !this.preserveCase) {
this.latex += '}';
}
break;
case 'a':
if (((ref2 = tag.attrs.href) != null ? ref2.length : void 0) > 0) {
this.latex += '}';
}
break;
case 'h1':
case 'h2':
case 'h3':
case 'h4':
this.latex += "}\n\n";
break;
case 'p':
case 'div':
case 'table':
case 'tr':
this.latex += "\n\n";
break;
case 'span':
case 'sc':
if (tag.smallcaps) {
this.latex += '}';
}
if (tag.enquote) {
this.latex += '}';
}
if (tag.relax) {
this.latex += '}';
}
if (this.options.autoCase && !this.preserveCase && (tag.relax || tag.smallcaps || tag.enquote)) {
this.latex += '}';
}
if (tag["class"].nocase && this.options.autoCase && this.preserveCase === 1) {
this.latex += '}}';
}
if (tag["class"].nocase) {
this.preserveCase -= 1;
}
break;
case 'td':
case 'th':
this.latex += ' ';
break;
case 'ol':
this.latex += "\n\n\\end{enumerate}\n";
break;
case 'ul':
this.latex += "\n\n\\end{itemize}\n";
}
return this.stack.shift();
};
HTML.prototype.chars = function(text) {
var block, blocks, c, j, k, len, math, ref, results;
blocks = [];
ref = XRegExp.split(text, '');
for (j = 0, len = ref.length; j < len; j++) {
c = ref[j];
math = this.mapping.math[c];
if (blocks.length === 0 || blocks[0].math !== !!math) {
blocks.unshift({
math: !!math,
text: ''
});
}
blocks[0].text += math || this.mapping.text[c] || c;
}
results = [];
for (k = blocks.length - 1; k >= 0; k += -1) {
block = blocks[k];
if (block.math) {
if (block.text.match(/^{[^{}]*}$/)) {
results.push(this.latex += "\\ensuremath" + block.text);
} else {
results.push(this.latex += "\\ensuremath{" + block.text + "}");
}
} else {
results.push(this.latex += block.text);
}
}
return results;
};
return HTML;
})();
// SOURCE: resource/translators/latex_unicode_mapping.js
// Generated by CoffeeScript 1.10.0
var LaTeX;
if (!LaTeX) {
LaTeX = {};
}
LaTeX.toLaTeX = {
unicode: {},
ascii: {}
};
LaTeX.toLaTeX.unicode.math = {
'<': "<",
'>': ">",
'\\': "\\backslash"
};
LaTeX.toLaTeX.unicode.text = {
'#': "\\#",
'$': "{\\textdollar}",
'%': "\\%",
'&': "\\&",
'[': "{[}",
'^': "\\^{}",
'_': "\\_",
'{': "\\{",
'}': "\\}",
'~': "{\\textasciitilde}",
'\u00A0': "~"
};
LaTeX.toLaTeX.ascii.math = {
'<': "<",
'>': ">",
'\\': "\\backslash",
'\u00AC': "{\\lnot}",
'\u00AD': "\\-",
'\u00B1': "{\\pm}",
'\u00B2': "{^2}",
'\u00B3': "{^3}",
'\u00B5': "\\mathrm{\\mu}",
'\u00B7': "{\\cdot}",
'\u00B9': "{^1}",
'\u00F7': "{\\div}",
'\u0127': "{\\Elzxh}",
'\u0192': "f",
'\u01AA': "{\\eth}",
'\u0250': "{\\Elztrna}",
'\u0252': "{\\Elztrnsa}",
'\u0254': "{\\Elzopeno}",
'\u0256': "{\\Elzrtld}",
'\u0259': "{\\Elzschwa}",
'\u025B': "{\\varepsilon}",
'\u0263': "{\\Elzpgamma}",
'\u0264': "{\\Elzpbgam}",
'\u0265': "{\\Elztrnh}",
'\u026C': "{\\Elzbtdl}",
'\u026D': "{\\Elzrtll}",
'\u026F': "{\\Elztrnm}",
'\u0270': "{\\Elztrnmlr}",
'\u0271': "{\\Elzltlmr}",
'\u0273': "{\\Elzrtln}",
'\u0277': "{\\Elzclomeg}",
'\u0279': "{\\Elztrnr}",
'\u027A': "{\\Elztrnrl}",
'\u027B': "{\\Elzrttrnr}",
'\u027C': "{\\Elzrl}",
'\u027D': "{\\Elzrtlr}",
'\u027E': "{\\Elzfhr}",
'\u0282': "{\\Elzrtls}",
'\u0283': "{\\Elzesh}",
'\u0287': "{\\Elztrnt}",
'\u0288': "{\\Elzrtlt}",
'\u028A': "{\\Elzpupsil}",
'\u028B': "{\\Elzpscrv}",
'\u028C': "{\\Elzinvv}",
'\u028D': "{\\Elzinvw}",
'\u028E': "{\\Elztrny}",
'\u0290': "{\\Elzrtlz}",
'\u0292': "{\\Elzyogh}",
'\u0294': "{\\Elzglst}",
'\u0295': "{\\Elzreglst}",
'\u0296': "{\\Elzinglst}",
'\u02A4': "{\\Elzdyogh}",
'\u02A7': "{\\Elztesh}",
'\u02C8': "{\\Elzverts}",
'\u02CC': "{\\Elzverti}",
'\u02D0': "{\\Elzlmrk}",
'\u02D1': "{\\Elzhlmrk}",
'\u02D2': "{\\Elzsbrhr}",
'\u02D3': "{\\Elzsblhr}",
'\u02D4': "{\\Elzrais}",
'\u02D5': "{\\Elzlow}",
'\u0321': "{\\Elzpalh}",
'\u032A': "{\\Elzsbbrg}",
'\u038E': "\\mathrm{'Y}",
'\u038F': "\\mathrm{'\\Omega}",
'\u0390': "\\acute{\\ddot{\\iota}}",
'\u0391': "{\\Alpha}",
'\u0392': "{\\Beta}",
'\u0393': "{\\Gamma}",
'\u0394': "{\\Delta}",
'\u0395': "{\\Epsilon}",
'\u0396': "{\\Zeta}",
'\u0397': "{\\Eta}",
'\u0398': "{\\Theta}",
'\u0399': "{\\Iota}",
'\u039A': "{\\Kappa}",
'\u039B': "{\\Lambda}",
'\u039C': "M",
'\u039D': "N",
'\u039E': "{\\Xi}",
'\u039F': "O",
'\u03A0': "{\\Pi}",
'\u03A1': "{\\Rho}",
'\u03A3': "{\\Sigma}",
'\u03A4': "{\\Tau}",
'\u03A5': "{\\Upsilon}",
'\u03A6': "{\\Phi}",
'\u03A7': "{\\Chi}",
'\u03A8': "{\\Psi}",
'\u03A9': "{\\Omega}",
'\u03AA': "\\mathrm{\\ddot{I}}",
'\u03AB': "\\mathrm{\\ddot{Y}}",
'\u03AD': "\\acute{\\epsilon}",
'\u03AE': "\\acute{\\eta}",
'\u03AF': "\\acute{\\iota}",
'\u03B0': "\\acute{\\ddot{\\upsilon}}",
'\u03B1': "{\\alpha}",
'\u03B2': "{\\beta}",
'\u03B3': "{\\gamma}",
'\u03B4': "{\\delta}",
'\u03B5': "{\\epsilon}",
'\u03B6': "{\\zeta}",
'\u03B7': "{\\eta}",
'\u03B9': "{\\iota}",
'\u03BA': "{\\kappa}",
'\u03BB': "{\\lambda}",
'\u03BC': "{\\mu}",
'\u03BD': "{\\nu}",
'\u03BE': "{\\xi}",
'\u03BF': "o",
'\u03C0': "{\\pi}",
'\u03C1': "{\\rho}",
'\u03C2': "{\\varsigma}",
'\u03C3': "{\\sigma}",
'\u03C4': "{\\tau}",
'\u03C5': "{\\upsilon}",
'\u03C6': "{\\varphi}",
'\u03C7': "{\\chi}",
'\u03C8': "{\\psi}",
'\u03C9': "{\\omega}",
'\u03CA': "\\ddot{\\iota}",
'\u03CB': "\\ddot{\\upsilon}",
'\u03CD': "\\acute{\\upsilon}",
'\u03CE': "\\acute{\\omega}",
'\u03D2': "{\\Upsilon}",
'\u03D5': "{\\phi}",
'\u03D6': "{\\varpi}",
'\u03DA': "{\\Stigma}",
'\u03DC': "{\\Digamma}",
'\u03DD': "{\\digamma}",
'\u03DE': "{\\Koppa}",
'\u03E0': "{\\Sampi}",
'\u03F0': "{\\varkappa}",
'\u03F1': "{\\varrho}",
'\u03F6': "{\\backepsilon}",
'\u200A': "{\\mkern1mu}",
'\u2016': "{\\Vert}",
'\u201B': "{\\Elzreapos}",
'\u2032': "{'}",
'\u2033': "{''}",
'\u2034': "{'''}",
'\u2035': "{\\backprime}",
'\u2057': "''''",
'\u20DB': "{\\dddot}",
'\u20DC': "{\\ddddot}",
'\u2102': "\\mathbb{C}",
'\u210B': "\\mathscr{H}",
'\u210C': "\\mathfrak{H}",
'\u210D': "\\mathbb{H}",
'\u210F': "{\\hslash}",
'\u2110': "\\mathscr{I}",
'\u2111': "\\mathfrak{I}",
'\u2112': "\\mathscr{L}",
'\u2113': "\\mathscr{l}",
'\u2115': "\\mathbb{N}",
'\u2118': "{\\wp}",
'\u2119': "\\mathbb{P}",
'\u211A': "\\mathbb{Q}",
'\u211B': "\\mathscr{R}",
'\u211C': "\\mathfrak{R}",
'\u211D': "\\mathbb{R}",
'\u211E': "{\\Elzxrat}",
'\u2124': "\\mathbb{Z}",
'\u2126': "{\\Omega}",
'\u2127': "{\\mho}",
'\u2128': "\\mathfrak{Z}",
'\u2129': "\\ElsevierGlyph{2129}",
'\u212C': "\\mathscr{B}",
'\u212D': "\\mathfrak{C}",
'\u212F': "\\mathscr{e}",
'\u2130': "\\mathscr{E}",
'\u2131': "\\mathscr{F}",
'\u2133': "\\mathscr{M}",
'\u2134': "\\mathscr{o}",
'\u2135': "{\\aleph}",
'\u2136': "{\\beth}",
'\u2137': "{\\gimel}",
'\u2138': "{\\daleth}",
'\u2153': "\\textfrac{1}{3}",
'\u2154': "\\textfrac{2}{3}",
'\u2155': "\\textfrac{1}{5}",
'\u2156': "\\textfrac{2}{5}",
'\u2157': "\\textfrac{3}{5}",
'\u2158': "\\textfrac{4}{5}",
'\u2159': "\\textfrac{1}{6}",
'\u215A': "\\textfrac{5}{6}",
'\u215B': "\\textfrac{1}{8}",
'\u215C': "\\textfrac{3}{8}",
'\u215D': "\\textfrac{5}{8}",
'\u215E': "\\textfrac{7}{8}",
'\u2190': "{\\leftarrow}",
'\u2191': "{\\uparrow}",
'\u2192': "{\\rightarrow}",
'\u2193': "{\\downarrow}",
'\u2194': "{\\leftrightarrow}",
'\u2195': "{\\updownarrow}",
'\u2196': "{\\nwarrow}",
'\u2197': "{\\nearrow}",
'\u2198': "{\\searrow}",
'\u2199': "{\\swarrow}",
'\u219A': "{\\nleftarrow}",
'\u219B': "{\\nrightarrow}",
'\u219C': "{\\arrowwaveright}",
'\u219D': "{\\arrowwaveright}",
'\u219E': "{\\twoheadleftarrow}",
'\u21A0': "{\\twoheadrightarrow}",
'\u21A2': "{\\leftarrowtail}",
'\u21A3': "{\\rightarrowtail}",
'\u21A6': "{\\mapsto}",
'\u21A9': "{\\hookleftarrow}",
'\u21AA': "{\\hookrightarrow}",
'\u21AB': "{\\looparrowleft}",
'\u21AC': "{\\looparrowright}",
'\u21AD': "{\\leftrightsquigarrow}",
'\u21AE': "{\\nleftrightarrow}",
'\u21B0': "{\\Lsh}",
'\u21B1': "{\\Rsh}",
'\u21B3': "\\ElsevierGlyph{21B3}",
'\u21B6': "{\\curvearrowleft}",
'\u21B7': "{\\curvearrowright}",
'\u21BA': "{\\circlearrowleft}",
'\u21BB': "{\\circlearrowright}",
'\u21BC': "{\\leftharpoonup}",
'\u21BD': "{\\leftharpoondown}",
'\u21BE': "{\\upharpoonright}",
'\u21BF': "{\\upharpoonleft}",
'\u21C0': "{\\rightharpoonup}",
'\u21C1': "{\\rightharpoondown}",
'\u21C2': "{\\downharpoonright}",
'\u21C3': "{\\downharpoonleft}",
'\u21C4': "{\\rightleftarrows}",
'\u21C5': "{\\dblarrowupdown}",
'\u21C6': "{\\leftrightarrows}",
'\u21C7': "{\\leftleftarrows}",
'\u21C8': "{\\upuparrows}",
'\u21C9': "{\\rightrightarrows}",
'\u21CA': "{\\downdownarrows}",
'\u21CB': "{\\leftrightharpoons}",
'\u21CC': "{\\rightleftharpoons}",
'\u21CD': "{\\nLeftarrow}",
'\u21CE': "{\\nLeftrightarrow}",
'\u21CF': "{\\nRightarrow}",
'\u21D0': "{\\Leftarrow}",
'\u21D1': "{\\Uparrow}",
'\u21D2': "{\\Rightarrow}",
'\u21D3': "{\\Downarrow}",
'\u21D4': "{\\Leftrightarrow}",
'\u21D5': "{\\Updownarrow}",
'\u21DA': "{\\Lleftarrow}",
'\u21DB': "{\\Rrightarrow}",
'\u21DD': "{\\rightsquigarrow}",
'\u21F5': "{\\DownArrowUpArrow}",
'\u2200': "{\\forall}",
'\u2201': "{\\complement}",
'\u2202': "{\\partial}",
'\u2203': "{\\exists}",
'\u2204': "{\\nexists}",
'\u2205': "{\\varnothing}",
'\u2207': "{\\nabla}",
'\u2208': "{\\in}",
'\u2209': "{\\not\\in}",
'\u220B': "{\\ni}",
'\u220C': "{\\not\\ni}",
'\u220F': "{\\prod}",
'\u2210': "{\\coprod}",
'\u2211': "{\\sum}",
'\u2213': "{\\mp}",
'\u2214': "{\\dotplus}",
'\u2216': "{\\setminus}",
'\u2217': "{_\\ast}",
'\u2218': "{\\circ}",
'\u2219': "{\\bullet}",
'\u221A': "{\\surd}",
'\u221D': "{\\propto}",
'\u221E': "{\\infty}",
'\u221F': "{\\rightangle}",
'\u2220': "{\\angle}",
'\u2221': "{\\measuredangle}",
'\u2222': "{\\sphericalangle}",
'\u2223': "{\\mid}",
'\u2224': "{\\nmid}",
'\u2225': "{\\parallel}",
'\u2226': "{\\nparallel}",
'\u2227': "{\\wedge}",
'\u2228': "{\\vee}",
'\u2229': "{\\cap}",
'\u222A': "{\\cup}",
'\u222B': "{\\int}",
'\u222C': "{\\int\\!\\int}",
'\u222D': "{\\int\\!\\int\\!\\int}",
'\u222E': "{\\oint}",
'\u222F': "{\\surfintegral}",
'\u2230': "{\\volintegral}",
'\u2231': "{\\clwintegral}",
'\u2232': "\\ElsevierGlyph{2232}",
'\u2233': "\\ElsevierGlyph{2233}",
'\u2234': "{\\therefore}",
'\u2235': "{\\because}",
'\u2237': "{\\Colon}",
'\u2238': "\\ElsevierGlyph{2238}",
'\u223A': "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}",
'\u223B': "{\\homothetic}",
'\u223C': "{\\sim}",
'\u223D': "{\\backsim}",
'\u223E': "{\\lazysinv}",
'\u2240': "{\\wr}",
'\u2241': "{\\not\\sim}",
'\u2242': "\\ElsevierGlyph{2242}",
'\u2243': "{\\simeq}",
'\u2244': "{\\not\\simeq}",
'\u2245': "{\\cong}",
'\u2246': "{\\approxnotequal}",
'\u2247': "{\\not\\cong}",
'\u2248': "{\\approx}",
'\u2249': "{\\not\\approx}",
'\u224A': "{\\approxeq}",
'\u224B': "{\\tildetrpl}",
'\u224C': "{\\allequal}",
'\u224D': "{\\asymp}",
'\u224E': "{\\Bumpeq}",
'\u224F': "{\\bumpeq}",
'\u2250': "{\\doteq}",
'\u2251': "{\\doteqdot}",
'\u2252': "{\\fallingdotseq}",
'\u2253': "{\\risingdotseq}",
'\u2255': "=:",
'\u2256': "{\\eqcirc}",
'\u2257': "{\\circeq}",
'\u2259': "{\\estimates}",
'\u225A': "\\ElsevierGlyph{225A}",
'\u225B': "{\\starequal}",
'\u225C': "{\\triangleq}",
'\u225F': "\\ElsevierGlyph{225F}",
'\u2260': "\\not =",
'\u2261': "{\\equiv}",
'\u2262': "{\\not\\equiv}",
'\u2264': "{\\leq}",
'\u2265': "{\\geq}",
'\u2266': "{\\leqq}",
'\u2267': "{\\geqq}",
'\u2268': "{\\lneqq}",
'\u2269': "{\\gneqq}",
'\u226A': "{\\ll}",
'\u226B': "{\\gg}",
'\u226C': "{\\between}",
'\u226D': "{\\not\\kern-0.3em\\times}",
'\u226E': "\\not<",
'\u226F': "\\not>",
'\u2270': "{\\not\\leq}",
'\u2271': "{\\not\\geq}",
'\u2272': "{\\lessequivlnt}",
'\u2273': "{\\greaterequivlnt}",
'\u2274': "\\ElsevierGlyph{2274}",
'\u2275': "\\ElsevierGlyph{2275}",
'\u2276': "{\\lessgtr}",
'\u2277': "{\\gtrless}",
'\u2278': "{\\notlessgreater}",
'\u2279': "{\\notgreaterless}",
'\u227A': "{\\prec}",
'\u227B': "{\\succ}",
'\u227C': "{\\preccurlyeq}",
'\u227D': "{\\succcurlyeq}",
'\u227E': "{\\precapprox}",
'\u227F': "{\\succapprox}",
'\u2280': "{\\not\\prec}",
'\u2281': "{\\not\\succ}",
'\u2282': "{\\subset}",
'\u2283': "{\\supset}",
'\u2284': "{\\not\\subset}",
'\u2285': "{\\not\\supset}",
'\u2286': "{\\subseteq}",
'\u2287': "{\\supseteq}",
'\u2288': "{\\not\\subseteq}",
'\u2289': "{\\not\\supseteq}",
'\u228A': "{\\subsetneq}",
'\u228B': "{\\supsetneq}",
'\u228E': "{\\uplus}",
'\u228F': "{\\sqsubset}",
'\u2290': "{\\sqsupset}",
'\u2291': "{\\sqsubseteq}",
'\u2292': "{\\sqsupseteq}",
'\u2293': "{\\sqcap}",
'\u2294': "{\\sqcup}",
'\u2295': "{\\oplus}",
'\u2296': "{\\ominus}",
'\u2297': "{\\otimes}",
'\u2298': "{\\oslash}",
'\u2299': "{\\odot}",
'\u229A': "{\\circledcirc}",
'\u229B': "{\\circledast}",
'\u229D': "{\\circleddash}",
'\u229E': "{\\boxplus}",
'\u229F': "{\\boxminus}",
'\u22A0': "{\\boxtimes}",
'\u22A1': "{\\boxdot}",
'\u22A2': "{\\vdash}",
'\u22A3': "{\\dashv}",
'\u22A4': "{\\top}",
'\u22A5': "{\\perp}",
'\u22A7': "{\\truestate}",
'\u22A8': "{\\forcesextra}",
'\u22A9': "{\\Vdash}",
'\u22AA': "{\\Vvdash}",
'\u22AB': "{\\VDash}",
'\u22AC': "{\\nvdash}",
'\u22AD': "{\\nvDash}",
'\u22AE': "{\\nVdash}",
'\u22AF': "{\\nVDash}",
'\u22B2': "{\\vartriangleleft}",
'\u22B3': "{\\vartriangleright}",
'\u22B4': "{\\trianglelefteq}",
'\u22B5': "{\\trianglerighteq}",
'\u22B6': "{\\original}",
'\u22B7': "{\\image}",
'\u22B8': "{\\multimap}",
'\u22B9': "{\\hermitconjmatrix}",
'\u22BA': "{\\intercal}",
'\u22BB': "{\\veebar}",
'\u22BE': "{\\rightanglearc}",
'\u22C0': "\\ElsevierGlyph{22C0}",
'\u22C1': "\\ElsevierGlyph{22C1}",
'\u22C2': "{\\bigcap}",
'\u22C3': "{\\bigcup}",
'\u22C4': "{\\diamond}",
'\u22C5': "{\\cdot}",
'\u22C6': "{\\star}",
'\u22C7': "{\\divideontimes}",
'\u22C8': "{\\bowtie}",
'\u22C9': "{\\ltimes}",
'\u22CA': "{\\rtimes}",
'\u22CB': "{\\leftthreetimes}",
'\u22CC': "{\\rightthreetimes}",
'\u22CD': "{\\backsimeq}",
'\u22CE': "{\\curlyvee}",
'\u22CF': "{\\curlywedge}",
'\u22D0': "{\\Subset}",
'\u22D1': "{\\Supset}",
'\u22D2': "{\\Cap}",
'\u22D3': "{\\Cup}",
'\u22D4': "{\\pitchfork}",
'\u22D6': "{\\lessdot}",
'\u22D7': "{\\gtrdot}",
'\u22D8': "{\\verymuchless}",
'\u22D9': "{\\verymuchgreater}",
'\u22DA': "{\\lesseqgtr}",
'\u22DB': "{\\gtreqless}",
'\u22DE': "{\\curlyeqprec}",
'\u22DF': "{\\curlyeqsucc}",
'\u22E2': "{\\not\\sqsubseteq}",
'\u22E3': "{\\not\\sqsupseteq}",
'\u22E5': "{\\Elzsqspne}",
'\u22E6': "{\\lnsim}",
'\u22E7': "{\\gnsim}",
'\u22E8': "{\\precedesnotsimilar}",
'\u22E9': "{\\succnsim}",
'\u22EA': "{\\ntriangleleft}",
'\u22EB': "{\\ntriangleright}",
'\u22EC': "{\\ntrianglelefteq}",
'\u22ED': "{\\ntrianglerighteq}",
'\u22EE': "{\\vdots}",
'\u22EF': "{\\cdots}",
'\u22F0': "{\\upslopeellipsis}",
'\u22F1': "{\\downslopeellipsis}",
'\u2306': "{\\perspcorrespond}",
'\u2308': "{\\lceil}",
'\u2309': "{\\rceil}",
'\u230A': "{\\lfloor}",
'\u230B': "{\\rfloor}",
'\u2315': "{\\recorder}",
'\u2316': "\\mathchar\"2208",
'\u231C': "{\\ulcorner}",
'\u231D': "{\\urcorner}",
'\u231E': "{\\llcorner}",
'\u231F': "{\\lrcorner}",
'\u2322': "{\\frown}",
'\u2323': "{\\smile}",
'\u2329': "{\\langle}",
'\u232A': "{\\rangle}",
'\u233D': "\\ElsevierGlyph{E838}",
'\u23A3': "{\\Elzdlcorn}",
'\u23B0': "{\\lmoustache}",
'\u23B1': "{\\rmoustache}",
'\u24C8': "{\\circledS}",
'\u2506': "{\\Elzdshfnc}",
'\u2519': "{\\Elzsqfnw}",
'\u2571': "{\\diagup}",
'\u25A1': "{\\square}",
'\u25AA': "{\\blacksquare}",
'\u25AD': "\\fbox{~~}",
'\u25AF': "{\\Elzvrecto}",
'\u25B1': "\\ElsevierGlyph{E381}",
'\u25B3': "{\\bigtriangleup}",
'\u25B4': "{\\blacktriangle}",
'\u25B5': "{\\vartriangle}",
'\u25B8': "{\\blacktriangleright}",
'\u25B9': "{\\triangleright}",
'\u25BD': "{\\bigtriangledown}",
'\u25BE': "{\\blacktriangledown}",
'\u25BF': "{\\triangledown}",
'\u25C2': "{\\blacktriangleleft}",
'\u25C3': "{\\triangleleft}",
'\u25CA': "{\\lozenge}",
'\u25CB': "{\\bigcirc}",
'\u25D0': "{\\Elzcirfl}",
'\u25D1': "{\\Elzcirfr}",
'\u25D2': "{\\Elzcirfb}",
'\u25D8': "{\\Elzrvbull}",
'\u25E7': "{\\Elzsqfl}",
'\u25E8': "{\\Elzsqfr}",
'\u25EA': "{\\Elzsqfse}",
'\u25EF': "{\\bigcirc}",
'\u2662': "{\\diamond}",
'\u266D': "{\\flat}",
'\u266E': "{\\natural}",
'\u266F': "{\\sharp}",
'\u27F5': "{\\longleftarrow}",
'\u27F6': "{\\longrightarrow}",
'\u27F7': "{\\longleftrightarrow}",
'\u27F8': "{\\Longleftarrow}",
'\u27F9': "{\\Longrightarrow}",
'\u27FA': "{\\Longleftrightarrow}",
'\u27FC': "{\\longmapsto}",
'\u27FF': "\\sim\\joinrel\\leadsto",
'\u2905': "\\ElsevierGlyph{E212}",
'\u2912': "{\\UpArrowBar}",
'\u2913': "{\\DownArrowBar}",
'\u2923': "\\ElsevierGlyph{E20C}",
'\u2924': "\\ElsevierGlyph{E20D}",
'\u2925': "\\ElsevierGlyph{E20B}",
'\u2926': "\\ElsevierGlyph{E20A}",
'\u2927': "\\ElsevierGlyph{E211}",
'\u2928': "\\ElsevierGlyph{E20E}",
'\u2929': "\\ElsevierGlyph{E20F}",
'\u292A': "\\ElsevierGlyph{E210}",
'\u2933': "\\ElsevierGlyph{E21C}",
'\u2936': "\\ElsevierGlyph{E21A}",
'\u2937': "\\ElsevierGlyph{E219}",
'\u2940': "{\\Elolarr}",
'\u2941': "{\\Elorarr}",
'\u2942': "{\\ElzRlarr}",
'\u2944': "{\\ElzrLarr}",
'\u2947': "{\\Elzrarrx}",
'\u294E': "{\\LeftRightVector}",
'\u294F': "{\\RightUpDownVector}",
'\u2950': "{\\DownLeftRightVector}",
'\u2951': "{\\LeftUpDownVector}",
'\u2952': "{\\LeftVectorBar}",
'\u2953': "{\\RightVectorBar}",
'\u2954': "{\\RightUpVectorBar}",
'\u2955': "{\\RightDownVectorBar}",
'\u2956': "{\\DownLeftVectorBar}",
'\u2957': "{\\DownRightVectorBar}",
'\u2958': "{\\LeftUpVectorBar}",
'\u2959': "{\\LeftDownVectorBar}",
'\u295A': "{\\LeftTeeVector}",
'\u295B': "{\\RightTeeVector}",
'\u295C': "{\\RightUpTeeVector}",
'\u295D': "{\\RightDownTeeVector}",
'\u295E': "{\\DownLeftTeeVector}",
'\u295F': "{\\DownRightTeeVector}",
'\u2960': "{\\LeftUpTeeVector}",
'\u2961': "{\\LeftDownTeeVector}",
'\u296E': "{\\UpEquilibrium}",
'\u296F': "{\\ReverseUpEquilibrium}",
'\u2970': "{\\RoundImplies}",
'\u297C': "\\ElsevierGlyph{E214}",
'\u297D': "\\ElsevierGlyph{E215}",
'\u2980': "{\\Elztfnc}",
'\u2985': "\\ElsevierGlyph{3018}",
'\u2986': "{\\Elroang}",
'\u2993': "<\\kern-0.58em(",
'\u2994': "\\ElsevierGlyph{E291}",
'\u2999': "{\\Elzddfnc}",
'\u299C': "{\\Angle}",
'\u29A0': "{\\Elzlpargt}",
'\u29B5': "\\ElsevierGlyph{E260}",
'\u29B6': "\\ElsevierGlyph{E61B}",
'\u29CA': "{\\ElzLap}",
'\u29CB': "{\\Elzdefas}",
'\u29CF': "{\\LeftTriangleBar}",
'\u29D0': "{\\RightTriangleBar}",
'\u29DC': "\\ElsevierGlyph{E372}",
'\u29EB': "{\\blacklozenge}",
'\u29F4': "{\\RuleDelayed}",
'\u2A04': "{\\Elxuplus}",
'\u2A05': "{\\ElzThr}",
'\u2A06': "{\\Elxsqcup}",
'\u2A07': "{\\ElzInf}",
'\u2A08': "{\\ElzSup}",
'\u2A0D': "{\\ElzCint}",
'\u2A0F': "{\\clockoint}",
'\u2A10': "\\ElsevierGlyph{E395}",
'\u2A16': "{\\sqrint}",
'\u2A25': "\\ElsevierGlyph{E25A}",
'\u2A2A': "\\ElsevierGlyph{E25B}",
'\u2A2D': "\\ElsevierGlyph{E25C}",
'\u2A2E': "\\ElsevierGlyph{E25D}",
'\u2A2F': "{\\ElzTimes}",
'\u2A34': "\\ElsevierGlyph{E25E}",
'\u2A35': "\\ElsevierGlyph{E25E}",
'\u2A3C': "\\ElsevierGlyph{E259}",
'\u2A3F': "{\\amalg}",
'\u2A53': "{\\ElzAnd}",
'\u2A54': "{\\ElzOr}",
'\u2A55': "\\ElsevierGlyph{E36E}",
'\u2A56': "{\\ElOr}",
'\u2A5E': "{\\perspcorrespond}",
'\u2A5F': "{\\Elzminhat}",
'\u2A63': "\\ElsevierGlyph{225A}",
'\u2A6E': "\\stackrel{*}{=}",
'\u2A75': "{\\Equal}",
'\u2A7D': "{\\leqslant}",
'\u2A7E': "{\\geqslant}",
'\u2A85': "{\\lessapprox}",
'\u2A86': "{\\gtrapprox}",
'\u2A87': "{\\lneq}",
'\u2A88': "{\\gneq}",
'\u2A89': "{\\lnapprox}",
'\u2A8A': "{\\gnapprox}",
'\u2A8B': "{\\lesseqqgtr}",
'\u2A8C': "{\\gtreqqless}",
'\u2A95': "{\\eqslantless}",
'\u2A96': "{\\eqslantgtr}",
'\u2A9D': "\\Pisymbol{ppi020}{117}",
'\u2A9E': "\\Pisymbol{ppi020}{105}",
'\u2AA1': "{\\NestedLessLess}",
'\u2AA2': "{\\NestedGreaterGreater}",
'\u2AAF': "{\\preceq}",
'\u2AB0': "{\\succeq}",
'\u2AB5': "{\\precneqq}",
'\u2AB6': "{\\succneqq}",
'\u2AB7': "{\\precapprox}",
'\u2AB8': "{\\succapprox}",
'\u2AB9': "{\\precnapprox}",
'\u2ABA': "{\\succnapprox}",
'\u2AC5': "{\\subseteqq}",
'\u2AC6': "{\\supseteqq}",
'\u2ACB': "{\\subsetneqq}",
'\u2ACC': "{\\supsetneqq}",
'\u2AEB': "\\ElsevierGlyph{E30D}",
'\u2AF6': "{\\Elztdcol}",
'\u2AFD': "{{/}\\!\\!{/}}",
'\u300A': "\\ElsevierGlyph{300A}",
'\u300B': "\\ElsevierGlyph{300B}",
'\u3018': "\\ElsevierGlyph{3018}",
'\u3019': "\\ElsevierGlyph{3019}",
'\u301A': "{\\openbracketleft}",
'\u301B': "{\\openbracketright}",
'\uD835\uDC00': "\\mathbf{A}",
'\uD835\uDC01': "\\mathbf{B}",
'\uD835\uDC02': "\\mathbf{C}",
'\uD835\uDC03': "\\mathbf{D}",
'\uD835\uDC04': "\\mathbf{E}",
'\uD835\uDC05': "\\mathbf{F}",
'\uD835\uDC06': "\\mathbf{G}",
'\uD835\uDC07': "\\mathbf{H}",
'\uD835\uDC08': "\\mathbf{I}",
'\uD835\uDC09': "\\mathbf{J}",
'\uD835\uDC0A': "\\mathbf{K}",
'\uD835\uDC0B': "\\mathbf{L}",
'\uD835\uDC0C': "\\mathbf{M}",
'\uD835\uDC0D': "\\mathbf{N}",
'\uD835\uDC0E': "\\mathbf{O}",
'\uD835\uDC0F': "\\mathbf{P}",
'\uD835\uDC10': "\\mathbf{Q}",
'\uD835\uDC11': "\\mathbf{R}",
'\uD835\uDC12': "\\mathbf{S}",
'\uD835\uDC13': "\\mathbf{T}",
'\uD835\uDC14': "\\mathbf{U}",
'\uD835\uDC15': "\\mathbf{V}",
'\uD835\uDC16': "\\mathbf{W}",
'\uD835\uDC17': "\\mathbf{X}",
'\uD835\uDC18': "\\mathbf{Y}",
'\uD835\uDC19': "\\mathbf{Z}",
'\uD835\uDC1A': "\\mathbf{a}",
'\uD835\uDC1B': "\\mathbf{b}",
'\uD835\uDC1C': "\\mathbf{c}",
'\uD835\uDC1D': "\\mathbf{d}",
'\uD835\uDC1E': "\\mathbf{e}",
'\uD835\uDC1F': "\\mathbf{f}",
'\uD835\uDC20': "\\mathbf{g}",
'\uD835\uDC21': "\\mathbf{h}",
'\uD835\uDC22': "\\mathbf{i}",
'\uD835\uDC23': "\\mathbf{j}",
'\uD835\uDC24': "\\mathbf{k}",
'\uD835\uDC25': "\\mathbf{l}",
'\uD835\uDC26': "\\mathbf{m}",
'\uD835\uDC27': "\\mathbf{n}",
'\uD835\uDC28': "\\mathbf{o}",
'\uD835\uDC29': "\\mathbf{p}",
'\uD835\uDC2A': "\\mathbf{q}",
'\uD835\uDC2B': "\\mathbf{r}",
'\uD835\uDC2C': "\\mathbf{s}",
'\uD835\uDC2D': "\\mathbf{t}",
'\uD835\uDC2E': "\\mathbf{u}",
'\uD835\uDC2F': "\\mathbf{v}",
'\uD835\uDC30': "\\mathbf{w}",
'\uD835\uDC31': "\\mathbf{x}",
'\uD835\uDC32': "\\mathbf{y}",
'\uD835\uDC33': "\\mathbf{z}",
'\uD835\uDC34': "\\mathsl{A}",
'\uD835\uDC35': "\\mathsl{B}",
'\uD835\uDC36': "\\mathsl{C}",
'\uD835\uDC37': "\\mathsl{D}",
'\uD835\uDC38': "\\mathsl{E}",
'\uD835\uDC39': "\\mathsl{F}",
'\uD835\uDC3A': "\\mathsl{G}",
'\uD835\uDC3B': "\\mathsl{H}",
'\uD835\uDC3C': "\\mathsl{I}",
'\uD835\uDC3D': "\\mathsl{J}",
'\uD835\uDC3E': "\\mathsl{K}",
'\uD835\uDC3F': "\\mathsl{L}",
'\uD835\uDC40': "\\mathsl{M}",
'\uD835\uDC41': "\\mathsl{N}",
'\uD835\uDC42': "\\mathsl{O}",
'\uD835\uDC43': "\\mathsl{P}",
'\uD835\uDC44': "\\mathsl{Q}",
'\uD835\uDC45': "\\mathsl{R}",
'\uD835\uDC46': "\\mathsl{S}",
'\uD835\uDC47': "\\mathsl{T}",
'\uD835\uDC48': "\\mathsl{U}",
'\uD835\uDC49': "\\mathsl{V}",
'\uD835\uDC4A': "\\mathsl{W}",
'\uD835\uDC4B': "\\mathsl{X}",
'\uD835\uDC4C': "\\mathsl{Y}",
'\uD835\uDC4D': "\\mathsl{Z}",
'\uD835\uDC4E': "\\mathsl{a}",
'\uD835\uDC4F': "\\mathsl{b}",
'\uD835\uDC50': "\\mathsl{c}",
'\uD835\uDC51': "\\mathsl{d}",
'\uD835\uDC52': "\\mathsl{e}",
'\uD835\uDC53': "\\mathsl{f}",
'\uD835\uDC54': "\\mathsl{g}",
'\uD835\uDC56': "\\mathsl{i}",
'\uD835\uDC57': "\\mathsl{j}",
'\uD835\uDC58': "\\mathsl{k}",
'\uD835\uDC59': "\\mathsl{l}",
'\uD835\uDC5A': "\\mathsl{m}",
'\uD835\uDC5B': "\\mathsl{n}",
'\uD835\uDC5C': "\\mathsl{o}",
'\uD835\uDC5D': "\\mathsl{p}",
'\uD835\uDC5E': "\\mathsl{q}",
'\uD835\uDC5F': "\\mathsl{r}",
'\uD835\uDC60': "\\mathsl{s}",
'\uD835\uDC61': "\\mathsl{t}",
'\uD835\uDC62': "\\mathsl{u}",
'\uD835\uDC63': "\\mathsl{v}",
'\uD835\uDC64': "\\mathsl{w}",
'\uD835\uDC65': "\\mathsl{x}",
'\uD835\uDC66': "\\mathsl{y}",
'\uD835\uDC67': "\\mathsl{z}",
'\uD835\uDC68': "\\mathbit{A}",
'\uD835\uDC69': "\\mathbit{B}",
'\uD835\uDC6A': "\\mathbit{C}",
'\uD835\uDC6B': "\\mathbit{D}",
'\uD835\uDC6C': "\\mathbit{E}",
'\uD835\uDC6D': "\\mathbit{F}",
'\uD835\uDC6E': "\\mathbit{G}",
'\uD835\uDC6F': "\\mathbit{H}",
'\uD835\uDC70': "\\mathbit{I}",
'\uD835\uDC71': "\\mathbit{J}",
'\uD835\uDC72': "\\mathbit{K}",
'\uD835\uDC73': "\\mathbit{L}",
'\uD835\uDC74': "\\mathbit{M}",
'\uD835\uDC75': "\\mathbit{N}",
'\uD835\uDC76': "\\mathbit{O}",
'\uD835\uDC77': "\\mathbit{P}",
'\uD835\uDC78': "\\mathbit{Q}",
'\uD835\uDC79': "\\mathbit{R}",
'\uD835\uDC7A': "\\mathbit{S}",
'\uD835\uDC7B': "\\mathbit{T}",
'\uD835\uDC7C': "\\mathbit{U}",
'\uD835\uDC7D': "\\mathbit{V}",
'\uD835\uDC7E': "\\mathbit{W}",
'\uD835\uDC7F': "\\mathbit{X}",
'\uD835\uDC80': "\\mathbit{Y}",
'\uD835\uDC81': "\\mathbit{Z}",
'\uD835\uDC82': "\\mathbit{a}",
'\uD835\uDC83': "\\mathbit{b}",
'\uD835\uDC84': "\\mathbit{c}",
'\uD835\uDC85': "\\mathbit{d}",
'\uD835\uDC86': "\\mathbit{e}",
'\uD835\uDC87': "\\mathbit{f}",
'\uD835\uDC88': "\\mathbit{g}",
'\uD835\uDC89': "\\mathbit{h}",
'\uD835\uDC8A': "\\mathbit{i}",
'\uD835\uDC8B': "\\mathbit{j}",
'\uD835\uDC8C': "\\mathbit{k}",
'\uD835\uDC8D': "\\mathbit{l}",
'\uD835\uDC8E': "\\mathbit{m}",
'\uD835\uDC8F': "\\mathbit{n}",
'\uD835\uDC90': "\\mathbit{o}",
'\uD835\uDC91': "\\mathbit{p}",
'\uD835\uDC92': "\\mathbit{q}",
'\uD835\uDC93': "\\mathbit{r}",
'\uD835\uDC94': "\\mathbit{s}",
'\uD835\uDC95': "\\mathbit{t}",
'\uD835\uDC96': "\\mathbit{u}",
'\uD835\uDC97': "\\mathbit{v}",
'\uD835\uDC98': "\\mathbit{w}",
'\uD835\uDC99': "\\mathbit{x}",
'\uD835\uDC9A': "\\mathbit{y}",
'\uD835\uDC9B': "\\mathbit{z}",
'\uD835\uDC9C': "\\mathscr{A}",
'\uD835\uDC9E': "\\mathscr{C}",
'\uD835\uDC9F': "\\mathscr{D}",
'\uD835\uDCA2': "\\mathscr{G}",
'\uD835\uDCA5': "\\mathscr{J}",
'\uD835\uDCA6': "\\mathscr{K}",
'\uD835\uDCA9': "\\mathscr{N}",
'\uD835\uDCAA': "\\mathscr{O}",
'\uD835\uDCAB': "\\mathscr{P}",
'\uD835\uDCAC': "\\mathscr{Q}",
'\uD835\uDCAE': "\\mathscr{S}",
'\uD835\uDCAF': "\\mathscr{T}",
'\uD835\uDCB0': "\\mathscr{U}",
'\uD835\uDCB1': "\\mathscr{V}",
'\uD835\uDCB2': "\\mathscr{W}",
'\uD835\uDCB3': "\\mathscr{X}",
'\uD835\uDCB4': "\\mathscr{Y}",
'\uD835\uDCB5': "\\mathscr{Z}",
'\uD835\uDCB6': "\\mathscr{a}",
'\uD835\uDCB7': "\\mathscr{b}",
'\uD835\uDCB8': "\\mathscr{c}",
'\uD835\uDCB9': "\\mathscr{d}",
'\uD835\uDCBB': "\\mathscr{f}",
'\uD835\uDCBD': "\\mathscr{h}",
'\uD835\uDCBE': "\\mathscr{i}",
'\uD835\uDCBF': "\\mathscr{j}",
'\uD835\uDCC0': "\\mathscr{k}",
'\uD835\uDCC1': "\\mathscr{l}",
'\uD835\uDCC2': "\\mathscr{m}",
'\uD835\uDCC3': "\\mathscr{n}",
'\uD835\uDCC5': "\\mathscr{p}",
'\uD835\uDCC6': "\\mathscr{q}",
'\uD835\uDCC7': "\\mathscr{r}",
'\uD835\uDCC8': "\\mathscr{s}",
'\uD835\uDCC9': "\\mathscr{t}",
'\uD835\uDCCA': "\\mathscr{u}",
'\uD835\uDCCB': "\\mathscr{v}",
'\uD835\uDCCC': "\\mathscr{w}",
'\uD835\uDCCD': "\\mathscr{x}",
'\uD835\uDCCE': "\\mathscr{y}",
'\uD835\uDCCF': "\\mathscr{z}",
'\uD835\uDCD0': "\\mathmit{A}",
'\uD835\uDCD1': "\\mathmit{B}",
'\uD835\uDCD2': "\\mathmit{C}",
'\uD835\uDCD3': "\\mathmit{D}",
'\uD835\uDCD4': "\\mathmit{E}",
'\uD835\uDCD5': "\\mathmit{F}",
'\uD835\uDCD6': "\\mathmit{G}",
'\uD835\uDCD7': "\\mathmit{H}",
'\uD835\uDCD8': "\\mathmit{I}",
'\uD835\uDCD9': "\\mathmit{J}",
'\uD835\uDCDA': "\\mathmit{K}",
'\uD835\uDCDB': "\\mathmit{L}",
'\uD835\uDCDC': "\\mathmit{M}",
'\uD835\uDCDD': "\\mathmit{N}",
'\uD835\uDCDE': "\\mathmit{O}",
'\uD835\uDCDF': "\\mathmit{P}",
'\uD835\uDCE0': "\\mathmit{Q}",
'\uD835\uDCE1': "\\mathmit{R}",
'\uD835\uDCE2': "\\mathmit{S}",
'\uD835\uDCE3': "\\mathmit{T}",
'\uD835\uDCE4': "\\mathmit{U}",
'\uD835\uDCE5': "\\mathmit{V}",
'\uD835\uDCE6': "\\mathmit{W}",
'\uD835\uDCE7': "\\mathmit{X}",
'\uD835\uDCE8': "\\mathmit{Y}",
'\uD835\uDCE9': "\\mathmit{Z}",
'\uD835\uDCEA': "\\mathmit{a}",
'\uD835\uDCEB': "\\mathmit{b}",
'\uD835\uDCEC': "\\mathmit{c}",
'\uD835\uDCED': "\\mathmit{d}",
'\uD835\uDCEE': "\\mathmit{e}",
'\uD835\uDCEF': "\\mathmit{f}",
'\uD835\uDCF0': "\\mathmit{g}",
'\uD835\uDCF1': "\\mathmit{h}",
'\uD835\uDCF2': "\\mathmit{i}",
'\uD835\uDCF3': "\\mathmit{j}",
'\uD835\uDCF4': "\\mathmit{k}",
'\uD835\uDCF5': "\\mathmit{l}",
'\uD835\uDCF6': "\\mathmit{m}",
'\uD835\uDCF7': "\\mathmit{n}",
'\uD835\uDCF8': "\\mathmit{o}",
'\uD835\uDCF9': "\\mathmit{p}",
'\uD835\uDCFA': "\\mathmit{q}",
'\uD835\uDCFB': "\\mathmit{r}",
'\uD835\uDCFC': "\\mathmit{s}",
'\uD835\uDCFD': "\\mathmit{t}",
'\uD835\uDCFE': "\\mathmit{u}",
'\uD835\uDCFF': "\\mathmit{v}",
'\uD835\uDD00': "\\mathmit{w}",
'\uD835\uDD01': "\\mathmit{x}",
'\uD835\uDD02': "\\mathmit{y}",
'\uD835\uDD03': "\\mathmit{z}",
'\uD835\uDD04': "\\mathfrak{A}",
'\uD835\uDD05': "\\mathfrak{B}",
'\uD835\uDD07': "\\mathfrak{D}",
'\uD835\uDD08': "\\mathfrak{E}",
'\uD835\uDD09': "\\mathfrak{F}",
'\uD835\uDD0A': "\\mathfrak{G}",
'\uD835\uDD0D': "\\mathfrak{J}",
'\uD835\uDD0E': "\\mathfrak{K}",
'\uD835\uDD0F': "\\mathfrak{L}",
'\uD835\uDD10': "\\mathfrak{M}",
'\uD835\uDD11': "\\mathfrak{N}",
'\uD835\uDD12': "\\mathfrak{O}",
'\uD835\uDD13': "\\mathfrak{P}",
'\uD835\uDD14': "\\mathfrak{Q}",
'\uD835\uDD16': "\\mathfrak{S}",
'\uD835\uDD17': "\\mathfrak{T}",
'\uD835\uDD18': "\\mathfrak{U}",
'\uD835\uDD19': "\\mathfrak{V}",
'\uD835\uDD1A': "\\mathfrak{W}",
'\uD835\uDD1B': "\\mathfrak{X}",
'\uD835\uDD1C': "\\mathfrak{Y}",
'\uD835\uDD1E': "\\mathfrak{a}",
'\uD835\uDD1F': "\\mathfrak{b}",
'\uD835\uDD20': "\\mathfrak{c}",
'\uD835\uDD21': "\\mathfrak{d}",
'\uD835\uDD22': "\\mathfrak{e}",
'\uD835\uDD23': "\\mathfrak{f}",
'\uD835\uDD24': "\\mathfrak{g}",
'\uD835\uDD25': "\\mathfrak{h}",
'\uD835\uDD26': "\\mathfrak{i}",
'\uD835\uDD27': "\\mathfrak{j}",
'\uD835\uDD28': "\\mathfrak{k}",
'\uD835\uDD29': "\\mathfrak{l}",
'\uD835\uDD2A': "\\mathfrak{m}",
'\uD835\uDD2B': "\\mathfrak{n}",
'\uD835\uDD2C': "\\mathfrak{o}",
'\uD835\uDD2D': "\\mathfrak{p}",
'\uD835\uDD2E': "\\mathfrak{q}",
'\uD835\uDD2F': "\\mathfrak{r}",
'\uD835\uDD30': "\\mathfrak{s}",
'\uD835\uDD31': "\\mathfrak{t}",
'\uD835\uDD32': "\\mathfrak{u}",
'\uD835\uDD33': "\\mathfrak{v}",
'\uD835\uDD34': "\\mathfrak{w}",
'\uD835\uDD35': "\\mathfrak{x}",
'\uD835\uDD36': "\\mathfrak{y}",
'\uD835\uDD37': "\\mathfrak{z}",
'\uD835\uDD38': "\\mathbb{A}",
'\uD835\uDD39': "\\mathbb{B}",
'\uD835\uDD3B': "\\mathbb{D}",
'\uD835\uDD3C': "\\mathbb{E}",
'\uD835\uDD3D': "\\mathbb{F}",
'\uD835\uDD3E': "\\mathbb{G}",
'\uD835\uDD40': "\\mathbb{I}",
'\uD835\uDD41': "\\mathbb{J}",
'\uD835\uDD42': "\\mathbb{K}",
'\uD835\uDD43': "\\mathbb{L}",
'\uD835\uDD44': "\\mathbb{M}",
'\uD835\uDD46': "\\mathbb{O}",
'\uD835\uDD4A': "\\mathbb{S}",
'\uD835\uDD4B': "\\mathbb{T}",
'\uD835\uDD4C': "\\mathbb{U}",
'\uD835\uDD4D': "\\mathbb{V}",
'\uD835\uDD4E': "\\mathbb{W}",
'\uD835\uDD4F': "\\mathbb{X}",
'\uD835\uDD50': "\\mathbb{Y}",
'\uD835\uDD52': "\\mathbb{a}",
'\uD835\uDD53': "\\mathbb{b}",
'\uD835\uDD54': "\\mathbb{c}",
'\uD835\uDD55': "\\mathbb{d}",
'\uD835\uDD56': "\\mathbb{e}",
'\uD835\uDD57': "\\mathbb{f}",
'\uD835\uDD58': "\\mathbb{g}",
'\uD835\uDD59': "\\mathbb{h}",
'\uD835\uDD5A': "\\mathbb{i}",
'\uD835\uDD5B': "\\mathbb{j}",
'\uD835\uDD5C': "\\mathbb{k}",
'\uD835\uDD5D': "\\mathbb{l}",
'\uD835\uDD5E': "\\mathbb{m}",
'\uD835\uDD5F': "\\mathbb{n}",
'\uD835\uDD60': "\\mathbb{o}",
'\uD835\uDD61': "\\mathbb{p}",
'\uD835\uDD62': "\\mathbb{q}",
'\uD835\uDD63': "\\mathbb{r}",
'\uD835\uDD64': "\\mathbb{s}",
'\uD835\uDD65': "\\mathbb{t}",
'\uD835\uDD66': "\\mathbb{u}",
'\uD835\uDD67': "\\mathbb{v}",
'\uD835\uDD68': "\\mathbb{w}",
'\uD835\uDD69': "\\mathbb{x}",
'\uD835\uDD6A': "\\mathbb{y}",
'\uD835\uDD6B': "\\mathbb{z}",
'\uD835\uDD6C': "\\mathslbb{A}",
'\uD835\uDD6D': "\\mathslbb{B}",
'\uD835\uDD6E': "\\mathslbb{C}",
'\uD835\uDD6F': "\\mathslbb{D}",
'\uD835\uDD70': "\\mathslbb{E}",
'\uD835\uDD71': "\\mathslbb{F}",
'\uD835\uDD72': "\\mathslbb{G}",
'\uD835\uDD73': "\\mathslbb{H}",
'\uD835\uDD74': "\\mathslbb{I}",
'\uD835\uDD75': "\\mathslbb{J}",
'\uD835\uDD76': "\\mathslbb{K}",
'\uD835\uDD77': "\\mathslbb{L}",
'\uD835\uDD78': "\\mathslbb{M}",
'\uD835\uDD79': "\\mathslbb{N}",
'\uD835\uDD7A': "\\mathslbb{O}",
'\uD835\uDD7B': "\\mathslbb{P}",
'\uD835\uDD7C': "\\mathslbb{Q}",
'\uD835\uDD7D': "\\mathslbb{R}",
'\uD835\uDD7E': "\\mathslbb{S}",
'\uD835\uDD7F': "\\mathslbb{T}",
'\uD835\uDD80': "\\mathslbb{U}",
'\uD835\uDD81': "\\mathslbb{V}",
'\uD835\uDD82': "\\mathslbb{W}",
'\uD835\uDD83': "\\mathslbb{X}",
'\uD835\uDD84': "\\mathslbb{Y}",
'\uD835\uDD85': "\\mathslbb{Z}",
'\uD835\uDD86': "\\mathslbb{a}",
'\uD835\uDD87': "\\mathslbb{b}",
'\uD835\uDD88': "\\mathslbb{c}",
'\uD835\uDD89': "\\mathslbb{d}",
'\uD835\uDD8A': "\\mathslbb{e}",
'\uD835\uDD8B': "\\mathslbb{f}",
'\uD835\uDD8C': "\\mathslbb{g}",
'\uD835\uDD8D': "\\mathslbb{h}",
'\uD835\uDD8E': "\\mathslbb{i}",
'\uD835\uDD8F': "\\mathslbb{j}",
'\uD835\uDD90': "\\mathslbb{k}",
'\uD835\uDD91': "\\mathslbb{l}",
'\uD835\uDD92': "\\mathslbb{m}",
'\uD835\uDD93': "\\mathslbb{n}",
'\uD835\uDD94': "\\mathslbb{o}",
'\uD835\uDD95': "\\mathslbb{p}",
'\uD835\uDD96': "\\mathslbb{q}",
'\uD835\uDD97': "\\mathslbb{r}",
'\uD835\uDD98': "\\mathslbb{s}",
'\uD835\uDD99': "\\mathslbb{t}",
'\uD835\uDD9A': "\\mathslbb{u}",
'\uD835\uDD9B': "\\mathslbb{v}",
'\uD835\uDD9C': "\\mathslbb{w}",
'\uD835\uDD9D': "\\mathslbb{x}",
'\uD835\uDD9E': "\\mathslbb{y}",
'\uD835\uDD9F': "\\mathslbb{z}",
'\uD835\uDDA0': "\\mathsf{A}",
'\uD835\uDDA1': "\\mathsf{B}",
'\uD835\uDDA2': "\\mathsf{C}",
'\uD835\uDDA3': "\\mathsf{D}",
'\uD835\uDDA4': "\\mathsf{E}",
'\uD835\uDDA5': "\\mathsf{F}",
'\uD835\uDDA6': "\\mathsf{G}",
'\uD835\uDDA7': "\\mathsf{H}",
'\uD835\uDDA8': "\\mathsf{I}",
'\uD835\uDDA9': "\\mathsf{J}",
'\uD835\uDDAA': "\\mathsf{K}",
'\uD835\uDDAB': "\\mathsf{L}",
'\uD835\uDDAC': "\\mathsf{M}",
'\uD835\uDDAD': "\\mathsf{N}",
'\uD835\uDDAE': "\\mathsf{O}",
'\uD835\uDDAF': "\\mathsf{P}",
'\uD835\uDDB0': "\\mathsf{Q}",
'\uD835\uDDB1': "\\mathsf{R}",
'\uD835\uDDB2': "\\mathsf{S}",
'\uD835\uDDB3': "\\mathsf{T}",
'\uD835\uDDB4': "\\mathsf{U}",
'\uD835\uDDB5': "\\mathsf{V}",
'\uD835\uDDB6': "\\mathsf{W}",
'\uD835\uDDB7': "\\mathsf{X}",
'\uD835\uDDB8': "\\mathsf{Y}",
'\uD835\uDDB9': "\\mathsf{Z}",
'\uD835\uDDBA': "\\mathsf{a}",
'\uD835\uDDBB': "\\mathsf{b}",
'\uD835\uDDBC': "\\mathsf{c}",
'\uD835\uDDBD': "\\mathsf{d}",
'\uD835\uDDBE': "\\mathsf{e}",
'\uD835\uDDBF': "\\mathsf{f}",
'\uD835\uDDC0': "\\mathsf{g}",
'\uD835\uDDC1': "\\mathsf{h}",
'\uD835\uDDC2': "\\mathsf{i}",
'\uD835\uDDC3': "\\mathsf{j}",
'\uD835\uDDC4': "\\mathsf{k}",
'\uD835\uDDC5': "\\mathsf{l}",
'\uD835\uDDC6': "\\mathsf{m}",
'\uD835\uDDC7': "\\mathsf{n}",
'\uD835\uDDC8': "\\mathsf{o}",
'\uD835\uDDC9': "\\mathsf{p}",
'\uD835\uDDCA': "\\mathsf{q}",
'\uD835\uDDCB': "\\mathsf{r}",
'\uD835\uDDCC': "\\mathsf{s}",
'\uD835\uDDCD': "\\mathsf{t}",
'\uD835\uDDCE': "\\mathsf{u}",
'\uD835\uDDCF': "\\mathsf{v}",
'\uD835\uDDD0': "\\mathsf{w}",
'\uD835\uDDD1': "\\mathsf{x}",
'\uD835\uDDD2': "\\mathsf{y}",
'\uD835\uDDD3': "\\mathsf{z}",
'\uD835\uDDD4': "\\mathsfbf{A}",
'\uD835\uDDD5': "\\mathsfbf{B}",
'\uD835\uDDD6': "\\mathsfbf{C}",
'\uD835\uDDD7': "\\mathsfbf{D}",
'\uD835\uDDD8': "\\mathsfbf{E}",
'\uD835\uDDD9': "\\mathsfbf{F}",
'\uD835\uDDDA': "\\mathsfbf{G}",
'\uD835\uDDDB': "\\mathsfbf{H}",
'\uD835\uDDDC': "\\mathsfbf{I}",
'\uD835\uDDDD': "\\mathsfbf{J}",
'\uD835\uDDDE': "\\mathsfbf{K}",
'\uD835\uDDDF': "\\mathsfbf{L}",
'\uD835\uDDE0': "\\mathsfbf{M}",
'\uD835\uDDE1': "\\mathsfbf{N}",
'\uD835\uDDE2': "\\mathsfbf{O}",
'\uD835\uDDE3': "\\mathsfbf{P}",
'\uD835\uDDE4': "\\mathsfbf{Q}",
'\uD835\uDDE5': "\\mathsfbf{R}",
'\uD835\uDDE6': "\\mathsfbf{S}",
'\uD835\uDDE7': "\\mathsfbf{T}",
'\uD835\uDDE8': "\\mathsfbf{U}",
'\uD835\uDDE9': "\\mathsfbf{V}",
'\uD835\uDDEA': "\\mathsfbf{W}",
'\uD835\uDDEB': "\\mathsfbf{X}",
'\uD835\uDDEC': "\\mathsfbf{Y}",
'\uD835\uDDED': "\\mathsfbf{Z}",
'\uD835\uDDEE': "\\mathsfbf{a}",
'\uD835\uDDEF': "\\mathsfbf{b}",
'\uD835\uDDF0': "\\mathsfbf{c}",
'\uD835\uDDF1': "\\mathsfbf{d}",
'\uD835\uDDF2': "\\mathsfbf{e}",
'\uD835\uDDF3': "\\mathsfbf{f}",
'\uD835\uDDF4': "\\mathsfbf{g}",
'\uD835\uDDF5': "\\mathsfbf{h}",
'\uD835\uDDF6': "\\mathsfbf{i}",
'\uD835\uDDF7': "\\mathsfbf{j}",
'\uD835\uDDF8': "\\mathsfbf{k}",
'\uD835\uDDF9': "\\mathsfbf{l}",
'\uD835\uDDFA': "\\mathsfbf{m}",
'\uD835\uDDFB': "\\mathsfbf{n}",
'\uD835\uDDFC': "\\mathsfbf{o}",
'\uD835\uDDFD': "\\mathsfbf{p}",
'\uD835\uDDFE': "\\mathsfbf{q}",
'\uD835\uDDFF': "\\mathsfbf{r}",
'\uD835\uDE00': "\\mathsfbf{s}",
'\uD835\uDE01': "\\mathsfbf{t}",
'\uD835\uDE02': "\\mathsfbf{u}",
'\uD835\uDE03': "\\mathsfbf{v}",
'\uD835\uDE04': "\\mathsfbf{w}",
'\uD835\uDE05': "\\mathsfbf{x}",
'\uD835\uDE06': "\\mathsfbf{y}",
'\uD835\uDE07': "\\mathsfbf{z}",
'\uD835\uDE08': "\\mathsfsl{A}",
'\uD835\uDE09': "\\mathsfsl{B}",
'\uD835\uDE0A': "\\mathsfsl{C}",
'\uD835\uDE0B': "\\mathsfsl{D}",
'\uD835\uDE0C': "\\mathsfsl{E}",
'\uD835\uDE0D': "\\mathsfsl{F}",
'\uD835\uDE0E': "\\mathsfsl{G}",
'\uD835\uDE0F': "\\mathsfsl{H}",
'\uD835\uDE10': "\\mathsfsl{I}",
'\uD835\uDE11': "\\mathsfsl{J}",
'\uD835\uDE12': "\\mathsfsl{K}",
'\uD835\uDE13': "\\mathsfsl{L}",
'\uD835\uDE14': "\\mathsfsl{M}",
'\uD835\uDE15': "\\mathsfsl{N}",
'\uD835\uDE16': "\\mathsfsl{O}",
'\uD835\uDE17': "\\mathsfsl{P}",
'\uD835\uDE18': "\\mathsfsl{Q}",
'\uD835\uDE19': "\\mathsfsl{R}",
'\uD835\uDE1A': "\\mathsfsl{S}",
'\uD835\uDE1B': "\\mathsfsl{T}",
'\uD835\uDE1C': "\\mathsfsl{U}",
'\uD835\uDE1D': "\\mathsfsl{V}",
'\uD835\uDE1E': "\\mathsfsl{W}",
'\uD835\uDE1F': "\\mathsfsl{X}",
'\uD835\uDE20': "\\mathsfsl{Y}",
'\uD835\uDE21': "\\mathsfsl{Z}",
'\uD835\uDE22': "\\mathsfsl{a}",
'\uD835\uDE23': "\\mathsfsl{b}",
'\uD835\uDE24': "\\mathsfsl{c}",
'\uD835\uDE25': "\\mathsfsl{d}",
'\uD835\uDE26': "\\mathsfsl{e}",
'\uD835\uDE27': "\\mathsfsl{f}",
'\uD835\uDE28': "\\mathsfsl{g}",
'\uD835\uDE29': "\\mathsfsl{h}",
'\uD835\uDE2A': "\\mathsfsl{i}",
'\uD835\uDE2B': "\\mathsfsl{j}",
'\uD835\uDE2C': "\\mathsfsl{k}",
'\uD835\uDE2D': "\\mathsfsl{l}",
'\uD835\uDE2E': "\\mathsfsl{m}",
'\uD835\uDE2F': "\\mathsfsl{n}",
'\uD835\uDE30': "\\mathsfsl{o}",
'\uD835\uDE31': "\\mathsfsl{p}",
'\uD835\uDE32': "\\mathsfsl{q}",
'\uD835\uDE33': "\\mathsfsl{r}",
'\uD835\uDE34': "\\mathsfsl{s}",
'\uD835\uDE35': "\\mathsfsl{t}",
'\uD835\uDE36': "\\mathsfsl{u}",
'\uD835\uDE37': "\\mathsfsl{v}",
'\uD835\uDE38': "\\mathsfsl{w}",
'\uD835\uDE39': "\\mathsfsl{x}",
'\uD835\uDE3A': "\\mathsfsl{y}",
'\uD835\uDE3B': "\\mathsfsl{z}",
'\uD835\uDE3C': "\\mathsfbfsl{A}",
'\uD835\uDE3D': "\\mathsfbfsl{B}",
'\uD835\uDE3E': "\\mathsfbfsl{C}",
'\uD835\uDE3F': "\\mathsfbfsl{D}",
'\uD835\uDE40': "\\mathsfbfsl{E}",
'\uD835\uDE41': "\\mathsfbfsl{F}",
'\uD835\uDE42': "\\mathsfbfsl{G}",
'\uD835\uDE43': "\\mathsfbfsl{H}",
'\uD835\uDE44': "\\mathsfbfsl{I}",
'\uD835\uDE45': "\\mathsfbfsl{J}",
'\uD835\uDE46': "\\mathsfbfsl{K}",
'\uD835\uDE47': "\\mathsfbfsl{L}",
'\uD835\uDE48': "\\mathsfbfsl{M}",
'\uD835\uDE49': "\\mathsfbfsl{N}",
'\uD835\uDE4A': "\\mathsfbfsl{O}",
'\uD835\uDE4B': "\\mathsfbfsl{P}",
'\uD835\uDE4C': "\\mathsfbfsl{Q}",
'\uD835\uDE4D': "\\mathsfbfsl{R}",
'\uD835\uDE4E': "\\mathsfbfsl{S}",
'\uD835\uDE4F': "\\mathsfbfsl{T}",
'\uD835\uDE50': "\\mathsfbfsl{U}",
'\uD835\uDE51': "\\mathsfbfsl{V}",
'\uD835\uDE52': "\\mathsfbfsl{W}",
'\uD835\uDE53': "\\mathsfbfsl{X}",
'\uD835\uDE54': "\\mathsfbfsl{Y}",
'\uD835\uDE55': "\\mathsfbfsl{Z}",
'\uD835\uDE56': "\\mathsfbfsl{a}",
'\uD835\uDE57': "\\mathsfbfsl{b}",
'\uD835\uDE58': "\\mathsfbfsl{c}",
'\uD835\uDE59': "\\mathsfbfsl{d}",
'\uD835\uDE5A': "\\mathsfbfsl{e}",
'\uD835\uDE5B': "\\mathsfbfsl{f}",
'\uD835\uDE5C': "\\mathsfbfsl{g}",
'\uD835\uDE5D': "\\mathsfbfsl{h}",
'\uD835\uDE5E': "\\mathsfbfsl{i}",
'\uD835\uDE5F': "\\mathsfbfsl{j}",
'\uD835\uDE60': "\\mathsfbfsl{k}",
'\uD835\uDE61': "\\mathsfbfsl{l}",
'\uD835\uDE62': "\\mathsfbfsl{m}",
'\uD835\uDE63': "\\mathsfbfsl{n}",
'\uD835\uDE64': "\\mathsfbfsl{o}",
'\uD835\uDE65': "\\mathsfbfsl{p}",
'\uD835\uDE66': "\\mathsfbfsl{q}",
'\uD835\uDE67': "\\mathsfbfsl{r}",
'\uD835\uDE68': "\\mathsfbfsl{s}",
'\uD835\uDE69': "\\mathsfbfsl{t}",
'\uD835\uDE6A': "\\mathsfbfsl{u}",
'\uD835\uDE6B': "\\mathsfbfsl{v}",
'\uD835\uDE6C': "\\mathsfbfsl{w}",
'\uD835\uDE6D': "\\mathsfbfsl{x}",
'\uD835\uDE6E': "\\mathsfbfsl{y}",
'\uD835\uDE6F': "\\mathsfbfsl{z}",
'\uD835\uDE70': "\\mathtt{A}",
'\uD835\uDE71': "\\mathtt{B}",
'\uD835\uDE72': "\\mathtt{C}",
'\uD835\uDE73': "\\mathtt{D}",
'\uD835\uDE74': "\\mathtt{E}",
'\uD835\uDE75': "\\mathtt{F}",
'\uD835\uDE76': "\\mathtt{G}",
'\uD835\uDE77': "\\mathtt{H}",
'\uD835\uDE78': "\\mathtt{I}",
'\uD835\uDE79': "\\mathtt{J}",
'\uD835\uDE7A': "\\mathtt{K}",
'\uD835\uDE7B': "\\mathtt{L}",
'\uD835\uDE7C': "\\mathtt{M}",
'\uD835\uDE7D': "\\mathtt{N}",
'\uD835\uDE7E': "\\mathtt{O}",
'\uD835\uDE7F': "\\mathtt{P}",
'\uD835\uDE80': "\\mathtt{Q}",
'\uD835\uDE81': "\\mathtt{R}",
'\uD835\uDE82': "\\mathtt{S}",
'\uD835\uDE83': "\\mathtt{T}",
'\uD835\uDE84': "\\mathtt{U}",
'\uD835\uDE85': "\\mathtt{V}",
'\uD835\uDE86': "\\mathtt{W}",
'\uD835\uDE87': "\\mathtt{X}",
'\uD835\uDE88': "\\mathtt{Y}",
'\uD835\uDE89': "\\mathtt{Z}",
'\uD835\uDE8A': "\\mathtt{a}",
'\uD835\uDE8B': "\\mathtt{b}",
'\uD835\uDE8C': "\\mathtt{c}",
'\uD835\uDE8D': "\\mathtt{d}",
'\uD835\uDE8E': "\\mathtt{e}",
'\uD835\uDE8F': "\\mathtt{f}",
'\uD835\uDE90': "\\mathtt{g}",
'\uD835\uDE91': "\\mathtt{h}",
'\uD835\uDE92': "\\mathtt{i}",
'\uD835\uDE93': "\\mathtt{j}",
'\uD835\uDE94': "\\mathtt{k}",
'\uD835\uDE95': "\\mathtt{l}",
'\uD835\uDE96': "\\mathtt{m}",
'\uD835\uDE97': "\\mathtt{n}",
'\uD835\uDE98': "\\mathtt{o}",
'\uD835\uDE99': "\\mathtt{p}",
'\uD835\uDE9A': "\\mathtt{q}",
'\uD835\uDE9B': "\\mathtt{r}",
'\uD835\uDE9C': "\\mathtt{s}",
'\uD835\uDE9D': "\\mathtt{t}",
'\uD835\uDE9E': "\\mathtt{u}",
'\uD835\uDE9F': "\\mathtt{v}",
'\uD835\uDEA0': "\\mathtt{w}",
'\uD835\uDEA1': "\\mathtt{x}",
'\uD835\uDEA2': "\\mathtt{y}",
'\uD835\uDEA3': "\\mathtt{z}",
'\uD835\uDEA8': "\\mathbf{\\Alpha}",
'\uD835\uDEA9': "\\mathbf{\\Beta}",
'\uD835\uDEAA': "\\mathbf{\\Gamma}",
'\uD835\uDEAB': "\\mathbf{\\Delta}",
'\uD835\uDEAC': "\\mathbf{\\Epsilon}",
'\uD835\uDEAD': "\\mathbf{\\Zeta}",
'\uD835\uDEAE': "\\mathbf{\\Eta}",
'\uD835\uDEAF': "\\mathbf{\\Theta}",
'\uD835\uDEB0': "\\mathbf{\\Iota}",
'\uD835\uDEB1': "\\mathbf{\\Kappa}",
'\uD835\uDEB2': "\\mathbf{\\Lambda}",
'\uD835\uDEB3': "M",
'\uD835\uDEB4': "N",
'\uD835\uDEB5': "\\mathbf{\\Xi}",
'\uD835\uDEB6': "O",
'\uD835\uDEB7': "\\mathbf{\\Pi}",
'\uD835\uDEB8': "\\mathbf{\\Rho}",
'\uD835\uDEBA': "\\mathbf{\\Sigma}",
'\uD835\uDEBB': "\\mathbf{\\Tau}",
'\uD835\uDEBC': "\\mathbf{\\Upsilon}",
'\uD835\uDEBD': "\\mathbf{\\Phi}",
'\uD835\uDEBE': "\\mathbf{\\Chi}",
'\uD835\uDEBF': "\\mathbf{\\Psi}",
'\uD835\uDEC0': "\\mathbf{\\Omega}",
'\uD835\uDEC1': "\\mathbf{\\nabla}",
'\uD835\uDEC2': "\\mathbf{\\Alpha}",
'\uD835\uDEC3': "\\mathbf{\\Beta}",
'\uD835\uDEC4': "\\mathbf{\\Gamma}",
'\uD835\uDEC5': "\\mathbf{\\Delta}",
'\uD835\uDEC6': "\\mathbf{\\Epsilon}",
'\uD835\uDEC7': "\\mathbf{\\Zeta}",
'\uD835\uDEC8': "\\mathbf{\\Eta}",
'\uD835\uDEC9': "\\mathbf{\\theta}",
'\uD835\uDECA': "\\mathbf{\\Iota}",
'\uD835\uDECB': "\\mathbf{\\Kappa}",
'\uD835\uDECC': "\\mathbf{\\Lambda}",
'\uD835\uDECD': "M",
'\uD835\uDECE': "N",
'\uD835\uDECF': "\\mathbf{\\Xi}",
'\uD835\uDED0': "O",
'\uD835\uDED1': "\\mathbf{\\Pi}",
'\uD835\uDED2': "\\mathbf{\\Rho}",
'\uD835\uDED3': "\\mathbf{\\varsigma}",
'\uD835\uDED4': "\\mathbf{\\Sigma}",
'\uD835\uDED5': "\\mathbf{\\Tau}",
'\uD835\uDED6': "\\mathbf{\\Upsilon}",
'\uD835\uDED7': "\\mathbf{\\Phi}",
'\uD835\uDED8': "\\mathbf{\\Chi}",
'\uD835\uDED9': "\\mathbf{\\Psi}",
'\uD835\uDEDA': "\\mathbf{\\Omega}",
'\uD835\uDEDB': "{\\partial}",
'\uD835\uDEDC': "\\in",
'\uD835\uDEE2': "\\mathsl{\\Alpha}",
'\uD835\uDEE3': "\\mathsl{\\Beta}",
'\uD835\uDEE4': "\\mathsl{\\Gamma}",
'\uD835\uDEE5': "\\mathsl{\\Delta}",
'\uD835\uDEE6': "\\mathsl{\\Epsilon}",
'\uD835\uDEE7': "\\mathsl{\\Zeta}",
'\uD835\uDEE8': "\\mathsl{\\Eta}",
'\uD835\uDEE9': "\\mathsl{\\Theta}",
'\uD835\uDEEA': "\\mathsl{\\Iota}",
'\uD835\uDEEB': "\\mathsl{\\Kappa}",
'\uD835\uDEEC': "\\mathsl{\\Lambda}",
'\uD835\uDEED': "M",
'\uD835\uDEEE': "N",
'\uD835\uDEEF': "\\mathsl{\\Xi}",
'\uD835\uDEF0': "O",
'\uD835\uDEF1': "\\mathsl{\\Pi}",
'\uD835\uDEF2': "\\mathsl{\\Rho}",
'\uD835\uDEF4': "\\mathsl{\\Sigma}",
'\uD835\uDEF5': "\\mathsl{\\Tau}",
'\uD835\uDEF6': "\\mathsl{\\Upsilon}",
'\uD835\uDEF7': "\\mathsl{\\Phi}",
'\uD835\uDEF8': "\\mathsl{\\Chi}",
'\uD835\uDEF9': "\\mathsl{\\Psi}",
'\uD835\uDEFA': "\\mathsl{\\Omega}",
'\uD835\uDEFB': "\\mathsl{\\nabla}",
'\uD835\uDEFC': "\\mathsl{\\Alpha}",
'\uD835\uDEFD': "\\mathsl{\\Beta}",
'\uD835\uDEFE': "\\mathsl{\\Gamma}",
'\uD835\uDEFF': "\\mathsl{\\Delta}",
'\uD835\uDF00': "\\mathsl{\\Epsilon}",
'\uD835\uDF01': "\\mathsl{\\Zeta}",
'\uD835\uDF02': "\\mathsl{\\Eta}",
'\uD835\uDF03': "\\mathsl{\\Theta}",
'\uD835\uDF04': "\\mathsl{\\Iota}",
'\uD835\uDF05': "\\mathsl{\\Kappa}",
'\uD835\uDF06': "\\mathsl{\\Lambda}",
'\uD835\uDF07': "M",
'\uD835\uDF08': "N",
'\uD835\uDF09': "\\mathsl{\\Xi}",
'\uD835\uDF0A': "O",
'\uD835\uDF0B': "\\mathsl{\\Pi}",
'\uD835\uDF0C': "\\mathsl{\\Rho}",
'\uD835\uDF0D': "\\mathsl{\\varsigma}",
'\uD835\uDF0E': "\\mathsl{\\Sigma}",
'\uD835\uDF0F': "\\mathsl{\\Tau}",
'\uD835\uDF10': "\\mathsl{\\Upsilon}",
'\uD835\uDF11': "\\mathsl{\\Phi}",
'\uD835\uDF12': "\\mathsl{\\Chi}",
'\uD835\uDF13': "\\mathsl{\\Psi}",
'\uD835\uDF14': "\\mathsl{\\Omega}",
'\uD835\uDF15': "{\\partial}",
'\uD835\uDF16': "\\in",
'\uD835\uDF1C': "\\mathbit{\\Alpha}",
'\uD835\uDF1D': "\\mathbit{\\Beta}",
'\uD835\uDF1E': "\\mathbit{\\Gamma}",
'\uD835\uDF1F': "\\mathbit{\\Delta}",
'\uD835\uDF20': "\\mathbit{\\Epsilon}",
'\uD835\uDF21': "\\mathbit{\\Zeta}",
'\uD835\uDF22': "\\mathbit{\\Eta}",
'\uD835\uDF23': "\\mathbit{\\Theta}",
'\uD835\uDF24': "\\mathbit{\\Iota}",
'\uD835\uDF25': "\\mathbit{\\Kappa}",
'\uD835\uDF26': "\\mathbit{\\Lambda}",
'\uD835\uDF27': "M",
'\uD835\uDF28': "N",
'\uD835\uDF29': "\\mathbit{\\Xi}",
'\uD835\uDF2A': "O",
'\uD835\uDF2B': "\\mathbit{\\Pi}",
'\uD835\uDF2C': "\\mathbit{\\Rho}",
'\uD835\uDF2E': "\\mathbit{\\Sigma}",
'\uD835\uDF2F': "\\mathbit{\\Tau}",
'\uD835\uDF30': "\\mathbit{\\Upsilon}",
'\uD835\uDF31': "\\mathbit{\\Phi}",
'\uD835\uDF32': "\\mathbit{\\Chi}",
'\uD835\uDF33': "\\mathbit{\\Psi}",
'\uD835\uDF34': "\\mathbit{\\Omega}",
'\uD835\uDF35': "\\mathbit{\\nabla}",
'\uD835\uDF36': "\\mathbit{\\Alpha}",
'\uD835\uDF37': "\\mathbit{\\Beta}",
'\uD835\uDF38': "\\mathbit{\\Gamma}",
'\uD835\uDF39': "\\mathbit{\\Delta}",
'\uD835\uDF3A': "\\mathbit{\\Epsilon}",
'\uD835\uDF3B': "\\mathbit{\\Zeta}",
'\uD835\uDF3C': "\\mathbit{\\Eta}",
'\uD835\uDF3D': "\\mathbit{\\Theta}",
'\uD835\uDF3E': "\\mathbit{\\Iota}",
'\uD835\uDF3F': "\\mathbit{\\Kappa}",
'\uD835\uDF40': "\\mathbit{\\Lambda}",
'\uD835\uDF41': "M",
'\uD835\uDF42': "N",
'\uD835\uDF43': "\\mathbit{\\Xi}",
'\uD835\uDF44': "O",
'\uD835\uDF45': "\\mathbit{\\Pi}",
'\uD835\uDF46': "\\mathbit{\\Rho}",
'\uD835\uDF47': "\\mathbit{\\varsigma}",
'\uD835\uDF48': "\\mathbit{\\Sigma}",
'\uD835\uDF49': "\\mathbit{\\Tau}",
'\uD835\uDF4A': "\\mathbit{\\Upsilon}",
'\uD835\uDF4B': "\\mathbit{\\Phi}",
'\uD835\uDF4C': "\\mathbit{\\Chi}",
'\uD835\uDF4D': "\\mathbit{\\Psi}",
'\uD835\uDF4E': "\\mathbit{\\Omega}",
'\uD835\uDF4F': "{\\partial}",
'\uD835\uDF50': "\\in",
'\uD835\uDF56': "\\mathsfbf{\\Alpha}",
'\uD835\uDF57': "\\mathsfbf{\\Beta}",
'\uD835\uDF58': "\\mathsfbf{\\Gamma}",
'\uD835\uDF59': "\\mathsfbf{\\Delta}",
'\uD835\uDF5A': "\\mathsfbf{\\Epsilon}",
'\uD835\uDF5B': "\\mathsfbf{\\Zeta}",
'\uD835\uDF5C': "\\mathsfbf{\\Eta}",
'\uD835\uDF5D': "\\mathsfbf{\\Theta}",
'\uD835\uDF5E': "\\mathsfbf{\\Iota}",
'\uD835\uDF5F': "\\mathsfbf{\\Kappa}",
'\uD835\uDF60': "\\mathsfbf{\\Lambda}",
'\uD835\uDF61': "M",
'\uD835\uDF62': "N",
'\uD835\uDF63': "\\mathsfbf{\\Xi}",
'\uD835\uDF64': "O",
'\uD835\uDF65': "\\mathsfbf{\\Pi}",
'\uD835\uDF66': "\\mathsfbf{\\Rho}",
'\uD835\uDF68': "\\mathsfbf{\\Sigma}",
'\uD835\uDF69': "\\mathsfbf{\\Tau}",
'\uD835\uDF6A': "\\mathsfbf{\\Upsilon}",
'\uD835\uDF6B': "\\mathsfbf{\\Phi}",
'\uD835\uDF6C': "\\mathsfbf{\\Chi}",
'\uD835\uDF6D': "\\mathsfbf{\\Psi}",
'\uD835\uDF6E': "\\mathsfbf{\\Omega}",
'\uD835\uDF6F': "\\mathsfbf{\\nabla}",
'\uD835\uDF70': "\\mathsfbf{\\Alpha}",
'\uD835\uDF71': "\\mathsfbf{\\Beta}",
'\uD835\uDF72': "\\mathsfbf{\\Gamma}",
'\uD835\uDF73': "\\mathsfbf{\\Delta}",
'\uD835\uDF74': "\\mathsfbf{\\Epsilon}",
'\uD835\uDF75': "\\mathsfbf{\\Zeta}",
'\uD835\uDF76': "\\mathsfbf{\\Eta}",
'\uD835\uDF77': "\\mathsfbf{\\Theta}",
'\uD835\uDF78': "\\mathsfbf{\\Iota}",
'\uD835\uDF79': "\\mathsfbf{\\Kappa}",
'\uD835\uDF7A': "\\mathsfbf{\\Lambda}",
'\uD835\uDF7B': "M",
'\uD835\uDF7C': "N",
'\uD835\uDF7D': "\\mathsfbf{\\Xi}",
'\uD835\uDF7E': "O",
'\uD835\uDF7F': "\\mathsfbf{\\Pi}",
'\uD835\uDF80': "\\mathsfbf{\\Rho}",
'\uD835\uDF81': "\\mathsfbf{\\varsigma}",
'\uD835\uDF82': "\\mathsfbf{\\Sigma}",
'\uD835\uDF83': "\\mathsfbf{\\Tau}",
'\uD835\uDF84': "\\mathsfbf{\\Upsilon}",
'\uD835\uDF85': "\\mathsfbf{\\Phi}",
'\uD835\uDF86': "\\mathsfbf{\\Chi}",
'\uD835\uDF87': "\\mathsfbf{\\Psi}",
'\uD835\uDF88': "\\mathsfbf{\\Omega}",
'\uD835\uDF89': "{\\partial}",
'\uD835\uDF8A': "\\in",
'\uD835\uDF90': "\\mathsfbfsl{\\Alpha}",
'\uD835\uDF91': "\\mathsfbfsl{\\Beta}",
'\uD835\uDF92': "\\mathsfbfsl{\\Gamma}",
'\uD835\uDF93': "\\mathsfbfsl{\\Delta}",
'\uD835\uDF94': "\\mathsfbfsl{\\Epsilon}",
'\uD835\uDF95': "\\mathsfbfsl{\\Zeta}",
'\uD835\uDF96': "\\mathsfbfsl{\\Eta}",
'\uD835\uDF97': "\\mathsfbfsl{\\vartheta}",
'\uD835\uDF98': "\\mathsfbfsl{\\Iota}",
'\uD835\uDF99': "\\mathsfbfsl{\\Kappa}",
'\uD835\uDF9A': "\\mathsfbfsl{\\Lambda}",
'\uD835\uDF9B': "M",
'\uD835\uDF9C': "N",
'\uD835\uDF9D': "\\mathsfbfsl{\\Xi}",
'\uD835\uDF9E': "O",
'\uD835\uDF9F': "\\mathsfbfsl{\\Pi}",
'\uD835\uDFA0': "\\mathsfbfsl{\\Rho}",
'\uD835\uDFA2': "\\mathsfbfsl{\\Sigma}",
'\uD835\uDFA3': "\\mathsfbfsl{\\Tau}",
'\uD835\uDFA4': "\\mathsfbfsl{\\Upsilon}",
'\uD835\uDFA5': "\\mathsfbfsl{\\Phi}",
'\uD835\uDFA6': "\\mathsfbfsl{\\Chi}",
'\uD835\uDFA7': "\\mathsfbfsl{\\Psi}",
'\uD835\uDFA8': "\\mathsfbfsl{\\Omega}",
'\uD835\uDFA9': "\\mathsfbfsl{\\nabla}",
'\uD835\uDFAA': "\\mathsfbfsl{\\Alpha}",
'\uD835\uDFAB': "\\mathsfbfsl{\\Beta}",
'\uD835\uDFAC': "\\mathsfbfsl{\\Gamma}",
'\uD835\uDFAD': "\\mathsfbfsl{\\Delta}",
'\uD835\uDFAE': "\\mathsfbfsl{\\Epsilon}",
'\uD835\uDFAF': "\\mathsfbfsl{\\Zeta}",
'\uD835\uDFB0': "\\mathsfbfsl{\\Eta}",
'\uD835\uDFB1': "\\mathsfbfsl{\\vartheta}",
'\uD835\uDFB2': "\\mathsfbfsl{\\Iota}",
'\uD835\uDFB3': "\\mathsfbfsl{\\Kappa}",
'\uD835\uDFB4': "\\mathsfbfsl{\\Lambda}",
'\uD835\uDFB5': "M",
'\uD835\uDFB6': "N",
'\uD835\uDFB7': "\\mathsfbfsl{\\Xi}",
'\uD835\uDFB8': "O",
'\uD835\uDFB9': "\\mathsfbfsl{\\Pi}",
'\uD835\uDFBA': "\\mathsfbfsl{\\Rho}",
'\uD835\uDFBB': "\\mathsfbfsl{\\varsigma}",
'\uD835\uDFBC': "\\mathsfbfsl{\\Sigma}",
'\uD835\uDFBD': "\\mathsfbfsl{\\Tau}",
'\uD835\uDFBE': "\\mathsfbfsl{\\Upsilon}",
'\uD835\uDFBF': "\\mathsfbfsl{\\Phi}",
'\uD835\uDFC0': "\\mathsfbfsl{\\Chi}",
'\uD835\uDFC1': "\\mathsfbfsl{\\Psi}",
'\uD835\uDFC2': "\\mathsfbfsl{\\Omega}",
'\uD835\uDFC3': "{\\partial}",
'\uD835\uDFC4': "\\in",
'\uD835\uDFCE': "\\mathbf{0}",
'\uD835\uDFCF': "\\mathbf{1}",
'\uD835\uDFD0': "\\mathbf{2}",
'\uD835\uDFD1': "\\mathbf{3}",
'\uD835\uDFD2': "\\mathbf{4}",
'\uD835\uDFD3': "\\mathbf{5}",
'\uD835\uDFD4': "\\mathbf{6}",
'\uD835\uDFD5': "\\mathbf{7}",
'\uD835\uDFD6': "\\mathbf{8}",
'\uD835\uDFD7': "\\mathbf{9}",
'\uD835\uDFD8': "\\mathbb{0}",
'\uD835\uDFD9': "\\mathbb{1}",
'\uD835\uDFDA': "\\mathbb{2}",
'\uD835\uDFDB': "\\mathbb{3}",
'\uD835\uDFDC': "\\mathbb{4}",
'\uD835\uDFDD': "\\mathbb{5}",
'\uD835\uDFDE': "\\mathbb{6}",
'\uD835\uDFDF': "\\mathbb{7}",
'\uD835\uDFE0': "\\mathbb{8}",
'\uD835\uDFE1': "\\mathbb{9}",
'\uD835\uDFE2': "\\mathsf{0}",
'\uD835\uDFE3': "\\mathsf{1}",
'\uD835\uDFE4': "\\mathsf{2}",
'\uD835\uDFE5': "\\mathsf{3}",
'\uD835\uDFE6': "\\mathsf{4}",
'\uD835\uDFE7': "\\mathsf{5}",
'\uD835\uDFE8': "\\mathsf{6}",
'\uD835\uDFE9': "\\mathsf{7}",
'\uD835\uDFEA': "\\mathsf{8}",
'\uD835\uDFEB': "\\mathsf{9}",
'\uD835\uDFEC': "\\mathsfbf{0}",
'\uD835\uDFED': "\\mathsfbf{1}",
'\uD835\uDFEE': "\\mathsfbf{2}",
'\uD835\uDFEF': "\\mathsfbf{3}",
'\uD835\uDFF0': "\\mathsfbf{4}",
'\uD835\uDFF1': "\\mathsfbf{5}",
'\uD835\uDFF2': "\\mathsfbf{6}",
'\uD835\uDFF3': "\\mathsfbf{7}",
'\uD835\uDFF4': "\\mathsfbf{8}",
'\uD835\uDFF5': "\\mathsfbf{9}",
'\uD835\uDFF6': "\\mathtt{0}",
'\uD835\uDFF7': "\\mathtt{1}",
'\uD835\uDFF8': "\\mathtt{2}",
'\uD835\uDFF9': "\\mathtt{3}",
'\uD835\uDFFA': "\\mathtt{4}",
'\uD835\uDFFB': "\\mathtt{5}",
'\uD835\uDFFC': "\\mathtt{6}",
'\uD835\uDFFD': "\\mathtt{7}",
'\uD835\uDFFE': "\\mathtt{8}",
'\uD835\uDFFF': "\\mathtt{9}"
};
LaTeX.toLaTeX.ascii.text = {
'#': "\\#",
'$': "{\\textdollar}",
'%': "\\%",
'&': "\\&",
'[': "{[}",
'^': "\\^{}",
'_': "\\_",
'{': "\\{",
'}': "\\}",
'~': "{\\textasciitilde}",
'\u00A0': "~",
'\u00A1': "{\\textexclamdown}",
'\u00A2': "{\\textcent}",
'\u00A3': "{\\textsterling}",
'\u00A4': "{\\textcurrency}",
'\u00A5': "{\\textyen}",
'\u00A6': "{\\textbrokenbar}",
'\u00A7': "{\\textsection}",
'\u00A8': "{\\textasciidieresis}",
'\u00A9': "{\\textcopyright}",
'\u00AA': "{\\textordfeminine}",
'\u00AB': "{\\guillemotleft}",
'\u00AE': "{\\textregistered}",
'\u00AF': "{\\textasciimacron}",
'\u00B0': "{\\textdegree}",
'\u00B4': "{\\textasciiacute}",
'\u00B6': "{\\textparagraph}",
'\u00B8': "\\c{}",
'\u00BA': "{\\textordmasculine}",
'\u00BB': "{\\guillemotright}",
'\u00BC': "{\\textonequarter}",
'\u00BD': "{\\textonehalf}",
'\u00BE': "{\\textthreequarters}",
'\u00BF': "{\\textquestiondown}",
'\u00C0': "{\\`A}",
'\u00C1': "{\\'A}",
'\u00C2': "{\\^A}",
'\u00C3': "{\\~A}",
'\u00C4': "{\\\"A}",
'\u00C5': "{\\AA}",
'\u00C6': "{\\AE}",
'\u00C7': "{\\c C}",
'\u00C8': "{\\`E}",
'\u00C9': "{\\'E}",
'\u00CA': "{\\^E}",
'\u00CB': "{\\\"E}",
'\u00CC': "{\\`I}",
'\u00CD': "{\\'I}",
'\u00CE': "{\\^I}",
'\u00CF': "{\\\"I}",
'\u00D0': "{\\DH}",
'\u00D1': "{\\~N}",
'\u00D2': "{\\`O}",
'\u00D3': "{\\'O}",
'\u00D4': "{\\^O}",
'\u00D5': "{\\~O}",
'\u00D6': "{\\\"O}",
'\u00D7': "{\\texttimes}",
'\u00D8': "{\\O}",
'\u00D9': "{\\`U}",
'\u00DA': "{\\'U}",
'\u00DB': "{\\^U}",
'\u00DC': "{\\\"U}",
'\u00DD': "{\\'Y}",
'\u00DE': "{\\TH}",
'\u00DF': "{\\ss}",
'\u00E0': "{\\`a}",
'\u00E1': "{\\'a}",
'\u00E2': "{\\^a}",
'\u00E3': "{\\~a}",
'\u00E4': "{\\\"a}",
'\u00E5': "{\\aa}",
'\u00E6': "{\\ae}",
'\u00E7': "{\\c c}",
'\u00E8': "{\\`e}",
'\u00E9': "{\\'e}",
'\u00EA': "{\\^e}",
'\u00EB': "{\\\"e}",
'\u00EC': "{\\`\\i}",
'\u00ED': "{\\'\\i}",
'\u00EE': "{\\^\\i}",
'\u00EF': "{\\\"\\i}",
'\u00F0': "{\\dh}",
'\u00F1': "{\\~n}",
'\u00F2': "{\\`o}",
'\u00F3': "{\\'o}",
'\u00F4': "{\\^o}",
'\u00F5': "{\\~o}",
'\u00F6': "{\\\"o}",
'\u00F8': "{\\o}",
'\u00F9': "{\\`u}",
'\u00FA': "{\\'u}",
'\u00FB': "{\\^u}",
'\u00FC': "{\\\"u}",
'\u00FD': "{\\'y}",
'\u00FE': "{\\th}",
'\u00FF': "{\\\"y}",
'\u0100': "\\={A}",
'\u0101': "\\={a}",
'\u0102': "{\\u A}",
'\u0103': "{\\u a}",
'\u0104': "\\k{A}",
'\u0105': "\\k{a}",
'\u0106': "{\\'C}",
'\u0107': "{\\'c}",
'\u0108': "{\\^C}",
'\u0109': "{\\^c}",
'\u010A': "{\\.C}",
'\u010B': "{\\.c}",
'\u010C': "{\\v C}",
'\u010D': "{\\v c}",
'\u010E': "{\\v D}",
'\u010F': "{\\v d}",
'\u0110': "{\\DJ}",
'\u0111': "{\\dj}",
'\u0112': "\\={E}",
'\u0113': "\\={e}",
'\u0114': "{\\u E}",
'\u0115': "{\\u e}",
'\u0116': "{\\.E}",
'\u0117': "{\\.e}",
'\u0118': "\\k{E}",
'\u0119': "\\k{e}",
'\u011A': "{\\v E}",
'\u011B': "{\\v e}",
'\u011C': "{\\^G}",
'\u011D': "{\\^g}",
'\u011E': "{\\u G}",
'\u011F': "{\\u g}",
'\u0120': "{\\.G}",
'\u0121': "{\\.g}",
'\u0122': "{\\c G}",
'\u0123': "{\\c g}",
'\u0124': "{\\^H}",
'\u0125': "{\\^h}",
'\u0126': "{\\fontencoding{LELA}\\selectfont\\char40}",
'\u0128': "{\\~I}",
'\u0129': "{\\~\\i}",
'\u012A': "\\={I}",
'\u012B': "\\={\\i}",
'\u012C': "{\\u I}",
'\u012D': "{\\u \\i}",
'\u012E': "\\k{I}",
'\u012F': "\\k{i}",
'\u0130': "{\\.I}",
'\u0131': "{\\i}",
'\u0132': "IJ",
'\u0133': "ij",
'\u0134': "{\\^J}",
'\u0135': "{\\^\\j}",
'\u0136': "{\\c K}",
'\u0137': "{\\c k}",
'\u0138': "{\\fontencoding{LELA}\\selectfont\\char91}",
'\u0139': "{\\'L}",
'\u013A': "{\\'l}",
'\u013B': "{\\c L}",
'\u013C': "{\\c l}",
'\u013D': "{\\v L}",
'\u013E': "{\\v l}",
'\u013F': "{\\fontencoding{LELA}\\selectfont\\char201}",
'\u0140': "{\\fontencoding{LELA}\\selectfont\\char202}",
'\u0141': "{\\L}",
'\u0142': "{\\l}",
'\u0143': "{\\'N}",
'\u0144': "{\\'n}",
'\u0145': "{\\c N}",
'\u0146': "{\\c n}",
'\u0147': "{\\v N}",
'\u0148': "{\\v n}",
'\u0149': "'n",
'\u014A': "{\\NG}",
'\u014B': "{\\ng}",
'\u014C': "\\={O}",
'\u014D': "\\={o}",
'\u014E': "{\\u O}",
'\u014F': "{\\u o}",
'\u0150': "{\\H O}",
'\u0151': "{\\H o}",
'\u0152': "{\\OE}",
'\u0153': "{\\oe}",
'\u0154': "{\\'R}",
'\u0155': "{\\'r}",
'\u0156': "{\\c R}",
'\u0157': "{\\c r}",
'\u0158': "{\\v R}",
'\u0159': "{\\v r}",
'\u015A': "{\\'S}",
'\u015B': "{\\'s}",
'\u015C': "{\\^S}",
'\u015D': "{\\^s}",
'\u015E': "{\\c S}",
'\u015F': "{\\c s}",
'\u0160': "{\\v S}",
'\u0161': "{\\v s}",
'\u0162': "{\\c T}",
'\u0163': "{\\c t}",
'\u0164': "{\\v T}",
'\u0165': "{\\v t}",
'\u0166': "{\\fontencoding{LELA}\\selectfont\\char47}",
'\u0167': "{\\fontencoding{LELA}\\selectfont\\char63}",
'\u0168': "{\\~U}",
'\u0169': "{\\~u}",
'\u016A': "\\={U}",
'\u016B': "\\={u}",
'\u016C': "{\\u U}",
'\u016D': "{\\u u}",
'\u016E': "\\r{U}",
'\u016F': "\\r{u}",
'\u0170': "{\\H U}",
'\u0171': "{\\H u}",
'\u0172': "\\k{U}",
'\u0173': "\\k{u}",
'\u0174': "{\\^W}",
'\u0175': "{\\^w}",
'\u0176': "{\\^Y}",
'\u0177': "{\\^y}",
'\u0178': "{\\\"Y}",
'\u0179': "{\\'Z}",
'\u017A': "{\\'z}",
'\u017B': "{\\.Z}",
'\u017C': "{\\.z}",
'\u017D': "{\\v Z}",
'\u017E': "{\\v z}",
'\u0195': "{\\texthvlig}",
'\u019E': "{\\textnrleg}",
'\u01BA': "{\\fontencoding{LELA}\\selectfont\\char195}",
'\u01C2': "{\\textdoublepipe}",
'\u01F5': "{\\'g}",
'\u0258': "{\\fontencoding{LEIP}\\selectfont\\char61}",
'\u0261': "g",
'\u0272': "{\\Elzltln}",
'\u0278': "{\\textphi}",
'\u027F': "{\\fontencoding{LEIP}\\selectfont\\char202}",
'\u029E': "{\\textturnk}",
'\u02BC': "'",
'\u02C7': "{\\textasciicaron}",
'\u02D8': "{\\textasciibreve}",
'\u02D9': "{\\textperiodcentered}",
'\u02DA': "\\r{}",
'\u02DB': "\\k{}",
'\u02DC': "{\\texttildelow}",
'\u02DD': "\\H{}",
'\u02E5': "\\tone{55}",
'\u02E6': "\\tone{44}",
'\u02E7': "\\tone{33}",
'\u02E8': "\\tone{22}",
'\u02E9': "\\tone{11}",
'\u0300': "\\`",
'\u0301': "\\'",
'\u0302': "\\^",
'\u0303': "\\~",
'\u0304': "\\=",
'\u0306': "\\u",
'\u0307': "\\.",
'\u0308': "\\\"",
'\u030A': "\\r",
'\u030B': "\\H",
'\u030C': "\\v",
'\u030F': "\\cyrchar\\C",
'\u0311': "{\\fontencoding{LECO}\\selectfont\\char177}",
'\u0318': "{\\fontencoding{LECO}\\selectfont\\char184}",
'\u0319': "{\\fontencoding{LECO}\\selectfont\\char185}",
'\u0322': "{\\Elzrh}",
'\u0327': "\\c",
'\u0328': "\\k",
'\u032B': "{\\fontencoding{LECO}\\selectfont\\char203}",
'\u032F': "{\\fontencoding{LECO}\\selectfont\\char207}",
'\u0335': "{\\Elzxl}",
'\u0336': "{\\Elzbar}",
'\u0337': "{\\fontencoding{LECO}\\selectfont\\char215}",
'\u0338': "{\\fontencoding{LECO}\\selectfont\\char216}",
'\u033A': "{\\fontencoding{LECO}\\selectfont\\char218}",
'\u033B': "{\\fontencoding{LECO}\\selectfont\\char219}",
'\u033C': "{\\fontencoding{LECO}\\selectfont\\char220}",
'\u033D': "{\\fontencoding{LECO}\\selectfont\\char221}",
'\u0361': "{\\fontencoding{LECO}\\selectfont\\char225}",
'\u0386': "{\\'A}",
'\u0388': "{\\'E}",
'\u0389': "{\\'H}",
'\u038A': "\\'{}{I}",
'\u038C': "\\'{}O",
'\u03AC': "{\\'$\\alpha$}",
'\u03B8': "{\\texttheta}",
'\u03CC': "{\\'o}",
'\u03D0': "\\Pisymbol{ppi022}{87}",
'\u03D1': "{\\textvartheta}",
'\u03F4': "{\\textTheta}",
'\u0401': "{\\cyrchar\\CYRYO}",
'\u0402': "{\\cyrchar\\CYRDJE}",
'\u0403': "\\cyrchar{\\'\\CYRG}",
'\u0404': "{\\cyrchar\\CYRIE}",
'\u0405': "{\\cyrchar\\CYRDZE}",
'\u0406': "{\\cyrchar\\CYRII}",
'\u0407': "{\\cyrchar\\CYRYI}",
'\u0408': "{\\cyrchar\\CYRJE}",
'\u0409': "{\\cyrchar\\CYRLJE}",
'\u040A': "{\\cyrchar\\CYRNJE}",
'\u040B': "{\\cyrchar\\CYRTSHE}",
'\u040C': "\\cyrchar{\\'\\CYRK}",
'\u040E': "{\\cyrchar\\CYRUSHRT}",
'\u040F': "{\\cyrchar\\CYRDZHE}",
'\u0410': "{\\cyrchar\\CYRA}",
'\u0411': "{\\cyrchar\\CYRB}",
'\u0412': "{\\cyrchar\\CYRV}",
'\u0413': "{\\cyrchar\\CYRG}",
'\u0414': "{\\cyrchar\\CYRD}",
'\u0415': "{\\cyrchar\\CYRE}",
'\u0416': "{\\cyrchar\\CYRZH}",
'\u0417': "{\\cyrchar\\CYRZ}",
'\u0418': "{\\cyrchar\\CYRI}",
'\u0419': "{\\cyrchar\\CYRISHRT}",
'\u041A': "{\\cyrchar\\CYRK}",
'\u041B': "{\\cyrchar\\CYRL}",
'\u041C': "{\\cyrchar\\CYRM}",
'\u041D': "{\\cyrchar\\CYRN}",
'\u041E': "{\\cyrchar\\CYRO}",
'\u041F': "{\\cyrchar\\CYRP}",
'\u0420': "{\\cyrchar\\CYRR}",
'\u0421': "{\\cyrchar\\CYRS}",
'\u0422': "{\\cyrchar\\CYRT}",
'\u0423': "{\\cyrchar\\CYRU}",
'\u0424': "{\\cyrchar\\CYRF}",
'\u0425': "{\\cyrchar\\CYRH}",
'\u0426': "{\\cyrchar\\CYRC}",
'\u0427': "{\\cyrchar\\CYRCH}",
'\u0428': "{\\cyrchar\\CYRSH}",
'\u0429': "{\\cyrchar\\CYRSHCH}",
'\u042A': "{\\cyrchar\\CYRHRDSN}",
'\u042B': "{\\cyrchar\\CYRERY}",
'\u042C': "{\\cyrchar\\CYRSFTSN}",
'\u042D': "{\\cyrchar\\CYREREV}",
'\u042E': "{\\cyrchar\\CYRYU}",
'\u042F': "{\\cyrchar\\CYRYA}",
'\u0430': "{\\cyrchar\\cyra}",
'\u0431': "{\\cyrchar\\cyrb}",
'\u0432': "{\\cyrchar\\cyrv}",
'\u0433': "{\\cyrchar\\cyrg}",
'\u0434': "{\\cyrchar\\cyrd}",
'\u0435': "{\\cyrchar\\cyre}",
'\u0436': "{\\cyrchar\\cyrzh}",
'\u0437': "{\\cyrchar\\cyrz}",
'\u0438': "{\\cyrchar\\cyri}",
'\u0439': "{\\cyrchar\\cyrishrt}",
'\u043A': "{\\cyrchar\\cyrk}",
'\u043B': "{\\cyrchar\\cyrl}",
'\u043C': "{\\cyrchar\\cyrm}",
'\u043D': "{\\cyrchar\\cyrn}",
'\u043E': "{\\cyrchar\\cyro}",
'\u043F': "{\\cyrchar\\cyrp}",
'\u0440': "{\\cyrchar\\cyrr}",
'\u0441': "{\\cyrchar\\cyrs}",
'\u0442': "{\\cyrchar\\cyrt}",
'\u0443': "{\\cyrchar\\cyru}",
'\u0444': "{\\cyrchar\\cyrf}",
'\u0445': "{\\cyrchar\\cyrh}",
'\u0446': "{\\cyrchar\\cyrc}",
'\u0447': "{\\cyrchar\\cyrch}",
'\u0448': "{\\cyrchar\\cyrsh}",
'\u0449': "{\\cyrchar\\cyrshch}",
'\u044A': "{\\cyrchar\\cyrhrdsn}",
'\u044B': "{\\cyrchar\\cyrery}",
'\u044C': "{\\cyrchar\\cyrsftsn}",
'\u044D': "{\\cyrchar\\cyrerev}",
'\u044E': "{\\cyrchar\\cyryu}",
'\u044F': "{\\cyrchar\\cyrya}",
'\u0451': "{\\cyrchar\\cyryo}",
'\u0452': "{\\cyrchar\\cyrdje}",
'\u0453': "\\cyrchar{\\'\\cyrg}",
'\u0454': "{\\cyrchar\\cyrie}",
'\u0455': "{\\cyrchar\\cyrdze}",
'\u0456': "{\\cyrchar\\cyrii}",
'\u0457': "{\\cyrchar\\cyryi}",
'\u0458': "{\\cyrchar\\cyrje}",
'\u0459': "{\\cyrchar\\cyrlje}",
'\u045A': "{\\cyrchar\\cyrnje}",
'\u045B': "{\\cyrchar\\cyrtshe}",
'\u045C': "\\cyrchar{\\'\\cyrk}",
'\u045E': "{\\cyrchar\\cyrushrt}",
'\u045F': "{\\cyrchar\\cyrdzhe}",
'\u0460': "{\\cyrchar\\CYROMEGA}",
'\u0461': "{\\cyrchar\\cyromega}",
'\u0462': "{\\cyrchar\\CYRYAT}",
'\u0464': "{\\cyrchar\\CYRIOTE}",
'\u0465': "{\\cyrchar\\cyriote}",
'\u0466': "{\\cyrchar\\CYRLYUS}",
'\u0467': "{\\cyrchar\\cyrlyus}",
'\u0468': "{\\cyrchar\\CYRIOTLYUS}",
'\u0469': "{\\cyrchar\\cyriotlyus}",
'\u046A': "{\\cyrchar\\CYRBYUS}",
'\u046C': "{\\cyrchar\\CYRIOTBYUS}",
'\u046D': "{\\cyrchar\\cyriotbyus}",
'\u046E': "{\\cyrchar\\CYRKSI}",
'\u046F': "{\\cyrchar\\cyrksi}",
'\u0470': "{\\cyrchar\\CYRPSI}",
'\u0471': "{\\cyrchar\\cyrpsi}",
'\u0472': "{\\cyrchar\\CYRFITA}",
'\u0474': "{\\cyrchar\\CYRIZH}",
'\u0478': "{\\cyrchar\\CYRUK}",
'\u0479': "{\\cyrchar\\cyruk}",
'\u047A': "{\\cyrchar\\CYROMEGARND}",
'\u047B': "{\\cyrchar\\cyromegarnd}",
'\u047C': "{\\cyrchar\\CYROMEGATITLO}",
'\u047D': "{\\cyrchar\\cyromegatitlo}",
'\u047E': "{\\cyrchar\\CYROT}",
'\u047F': "{\\cyrchar\\cyrot}",
'\u0480': "{\\cyrchar\\CYRKOPPA}",
'\u0481': "{\\cyrchar\\cyrkoppa}",
'\u0482': "{\\cyrchar\\cyrthousands}",
'\u0488': "{\\cyrchar\\cyrhundredthousands}",
'\u0489': "{\\cyrchar\\cyrmillions}",
'\u048C': "{\\cyrchar\\CYRSEMISFTSN}",
'\u048D': "{\\cyrchar\\cyrsemisftsn}",
'\u048E': "{\\cyrchar\\CYRRTICK}",
'\u048F': "{\\cyrchar\\cyrrtick}",
'\u0490': "{\\cyrchar\\CYRGUP}",
'\u0491': "{\\cyrchar\\cyrgup}",
'\u0492': "{\\cyrchar\\CYRGHCRS}",
'\u0493': "{\\cyrchar\\cyrghcrs}",
'\u0494': "{\\cyrchar\\CYRGHK}",
'\u0495': "{\\cyrchar\\cyrghk}",
'\u0496': "{\\cyrchar\\CYRZHDSC}",
'\u0497': "{\\cyrchar\\cyrzhdsc}",
'\u0498': "{\\cyrchar\\CYRZDSC}",
'\u0499': "{\\cyrchar\\cyrzdsc}",
'\u049A': "{\\cyrchar\\CYRKDSC}",
'\u049B': "{\\cyrchar\\cyrkdsc}",
'\u049C': "{\\cyrchar\\CYRKVCRS}",
'\u049D': "{\\cyrchar\\cyrkvcrs}",
'\u049E': "{\\cyrchar\\CYRKHCRS}",
'\u049F': "{\\cyrchar\\cyrkhcrs}",
'\u04A0': "{\\cyrchar\\CYRKBEAK}",
'\u04A1': "{\\cyrchar\\cyrkbeak}",
'\u04A2': "{\\cyrchar\\CYRNDSC}",
'\u04A3': "{\\cyrchar\\cyrndsc}",
'\u04A4': "{\\cyrchar\\CYRNG}",
'\u04A5': "{\\cyrchar\\cyrng}",
'\u04A6': "{\\cyrchar\\CYRPHK}",
'\u04A7': "{\\cyrchar\\cyrphk}",
'\u04A8': "{\\cyrchar\\CYRABHHA}",
'\u04A9': "{\\cyrchar\\cyrabhha}",
'\u04AA': "{\\cyrchar\\CYRSDSC}",
'\u04AB': "{\\cyrchar\\cyrsdsc}",
'\u04AC': "{\\cyrchar\\CYRTDSC}",
'\u04AD': "{\\cyrchar\\cyrtdsc}",
'\u04AE': "{\\cyrchar\\CYRY}",
'\u04AF': "{\\cyrchar\\cyry}",
'\u04B0': "{\\cyrchar\\CYRYHCRS}",
'\u04B1': "{\\cyrchar\\cyryhcrs}",
'\u04B2': "{\\cyrchar\\CYRHDSC}",
'\u04B3': "{\\cyrchar\\cyrhdsc}",
'\u04B4': "{\\cyrchar\\CYRTETSE}",
'\u04B5': "{\\cyrchar\\cyrtetse}",
'\u04B6': "{\\cyrchar\\CYRCHRDSC}",
'\u04B7': "{\\cyrchar\\cyrchrdsc}",
'\u04B8': "{\\cyrchar\\CYRCHVCRS}",
'\u04B9': "{\\cyrchar\\cyrchvcrs}",
'\u04BA': "{\\cyrchar\\CYRSHHA}",
'\u04BB': "{\\cyrchar\\cyrshha}",
'\u04BC': "{\\cyrchar\\CYRABHCH}",
'\u04BD': "{\\cyrchar\\cyrabhch}",
'\u04BE': "{\\cyrchar\\CYRABHCHDSC}",
'\u04BF': "{\\cyrchar\\cyrabhchdsc}",
'\u04C0': "{\\cyrchar\\CYRpalochka}",
'\u04C3': "{\\cyrchar\\CYRKHK}",
'\u04C4': "{\\cyrchar\\cyrkhk}",
'\u04C7': "{\\cyrchar\\CYRNHK}",
'\u04C8': "{\\cyrchar\\cyrnhk}",
'\u04CB': "{\\cyrchar\\CYRCHLDSC}",
'\u04CC': "{\\cyrchar\\cyrchldsc}",
'\u04D4': "{\\cyrchar\\CYRAE}",
'\u04D5': "{\\cyrchar\\cyrae}",
'\u04D8': "{\\cyrchar\\CYRSCHWA}",
'\u04D9': "{\\cyrchar\\cyrschwa}",
'\u04E0': "{\\cyrchar\\CYRABHDZE}",
'\u04E1': "{\\cyrchar\\cyrabhdze}",
'\u04E8': "{\\cyrchar\\CYROTLD}",
'\u04E9': "{\\cyrchar\\cyrotld}",
'\u2002': "\\hspace{0.6em}",
'\u2003': "\\hspace{1em}",
'\u2004': "\\hspace{0.33em}",
'\u2005': "\\hspace{0.25em}",
'\u2006': "\\hspace{0.166em}",
'\u2007': "\\hphantom{0}",
'\u2008': "\\hphantom{,}",
'\u2009': "\\hspace{0.167em}",
'\u200B': "\\mbox{}",
'\u2010': "-",
'\u2013': "{\\textendash}",
'\u2014': "{\\textemdash}",
'\u2015': "\\rule{1em}{1pt}",
'\u2018': "`",
'\u2019': "'",
'\u201A': ",",
'\u201C': "{\\textquotedblleft}",
'\u201D': "{\\textquotedblright}",
'\u201E': ",,",
'\u2020': "{\\textdagger}",
'\u2021': "{\\textdaggerdbl}",
'\u2022': "{\\textbullet}",
'\u2024': ".",
'\u2025': "..",
'\u2026': "{\\ldots}",
'\u2030': "{\\textperthousand}",
'\u2031': "{\\textpertenthousand}",
'\u2039': "{\\guilsinglleft}",
'\u203A': "{\\guilsinglright}",
'\u205F': "{\\mkern4mu}",
'\u2060': "{\\nolinebreak}",
'\u20A7': "\\ensuremath{\\Elzpes}",
'\u20AC': "{\\mbox{\\texteuro}}",
'\u210A': "\\mathscr{g}",
'\u2116': "{\\cyrchar\\textnumero}",
'\u2122': "{\\texttrademark}",
'\u212B': "{\\AA}",
'\u2212': "-",
'\u2254': ":=",
'\u2305': "{\\barwedge}",
'\u2423': "{\\textvisiblespace}",
'\u2460': "\\ding{172}",
'\u2461': "\\ding{173}",
'\u2462': "\\ding{174}",
'\u2463': "\\ding{175}",
'\u2464': "\\ding{176}",
'\u2465': "\\ding{177}",
'\u2466': "\\ding{178}",
'\u2467': "\\ding{179}",
'\u2468': "\\ding{180}",
'\u2469': "\\ding{181}",
'\u25A0': "\\ding{110}",
'\u25B2': "\\ding{115}",
'\u25BC': "\\ding{116}",
'\u25C6': "\\ding{117}",
'\u25CF': "\\ding{108}",
'\u25D7': "\\ding{119}",
'\u2605': "\\ding{72}",
'\u2606': "\\ding{73}",
'\u260E': "\\ding{37}",
'\u261B': "\\ding{42}",
'\u261E': "\\ding{43}",
'\u263E': "{\\rightmoon}",
'\u263F': "{\\mercury}",
'\u2640': "{\\venus}",
'\u2642': "{\\male}",
'\u2643': "{\\jupiter}",
'\u2644': "{\\saturn}",
'\u2645': "{\\uranus}",
'\u2646': "{\\neptune}",
'\u2647': "{\\pluto}",
'\u2648': "{\\aries}",
'\u2649': "{\\taurus}",
'\u264A': "{\\gemini}",
'\u264B': "{\\cancer}",
'\u264C': "{\\leo}",
'\u264D': "{\\virgo}",
'\u264E': "{\\libra}",
'\u264F': "{\\scorpio}",
'\u2650': "{\\sagittarius}",
'\u2651': "{\\capricornus}",
'\u2652': "{\\aquarius}",
'\u2653': "{\\pisces}",
'\u2660': "\\ding{171}",
'\u2663': "\\ding{168}",
'\u2665': "\\ding{170}",
'\u2666': "\\ding{169}",
'\u2669': "{\\quarternote}",
'\u266A': "{\\eighthnote}",
'\u2701': "\\ding{33}",
'\u2702': "\\ding{34}",
'\u2703': "\\ding{35}",
'\u2704': "\\ding{36}",
'\u2706': "\\ding{38}",
'\u2707': "\\ding{39}",
'\u2708': "\\ding{40}",
'\u2709': "\\ding{41}",
'\u270C': "\\ding{44}",
'\u270D': "\\ding{45}",
'\u270E': "\\ding{46}",
'\u270F': "\\ding{47}",
'\u2710': "\\ding{48}",
'\u2711': "\\ding{49}",
'\u2712': "\\ding{50}",
'\u2713': "\\ding{51}",
'\u2714': "\\ding{52}",
'\u2715': "\\ding{53}",
'\u2716': "\\ding{54}",
'\u2717': "\\ding{55}",
'\u2718': "\\ding{56}",
'\u2719': "\\ding{57}",
'\u271A': "\\ding{58}",
'\u271B': "\\ding{59}",
'\u271C': "\\ding{60}",
'\u271D': "\\ding{61}",
'\u271E': "\\ding{62}",
'\u271F': "\\ding{63}",
'\u2720': "\\ding{64}",
'\u2721': "\\ding{65}",
'\u2722': "\\ding{66}",
'\u2723': "\\ding{67}",
'\u2724': "\\ding{68}",
'\u2725': "\\ding{69}",
'\u2726': "\\ding{70}",
'\u2727': "\\ding{71}",
'\u2729': "\\ding{73}",
'\u272A': "\\ding{74}",
'\u272B': "\\ding{75}",
'\u272C': "\\ding{76}",
'\u272D': "\\ding{77}",
'\u272E': "\\ding{78}",
'\u272F': "\\ding{79}",
'\u2730': "\\ding{80}",
'\u2731': "\\ding{81}",
'\u2732': "\\ding{82}",
'\u2733': "\\ding{83}",
'\u2734': "\\ding{84}",
'\u2735': "\\ding{85}",
'\u2736': "\\ding{86}",
'\u2737': "\\ding{87}",
'\u2738': "\\ding{88}",
'\u2739': "\\ding{89}",
'\u273A': "\\ding{90}",
'\u273B': "\\ding{91}",
'\u273C': "\\ding{92}",
'\u273D': "\\ding{93}",
'\u273E': "\\ding{94}",
'\u273F': "\\ding{95}",
'\u2740': "\\ding{96}",
'\u2741': "\\ding{97}",
'\u2742': "\\ding{98}",
'\u2743': "\\ding{99}",
'\u2744': "\\ding{100}",
'\u2745': "\\ding{101}",
'\u2746': "\\ding{102}",
'\u2747': "\\ding{103}",
'\u2748': "\\ding{104}",
'\u2749': "\\ding{105}",
'\u274A': "\\ding{106}",
'\u274B': "\\ding{107}",
'\u274D': "\\ding{109}",
'\u274F': "\\ding{111}",
'\u2750': "\\ding{112}",
'\u2751': "\\ding{113}",
'\u2752': "\\ding{114}",
'\u2756': "\\ding{118}",
'\u2758': "\\ding{120}",
'\u2759': "\\ding{121}",
'\u275A': "\\ding{122}",
'\u275B': "\\ding{123}",
'\u275C': "\\ding{124}",
'\u275D': "\\ding{125}",
'\u275E': "\\ding{126}",
'\u2761': "\\ding{161}",
'\u2762': "\\ding{162}",
'\u2763': "\\ding{163}",
'\u2764': "\\ding{164}",
'\u2765': "\\ding{165}",
'\u2766': "\\ding{166}",
'\u2767': "\\ding{167}",
'\u2776': "\\ding{182}",
'\u2777': "\\ding{183}",
'\u2778': "\\ding{184}",
'\u2779': "\\ding{185}",
'\u277A': "\\ding{186}",
'\u277B': "\\ding{187}",
'\u277C': "\\ding{188}",
'\u277D': "\\ding{189}",
'\u277E': "\\ding{190}",
'\u277F': "\\ding{191}",
'\u2780': "\\ding{192}",
'\u2781': "\\ding{193}",
'\u2782': "\\ding{194}",
'\u2783': "\\ding{195}",
'\u2784': "\\ding{196}",
'\u2785': "\\ding{197}",
'\u2786': "\\ding{198}",
'\u2787': "\\ding{199}",
'\u2788': "\\ding{200}",
'\u2789': "\\ding{201}",
'\u278A': "\\ding{202}",
'\u278B': "\\ding{203}",
'\u278C': "\\ding{204}",
'\u278D': "\\ding{205}",
'\u278E': "\\ding{206}",
'\u278F': "\\ding{207}",
'\u2790': "\\ding{208}",
'\u2791': "\\ding{209}",
'\u2792': "\\ding{210}",
'\u2793': "\\ding{211}",
'\u2794': "\\ding{212}",
'\u2798': "\\ding{216}",
'\u2799': "\\ding{217}",
'\u279A': "\\ding{218}",
'\u279B': "\\ding{219}",
'\u279C': "\\ding{220}",
'\u279D': "\\ding{221}",
'\u279E': "\\ding{222}",
'\u279F': "\\ding{223}",
'\u27A0': "\\ding{224}",
'\u27A1': "\\ding{225}",
'\u27A2': "\\ding{226}",
'\u27A3': "\\ding{227}",
'\u27A4': "\\ding{228}",
'\u27A5': "\\ding{229}",
'\u27A6': "\\ding{230}",
'\u27A7': "\\ding{231}",
'\u27A8': "\\ding{232}",
'\u27A9': "\\ding{233}",
'\u27AA': "\\ding{234}",
'\u27AB': "\\ding{235}",
'\u27AC': "\\ding{236}",
'\u27AD': "\\ding{237}",
'\u27AE': "\\ding{238}",
'\u27AF': "\\ding{239}",
'\u27B1': "\\ding{241}",
'\u27B2': "\\ding{242}",
'\u27B3': "\\ding{243}",
'\u27B4': "\\ding{244}",
'\u27B5': "\\ding{245}",
'\u27B6': "\\ding{246}",
'\u27B7': "\\ding{247}",
'\u27B8': "\\ding{248}",
'\u27B9': "\\ding{249}",
'\u27BA': "\\ding{250}",
'\u27BB': "\\ding{251}",
'\u27BC': "\\ding{252}",
'\u27BD': "\\ding{253}",
'\u27BE': "\\ding{254}",
'\u27E8': "{\\langle}",
'\u27E9': "{\\rangle}",
'\uFB00': "ff",
'\uFB01': "fi",
'\uFB02': "fl",
'\uFB03': "ffi",
'\uFB04': "ffl",
'\uFFFD': "\\dbend",
'\uD835\uDEB9': "\\mathbf{\\vartheta}",
'\uD835\uDEDD': "\\mathbf{\\vartheta}",
'\uD835\uDEDE': "\\mathbf{\\varkappa}",
'\uD835\uDEDF': "\\mathbf{\\phi}",
'\uD835\uDEE0': "\\mathbf{\\varrho}",
'\uD835\uDEE1': "\\mathbf{\\varpi}",
'\uD835\uDEF3': "\\mathsl{\\vartheta}",
'\uD835\uDF17': "\\mathsl{\\vartheta}",
'\uD835\uDF18': "\\mathsl{\\varkappa}",
'\uD835\uDF19': "\\mathsl{\\phi}",
'\uD835\uDF1A': "\\mathsl{\\varrho}",
'\uD835\uDF1B': "\\mathsl{\\varpi}",
'\uD835\uDF2D': "\\mathbit{O}",
'\uD835\uDF51': "\\mathbit{\\vartheta}",
'\uD835\uDF52': "\\mathbit{\\varkappa}",
'\uD835\uDF53': "\\mathbit{\\phi}",
'\uD835\uDF54': "\\mathbit{\\varrho}",
'\uD835\uDF55': "\\mathbit{\\varpi}",
'\uD835\uDF67': "\\mathsfbf{\\vartheta}",
'\uD835\uDF8B': "\\mathsfbf{\\vartheta}",
'\uD835\uDF8C': "\\mathsfbf{\\varkappa}",
'\uD835\uDF8D': "\\mathsfbf{\\phi}",
'\uD835\uDF8E': "\\mathsfbf{\\varrho}",
'\uD835\uDF8F': "\\mathsfbf{\\varpi}",
'\uD835\uDFA1': "\\mathsfbfsl{\\vartheta}",
'\uD835\uDFC5': "\\mathsfbfsl{\\vartheta}",
'\uD835\uDFC6': "\\mathsfbfsl{\\varkappa}",
'\uD835\uDFC7': "\\mathsfbfsl{\\phi}",
'\uD835\uDFC8': "\\mathsfbfsl{\\varrho}",
'\uD835\uDFC9': "\\mathsfbfsl{\\varpi}"
};
LaTeX.toUnicode = {
"\\#": '#',
"{\\textdollar}": '$',
"\\textdollar ": '$',
"\\%": '%',
"\\&": '&',
"{[}": '[',
"\\backslash": '\\',
"\\^{}": '^',
"\\_": '_',
"\\{": '{',
"\\}": '}',
"{\\textasciitilde}": '~',
"\\textasciitilde ": '~',
"~": '\u00A0',
"{\\textexclamdown}": '\u00A1',
"\\textexclamdown ": '\u00A1',
"{\\textcent}": '\u00A2',
"\\textcent ": '\u00A2',
"{\\textsterling}": '\u00A3',
"\\textsterling ": '\u00A3',
"{\\textcurrency}": '\u00A4',
"\\textcurrency ": '\u00A4',
"{\\textyen}": '\u00A5',
"\\textyen ": '\u00A5',
"{\\textbrokenbar}": '\u00A6',
"\\textbrokenbar ": '\u00A6',
"{\\textsection}": '\u00A7',
"\\textsection ": '\u00A7',
"{\\textasciidieresis}": '\u00A8',
"\\textasciidieresis ": '\u00A8',
"{\\textcopyright}": '\u00A9',
"\\textcopyright ": '\u00A9',
"{\\textordfeminine}": '\u00AA',
"\\textordfeminine ": '\u00AA',
"{\\guillemotleft}": '\u00AB',
"\\guillemotleft ": '\u00AB',
"{\\lnot}": '\u00AC',
"\\lnot ": '\u00AC',
"\\-": '\u00AD',
"{\\textregistered}": '\u00AE',
"\\textregistered ": '\u00AE',
"{\\textasciimacron}": '\u00AF',
"\\textasciimacron ": '\u00AF',
"{\\textdegree}": '\u00B0',
"\\textdegree ": '\u00B0',
"{\\pm}": '\u00B1',
"\\pm ": '\u00B1',
"{^2}": '\u00B2',
"{^3}": '\u00B3',
"{\\textasciiacute}": '\u00B4',
"\\textasciiacute ": '\u00B4',
"\\mathrm{\\mu}": '\u00B5',
"{\\textparagraph}": '\u00B6',
"\\textparagraph ": '\u00B6',
"{\\cdot}": '\u00B7',
"\\cdot ": '\u00B7',
"\\c{}": '\u00B8',
"{^1}": '\u00B9',
"{\\textordmasculine}": '\u00BA',
"\\textordmasculine ": '\u00BA',
"{\\guillemotright}": '\u00BB',
"\\guillemotright ": '\u00BB',
"{\\textonequarter}": '\u00BC',
"\\textonequarter ": '\u00BC',
"{\\textonehalf}": '\u00BD',
"\\textonehalf ": '\u00BD',
"{\\textthreequarters}": '\u00BE',
"\\textthreequarters ": '\u00BE',
"{\\textquestiondown}": '\u00BF',
"\\textquestiondown ": '\u00BF',
"{\\`A}": '\u00C0',
"{\\'A}": '\u00C1',
"{\\^A}": '\u00C2',
"{\\~A}": '\u00C3',
"{\\\"A}": '\u00C4',
"{\\AA}": '\u00C5',
"\\AA ": '\u00C5',
"{\\AE}": '\u00C6',
"\\AE ": '\u00C6',
"{\\c C}": '\u00C7',
"{\\`E}": '\u00C8',
"{\\'E}": '\u00C9',
"{\\^E}": '\u00CA',
"{\\\"E}": '\u00CB',
"{\\`I}": '\u00CC',
"{\\'I}": '\u00CD',
"{\\^I}": '\u00CE',
"{\\\"I}": '\u00CF',
"{\\DH}": '\u00D0',
"\\DH ": '\u00D0',
"{\\~N}": '\u00D1',
"{\\`O}": '\u00D2',
"{\\'O}": '\u00D3',
"{\\^O}": '\u00D4',
"{\\~O}": '\u00D5',
"{\\\"O}": '\u00D6',
"{\\texttimes}": '\u00D7',
"\\texttimes ": '\u00D7',
"{\\O}": '\u00D8',
"\\O ": '\u00D8',
"{\\`U}": '\u00D9',
"{\\'U}": '\u00DA',
"{\\^U}": '\u00DB',
"{\\\"U}": '\u00DC',
"{\\'Y}": '\u00DD',
"{\\TH}": '\u00DE',
"\\TH ": '\u00DE',
"{\\ss}": '\u00DF',
"\\ss ": '\u00DF',
"{\\`a}": '\u00E0',
"{\\'a}": '\u00E1',
"{\\^a}": '\u00E2',
"{\\~a}": '\u00E3',
"{\\\"a}": '\u00E4',
"{\\aa}": '\u00E5',
"\\aa ": '\u00E5',
"{\\ae}": '\u00E6',
"\\ae ": '\u00E6',
"{\\c c}": '\u00E7',
"{\\`e}": '\u00E8',
"{\\'e}": '\u00E9',
"{\\^e}": '\u00EA',
"{\\\"e}": '\u00EB',
"{\\`\\i}": '\u00EC',
"{\\'\\i}": '\u00ED',
"{\\^\\i}": '\u00EE',
"{\\\"\\i}": '\u00EF',
"{\\dh}": '\u00F0',
"\\dh ": '\u00F0',
"{\\~n}": '\u00F1',
"{\\`o}": '\u00F2',
"{\\'o}": '\u00F3',
"{\\^o}": '\u00F4',
"{\\~o}": '\u00F5',
"{\\\"o}": '\u00F6',
"{\\div}": '\u00F7',
"\\div ": '\u00F7',
"{\\o}": '\u00F8',
"\\o ": '\u00F8',
"{\\`u}": '\u00F9',
"{\\'u}": '\u00FA',
"{\\^u}": '\u00FB',
"{\\\"u}": '\u00FC',
"{\\'y}": '\u00FD',
"{\\th}": '\u00FE',
"\\th ": '\u00FE',
"{\\\"y}": '\u00FF',
"\\={A}": '\u0100',
"\\=A": '\u0100',
"\\={a}": '\u0101',
"\\=a": '\u0101',
"{\\u A}": '\u0102',
"{\\u a}": '\u0103',
"\\k{A}": '\u0104',
"\\k{a}": '\u0105',
"{\\'C}": '\u0106',
"{\\'c}": '\u0107',
"{\\^C}": '\u0108',
"{\\^c}": '\u0109',
"{\\.C}": '\u010A',
"{\\.c}": '\u010B',
"{\\v C}": '\u010C',
"{\\v c}": '\u010D',
"{\\v D}": '\u010E',
"{\\v d}": '\u010F',
"{\\DJ}": '\u0110',
"\\DJ ": '\u0110',
"{\\dj}": '\u0111',
"\\dj ": '\u0111',
"\\={E}": '\u0112',
"\\=E": '\u0112',
"\\={e}": '\u0113',
"\\=e": '\u0113',
"{\\u E}": '\u0114',
"{\\u e}": '\u0115',
"{\\.E}": '\u0116',
"{\\.e}": '\u0117',
"\\k{E}": '\u0118',
"\\k{e}": '\u0119',
"{\\v E}": '\u011A',
"{\\v e}": '\u011B',
"{\\^G}": '\u011C',
"{\\^g}": '\u011D',
"{\\u G}": '\u011E',
"{\\u g}": '\u011F',
"{\\.G}": '\u0120',
"{\\.g}": '\u0121',
"{\\c G}": '\u0122',
"{\\c g}": '\u0123',
"{\\^H}": '\u0124',
"{\\^h}": '\u0125',
"{\\fontencoding{LELA}\\selectfont\\char40}": '\u0126',
"{\\Elzxh}": '\u0127',
"\\Elzxh ": '\u0127',
"{\\~I}": '\u0128',
"{\\~\\i}": '\u0129',
"\\={I}": '\u012A',
"\\=I": '\u012A',
"\\={\\i}": '\u012B',
"{\\u I}": '\u012C',
"{\\u \\i}": '\u012D',
"\\k{I}": '\u012E',
"\\k{i}": '\u012F',
"{\\.I}": '\u0130',
"{\\i}": '\u0131',
"\\i ": '\u0131',
"{\\^J}": '\u0134',
"{\\^\\j}": '\u0135',
"{\\c K}": '\u0136',
"{\\c k}": '\u0137',
"{\\fontencoding{LELA}\\selectfont\\char91}": '\u0138',
"{\\'L}": '\u0139',
"{\\'l}": '\u013A',
"{\\c L}": '\u013B',
"{\\c l}": '\u013C',
"{\\v L}": '\u013D',
"{\\v l}": '\u013E',
"{\\fontencoding{LELA}\\selectfont\\char201}": '\u013F',
"{\\fontencoding{LELA}\\selectfont\\char202}": '\u0140',
"{\\L}": '\u0141',
"\\L ": '\u0141',
"{\\l}": '\u0142',
"\\l ": '\u0142',
"{\\'N}": '\u0143',
"{\\'n}": '\u0144',
"{\\c N}": '\u0145',
"{\\c n}": '\u0146',
"{\\v N}": '\u0147',
"{\\v n}": '\u0148',
"'n": '\u0149',
"{\\NG}": '\u014A',
"\\NG ": '\u014A',
"{\\ng}": '\u014B',
"\\ng ": '\u014B',
"\\={O}": '\u014C',
"\\=O": '\u014C',
"\\={o}": '\u014D',
"\\=o": '\u014D',
"{\\u O}": '\u014E',
"{\\u o}": '\u014F',
"{\\H O}": '\u0150',
"{\\H o}": '\u0151',
"{\\OE}": '\u0152',
"\\OE ": '\u0152',
"{\\oe}": '\u0153',
"\\oe ": '\u0153',
"{\\'R}": '\u0154',
"{\\'r}": '\u0155',
"{\\c R}": '\u0156',
"{\\c r}": '\u0157',
"{\\v R}": '\u0158',
"{\\v r}": '\u0159',
"{\\'S}": '\u015A',
"{\\'s}": '\u015B',
"{\\^S}": '\u015C',
"{\\^s}": '\u015D',
"{\\c S}": '\u015E',
"{\\c s}": '\u015F',
"{\\v S}": '\u0160',
"{\\v s}": '\u0161',
"{\\c T}": '\u0162',
"{\\c t}": '\u0163',
"{\\v T}": '\u0164',
"{\\v t}": '\u0165',
"{\\fontencoding{LELA}\\selectfont\\char47}": '\u0166',
"{\\fontencoding{LELA}\\selectfont\\char63}": '\u0167',
"{\\~U}": '\u0168',
"{\\~u}": '\u0169',
"\\={U}": '\u016A',
"\\=U": '\u016A',
"\\={u}": '\u016B',
"\\=u": '\u016B',
"{\\u U}": '\u016C',
"{\\u u}": '\u016D',
"\\r{U}": '\u016E',
"\\r{u}": '\u016F',
"{\\H U}": '\u0170',
"{\\H u}": '\u0171',
"\\k{U}": '\u0172',
"\\k{u}": '\u0173',
"{\\^W}": '\u0174',
"{\\^w}": '\u0175',
"{\\^Y}": '\u0176',
"{\\^y}": '\u0177',
"{\\\"Y}": '\u0178',
"{\\'Z}": '\u0179',
"{\\'z}": '\u017A',
"{\\.Z}": '\u017B',
"{\\.z}": '\u017C',
"{\\v Z}": '\u017D',
"{\\v z}": '\u017E',
"{\\texthvlig}": '\u0195',
"\\texthvlig ": '\u0195',
"{\\textnrleg}": '\u019E',
"\\textnrleg ": '\u019E',
"{\\eth}": '\u01AA',
"\\eth ": '\u01AA',
"{\\fontencoding{LELA}\\selectfont\\char195}": '\u01BA',
"{\\textdoublepipe}": '\u01C2',
"\\textdoublepipe ": '\u01C2',
"{\\'g}": '\u01F5',
"{\\Elztrna}": '\u0250',
"\\Elztrna ": '\u0250',
"{\\Elztrnsa}": '\u0252',
"\\Elztrnsa ": '\u0252',
"{\\Elzopeno}": '\u0254',
"\\Elzopeno ": '\u0254',
"{\\Elzrtld}": '\u0256',
"\\Elzrtld ": '\u0256',
"{\\fontencoding{LEIP}\\selectfont\\char61}": '\u0258',
"{\\Elzschwa}": '\u0259',
"\\Elzschwa ": '\u0259',
"{\\varepsilon}": '\u025B',
"\\varepsilon ": '\u025B',
"{\\Elzpgamma}": '\u0263',
"\\Elzpgamma ": '\u0263',
"{\\Elzpbgam}": '\u0264',
"\\Elzpbgam ": '\u0264',
"{\\Elztrnh}": '\u0265',
"\\Elztrnh ": '\u0265',
"{\\Elzbtdl}": '\u026C',
"\\Elzbtdl ": '\u026C',
"{\\Elzrtll}": '\u026D',
"\\Elzrtll ": '\u026D',
"{\\Elztrnm}": '\u026F',
"\\Elztrnm ": '\u026F',
"{\\Elztrnmlr}": '\u0270',
"\\Elztrnmlr ": '\u0270',
"{\\Elzltlmr}": '\u0271',
"\\Elzltlmr ": '\u0271',
"{\\Elzltln}": '\u0272',
"\\Elzltln ": '\u0272',
"{\\Elzrtln}": '\u0273',
"\\Elzrtln ": '\u0273',
"{\\Elzclomeg}": '\u0277',
"\\Elzclomeg ": '\u0277',
"{\\textphi}": '\u0278',
"\\textphi ": '\u0278',
"{\\Elztrnr}": '\u0279',
"\\Elztrnr ": '\u0279',
"{\\Elztrnrl}": '\u027A',
"\\Elztrnrl ": '\u027A',
"{\\Elzrttrnr}": '\u027B',
"\\Elzrttrnr ": '\u027B',
"{\\Elzrl}": '\u027C',
"\\Elzrl ": '\u027C',
"{\\Elzrtlr}": '\u027D',
"\\Elzrtlr ": '\u027D',
"{\\Elzfhr}": '\u027E',
"\\Elzfhr ": '\u027E',
"{\\fontencoding{LEIP}\\selectfont\\char202}": '\u027F',
"{\\Elzrtls}": '\u0282',
"\\Elzrtls ": '\u0282',
"{\\Elzesh}": '\u0283',
"\\Elzesh ": '\u0283',
"{\\Elztrnt}": '\u0287',
"\\Elztrnt ": '\u0287',
"{\\Elzrtlt}": '\u0288',
"\\Elzrtlt ": '\u0288',
"{\\Elzpupsil}": '\u028A',
"\\Elzpupsil ": '\u028A',
"{\\Elzpscrv}": '\u028B',
"\\Elzpscrv ": '\u028B',
"{\\Elzinvv}": '\u028C',
"\\Elzinvv ": '\u028C',
"{\\Elzinvw}": '\u028D',
"\\Elzinvw ": '\u028D',
"{\\Elztrny}": '\u028E',
"\\Elztrny ": '\u028E',
"{\\Elzrtlz}": '\u0290',
"\\Elzrtlz ": '\u0290',
"{\\Elzyogh}": '\u0292',
"\\Elzyogh ": '\u0292',
"{\\Elzglst}": '\u0294',
"\\Elzglst ": '\u0294',
"{\\Elzreglst}": '\u0295',
"\\Elzreglst ": '\u0295',
"{\\Elzinglst}": '\u0296',
"\\Elzinglst ": '\u0296',
"{\\textturnk}": '\u029E',
"\\textturnk ": '\u029E',
"{\\Elzdyogh}": '\u02A4',
"\\Elzdyogh ": '\u02A4',
"{\\Elztesh}": '\u02A7',
"\\Elztesh ": '\u02A7',
"'": '\u02BC',
"{\\textasciicaron}": '\u02C7',
"\\textasciicaron ": '\u02C7',
"{\\Elzverts}": '\u02C8',
"\\Elzverts ": '\u02C8',
"{\\Elzverti}": '\u02CC',
"\\Elzverti ": '\u02CC',
"{\\Elzlmrk}": '\u02D0',
"\\Elzlmrk ": '\u02D0',
"{\\Elzhlmrk}": '\u02D1',
"\\Elzhlmrk ": '\u02D1',
"{\\Elzsbrhr}": '\u02D2',
"\\Elzsbrhr ": '\u02D2',
"{\\Elzsblhr}": '\u02D3',
"\\Elzsblhr ": '\u02D3',
"{\\Elzrais}": '\u02D4',
"\\Elzrais ": '\u02D4',
"{\\Elzlow}": '\u02D5',
"\\Elzlow ": '\u02D5',
"{\\textasciibreve}": '\u02D8',
"\\textasciibreve ": '\u02D8',
"{\\textperiodcentered}": '\u02D9',
"\\textperiodcentered ": '\u02D9',
"\\r{}": '\u02DA',
"\\k{}": '\u02DB',
"{\\texttildelow}": '\u02DC',
"\\texttildelow ": '\u02DC',
"\\H{}": '\u02DD',
"\\tone{55}": '\u02E5',
"\\tone{44}": '\u02E6',
"\\tone{33}": '\u02E7',
"\\tone{22}": '\u02E8',
"\\tone{11}": '\u02E9',
"\\`": '\u0300',
"\\'": '\u0301',
"\\^": '\u0302',
"\\~": '\u0303',
"\\=": '\u0304',
"\\u": '\u0306',
"\\.": '\u0307',
"\\\"": '\u0308',
"\\r": '\u030A',
"\\H": '\u030B',
"\\v": '\u030C',
"\\cyrchar\\C": '\u030F',
"{\\fontencoding{LECO}\\selectfont\\char177}": '\u0311',
"{\\fontencoding{LECO}\\selectfont\\char184}": '\u0318',
"{\\fontencoding{LECO}\\selectfont\\char185}": '\u0319',
"{\\Elzpalh}": '\u0321',
"\\Elzpalh ": '\u0321',
"{\\Elzrh}": '\u0322',
"\\Elzrh ": '\u0322',
"\\c": '\u0327',
"\\k": '\u0328',
"{\\Elzsbbrg}": '\u032A',
"\\Elzsbbrg ": '\u032A',
"{\\fontencoding{LECO}\\selectfont\\char203}": '\u032B',
"{\\fontencoding{LECO}\\selectfont\\char207}": '\u032F',
"{\\Elzxl}": '\u0335',
"\\Elzxl ": '\u0335',
"{\\Elzbar}": '\u0336',
"\\Elzbar ": '\u0336',
"{\\fontencoding{LECO}\\selectfont\\char215}": '\u0337',
"{\\fontencoding{LECO}\\selectfont\\char216}": '\u0338',
"{\\fontencoding{LECO}\\selectfont\\char218}": '\u033A',
"{\\fontencoding{LECO}\\selectfont\\char219}": '\u033B',
"{\\fontencoding{LECO}\\selectfont\\char220}": '\u033C',
"{\\fontencoding{LECO}\\selectfont\\char221}": '\u033D',
"{\\fontencoding{LECO}\\selectfont\\char225}": '\u0361',
"{\\'H}": '\u0389',
"\\'{}{I}": '\u038A',
"\\'{}O": '\u038C',
"\\mathrm{'Y}": '\u038E',
"\\mathrm{'\\Omega}": '\u038F',
"\\acute{\\ddot{\\iota}}": '\u0390',
"{\\Alpha}": '\u0391',
"\\Alpha ": '\u0391',
"{\\Beta}": '\u0392',
"\\Beta ": '\u0392',
"{\\Gamma}": '\u0393',
"\\Gamma ": '\u0393',
"{\\Delta}": '\u0394',
"\\Delta ": '\u0394',
"{\\Epsilon}": '\u0395',
"\\Epsilon ": '\u0395',
"{\\Zeta}": '\u0396',
"\\Zeta ": '\u0396',
"{\\Eta}": '\u0397',
"\\Eta ": '\u0397',
"{\\Theta}": '\u0398',
"\\Theta ": '\u0398',
"{\\Iota}": '\u0399',
"\\Iota ": '\u0399',
"{\\Kappa}": '\u039A',
"\\Kappa ": '\u039A',
"{\\Lambda}": '\u039B',
"\\Lambda ": '\u039B',
"{\\Xi}": '\u039E',
"\\Xi ": '\u039E',
"{\\Pi}": '\u03A0',
"\\Pi ": '\u03A0',
"{\\Rho}": '\u03A1',
"\\Rho ": '\u03A1',
"{\\Sigma}": '\u03A3',
"\\Sigma ": '\u03A3',
"{\\Tau}": '\u03A4',
"\\Tau ": '\u03A4',
"{\\Upsilon}": '\u03A5',
"\\Upsilon ": '\u03A5',
"{\\Phi}": '\u03A6',
"\\Phi ": '\u03A6',
"{\\Chi}": '\u03A7',
"\\Chi ": '\u03A7',
"{\\Psi}": '\u03A8',
"\\Psi ": '\u03A8',
"{\\Omega}": '\u03A9',
"\\Omega ": '\u03A9',
"\\mathrm{\\ddot{I}}": '\u03AA',
"\\mathrm{\\ddot{Y}}": '\u03AB',
"{\\'$\\alpha$}": '\u03AC',
"\\acute{\\epsilon}": '\u03AD',
"\\acute{\\eta}": '\u03AE',
"\\acute{\\iota}": '\u03AF',
"\\acute{\\ddot{\\upsilon}}": '\u03B0',
"{\\alpha}": '\u03B1',
"\\alpha ": '\u03B1',
"{\\beta}": '\u03B2',
"\\beta ": '\u03B2',
"{\\gamma}": '\u03B3',
"\\gamma ": '\u03B3',
"{\\delta}": '\u03B4',
"\\delta ": '\u03B4',
"{\\epsilon}": '\u03B5',
"\\epsilon ": '\u03B5',
"{\\zeta}": '\u03B6',
"\\zeta ": '\u03B6',
"{\\eta}": '\u03B7',
"\\eta ": '\u03B7',
"{\\texttheta}": '\u03B8',
"\\texttheta ": '\u03B8',
"{\\iota}": '\u03B9',
"\\iota ": '\u03B9',
"{\\kappa}": '\u03BA',
"\\kappa ": '\u03BA',
"{\\lambda}": '\u03BB',
"\\lambda ": '\u03BB',
"{\\mu}": '\u03BC',
"\\mu ": '\u03BC',
"{\\nu}": '\u03BD',
"\\nu ": '\u03BD',
"{\\xi}": '\u03BE',
"\\xi ": '\u03BE',
"{\\pi}": '\u03C0',
"\\pi ": '\u03C0',
"{\\rho}": '\u03C1',
"\\rho ": '\u03C1',
"{\\varsigma}": '\u03C2',
"\\varsigma ": '\u03C2',
"{\\sigma}": '\u03C3',
"\\sigma ": '\u03C3',
"{\\tau}": '\u03C4',
"\\tau ": '\u03C4',
"{\\upsilon}": '\u03C5',
"\\upsilon ": '\u03C5',
"{\\varphi}": '\u03C6',
"\\varphi ": '\u03C6',
"{\\chi}": '\u03C7',
"\\chi ": '\u03C7',
"{\\psi}": '\u03C8',
"\\psi ": '\u03C8',
"{\\omega}": '\u03C9',
"\\omega ": '\u03C9',
"\\ddot{\\iota}": '\u03CA',
"\\ddot{\\upsilon}": '\u03CB',
"\\acute{\\upsilon}": '\u03CD',
"\\acute{\\omega}": '\u03CE',
"\\Pisymbol{ppi022}{87}": '\u03D0',
"{\\textvartheta}": '\u03D1',
"\\textvartheta ": '\u03D1',
"{\\phi}": '\u03D5',
"\\phi ": '\u03D5',
"{\\varpi}": '\u03D6',
"\\varpi ": '\u03D6',
"{\\Stigma}": '\u03DA',
"\\Stigma ": '\u03DA',
"{\\Digamma}": '\u03DC',
"\\Digamma ": '\u03DC',
"{\\digamma}": '\u03DD',
"\\digamma ": '\u03DD',
"{\\Koppa}": '\u03DE',
"\\Koppa ": '\u03DE',
"{\\Sampi}": '\u03E0',
"\\Sampi ": '\u03E0',
"{\\varkappa}": '\u03F0',
"\\varkappa ": '\u03F0',
"{\\varrho}": '\u03F1',
"\\varrho ": '\u03F1',
"{\\textTheta}": '\u03F4',
"\\textTheta ": '\u03F4',
"{\\backepsilon}": '\u03F6',
"\\backepsilon ": '\u03F6',
"{\\cyrchar\\CYRYO}": '\u0401',
"\\cyrchar\\CYRYO ": '\u0401',
"{\\cyrchar\\CYRDJE}": '\u0402',
"\\cyrchar\\CYRDJE ": '\u0402',
"\\cyrchar{\\'\\CYRG}": '\u0403',
"{\\cyrchar\\CYRIE}": '\u0404',
"\\cyrchar\\CYRIE ": '\u0404',
"{\\cyrchar\\CYRDZE}": '\u0405',
"\\cyrchar\\CYRDZE ": '\u0405',
"{\\cyrchar\\CYRII}": '\u0406',
"\\cyrchar\\CYRII ": '\u0406',
"{\\cyrchar\\CYRYI}": '\u0407',
"\\cyrchar\\CYRYI ": '\u0407',
"{\\cyrchar\\CYRJE}": '\u0408',
"\\cyrchar\\CYRJE ": '\u0408',
"{\\cyrchar\\CYRLJE}": '\u0409',
"\\cyrchar\\CYRLJE ": '\u0409',
"{\\cyrchar\\CYRNJE}": '\u040A',
"\\cyrchar\\CYRNJE ": '\u040A',
"{\\cyrchar\\CYRTSHE}": '\u040B',
"\\cyrchar\\CYRTSHE ": '\u040B',
"\\cyrchar{\\'\\CYRK}": '\u040C',
"{\\cyrchar\\CYRUSHRT}": '\u040E',
"\\cyrchar\\CYRUSHRT ": '\u040E',
"{\\cyrchar\\CYRDZHE}": '\u040F',
"\\cyrchar\\CYRDZHE ": '\u040F',
"{\\cyrchar\\CYRA}": '\u0410',
"\\cyrchar\\CYRA ": '\u0410',
"{\\cyrchar\\CYRB}": '\u0411',
"\\cyrchar\\CYRB ": '\u0411',
"{\\cyrchar\\CYRV}": '\u0412',
"\\cyrchar\\CYRV ": '\u0412',
"{\\cyrchar\\CYRG}": '\u0413',
"\\cyrchar\\CYRG ": '\u0413',
"{\\cyrchar\\CYRD}": '\u0414',
"\\cyrchar\\CYRD ": '\u0414',
"{\\cyrchar\\CYRE}": '\u0415',
"\\cyrchar\\CYRE ": '\u0415',
"{\\cyrchar\\CYRZH}": '\u0416',
"\\cyrchar\\CYRZH ": '\u0416',
"{\\cyrchar\\CYRZ}": '\u0417',
"\\cyrchar\\CYRZ ": '\u0417',
"{\\cyrchar\\CYRI}": '\u0418',
"\\cyrchar\\CYRI ": '\u0418',
"{\\cyrchar\\CYRISHRT}": '\u0419',
"\\cyrchar\\CYRISHRT ": '\u0419',
"{\\cyrchar\\CYRK}": '\u041A',
"\\cyrchar\\CYRK ": '\u041A',
"{\\cyrchar\\CYRL}": '\u041B',
"\\cyrchar\\CYRL ": '\u041B',
"{\\cyrchar\\CYRM}": '\u041C',
"\\cyrchar\\CYRM ": '\u041C',
"{\\cyrchar\\CYRN}": '\u041D',
"\\cyrchar\\CYRN ": '\u041D',
"{\\cyrchar\\CYRO}": '\u041E',
"\\cyrchar\\CYRO ": '\u041E',
"{\\cyrchar\\CYRP}": '\u041F',
"\\cyrchar\\CYRP ": '\u041F',
"{\\cyrchar\\CYRR}": '\u0420',
"\\cyrchar\\CYRR ": '\u0420',
"{\\cyrchar\\CYRS}": '\u0421',
"\\cyrchar\\CYRS ": '\u0421',
"{\\cyrchar\\CYRT}": '\u0422',
"\\cyrchar\\CYRT ": '\u0422',
"{\\cyrchar\\CYRU}": '\u0423',
"\\cyrchar\\CYRU ": '\u0423',
"{\\cyrchar\\CYRF}": '\u0424',
"\\cyrchar\\CYRF ": '\u0424',
"{\\cyrchar\\CYRH}": '\u0425',
"\\cyrchar\\CYRH ": '\u0425',
"{\\cyrchar\\CYRC}": '\u0426',
"\\cyrchar\\CYRC ": '\u0426',
"{\\cyrchar\\CYRCH}": '\u0427',
"\\cyrchar\\CYRCH ": '\u0427',
"{\\cyrchar\\CYRSH}": '\u0428',
"\\cyrchar\\CYRSH ": '\u0428',
"{\\cyrchar\\CYRSHCH}": '\u0429',
"\\cyrchar\\CYRSHCH ": '\u0429',
"{\\cyrchar\\CYRHRDSN}": '\u042A',
"\\cyrchar\\CYRHRDSN ": '\u042A',
"{\\cyrchar\\CYRERY}": '\u042B',
"\\cyrchar\\CYRERY ": '\u042B',
"{\\cyrchar\\CYRSFTSN}": '\u042C',
"\\cyrchar\\CYRSFTSN ": '\u042C',
"{\\cyrchar\\CYREREV}": '\u042D',
"\\cyrchar\\CYREREV ": '\u042D',
"{\\cyrchar\\CYRYU}": '\u042E',
"\\cyrchar\\CYRYU ": '\u042E',
"{\\cyrchar\\CYRYA}": '\u042F',
"\\cyrchar\\CYRYA ": '\u042F',
"{\\cyrchar\\cyra}": '\u0430',
"\\cyrchar\\cyra ": '\u0430',
"{\\cyrchar\\cyrb}": '\u0431',
"\\cyrchar\\cyrb ": '\u0431',
"{\\cyrchar\\cyrv}": '\u0432',
"\\cyrchar\\cyrv ": '\u0432',
"{\\cyrchar\\cyrg}": '\u0433',
"\\cyrchar\\cyrg ": '\u0433',
"{\\cyrchar\\cyrd}": '\u0434',
"\\cyrchar\\cyrd ": '\u0434',
"{\\cyrchar\\cyre}": '\u0435',
"\\cyrchar\\cyre ": '\u0435',
"{\\cyrchar\\cyrzh}": '\u0436',
"\\cyrchar\\cyrzh ": '\u0436',
"{\\cyrchar\\cyrz}": '\u0437',
"\\cyrchar\\cyrz ": '\u0437',
"{\\cyrchar\\cyri}": '\u0438',
"\\cyrchar\\cyri ": '\u0438',
"{\\cyrchar\\cyrishrt}": '\u0439',
"\\cyrchar\\cyrishrt ": '\u0439',
"{\\cyrchar\\cyrk}": '\u043A',
"\\cyrchar\\cyrk ": '\u043A',
"{\\cyrchar\\cyrl}": '\u043B',
"\\cyrchar\\cyrl ": '\u043B',
"{\\cyrchar\\cyrm}": '\u043C',
"\\cyrchar\\cyrm ": '\u043C',
"{\\cyrchar\\cyrn}": '\u043D',
"\\cyrchar\\cyrn ": '\u043D',
"{\\cyrchar\\cyro}": '\u043E',
"\\cyrchar\\cyro ": '\u043E',
"{\\cyrchar\\cyrp}": '\u043F',
"\\cyrchar\\cyrp ": '\u043F',
"{\\cyrchar\\cyrr}": '\u0440',
"\\cyrchar\\cyrr ": '\u0440',
"{\\cyrchar\\cyrs}": '\u0441',
"\\cyrchar\\cyrs ": '\u0441',
"{\\cyrchar\\cyrt}": '\u0442',
"\\cyrchar\\cyrt ": '\u0442',
"{\\cyrchar\\cyru}": '\u0443',
"\\cyrchar\\cyru ": '\u0443',
"{\\cyrchar\\cyrf}": '\u0444',
"\\cyrchar\\cyrf ": '\u0444',
"{\\cyrchar\\cyrh}": '\u0445',
"\\cyrchar\\cyrh ": '\u0445',
"{\\cyrchar\\cyrc}": '\u0446',
"\\cyrchar\\cyrc ": '\u0446',
"{\\cyrchar\\cyrch}": '\u0447',
"\\cyrchar\\cyrch ": '\u0447',
"{\\cyrchar\\cyrsh}": '\u0448',
"\\cyrchar\\cyrsh ": '\u0448',
"{\\cyrchar\\cyrshch}": '\u0449',
"\\cyrchar\\cyrshch ": '\u0449',
"{\\cyrchar\\cyrhrdsn}": '\u044A',
"\\cyrchar\\cyrhrdsn ": '\u044A',
"{\\cyrchar\\cyrery}": '\u044B',
"\\cyrchar\\cyrery ": '\u044B',
"{\\cyrchar\\cyrsftsn}": '\u044C',
"\\cyrchar\\cyrsftsn ": '\u044C',
"{\\cyrchar\\cyrerev}": '\u044D',
"\\cyrchar\\cyrerev ": '\u044D',
"{\\cyrchar\\cyryu}": '\u044E',
"\\cyrchar\\cyryu ": '\u044E',
"{\\cyrchar\\cyrya}": '\u044F',
"\\cyrchar\\cyrya ": '\u044F',
"{\\cyrchar\\cyryo}": '\u0451',
"\\cyrchar\\cyryo ": '\u0451',
"{\\cyrchar\\cyrdje}": '\u0452',
"\\cyrchar\\cyrdje ": '\u0452',
"\\cyrchar{\\'\\cyrg}": '\u0453',
"{\\cyrchar\\cyrie}": '\u0454',
"\\cyrchar\\cyrie ": '\u0454',
"{\\cyrchar\\cyrdze}": '\u0455',
"\\cyrchar\\cyrdze ": '\u0455',
"{\\cyrchar\\cyrii}": '\u0456',
"\\cyrchar\\cyrii ": '\u0456',
"{\\cyrchar\\cyryi}": '\u0457',
"\\cyrchar\\cyryi ": '\u0457',
"{\\cyrchar\\cyrje}": '\u0458',
"\\cyrchar\\cyrje ": '\u0458',
"{\\cyrchar\\cyrlje}": '\u0459',
"\\cyrchar\\cyrlje ": '\u0459',
"{\\cyrchar\\cyrnje}": '\u045A',
"\\cyrchar\\cyrnje ": '\u045A',
"{\\cyrchar\\cyrtshe}": '\u045B',
"\\cyrchar\\cyrtshe ": '\u045B',
"\\cyrchar{\\'\\cyrk}": '\u045C',
"{\\cyrchar\\cyrushrt}": '\u045E',
"\\cyrchar\\cyrushrt ": '\u045E',
"{\\cyrchar\\cyrdzhe}": '\u045F',
"\\cyrchar\\cyrdzhe ": '\u045F',
"{\\cyrchar\\CYROMEGA}": '\u0460',
"\\cyrchar\\CYROMEGA ": '\u0460',
"{\\cyrchar\\cyromega}": '\u0461',
"\\cyrchar\\cyromega ": '\u0461',
"{\\cyrchar\\CYRYAT}": '\u0462',
"\\cyrchar\\CYRYAT ": '\u0462',
"{\\cyrchar\\CYRIOTE}": '\u0464',
"\\cyrchar\\CYRIOTE ": '\u0464',
"{\\cyrchar\\cyriote}": '\u0465',
"\\cyrchar\\cyriote ": '\u0465',
"{\\cyrchar\\CYRLYUS}": '\u0466',
"\\cyrchar\\CYRLYUS ": '\u0466',
"{\\cyrchar\\cyrlyus}": '\u0467',
"\\cyrchar\\cyrlyus ": '\u0467',
"{\\cyrchar\\CYRIOTLYUS}": '\u0468',
"\\cyrchar\\CYRIOTLYUS ": '\u0468',
"{\\cyrchar\\cyriotlyus}": '\u0469',
"\\cyrchar\\cyriotlyus ": '\u0469',
"{\\cyrchar\\CYRBYUS}": '\u046A',
"\\cyrchar\\CYRBYUS ": '\u046A',
"{\\cyrchar\\CYRIOTBYUS}": '\u046C',
"\\cyrchar\\CYRIOTBYUS ": '\u046C',
"{\\cyrchar\\cyriotbyus}": '\u046D',
"\\cyrchar\\cyriotbyus ": '\u046D',
"{\\cyrchar\\CYRKSI}": '\u046E',
"\\cyrchar\\CYRKSI ": '\u046E',
"{\\cyrchar\\cyrksi}": '\u046F',
"\\cyrchar\\cyrksi ": '\u046F',
"{\\cyrchar\\CYRPSI}": '\u0470',
"\\cyrchar\\CYRPSI ": '\u0470',
"{\\cyrchar\\cyrpsi}": '\u0471',
"\\cyrchar\\cyrpsi ": '\u0471',
"{\\cyrchar\\CYRFITA}": '\u0472',
"\\cyrchar\\CYRFITA ": '\u0472',
"{\\cyrchar\\CYRIZH}": '\u0474',
"\\cyrchar\\CYRIZH ": '\u0474',
"{\\cyrchar\\CYRUK}": '\u0478',
"\\cyrchar\\CYRUK ": '\u0478',
"{\\cyrchar\\cyruk}": '\u0479',
"\\cyrchar\\cyruk ": '\u0479',
"{\\cyrchar\\CYROMEGARND}": '\u047A',
"\\cyrchar\\CYROMEGARND ": '\u047A',
"{\\cyrchar\\cyromegarnd}": '\u047B',
"\\cyrchar\\cyromegarnd ": '\u047B',
"{\\cyrchar\\CYROMEGATITLO}": '\u047C',
"\\cyrchar\\CYROMEGATITLO ": '\u047C',
"{\\cyrchar\\cyromegatitlo}": '\u047D',
"\\cyrchar\\cyromegatitlo ": '\u047D',
"{\\cyrchar\\CYROT}": '\u047E',
"\\cyrchar\\CYROT ": '\u047E',
"{\\cyrchar\\cyrot}": '\u047F',
"\\cyrchar\\cyrot ": '\u047F',
"{\\cyrchar\\CYRKOPPA}": '\u0480',
"\\cyrchar\\CYRKOPPA ": '\u0480',
"{\\cyrchar\\cyrkoppa}": '\u0481',
"\\cyrchar\\cyrkoppa ": '\u0481',
"{\\cyrchar\\cyrthousands}": '\u0482',
"\\cyrchar\\cyrthousands ": '\u0482',
"{\\cyrchar\\cyrhundredthousands}": '\u0488',
"\\cyrchar\\cyrhundredthousands ": '\u0488',
"{\\cyrchar\\cyrmillions}": '\u0489',
"\\cyrchar\\cyrmillions ": '\u0489',
"{\\cyrchar\\CYRSEMISFTSN}": '\u048C',
"\\cyrchar\\CYRSEMISFTSN ": '\u048C',
"{\\cyrchar\\cyrsemisftsn}": '\u048D',
"\\cyrchar\\cyrsemisftsn ": '\u048D',
"{\\cyrchar\\CYRRTICK}": '\u048E',
"\\cyrchar\\CYRRTICK ": '\u048E',
"{\\cyrchar\\cyrrtick}": '\u048F',
"\\cyrchar\\cyrrtick ": '\u048F',
"{\\cyrchar\\CYRGUP}": '\u0490',
"\\cyrchar\\CYRGUP ": '\u0490',
"{\\cyrchar\\cyrgup}": '\u0491',
"\\cyrchar\\cyrgup ": '\u0491',
"{\\cyrchar\\CYRGHCRS}": '\u0492',
"\\cyrchar\\CYRGHCRS ": '\u0492',
"{\\cyrchar\\cyrghcrs}": '\u0493',
"\\cyrchar\\cyrghcrs ": '\u0493',
"{\\cyrchar\\CYRGHK}": '\u0494',
"\\cyrchar\\CYRGHK ": '\u0494',
"{\\cyrchar\\cyrghk}": '\u0495',
"\\cyrchar\\cyrghk ": '\u0495',
"{\\cyrchar\\CYRZHDSC}": '\u0496',
"\\cyrchar\\CYRZHDSC ": '\u0496',
"{\\cyrchar\\cyrzhdsc}": '\u0497',
"\\cyrchar\\cyrzhdsc ": '\u0497',
"{\\cyrchar\\CYRZDSC}": '\u0498',
"\\cyrchar\\CYRZDSC ": '\u0498',
"{\\cyrchar\\cyrzdsc}": '\u0499',
"\\cyrchar\\cyrzdsc ": '\u0499',
"{\\cyrchar\\CYRKDSC}": '\u049A',
"\\cyrchar\\CYRKDSC ": '\u049A',
"{\\cyrchar\\cyrkdsc}": '\u049B',
"\\cyrchar\\cyrkdsc ": '\u049B',
"{\\cyrchar\\CYRKVCRS}": '\u049C',
"\\cyrchar\\CYRKVCRS ": '\u049C',
"{\\cyrchar\\cyrkvcrs}": '\u049D',
"\\cyrchar\\cyrkvcrs ": '\u049D',
"{\\cyrchar\\CYRKHCRS}": '\u049E',
"\\cyrchar\\CYRKHCRS ": '\u049E',
"{\\cyrchar\\cyrkhcrs}": '\u049F',
"\\cyrchar\\cyrkhcrs ": '\u049F',
"{\\cyrchar\\CYRKBEAK}": '\u04A0',
"\\cyrchar\\CYRKBEAK ": '\u04A0',
"{\\cyrchar\\cyrkbeak}": '\u04A1',
"\\cyrchar\\cyrkbeak ": '\u04A1',
"{\\cyrchar\\CYRNDSC}": '\u04A2',
"\\cyrchar\\CYRNDSC ": '\u04A2',
"{\\cyrchar\\cyrndsc}": '\u04A3',
"\\cyrchar\\cyrndsc ": '\u04A3',
"{\\cyrchar\\CYRNG}": '\u04A4',
"\\cyrchar\\CYRNG ": '\u04A4',
"{\\cyrchar\\cyrng}": '\u04A5',
"\\cyrchar\\cyrng ": '\u04A5',
"{\\cyrchar\\CYRPHK}": '\u04A6',
"\\cyrchar\\CYRPHK ": '\u04A6',
"{\\cyrchar\\cyrphk}": '\u04A7',
"\\cyrchar\\cyrphk ": '\u04A7',
"{\\cyrchar\\CYRABHHA}": '\u04A8',
"\\cyrchar\\CYRABHHA ": '\u04A8',
"{\\cyrchar\\cyrabhha}": '\u04A9',
"\\cyrchar\\cyrabhha ": '\u04A9',
"{\\cyrchar\\CYRSDSC}": '\u04AA',
"\\cyrchar\\CYRSDSC ": '\u04AA',
"{\\cyrchar\\cyrsdsc}": '\u04AB',
"\\cyrchar\\cyrsdsc ": '\u04AB',
"{\\cyrchar\\CYRTDSC}": '\u04AC',
"\\cyrchar\\CYRTDSC ": '\u04AC',
"{\\cyrchar\\cyrtdsc}": '\u04AD',
"\\cyrchar\\cyrtdsc ": '\u04AD',
"{\\cyrchar\\CYRY}": '\u04AE',
"\\cyrchar\\CYRY ": '\u04AE',
"{\\cyrchar\\cyry}": '\u04AF',
"\\cyrchar\\cyry ": '\u04AF',
"{\\cyrchar\\CYRYHCRS}": '\u04B0',
"\\cyrchar\\CYRYHCRS ": '\u04B0',
"{\\cyrchar\\cyryhcrs}": '\u04B1',
"\\cyrchar\\cyryhcrs ": '\u04B1',
"{\\cyrchar\\CYRHDSC}": '\u04B2',
"\\cyrchar\\CYRHDSC ": '\u04B2',
"{\\cyrchar\\cyrhdsc}": '\u04B3',
"\\cyrchar\\cyrhdsc ": '\u04B3',
"{\\cyrchar\\CYRTETSE}": '\u04B4',
"\\cyrchar\\CYRTETSE ": '\u04B4',
"{\\cyrchar\\cyrtetse}": '\u04B5',
"\\cyrchar\\cyrtetse ": '\u04B5',
"{\\cyrchar\\CYRCHRDSC}": '\u04B6',
"\\cyrchar\\CYRCHRDSC ": '\u04B6',
"{\\cyrchar\\cyrchrdsc}": '\u04B7',
"\\cyrchar\\cyrchrdsc ": '\u04B7',
"{\\cyrchar\\CYRCHVCRS}": '\u04B8',
"\\cyrchar\\CYRCHVCRS ": '\u04B8',
"{\\cyrchar\\cyrchvcrs}": '\u04B9',
"\\cyrchar\\cyrchvcrs ": '\u04B9',
"{\\cyrchar\\CYRSHHA}": '\u04BA',
"\\cyrchar\\CYRSHHA ": '\u04BA',
"{\\cyrchar\\cyrshha}": '\u04BB',
"\\cyrchar\\cyrshha ": '\u04BB',
"{\\cyrchar\\CYRABHCH}": '\u04BC',
"\\cyrchar\\CYRABHCH ": '\u04BC',
"{\\cyrchar\\cyrabhch}": '\u04BD',
"\\cyrchar\\cyrabhch ": '\u04BD',
"{\\cyrchar\\CYRABHCHDSC}": '\u04BE',
"\\cyrchar\\CYRABHCHDSC ": '\u04BE',
"{\\cyrchar\\cyrabhchdsc}": '\u04BF',
"\\cyrchar\\cyrabhchdsc ": '\u04BF',
"{\\cyrchar\\CYRpalochka}": '\u04C0',
"\\cyrchar\\CYRpalochka ": '\u04C0',
"{\\cyrchar\\CYRKHK}": '\u04C3',
"\\cyrchar\\CYRKHK ": '\u04C3',
"{\\cyrchar\\cyrkhk}": '\u04C4',
"\\cyrchar\\cyrkhk ": '\u04C4',
"{\\cyrchar\\CYRNHK}": '\u04C7',
"\\cyrchar\\CYRNHK ": '\u04C7',
"{\\cyrchar\\cyrnhk}": '\u04C8',
"\\cyrchar\\cyrnhk ": '\u04C8',
"{\\cyrchar\\CYRCHLDSC}": '\u04CB',
"\\cyrchar\\CYRCHLDSC ": '\u04CB',
"{\\cyrchar\\cyrchldsc}": '\u04CC',
"\\cyrchar\\cyrchldsc ": '\u04CC',
"{\\cyrchar\\CYRAE}": '\u04D4',
"\\cyrchar\\CYRAE ": '\u04D4',
"{\\cyrchar\\cyrae}": '\u04D5',
"\\cyrchar\\cyrae ": '\u04D5',
"{\\cyrchar\\CYRSCHWA}": '\u04D8',
"\\cyrchar\\CYRSCHWA ": '\u04D8',
"{\\cyrchar\\cyrschwa}": '\u04D9',
"\\cyrchar\\cyrschwa ": '\u04D9',
"{\\cyrchar\\CYRABHDZE}": '\u04E0',
"\\cyrchar\\CYRABHDZE ": '\u04E0',
"{\\cyrchar\\cyrabhdze}": '\u04E1',
"\\cyrchar\\cyrabhdze ": '\u04E1',
"{\\cyrchar\\CYROTLD}": '\u04E8',
"\\cyrchar\\CYROTLD ": '\u04E8',
"{\\cyrchar\\cyrotld}": '\u04E9',
"\\cyrchar\\cyrotld ": '\u04E9',
"\\hspace{0.6em}": '\u2002',
"\\hspace{1em}": '\u2003',
"\\hspace{0.33em}": '\u2004',
"\\hspace{0.25em}": '\u2005',
"\\hspace{0.166em}": '\u2006',
"\\hphantom{0}": '\u2007',
"\\hphantom{,}": '\u2008',
"\\hspace{0.167em}": '\u2009',
"{\\mkern1mu}": '\u200A',
"\\mkern1mu ": '\u200A',
"\\mbox{}": '\u200B',
"-": '\u2010',
"{\\textendash}": '\u2013',
"\\textendash ": '\u2013',
"{\\textemdash}": '\u2014',
"\\textemdash ": '\u2014',
"\\rule{1em}{1pt}": '\u2015',
"{\\Vert}": '\u2016',
"\\Vert ": '\u2016',
"`": '\u2018',
",": '\u201A',
"{\\Elzreapos}": '\u201B',
"\\Elzreapos ": '\u201B',
"{\\textquotedblleft}": '\u201C',
"\\textquotedblleft ": '\u201C',
"{\\textquotedblright}": '\u201D',
"\\textquotedblright ": '\u201D',
",,": '\u201E',
"{\\textdagger}": '\u2020',
"\\textdagger ": '\u2020',
"{\\textdaggerdbl}": '\u2021',
"\\textdaggerdbl ": '\u2021',
"{\\textbullet}": '\u2022',
"\\textbullet ": '\u2022',
".": '\u2024',
"..": '\u2025',
"{\\ldots}": '\u2026',
"\\ldots ": '\u2026',
"{\\textperthousand}": '\u2030',
"\\textperthousand ": '\u2030',
"{\\textpertenthousand}": '\u2031',
"\\textpertenthousand ": '\u2031',
"{'}": '\u2032',
"{''}": '\u2033',
"{'''}": '\u2034',
"{\\backprime}": '\u2035',
"\\backprime ": '\u2035',
"{\\guilsinglleft}": '\u2039',
"\\guilsinglleft ": '\u2039',
"{\\guilsinglright}": '\u203A',
"\\guilsinglright ": '\u203A',
"''''": '\u2057',
"{\\mkern4mu}": '\u205F',
"\\mkern4mu ": '\u205F',
"{\\nolinebreak}": '\u2060',
"\\nolinebreak ": '\u2060',
"\\ensuremath{\\Elzpes}": '\u20A7',
"{\\mbox{\\texteuro}}": '\u20AC',
"\\mbox{\\texteuro} ": '\u20AC',
"{\\dddot}": '\u20DB',
"\\dddot ": '\u20DB',
"{\\ddddot}": '\u20DC',
"\\ddddot ": '\u20DC',
"\\mathbb{C}": '\u2102',
"\\mathscr{g}": '\u210A',
"\\mathscr{H}": '\u210B',
"\\mathfrak{H}": '\u210C',
"\\mathbb{H}": '\u210D',
"{\\hslash}": '\u210F',
"\\hslash ": '\u210F',
"\\mathscr{I}": '\u2110',
"\\mathfrak{I}": '\u2111',
"\\mathscr{L}": '\u2112',
"\\mathscr{l}": '\u2113',
"\\mathbb{N}": '\u2115',
"{\\cyrchar\\textnumero}": '\u2116',
"\\cyrchar\\textnumero ": '\u2116',
"{\\wp}": '\u2118',
"\\wp ": '\u2118',
"\\mathbb{P}": '\u2119',
"\\mathbb{Q}": '\u211A',
"\\mathscr{R}": '\u211B',
"\\mathfrak{R}": '\u211C',
"\\mathbb{R}": '\u211D',
"{\\Elzxrat}": '\u211E',
"\\Elzxrat ": '\u211E',
"{\\texttrademark}": '\u2122',
"\\texttrademark ": '\u2122',
"\\mathbb{Z}": '\u2124',
"{\\mho}": '\u2127',
"\\mho ": '\u2127',
"\\mathfrak{Z}": '\u2128',
"\\ElsevierGlyph{2129}": '\u2129',
"\\mathscr{B}": '\u212C',
"\\mathfrak{C}": '\u212D',
"\\mathscr{e}": '\u212F',
"\\mathscr{E}": '\u2130',
"\\mathscr{F}": '\u2131',
"\\mathscr{M}": '\u2133',
"\\mathscr{o}": '\u2134',
"{\\aleph}": '\u2135',
"\\aleph ": '\u2135',
"{\\beth}": '\u2136',
"\\beth ": '\u2136',
"{\\gimel}": '\u2137',
"\\gimel ": '\u2137',
"{\\daleth}": '\u2138',
"\\daleth ": '\u2138',
"\\textfrac{1}{3}": '\u2153',
"\\textfrac{2}{3}": '\u2154',
"\\textfrac{1}{5}": '\u2155',
"\\textfrac{2}{5}": '\u2156',
"\\textfrac{3}{5}": '\u2157',
"\\textfrac{4}{5}": '\u2158',
"\\textfrac{1}{6}": '\u2159',
"\\textfrac{5}{6}": '\u215A',
"\\textfrac{1}{8}": '\u215B',
"\\textfrac{3}{8}": '\u215C',
"\\textfrac{5}{8}": '\u215D',
"\\textfrac{7}{8}": '\u215E',
"{\\leftarrow}": '\u2190',
"\\leftarrow ": '\u2190',
"{\\uparrow}": '\u2191',
"\\uparrow ": '\u2191',
"{\\rightarrow}": '\u2192',
"\\rightarrow ": '\u2192',
"{\\downarrow}": '\u2193',
"\\downarrow ": '\u2193',
"{\\leftrightarrow}": '\u2194',
"\\leftrightarrow ": '\u2194',
"{\\updownarrow}": '\u2195',
"\\updownarrow ": '\u2195',
"{\\nwarrow}": '\u2196',
"\\nwarrow ": '\u2196',
"{\\nearrow}": '\u2197',
"\\nearrow ": '\u2197',
"{\\searrow}": '\u2198',
"\\searrow ": '\u2198',
"{\\swarrow}": '\u2199',
"\\swarrow ": '\u2199',
"{\\nleftarrow}": '\u219A',
"\\nleftarrow ": '\u219A',
"{\\nrightarrow}": '\u219B',
"\\nrightarrow ": '\u219B',
"{\\arrowwaveright}": '\u219C',
"\\arrowwaveright ": '\u219C',
"{\\twoheadleftarrow}": '\u219E',
"\\twoheadleftarrow ": '\u219E',
"{\\twoheadrightarrow}": '\u21A0',
"\\twoheadrightarrow ": '\u21A0',
"{\\leftarrowtail}": '\u21A2',
"\\leftarrowtail ": '\u21A2',
"{\\rightarrowtail}": '\u21A3',
"\\rightarrowtail ": '\u21A3',
"{\\mapsto}": '\u21A6',
"\\mapsto ": '\u21A6',
"{\\hookleftarrow}": '\u21A9',
"\\hookleftarrow ": '\u21A9',
"{\\hookrightarrow}": '\u21AA',
"\\hookrightarrow ": '\u21AA',
"{\\looparrowleft}": '\u21AB',
"\\looparrowleft ": '\u21AB',
"{\\looparrowright}": '\u21AC',
"\\looparrowright ": '\u21AC',
"{\\leftrightsquigarrow}": '\u21AD',
"\\leftrightsquigarrow ": '\u21AD',
"{\\nleftrightarrow}": '\u21AE',
"\\nleftrightarrow ": '\u21AE',
"{\\Lsh}": '\u21B0',
"\\Lsh ": '\u21B0',
"{\\Rsh}": '\u21B1',
"\\Rsh ": '\u21B1',
"\\ElsevierGlyph{21B3}": '\u21B3',
"{\\curvearrowleft}": '\u21B6',
"\\curvearrowleft ": '\u21B6',
"{\\curvearrowright}": '\u21B7',
"\\curvearrowright ": '\u21B7',
"{\\circlearrowleft}": '\u21BA',
"\\circlearrowleft ": '\u21BA',
"{\\circlearrowright}": '\u21BB',
"\\circlearrowright ": '\u21BB',
"{\\leftharpoonup}": '\u21BC',
"\\leftharpoonup ": '\u21BC',
"{\\leftharpoondown}": '\u21BD',
"\\leftharpoondown ": '\u21BD',
"{\\upharpoonright}": '\u21BE',
"\\upharpoonright ": '\u21BE',
"{\\upharpoonleft}": '\u21BF',
"\\upharpoonleft ": '\u21BF',
"{\\rightharpoonup}": '\u21C0',
"\\rightharpoonup ": '\u21C0',
"{\\rightharpoondown}": '\u21C1',
"\\rightharpoondown ": '\u21C1',
"{\\downharpoonright}": '\u21C2',
"\\downharpoonright ": '\u21C2',
"{\\downharpoonleft}": '\u21C3',
"\\downharpoonleft ": '\u21C3',
"{\\rightleftarrows}": '\u21C4',
"\\rightleftarrows ": '\u21C4',
"{\\dblarrowupdown}": '\u21C5',
"\\dblarrowupdown ": '\u21C5',
"{\\leftrightarrows}": '\u21C6',
"\\leftrightarrows ": '\u21C6',
"{\\leftleftarrows}": '\u21C7',
"\\leftleftarrows ": '\u21C7',
"{\\upuparrows}": '\u21C8',
"\\upuparrows ": '\u21C8',
"{\\rightrightarrows}": '\u21C9',
"\\rightrightarrows ": '\u21C9',
"{\\downdownarrows}": '\u21CA',
"\\downdownarrows ": '\u21CA',
"{\\leftrightharpoons}": '\u21CB',
"\\leftrightharpoons ": '\u21CB',
"{\\rightleftharpoons}": '\u21CC',
"\\rightleftharpoons ": '\u21CC',
"{\\nLeftarrow}": '\u21CD',
"\\nLeftarrow ": '\u21CD',
"{\\nLeftrightarrow}": '\u21CE',
"\\nLeftrightarrow ": '\u21CE',
"{\\nRightarrow}": '\u21CF',
"\\nRightarrow ": '\u21CF',
"{\\Leftarrow}": '\u21D0',
"\\Leftarrow ": '\u21D0',
"{\\Uparrow}": '\u21D1',
"\\Uparrow ": '\u21D1',
"{\\Rightarrow}": '\u21D2',
"\\Rightarrow ": '\u21D2',
"{\\Downarrow}": '\u21D3',
"\\Downarrow ": '\u21D3',
"{\\Leftrightarrow}": '\u21D4',
"\\Leftrightarrow ": '\u21D4',
"{\\Updownarrow}": '\u21D5',
"\\Updownarrow ": '\u21D5',
"{\\Lleftarrow}": '\u21DA',
"\\Lleftarrow ": '\u21DA',
"{\\Rrightarrow}": '\u21DB',
"\\Rrightarrow ": '\u21DB',
"{\\rightsquigarrow}": '\u21DD',
"\\rightsquigarrow ": '\u21DD',
"{\\DownArrowUpArrow}": '\u21F5',
"\\DownArrowUpArrow ": '\u21F5',
"{\\forall}": '\u2200',
"\\forall ": '\u2200',
"{\\complement}": '\u2201',
"\\complement ": '\u2201',
"{\\partial}": '\u2202',
"\\partial ": '\u2202',
"{\\exists}": '\u2203',
"\\exists ": '\u2203',
"{\\nexists}": '\u2204',
"\\nexists ": '\u2204',
"{\\varnothing}": '\u2205',
"\\varnothing ": '\u2205',
"{\\nabla}": '\u2207',
"\\nabla ": '\u2207',
"{\\in}": '\u2208',
"\\in ": '\u2208',
"{\\not\\in}": '\u2209',
"\\not\\in ": '\u2209',
"{\\ni}": '\u220B',
"\\ni ": '\u220B',
"{\\not\\ni}": '\u220C',
"\\not\\ni ": '\u220C',
"{\\prod}": '\u220F',
"\\prod ": '\u220F',
"{\\coprod}": '\u2210',
"\\coprod ": '\u2210',
"{\\sum}": '\u2211',
"\\sum ": '\u2211',
"{\\mp}": '\u2213',
"\\mp ": '\u2213',
"{\\dotplus}": '\u2214',
"\\dotplus ": '\u2214',
"{\\setminus}": '\u2216',
"\\setminus ": '\u2216',
"{_\\ast}": '\u2217',
"{\\circ}": '\u2218',
"\\circ ": '\u2218',
"{\\bullet}": '\u2219',
"\\bullet ": '\u2219',
"{\\surd}": '\u221A',
"\\surd ": '\u221A',
"{\\propto}": '\u221D',
"\\propto ": '\u221D',
"{\\infty}": '\u221E',
"\\infty ": '\u221E',
"{\\rightangle}": '\u221F',
"\\rightangle ": '\u221F',
"{\\angle}": '\u2220',
"\\angle ": '\u2220',
"{\\measuredangle}": '\u2221',
"\\measuredangle ": '\u2221',
"{\\sphericalangle}": '\u2222',
"\\sphericalangle ": '\u2222',
"{\\mid}": '\u2223',
"\\mid ": '\u2223',
"{\\nmid}": '\u2224',
"\\nmid ": '\u2224',
"{\\parallel}": '\u2225',
"\\parallel ": '\u2225',
"{\\nparallel}": '\u2226',
"\\nparallel ": '\u2226',
"{\\wedge}": '\u2227',
"\\wedge ": '\u2227',
"{\\vee}": '\u2228',
"\\vee ": '\u2228',
"{\\cap}": '\u2229',
"\\cap ": '\u2229',
"{\\cup}": '\u222A',
"\\cup ": '\u222A',
"{\\int}": '\u222B',
"\\int ": '\u222B',
"{\\int\\!\\int}": '\u222C',
"\\int\\!\\int ": '\u222C',
"{\\int\\!\\int\\!\\int}": '\u222D',
"\\int\\!\\int\\!\\int ": '\u222D',
"{\\oint}": '\u222E',
"\\oint ": '\u222E',
"{\\surfintegral}": '\u222F',
"\\surfintegral ": '\u222F',
"{\\volintegral}": '\u2230',
"\\volintegral ": '\u2230',
"{\\clwintegral}": '\u2231',
"\\clwintegral ": '\u2231',
"\\ElsevierGlyph{2232}": '\u2232',
"\\ElsevierGlyph{2233}": '\u2233',
"{\\therefore}": '\u2234',
"\\therefore ": '\u2234',
"{\\because}": '\u2235',
"\\because ": '\u2235',
"{\\Colon}": '\u2237',
"\\Colon ": '\u2237',
"\\ElsevierGlyph{2238}": '\u2238',
"\\mathbin{{:}\\!\\!{-}\\!\\!{:}}": '\u223A',
"{\\homothetic}": '\u223B',
"\\homothetic ": '\u223B',
"{\\sim}": '\u223C',
"\\sim ": '\u223C',
"{\\backsim}": '\u223D',
"\\backsim ": '\u223D',
"{\\lazysinv}": '\u223E',
"\\lazysinv ": '\u223E',
"{\\wr}": '\u2240',
"\\wr ": '\u2240',
"{\\not\\sim}": '\u2241',
"\\not\\sim ": '\u2241',
"\\ElsevierGlyph{2242}": '\u2242',
"{\\simeq}": '\u2243',
"\\simeq ": '\u2243',
"{\\not\\simeq}": '\u2244',
"\\not\\simeq ": '\u2244',
"{\\cong}": '\u2245',
"\\cong ": '\u2245',
"{\\approxnotequal}": '\u2246',
"\\approxnotequal ": '\u2246',
"{\\not\\cong}": '\u2247',
"\\not\\cong ": '\u2247',
"{\\approx}": '\u2248',
"\\approx ": '\u2248',
"{\\not\\approx}": '\u2249',
"\\not\\approx ": '\u2249',
"{\\approxeq}": '\u224A',
"\\approxeq ": '\u224A',
"{\\tildetrpl}": '\u224B',
"\\tildetrpl ": '\u224B',
"{\\allequal}": '\u224C',
"\\allequal ": '\u224C',
"{\\asymp}": '\u224D',
"\\asymp ": '\u224D',
"{\\Bumpeq}": '\u224E',
"\\Bumpeq ": '\u224E',
"{\\bumpeq}": '\u224F',
"\\bumpeq ": '\u224F',
"{\\doteq}": '\u2250',
"\\doteq ": '\u2250',
"{\\doteqdot}": '\u2251',
"\\doteqdot ": '\u2251',
"{\\fallingdotseq}": '\u2252',
"\\fallingdotseq ": '\u2252',
"{\\risingdotseq}": '\u2253',
"\\risingdotseq ": '\u2253',
":=": '\u2254',
"=:": '\u2255',
"{\\eqcirc}": '\u2256',
"\\eqcirc ": '\u2256',
"{\\circeq}": '\u2257',
"\\circeq ": '\u2257',
"{\\estimates}": '\u2259',
"\\estimates ": '\u2259',
"\\ElsevierGlyph{225A}": '\u225A',
"{\\starequal}": '\u225B',
"\\starequal ": '\u225B',
"{\\triangleq}": '\u225C',
"\\triangleq ": '\u225C',
"\\ElsevierGlyph{225F}": '\u225F',
"\\not =": '\u2260',
"{\\equiv}": '\u2261',
"\\equiv ": '\u2261',
"{\\not\\equiv}": '\u2262',
"\\not\\equiv ": '\u2262',
"{\\leq}": '\u2264',
"\\leq ": '\u2264',
"{\\geq}": '\u2265',
"\\geq ": '\u2265',
"{\\leqq}": '\u2266',
"\\leqq ": '\u2266',
"{\\geqq}": '\u2267',
"\\geqq ": '\u2267',
"{\\lneqq}": '\u2268',
"\\lneqq ": '\u2268',
"{\\gneqq}": '\u2269',
"\\gneqq ": '\u2269',
"{\\ll}": '\u226A',
"\\ll ": '\u226A',
"{\\gg}": '\u226B',
"\\gg ": '\u226B',
"{\\between}": '\u226C',
"\\between ": '\u226C',
"{\\not\\kern-0.3em\\times}": '\u226D',
"\\not\\kern-0.3em\\times ": '\u226D',
"\\not<": '\u226E',
"\\not>": '\u226F',
"{\\not\\leq}": '\u2270',
"\\not\\leq ": '\u2270',
"{\\not\\geq}": '\u2271',
"\\not\\geq ": '\u2271',
"{\\lessequivlnt}": '\u2272',
"\\lessequivlnt ": '\u2272',
"{\\greaterequivlnt}": '\u2273',
"\\greaterequivlnt ": '\u2273',
"\\ElsevierGlyph{2274}": '\u2274',
"\\ElsevierGlyph{2275}": '\u2275',
"{\\lessgtr}": '\u2276',
"\\lessgtr ": '\u2276',
"{\\gtrless}": '\u2277',
"\\gtrless ": '\u2277',
"{\\notlessgreater}": '\u2278',
"\\notlessgreater ": '\u2278',
"{\\notgreaterless}": '\u2279',
"\\notgreaterless ": '\u2279',
"{\\prec}": '\u227A',
"\\prec ": '\u227A',
"{\\succ}": '\u227B',
"\\succ ": '\u227B',
"{\\preccurlyeq}": '\u227C',
"\\preccurlyeq ": '\u227C',
"{\\succcurlyeq}": '\u227D',
"\\succcurlyeq ": '\u227D',
"{\\precapprox}": '\u227E',
"\\precapprox ": '\u227E',
"{\\succapprox}": '\u227F',
"\\succapprox ": '\u227F',
"{\\not\\prec}": '\u2280',
"\\not\\prec ": '\u2280',
"{\\not\\succ}": '\u2281',
"\\not\\succ ": '\u2281',
"{\\subset}": '\u2282',
"\\subset ": '\u2282',
"{\\supset}": '\u2283',
"\\supset ": '\u2283',
"{\\not\\subset}": '\u2284',
"\\not\\subset ": '\u2284',
"{\\not\\supset}": '\u2285',
"\\not\\supset ": '\u2285',
"{\\subseteq}": '\u2286',
"\\subseteq ": '\u2286',
"{\\supseteq}": '\u2287',
"\\supseteq ": '\u2287',
"{\\not\\subseteq}": '\u2288',
"\\not\\subseteq ": '\u2288',
"{\\not\\supseteq}": '\u2289',
"\\not\\supseteq ": '\u2289',
"{\\subsetneq}": '\u228A',
"\\subsetneq ": '\u228A',
"{\\supsetneq}": '\u228B',
"\\supsetneq ": '\u228B',
"{\\uplus}": '\u228E',
"\\uplus ": '\u228E',
"{\\sqsubset}": '\u228F',
"\\sqsubset ": '\u228F',
"{\\sqsupset}": '\u2290',
"\\sqsupset ": '\u2290',
"{\\sqsubseteq}": '\u2291',
"\\sqsubseteq ": '\u2291',
"{\\sqsupseteq}": '\u2292',
"\\sqsupseteq ": '\u2292',
"{\\sqcap}": '\u2293',
"\\sqcap ": '\u2293',
"{\\sqcup}": '\u2294',
"\\sqcup ": '\u2294',
"{\\oplus}": '\u2295',
"\\oplus ": '\u2295',
"{\\ominus}": '\u2296',
"\\ominus ": '\u2296',
"{\\otimes}": '\u2297',
"\\otimes ": '\u2297',
"{\\oslash}": '\u2298',
"\\oslash ": '\u2298',
"{\\odot}": '\u2299',
"\\odot ": '\u2299',
"{\\circledcirc}": '\u229A',
"\\circledcirc ": '\u229A',
"{\\circledast}": '\u229B',
"\\circledast ": '\u229B',
"{\\circleddash}": '\u229D',
"\\circleddash ": '\u229D',
"{\\boxplus}": '\u229E',
"\\boxplus ": '\u229E',
"{\\boxminus}": '\u229F',
"\\boxminus ": '\u229F',
"{\\boxtimes}": '\u22A0',
"\\boxtimes ": '\u22A0',
"{\\boxdot}": '\u22A1',
"\\boxdot ": '\u22A1',
"{\\vdash}": '\u22A2',
"\\vdash ": '\u22A2',
"{\\dashv}": '\u22A3',
"\\dashv ": '\u22A3',
"{\\top}": '\u22A4',
"\\top ": '\u22A4',
"{\\perp}": '\u22A5',
"\\perp ": '\u22A5',
"{\\truestate}": '\u22A7',
"\\truestate ": '\u22A7',
"{\\forcesextra}": '\u22A8',
"\\forcesextra ": '\u22A8',
"{\\Vdash}": '\u22A9',
"\\Vdash ": '\u22A9',
"{\\Vvdash}": '\u22AA',
"\\Vvdash ": '\u22AA',
"{\\VDash}": '\u22AB',
"\\VDash ": '\u22AB',
"{\\nvdash}": '\u22AC',
"\\nvdash ": '\u22AC',
"{\\nvDash}": '\u22AD',
"\\nvDash ": '\u22AD',
"{\\nVdash}": '\u22AE',
"\\nVdash ": '\u22AE',
"{\\nVDash}": '\u22AF',
"\\nVDash ": '\u22AF',
"{\\vartriangleleft}": '\u22B2',
"\\vartriangleleft ": '\u22B2',
"{\\vartriangleright}": '\u22B3',
"\\vartriangleright ": '\u22B3',
"{\\trianglelefteq}": '\u22B4',
"\\trianglelefteq ": '\u22B4',
"{\\trianglerighteq}": '\u22B5',
"\\trianglerighteq ": '\u22B5',
"{\\original}": '\u22B6',
"\\original ": '\u22B6',
"{\\image}": '\u22B7',
"\\image ": '\u22B7',
"{\\multimap}": '\u22B8',
"\\multimap ": '\u22B8',
"{\\hermitconjmatrix}": '\u22B9',
"\\hermitconjmatrix ": '\u22B9',
"{\\intercal}": '\u22BA',
"\\intercal ": '\u22BA',
"{\\veebar}": '\u22BB',
"\\veebar ": '\u22BB',
"{\\rightanglearc}": '\u22BE',
"\\rightanglearc ": '\u22BE',
"\\ElsevierGlyph{22C0}": '\u22C0',
"\\ElsevierGlyph{22C1}": '\u22C1',
"{\\bigcap}": '\u22C2',
"\\bigcap ": '\u22C2',
"{\\bigcup}": '\u22C3',
"\\bigcup ": '\u22C3',
"{\\diamond}": '\u22C4',
"\\diamond ": '\u22C4',
"{\\star}": '\u22C6',
"\\star ": '\u22C6',
"{\\divideontimes}": '\u22C7',
"\\divideontimes ": '\u22C7',
"{\\bowtie}": '\u22C8',
"\\bowtie ": '\u22C8',
"{\\ltimes}": '\u22C9',
"\\ltimes ": '\u22C9',
"{\\rtimes}": '\u22CA',
"\\rtimes ": '\u22CA',
"{\\leftthreetimes}": '\u22CB',
"\\leftthreetimes ": '\u22CB',
"{\\rightthreetimes}": '\u22CC',
"\\rightthreetimes ": '\u22CC',
"{\\backsimeq}": '\u22CD',
"\\backsimeq ": '\u22CD',
"{\\curlyvee}": '\u22CE',
"\\curlyvee ": '\u22CE',
"{\\curlywedge}": '\u22CF',
"\\curlywedge ": '\u22CF',
"{\\Subset}": '\u22D0',
"\\Subset ": '\u22D0',
"{\\Supset}": '\u22D1',
"\\Supset ": '\u22D1',
"{\\Cap}": '\u22D2',
"\\Cap ": '\u22D2',
"{\\Cup}": '\u22D3',
"\\Cup ": '\u22D3',
"{\\pitchfork}": '\u22D4',
"\\pitchfork ": '\u22D4',
"{\\lessdot}": '\u22D6',
"\\lessdot ": '\u22D6',
"{\\gtrdot}": '\u22D7',
"\\gtrdot ": '\u22D7',
"{\\verymuchless}": '\u22D8',
"\\verymuchless ": '\u22D8',
"{\\verymuchgreater}": '\u22D9',
"\\verymuchgreater ": '\u22D9',
"{\\lesseqgtr}": '\u22DA',
"\\lesseqgtr ": '\u22DA',
"{\\gtreqless}": '\u22DB',
"\\gtreqless ": '\u22DB',
"{\\curlyeqprec}": '\u22DE',
"\\curlyeqprec ": '\u22DE',
"{\\curlyeqsucc}": '\u22DF',
"\\curlyeqsucc ": '\u22DF',
"{\\not\\sqsubseteq}": '\u22E2',
"\\not\\sqsubseteq ": '\u22E2',
"{\\not\\sqsupseteq}": '\u22E3',
"\\not\\sqsupseteq ": '\u22E3',
"{\\Elzsqspne}": '\u22E5',
"\\Elzsqspne ": '\u22E5',
"{\\lnsim}": '\u22E6',
"\\lnsim ": '\u22E6',
"{\\gnsim}": '\u22E7',
"\\gnsim ": '\u22E7',
"{\\precedesnotsimilar}": '\u22E8',
"\\precedesnotsimilar ": '\u22E8',
"{\\succnsim}": '\u22E9',
"\\succnsim ": '\u22E9',
"{\\ntriangleleft}": '\u22EA',
"\\ntriangleleft ": '\u22EA',
"{\\ntriangleright}": '\u22EB',
"\\ntriangleright ": '\u22EB',
"{\\ntrianglelefteq}": '\u22EC',
"\\ntrianglelefteq ": '\u22EC',
"{\\ntrianglerighteq}": '\u22ED',
"\\ntrianglerighteq ": '\u22ED',
"{\\vdots}": '\u22EE',
"\\vdots ": '\u22EE',
"{\\cdots}": '\u22EF',
"\\cdots ": '\u22EF',
"{\\upslopeellipsis}": '\u22F0',
"\\upslopeellipsis ": '\u22F0',
"{\\downslopeellipsis}": '\u22F1',
"\\downslopeellipsis ": '\u22F1',
"{\\barwedge}": '\u2305',
"\\barwedge ": '\u2305',
"{\\perspcorrespond}": '\u2306',
"\\perspcorrespond ": '\u2306',
"{\\lceil}": '\u2308',
"\\lceil ": '\u2308',
"{\\rceil}": '\u2309',
"\\rceil ": '\u2309',
"{\\lfloor}": '\u230A',
"\\lfloor ": '\u230A',
"{\\rfloor}": '\u230B',
"\\rfloor ": '\u230B',
"{\\recorder}": '\u2315',
"\\recorder ": '\u2315',
"\\mathchar\"2208": '\u2316',
"{\\ulcorner}": '\u231C',
"\\ulcorner ": '\u231C',
"{\\urcorner}": '\u231D',
"\\urcorner ": '\u231D',
"{\\llcorner}": '\u231E',
"\\llcorner ": '\u231E',
"{\\lrcorner}": '\u231F',
"\\lrcorner ": '\u231F',
"{\\frown}": '\u2322',
"\\frown ": '\u2322',
"{\\smile}": '\u2323',
"\\smile ": '\u2323',
"{\\langle}": '\u2329',
"\\langle ": '\u2329',
"{\\rangle}": '\u232A',
"\\rangle ": '\u232A',
"\\ElsevierGlyph{E838}": '\u233D',
"{\\Elzdlcorn}": '\u23A3',
"\\Elzdlcorn ": '\u23A3',
"{\\lmoustache}": '\u23B0',
"\\lmoustache ": '\u23B0',
"{\\rmoustache}": '\u23B1',
"\\rmoustache ": '\u23B1',
"{\\textvisiblespace}": '\u2423',
"\\textvisiblespace ": '\u2423',
"\\ding{172}": '\u2460',
"\\ding{173}": '\u2461',
"\\ding{174}": '\u2462',
"\\ding{175}": '\u2463',
"\\ding{176}": '\u2464',
"\\ding{177}": '\u2465',
"\\ding{178}": '\u2466',
"\\ding{179}": '\u2467',
"\\ding{180}": '\u2468',
"\\ding{181}": '\u2469',
"{\\circledS}": '\u24C8',
"\\circledS ": '\u24C8',
"{\\Elzdshfnc}": '\u2506',
"\\Elzdshfnc ": '\u2506',
"{\\Elzsqfnw}": '\u2519',
"\\Elzsqfnw ": '\u2519',
"{\\diagup}": '\u2571',
"\\diagup ": '\u2571',
"\\ding{110}": '\u25A0',
"{\\square}": '\u25A1',
"\\square ": '\u25A1',
"{\\blacksquare}": '\u25AA',
"\\blacksquare ": '\u25AA',
"\\fbox{~~}": '\u25AD',
"{\\Elzvrecto}": '\u25AF',
"\\Elzvrecto ": '\u25AF',
"\\ElsevierGlyph{E381}": '\u25B1',
"\\ding{115}": '\u25B2',
"{\\bigtriangleup}": '\u25B3',
"\\bigtriangleup ": '\u25B3',
"{\\blacktriangle}": '\u25B4',
"\\blacktriangle ": '\u25B4',
"{\\vartriangle}": '\u25B5',
"\\vartriangle ": '\u25B5',
"{\\blacktriangleright}": '\u25B8',
"\\blacktriangleright ": '\u25B8',
"{\\triangleright}": '\u25B9',
"\\triangleright ": '\u25B9',
"\\ding{116}": '\u25BC',
"{\\bigtriangledown}": '\u25BD',
"\\bigtriangledown ": '\u25BD',
"{\\blacktriangledown}": '\u25BE',
"\\blacktriangledown ": '\u25BE',
"{\\triangledown}": '\u25BF',
"\\triangledown ": '\u25BF',
"{\\blacktriangleleft}": '\u25C2',
"\\blacktriangleleft ": '\u25C2',
"{\\triangleleft}": '\u25C3',
"\\triangleleft ": '\u25C3',
"\\ding{117}": '\u25C6',
"{\\lozenge}": '\u25CA',
"\\lozenge ": '\u25CA',
"{\\bigcirc}": '\u25CB',
"\\bigcirc ": '\u25CB',
"\\ding{108}": '\u25CF',
"{\\Elzcirfl}": '\u25D0',
"\\Elzcirfl ": '\u25D0',
"{\\Elzcirfr}": '\u25D1',
"\\Elzcirfr ": '\u25D1',
"{\\Elzcirfb}": '\u25D2',
"\\Elzcirfb ": '\u25D2',
"\\ding{119}": '\u25D7',
"{\\Elzrvbull}": '\u25D8',
"\\Elzrvbull ": '\u25D8',
"{\\Elzsqfl}": '\u25E7',
"\\Elzsqfl ": '\u25E7',
"{\\Elzsqfr}": '\u25E8',
"\\Elzsqfr ": '\u25E8',
"{\\Elzsqfse}": '\u25EA',
"\\Elzsqfse ": '\u25EA',
"\\ding{72}": '\u2605',
"\\ding{73}": '\u2606',
"\\ding{37}": '\u260E',
"\\ding{42}": '\u261B',
"\\ding{43}": '\u261E',
"{\\rightmoon}": '\u263E',
"\\rightmoon ": '\u263E',
"{\\mercury}": '\u263F',
"\\mercury ": '\u263F',
"{\\venus}": '\u2640',
"\\venus ": '\u2640',
"{\\male}": '\u2642',
"\\male ": '\u2642',
"{\\jupiter}": '\u2643',
"\\jupiter ": '\u2643',
"{\\saturn}": '\u2644',
"\\saturn ": '\u2644',
"{\\uranus}": '\u2645',
"\\uranus ": '\u2645',
"{\\neptune}": '\u2646',
"\\neptune ": '\u2646',
"{\\pluto}": '\u2647',
"\\pluto ": '\u2647',
"{\\aries}": '\u2648',
"\\aries ": '\u2648',
"{\\taurus}": '\u2649',
"\\taurus ": '\u2649',
"{\\gemini}": '\u264A',
"\\gemini ": '\u264A',
"{\\cancer}": '\u264B',
"\\cancer ": '\u264B',
"{\\leo}": '\u264C',
"\\leo ": '\u264C',
"{\\virgo}": '\u264D',
"\\virgo ": '\u264D',
"{\\libra}": '\u264E',
"\\libra ": '\u264E',
"{\\scorpio}": '\u264F',
"\\scorpio ": '\u264F',
"{\\sagittarius}": '\u2650',
"\\sagittarius ": '\u2650',
"{\\capricornus}": '\u2651',
"\\capricornus ": '\u2651',
"{\\aquarius}": '\u2652',
"\\aquarius ": '\u2652',
"{\\pisces}": '\u2653',
"\\pisces ": '\u2653',
"\\ding{171}": '\u2660',
"\\ding{168}": '\u2663',
"\\ding{170}": '\u2665',
"\\ding{169}": '\u2666',
"{\\quarternote}": '\u2669',
"\\quarternote ": '\u2669',
"{\\eighthnote}": '\u266A',
"\\eighthnote ": '\u266A',
"{\\flat}": '\u266D',
"\\flat ": '\u266D',
"{\\natural}": '\u266E',
"\\natural ": '\u266E',
"{\\sharp}": '\u266F',
"\\sharp ": '\u266F',
"\\ding{33}": '\u2701',
"\\ding{34}": '\u2702',
"\\ding{35}": '\u2703',
"\\ding{36}": '\u2704',
"\\ding{38}": '\u2706',
"\\ding{39}": '\u2707',
"\\ding{40}": '\u2708',
"\\ding{41}": '\u2709',
"\\ding{44}": '\u270C',
"\\ding{45}": '\u270D',
"\\ding{46}": '\u270E',
"\\ding{47}": '\u270F',
"\\ding{48}": '\u2710',
"\\ding{49}": '\u2711',
"\\ding{50}": '\u2712',
"\\ding{51}": '\u2713',
"\\ding{52}": '\u2714',
"\\ding{53}": '\u2715',
"\\ding{54}": '\u2716',
"\\ding{55}": '\u2717',
"\\ding{56}": '\u2718',
"\\ding{57}": '\u2719',
"\\ding{58}": '\u271A',
"\\ding{59}": '\u271B',
"\\ding{60}": '\u271C',
"\\ding{61}": '\u271D',
"\\ding{62}": '\u271E',
"\\ding{63}": '\u271F',
"\\ding{64}": '\u2720',
"\\ding{65}": '\u2721',
"\\ding{66}": '\u2722',
"\\ding{67}": '\u2723',
"\\ding{68}": '\u2724',
"\\ding{69}": '\u2725',
"\\ding{70}": '\u2726',
"\\ding{71}": '\u2727',
"\\ding{74}": '\u272A',
"\\ding{75}": '\u272B',
"\\ding{76}": '\u272C',
"\\ding{77}": '\u272D',
"\\ding{78}": '\u272E',
"\\ding{79}": '\u272F',
"\\ding{80}": '\u2730',
"\\ding{81}": '\u2731',
"\\ding{82}": '\u2732',
"\\ding{83}": '\u2733',
"\\ding{84}": '\u2734',
"\\ding{85}": '\u2735',
"\\ding{86}": '\u2736',
"\\ding{87}": '\u2737',
"\\ding{88}": '\u2738',
"\\ding{89}": '\u2739',
"\\ding{90}": '\u273A',
"\\ding{91}": '\u273B',
"\\ding{92}": '\u273C',
"\\ding{93}": '\u273D',
"\\ding{94}": '\u273E',
"\\ding{95}": '\u273F',
"\\ding{96}": '\u2740',
"\\ding{97}": '\u2741',
"\\ding{98}": '\u2742',
"\\ding{99}": '\u2743',
"\\ding{100}": '\u2744',
"\\ding{101}": '\u2745',
"\\ding{102}": '\u2746',
"\\ding{103}": '\u2747',
"\\ding{104}": '\u2748',
"\\ding{105}": '\u2749',
"\\ding{106}": '\u274A',
"\\ding{107}": '\u274B',
"\\ding{109}": '\u274D',
"\\ding{111}": '\u274F',
"\\ding{112}": '\u2750',
"\\ding{113}": '\u2751',
"\\ding{114}": '\u2752',
"\\ding{118}": '\u2756',
"\\ding{120}": '\u2758',
"\\ding{121}": '\u2759',
"\\ding{122}": '\u275A',
"\\ding{123}": '\u275B',
"\\ding{124}": '\u275C',
"\\ding{125}": '\u275D',
"\\ding{126}": '\u275E',
"\\ding{161}": '\u2761',
"\\ding{162}": '\u2762',
"\\ding{163}": '\u2763',
"\\ding{164}": '\u2764',
"\\ding{165}": '\u2765',
"\\ding{166}": '\u2766',
"\\ding{167}": '\u2767',
"\\ding{182}": '\u2776',
"\\ding{183}": '\u2777',
"\\ding{184}": '\u2778',
"\\ding{185}": '\u2779',
"\\ding{186}": '\u277A',
"\\ding{187}": '\u277B',
"\\ding{188}": '\u277C',
"\\ding{189}": '\u277D',
"\\ding{190}": '\u277E',
"\\ding{191}": '\u277F',
"\\ding{192}": '\u2780',
"\\ding{193}": '\u2781',
"\\ding{194}": '\u2782',
"\\ding{195}": '\u2783',
"\\ding{196}": '\u2784',
"\\ding{197}": '\u2785',
"\\ding{198}": '\u2786',
"\\ding{199}": '\u2787',
"\\ding{200}": '\u2788',
"\\ding{201}": '\u2789',
"\\ding{202}": '\u278A',
"\\ding{203}": '\u278B',
"\\ding{204}": '\u278C',
"\\ding{205}": '\u278D',
"\\ding{206}": '\u278E',
"\\ding{207}": '\u278F',
"\\ding{208}": '\u2790',
"\\ding{209}": '\u2791',
"\\ding{210}": '\u2792',
"\\ding{211}": '\u2793',
"\\ding{212}": '\u2794',
"\\ding{216}": '\u2798',
"\\ding{217}": '\u2799',
"\\ding{218}": '\u279A',
"\\ding{219}": '\u279B',
"\\ding{220}": '\u279C',
"\\ding{221}": '\u279D',
"\\ding{222}": '\u279E',
"\\ding{223}": '\u279F',
"\\ding{224}": '\u27A0',
"\\ding{225}": '\u27A1',
"\\ding{226}": '\u27A2',
"\\ding{227}": '\u27A3',
"\\ding{228}": '\u27A4',
"\\ding{229}": '\u27A5',
"\\ding{230}": '\u27A6',
"\\ding{231}": '\u27A7',
"\\ding{232}": '\u27A8',
"\\ding{233}": '\u27A9',
"\\ding{234}": '\u27AA',
"\\ding{235}": '\u27AB',
"\\ding{236}": '\u27AC',
"\\ding{237}": '\u27AD',
"\\ding{238}": '\u27AE',
"\\ding{239}": '\u27AF',
"\\ding{241}": '\u27B1',
"\\ding{242}": '\u27B2',
"\\ding{243}": '\u27B3',
"\\ding{244}": '\u27B4',
"\\ding{245}": '\u27B5',
"\\ding{246}": '\u27B6',
"\\ding{247}": '\u27B7',
"\\ding{248}": '\u27B8',
"\\ding{249}": '\u27B9',
"\\ding{250}": '\u27BA',
"\\ding{251}": '\u27BB',
"\\ding{252}": '\u27BC',
"\\ding{253}": '\u27BD',
"\\ding{254}": '\u27BE',
"{\\longleftarrow}": '\u27F5',
"\\longleftarrow ": '\u27F5',
"{\\longrightarrow}": '\u27F6',
"\\longrightarrow ": '\u27F6',
"{\\longleftrightarrow}": '\u27F7',
"\\longleftrightarrow ": '\u27F7',
"{\\Longleftarrow}": '\u27F8',
"\\Longleftarrow ": '\u27F8',
"{\\Longrightarrow}": '\u27F9',
"\\Longrightarrow ": '\u27F9',
"{\\Longleftrightarrow}": '\u27FA',
"\\Longleftrightarrow ": '\u27FA',
"{\\longmapsto}": '\u27FC',
"\\longmapsto ": '\u27FC',
"\\sim\\joinrel\\leadsto": '\u27FF',
"\\ElsevierGlyph{E212}": '\u2905',
"{\\UpArrowBar}": '\u2912',
"\\UpArrowBar ": '\u2912',
"{\\DownArrowBar}": '\u2913',
"\\DownArrowBar ": '\u2913',
"\\ElsevierGlyph{E20C}": '\u2923',
"\\ElsevierGlyph{E20D}": '\u2924',
"\\ElsevierGlyph{E20B}": '\u2925',
"\\ElsevierGlyph{E20A}": '\u2926',
"\\ElsevierGlyph{E211}": '\u2927',
"\\ElsevierGlyph{E20E}": '\u2928',
"\\ElsevierGlyph{E20F}": '\u2929',
"\\ElsevierGlyph{E210}": '\u292A',
"\\ElsevierGlyph{E21C}": '\u2933',
"\\ElsevierGlyph{E21A}": '\u2936',
"\\ElsevierGlyph{E219}": '\u2937',
"{\\Elolarr}": '\u2940',
"\\Elolarr ": '\u2940',
"{\\Elorarr}": '\u2941',
"\\Elorarr ": '\u2941',
"{\\ElzRlarr}": '\u2942',
"\\ElzRlarr ": '\u2942',
"{\\ElzrLarr}": '\u2944',
"\\ElzrLarr ": '\u2944',
"{\\Elzrarrx}": '\u2947',
"\\Elzrarrx ": '\u2947',
"{\\LeftRightVector}": '\u294E',
"\\LeftRightVector ": '\u294E',
"{\\RightUpDownVector}": '\u294F',
"\\RightUpDownVector ": '\u294F',
"{\\DownLeftRightVector}": '\u2950',
"\\DownLeftRightVector ": '\u2950',
"{\\LeftUpDownVector}": '\u2951',
"\\LeftUpDownVector ": '\u2951',
"{\\LeftVectorBar}": '\u2952',
"\\LeftVectorBar ": '\u2952',
"{\\RightVectorBar}": '\u2953',
"\\RightVectorBar ": '\u2953',
"{\\RightUpVectorBar}": '\u2954',
"\\RightUpVectorBar ": '\u2954',
"{\\RightDownVectorBar}": '\u2955',
"\\RightDownVectorBar ": '\u2955',
"{\\DownLeftVectorBar}": '\u2956',
"\\DownLeftVectorBar ": '\u2956',
"{\\DownRightVectorBar}": '\u2957',
"\\DownRightVectorBar ": '\u2957',
"{\\LeftUpVectorBar}": '\u2958',
"\\LeftUpVectorBar ": '\u2958',
"{\\LeftDownVectorBar}": '\u2959',
"\\LeftDownVectorBar ": '\u2959',
"{\\LeftTeeVector}": '\u295A',
"\\LeftTeeVector ": '\u295A',
"{\\RightTeeVector}": '\u295B',
"\\RightTeeVector ": '\u295B',
"{\\RightUpTeeVector}": '\u295C',
"\\RightUpTeeVector ": '\u295C',
"{\\RightDownTeeVector}": '\u295D',
"\\RightDownTeeVector ": '\u295D',
"{\\DownLeftTeeVector}": '\u295E',
"\\DownLeftTeeVector ": '\u295E',
"{\\DownRightTeeVector}": '\u295F',
"\\DownRightTeeVector ": '\u295F',
"{\\LeftUpTeeVector}": '\u2960',
"\\LeftUpTeeVector ": '\u2960',
"{\\LeftDownTeeVector}": '\u2961',
"\\LeftDownTeeVector ": '\u2961',
"{\\UpEquilibrium}": '\u296E',
"\\UpEquilibrium ": '\u296E',
"{\\ReverseUpEquilibrium}": '\u296F',
"\\ReverseUpEquilibrium ": '\u296F',
"{\\RoundImplies}": '\u2970',
"\\RoundImplies ": '\u2970',
"\\ElsevierGlyph{E214}": '\u297C',
"\\ElsevierGlyph{E215}": '\u297D',
"{\\Elztfnc}": '\u2980',
"\\Elztfnc ": '\u2980',
"\\ElsevierGlyph{3018}": '\u2985',
"{\\Elroang}": '\u2986',
"\\Elroang ": '\u2986',
"<\\kern-0.58em(": '\u2993',
"\\ElsevierGlyph{E291}": '\u2994',
"{\\Elzddfnc}": '\u2999',
"\\Elzddfnc ": '\u2999',
"{\\Angle}": '\u299C',
"\\Angle ": '\u299C',
"{\\Elzlpargt}": '\u29A0',
"\\Elzlpargt ": '\u29A0',
"\\ElsevierGlyph{E260}": '\u29B5',
"\\ElsevierGlyph{E61B}": '\u29B6',
"{\\ElzLap}": '\u29CA',
"\\ElzLap ": '\u29CA',
"{\\Elzdefas}": '\u29CB',
"\\Elzdefas ": '\u29CB',
"{\\LeftTriangleBar}": '\u29CF',
"\\LeftTriangleBar ": '\u29CF',
"{\\RightTriangleBar}": '\u29D0',
"\\RightTriangleBar ": '\u29D0',
"\\ElsevierGlyph{E372}": '\u29DC',
"{\\blacklozenge}": '\u29EB',
"\\blacklozenge ": '\u29EB',
"{\\RuleDelayed}": '\u29F4',
"\\RuleDelayed ": '\u29F4',
"{\\Elxuplus}": '\u2A04',
"\\Elxuplus ": '\u2A04',
"{\\ElzThr}": '\u2A05',
"\\ElzThr ": '\u2A05',
"{\\Elxsqcup}": '\u2A06',
"\\Elxsqcup ": '\u2A06',
"{\\ElzInf}": '\u2A07',
"\\ElzInf ": '\u2A07',
"{\\ElzSup}": '\u2A08',
"\\ElzSup ": '\u2A08',
"{\\ElzCint}": '\u2A0D',
"\\ElzCint ": '\u2A0D',
"{\\clockoint}": '\u2A0F',
"\\clockoint ": '\u2A0F',
"\\ElsevierGlyph{E395}": '\u2A10',
"{\\sqrint}": '\u2A16',
"\\sqrint ": '\u2A16',
"\\ElsevierGlyph{E25A}": '\u2A25',
"\\ElsevierGlyph{E25B}": '\u2A2A',
"\\ElsevierGlyph{E25C}": '\u2A2D',
"\\ElsevierGlyph{E25D}": '\u2A2E',
"{\\ElzTimes}": '\u2A2F',
"\\ElzTimes ": '\u2A2F',
"\\ElsevierGlyph{E25E}": '\u2A34',
"\\ElsevierGlyph{E259}": '\u2A3C',
"{\\amalg}": '\u2A3F',
"\\amalg ": '\u2A3F',
"{\\ElzAnd}": '\u2A53',
"\\ElzAnd ": '\u2A53',
"{\\ElzOr}": '\u2A54',
"\\ElzOr ": '\u2A54',
"\\ElsevierGlyph{E36E}": '\u2A55',
"{\\ElOr}": '\u2A56',
"\\ElOr ": '\u2A56',
"{\\Elzminhat}": '\u2A5F',
"\\Elzminhat ": '\u2A5F',
"\\stackrel{*}{=}": '\u2A6E',
"{\\Equal}": '\u2A75',
"\\Equal ": '\u2A75',
"{\\leqslant}": '\u2A7D',
"\\leqslant ": '\u2A7D',
"{\\geqslant}": '\u2A7E',
"\\geqslant ": '\u2A7E',
"{\\lessapprox}": '\u2A85',
"\\lessapprox ": '\u2A85',
"{\\gtrapprox}": '\u2A86',
"\\gtrapprox ": '\u2A86',
"{\\lneq}": '\u2A87',
"\\lneq ": '\u2A87',
"{\\gneq}": '\u2A88',
"\\gneq ": '\u2A88',
"{\\lnapprox}": '\u2A89',
"\\lnapprox ": '\u2A89',
"{\\gnapprox}": '\u2A8A',
"\\gnapprox ": '\u2A8A',
"{\\lesseqqgtr}": '\u2A8B',
"\\lesseqqgtr ": '\u2A8B',
"{\\gtreqqless}": '\u2A8C',
"\\gtreqqless ": '\u2A8C',
"{\\eqslantless}": '\u2A95',
"\\eqslantless ": '\u2A95',
"{\\eqslantgtr}": '\u2A96',
"\\eqslantgtr ": '\u2A96',
"\\Pisymbol{ppi020}{117}": '\u2A9D',
"\\Pisymbol{ppi020}{105}": '\u2A9E',
"{\\NestedLessLess}": '\u2AA1',
"\\NestedLessLess ": '\u2AA1',
"{\\NestedGreaterGreater}": '\u2AA2',
"\\NestedGreaterGreater ": '\u2AA2',
"{\\preceq}": '\u2AAF',
"\\preceq ": '\u2AAF',
"{\\succeq}": '\u2AB0',
"\\succeq ": '\u2AB0',
"{\\precneqq}": '\u2AB5',
"\\precneqq ": '\u2AB5',
"{\\succneqq}": '\u2AB6',
"\\succneqq ": '\u2AB6',
"{\\precnapprox}": '\u2AB9',
"\\precnapprox ": '\u2AB9',
"{\\succnapprox}": '\u2ABA',
"\\succnapprox ": '\u2ABA',
"{\\subseteqq}": '\u2AC5',
"\\subseteqq ": '\u2AC5',
"{\\supseteqq}": '\u2AC6',
"\\supseteqq ": '\u2AC6',
"{\\subsetneqq}": '\u2ACB',
"\\subsetneqq ": '\u2ACB',
"{\\supsetneqq}": '\u2ACC',
"\\supsetneqq ": '\u2ACC',
"\\ElsevierGlyph{E30D}": '\u2AEB',
"{\\Elztdcol}": '\u2AF6',
"\\Elztdcol ": '\u2AF6',
"{{/}\\!\\!{/}}": '\u2AFD',
"\\ElsevierGlyph{300A}": '\u300A',
"\\ElsevierGlyph{300B}": '\u300B',
"\\ElsevierGlyph{3019}": '\u3019',
"{\\openbracketleft}": '\u301A',
"\\openbracketleft ": '\u301A',
"{\\openbracketright}": '\u301B',
"\\openbracketright ": '\u301B',
"\\dbend": '\uFFFD',
"\\mathbf{A}": '\uD835\uDC00',
"\\mathbf{B}": '\uD835\uDC01',
"\\mathbf{C}": '\uD835\uDC02',
"\\mathbf{D}": '\uD835\uDC03',
"\\mathbf{E}": '\uD835\uDC04',
"\\mathbf{F}": '\uD835\uDC05',
"\\mathbf{G}": '\uD835\uDC06',
"\\mathbf{H}": '\uD835\uDC07',
"\\mathbf{I}": '\uD835\uDC08',
"\\mathbf{J}": '\uD835\uDC09',
"\\mathbf{K}": '\uD835\uDC0A',
"\\mathbf{L}": '\uD835\uDC0B',
"\\mathbf{M}": '\uD835\uDC0C',
"\\mathbf{N}": '\uD835\uDC0D',
"\\mathbf{O}": '\uD835\uDC0E',
"\\mathbf{P}": '\uD835\uDC0F',
"\\mathbf{Q}": '\uD835\uDC10',
"\\mathbf{R}": '\uD835\uDC11',
"\\mathbf{S}": '\uD835\uDC12',
"\\mathbf{T}": '\uD835\uDC13',
"\\mathbf{U}": '\uD835\uDC14',
"\\mathbf{V}": '\uD835\uDC15',
"\\mathbf{W}": '\uD835\uDC16',
"\\mathbf{X}": '\uD835\uDC17',
"\\mathbf{Y}": '\uD835\uDC18',
"\\mathbf{Z}": '\uD835\uDC19',
"\\mathbf{a}": '\uD835\uDC1A',
"\\mathbf{b}": '\uD835\uDC1B',
"\\mathbf{c}": '\uD835\uDC1C',
"\\mathbf{d}": '\uD835\uDC1D',
"\\mathbf{e}": '\uD835\uDC1E',
"\\mathbf{f}": '\uD835\uDC1F',
"\\mathbf{g}": '\uD835\uDC20',
"\\mathbf{h}": '\uD835\uDC21',
"\\mathbf{i}": '\uD835\uDC22',
"\\mathbf{j}": '\uD835\uDC23',
"\\mathbf{k}": '\uD835\uDC24',
"\\mathbf{l}": '\uD835\uDC25',
"\\mathbf{m}": '\uD835\uDC26',
"\\mathbf{n}": '\uD835\uDC27',
"\\mathbf{o}": '\uD835\uDC28',
"\\mathbf{p}": '\uD835\uDC29',
"\\mathbf{q}": '\uD835\uDC2A',
"\\mathbf{r}": '\uD835\uDC2B',
"\\mathbf{s}": '\uD835\uDC2C',
"\\mathbf{t}": '\uD835\uDC2D',
"\\mathbf{u}": '\uD835\uDC2E',
"\\mathbf{v}": '\uD835\uDC2F',
"\\mathbf{w}": '\uD835\uDC30',
"\\mathbf{x}": '\uD835\uDC31',
"\\mathbf{y}": '\uD835\uDC32',
"\\mathbf{z}": '\uD835\uDC33',
"\\mathsl{A}": '\uD835\uDC34',
"\\mathsl{B}": '\uD835\uDC35',
"\\mathsl{C}": '\uD835\uDC36',
"\\mathsl{D}": '\uD835\uDC37',
"\\mathsl{E}": '\uD835\uDC38',
"\\mathsl{F}": '\uD835\uDC39',
"\\mathsl{G}": '\uD835\uDC3A',
"\\mathsl{H}": '\uD835\uDC3B',
"\\mathsl{I}": '\uD835\uDC3C',
"\\mathsl{J}": '\uD835\uDC3D',
"\\mathsl{K}": '\uD835\uDC3E',
"\\mathsl{L}": '\uD835\uDC3F',
"\\mathsl{M}": '\uD835\uDC40',
"\\mathsl{N}": '\uD835\uDC41',
"\\mathsl{O}": '\uD835\uDC42',
"\\mathsl{P}": '\uD835\uDC43',
"\\mathsl{Q}": '\uD835\uDC44',
"\\mathsl{R}": '\uD835\uDC45',
"\\mathsl{S}": '\uD835\uDC46',
"\\mathsl{T}": '\uD835\uDC47',
"\\mathsl{U}": '\uD835\uDC48',
"\\mathsl{V}": '\uD835\uDC49',
"\\mathsl{W}": '\uD835\uDC4A',
"\\mathsl{X}": '\uD835\uDC4B',
"\\mathsl{Y}": '\uD835\uDC4C',
"\\mathsl{Z}": '\uD835\uDC4D',
"\\mathsl{a}": '\uD835\uDC4E',
"\\mathsl{b}": '\uD835\uDC4F',
"\\mathsl{c}": '\uD835\uDC50',
"\\mathsl{d}": '\uD835\uDC51',
"\\mathsl{e}": '\uD835\uDC52',
"\\mathsl{f}": '\uD835\uDC53',
"\\mathsl{g}": '\uD835\uDC54',
"\\mathsl{i}": '\uD835\uDC56',
"\\mathsl{j}": '\uD835\uDC57',
"\\mathsl{k}": '\uD835\uDC58',
"\\mathsl{l}": '\uD835\uDC59',
"\\mathsl{m}": '\uD835\uDC5A',
"\\mathsl{n}": '\uD835\uDC5B',
"\\mathsl{o}": '\uD835\uDC5C',
"\\mathsl{p}": '\uD835\uDC5D',
"\\mathsl{q}": '\uD835\uDC5E',
"\\mathsl{r}": '\uD835\uDC5F',
"\\mathsl{s}": '\uD835\uDC60',
"\\mathsl{t}": '\uD835\uDC61',
"\\mathsl{u}": '\uD835\uDC62',
"\\mathsl{v}": '\uD835\uDC63',
"\\mathsl{w}": '\uD835\uDC64',
"\\mathsl{x}": '\uD835\uDC65',
"\\mathsl{y}": '\uD835\uDC66',
"\\mathsl{z}": '\uD835\uDC67',
"\\mathbit{A}": '\uD835\uDC68',
"\\mathbit{B}": '\uD835\uDC69',
"\\mathbit{C}": '\uD835\uDC6A',
"\\mathbit{D}": '\uD835\uDC6B',
"\\mathbit{E}": '\uD835\uDC6C',
"\\mathbit{F}": '\uD835\uDC6D',
"\\mathbit{G}": '\uD835\uDC6E',
"\\mathbit{H}": '\uD835\uDC6F',
"\\mathbit{I}": '\uD835\uDC70',
"\\mathbit{J}": '\uD835\uDC71',
"\\mathbit{K}": '\uD835\uDC72',
"\\mathbit{L}": '\uD835\uDC73',
"\\mathbit{M}": '\uD835\uDC74',
"\\mathbit{N}": '\uD835\uDC75',
"\\mathbit{O}": '\uD835\uDC76',
"\\mathbit{P}": '\uD835\uDC77',
"\\mathbit{Q}": '\uD835\uDC78',
"\\mathbit{R}": '\uD835\uDC79',
"\\mathbit{S}": '\uD835\uDC7A',
"\\mathbit{T}": '\uD835\uDC7B',
"\\mathbit{U}": '\uD835\uDC7C',
"\\mathbit{V}": '\uD835\uDC7D',
"\\mathbit{W}": '\uD835\uDC7E',
"\\mathbit{X}": '\uD835\uDC7F',
"\\mathbit{Y}": '\uD835\uDC80',
"\\mathbit{Z}": '\uD835\uDC81',
"\\mathbit{a}": '\uD835\uDC82',
"\\mathbit{b}": '\uD835\uDC83',
"\\mathbit{c}": '\uD835\uDC84',
"\\mathbit{d}": '\uD835\uDC85',
"\\mathbit{e}": '\uD835\uDC86',
"\\mathbit{f}": '\uD835\uDC87',
"\\mathbit{g}": '\uD835\uDC88',
"\\mathbit{h}": '\uD835\uDC89',
"\\mathbit{i}": '\uD835\uDC8A',
"\\mathbit{j}": '\uD835\uDC8B',
"\\mathbit{k}": '\uD835\uDC8C',
"\\mathbit{l}": '\uD835\uDC8D',
"\\mathbit{m}": '\uD835\uDC8E',
"\\mathbit{n}": '\uD835\uDC8F',
"\\mathbit{o}": '\uD835\uDC90',
"\\mathbit{p}": '\uD835\uDC91',
"\\mathbit{q}": '\uD835\uDC92',
"\\mathbit{r}": '\uD835\uDC93',
"\\mathbit{s}": '\uD835\uDC94',
"\\mathbit{t}": '\uD835\uDC95',
"\\mathbit{u}": '\uD835\uDC96',
"\\mathbit{v}": '\uD835\uDC97',
"\\mathbit{w}": '\uD835\uDC98',
"\\mathbit{x}": '\uD835\uDC99',
"\\mathbit{y}": '\uD835\uDC9A',
"\\mathbit{z}": '\uD835\uDC9B',
"\\mathscr{A}": '\uD835\uDC9C',
"\\mathscr{C}": '\uD835\uDC9E',
"\\mathscr{D}": '\uD835\uDC9F',
"\\mathscr{G}": '\uD835\uDCA2',
"\\mathscr{J}": '\uD835\uDCA5',
"\\mathscr{K}": '\uD835\uDCA6',
"\\mathscr{N}": '\uD835\uDCA9',
"\\mathscr{O}": '\uD835\uDCAA',
"\\mathscr{P}": '\uD835\uDCAB',
"\\mathscr{Q}": '\uD835\uDCAC',
"\\mathscr{S}": '\uD835\uDCAE',
"\\mathscr{T}": '\uD835\uDCAF',
"\\mathscr{U}": '\uD835\uDCB0',
"\\mathscr{V}": '\uD835\uDCB1',
"\\mathscr{W}": '\uD835\uDCB2',
"\\mathscr{X}": '\uD835\uDCB3',
"\\mathscr{Y}": '\uD835\uDCB4',
"\\mathscr{Z}": '\uD835\uDCB5',
"\\mathscr{a}": '\uD835\uDCB6',
"\\mathscr{b}": '\uD835\uDCB7',
"\\mathscr{c}": '\uD835\uDCB8',
"\\mathscr{d}": '\uD835\uDCB9',
"\\mathscr{f}": '\uD835\uDCBB',
"\\mathscr{h}": '\uD835\uDCBD',
"\\mathscr{i}": '\uD835\uDCBE',
"\\mathscr{j}": '\uD835\uDCBF',
"\\mathscr{k}": '\uD835\uDCC0',
"\\mathscr{m}": '\uD835\uDCC2',
"\\mathscr{n}": '\uD835\uDCC3',
"\\mathscr{p}": '\uD835\uDCC5',
"\\mathscr{q}": '\uD835\uDCC6',
"\\mathscr{r}": '\uD835\uDCC7',
"\\mathscr{s}": '\uD835\uDCC8',
"\\mathscr{t}": '\uD835\uDCC9',
"\\mathscr{u}": '\uD835\uDCCA',
"\\mathscr{v}": '\uD835\uDCCB',
"\\mathscr{w}": '\uD835\uDCCC',
"\\mathscr{x}": '\uD835\uDCCD',
"\\mathscr{y}": '\uD835\uDCCE',
"\\mathscr{z}": '\uD835\uDCCF',
"\\mathmit{A}": '\uD835\uDCD0',
"\\mathmit{B}": '\uD835\uDCD1',
"\\mathmit{C}": '\uD835\uDCD2',
"\\mathmit{D}": '\uD835\uDCD3',
"\\mathmit{E}": '\uD835\uDCD4',
"\\mathmit{F}": '\uD835\uDCD5',
"\\mathmit{G}": '\uD835\uDCD6',
"\\mathmit{H}": '\uD835\uDCD7',
"\\mathmit{I}": '\uD835\uDCD8',
"\\mathmit{J}": '\uD835\uDCD9',
"\\mathmit{K}": '\uD835\uDCDA',
"\\mathmit{L}": '\uD835\uDCDB',
"\\mathmit{M}": '\uD835\uDCDC',
"\\mathmit{N}": '\uD835\uDCDD',
"\\mathmit{O}": '\uD835\uDCDE',
"\\mathmit{P}": '\uD835\uDCDF',
"\\mathmit{Q}": '\uD835\uDCE0',
"\\mathmit{R}": '\uD835\uDCE1',
"\\mathmit{S}": '\uD835\uDCE2',
"\\mathmit{T}": '\uD835\uDCE3',
"\\mathmit{U}": '\uD835\uDCE4',
"\\mathmit{V}": '\uD835\uDCE5',
"\\mathmit{W}": '\uD835\uDCE6',
"\\mathmit{X}": '\uD835\uDCE7',
"\\mathmit{Y}": '\uD835\uDCE8',
"\\mathmit{Z}": '\uD835\uDCE9',
"\\mathmit{a}": '\uD835\uDCEA',
"\\mathmit{b}": '\uD835\uDCEB',
"\\mathmit{c}": '\uD835\uDCEC',
"\\mathmit{d}": '\uD835\uDCED',
"\\mathmit{e}": '\uD835\uDCEE',
"\\mathmit{f}": '\uD835\uDCEF',
"\\mathmit{g}": '\uD835\uDCF0',
"\\mathmit{h}": '\uD835\uDCF1',
"\\mathmit{i}": '\uD835\uDCF2',
"\\mathmit{j}": '\uD835\uDCF3',
"\\mathmit{k}": '\uD835\uDCF4',
"\\mathmit{l}": '\uD835\uDCF5',
"\\mathmit{m}": '\uD835\uDCF6',
"\\mathmit{n}": '\uD835\uDCF7',
"\\mathmit{o}": '\uD835\uDCF8',
"\\mathmit{p}": '\uD835\uDCF9',
"\\mathmit{q}": '\uD835\uDCFA',
"\\mathmit{r}": '\uD835\uDCFB',
"\\mathmit{s}": '\uD835\uDCFC',
"\\mathmit{t}": '\uD835\uDCFD',
"\\mathmit{u}": '\uD835\uDCFE',
"\\mathmit{v}": '\uD835\uDCFF',
"\\mathmit{w}": '\uD835\uDD00',
"\\mathmit{x}": '\uD835\uDD01',
"\\mathmit{y}": '\uD835\uDD02',
"\\mathmit{z}": '\uD835\uDD03',
"\\mathfrak{A}": '\uD835\uDD04',
"\\mathfrak{B}": '\uD835\uDD05',
"\\mathfrak{D}": '\uD835\uDD07',
"\\mathfrak{E}": '\uD835\uDD08',
"\\mathfrak{F}": '\uD835\uDD09',
"\\mathfrak{G}": '\uD835\uDD0A',
"\\mathfrak{J}": '\uD835\uDD0D',
"\\mathfrak{K}": '\uD835\uDD0E',
"\\mathfrak{L}": '\uD835\uDD0F',
"\\mathfrak{M}": '\uD835\uDD10',
"\\mathfrak{N}": '\uD835\uDD11',
"\\mathfrak{O}": '\uD835\uDD12',
"\\mathfrak{P}": '\uD835\uDD13',
"\\mathfrak{Q}": '\uD835\uDD14',
"\\mathfrak{S}": '\uD835\uDD16',
"\\mathfrak{T}": '\uD835\uDD17',
"\\mathfrak{U}": '\uD835\uDD18',
"\\mathfrak{V}": '\uD835\uDD19',
"\\mathfrak{W}": '\uD835\uDD1A',
"\\mathfrak{X}": '\uD835\uDD1B',
"\\mathfrak{Y}": '\uD835\uDD1C',
"\\mathfrak{a}": '\uD835\uDD1E',
"\\mathfrak{b}": '\uD835\uDD1F',
"\\mathfrak{c}": '\uD835\uDD20',
"\\mathfrak{d}": '\uD835\uDD21',
"\\mathfrak{e}": '\uD835\uDD22',
"\\mathfrak{f}": '\uD835\uDD23',
"\\mathfrak{g}": '\uD835\uDD24',
"\\mathfrak{h}": '\uD835\uDD25',
"\\mathfrak{i}": '\uD835\uDD26',
"\\mathfrak{j}": '\uD835\uDD27',
"\\mathfrak{k}": '\uD835\uDD28',
"\\mathfrak{l}": '\uD835\uDD29',
"\\mathfrak{m}": '\uD835\uDD2A',
"\\mathfrak{n}": '\uD835\uDD2B',
"\\mathfrak{o}": '\uD835\uDD2C',
"\\mathfrak{p}": '\uD835\uDD2D',
"\\mathfrak{q}": '\uD835\uDD2E',
"\\mathfrak{r}": '\uD835\uDD2F',
"\\mathfrak{s}": '\uD835\uDD30',
"\\mathfrak{t}": '\uD835\uDD31',
"\\mathfrak{u}": '\uD835\uDD32',
"\\mathfrak{v}": '\uD835\uDD33',
"\\mathfrak{w}": '\uD835\uDD34',
"\\mathfrak{x}": '\uD835\uDD35',
"\\mathfrak{y}": '\uD835\uDD36',
"\\mathfrak{z}": '\uD835\uDD37',
"\\mathbb{A}": '\uD835\uDD38',
"\\mathbb{B}": '\uD835\uDD39',
"\\mathbb{D}": '\uD835\uDD3B',
"\\mathbb{E}": '\uD835\uDD3C',
"\\mathbb{F}": '\uD835\uDD3D',
"\\mathbb{G}": '\uD835\uDD3E',
"\\mathbb{I}": '\uD835\uDD40',
"\\mathbb{J}": '\uD835\uDD41',
"\\mathbb{K}": '\uD835\uDD42',
"\\mathbb{L}": '\uD835\uDD43',
"\\mathbb{M}": '\uD835\uDD44',
"\\mathbb{O}": '\uD835\uDD46',
"\\mathbb{S}": '\uD835\uDD4A',
"\\mathbb{T}": '\uD835\uDD4B',
"\\mathbb{U}": '\uD835\uDD4C',
"\\mathbb{V}": '\uD835\uDD4D',
"\\mathbb{W}": '\uD835\uDD4E',
"\\mathbb{X}": '\uD835\uDD4F',
"\\mathbb{Y}": '\uD835\uDD50',
"\\mathbb{a}": '\uD835\uDD52',
"\\mathbb{b}": '\uD835\uDD53',
"\\mathbb{c}": '\uD835\uDD54',
"\\mathbb{d}": '\uD835\uDD55',
"\\mathbb{e}": '\uD835\uDD56',
"\\mathbb{f}": '\uD835\uDD57',
"\\mathbb{g}": '\uD835\uDD58',
"\\mathbb{h}": '\uD835\uDD59',
"\\mathbb{i}": '\uD835\uDD5A',
"\\mathbb{j}": '\uD835\uDD5B',
"\\mathbb{k}": '\uD835\uDD5C',
"\\mathbb{l}": '\uD835\uDD5D',
"\\mathbb{m}": '\uD835\uDD5E',
"\\mathbb{n}": '\uD835\uDD5F',
"\\mathbb{o}": '\uD835\uDD60',
"\\mathbb{p}": '\uD835\uDD61',
"\\mathbb{q}": '\uD835\uDD62',
"\\mathbb{r}": '\uD835\uDD63',
"\\mathbb{s}": '\uD835\uDD64',
"\\mathbb{t}": '\uD835\uDD65',
"\\mathbb{u}": '\uD835\uDD66',
"\\mathbb{v}": '\uD835\uDD67',
"\\mathbb{w}": '\uD835\uDD68',
"\\mathbb{x}": '\uD835\uDD69',
"\\mathbb{y}": '\uD835\uDD6A',
"\\mathbb{z}": '\uD835\uDD6B',
"\\mathslbb{A}": '\uD835\uDD6C',
"\\mathslbb{B}": '\uD835\uDD6D',
"\\mathslbb{C}": '\uD835\uDD6E',
"\\mathslbb{D}": '\uD835\uDD6F',
"\\mathslbb{E}": '\uD835\uDD70',
"\\mathslbb{F}": '\uD835\uDD71',
"\\mathslbb{G}": '\uD835\uDD72',
"\\mathslbb{H}": '\uD835\uDD73',
"\\mathslbb{I}": '\uD835\uDD74',
"\\mathslbb{J}": '\uD835\uDD75',
"\\mathslbb{K}": '\uD835\uDD76',
"\\mathslbb{L}": '\uD835\uDD77',
"\\mathslbb{M}": '\uD835\uDD78',
"\\mathslbb{N}": '\uD835\uDD79',
"\\mathslbb{O}": '\uD835\uDD7A',
"\\mathslbb{P}": '\uD835\uDD7B',
"\\mathslbb{Q}": '\uD835\uDD7C',
"\\mathslbb{R}": '\uD835\uDD7D',
"\\mathslbb{S}": '\uD835\uDD7E',
"\\mathslbb{T}": '\uD835\uDD7F',
"\\mathslbb{U}": '\uD835\uDD80',
"\\mathslbb{V}": '\uD835\uDD81',
"\\mathslbb{W}": '\uD835\uDD82',
"\\mathslbb{X}": '\uD835\uDD83',
"\\mathslbb{Y}": '\uD835\uDD84',
"\\mathslbb{Z}": '\uD835\uDD85',
"\\mathslbb{a}": '\uD835\uDD86',
"\\mathslbb{b}": '\uD835\uDD87',
"\\mathslbb{c}": '\uD835\uDD88',
"\\mathslbb{d}": '\uD835\uDD89',
"\\mathslbb{e}": '\uD835\uDD8A',
"\\mathslbb{f}": '\uD835\uDD8B',
"\\mathslbb{g}": '\uD835\uDD8C',
"\\mathslbb{h}": '\uD835\uDD8D',
"\\mathslbb{i}": '\uD835\uDD8E',
"\\mathslbb{j}": '\uD835\uDD8F',
"\\mathslbb{k}": '\uD835\uDD90',
"\\mathslbb{l}": '\uD835\uDD91',
"\\mathslbb{m}": '\uD835\uDD92',
"\\mathslbb{n}": '\uD835\uDD93',
"\\mathslbb{o}": '\uD835\uDD94',
"\\mathslbb{p}": '\uD835\uDD95',
"\\mathslbb{q}": '\uD835\uDD96',
"\\mathslbb{r}": '\uD835\uDD97',
"\\mathslbb{s}": '\uD835\uDD98',
"\\mathslbb{t}": '\uD835\uDD99',
"\\mathslbb{u}": '\uD835\uDD9A',
"\\mathslbb{v}": '\uD835\uDD9B',
"\\mathslbb{w}": '\uD835\uDD9C',
"\\mathslbb{x}": '\uD835\uDD9D',
"\\mathslbb{y}": '\uD835\uDD9E',
"\\mathslbb{z}": '\uD835\uDD9F',
"\\mathsf{A}": '\uD835\uDDA0',
"\\mathsf{B}": '\uD835\uDDA1',
"\\mathsf{C}": '\uD835\uDDA2',
"\\mathsf{D}": '\uD835\uDDA3',
"\\mathsf{E}": '\uD835\uDDA4',
"\\mathsf{F}": '\uD835\uDDA5',
"\\mathsf{G}": '\uD835\uDDA6',
"\\mathsf{H}": '\uD835\uDDA7',
"\\mathsf{I}": '\uD835\uDDA8',
"\\mathsf{J}": '\uD835\uDDA9',
"\\mathsf{K}": '\uD835\uDDAA',
"\\mathsf{L}": '\uD835\uDDAB',
"\\mathsf{M}": '\uD835\uDDAC',
"\\mathsf{N}": '\uD835\uDDAD',
"\\mathsf{O}": '\uD835\uDDAE',
"\\mathsf{P}": '\uD835\uDDAF',
"\\mathsf{Q}": '\uD835\uDDB0',
"\\mathsf{R}": '\uD835\uDDB1',
"\\mathsf{S}": '\uD835\uDDB2',
"\\mathsf{T}": '\uD835\uDDB3',
"\\mathsf{U}": '\uD835\uDDB4',
"\\mathsf{V}": '\uD835\uDDB5',
"\\mathsf{W}": '\uD835\uDDB6',
"\\mathsf{X}": '\uD835\uDDB7',
"\\mathsf{Y}": '\uD835\uDDB8',
"\\mathsf{Z}": '\uD835\uDDB9',
"\\mathsf{a}": '\uD835\uDDBA',
"\\mathsf{b}": '\uD835\uDDBB',
"\\mathsf{c}": '\uD835\uDDBC',
"\\mathsf{d}": '\uD835\uDDBD',
"\\mathsf{e}": '\uD835\uDDBE',
"\\mathsf{f}": '\uD835\uDDBF',
"\\mathsf{g}": '\uD835\uDDC0',
"\\mathsf{h}": '\uD835\uDDC1',
"\\mathsf{i}": '\uD835\uDDC2',
"\\mathsf{j}": '\uD835\uDDC3',
"\\mathsf{k}": '\uD835\uDDC4',
"\\mathsf{l}": '\uD835\uDDC5',
"\\mathsf{m}": '\uD835\uDDC6',
"\\mathsf{n}": '\uD835\uDDC7',
"\\mathsf{o}": '\uD835\uDDC8',
"\\mathsf{p}": '\uD835\uDDC9',
"\\mathsf{q}": '\uD835\uDDCA',
"\\mathsf{r}": '\uD835\uDDCB',
"\\mathsf{s}": '\uD835\uDDCC',
"\\mathsf{t}": '\uD835\uDDCD',
"\\mathsf{u}": '\uD835\uDDCE',
"\\mathsf{v}": '\uD835\uDDCF',
"\\mathsf{w}": '\uD835\uDDD0',
"\\mathsf{x}": '\uD835\uDDD1',
"\\mathsf{y}": '\uD835\uDDD2',
"\\mathsf{z}": '\uD835\uDDD3',
"\\mathsfbf{A}": '\uD835\uDDD4',
"\\mathsfbf{B}": '\uD835\uDDD5',
"\\mathsfbf{C}": '\uD835\uDDD6',
"\\mathsfbf{D}": '\uD835\uDDD7',
"\\mathsfbf{E}": '\uD835\uDDD8',
"\\mathsfbf{F}": '\uD835\uDDD9',
"\\mathsfbf{G}": '\uD835\uDDDA',
"\\mathsfbf{H}": '\uD835\uDDDB',
"\\mathsfbf{I}": '\uD835\uDDDC',
"\\mathsfbf{J}": '\uD835\uDDDD',
"\\mathsfbf{K}": '\uD835\uDDDE',
"\\mathsfbf{L}": '\uD835\uDDDF',
"\\mathsfbf{M}": '\uD835\uDDE0',
"\\mathsfbf{N}": '\uD835\uDDE1',
"\\mathsfbf{O}": '\uD835\uDDE2',
"\\mathsfbf{P}": '\uD835\uDDE3',
"\\mathsfbf{Q}": '\uD835\uDDE4',
"\\mathsfbf{R}": '\uD835\uDDE5',
"\\mathsfbf{S}": '\uD835\uDDE6',
"\\mathsfbf{T}": '\uD835\uDDE7',
"\\mathsfbf{U}": '\uD835\uDDE8',
"\\mathsfbf{V}": '\uD835\uDDE9',
"\\mathsfbf{W}": '\uD835\uDDEA',
"\\mathsfbf{X}": '\uD835\uDDEB',
"\\mathsfbf{Y}": '\uD835\uDDEC',
"\\mathsfbf{Z}": '\uD835\uDDED',
"\\mathsfbf{a}": '\uD835\uDDEE',
"\\mathsfbf{b}": '\uD835\uDDEF',
"\\mathsfbf{c}": '\uD835\uDDF0',
"\\mathsfbf{d}": '\uD835\uDDF1',
"\\mathsfbf{e}": '\uD835\uDDF2',
"\\mathsfbf{f}": '\uD835\uDDF3',
"\\mathsfbf{g}": '\uD835\uDDF4',
"\\mathsfbf{h}": '\uD835\uDDF5',
"\\mathsfbf{i}": '\uD835\uDDF6',
"\\mathsfbf{j}": '\uD835\uDDF7',
"\\mathsfbf{k}": '\uD835\uDDF8',
"\\mathsfbf{l}": '\uD835\uDDF9',
"\\mathsfbf{m}": '\uD835\uDDFA',
"\\mathsfbf{n}": '\uD835\uDDFB',
"\\mathsfbf{o}": '\uD835\uDDFC',
"\\mathsfbf{p}": '\uD835\uDDFD',
"\\mathsfbf{q}": '\uD835\uDDFE',
"\\mathsfbf{r}": '\uD835\uDDFF',
"\\mathsfbf{s}": '\uD835\uDE00',
"\\mathsfbf{t}": '\uD835\uDE01',
"\\mathsfbf{u}": '\uD835\uDE02',
"\\mathsfbf{v}": '\uD835\uDE03',
"\\mathsfbf{w}": '\uD835\uDE04',
"\\mathsfbf{x}": '\uD835\uDE05',
"\\mathsfbf{y}": '\uD835\uDE06',
"\\mathsfbf{z}": '\uD835\uDE07',
"\\mathsfsl{A}": '\uD835\uDE08',
"\\mathsfsl{B}": '\uD835\uDE09',
"\\mathsfsl{C}": '\uD835\uDE0A',
"\\mathsfsl{D}": '\uD835\uDE0B',
"\\mathsfsl{E}": '\uD835\uDE0C',
"\\mathsfsl{F}": '\uD835\uDE0D',
"\\mathsfsl{G}": '\uD835\uDE0E',
"\\mathsfsl{H}": '\uD835\uDE0F',
"\\mathsfsl{I}": '\uD835\uDE10',
"\\mathsfsl{J}": '\uD835\uDE11',
"\\mathsfsl{K}": '\uD835\uDE12',
"\\mathsfsl{L}": '\uD835\uDE13',
"\\mathsfsl{M}": '\uD835\uDE14',
"\\mathsfsl{N}": '\uD835\uDE15',
"\\mathsfsl{O}": '\uD835\uDE16',
"\\mathsfsl{P}": '\uD835\uDE17',
"\\mathsfsl{Q}": '\uD835\uDE18',
"\\mathsfsl{R}": '\uD835\uDE19',
"\\mathsfsl{S}": '\uD835\uDE1A',
"\\mathsfsl{T}": '\uD835\uDE1B',
"\\mathsfsl{U}": '\uD835\uDE1C',
"\\mathsfsl{V}": '\uD835\uDE1D',
"\\mathsfsl{W}": '\uD835\uDE1E',
"\\mathsfsl{X}": '\uD835\uDE1F',
"\\mathsfsl{Y}": '\uD835\uDE20',
"\\mathsfsl{Z}": '\uD835\uDE21',
"\\mathsfsl{a}": '\uD835\uDE22',
"\\mathsfsl{b}": '\uD835\uDE23',
"\\mathsfsl{c}": '\uD835\uDE24',
"\\mathsfsl{d}": '\uD835\uDE25',
"\\mathsfsl{e}": '\uD835\uDE26',
"\\mathsfsl{f}": '\uD835\uDE27',
"\\mathsfsl{g}": '\uD835\uDE28',
"\\mathsfsl{h}": '\uD835\uDE29',
"\\mathsfsl{i}": '\uD835\uDE2A',
"\\mathsfsl{j}": '\uD835\uDE2B',
"\\mathsfsl{k}": '\uD835\uDE2C',
"\\mathsfsl{l}": '\uD835\uDE2D',
"\\mathsfsl{m}": '\uD835\uDE2E',
"\\mathsfsl{n}": '\uD835\uDE2F',
"\\mathsfsl{o}": '\uD835\uDE30',
"\\mathsfsl{p}": '\uD835\uDE31',
"\\mathsfsl{q}": '\uD835\uDE32',
"\\mathsfsl{r}": '\uD835\uDE33',
"\\mathsfsl{s}": '\uD835\uDE34',
"\\mathsfsl{t}": '\uD835\uDE35',
"\\mathsfsl{u}": '\uD835\uDE36',
"\\mathsfsl{v}": '\uD835\uDE37',
"\\mathsfsl{w}": '\uD835\uDE38',
"\\mathsfsl{x}": '\uD835\uDE39',
"\\mathsfsl{y}": '\uD835\uDE3A',
"\\mathsfsl{z}": '\uD835\uDE3B',
"\\mathsfbfsl{A}": '\uD835\uDE3C',
"\\mathsfbfsl{B}": '\uD835\uDE3D',
"\\mathsfbfsl{C}": '\uD835\uDE3E',
"\\mathsfbfsl{D}": '\uD835\uDE3F',
"\\mathsfbfsl{E}": '\uD835\uDE40',
"\\mathsfbfsl{F}": '\uD835\uDE41',
"\\mathsfbfsl{G}": '\uD835\uDE42',
"\\mathsfbfsl{H}": '\uD835\uDE43',
"\\mathsfbfsl{I}": '\uD835\uDE44',
"\\mathsfbfsl{J}": '\uD835\uDE45',
"\\mathsfbfsl{K}": '\uD835\uDE46',
"\\mathsfbfsl{L}": '\uD835\uDE47',
"\\mathsfbfsl{M}": '\uD835\uDE48',
"\\mathsfbfsl{N}": '\uD835\uDE49',
"\\mathsfbfsl{O}": '\uD835\uDE4A',
"\\mathsfbfsl{P}": '\uD835\uDE4B',
"\\mathsfbfsl{Q}": '\uD835\uDE4C',
"\\mathsfbfsl{R}": '\uD835\uDE4D',
"\\mathsfbfsl{S}": '\uD835\uDE4E',
"\\mathsfbfsl{T}": '\uD835\uDE4F',
"\\mathsfbfsl{U}": '\uD835\uDE50',
"\\mathsfbfsl{V}": '\uD835\uDE51',
"\\mathsfbfsl{W}": '\uD835\uDE52',
"\\mathsfbfsl{X}": '\uD835\uDE53',
"\\mathsfbfsl{Y}": '\uD835\uDE54',
"\\mathsfbfsl{Z}": '\uD835\uDE55',
"\\mathsfbfsl{a}": '\uD835\uDE56',
"\\mathsfbfsl{b}": '\uD835\uDE57',
"\\mathsfbfsl{c}": '\uD835\uDE58',
"\\mathsfbfsl{d}": '\uD835\uDE59',
"\\mathsfbfsl{e}": '\uD835\uDE5A',
"\\mathsfbfsl{f}": '\uD835\uDE5B',
"\\mathsfbfsl{g}": '\uD835\uDE5C',
"\\mathsfbfsl{h}": '\uD835\uDE5D',
"\\mathsfbfsl{i}": '\uD835\uDE5E',
"\\mathsfbfsl{j}": '\uD835\uDE5F',
"\\mathsfbfsl{k}": '\uD835\uDE60',
"\\mathsfbfsl{l}": '\uD835\uDE61',
"\\mathsfbfsl{m}": '\uD835\uDE62',
"\\mathsfbfsl{n}": '\uD835\uDE63',
"\\mathsfbfsl{o}": '\uD835\uDE64',
"\\mathsfbfsl{p}": '\uD835\uDE65',
"\\mathsfbfsl{q}": '\uD835\uDE66',
"\\mathsfbfsl{r}": '\uD835\uDE67',
"\\mathsfbfsl{s}": '\uD835\uDE68',
"\\mathsfbfsl{t}": '\uD835\uDE69',
"\\mathsfbfsl{u}": '\uD835\uDE6A',
"\\mathsfbfsl{v}": '\uD835\uDE6B',
"\\mathsfbfsl{w}": '\uD835\uDE6C',
"\\mathsfbfsl{x}": '\uD835\uDE6D',
"\\mathsfbfsl{y}": '\uD835\uDE6E',
"\\mathsfbfsl{z}": '\uD835\uDE6F',
"\\mathtt{A}": '\uD835\uDE70',
"\\mathtt{B}": '\uD835\uDE71',
"\\mathtt{C}": '\uD835\uDE72',
"\\mathtt{D}": '\uD835\uDE73',
"\\mathtt{E}": '\uD835\uDE74',
"\\mathtt{F}": '\uD835\uDE75',
"\\mathtt{G}": '\uD835\uDE76',
"\\mathtt{H}": '\uD835\uDE77',
"\\mathtt{I}": '\uD835\uDE78',
"\\mathtt{J}": '\uD835\uDE79',
"\\mathtt{K}": '\uD835\uDE7A',
"\\mathtt{L}": '\uD835\uDE7B',
"\\mathtt{M}": '\uD835\uDE7C',
"\\mathtt{N}": '\uD835\uDE7D',
"\\mathtt{O}": '\uD835\uDE7E',
"\\mathtt{P}": '\uD835\uDE7F',
"\\mathtt{Q}": '\uD835\uDE80',
"\\mathtt{R}": '\uD835\uDE81',
"\\mathtt{S}": '\uD835\uDE82',
"\\mathtt{T}": '\uD835\uDE83',
"\\mathtt{U}": '\uD835\uDE84',
"\\mathtt{V}": '\uD835\uDE85',
"\\mathtt{W}": '\uD835\uDE86',
"\\mathtt{X}": '\uD835\uDE87',
"\\mathtt{Y}": '\uD835\uDE88',
"\\mathtt{Z}": '\uD835\uDE89',
"\\mathtt{a}": '\uD835\uDE8A',
"\\mathtt{b}": '\uD835\uDE8B',
"\\mathtt{c}": '\uD835\uDE8C',
"\\mathtt{d}": '\uD835\uDE8D',
"\\mathtt{e}": '\uD835\uDE8E',
"\\mathtt{f}": '\uD835\uDE8F',
"\\mathtt{g}": '\uD835\uDE90',
"\\mathtt{h}": '\uD835\uDE91',
"\\mathtt{i}": '\uD835\uDE92',
"\\mathtt{j}": '\uD835\uDE93',
"\\mathtt{k}": '\uD835\uDE94',
"\\mathtt{l}": '\uD835\uDE95',
"\\mathtt{m}": '\uD835\uDE96',
"\\mathtt{n}": '\uD835\uDE97',
"\\mathtt{o}": '\uD835\uDE98',
"\\mathtt{p}": '\uD835\uDE99',
"\\mathtt{q}": '\uD835\uDE9A',
"\\mathtt{r}": '\uD835\uDE9B',
"\\mathtt{s}": '\uD835\uDE9C',
"\\mathtt{t}": '\uD835\uDE9D',
"\\mathtt{u}": '\uD835\uDE9E',
"\\mathtt{v}": '\uD835\uDE9F',
"\\mathtt{w}": '\uD835\uDEA0',
"\\mathtt{x}": '\uD835\uDEA1',
"\\mathtt{y}": '\uD835\uDEA2',
"\\mathtt{z}": '\uD835\uDEA3',
"\\mathbf{\\Alpha}": '\uD835\uDEA8',
"\\mathbf{\\Beta}": '\uD835\uDEA9',
"\\mathbf{\\Gamma}": '\uD835\uDEAA',
"\\mathbf{\\Delta}": '\uD835\uDEAB',
"\\mathbf{\\Epsilon}": '\uD835\uDEAC',
"\\mathbf{\\Zeta}": '\uD835\uDEAD',
"\\mathbf{\\Eta}": '\uD835\uDEAE',
"\\mathbf{\\Theta}": '\uD835\uDEAF',
"\\mathbf{\\Iota}": '\uD835\uDEB0',
"\\mathbf{\\Kappa}": '\uD835\uDEB1',
"\\mathbf{\\Lambda}": '\uD835\uDEB2',
"\\mathbf{\\Xi}": '\uD835\uDEB5',
"\\mathbf{\\Pi}": '\uD835\uDEB7',
"\\mathbf{\\Rho}": '\uD835\uDEB8',
"\\mathbf{\\vartheta}": '\uD835\uDEB9',
"\\mathbf{\\Sigma}": '\uD835\uDEBA',
"\\mathbf{\\Tau}": '\uD835\uDEBB',
"\\mathbf{\\Upsilon}": '\uD835\uDEBC',
"\\mathbf{\\Phi}": '\uD835\uDEBD',
"\\mathbf{\\Chi}": '\uD835\uDEBE',
"\\mathbf{\\Psi}": '\uD835\uDEBF',
"\\mathbf{\\Omega}": '\uD835\uDEC0',
"\\mathbf{\\nabla}": '\uD835\uDEC1',
"\\mathbf{\\theta}": '\uD835\uDEC9',
"\\mathbf{\\varsigma}": '\uD835\uDED3',
"\\in": '\uD835\uDEDC',
"\\mathbf{\\varkappa}": '\uD835\uDEDE',
"\\mathbf{\\phi}": '\uD835\uDEDF',
"\\mathbf{\\varrho}": '\uD835\uDEE0',
"\\mathbf{\\varpi}": '\uD835\uDEE1',
"\\mathsl{\\Alpha}": '\uD835\uDEE2',
"\\mathsl{\\Beta}": '\uD835\uDEE3',
"\\mathsl{\\Gamma}": '\uD835\uDEE4',
"\\mathsl{\\Delta}": '\uD835\uDEE5',
"\\mathsl{\\Epsilon}": '\uD835\uDEE6',
"\\mathsl{\\Zeta}": '\uD835\uDEE7',
"\\mathsl{\\Eta}": '\uD835\uDEE8',
"\\mathsl{\\Theta}": '\uD835\uDEE9',
"\\mathsl{\\Iota}": '\uD835\uDEEA',
"\\mathsl{\\Kappa}": '\uD835\uDEEB',
"\\mathsl{\\Lambda}": '\uD835\uDEEC',
"\\mathsl{\\Xi}": '\uD835\uDEEF',
"\\mathsl{\\Pi}": '\uD835\uDEF1',
"\\mathsl{\\Rho}": '\uD835\uDEF2',
"\\mathsl{\\vartheta}": '\uD835\uDEF3',
"\\mathsl{\\Sigma}": '\uD835\uDEF4',
"\\mathsl{\\Tau}": '\uD835\uDEF5',
"\\mathsl{\\Upsilon}": '\uD835\uDEF6',
"\\mathsl{\\Phi}": '\uD835\uDEF7',
"\\mathsl{\\Chi}": '\uD835\uDEF8',
"\\mathsl{\\Psi}": '\uD835\uDEF9',
"\\mathsl{\\Omega}": '\uD835\uDEFA',
"\\mathsl{\\nabla}": '\uD835\uDEFB',
"\\mathsl{\\varsigma}": '\uD835\uDF0D',
"\\mathsl{\\varkappa}": '\uD835\uDF18',
"\\mathsl{\\phi}": '\uD835\uDF19',
"\\mathsl{\\varrho}": '\uD835\uDF1A',
"\\mathsl{\\varpi}": '\uD835\uDF1B',
"\\mathbit{\\Alpha}": '\uD835\uDF1C',
"\\mathbit{\\Beta}": '\uD835\uDF1D',
"\\mathbit{\\Gamma}": '\uD835\uDF1E',
"\\mathbit{\\Delta}": '\uD835\uDF1F',
"\\mathbit{\\Epsilon}": '\uD835\uDF20',
"\\mathbit{\\Zeta}": '\uD835\uDF21',
"\\mathbit{\\Eta}": '\uD835\uDF22',
"\\mathbit{\\Theta}": '\uD835\uDF23',
"\\mathbit{\\Iota}": '\uD835\uDF24',
"\\mathbit{\\Kappa}": '\uD835\uDF25',
"\\mathbit{\\Lambda}": '\uD835\uDF26',
"\\mathbit{\\Xi}": '\uD835\uDF29',
"\\mathbit{\\Pi}": '\uD835\uDF2B',
"\\mathbit{\\Rho}": '\uD835\uDF2C',
"\\mathbit{\\Sigma}": '\uD835\uDF2E',
"\\mathbit{\\Tau}": '\uD835\uDF2F',
"\\mathbit{\\Upsilon}": '\uD835\uDF30',
"\\mathbit{\\Phi}": '\uD835\uDF31',
"\\mathbit{\\Chi}": '\uD835\uDF32',
"\\mathbit{\\Psi}": '\uD835\uDF33',
"\\mathbit{\\Omega}": '\uD835\uDF34',
"\\mathbit{\\nabla}": '\uD835\uDF35',
"\\mathbit{\\varsigma}": '\uD835\uDF47',
"\\mathbit{\\vartheta}": '\uD835\uDF51',
"\\mathbit{\\varkappa}": '\uD835\uDF52',
"\\mathbit{\\phi}": '\uD835\uDF53',
"\\mathbit{\\varrho}": '\uD835\uDF54',
"\\mathbit{\\varpi}": '\uD835\uDF55',
"\\mathsfbf{\\Alpha}": '\uD835\uDF56',
"\\mathsfbf{\\Beta}": '\uD835\uDF57',
"\\mathsfbf{\\Gamma}": '\uD835\uDF58',
"\\mathsfbf{\\Delta}": '\uD835\uDF59',
"\\mathsfbf{\\Epsilon}": '\uD835\uDF5A',
"\\mathsfbf{\\Zeta}": '\uD835\uDF5B',
"\\mathsfbf{\\Eta}": '\uD835\uDF5C',
"\\mathsfbf{\\Theta}": '\uD835\uDF5D',
"\\mathsfbf{\\Iota}": '\uD835\uDF5E',
"\\mathsfbf{\\Kappa}": '\uD835\uDF5F',
"\\mathsfbf{\\Lambda}": '\uD835\uDF60',
"\\mathsfbf{\\Xi}": '\uD835\uDF63',
"\\mathsfbf{\\Pi}": '\uD835\uDF65',
"\\mathsfbf{\\Rho}": '\uD835\uDF66',
"\\mathsfbf{\\vartheta}": '\uD835\uDF67',
"\\mathsfbf{\\Sigma}": '\uD835\uDF68',
"\\mathsfbf{\\Tau}": '\uD835\uDF69',
"\\mathsfbf{\\Upsilon}": '\uD835\uDF6A',
"\\mathsfbf{\\Phi}": '\uD835\uDF6B',
"\\mathsfbf{\\Chi}": '\uD835\uDF6C',
"\\mathsfbf{\\Psi}": '\uD835\uDF6D',
"\\mathsfbf{\\Omega}": '\uD835\uDF6E',
"\\mathsfbf{\\nabla}": '\uD835\uDF6F',
"\\mathsfbf{\\varsigma}": '\uD835\uDF81',
"\\mathsfbf{\\varkappa}": '\uD835\uDF8C',
"\\mathsfbf{\\phi}": '\uD835\uDF8D',
"\\mathsfbf{\\varrho}": '\uD835\uDF8E',
"\\mathsfbf{\\varpi}": '\uD835\uDF8F',
"\\mathsfbfsl{\\Alpha}": '\uD835\uDF90',
"\\mathsfbfsl{\\Beta}": '\uD835\uDF91',
"\\mathsfbfsl{\\Gamma}": '\uD835\uDF92',
"\\mathsfbfsl{\\Delta}": '\uD835\uDF93',
"\\mathsfbfsl{\\Epsilon}": '\uD835\uDF94',
"\\mathsfbfsl{\\Zeta}": '\uD835\uDF95',
"\\mathsfbfsl{\\Eta}": '\uD835\uDF96',
"\\mathsfbfsl{\\vartheta}": '\uD835\uDF97',
"\\mathsfbfsl{\\Iota}": '\uD835\uDF98',
"\\mathsfbfsl{\\Kappa}": '\uD835\uDF99',
"\\mathsfbfsl{\\Lambda}": '\uD835\uDF9A',
"\\mathsfbfsl{\\Xi}": '\uD835\uDF9D',
"\\mathsfbfsl{\\Pi}": '\uD835\uDF9F',
"\\mathsfbfsl{\\Rho}": '\uD835\uDFA0',
"\\mathsfbfsl{\\Sigma}": '\uD835\uDFA2',
"\\mathsfbfsl{\\Tau}": '\uD835\uDFA3',
"\\mathsfbfsl{\\Upsilon}": '\uD835\uDFA4',
"\\mathsfbfsl{\\Phi}": '\uD835\uDFA5',
"\\mathsfbfsl{\\Chi}": '\uD835\uDFA6',
"\\mathsfbfsl{\\Psi}": '\uD835\uDFA7',
"\\mathsfbfsl{\\Omega}": '\uD835\uDFA8',
"\\mathsfbfsl{\\nabla}": '\uD835\uDFA9',
"\\mathsfbfsl{\\varsigma}": '\uD835\uDFBB',
"\\mathsfbfsl{\\varkappa}": '\uD835\uDFC6',
"\\mathsfbfsl{\\phi}": '\uD835\uDFC7',
"\\mathsfbfsl{\\varrho}": '\uD835\uDFC8',
"\\mathsfbfsl{\\varpi}": '\uD835\uDFC9',
"\\mathbf{0}": '\uD835\uDFCE',
"\\mathbf{1}": '\uD835\uDFCF',
"\\mathbf{2}": '\uD835\uDFD0',
"\\mathbf{3}": '\uD835\uDFD1',
"\\mathbf{4}": '\uD835\uDFD2',
"\\mathbf{5}": '\uD835\uDFD3',
"\\mathbf{6}": '\uD835\uDFD4',
"\\mathbf{7}": '\uD835\uDFD5',
"\\mathbf{8}": '\uD835\uDFD6',
"\\mathbf{9}": '\uD835\uDFD7',
"\\mathbb{0}": '\uD835\uDFD8',
"\\mathbb{1}": '\uD835\uDFD9',
"\\mathbb{2}": '\uD835\uDFDA',
"\\mathbb{3}": '\uD835\uDFDB',
"\\mathbb{4}": '\uD835\uDFDC',
"\\mathbb{5}": '\uD835\uDFDD',
"\\mathbb{6}": '\uD835\uDFDE',
"\\mathbb{7}": '\uD835\uDFDF',
"\\mathbb{8}": '\uD835\uDFE0',
"\\mathbb{9}": '\uD835\uDFE1',
"\\mathsf{0}": '\uD835\uDFE2',
"\\mathsf{1}": '\uD835\uDFE3',
"\\mathsf{2}": '\uD835\uDFE4',
"\\mathsf{3}": '\uD835\uDFE5',
"\\mathsf{4}": '\uD835\uDFE6',
"\\mathsf{5}": '\uD835\uDFE7',
"\\mathsf{6}": '\uD835\uDFE8',
"\\mathsf{7}": '\uD835\uDFE9',
"\\mathsf{8}": '\uD835\uDFEA',
"\\mathsf{9}": '\uD835\uDFEB',
"\\mathsfbf{0}": '\uD835\uDFEC',
"\\mathsfbf{1}": '\uD835\uDFED',
"\\mathsfbf{2}": '\uD835\uDFEE',
"\\mathsfbf{3}": '\uD835\uDFEF',
"\\mathsfbf{4}": '\uD835\uDFF0',
"\\mathsfbf{5}": '\uD835\uDFF1',
"\\mathsfbf{6}": '\uD835\uDFF2',
"\\mathsfbf{7}": '\uD835\uDFF3',
"\\mathsfbf{8}": '\uD835\uDFF4',
"\\mathsfbf{9}": '\uD835\uDFF5',
"\\mathtt{0}": '\uD835\uDFF6',
"\\mathtt{1}": '\uD835\uDFF7',
"\\mathtt{2}": '\uD835\uDFF8',
"\\mathtt{3}": '\uD835\uDFF9',
"\\mathtt{4}": '\uD835\uDFFA',
"\\mathtt{5}": '\uD835\uDFFB',
"\\mathtt{6}": '\uD835\uDFFC',
"\\mathtt{7}": '\uD835\uDFFD',
"\\mathtt{8}": '\uD835\uDFFE',
"\\mathtt{9}": '\uD835\uDFFF'
};
// SOURCE: resource/translators/BetterBibTeXBraceBalancer.js
BetterBibTeXBraceBalancer = (function() {
"use strict";
/*
* Generated by PEG.js 0.9.0.
*
* http://pegjs.org/
*/
function peg$subclass(child, parent) {
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor();
}
function peg$SyntaxError(message, expected, found, location) {
this.message = message;
this.expected = expected;
this.found = found;
this.location = location;
this.name = "SyntaxError";
if (typeof Error.captureStackTrace === "function") {
Error.captureStackTrace(this, peg$SyntaxError);
}
}
peg$subclass(peg$SyntaxError, Error);
function peg$parse(input) {
var options = arguments.length > 1 ? arguments[1] : {},
parser = this,
peg$FAILED = {},
peg$startRuleFunctions = { start: peg$parsestart },
peg$startRuleFunction = peg$parsestart,
peg$c0 = function(chunks) { return chunks.join('') },
peg$c1 = function(t) { return t.join(''); },
peg$c2 = function(l, mid, r) { return l + (mid || '') + r },
peg$c3 = function(l, mid) { return l + "\\vphantom{\\" + rbrace + '}' + (mid || '') },
peg$c4 = function(r, mid) { return "\\vphantom{\\" + lbrace + '}' + r + (mid || '') },
peg$c5 = "\\{",
peg$c6 = { type: "literal", value: "\\{", description: "\"\\\\{\"" },
peg$c7 = "\\textleftbrace",
peg$c8 = { type: "literal", value: "\\textleftbrace", description: "\"\\\\textleftbrace\"" },
peg$c9 = /^[s]/,
peg$c10 = { type: "class", value: "[\\s]", description: "[\\s]" },
peg$c11 = /^[\\{}]/,
peg$c12 = { type: "class", value: "[\\\\{}]", description: "[\\\\{}]" },
peg$c13 = "\\}",
peg$c14 = { type: "literal", value: "\\}", description: "\"\\\\}\"" },
peg$c15 = "\\textrightbrace",
peg$c16 = { type: "literal", value: "\\textrightbrace", description: "\"\\\\textrightbrace\"" },
peg$c17 = /^[^\\]/,
peg$c18 = { type: "class", value: "[^\\\\]", description: "[^\\\\]" },
peg$c19 = function(t) { return t; },
peg$c20 = "\\",
peg$c21 = { type: "literal", value: "\\", description: "\"\\\\\"" },
peg$c22 = { type: "any", description: "any character" },
peg$c23 = function(t) { return "\\" + t; },
peg$currPos = 0,
peg$savedPos = 0,
peg$posDetailsCache = [{ line: 1, column: 1, seenCR: false }],
peg$maxFailPos = 0,
peg$maxFailExpected = [],
peg$silentFails = 0,
peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function text() {
return input.substring(peg$savedPos, peg$currPos);
}
function location() {
return peg$computeLocation(peg$savedPos, peg$currPos);
}
function expected(description) {
throw peg$buildException(
null,
[{ type: "other", description: description }],
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function error(message) {
throw peg$buildException(
message,
null,
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos],
p, ch;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column,
seenCR: details.seenCR
};
while (p < pos) {
ch = input.charAt(p);
if (ch === "\n") {
if (!details.seenCR) { details.line++; }
details.column = 1;
details.seenCR = false;
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
details.line++;
details.column = 1;
details.seenCR = true;
} else {
details.column++;
details.seenCR = false;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos) {
var startPosDetails = peg$computePosDetails(startPos),
endPosDetails = peg$computePosDetails(endPos);
return {
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
}
function peg$fail(expected) {
if (peg$currPos < peg$maxFailPos) { return; }
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected);
}
function peg$buildException(message, expected, found, location) {
function cleanupExpected(expected) {
var i = 1;
expected.sort(function(a, b) {
if (a.description < b.description) {
return -1;
} else if (a.description > b.description) {
return 1;
} else {
return 0;
}
});
while (i < expected.length) {
if (expected[i - 1] === expected[i]) {
expected.splice(i, 1);
} else {
i++;
}
}
}
function buildMessage(expected, found) {
function stringEscape(s) {
function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
return s
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\x08/g, '\\b')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\f/g, '\\f')
.replace(/\r/g, '\\r')
.replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
.replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
.replace(/[\u0100-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
.replace(/[\u1000-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
}
var expectedDescs = new Array(expected.length),
expectedDesc, foundDesc, i;
for (i = 0; i < expected.length; i++) {
expectedDescs[i] = expected[i].description;
}
expectedDesc = expected.length > 1
? expectedDescs.slice(0, -1).join(", ")
+ " or "
+ expectedDescs[expected.length - 1]
: expectedDescs[0];
foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
return "Expected " + expectedDesc + " but " + foundDesc + " found.";
}
if (expected !== null) {
cleanupExpected(expected);
}
return new peg$SyntaxError(
message !== null ? message : buildMessage(expected, found),
expected,
found,
location
);
}
function peg$parsestart() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsechunk();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsechunk();
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c0(s1);
}
s0 = s1;
return s0;
}
function peg$parsechunk() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsetext();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsetext();
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c1(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseleftbrace();
if (s1 !== peg$FAILED) {
s2 = peg$parsechunk();
if (s2 === peg$FAILED) {
s2 = null;
}
if (s2 !== peg$FAILED) {
s3 = peg$parserightbrace();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c2(s1, s2, s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parseleftbrace();
if (s1 !== peg$FAILED) {
s2 = peg$parsechunk();
if (s2 === peg$FAILED) {
s2 = null;
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c3(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parserightbrace();
if (s1 !== peg$FAILED) {
s2 = peg$parsechunk();
if (s2 === peg$FAILED) {
s2 = null;
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c4(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
}
return s0;
}
function peg$parseleftbrace() {
var s0, s1, s2, s3;
if (input.substr(peg$currPos, 2) === peg$c5) {
s0 = peg$c5;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 14) === peg$c7) {
s1 = peg$c7;
peg$currPos += 14;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c8); }
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c9.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c9.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 14) === peg$c7) {
s1 = peg$c7;
peg$currPos += 14;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c8); }
}
if (s1 !== peg$FAILED) {
s2 = peg$currPos;
peg$silentFails++;
if (peg$c11.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c12); }
}
peg$silentFails--;
if (s3 !== peg$FAILED) {
peg$currPos = s2;
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
return s0;
}
function peg$parserightbrace() {
var s0, s1, s2, s3;
if (input.substr(peg$currPos, 2) === peg$c13) {
s0 = peg$c13;
peg$currPos += 2;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c14); }
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 15) === peg$c15) {
s1 = peg$c15;
peg$currPos += 15;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c9.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c9.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c10); }
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 15) === peg$c15) {
s1 = peg$c15;
peg$currPos += 15;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s1 !== peg$FAILED) {
s2 = peg$currPos;
peg$silentFails++;
if (peg$c11.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c12); }
}
peg$silentFails--;
if (s3 !== peg$FAILED) {
peg$currPos = s2;
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
return s0;
}
function peg$parsetext() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c17.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c18); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c17.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c18); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c1(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$currPos;
peg$silentFails++;
s2 = peg$parseleftbrace();
if (s2 === peg$FAILED) {
s2 = peg$parserightbrace();
}
peg$silentFails--;
if (s2 === peg$FAILED) {
s1 = void 0;
} else {
peg$currPos = s1;
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = peg$parsechar();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c19(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parsechar() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c20;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c21); }
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c22); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c23(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.length > peg$currPos) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c22); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c19(s1);
}
s0 = s1;
}
return s0;
}
// pegjs doesn't tolerate unbalanced braces in the parser text
lbrace = '{'
rbrace = '}'
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail({ type: "end", description: "end of input" });
}
throw peg$buildException(
null,
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length
? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)
: peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
})();
// SOURCE: resource/translators/BetterBibTeXParserSupport.js
// Generated by CoffeeScript 1.10.0
var BetterBibTeXParserSupport,
slice = [].slice;
BetterBibTeXParserSupport = (function() {
function BetterBibTeXParserSupport(options) {
this.raw = options.raw;
this.references = [];
this.collections = [];
this.strings = Object.create(null);
this.comments = [];
this.errors = [];
}
BetterBibTeXParserSupport.prototype.quoteWith = function(state) {
switch (state) {
case '"':
this.braced = false;
this.quoted = true;
break;
case '{}':
this.braced = true;
this.quoted = false;
break;
default:
this.braced = false;
this.quoted = false;
}
return true;
};
BetterBibTeXParserSupport.prototype.lookahead = function(n) {
return peg$currPos + " :: " + (input.substr(peg$currPos, n));
};
BetterBibTeXParserSupport.prototype.flatten = function(str) {
var s;
if (Array.isArray(str)) {
return ((function() {
var j, len, results;
results = [];
for (j = 0, len = str.length; j < len; j++) {
s = str[j];
results.push(this.flatten(s));
}
return results;
}).call(this)).join('');
}
return '' + str;
};
BetterBibTeXParserSupport.prototype.log = function() {
var m, msg;
msg = 1 <= arguments.length ? slice.call(arguments, 0) : [];
msg = ((function() {
var j, len, ref1, results;
results = [];
for (j = 0, len = msg.length; j < len; j++) {
m = msg[j];
results.push((ref1 = typeof m) === 'number' || ref1 === 'string' ? '' + m : JSON.stringify(m));
}
return results;
})()).join(' ');
msg = "\n\n*** " + msg + " ***\n\n";
((typeof Translator !== "undefined" && Translator !== null ? Translator.log : void 0) || console.log)(msg);
return true;
};
BetterBibTeXParserSupport.prototype.filterattachments = function(attachments, key) {
var attachment, j, len;
if (key === 'sentelink') {
for (j = 0, len = attachments.length; j < len; j++) {
attachment = attachments[j];
if (attachment.path) {
attachment.path = attachment.path.replace(/,.*/, '');
}
}
}
attachments = (function() {
var k, len1, results;
results = [];
for (k = 0, len1 = attachments.length; k < len1; k++) {
attachment = attachments[k];
if (attachment.path && attachment.path !== '') {
results.push(attachment);
}
}
return results;
})();
attachments.sort(function(a, b) {
if (a.path < b.path) {
return -1;
} else if (a.path > b.path) {
return 1;
} else {
return 0;
}
});
return attachments;
};
BetterBibTeXParserSupport.prototype.skipEmptyKeys = function(key) {
return key !== '';
};
BetterBibTeXParserSupport.prototype.intersect = function(v) {
return this.indexOf(v) >= 0;
};
BetterBibTeXParserSupport.prototype.unique = function(arr) {
var j, len, result, v;
result = [];
for (j = 0, len = arr.length; j < len; j++) {
v = arr[j];
if (result.indexOf(v) < 0) {
result.push(v);
}
}
return result;
};
BetterBibTeXParserSupport.prototype.Creators = new ((function() {
function _Class() {}
_Class.prototype.reduce = function(result, fragment) {
/* for the first item, return the item */
if (result.length === 0) {
return [fragment];
}
/*
* if either the last element of the result so far of the new string to be added is a literal, push it onto the
* result (don't smush literals)
*/
if ((result[result.length - 1] instanceof String) || (fragment instanceof String)) {
return result.concat(fragment);
}
/* regular strings -- add to tail */
result[result.length - 1] += fragment;
return result;
};
_Class.prototype.compact = function(fragments) {
return fragments.reduce(this.reduce, []);
};
_Class.prototype.push = function(groups, fragment, startNewGroup) {
if (startNewGroup || groups.length === 0) {
groups.push([]);
}
return groups[groups.length - 1].push(fragment);
};
_Class.prototype.split = function(fragments, sep, groups) {
var fragment, group, i, j, k, l, last, len, len1, len2, ref1, splinter;
if (groups == null) {
groups = [];
}
fragments = this.compact(fragments);
for (j = 0, len = fragments.length; j < len; j++) {
fragment = fragments[j];
if (fragment instanceof String) {
/* literals always form a new substring */
this.push(groups, fragment);
} else {
/* split on separator and push resulting substrings */
ref1 = fragment.split(sep);
for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) {
splinter = ref1[i];
/*
* first word is before the separator, so it is appended to the previous chunk
* all other words start a new entry
*/
this.push(groups, splinter, i > 0);
}
}
}
/* compact regular strings in groups */
groups = (function() {
var l, len2, results;
results = [];
for (l = 0, len2 = groups.length; l < len2; l++) {
group = groups[l];
results.push(this.compact(group));
}
return results;
}).call(this);
/* 'trim' the groups */
for (l = 0, len2 = groups.length; l < len2; l++) {
group = groups[l];
if (group.length === 0) {
continue;
}
/* remove whitespace at the start of the group */
if (typeof group[0] === 'string') {
group[0] = group[0].replace(/^\s+/g, '');
if (group[0] === '') {
group.shift();
}
}
if (group.length === 0) {
continue;
}
/* remove whitespace at the end of the group */
last = group.length - 1;
if (typeof group[last] === 'string') {
group[last] = group[last].replace(/\s+$/g, '');
if (group[last] === '') {
group.pop();
}
}
}
return groups;
};
_Class.prototype.join = function(group) {
return group.join('').trim();
};
_Class.prototype.creator = function(name) {
var firstName, lastName, n;
name = this.split(name, ",");
switch (name.length) {
case 0:
return null;
case 1:
/* single string, no commas */
if (name[0].length === 1 && (name[0][0] instanceof String)) {
/* single literal */
return {
lastName: "" + name[0][0],
fieldMode: 1
};
}
/* single string, no commas */
/* this will be cleaned up by zotero utils later */
return this.join(name[0]);
case 2:
/* last name, first name */
return {
lastName: this.join(name[0]),
firstName: this.join(name[1])
};
default:
/* assumed middle item is something like Jr. */
firstName = this.join(name.pop());
lastName = ((function() {
var j, len, results;
results = [];
for (j = 0, len = name.length; j < len; j++) {
n = name[j];
results.push(this.join(n));
}
return results;
}).call(this)).join(', ');
return {
lastName: lastName,
firstName: firstName
};
}
};
_Class.prototype.parse = function(creators) {
var name;
return (function() {
var j, len, ref1, results;
ref1 = this.split(creators, /\s+and\s+/);
results = [];
for (j = 0, len = ref1.length; j < len; j++) {
name = ref1[j];
results.push(this.creator(name));
}
return results;
}).call(this);
};
return _Class;
})());
BetterBibTeXParserSupport.prototype.reference = function(type, citekey, fields) {
var attachments, field, j, len, note, ref, ref1;
if (fields.length === 0) {
return this.errors.push("@" + type + "{" + citekey + ",}");
} else {
ref = {
__type__: type.toLowerCase(),
__key__: citekey
};
for (j = 0, len = fields.length; j < len; j++) {
field = fields[j];
/* safe since we're only dealing with strings, not numbers */
if (!(field.value && field.value !== '')) {
continue;
}
switch (field.type) {
case 'file':
attachments = (ref1 = ref.file) != null ? ref1 : [];
ref.file = attachments.concat(field.value);
break;
case 'creator':
if (field.value.length > 0) {
ref[field.key] = field.value;
}
break;
default:
if (ref[field.key]) {
/* duplicate fields are not supposed to occur I think */
note = ref.__note__ ? ref.__note__ + "<br/>\n" : '';
ref.__note__ = note + field.key + "=" + field.value;
} else {
ref[field.key] = field.value;
}
}
}
return this.references.push(ref);
}
};
BetterBibTeXParserSupport.prototype.error = function(text) {
return this.errors.push("@" + (this.flatten(text)));
};
BetterBibTeXParserSupport.prototype.comment = function(text) {
return this.comments.push(this.flatten(text).trim());
};
BetterBibTeXParserSupport.prototype.string = function(str) {
return this.strings[str.verbatimKey] = str.value;
};
BetterBibTeXParserSupport.prototype.command = function(command, param) {
var j, len, variant, variants;
variants = ["\\" + command + param];
if (param.length === 1) {
variants.push("{\\" + command + param + "}");
}
if (param.length === 3 && param[0] === '{' && param[2] === '}') {
variants.push("{\\" + command + param[1] + "}");
}
for (j = 0, len = variants.length; j < len; j++) {
variant = variants[j];
if (LaTeX.toUnicode[variant]) {
return LaTeX.toUnicode[variant];
}
}
return param;
};
BetterBibTeXParserSupport.prototype.attachment = function(parts) {
var attachment, ref1, ref2, v;
parts = (function() {
var j, len, ref1, results;
ref1 = parts || [];
results = [];
for (j = 0, len = ref1.length; j < len; j++) {
v = ref1[j];
results.push(v.trim());
}
return results;
})();
switch (parts.length) {
case 0:
return {};
case 1:
attachment = {
path: parts.shift()
};
break;
default:
attachment = {
title: parts.shift()
};
attachment.path = (ref1 = parts.shift()) != null ? ref1 : '';
attachment.mimeType = (ref2 = parts.shift()) != null ? ref2 : '';
}
if (!(attachment.title && attachment.title !== '')) {
attachment.title = 'Attachment';
}
if (attachment.mimeType.match(/pdf/i) || attachment.path.match(/\.pdf$/i)) {
attachment.mimeType = 'application/pdf';
}
attachment.path = attachment.path.replace(/\\/g, '/');
if (attachment.path.match(/^[a-z]:\//i)) {
attachment.path = "file:///" + attachment.path;
}
if (attachment.path.match(/^\/\//)) {
attachment.path = "file:" + attachment.path;
}
return attachment;
};
BetterBibTeXParserSupport.prototype.groupsTree = function(id, groups) {
var collection, collections, group, intersection, j, len, levels;
levels = Object.create(null);
collections = [];
for (j = 0, len = groups.length; j < len; j++) {
group = groups[j];
if (!group) {
continue;
}
collection = Object.create(null);
collection.name = group.data.shift();
intersection = group.data.shift();
collection.items = group.data.filter(bibtex.skipEmptyKeys);
collection.collections = [];
levels[group.level] = collection;
if (group.level === 1) {
collections.push(collection);
} else {
levels[group.level - 1].collections.push(collection);
switch (intersection) {
case "1":
/* intersection */
collection.items = collection.items.filter(bibtex.intersect, levels[group.level - 1].items);
break;
case "2":
/* union */
collection.items = bibtex.unique(levels[group.level - 1].items.concat(collection.items));
}
}
}
return this.collections = this.collections.concat(collections);
};
return BetterBibTeXParserSupport;
})();
// SOURCE: resource/translators/BetterBibTeXParser.js
BetterBibTeXParser = (function() {
"use strict";
/*
* Generated by PEG.js 0.9.0.
*
* http://pegjs.org/
*/
function peg$subclass(child, parent) {
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor();
}
function peg$SyntaxError(message, expected, found, location) {
this.message = message;
this.expected = expected;
this.found = found;
this.location = location;
this.name = "SyntaxError";
if (typeof Error.captureStackTrace === "function") {
Error.captureStackTrace(this, peg$SyntaxError);
}
}
peg$subclass(peg$SyntaxError, Error);
function peg$parse(input) {
var options = arguments.length > 1 ? arguments[1] : {},
parser = this,
peg$FAILED = {},
peg$startRuleFunctions = { start: peg$parsestart },
peg$startRuleFunction = peg$parsestart,
peg$c0 = function(entries) { return bibtex },
peg$c1 = "@comment",
peg$c2 = { type: "literal", value: "@comment", description: "\"@comment\"" },
peg$c3 = "{",
peg$c4 = { type: "literal", value: "{", description: "\"{\"" },
peg$c5 = "}",
peg$c6 = { type: "literal", value: "}", description: "\"}\"" },
peg$c7 = function(comment) { bibtex.comment(comment); },
peg$c8 = "@string",
peg$c9 = { type: "literal", value: "@string", description: "\"@string\"" },
peg$c10 = function(str) { bibtex.string(str); },
peg$c11 = "@preamble",
peg$c12 = { type: "literal", value: "@preamble", description: "\"@preamble\"" },
peg$c13 = "@",
peg$c14 = { type: "literal", value: "@", description: "\"@\"" },
peg$c15 = /^[^@]/,
peg$c16 = { type: "class", value: "[^@]", description: "[^@]" },
peg$c17 = function(other) { bibtex.comment(other); },
peg$c18 = ",",
peg$c19 = { type: "literal", value: ",", description: "\",\"" },
peg$c20 = function(type, id, fields) { bibtex.reference(type, id, fields); },
peg$c21 = function(err) { bibtex.error(err); },
peg$c22 = /^[a-zA-Z]/,
peg$c23 = { type: "class", value: "[a-zA-Z]", description: "[a-zA-Z]" },
peg$c24 = function(chars) { return bibtex.flatten(chars) },
peg$c25 = /^[^,]/,
peg$c26 = { type: "class", value: "[^,]", description: "[^,]" },
peg$c27 = "=",
peg$c28 = { type: "literal", value: "=", description: "\"=\"" },
peg$c29 = function(key, val) { return {key: 'file', type: 'file', value: bibtex.filterattachments(val || [], key)}; },
peg$c30 = function(key, val) { return {key: key.toLowerCase(), type: 'creator', value: bibtex.Creators.parse(val)}; },
peg$c31 = "sentelink",
peg$c32 = { type: "literal", value: "sentelink", description: "\"sentelink\"" },
peg$c33 = "file",
peg$c34 = { type: "literal", value: "file", description: "\"file\"" },
peg$c35 = "pdf",
peg$c36 = { type: "literal", value: "pdf", description: "\"pdf\"" },
peg$c37 = "path",
peg$c38 = { type: "literal", value: "path", description: "\"path\"" },
peg$c39 = "author",
peg$c40 = { type: "literal", value: "author", description: "\"author\"" },
peg$c41 = "editor",
peg$c42 = { type: "literal", value: "editor", description: "\"editor\"" },
peg$c43 = "translator",
peg$c44 = { type: "literal", value: "translator", description: "\"translator\"" },
peg$c45 = function(val) { return val },
peg$c46 = "\"",
peg$c47 = { type: "literal", value: "\"", description: "\"\\\"\"" },
peg$c48 = "url",
peg$c49 = { type: "literal", value: "url", description: "\"url\"" },
peg$c50 = function(val) { return {key: 'url', value: val.trim()} },
peg$c51 = function(key, val) { return {key: key.trim().toLowerCase(), value: val.trim(), verbatimKey: key.trim()} },
peg$c52 = /^[^ \t\n\r=]/,
peg$c53 = { type: "class", value: "[^ \\t\\n\\r=]", description: "[^ \\t\\n\\r=]" },
peg$c54 = function(key) { return bibtex.flatten(key) },
peg$c55 = /^[^#"{} \t\n\r,]/,
peg$c56 = { type: "class", value: "[^#\"{} \\t\\n\\r,]", description: "[^#\"{} \\t\\n\\r,]" },
peg$c57 = function(val) { val = bibtex.flatten(val); return bibtex.strings[val] || val; },
peg$c58 = function(val) { return bibtex.flatten(val) },
peg$c59 = "#",
peg$c60 = { type: "literal", value: "#", description: "\"#\"" },
peg$c61 = /^[^"]/,
peg$c62 = { type: "class", value: "[^\"]", description: "[^\"]" },
peg$c63 = function() { return bibtex.quoteWith('{}') },
peg$c64 = function(val) { return bibtex.quoteWith() },
peg$c65 = function() { return bibtex.quoteWith('"') },
peg$c66 = function() { return !bibtex.raw },
peg$c67 = function(strings) { return strings },
peg$c68 = function() { return bibtex.raw },
peg$c69 = function() { return bibtex.braced },
peg$c70 = /^[^\\{}]/,
peg$c71 = { type: "class", value: "[^\\\\{}]", description: "[^\\\\{}]" },
peg$c72 = function(text) { return text.join('') },
peg$c73 = function() { return bibtex.quoted },
peg$c74 = /^[^\\"]/,
peg$c75 = { type: "class", value: "[^\\\\\"]", description: "[^\\\\\"]" },
peg$c76 = "\\",
peg$c77 = { type: "literal", value: "\\", description: "\"\\\\\"" },
peg$c78 = { type: "any", description: "any character" },
peg$c79 = function(text) { return "\\" + text },
peg$c80 = function(text) { return new String('{' + text.join('') + '}') },
peg$c81 = function(text) { return text },
peg$c82 = "\\\\",
peg$c83 = { type: "literal", value: "\\\\", description: "\"\\\\\\\\\"" },
peg$c84 = function() { return "\n" },
peg$c85 = /^[[\]]/,
peg$c86 = { type: "class", value: "[\\[\\]]", description: "[\\[\\]]" },
peg$c87 = function(bracket) { return bracket },
peg$c88 = /^[~]/,
peg$c89 = { type: "class", value: "[~]", description: "[~]" },
peg$c90 = function(text) { return ' ' },
peg$c91 = /^[#$&]/,
peg$c92 = { type: "class", value: "[#$&]", description: "[#$&]" },
peg$c93 = function() { return '' },
peg$c94 = "_",
peg$c95 = { type: "literal", value: "_", description: "\"_\"" },
peg$c96 = function(text) { return '<sub>' + text + '</sub>' },
peg$c97 = "^",
peg$c98 = { type: "literal", value: "^", description: "\"^\"" },
peg$c99 = function(text) { return '<sup>' + text + '</sup>' },
peg$c100 = "\\vphantom",
peg$c101 = { type: "literal", value: "\\vphantom", description: "\"\\\\vphantom\"" },
peg$c102 = function(text) { return '' },
peg$c103 = "\\emph",
peg$c104 = { type: "literal", value: "\\emph", description: "\"\\\\emph\"" },
peg$c105 = function(text) { return '<i>' + text + '</i>' },
peg$c106 = "\\url{",
peg$c107 = { type: "literal", value: "\\url{", description: "\"\\\\url{\"" },
peg$c108 = function(text) { return bibtex.flatten(text) },
peg$c109 = "\\textit",
peg$c110 = { type: "literal", value: "\\textit", description: "\"\\\\textit\"" },
peg$c111 = "\\textbf",
peg$c112 = { type: "literal", value: "\\textbf", description: "\"\\\\textbf\"" },
peg$c113 = function(text) { return '<b>' + text + '</b>' },
peg$c114 = "\\textsc",
peg$c115 = { type: "literal", value: "\\textsc", description: "\"\\\\textsc\"" },
peg$c116 = function(text) { return '<span style="small-caps">' + text + '</span>' },
peg$c117 = function(text) { return new String(bibtex.flatten(text)) },
peg$c118 = "$",
peg$c119 = { type: "literal", value: "$", description: "\"$\"" },
peg$c120 = "%",
peg$c121 = { type: "literal", value: "%", description: "\"%\"" },
peg$c122 = function() { return '%' },
peg$c123 = /^[^a-z]/,
peg$c124 = { type: "class", value: "[^a-z]", description: "[^a-z]" },
peg$c125 = "[",
peg$c126 = { type: "literal", value: "[", description: "\"[\"" },
peg$c127 = "]",
peg$c128 = { type: "literal", value: "]", description: "\"]\"" },
peg$c129 = function(command, param) { return bibtex.command(command, param); /* single-char command */ },
peg$c130 = function(cmd) { return LaTeX.toUnicode["\\" + cmd] || cmd /* single-char command without parameter */ },
peg$c131 = function(cmd, text) { return ((LaTeX.toUnicode["\\" + cmd] || '') + bibtex.flatten(text)); /* command */ },
peg$c132 = function(cmd) { return LaTeX.toUnicode["\\" + cmd] || cmd /* bare command */ },
peg$c133 = /^[^\\{]/,
peg$c134 = { type: "class", value: "[^\\\\{]", description: "[^\\\\{]" },
peg$c135 = function() { return '"' },
peg$c136 = /^[#$%&_\^[\]{}]/,
peg$c137 = { type: "class", value: "[#$%&_\\^\\[\\]{}]", description: "[#$%&_\\^\\[\\]{}]" },
peg$c138 = function() { return bibtex.quoted },
peg$c139 = /^[^ "\t\n\r#$%&~_\^{}[\]\\]/,
peg$c140 = { type: "class", value: "[^ \"\\t\\n\\r#$%&~_\\^{}\\[\\]\\\\]", description: "[^ \"\\t\\n\\r#$%&~_\\^{}\\[\\]\\\\]" },
peg$c141 = function() { return !bibtex.quoted },
peg$c142 = /^[^ \t\n\r#$%&~_\^{}[\]\\]/,
peg$c143 = { type: "class", value: "[^ \\t\\n\\r#$%&~_\\^{}\\[\\]\\\\]", description: "[^ \\t\\n\\r#$%&~_\\^{}\\[\\]\\\\]" },
peg$c144 = function(car, cdr) { return [car].concat(cdr || []) },
peg$c145 = ";",
peg$c146 = { type: "literal", value: ";", description: "\";\"" },
peg$c147 = function(att) { return att },
peg$c148 = function(fileparts) { return bibtex.attachment(fileparts); },
peg$c149 = ":",
peg$c150 = { type: "literal", value: ":", description: "\":\"" },
peg$c151 = function(part) { return part },
peg$c152 = function(part) { return (part || '') },
peg$c153 = /^[^\\{}:;]/,
peg$c154 = { type: "class", value: "[^\\\\{}:;]", description: "[^\\\\{}:;]" },
peg$c155 = "jabref-meta:",
peg$c156 = { type: "literal", value: "jabref-meta:", description: "\"jabref-meta:\"" },
peg$c157 = "groupstree:",
peg$c158 = { type: "literal", value: "groupstree:", description: "\"groupstree:\"" },
peg$c159 = function(id, groups) { bibtex.groupsTree(id, groups); },
peg$c160 = /^[0-9]/,
peg$c161 = { type: "class", value: "[0-9]", description: "[0-9]" },
peg$c162 = "allentriesgroup:;",
peg$c163 = { type: "literal", value: "AllEntriesGroup:;", description: "\"AllEntriesGroup:;\"" },
peg$c164 = function() { return null },
peg$c165 = "ExplicitGroup:",
peg$c166 = { type: "literal", value: "ExplicitGroup:", description: "\"ExplicitGroup:\"" },
peg$c167 = function(level, group) { return {level: parseInt(level), data:group} },
peg$c168 = /^[\r\n]/,
peg$c169 = { type: "class", value: "[\\r\\n]", description: "[\\r\\n]" },
peg$c170 = function(elt) { return elt },
peg$c171 = function(chars) { return chars.join('') },
peg$c172 = function(char) { return char },
peg$c173 = /^[^\\;\r\n]/,
peg$c174 = { type: "class", value: "[^\\\\;\\r\\n]", description: "[^\\\\;\\r\\n]" },
peg$c175 = /^[ \t\n\r]/,
peg$c176 = { type: "class", value: "[ \\t\\n\\r]", description: "[ \\t\\n\\r]" },
peg$currPos = 0,
peg$savedPos = 0,
peg$posDetailsCache = [{ line: 1, column: 1, seenCR: false }],
peg$maxFailPos = 0,
peg$maxFailExpected = [],
peg$silentFails = 0,
peg$result;
if ("startRule" in options) {
if (!(options.startRule in peg$startRuleFunctions)) {
throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
}
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
}
function text() {
return input.substring(peg$savedPos, peg$currPos);
}
function location() {
return peg$computeLocation(peg$savedPos, peg$currPos);
}
function expected(description) {
throw peg$buildException(
null,
[{ type: "other", description: description }],
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function error(message) {
throw peg$buildException(
message,
null,
input.substring(peg$savedPos, peg$currPos),
peg$computeLocation(peg$savedPos, peg$currPos)
);
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos],
p, ch;
if (details) {
return details;
} else {
p = pos - 1;
while (!peg$posDetailsCache[p]) {
p--;
}
details = peg$posDetailsCache[p];
details = {
line: details.line,
column: details.column,
seenCR: details.seenCR
};
while (p < pos) {
ch = input.charAt(p);
if (ch === "\n") {
if (!details.seenCR) { details.line++; }
details.column = 1;
details.seenCR = false;
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
details.line++;
details.column = 1;
details.seenCR = true;
} else {
details.column++;
details.seenCR = false;
}
p++;
}
peg$posDetailsCache[pos] = details;
return details;
}
}
function peg$computeLocation(startPos, endPos) {
var startPosDetails = peg$computePosDetails(startPos),
endPosDetails = peg$computePosDetails(endPos);
return {
start: {
offset: startPos,
line: startPosDetails.line,
column: startPosDetails.column
},
end: {
offset: endPos,
line: endPosDetails.line,
column: endPosDetails.column
}
};
}
function peg$fail(expected) {
if (peg$currPos < peg$maxFailPos) { return; }
if (peg$currPos > peg$maxFailPos) {
peg$maxFailPos = peg$currPos;
peg$maxFailExpected = [];
}
peg$maxFailExpected.push(expected);
}
function peg$buildException(message, expected, found, location) {
function cleanupExpected(expected) {
var i = 1;
expected.sort(function(a, b) {
if (a.description < b.description) {
return -1;
} else if (a.description > b.description) {
return 1;
} else {
return 0;
}
});
while (i < expected.length) {
if (expected[i - 1] === expected[i]) {
expected.splice(i, 1);
} else {
i++;
}
}
}
function buildMessage(expected, found) {
function stringEscape(s) {
function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
return s
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\x08/g, '\\b')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\f/g, '\\f')
.replace(/\r/g, '\\r')
.replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
.replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
.replace(/[\u0100-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
.replace(/[\u1000-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
}
var expectedDescs = new Array(expected.length),
expectedDesc, foundDesc, i;
for (i = 0; i < expected.length; i++) {
expectedDescs[i] = expected[i].description;
}
expectedDesc = expected.length > 1
? expectedDescs.slice(0, -1).join(", ")
+ " or "
+ expectedDescs[expected.length - 1]
: expectedDescs[0];
foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
return "Expected " + expectedDesc + " but " + foundDesc + " found.";
}
if (expected !== null) {
cleanupExpected(expected);
}
return new peg$SyntaxError(
message !== null ? message : buildMessage(expected, found),
expected,
found,
location
);
}
function peg$parsestart() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parseentry();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parseentry();
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c0(s1);
}
s0 = s1;
return s0;
}
function peg$parseentry() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 8).toLowerCase() === peg$c1) {
s2 = input.substr(peg$currPos, 8);
peg$currPos += 8;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c2); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s4 !== peg$FAILED) {
s5 = peg$parsegroupstree();
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s6 = peg$c5;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s6 !== peg$FAILED) {
s1 = [s1, s2, s3, s4, s5, s6];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 8).toLowerCase() === peg$c1) {
s2 = input.substr(peg$currPos, 8);
peg$currPos += 8;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c2); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsestring();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsestring();
}
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s6 = peg$c5;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s6 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c7(s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 7).toLowerCase() === peg$c8) {
s2 = input.substr(peg$currPos, 7);
peg$currPos += 7;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c9); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parse_();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parse_();
}
if (s5 !== peg$FAILED) {
s6 = peg$parsekey_value();
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s8 = peg$c5;
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s8 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c10(s6);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 9).toLowerCase() === peg$c11) {
s2 = input.substr(peg$currPos, 9);
peg$currPos += 9;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c12); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parse_();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parse_();
}
if (s5 !== peg$FAILED) {
s6 = peg$parsesimplestring();
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s8 = peg$c5;
peg$currPos++;
} else {
s8 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s8 !== peg$FAILED) {
s1 = [s1, s2, s3, s4, s5, s6, s7, s8];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 64) {
s2 = peg$c13;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c14); }
}
if (s2 !== peg$FAILED) {
s3 = peg$parsereference();
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
if (peg$c15.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c15.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c17(s1);
}
s0 = s1;
}
}
}
}
}
return s0;
}
function peg$parsereference() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;
s0 = peg$currPos;
s1 = peg$parseidentifier();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s3 = peg$c3;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
if (s4 !== peg$FAILED) {
s5 = peg$parsecitekey();
if (s5 !== peg$FAILED) {
s6 = [];
s7 = peg$parse_();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parse_();
}
if (s6 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s7 = peg$c18;
peg$currPos++;
} else {
s7 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c19); }
}
if (s7 !== peg$FAILED) {
s8 = [];
s9 = peg$parsefield();
while (s9 !== peg$FAILED) {
s8.push(s9);
s9 = peg$parsefield();
}
if (s8 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s9 = peg$c5;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s9 !== peg$FAILED) {
s10 = [];
s11 = peg$parse_();
while (s11 !== peg$FAILED) {
s10.push(s11);
s11 = peg$parse_();
}
if (s10 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c20(s1, s5, s8);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
if (peg$c15.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c15.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c16); }
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c21(s1);
}
s0 = s1;
}
return s0;
}
function peg$parseidentifier() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c22.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c23); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c22.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c23); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c24(s1);
}
s0 = s1;
return s0;
}
function peg$parsecitekey() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c25.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c26); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c25.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c26); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c24(s1);
}
s0 = s1;
return s0;
}
function peg$parsefield() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
s2 = peg$parseattachmenttype();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 61) {
s4 = peg$c27;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c28); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parse_();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parse_();
}
if (s5 !== peg$FAILED) {
s6 = peg$parseattachments();
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
s8 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s9 = peg$c18;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c19); }
}
if (s9 !== peg$FAILED) {
s10 = [];
s11 = peg$parse_();
while (s11 !== peg$FAILED) {
s10.push(s11);
s11 = peg$parse_();
}
if (s10 !== peg$FAILED) {
s9 = [s9, s10];
s8 = s9;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 === peg$FAILED) {
s8 = null;
}
if (s8 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c29(s2, s6);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
s2 = peg$parsecreatortype();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 61) {
s4 = peg$c27;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c28); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parse_();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parse_();
}
if (s5 !== peg$FAILED) {
s6 = peg$parsebracedvalue();
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
s8 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s9 = peg$c18;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c19); }
}
if (s9 !== peg$FAILED) {
s10 = [];
s11 = peg$parse_();
while (s11 !== peg$FAILED) {
s10.push(s11);
s11 = peg$parse_();
}
if (s10 !== peg$FAILED) {
s9 = [s9, s10];
s8 = s9;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 === peg$FAILED) {
s8 = null;
}
if (s8 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c30(s2, s6);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$parsekey_value();
}
}
return s0;
}
function peg$parseattachmenttype() {
var s0;
if (input.substr(peg$currPos, 9).toLowerCase() === peg$c31) {
s0 = input.substr(peg$currPos, 9);
peg$currPos += 9;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c32); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 4).toLowerCase() === peg$c33) {
s0 = input.substr(peg$currPos, 4);
peg$currPos += 4;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c34); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 3).toLowerCase() === peg$c35) {
s0 = input.substr(peg$currPos, 3);
peg$currPos += 3;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c36); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 4).toLowerCase() === peg$c37) {
s0 = input.substr(peg$currPos, 4);
peg$currPos += 4;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c38); }
}
}
}
}
return s0;
}
function peg$parsecreatortype() {
var s0;
if (input.substr(peg$currPos, 6).toLowerCase() === peg$c39) {
s0 = input.substr(peg$currPos, 6);
peg$currPos += 6;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c40); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 6).toLowerCase() === peg$c41) {
s0 = input.substr(peg$currPos, 6);
peg$currPos += 6;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c42); }
}
if (s0 === peg$FAILED) {
if (input.substr(peg$currPos, 10).toLowerCase() === peg$c43) {
s0 = input.substr(peg$currPos, 10);
peg$currPos += 10;
} else {
s0 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c44); }
}
}
}
return s0;
}
function peg$parseattachments() {
var s0, s1, s2, s3;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parseattachmentlist();
if (s2 === peg$FAILED) {
s2 = null;
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s3 = peg$c5;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c45(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 34) {
s1 = peg$c46;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parseattachmentlist();
if (s2 === peg$FAILED) {
s2 = null;
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s3 = peg$c46;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c45(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parsekey_value() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 3).toLowerCase() === peg$c48) {
s2 = input.substr(peg$currPos, 3);
peg$currPos += 3;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c49); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 61) {
s4 = peg$c27;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c28); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parse_();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parse_();
}
if (s5 !== peg$FAILED) {
s6 = peg$parseurl();
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
s8 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s9 = peg$c18;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c19); }
}
if (s9 !== peg$FAILED) {
s10 = [];
s11 = peg$parse_();
while (s11 !== peg$FAILED) {
s10.push(s11);
s11 = peg$parse_();
}
if (s10 !== peg$FAILED) {
s9 = [s9, s10];
s8 = s9;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 === peg$FAILED) {
s8 = null;
}
if (s8 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c50(s6);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
s2 = peg$parsekey();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 61) {
s4 = peg$c27;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c28); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parse_();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parse_();
}
if (s5 !== peg$FAILED) {
s6 = peg$parsevalue();
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
s8 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 44) {
s9 = peg$c18;
peg$currPos++;
} else {
s9 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c19); }
}
if (s9 !== peg$FAILED) {
s10 = [];
s11 = peg$parse_();
while (s11 !== peg$FAILED) {
s10.push(s11);
s11 = peg$parse_();
}
if (s10 !== peg$FAILED) {
s9 = [s9, s10];
s8 = s9;
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
} else {
peg$currPos = s8;
s8 = peg$FAILED;
}
if (s8 === peg$FAILED) {
s8 = null;
}
if (s8 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c51(s2, s6);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parsekey() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c52.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c52.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c53); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c54(s1);
}
s0 = s1;
return s0;
}
function peg$parsevalue() {
var s0, s1, s2, s3, s4;
s0 = peg$currPos;
s1 = [];
if (peg$c55.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c56); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c55.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c56); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c57(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsebracedvalue();
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c58(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 35) {
s2 = peg$c59;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c60); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
s4 = peg$parsevalue();
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c45(s4);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
return s0;
}
function peg$parsesimplestring() {
var s0, s1, s2, s3, s4;
s0 = [];
if (peg$c55.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c56); }
}
if (s1 !== peg$FAILED) {
while (s1 !== peg$FAILED) {
s0.push(s1);
if (peg$c55.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c56); }
}
}
} else {
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 34) {
s1 = peg$c46;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c61.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c62); }
}
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c61.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c62); }
}
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s3 = peg$c46;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 35) {
s2 = peg$c59;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c60); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
s4 = peg$parsesimplestring();
if (s4 !== peg$FAILED) {
s1 = [s1, s2, s3, s4];
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
return s0;
}
function peg$parsebracedvalue() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s2 = peg$c63();
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s3 = peg$parsestrings();
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s4 = peg$c5;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s4 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s5 = peg$c64(s3);
if (s5) {
s5 = void 0;
} else {
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c45(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 34) {
s1 = peg$c46;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s2 = peg$c65();
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s3 = peg$parsestrings();
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s4 = peg$c46;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s4 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s5 = peg$c64(s3);
if (s5) {
s5 = void 0;
} else {
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c45(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseurl() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s2 = peg$c63();
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parseurlchar();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parseurlchar();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s4 = peg$c5;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s4 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s5 = peg$c64(s3);
if (s5) {
s5 = void 0;
} else {
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c58(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 34) {
s1 = peg$c46;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s2 = peg$c65();
if (s2) {
s2 = void 0;
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parseurlchar();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parseurlchar();
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s4 = peg$c46;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s4 !== peg$FAILED) {
peg$savedPos = peg$currPos;
s5 = peg$c64(s3);
if (s5) {
s5 = void 0;
} else {
s5 = peg$FAILED;
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c58(s3);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parsestrings() {
var s0, s1, s2, s3;
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c66();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsestring();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsestring();
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c67(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c68();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseraw();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseraw();
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c67(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseraw() {
var s0, s1, s2, s3;
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c69();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c70.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c71); }
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c70.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c71); }
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c72(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c73();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c74.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c75); }
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c74.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c75); }
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c72(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c78); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c79(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseraw();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseraw();
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s3 = peg$c5;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c80(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
}
return s0;
}
function peg$parsestring() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = peg$parseplaintext();
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 2) === peg$c82) {
s1 = peg$c82;
peg$currPos += 2;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c83); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c84();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (peg$c85.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c86); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c87(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsequotedchar();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
if (s2 === peg$FAILED) {
if (peg$c88.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c89); }
}
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
if (s2 === peg$FAILED) {
if (peg$c88.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c89); }
}
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c90(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
if (peg$c91.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c92); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c91.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c92); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c93();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 95) {
s1 = peg$c94;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c95); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parseparam();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c96(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 94) {
s1 = peg$c97;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c98); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parseparam();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c99(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 9) === peg$c100) {
s1 = peg$c100;
peg$currPos += 9;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c101); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebracedparam();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c102(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 5) === peg$c103) {
s1 = peg$c103;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c104); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebracedparam();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c105(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 5) === peg$c106) {
s1 = peg$c106;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c107); }
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseurlchar();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseurlchar();
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s3 = peg$c5;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 7) === peg$c109) {
s1 = peg$c109;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c110); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebracedparam();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c105(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 7) === peg$c111) {
s1 = peg$c111;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c112); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebracedparam();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c113(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.substr(peg$currPos, 7) === peg$c114) {
s1 = peg$c114;
peg$currPos += 7;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c115); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsebracedparam();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c116(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsestring();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsestring();
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s3 = peg$c5;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c117(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 36) {
s1 = peg$c118;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c119); }
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsestring();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsestring();
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 36) {
s3 = peg$c118;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c119); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 37) {
s1 = peg$c120;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c121); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c122();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
if (peg$c123.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c124); }
}
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 91) {
s4 = peg$c125;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c126); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsekey_value();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsekey_value();
}
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s6 = peg$c127;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c128); }
}
if (s6 !== peg$FAILED) {
s4 = [s4, s5, s6];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = null;
}
if (s3 !== peg$FAILED) {
s4 = peg$parseparam();
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c129(s2, s4);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
if (peg$c123.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c124); }
}
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 91) {
s4 = peg$c125;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c126); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsekey_value();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsekey_value();
}
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s6 = peg$c127;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c128); }
}
if (s6 !== peg$FAILED) {
s4 = [s4, s5, s6];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = null;
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
if (s5 !== peg$FAILED) {
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
} else {
s4 = peg$FAILED;
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c130(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parseplaintext();
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 91) {
s4 = peg$c125;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c126); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsekey_value();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsekey_value();
}
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s6 = peg$c127;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c128); }
}
if (s6 !== peg$FAILED) {
s4 = [s4, s5, s6];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = null;
}
if (s3 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s4 = peg$c3;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsestring();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsestring();
}
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s6 = peg$c5;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s6 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c131(s2, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parseplaintext();
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c132(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return s0;
}
function peg$parseparam() {
var s0, s1, s2;
s0 = peg$currPos;
if (peg$c133.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c134); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c78); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = peg$parsebracedparam();
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s1);
}
s0 = s1;
}
}
return s0;
}
function peg$parsebracedparam() {
var s0, s1, s2, s3;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 123) {
s1 = peg$c3;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c4); }
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsestring();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsestring();
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s3 = peg$c5;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c6); }
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsequotedchar() {
var s0, s1, s2;
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c73();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s2 = peg$c46;
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c47); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c135();
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (peg$c136.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c137); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s1);
}
s0 = s1;
}
return s0;
}
function peg$parseurlchar() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c70.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c71); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c70.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c71); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c78); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseplaintext() {
var s0, s1, s2, s3;
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c138();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c139.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c140); }
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c139.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c140); }
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
peg$savedPos = peg$currPos;
s1 = peg$c141();
if (s1) {
s1 = void 0;
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c142.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c143); }
}
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c142.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c143); }
}
}
} else {
s2 = peg$FAILED;
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parseattachmentlist() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parseattachment();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parseattachmentcdr();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parseattachmentcdr();
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c144(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseattachmentcdr() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 59) {
s1 = peg$c145;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c146); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parseattachment();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c147(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parseattachment() {
var s0, s1;
s0 = peg$currPos;
s1 = peg$parsefileparts();
if (s1 === peg$FAILED) {
s1 = null;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c148(s1);
}
s0 = s1;
return s0;
}
function peg$parsefileparts() {
var s0, s1, s2, s3;
s0 = peg$currPos;
s1 = peg$parsefilepart();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parsefilepartcdr();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parsefilepartcdr();
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c144(s1, s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsefilepartcdr() {
var s0, s1, s2;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 58) {
s1 = peg$c149;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c150); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsefilepart();
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c151(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsefilepart() {
var s0, s1;
s0 = peg$currPos;
s1 = peg$parsefilechars();
if (s1 === peg$FAILED) {
s1 = null;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c152(s1);
}
s0 = s1;
return s0;
}
function peg$parsefilechars() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsefilechar();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsefilechar();
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s1);
}
s0 = s1;
return s0;
}
function peg$parsefilechar() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
if (peg$c153.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c154); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c153.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c154); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c108(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
if (input.length > peg$currPos) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c78); }
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c81(s2);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parsegroupstree() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
s0 = peg$currPos;
s1 = [];
s2 = peg$parse_();
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parse_();
}
if (s1 !== peg$FAILED) {
if (input.substr(peg$currPos, 12).toLowerCase() === peg$c155) {
s2 = input.substr(peg$currPos, 12);
peg$currPos += 12;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c156); }
}
if (s2 !== peg$FAILED) {
s3 = [];
s4 = peg$parse_();
while (s4 !== peg$FAILED) {
s3.push(s4);
s4 = peg$parse_();
}
if (s3 !== peg$FAILED) {
if (input.substr(peg$currPos, 11).toLowerCase() === peg$c157) {
s4 = input.substr(peg$currPos, 11);
peg$currPos += 11;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c158); }
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parse_();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parse_();
}
if (s5 !== peg$FAILED) {
s6 = [];
s7 = peg$parsegroup();
while (s7 !== peg$FAILED) {
s6.push(s7);
s7 = peg$parsegroup();
}
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c159(s4, s6);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsegroup() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
s0 = peg$currPos;
s1 = [];
if (peg$c160.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c161); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c160.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c161); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 17).toLowerCase() === peg$c162) {
s3 = input.substr(peg$currPos, 17);
peg$currPos += 17;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c163); }
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c164();
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
if (peg$c160.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c161); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c160.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c161); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
if (s2 !== peg$FAILED) {
if (input.substr(peg$currPos, 14) === peg$c165) {
s3 = peg$c165;
peg$currPos += 14;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c166); }
}
if (s3 !== peg$FAILED) {
s4 = [];
s5 = peg$parse_();
while (s5 !== peg$FAILED) {
s4.push(s5);
s5 = peg$parse_();
}
if (s4 !== peg$FAILED) {
s5 = [];
s6 = peg$parsegrouparray();
while (s6 !== peg$FAILED) {
s5.push(s6);
s6 = peg$parsegrouparray();
}
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 59) {
s6 = peg$c145;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c146); }
}
if (s6 !== peg$FAILED) {
s7 = [];
s8 = peg$parse_();
while (s8 !== peg$FAILED) {
s7.push(s8);
s8 = peg$parse_();
}
if (s7 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c167(s1, s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
}
return s0;
}
function peg$parsegrouparray() {
var s0, s1, s2, s3, s4, s5, s6;
s0 = peg$currPos;
s1 = peg$parsegroupelement();
if (s1 !== peg$FAILED) {
s2 = [];
s3 = peg$parse_();
while (s3 !== peg$FAILED) {
s2.push(s3);
s3 = peg$parse_();
}
if (s2 !== peg$FAILED) {
s3 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s4 = peg$c76;
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s4 !== peg$FAILED) {
s5 = [];
if (peg$c168.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c169); }
}
while (s6 !== peg$FAILED) {
s5.push(s6);
if (peg$c168.test(input.charAt(peg$currPos))) {
s6 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c169); }
}
}
if (s5 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 59) {
s6 = peg$c145;
peg$currPos++;
} else {
s6 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c146); }
}
if (s6 !== peg$FAILED) {
s4 = [s4, s5, s6];
s3 = s4;
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
} else {
peg$currPos = s3;
s3 = peg$FAILED;
}
if (s3 === peg$FAILED) {
s3 = null;
}
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c170(s1);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
return s0;
}
function peg$parsegroupelement() {
var s0, s1, s2;
s0 = peg$currPos;
s1 = [];
s2 = peg$parsegroupchars();
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
s2 = peg$parsegroupchars();
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c171(s1);
}
s0 = s1;
return s0;
}
function peg$parsegroupchars() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 92) {
s1 = peg$c76;
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s1 !== peg$FAILED) {
s2 = [];
if (peg$c168.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c169); }
}
while (s3 !== peg$FAILED) {
s2.push(s3);
if (peg$c168.test(input.charAt(peg$currPos))) {
s3 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c169); }
}
}
if (s2 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 92) {
s3 = peg$c76;
peg$currPos++;
} else {
s3 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c77); }
}
if (s3 !== peg$FAILED) {
if (peg$c168.test(input.charAt(peg$currPos))) {
s4 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s4 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c169); }
}
if (s4 !== peg$FAILED) {
if (input.length > peg$currPos) {
s5 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s5 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c78); }
}
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c172(s5);
s0 = s1;
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
} else {
peg$currPos = s0;
s0 = peg$FAILED;
}
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
if (peg$c168.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c169); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c168.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c169); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c93();
}
s0 = s1;
if (s0 === peg$FAILED) {
s0 = peg$currPos;
s1 = [];
if (peg$c173.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c174); }
}
if (s2 !== peg$FAILED) {
while (s2 !== peg$FAILED) {
s1.push(s2);
if (peg$c173.test(input.charAt(peg$currPos))) {
s2 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s2 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c174); }
}
}
} else {
s1 = peg$FAILED;
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
s1 = peg$c171(s1);
}
s0 = s1;
}
}
return s0;
}
function peg$parse_() {
var s0, s1;
s0 = [];
if (peg$c175.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c176); }
}
if (s1 !== peg$FAILED) {
while (s1 !== peg$FAILED) {
s0.push(s1);
if (peg$c175.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos);
peg$currPos++;
} else {
s1 = peg$FAILED;
if (peg$silentFails === 0) { peg$fail(peg$c176); }
}
}
} else {
s0 = peg$FAILED;
}
return s0;
}
bibtex = new BetterBibTeXParserSupport(options);
peg$result = peg$startRuleFunction();
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result;
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail({ type: "end", description: "end of input" });
}
throw peg$buildException(
null,
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length
? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)
: peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
);
}
}
return {
SyntaxError: peg$SyntaxError,
parse: peg$parse
};
})();
Translator.initialize = (function(original) {
return function() {
if (this.initialized) {
return;
}
original.apply(this, arguments);
try {
return Reference.prototype.postscript = new Function(Translator.postscript);
} catch (err) {
return Translator.debug('postscript failed to compile:', err, Translator.postscript);
}
};
})(Translator.initialize);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment