4723 lines
247 KiB
JavaScript
4723 lines
247 KiB
JavaScript
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.mermaid=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
|
||
|
||
},{}],2:[function(_dereq_,module,exports){
|
||
(function (process){
|
||
// Copyright Joyent, Inc. and other Node contributors.
|
||
//
|
||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||
// copy of this software and associated documentation files (the
|
||
// "Software"), to deal in the Software without restriction, including
|
||
// without limitation the rights to use, copy, modify, merge, publish,
|
||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||
// persons to whom the Software is furnished to do so, subject to the
|
||
// following conditions:
|
||
//
|
||
// The above copyright notice and this permission notice shall be included
|
||
// in all copies or substantial portions of the Software.
|
||
//
|
||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
||
// resolves . and .. elements in a path array with directory names there
|
||
// must be no slashes, empty elements, or device names (c:\) in the array
|
||
// (so also no leading and trailing slashes - it does not distinguish
|
||
// relative and absolute paths)
|
||
function normalizeArray(parts, allowAboveRoot) {
|
||
// if the path tries to go above the root, `up` ends up > 0
|
||
var up = 0;
|
||
for (var i = parts.length - 1; i >= 0; i--) {
|
||
var last = parts[i];
|
||
if (last === '.') {
|
||
parts.splice(i, 1);
|
||
} else if (last === '..') {
|
||
parts.splice(i, 1);
|
||
up++;
|
||
} else if (up) {
|
||
parts.splice(i, 1);
|
||
up--;
|
||
}
|
||
}
|
||
|
||
// if the path is allowed to go above the root, restore leading ..s
|
||
if (allowAboveRoot) {
|
||
for (; up--; up) {
|
||
parts.unshift('..');
|
||
}
|
||
}
|
||
|
||
return parts;
|
||
}
|
||
|
||
// Split a filename into [root, dir, basename, ext], unix version
|
||
// 'root' is just a slash, or nothing.
|
||
var splitPathRe =
|
||
/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
|
||
var splitPath = function(filename) {
|
||
return splitPathRe.exec(filename).slice(1);
|
||
};
|
||
|
||
// path.resolve([from ...], to)
|
||
// posix version
|
||
exports.resolve = function() {
|
||
var resolvedPath = '',
|
||
resolvedAbsolute = false;
|
||
|
||
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
||
var path = (i >= 0) ? arguments[i] : process.cwd();
|
||
|
||
// Skip empty and invalid entries
|
||
if (typeof path !== 'string') {
|
||
throw new TypeError('Arguments to path.resolve must be strings');
|
||
} else if (!path) {
|
||
continue;
|
||
}
|
||
|
||
resolvedPath = path + '/' + resolvedPath;
|
||
resolvedAbsolute = path.charAt(0) === '/';
|
||
}
|
||
|
||
// At this point the path should be resolved to a full absolute path, but
|
||
// handle relative paths to be safe (might happen when process.cwd() fails)
|
||
|
||
// Normalize the path
|
||
resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
|
||
return !!p;
|
||
}), !resolvedAbsolute).join('/');
|
||
|
||
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
|
||
};
|
||
|
||
// path.normalize(path)
|
||
// posix version
|
||
exports.normalize = function(path) {
|
||
var isAbsolute = exports.isAbsolute(path),
|
||
trailingSlash = substr(path, -1) === '/';
|
||
|
||
// Normalize the path
|
||
path = normalizeArray(filter(path.split('/'), function(p) {
|
||
return !!p;
|
||
}), !isAbsolute).join('/');
|
||
|
||
if (!path && !isAbsolute) {
|
||
path = '.';
|
||
}
|
||
if (path && trailingSlash) {
|
||
path += '/';
|
||
}
|
||
|
||
return (isAbsolute ? '/' : '') + path;
|
||
};
|
||
|
||
// posix version
|
||
exports.isAbsolute = function(path) {
|
||
return path.charAt(0) === '/';
|
||
};
|
||
|
||
// posix version
|
||
exports.join = function() {
|
||
var paths = Array.prototype.slice.call(arguments, 0);
|
||
return exports.normalize(filter(paths, function(p, index) {
|
||
if (typeof p !== 'string') {
|
||
throw new TypeError('Arguments to path.join must be strings');
|
||
}
|
||
return p;
|
||
}).join('/'));
|
||
};
|
||
|
||
|
||
// path.relative(from, to)
|
||
// posix version
|
||
exports.relative = function(from, to) {
|
||
from = exports.resolve(from).substr(1);
|
||
to = exports.resolve(to).substr(1);
|
||
|
||
function trim(arr) {
|
||
var start = 0;
|
||
for (; start < arr.length; start++) {
|
||
if (arr[start] !== '') break;
|
||
}
|
||
|
||
var end = arr.length - 1;
|
||
for (; end >= 0; end--) {
|
||
if (arr[end] !== '') break;
|
||
}
|
||
|
||
if (start > end) return [];
|
||
return arr.slice(start, end - start + 1);
|
||
}
|
||
|
||
var fromParts = trim(from.split('/'));
|
||
var toParts = trim(to.split('/'));
|
||
|
||
var length = Math.min(fromParts.length, toParts.length);
|
||
var samePartsLength = length;
|
||
for (var i = 0; i < length; i++) {
|
||
if (fromParts[i] !== toParts[i]) {
|
||
samePartsLength = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
var outputParts = [];
|
||
for (var i = samePartsLength; i < fromParts.length; i++) {
|
||
outputParts.push('..');
|
||
}
|
||
|
||
outputParts = outputParts.concat(toParts.slice(samePartsLength));
|
||
|
||
return outputParts.join('/');
|
||
};
|
||
|
||
exports.sep = '/';
|
||
exports.delimiter = ':';
|
||
|
||
exports.dirname = function(path) {
|
||
var result = splitPath(path),
|
||
root = result[0],
|
||
dir = result[1];
|
||
|
||
if (!root && !dir) {
|
||
// No dirname whatsoever
|
||
return '.';
|
||
}
|
||
|
||
if (dir) {
|
||
// It has a dirname, strip trailing slash
|
||
dir = dir.substr(0, dir.length - 1);
|
||
}
|
||
|
||
return root + dir;
|
||
};
|
||
|
||
|
||
exports.basename = function(path, ext) {
|
||
var f = splitPath(path)[2];
|
||
// TODO: make this comparison case-insensitive on windows?
|
||
if (ext && f.substr(-1 * ext.length) === ext) {
|
||
f = f.substr(0, f.length - ext.length);
|
||
}
|
||
return f;
|
||
};
|
||
|
||
|
||
exports.extname = function(path) {
|
||
return splitPath(path)[3];
|
||
};
|
||
|
||
function filter (xs, f) {
|
||
if (xs.filter) return xs.filter(f);
|
||
var res = [];
|
||
for (var i = 0; i < xs.length; i++) {
|
||
if (f(xs[i], i, xs)) res.push(xs[i]);
|
||
}
|
||
return res;
|
||
}
|
||
|
||
// String.prototype.substr - negative index don't work in IE8
|
||
var substr = 'ab'.substr(-1) === 'b'
|
||
? function (str, start, len) { return str.substr(start, len) }
|
||
: function (str, start, len) {
|
||
if (start < 0) start = str.length + start;
|
||
return str.substr(start, len);
|
||
}
|
||
;
|
||
|
||
}).call(this,_dereq_("1YiZ5S"))
|
||
},{"1YiZ5S":3}],3:[function(_dereq_,module,exports){
|
||
// shim for using process in browser
|
||
|
||
var process = module.exports = {};
|
||
|
||
process.nextTick = (function () {
|
||
var canSetImmediate = typeof window !== 'undefined'
|
||
&& window.setImmediate;
|
||
var canPost = typeof window !== 'undefined'
|
||
&& window.postMessage && window.addEventListener
|
||
;
|
||
|
||
if (canSetImmediate) {
|
||
return function (f) { return window.setImmediate(f) };
|
||
}
|
||
|
||
if (canPost) {
|
||
var queue = [];
|
||
window.addEventListener('message', function (ev) {
|
||
var source = ev.source;
|
||
if ((source === window || source === null) && ev.data === 'process-tick') {
|
||
ev.stopPropagation();
|
||
if (queue.length > 0) {
|
||
var fn = queue.shift();
|
||
fn();
|
||
}
|
||
}
|
||
}, true);
|
||
|
||
return function nextTick(fn) {
|
||
queue.push(fn);
|
||
window.postMessage('process-tick', '*');
|
||
};
|
||
}
|
||
|
||
return function nextTick(fn) {
|
||
setTimeout(fn, 0);
|
||
};
|
||
})();
|
||
|
||
process.title = 'browser';
|
||
process.browser = true;
|
||
process.env = {};
|
||
process.argv = [];
|
||
|
||
function noop() {}
|
||
|
||
process.on = noop;
|
||
process.addListener = noop;
|
||
process.once = noop;
|
||
process.off = noop;
|
||
process.removeListener = noop;
|
||
process.removeAllListeners = noop;
|
||
process.emit = noop;
|
||
|
||
process.binding = function (name) {
|
||
throw new Error('process.binding is not supported');
|
||
}
|
||
|
||
// TODO(shtylman)
|
||
process.cwd = function () { return '/' };
|
||
process.chdir = function (dir) {
|
||
throw new Error('process.chdir is not supported');
|
||
};
|
||
|
||
},{}],4:[function(_dereq_,module,exports){
|
||
(function (global){
|
||
/*! http://mths.be/he v0.5.0 by @mathias | MIT license */
|
||
;(function(root) {
|
||
|
||
// Detect free variables `exports`.
|
||
var freeExports = typeof exports == 'object' && exports;
|
||
|
||
// Detect free variable `module`.
|
||
var freeModule = typeof module == 'object' && module &&
|
||
module.exports == freeExports && module;
|
||
|
||
// Detect free variable `global`, from Node.js or Browserified code,
|
||
// and use it as `root`.
|
||
var freeGlobal = typeof global == 'object' && global;
|
||
if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
|
||
root = freeGlobal;
|
||
}
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
// All astral symbols.
|
||
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
||
// All ASCII symbols (not just printable ASCII) except those listed in the
|
||
// first column of the overrides table.
|
||
// http://whatwg.org/html/tokenization.html#table-charref-overrides
|
||
var regexAsciiWhitelist = /[\x01-\x7F]/g;
|
||
// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
|
||
// code points listed in the first column of the overrides table on
|
||
// http://whatwg.org/html/tokenization.html#table-charref-overrides.
|
||
var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
|
||
|
||
var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
|
||
var encodeMap = {'\xC1':'Aacute','\xE1':'aacute','\u0102':'Abreve','\u0103':'abreve','\u223E':'ac','\u223F':'acd','\u223E\u0333':'acE','\xC2':'Acirc','\xE2':'acirc','\xB4':'acute','\u0410':'Acy','\u0430':'acy','\xC6':'AElig','\xE6':'aelig','\u2061':'af','\uD835\uDD04':'Afr','\uD835\uDD1E':'afr','\xC0':'Agrave','\xE0':'agrave','\u2135':'aleph','\u0391':'Alpha','\u03B1':'alpha','\u0100':'Amacr','\u0101':'amacr','\u2A3F':'amalg','&':'amp','\u2A55':'andand','\u2A53':'And','\u2227':'and','\u2A5C':'andd','\u2A58':'andslope','\u2A5A':'andv','\u2220':'ang','\u29A4':'ange','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u2221':'angmsd','\u221F':'angrt','\u22BE':'angrtvb','\u299D':'angrtvbd','\u2222':'angsph','\xC5':'angst','\u237C':'angzarr','\u0104':'Aogon','\u0105':'aogon','\uD835\uDD38':'Aopf','\uD835\uDD52':'aopf','\u2A6F':'apacir','\u2248':'ap','\u2A70':'apE','\u224A':'ape','\u224B':'apid','\'':'apos','\xE5':'aring','\uD835\uDC9C':'Ascr','\uD835\uDCB6':'ascr','\u2254':'colone','*':'ast','\u224D':'CupCap','\xC3':'Atilde','\xE3':'atilde','\xC4':'Auml','\xE4':'auml','\u2233':'awconint','\u2A11':'awint','\u224C':'bcong','\u03F6':'bepsi','\u2035':'bprime','\u223D':'bsim','\u22CD':'bsime','\u2216':'setmn','\u2AE7':'Barv','\u22BD':'barvee','\u2305':'barwed','\u2306':'Barwed','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u0411':'Bcy','\u0431':'bcy','\u201E':'bdquo','\u2235':'becaus','\u29B0':'bemptyv','\u212C':'Bscr','\u0392':'Beta','\u03B2':'beta','\u2136':'beth','\u226C':'twixt','\uD835\uDD05':'Bfr','\uD835\uDD1F':'bfr','\u22C2':'xcap','\u25EF':'xcirc','\u22C3':'xcup','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A06':'xsqcup','\u2605':'starf','\u25BD':'xdtri','\u25B3':'xutri','\u2A04':'xuplus','\u22C1':'Vee','\u22C0':'Wedge','\u290D':'rbarr','\u29EB':'lozf','\u25AA':'squf','\u25B4':'utrif','\u25BE':'dtrif','\u25C2':'ltrif','\u25B8':'rtrif','\u2423':'blank','\u2592':'blk12','\u2591':'blk14','\u2593':'blk34','\u2588':'block','=\u20E5':'bne','\u2261\u20E5':'bnequiv','\u2AED':'bNot','\u2310':'bnot','\uD835\uDD39':'Bopf','\uD835\uDD53':'bopf','\u22A5':'bot','\u22C8':'bowtie','\u29C9':'boxbox','\u2510':'boxdl','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u250C':'boxdr','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2500':'boxh','\u2550':'boxH','\u252C':'boxhd','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2534':'boxhu','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u229F':'minusb','\u229E':'plusb','\u22A0':'timesb','\u2518':'boxul','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u2514':'boxur','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u2502':'boxv','\u2551':'boxV','\u253C':'boxvh','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2524':'boxvl','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u251C':'boxvr','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u02D8':'breve','\xA6':'brvbar','\uD835\uDCB7':'bscr','\u204F':'bsemi','\u29C5':'bsolb','\\':'bsol','\u27C8':'bsolhsub','\u2022':'bull','\u224E':'bump','\u2AAE':'bumpE','\u224F':'bumpe','\u0106':'Cacute','\u0107':'cacute','\u2A44':'capand','\u2A49':'capbrcup','\u2A4B':'capcap','\u2229':'cap','\u22D2':'Cap','\u2A47':'capcup','\u2A40':'capdot','\u2145':'DD','\u2229\uFE00':'caps','\u2041':'caret','\u02C7':'caron','\u212D':'Cfr','\u2A4D':'ccaps','\u010C':'Ccaron','\u010D':'ccaron','\xC7':'Ccedil','\xE7':'ccedil','\u0108':'Ccirc','\u0109':'ccirc','\u2230':'Cconint','\u2A4C':'ccups','\u2A50':'ccupssm','\u010A':'Cdot','\u010B':'cdot','\xB8':'cedil','\u29B2':'cemptyv','\xA2':'cent','\xB7':'middot','\uD835\uDD20':'cfr','\u0427':'CHcy','\u0447':'chcy','\u2713':'check','\u03A7':'Chi','\u03C7':'chi','\u02C6':'circ','\u2257':'cire','\u21BA':'olarr','\u21BB':'orarr','\u229B':'oast','\u229A':'ocir','\u229D':'odash','\u2299':'odot','\xAE':'reg','\u24C8':'oS','\u2296':'ominus','\u2295':'oplus','\u2297':'otimes','\u25CB':'cir','\u29C3':'cirE','\u2A10':'cirfnint','\u2AEF':'cirmid','\u29C2':'cirscir','\u2232':'cwconint','\u201D':'rdquo','\u2019':'rsquo','\u2663':'clubs',':':'colon','\u2237':'Colon','\u2A74':'Colone',',':'comma','@':'commat','\u2201':'comp','\u2218':'compfn','\u2102':'Copf','\u2245':'cong','\u2A6D':'congdot','\u2261':'equiv','\u222E':'oint','\u222F':'Conint','\uD835\uDD54':'copf','\u2210':'coprod','\xA9':'copy','\u2117':'copysr','\u21B5':'crarr','\u2717':'cross','\u2A2F':'Cross','\uD835\uDC9E':'Cscr','\uD835\uDCB8':'cscr','\u2ACF':'csub','\u2AD1':'csube','\u2AD0':'csup','\u2AD2':'csupe','\u22EF':'ctdot','\u2938':'cudarrl','\u2935':'cudarrr','\u22DE':'cuepr','\u22DF':'cuesc','\u21B6':'cularr','\u293D':'cularrp','\u2A48':'cupbrcap','\u2A46':'cupcap','\u222A':'cup','\u22D3':'Cup','\u2A4A':'cupcup','\u228D':'cupdot','\u2A45':'cupor','\u222A\uFE00':'cups','\u21B7':'curarr','\u293C':'curarrm','\u22CE':'cuvee','\u22CF':'cuwed','\xA4':'curren','\u2231':'cwint','\u232D':'cylcty','\u2020':'dagger','\u2021':'Dagger','\u2138':'daleth','\u2193':'darr','\u21A1':'Darr','\u21D3':'dArr','\u2010':'dash','\u2AE4':'Dashv','\u22A3':'dashv','\u290F':'rBarr','\u02DD':'dblac','\u010E':'Dcaron','\u010F':'dcaron','\u0414':'Dcy','\u0434':'dcy','\u21CA':'ddarr','\u2146':'dd','\u2911':'DDotrahd','\u2A77':'eDDot','\xB0':'deg','\u2207':'Del','\u0394':'Delta','\u03B4':'delta','\u29B1':'demptyv','\u297F':'dfisht','\uD835\uDD07':'Dfr','\uD835\uDD21':'dfr','\u2965':'dHar','\u21C3':'dharl','\u21C2':'dharr','\u02D9':'dot','`':'grave','\u02DC':'tilde','\u22C4':'diam','\u2666':'diams','\xA8':'die','\u03DD':'gammad','\u22F2':'disin','\xF7':'div','\u22C7':'divonx','\u0402':'DJcy','\u0452':'djcy','\u231E':'dlcorn','\u230D':'dlcrop','$':'dollar','\uD835\uDD3B':'Dopf','\uD835\uDD55':'dopf','\u20DC':'DotDot','\u2250':'doteq','\u2251':'eDot','\u2238':'minusd','\u2214':'plusdo','\u22A1':'sdotb','\u21D0':'lArr','\u21D4':'iff','\u27F8':'xlArr','\u27FA':'xhArr','\u27F9':'xrArr','\u21D2':'rArr','\u22A8':'vDash','\u21D1':'uArr','\u21D5':'vArr','\u2225':'par','\u2913':'DownArrowBar','\u21F5':'duarr','\u0311':'DownBreve','\u2950':'DownLeftRightVector','\u295E':'DownLeftTeeVector','\u2956':'DownLeftVectorBar','\u21BD':'lhard','\u295F':'DownRightTeeVector','\u2957':'DownRightVectorBar','\u21C1':'rhard','\u21A7':'mapstodown','\u22A4':'top','\u2910':'RBarr','\u231F':'drcorn','\u230C':'drcrop','\uD835\uDC9F':'Dscr','\uD835\uDCB9':'dscr','\u0405':'DScy','\u0455':'dscy','\u29F6':'dsol','\u0110':'Dstrok','\u0111':'dstrok','\u22F1':'dtdot','\u25BF':'dtri','\u296F':'duhar','\u29A6':'dwangle','\u040F':'DZcy','\u045F':'dzcy','\u27FF':'dzigrarr','\xC9':'Eacute','\xE9':'eacute','\u2A6E':'easter','\u011A':'Ecaron','\u011B':'ecaron','\xCA':'Ecirc','\xEA':'ecirc','\u2256':'ecir','\u2255':'ecolon','\u042D':'Ecy','\u044D':'ecy','\u0116':'Edot','\u0117':'edot','\u2147':'ee','\u2252':'efDot','\uD835\uDD08':'Efr','\uD835\uDD22':'efr','\u2A9A':'eg','\xC8':'Egrave','\xE8':'egrave','\u2A96':'egs','\u2A98':'egsdot','\u2A99':'el','\u2208':'in','\u23E7':'elinters','\u2113':'ell','\u2A95':'els','\u2A97':'elsdot','\u0112':'Emacr','\u0113':'emacr','\u2205':'empty','\u25FB':'EmptySmallSquare','\u25AB':'EmptyVerySmallSquare','\u2004':'emsp13','\u2005':'emsp14','\u2003':'emsp','\u014A':'ENG','\u014B':'eng','\u2002':'ensp','\u0118':'Eogon','\u0119':'eogon','\uD835\uDD3C':'Eopf','\uD835\uDD56':'eopf','\u22D5':'epar','\u29E3':'eparsl','\u2A71':'eplus','\u03B5':'epsi','\u0395':'Epsilon','\u03F5':'epsiv','\u2242':'esim','\u2A75':'Equal','=':'equals','\u225F':'equest','\u21CC':'rlhar','\u2A78':'equivDD','\u29E5':'eqvparsl','\u2971':'erarr','\u2253':'erDot','\u212F':'escr','\u2130':'Escr','\u2A73':'Esim','\u0397':'Eta','\u03B7':'eta','\xD0':'ETH','\xF0':'eth','\xCB':'Euml','\xEB':'euml','\u20AC':'euro','!':'excl','\u2203':'exist','\u0424':'Fcy','\u0444':'fcy','\u2640':'female','\uFB03':'ffilig','\uFB00':'fflig','\uFB04':'ffllig','\uD835\uDD09':'Ffr','\uD835\uDD23':'ffr','\uFB01':'filig','\u25FC':'FilledSmallSquare','fj':'fjlig','\u266D':'flat','\uFB02':'fllig','\u25B1':'fltns','\u0192':'fnof','\uD835\uDD3D':'Fopf','\uD835\uDD57':'fopf','\u2200':'forall','\u22D4':'fork','\u2AD9':'forkv','\u2131':'Fscr','\u2A0D':'fpartint','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\u2154':'frac23','\u2156':'frac25','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\u2044':'frasl','\u2322':'frown','\uD835\uDCBB':'fscr','\u01F5':'gacute','\u0393':'Gamma','\u03B3':'gamma','\u03DC':'Gammad','\u2A86':'gap','\u011E':'Gbreve','\u011F':'gbreve','\u0122':'Gcedil','\u011C':'Gcirc','\u011D':'gcirc','\u0413':'Gcy','\u0433':'gcy','\u0120':'Gdot','\u0121':'gdot','\u2265':'ge','\u2267':'gE','\u2A8C':'gEl','\u22DB':'gel','\u2A7E':'ges','\u2AA9':'gescc','\u2A80':'gesdot','\u2A82':'gesdoto','\u2A84':'gesdotol','\u22DB\uFE00':'gesl','\u2A94':'gesles','\uD835\uDD0A':'Gfr','\uD835\uDD24':'gfr','\u226B':'gg','\u22D9':'Gg','\u2137':'gimel','\u0403':'GJcy','\u0453':'gjcy','\u2AA5':'gla','\u2277':'gl','\u2A92':'glE','\u2AA4':'glj','\u2A8A':'gnap','\u2A88':'gne','\u2269':'gnE','\u22E7':'gnsim','\uD835\uDD3E':'Gopf','\uD835\uDD58':'gopf','\u2AA2':'GreaterGreater','\u2273':'gsim','\uD835\uDCA2':'Gscr','\u210A':'gscr','\u2A8E':'gsime','\u2A90':'gsiml','\u2AA7':'gtcc','\u2A7A':'gtcir','>':'gt','\u22D7':'gtdot','\u2995':'gtlPar','\u2A7C':'gtquest','\u2978':'gtrarr','\u2269\uFE00':'gvnE','\u200A':'hairsp','\u210B':'Hscr','\u042A':'HARDcy','\u044A':'hardcy','\u2948':'harrcir','\u2194':'harr','\u21AD':'harrw','^':'Hat','\u210F':'hbar','\u0124':'Hcirc','\u0125':'hcirc','\u2665':'hearts','\u2026':'mldr','\u22B9':'hercon','\uD835\uDD25':'hfr','\u210C':'Hfr','\u2925':'searhk','\u2926':'swarhk','\u21FF':'hoarr','\u223B':'homtht','\u21A9':'larrhk','\u21AA':'rarrhk','\uD835\uDD59':'hopf','\u210D':'Hopf','\u2015':'horbar','\uD835\uDCBD':'hscr','\u0126':'Hstrok','\u0127':'hstrok','\u2043':'hybull','\xCD':'Iacute','\xED':'iacute','\u2063':'ic','\xCE':'Icirc','\xEE':'icirc','\u0418':'Icy','\u0438':'icy','\u0130':'Idot','\u0415':'IEcy','\u0435':'iecy','\xA1':'iexcl','\uD835\uDD26':'ifr','\u2111':'Im','\xCC':'Igrave','\xEC':'igrave','\u2148':'ii','\u2A0C':'qint','\u222D':'tint','\u29DC':'iinfin','\u2129':'iiota','\u0132':'IJlig','\u0133':'ijlig','\u012A':'Imacr','\u012B':'imacr','\u2110':'Iscr','\u0131':'imath','\u22B7':'imof','\u01B5':'imped','\u2105':'incare','\u221E':'infin','\u29DD':'infintie','\u22BA':'intcal','\u222B':'int','\u222C':'Int','\u2124':'Zopf','\u2A17':'intlarhk','\u2A3C':'iprod','\u2062':'it','\u0401':'IOcy','\u0451':'iocy','\u012E':'Iogon','\u012F':'iogon','\uD835\uDD40':'Iopf','\uD835\uDD5A':'iopf','\u0399':'Iota','\u03B9':'iota','\xBF':'iquest','\uD835\uDCBE':'iscr','\u22F5':'isindot','\u22F9':'isinE','\u22F4':'isins','\u22F3':'isinsv','\u0128':'Itilde','\u0129':'itilde','\u0406':'Iukcy','\u0456':'iukcy','\xCF':'Iuml','\xEF':'iuml','\u0134':'Jcirc','\u0135':'jcirc','\u0419':'Jcy','\u0439':'jcy','\uD835\uDD0D':'Jfr','\uD835\uDD27':'jfr','\u0237':'jmath','\uD835\uDD41':'Jopf','\uD835\uDD5B':'jopf','\uD835\uDCA5':'Jscr','\uD835\uDCBF':'jscr','\u0408':'Jsercy','\u0458':'jsercy','\u0404':'Jukcy','\u0454':'jukcy','\u039A':'Kappa','\u03BA':'kappa','\u03F0':'kappav','\u0136':'Kcedil','\u0137':'kcedil','\u041A':'Kcy','\u043A':'kcy','\uD835\uDD0E':'Kfr','\uD835\uDD28':'kfr','\u0138':'kgreen','\u0425':'KHcy','\u0445':'khcy','\u040C':'KJcy','\u045C':'kjcy','\uD835\uDD42':'Kopf','\uD835\uDD5C':'kopf','\uD835\uDCA6':'Kscr','\uD835\uDCC0':'kscr','\u21DA':'lAarr','\u0139':'Lacute','\u013A':'lacute','\u29B4':'laemptyv','\u2112':'Lscr','\u039B':'Lambda','\u03BB':'lambda','\u27E8':'lang','\u27EA':'Lang','\u2991':'langd','\u2A85':'lap','\xAB':'laquo','\u21E4':'larrb','\u291F':'larrbfs','\u2190':'larr','\u219E':'Larr','\u291D':'larrfs','\u21AB':'larrlp','\u2939':'larrpl','\u2973':'larrsim','\u21A2':'larrtl','\u2919':'latail','\u291B':'lAtail','\u2AAB':'lat','\u2AAD':'late','\u2AAD\uFE00':'lates','\u290C':'lbarr','\u290E':'lBarr','\u2772':'lbbrk','{':'lcub','[':'lsqb','\u298B':'lbrke','\u298F':'lbrksld','\u298D':'lbrkslu','\u013D':'Lcaron','\u013E':'lcaron','\u013B':'Lcedil','\u013C':'lcedil','\u2308':'lceil','\u041B':'Lcy','\u043B':'lcy','\u2936':'ldca','\u201C':'ldquo','\u2967':'ldrdhar','\u294B':'ldrushar','\u21B2':'ldsh','\u2264':'le','\u2266':'lE','\u21C6':'lrarr','\u27E6':'lobrk','\u2961':'LeftDownTeeVector','\u2959':'LeftDownVectorBar','\u230A':'lfloor','\u21BC':'lharu','\u21C7':'llarr','\u21CB':'lrhar','\u294E':'LeftRightVector','\u21A4':'mapstoleft','\u295A':'LeftTeeVector','\u22CB':'lthree','\u29CF':'LeftTriangleBar','\u22B2':'vltri','\u22B4':'ltrie','\u2951':'LeftUpDownVector','\u2960':'LeftUpTeeVector','\u2958':'LeftUpVectorBar','\u21BF':'uharl','\u2952':'LeftVectorBar','\u2A8B':'lEg','\u22DA':'leg','\u2A7D':'les','\u2AA8':'lescc','\u2A7F':'lesdot','\u2A81':'lesdoto','\u2A83':'lesdotor','\u22DA\uFE00':'lesg','\u2A93':'lesges','\u22D6':'ltdot','\u2276':'lg','\u2AA1':'LessLess','\u2272':'lsim','\u297C':'lfisht','\uD835\uDD0F':'Lfr','\uD835\uDD29':'lfr','\u2A91':'lgE','\u2962':'lHar','\u296A':'lharul','\u2584':'lhblk','\u0409':'LJcy','\u0459':'ljcy','\u226A':'ll','\u22D8':'Ll','\u296B':'llhard','\u25FA':'lltri','\u013F':'Lmidot','\u0140':'lmidot','\u23B0':'lmoust','\u2A89':'lnap','\u2A87':'lne','\u2268':'lnE','\u22E6':'lnsim','\u27EC':'loang','\u21FD':'loarr','\u27F5':'xlarr','\u27F7':'xharr','\u27FC':'xmap','\u27F6':'xrarr','\u21AC':'rarrlp','\u2985':'lopar','\uD835\uDD43':'Lopf','\uD835\uDD5D':'lopf','\u2A2D':'loplus','\u2A34':'lotimes','\u2217':'lowast','_':'lowbar','\u2199':'swarr','\u2198':'searr','\u25CA':'loz','(':'lpar','\u2993':'lparlt','\u296D':'lrhard','\u200E':'lrm','\u22BF':'lrtri','\u2039':'lsaquo','\uD835\uDCC1':'lscr','\u21B0':'lsh','\u2A8D':'lsime','\u2A8F':'lsimg','\u2018':'lsquo','\u201A':'sbquo','\u0141':'Lstrok','\u0142':'lstrok','\u2AA6':'ltcc','\u2A79':'ltcir','<':'lt','\u22C9':'ltimes','\u2976':'ltlarr','\u2A7B':'ltquest','\u25C3':'ltri','\u2996':'ltrPar','\u294A':'lurdshar','\u2966':'luruhar','\u2268\uFE00':'lvnE','\xAF':'macr','\u2642':'male','\u2720':'malt','\u2905':'Map','\u21A6':'map','\u21A5':'mapstoup','\u25AE':'marker','\u2A29':'mcomma','\u041C':'Mcy','\u043C':'mcy','\u2014':'mdash','\u223A':'mDDot','\u205F':'MediumSpace','\u2133':'Mscr','\uD835\uDD10':'Mfr','\uD835\uDD2A':'mfr','\u2127':'mho','\xB5':'micro','\u2AF0':'midcir','\u2223':'mid','\u2212':'minus','\u2A2A':'minusdu','\u2213':'mp','\u2ADB':'mlcp','\u22A7':'models','\uD835\uDD44':'Mopf','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\u039C':'Mu','\u03BC':'mu','\u22B8':'mumap','\u0143':'Nacute','\u0144':'nacute','\u2220\u20D2':'nang','\u2249':'nap','\u2A70\u0338':'napE','\u224B\u0338':'napid','\u0149':'napos','\u266E':'natur','\u2115':'Nopf','\xA0':'nbsp','\u224E\u0338':'nbump','\u224F\u0338':'nbumpe','\u2A43':'ncap','\u0147':'Ncaron','\u0148':'ncaron','\u0145':'Ncedil','\u0146':'ncedil','\u2247':'ncong','\u2A6D\u0338':'ncongdot','\u2A42':'ncup','\u041D':'Ncy','\u043D':'ncy','\u2013':'ndash','\u2924':'nearhk','\u2197':'nearr','\u21D7':'neArr','\u2260':'ne','\u2250\u0338':'nedot','\u200B':'ZeroWidthSpace','\u2262':'nequiv','\u2928':'toea','\u2242\u0338':'nesim','\n':'NewLine','\u2204':'nexist','\uD835\uDD11':'Nfr','\uD835\uDD2B':'nfr','\u2267\u0338':'ngE','\u2271':'nge','\u2A7E\u0338':'nges','\u22D9\u0338':'nGg','\u2275':'ngsim','\u226B\u20D2':'nGt','\u226F':'ngt','\u226B\u0338':'nGtv','\u21AE':'nharr','\u21CE':'nhArr','\u2AF2':'nhpar','\u220B':'ni','\u22FC':'nis','\u22FA':'nisd','\u040A':'NJcy','\u045A':'njcy','\u219A':'nlarr','\u21CD':'nlArr','\u2025':'nldr','\u2266\u0338':'nlE','\u2270':'nle','\u2A7D\u0338':'nles','\u226E':'nlt','\u22D8\u0338':'nLl','\u2274':'nlsim','\u226A\u20D2':'nLt','\u22EA':'nltri','\u22EC':'nltrie','\u226A\u0338':'nLtv','\u2224':'nmid','\u2060':'NoBreak','\uD835\uDD5F':'nopf','\u2AEC':'Not','\xAC':'not','\u226D':'NotCupCap','\u2226':'npar','\u2209':'notin','\u2279':'ntgl','\u22F5\u0338':'notindot','\u22F9\u0338':'notinE','\u22F7':'notinvb','\u22F6':'notinvc','\u29CF\u0338':'NotLeftTriangleBar','\u2278':'ntlg','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA1\u0338':'NotNestedLessLess','\u220C':'notni','\u22FE':'notnivb','\u22FD':'notnivc','\u2280':'npr','\u2AAF\u0338':'npre','\u22E0':'nprcue','\u29D0\u0338':'NotRightTriangleBar','\u22EB':'nrtri','\u22ED':'nrtrie','\u228F\u0338':'NotSquareSubset','\u22E2':'nsqsube','\u2290\u0338':'NotSquareSuperset','\u22E3':'nsqsupe','\u2282\u20D2':'vnsub','\u2288':'nsube','\u2281':'nsc','\u2AB0\u0338':'nsce','\u22E1':'nsccue','\u227F\u0338':'NotSucceedsTilde','\u2283\u20D2':'vnsup','\u2289':'nsupe','\u2241':'nsim','\u2244':'nsime','\u2AFD\u20E5':'nparsl','\u2202\u0338':'npart','\u2A14':'npolint','\u2933\u0338':'nrarrc','\u219B':'nrarr','\u21CF':'nrArr','\u219D\u0338':'nrarrw','\uD835\uDCA9':'Nscr','\uD835\uDCC3':'nscr','\u2284':'nsub','\u2AC5\u0338':'nsubE','\u2285':'nsup','\u2AC6\u0338':'nsupE','\xD1':'Ntilde','\xF1':'ntilde','\u039D':'Nu','\u03BD':'nu','#':'num','\u2116':'numero','\u2007':'numsp','\u224D\u20D2':'nvap','\u22AC':'nvdash','\u22AD':'nvDash','\u22AE':'nVdash','\u22AF':'nVDash','\u2265\u20D2':'nvge','>\u20D2':'nvgt','\u2904':'nvHarr','\u29DE':'nvinfin','\u2902':'nvlArr','\u2264\u20D2':'nvle','<\u20D2':'nvlt','\u22B4\u20D2':'nvltrie','\u2903':'nvrArr','\u22B5\u20D2':'nvrtrie','\u223C\u20D2':'nvsim','\u2923':'nwarhk','\u2196':'nwarr','\u21D6':'nwArr','\u2927':'nwnear','\xD3':'Oacute','\xF3':'oacute','\xD4':'Ocirc','\xF4':'ocirc','\u041E':'Ocy','\u043E':'ocy','\u0150':'Odblac','\u0151':'odblac','\u2A38':'odiv','\u29BC':'odsold','\u0152':'OElig','\u0153':'oelig','\u29BF':'ofcir','\uD835\uDD12':'Ofr','\uD835\uDD2C':'ofr','\u02DB':'ogon','\xD2':'Ograve','\xF2':'ograve','\u29C1':'ogt','\u29B5':'ohbar','\u03A9':'ohm','\u29BE':'olcir','\u29BB':'olcross','\u203E':'oline','\u29C0':'olt','\u014C':'Omacr','\u014D':'omacr','\u03C9':'omega','\u039F':'Omicron','\u03BF':'omicron','\u29B6':'omid','\uD835\uDD46':'Oopf','\uD835\uDD60':'oopf','\u29B7':'opar','\u29B9':'operp','\u2A54':'Or','\u2228':'or','\u2A5D':'ord','\u2134':'oscr','\xAA':'ordf','\xBA':'ordm','\u22B6':'origof','\u2A56':'oror','\u2A57':'orslope','\u2A5B':'orv','\uD835\uDCAA':'Oscr','\xD8':'Oslash','\xF8':'oslash','\u2298':'osol','\xD5':'Otilde','\xF5':'otilde','\u2A36':'otimesas','\u2A37':'Otimes','\xD6':'Ouml','\xF6':'ouml','\u233D':'ovbar','\u23DE':'OverBrace','\u23B4':'tbrk','\u23DC':'OverParenthesis','\xB6':'para','\u2AF3':'parsim','\u2AFD':'parsl','\u2202':'part','\u041F':'Pcy','\u043F':'pcy','%':'percnt','.':'period','\u2030':'permil','\u2031':'pertenk','\uD835\uDD13':'Pfr','\uD835\uDD2D':'pfr','\u03A6':'Phi','\u03C6':'phi','\u03D5':'phiv','\u260E':'phone','\u03A0':'Pi','\u03C0':'pi','\u03D6':'piv','\u210E':'planckh','\u2A23':'plusacir','\u2A22':'pluscir','+':'plus','\u2A25':'plusdu','\u2A72':'pluse','\xB1':'pm','\u2A26':'plussim','\u2A27':'plustwo','\u2A15':'pointint','\uD835\uDD61':'popf','\u2119':'Popf','\xA3':'pound','\u2AB7':'prap','\u2ABB':'Pr','\u227A':'pr','\u227C':'prcue','\u2AAF':'pre','\u227E':'prsim','\u2AB9':'prnap','\u2AB5':'prnE','\u22E8':'prnsim','\u2AB3':'prE','\u2032':'prime','\u2033':'Prime','\u220F':'prod','\u232E':'profalar','\u2312':'profline','\u2313':'profsurf','\u221D':'prop','\u22B0':'prurel','\uD835\uDCAB':'Pscr','\uD835\uDCC5':'pscr','\u03A8':'Psi','\u03C8':'psi','\u2008':'puncsp','\uD835\uDD14':'Qfr','\uD835\uDD2E':'qfr','\uD835\uDD62':'qopf','\u211A':'Qopf','\u2057':'qprime','\uD835\uDCAC':'Qscr','\uD835\uDCC6':'qscr','\u2A16':'quatint','?':'quest','"':'quot','\u21DB':'rAarr','\u223D\u0331':'race','\u0154':'Racute','\u0155':'racute','\u221A':'Sqrt','\u29B3':'raemptyv','\u27E9':'rang','\u27EB':'Rang','\u2992':'rangd','\u29A5':'range','\xBB':'raquo','\u2975':'rarrap','\u21E5':'rarrb','\u2920':'rarrbfs','\u2933':'rarrc','\u2192':'rarr','\u21A0':'Rarr','\u291E':'rarrfs','\u2945':'rarrpl','\u2974':'rarrsim','\u2916':'Rarrtl','\u21A3':'rarrtl','\u219D':'rarrw','\u291A':'ratail','\u291C':'rAtail','\u2236':'ratio','\u2773':'rbbrk','}':'rcub',']':'rsqb','\u298C':'rbrke','\u298E':'rbrksld','\u2990':'rbrkslu','\u0158':'Rcaron','\u0159':'rcaron','\u0156':'Rcedil','\u0157':'rcedil','\u2309':'rceil','\u0420':'Rcy','\u0440':'rcy','\u2937':'rdca','\u2969':'rdldhar','\u21B3':'rdsh','\u211C':'Re','\u211B':'Rscr','\u211D':'Ropf','\u25AD':'rect','\u297D':'rfisht','\u230B':'rfloor','\uD835\uDD2F':'rfr','\u2964':'rHar','\u21C0':'rharu','\u296C':'rharul','\u03A1':'Rho','\u03C1':'rho','\u03F1':'rhov','\u21C4':'rlarr','\u27E7':'robrk','\u295D':'RightDownTeeVector','\u2955':'RightDownVectorBar','\u21C9':'rrarr','\u22A2':'vdash','\u295B':'RightTeeVector','\u22CC':'rthree','\u29D0':'RightTriangleBar','\u22B3':'vrtri','\u22B5':'rtrie','\u294F':'RightUpDownVector','\u295C':'RightUpTeeVector','\u2954':'RightUpVectorBar','\u21BE':'uharr','\u2953':'RightVectorBar','\u02DA':'ring','\u200F':'rlm','\u23B1':'rmoust','\u2AEE':'rnmid','\u27ED':'roang','\u21FE':'roarr','\u2986':'ropar','\uD835\uDD63':'ropf','\u2A2E':'roplus','\u2A35':'rotimes','\u2970':'RoundImplies',')':'rpar','\u2994':'rpargt','\u2A12':'rppolint','\u203A':'rsaquo','\uD835\uDCC7':'rscr','\u21B1':'rsh','\u22CA':'rtimes','\u25B9':'rtri','\u29CE':'rtriltri','\u29F4':'RuleDelayed','\u2968':'ruluhar','\u211E':'rx','\u015A':'Sacute','\u015B':'sacute','\u2AB8':'scap','\u0160':'Scaron','\u0161':'scaron','\u2ABC':'Sc','\u227B':'sc','\u227D':'sccue','\u2AB0':'sce','\u2AB4':'scE','\u015E':'Scedil','\u015F':'scedil','\u015C':'Scirc','\u015D':'scirc','\u2ABA':'scnap','\u2AB6':'scnE','\u22E9':'scnsim','\u2A13':'scpolint','\u227F':'scsim','\u0421':'Scy','\u0441':'scy','\u22C5':'sdot','\u2A66':'sdote','\u21D8':'seArr','\xA7':'sect',';':'semi','\u2929':'tosa','\u2736':'sext','\uD835\uDD16':'Sfr','\uD835\uDD30':'sfr','\u266F':'sharp','\u0429':'SHCHcy','\u0449':'shchcy','\u0428':'SHcy','\u0448':'shcy','\u2191':'uarr','\xAD':'shy','\u03A3':'Sigma','\u03C3':'sigma','\u03C2':'sigmaf','\u223C':'sim','\u2A6A':'simdot','\u2243':'sime','\u2A9E':'simg','\u2AA0':'simgE','\u2A9D':'siml','\u2A9F':'simlE','\u2246':'simne','\u2A24':'simplus','\u2972':'simrarr','\u2A33':'smashp','\u29E4':'smeparsl','\u2323':'smile','\u2AAA':'smt','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u042C':'SOFTcy','\u044C':'softcy','\u233F':'solbar','\u29C4':'solb','/':'sol','\uD835\uDD4A':'Sopf','\uD835\uDD64':'sopf','\u2660':'spades','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u228F':'sqsub','\u2291':'sqsube','\u2290':'sqsup','\u2292':'sqsupe','\u25A1':'squ','\uD835\uDCAE':'Sscr','\uD835\uDCC8':'sscr','\u22C6':'Star','\u2606':'star','\u2282':'sub','\u22D0':'Sub','\u2ABD':'subdot','\u2AC5':'subE','\u2286':'sube','\u2AC3':'subedot','\u2AC1':'submult','\u2ACB':'subnE','\u228A':'subne','\u2ABF':'subplus','\u2979':'subrarr','\u2AC7':'subsim','\u2AD5':'subsub','\u2AD3':'subsup','\u2211':'sum','\u266A':'sung','\xB9':'sup1','\xB2':'sup2','\xB3':'sup3','\u2283':'sup','\u22D1':'Sup','\u2ABE':'supdot','\u2AD8':'supdsub','\u2AC6':'supE','\u2287':'supe','\u2AC4':'supedot','\u27C9':'suphsol','\u2AD7':'suphsub','\u297B':'suplarr','\u2AC2':'supmult','\u2ACC':'supnE','\u228B':'supne','\u2AC0':'supplus','\u2AC8':'supsim','\u2AD4':'supsub','\u2AD6':'supsup','\u21D9':'swArr','\u292A':'swnwar','\xDF':'szlig','\t':'Tab','\u2316':'target','\u03A4':'Tau','\u03C4':'tau','\u0164':'Tcaron','\u0165':'tcaron','\u0162':'Tcedil','\u0163':'tcedil','\u0422':'Tcy','\u0442':'tcy','\u20DB':'tdot','\u2315':'telrec','\uD835\uDD17':'Tfr','\uD835\uDD31':'tfr','\u2234':'there4','\u0398':'Theta','\u03B8':'theta','\u03D1':'thetav','\u205F\u200A':'ThickSpace','\u2009':'thinsp','\xDE':'THORN','\xFE':'thorn','\u2A31':'timesbar','\xD7':'times','\u2A30':'timesd','\u2336':'topbot','\u2AF1':'topcir','\uD835\uDD4B':'Topf','\uD835\uDD65':'topf','\u2ADA':'topfork','\u2034':'tprime','\u2122':'trade','\u25B5':'utri','\u225C':'trie','\u25EC':'tridot','\u2A3A':'triminus','\u2A39':'triplus','\u29CD':'trisb','\u2A3B':'tritime','\u23E2':'trpezium','\uD835\uDCAF':'Tscr','\uD835\uDCC9':'tscr','\u0426':'TScy','\u0446':'tscy','\u040B':'TSHcy','\u045B':'tshcy','\u0166':'Tstrok','\u0167':'tstrok','\xDA':'Uacute','\xFA':'uacute','\u219F':'Uarr','\u2949':'Uarrocir','\u040E':'Ubrcy','\u045E':'ubrcy','\u016C':'Ubreve','\u016D':'ubreve','\xDB':'Ucirc','\xFB':'ucirc','\u0423':'Ucy','\u0443':'ucy','\u21C5':'udarr','\u0170':'Udblac','\u0171':'udblac','\u296E':'udhar','\u297E':'ufisht','\uD835\uDD18':'Ufr','\uD835\uDD32':'ufr','\xD9':'Ugrave','\xF9':'ugrave','\u2963':'uHar','\u2580':'uhblk','\u231C':'ulcorn','\u230F':'ulcrop','\u25F8':'ultri','\u016A':'Umacr','\u016B':'umacr','\u23DF':'UnderBrace','\u23DD':'UnderParenthesis','\u228E':'uplus','\u0172':'Uogon','\u0173':'uogon','\uD835\uDD4C':'Uopf','\uD835\uDD66':'uopf','\u2912':'UpArrowBar','\u2195':'varr','\u03C5':'upsi','\u03D2':'Upsi','\u03A5':'Upsilon','\u21C8':'uuarr','\u231D':'urcorn','\u230E':'urcrop','\u016E':'Uring','\u016F':'uring','\u25F9':'urtri','\uD835\uDCB0':'Uscr','\uD835\uDCCA':'uscr','\u22F0':'utdot','\u0168':'Utilde','\u0169':'utilde','\xDC':'Uuml','\xFC':'uuml','\u29A7':'uwangle','\u299C':'vangrt','\u228A\uFE00':'vsubne','\u2ACB\uFE00':'vsubnE','\u228B\uFE00':'vsupne','\u2ACC\uFE00':'vsupnE','\u2AE8':'vBar','\u2AEB':'Vbar','\u2AE9':'vBarv','\u0412':'Vcy','\u0432':'vcy','\u22A9':'Vdash','\u22AB':'VDash','\u2AE6':'Vdashl','\u22BB':'veebar','\u225A':'veeeq','\u22EE':'vellip','|':'vert','\u2016':'Vert','\u2758':'VerticalSeparator','\u2240':'wr','\uD835\uDD19':'Vfr','\uD835\uDD33':'vfr','\uD835\uDD4D':'Vopf','\uD835\uDD67':'vopf','\uD835\uDCB1':'Vscr','\uD835\uDCCB':'vscr','\u22AA':'Vvdash','\u299A':'vzigzag','\u0174':'Wcirc','\u0175':'wcirc','\u2A5F':'wedbar','\u2259':'wedgeq','\u2118':'wp','\uD835\uDD1A':'Wfr','\uD835\uDD34':'wfr','\uD835\uDD4E':'Wopf','\uD835\uDD68':'wopf','\uD835\uDCB2':'Wscr','\uD835\uDCCC':'wscr','\uD835\uDD1B':'Xfr','\uD835\uDD35':'xfr','\u039E':'Xi','\u03BE':'xi','\u22FB':'xnis','\uD835\uDD4F':'Xopf','\uD835\uDD69':'xopf','\uD835\uDCB3':'Xscr','\uD835\uDCCD':'xscr','\xDD':'Yacute','\xFD':'yacute','\u042F':'YAcy','\u044F':'yacy','\u0176':'Ycirc','\u0177':'ycirc','\u042B':'Ycy','\u044B':'ycy','\xA5':'yen','\uD835\uDD1C':'Yfr','\uD835\uDD36':'yfr','\u0407':'YIcy','\u0457':'yicy','\uD835\uDD50':'Yopf','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDCCE':'yscr','\u042E':'YUcy','\u044E':'yucy','\xFF':'yuml','\u0178':'Yuml','\u0179':'Zacute','\u017A':'zacute','\u017D':'Zcaron','\u017E':'zcaron','\u0417':'Zcy','\u0437':'zcy','\u017B':'Zdot','\u017C':'zdot','\u2128':'Zfr','\u0396':'Zeta','\u03B6':'zeta','\uD835\uDD37':'zfr','\u0416':'ZHcy','\u0436':'zhcy','\u21DD':'zigrarr','\uD835\uDD6B':'zopf','\uD835\uDCB5':'Zscr','\uD835\uDCCF':'zscr','\u200D':'zwj','\u200C':'zwnj'};
|
||
|
||
var regexEscape = /["&'<>`]/g;
|
||
var escapeMap = {
|
||
'"': '"',
|
||
'&': '&',
|
||
'\'': ''',
|
||
'<': '<',
|
||
// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
|
||
// following is not strictly necessary unless it’s part of a tag or an
|
||
// unquoted attribute value. We’re only escaping it to support those
|
||
// situations, and for XML support.
|
||
'>': '>',
|
||
// In Internet Explorer ≤ 8, the backtick character can be used
|
||
// to break out of (un)quoted attribute values or HTML comments.
|
||
// See http://html5sec.org/#102, http://html5sec.org/#108, and
|
||
// http://html5sec.org/#133.
|
||
'`': '`'
|
||
};
|
||
|
||
var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
|
||
var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
|
||
var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g;
|
||
var decodeMap = {'Aacute':'\xC1','aacute':'\xE1','Abreve':'\u0102','abreve':'\u0103','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','Acy':'\u0410','acy':'\u0430','AElig':'\xC6','aelig':'\xE6','af':'\u2061','Afr':'\uD835\uDD04','afr':'\uD835\uDD1E','Agrave':'\xC0','agrave':'\xE0','alefsym':'\u2135','aleph':'\u2135','Alpha':'\u0391','alpha':'\u03B1','Amacr':'\u0100','amacr':'\u0101','amalg':'\u2A3F','amp':'&','AMP':'&','andand':'\u2A55','And':'\u2A53','and':'\u2227','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angmsd':'\u2221','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','Aogon':'\u0104','aogon':'\u0105','Aopf':'\uD835\uDD38','aopf':'\uD835\uDD52','apacir':'\u2A6F','ap':'\u2248','apE':'\u2A70','ape':'\u224A','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','Aring':'\xC5','aring':'\xE5','Ascr':'\uD835\uDC9C','ascr':'\uD835\uDCB6','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','Bcy':'\u0411','bcy':'\u0431','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','Beta':'\u0392','beta':'\u03B2','beth':'\u2136','between':'\u226C','Bfr':'\uD835\uDD05','bfr':'\uD835\uDD1F','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bNot':'\u2AED','bnot':'\u2310','Bopf':'\uD835\uDD39','bopf':'\uD835\uDD53','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxHd':'\u2564','boxhD':'\u2565','boxHD':'\u2566','boxhu':'\u2534','boxHu':'\u2567','boxhU':'\u2568','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsolb':'\u29C5','bsol':'\\','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpE':'\u2AAE','bumpe':'\u224F','Bumpeq':'\u224E','bumpeq':'\u224F','Cacute':'\u0106','cacute':'\u0107','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','cap':'\u2229','Cap':'\u22D2','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','Ccaron':'\u010C','ccaron':'\u010D','Ccedil':'\xC7','ccedil':'\xE7','Ccirc':'\u0108','ccirc':'\u0109','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','Cdot':'\u010A','cdot':'\u010B','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','CHcy':'\u0427','chcy':'\u0447','check':'\u2713','checkmark':'\u2713','Chi':'\u03A7','chi':'\u03C7','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cir':'\u25CB','cirE':'\u29C3','cire':'\u2257','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','Colone':'\u2A74','colone':'\u2254','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','Cscr':'\uD835\uDC9E','cscr':'\uD835\uDCB8','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cup':'\u222A','Cup':'\u22D3','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','Darr':'\u21A1','dArr':'\u21D3','dash':'\u2010','Dashv':'\u2AE4','dashv':'\u22A3','dbkarow':'\u290F','dblac':'\u02DD','Dcaron':'\u010E','dcaron':'\u010F','Dcy':'\u0414','dcy':'\u0434','ddagger':'\u2021','ddarr':'\u21CA','DD':'\u2145','dd':'\u2146','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','Delta':'\u0394','delta':'\u03B4','demptyv':'\u29B1','dfisht':'\u297F','Dfr':'\uD835\uDD07','dfr':'\uD835\uDD21','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','DJcy':'\u0402','djcy':'\u0452','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','Dopf':'\uD835\uDD3B','dopf':'\uD835\uDD55','Dot':'\xA8','dot':'\u02D9','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','DownArrowBar':'\u2913','downarrow':'\u2193','DownArrow':'\u2193','Downarrow':'\u21D3','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVectorBar':'\u2956','DownLeftVector':'\u21BD','DownRightTeeVector':'\u295F','DownRightVectorBar':'\u2957','DownRightVector':'\u21C1','DownTeeArrow':'\u21A7','DownTee':'\u22A4','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','Dscr':'\uD835\uDC9F','dscr':'\uD835\uDCB9','DScy':'\u0405','dscy':'\u0455','dsol':'\u29F6','Dstrok':'\u0110','dstrok':'\u0111','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','DZcy':'\u040F','dzcy':'\u045F','dzigrarr':'\u27FF','Eacute':'\xC9','eacute':'\xE9','easter':'\u2A6E','Ecaron':'\u011A','ecaron':'\u011B','Ecirc':'\xCA','ecirc':'\xEA','ecir':'\u2256','ecolon':'\u2255','Ecy':'\u042D','ecy':'\u044D','eDDot':'\u2A77','Edot':'\u0116','edot':'\u0117','eDot':'\u2251','ee':'\u2147','efDot':'\u2252','Efr':'\uD835\uDD08','efr':'\uD835\uDD22','eg':'\u2A9A','Egrave':'\xC8','egrave':'\xE8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','Emacr':'\u0112','emacr':'\u0113','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp13':'\u2004','emsp14':'\u2005','emsp':'\u2003','ENG':'\u014A','eng':'\u014B','ensp':'\u2002','Eogon':'\u0118','eogon':'\u0119','Eopf':'\uD835\uDD3C','eopf':'\uD835\uDD56','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','Epsilon':'\u0395','epsilon':'\u03B5','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','Esim':'\u2A73','esim':'\u2242','Eta':'\u0397','eta':'\u03B7','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','Fcy':'\u0424','fcy':'\u0444','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','Ffr':'\uD835\uDD09','ffr':'\uD835\uDD23','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','Fopf':'\uD835\uDD3D','fopf':'\uD835\uDD57','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','Gamma':'\u0393','gamma':'\u03B3','Gammad':'\u03DC','gammad':'\u03DD','gap':'\u2A86','Gbreve':'\u011E','gbreve':'\u011F','Gcedil':'\u0122','Gcirc':'\u011C','gcirc':'\u011D','Gcy':'\u0413','gcy':'\u0433','Gdot':'\u0120','gdot':'\u0121','ge':'\u2265','gE':'\u2267','gEl':'\u2A8C','gel':'\u22DB','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','gescc':'\u2AA9','ges':'\u2A7E','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','Gfr':'\uD835\uDD0A','gfr':'\uD835\uDD24','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','GJcy':'\u0403','gjcy':'\u0453','gla':'\u2AA5','gl':'\u2277','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','Gopf':'\uD835\uDD3E','gopf':'\uD835\uDD58','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','Gscr':'\uD835\uDCA2','gscr':'\u210A','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gtcc':'\u2AA7','gtcir':'\u2A7A','gt':'>','GT':'>','Gt':'\u226B','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','HARDcy':'\u042A','hardcy':'\u044A','harrcir':'\u2948','harr':'\u2194','hArr':'\u21D4','harrw':'\u21AD','Hat':'^','hbar':'\u210F','Hcirc':'\u0124','hcirc':'\u0125','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','Hstrok':'\u0126','hstrok':'\u0127','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','Iacute':'\xCD','iacute':'\xED','ic':'\u2063','Icirc':'\xCE','icirc':'\xEE','Icy':'\u0418','icy':'\u0438','Idot':'\u0130','IEcy':'\u0415','iecy':'\u0435','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','Igrave':'\xCC','igrave':'\xEC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','IJlig':'\u0132','ijlig':'\u0133','Imacr':'\u012A','imacr':'\u012B','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','Im':'\u2111','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','incare':'\u2105','in':'\u2208','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','intcal':'\u22BA','int':'\u222B','Int':'\u222C','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','IOcy':'\u0401','iocy':'\u0451','Iogon':'\u012E','iogon':'\u012F','Iopf':'\uD835\uDD40','iopf':'\uD835\uDD5A','Iota':'\u0399','iota':'\u03B9','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','Itilde':'\u0128','itilde':'\u0129','Iukcy':'\u0406','iukcy':'\u0456','Iuml':'\xCF','iuml':'\xEF','Jcirc':'\u0134','jcirc':'\u0135','Jcy':'\u0419','jcy':'\u0439','Jfr':'\uD835\uDD0D','jfr':'\uD835\uDD27','jmath':'\u0237','Jopf':'\uD835\uDD41','jopf':'\uD835\uDD5B','Jscr':'\uD835\uDCA5','jscr':'\uD835\uDCBF','Jsercy':'\u0408','jsercy':'\u0458','Jukcy':'\u0404','jukcy':'\u0454','Kappa':'\u039A','kappa':'\u03BA','kappav':'\u03F0','Kcedil':'\u0136','kcedil':'\u0137','Kcy':'\u041A','kcy':'\u043A','Kfr':'\uD835\uDD0E','kfr':'\uD835\uDD28','kgreen':'\u0138','KHcy':'\u0425','khcy':'\u0445','KJcy':'\u040C','kjcy':'\u045C','Kopf':'\uD835\uDD42','kopf':'\uD835\uDD5C','Kscr':'\uD835\uDCA6','kscr':'\uD835\uDCC0','lAarr':'\u21DA','Lacute':'\u0139','lacute':'\u013A','laemptyv':'\u29B4','lagran':'\u2112','Lambda':'\u039B','lambda':'\u03BB','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larrb':'\u21E4','larrbfs':'\u291F','larr':'\u2190','Larr':'\u219E','lArr':'\u21D0','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','latail':'\u2919','lAtail':'\u291B','lat':'\u2AAB','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','Lcaron':'\u013D','lcaron':'\u013E','Lcedil':'\u013B','lcedil':'\u013C','lceil':'\u2308','lcub':'{','Lcy':'\u041B','lcy':'\u043B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','LeftArrowBar':'\u21E4','leftarrow':'\u2190','LeftArrow':'\u2190','Leftarrow':'\u21D0','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVectorBar':'\u2959','LeftDownVector':'\u21C3','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','LeftRightArrow':'\u2194','Leftrightarrow':'\u21D4','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTeeArrow':'\u21A4','LeftTee':'\u22A3','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangleBar':'\u29CF','LeftTriangle':'\u22B2','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVectorBar':'\u2958','LeftUpVector':'\u21BF','LeftVectorBar':'\u2952','LeftVector':'\u21BC','lEg':'\u2A8B','leg':'\u22DA','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','lescc':'\u2AA8','les':'\u2A7D','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','Lfr':'\uD835\uDD0F','lfr':'\uD835\uDD29','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','LJcy':'\u0409','ljcy':'\u0459','llarr':'\u21C7','ll':'\u226A','Ll':'\u22D8','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','Lmidot':'\u013F','lmidot':'\u0140','lmoustache':'\u23B0','lmoust':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','LongLeftArrow':'\u27F5','Longleftarrow':'\u27F8','longleftrightarrow':'\u27F7','LongLeftRightArrow':'\u27F7','Longleftrightarrow':'\u27FA','longmapsto':'\u27FC','longrightarrow':'\u27F6','LongRightArrow':'\u27F6','Longrightarrow':'\u27F9','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','Lopf':'\uD835\uDD43','lopf':'\uD835\uDD5D','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','Lstrok':'\u0141','lstrok':'\u0142','ltcc':'\u2AA6','ltcir':'\u2A79','lt':'<','LT':'<','Lt':'\u226A','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','Map':'\u2905','map':'\u21A6','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','Mcy':'\u041C','mcy':'\u043C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','Mfr':'\uD835\uDD10','mfr':'\uD835\uDD2A','mho':'\u2127','micro':'\xB5','midast':'*','midcir':'\u2AF0','mid':'\u2223','middot':'\xB7','minusb':'\u229F','minus':'\u2212','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','Mopf':'\uD835\uDD44','mopf':'\uD835\uDD5E','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','Mu':'\u039C','mu':'\u03BC','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','Nacute':'\u0143','nacute':'\u0144','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natural':'\u266E','naturals':'\u2115','natur':'\u266E','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','Ncaron':'\u0147','ncaron':'\u0148','Ncedil':'\u0145','ncedil':'\u0146','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','Ncy':'\u041D','ncy':'\u043D','ndash':'\u2013','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','ne':'\u2260','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','Nfr':'\uD835\uDD11','nfr':'\uD835\uDD2B','ngE':'\u2267\u0338','nge':'\u2271','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','nGt':'\u226B\u20D2','ngt':'\u226F','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','NJcy':'\u040A','njcy':'\u045A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nlE':'\u2266\u0338','nle':'\u2270','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nLt':'\u226A\u20D2','nlt':'\u226E','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','Not':'\u2AEC','not':'\xAC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangle':'\u22EA','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangle':'\u22EB','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','nparallel':'\u2226','npar':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','nprec':'\u2280','npreceq':'\u2AAF\u0338','npre':'\u2AAF\u0338','nrarrc':'\u2933\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','Nscr':'\uD835\uDCA9','nscr':'\uD835\uDCC3','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsubE':'\u2AC5\u0338','nsube':'\u2288','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupE':'\u2AC6\u0338','nsupe':'\u2289','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','Ntilde':'\xD1','ntilde':'\xF1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','Nu':'\u039D','nu':'\u03BD','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','Oacute':'\xD3','oacute':'\xF3','oast':'\u229B','Ocirc':'\xD4','ocirc':'\xF4','ocir':'\u229A','Ocy':'\u041E','ocy':'\u043E','odash':'\u229D','Odblac':'\u0150','odblac':'\u0151','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','OElig':'\u0152','oelig':'\u0153','ofcir':'\u29BF','Ofr':'\uD835\uDD12','ofr':'\uD835\uDD2C','ogon':'\u02DB','Ograve':'\xD2','ograve':'\xF2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','Omacr':'\u014C','omacr':'\u014D','Omega':'\u03A9','omega':'\u03C9','Omicron':'\u039F','omicron':'\u03BF','omid':'\u29B6','ominus':'\u2296','Oopf':'\uD835\uDD46','oopf':'\uD835\uDD60','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','orarr':'\u21BB','Or':'\u2A54','or':'\u2228','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','Oscr':'\uD835\uDCAA','oscr':'\u2134','Oslash':'\xD8','oslash':'\xF8','osol':'\u2298','Otilde':'\xD5','otilde':'\xF5','otimesas':'\u2A36','Otimes':'\u2A37','otimes':'\u2297','Ouml':'\xD6','ouml':'\xF6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','para':'\xB6','parallel':'\u2225','par':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','Pcy':'\u041F','pcy':'\u043F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','Pfr':'\uD835\uDD13','pfr':'\uD835\uDD2D','Phi':'\u03A6','phi':'\u03C6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','Pi':'\u03A0','pi':'\u03C0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plus':'+','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','prap':'\u2AB7','Pr':'\u2ABB','pr':'\u227A','prcue':'\u227C','precapprox':'\u2AB7','prec':'\u227A','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','pre':'\u2AAF','prE':'\u2AB3','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportional':'\u221D','Proportion':'\u2237','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','Pscr':'\uD835\uDCAB','pscr':'\uD835\uDCC5','Psi':'\u03A8','psi':'\u03C8','puncsp':'\u2008','Qfr':'\uD835\uDD14','qfr':'\uD835\uDD2E','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','Qscr':'\uD835\uDCAC','qscr':'\uD835\uDCC6','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','Racute':'\u0154','racute':'\u0155','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarr':'\u2192','Rarr':'\u21A0','rArr':'\u21D2','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','Rarrtl':'\u2916','rarrtl':'\u21A3','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','Rcaron':'\u0158','rcaron':'\u0159','Rcedil':'\u0156','rcedil':'\u0157','rceil':'\u2309','rcub':'}','Rcy':'\u0420','rcy':'\u0440','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','Re':'\u211C','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','Rho':'\u03A1','rho':'\u03C1','rhov':'\u03F1','RightAngleBracket':'\u27E9','RightArrowBar':'\u21E5','rightarrow':'\u2192','RightArrow':'\u2192','Rightarrow':'\u21D2','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVectorBar':'\u2955','RightDownVector':'\u21C2','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTeeArrow':'\u21A6','RightTee':'\u22A2','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangleBar':'\u29D0','RightTriangle':'\u22B3','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVectorBar':'\u2954','RightUpVector':'\u21BE','RightVectorBar':'\u2953','RightVector':'\u21C0','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoustache':'\u23B1','rmoust':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','Sacute':'\u015A','sacute':'\u015B','sbquo':'\u201A','scap':'\u2AB8','Scaron':'\u0160','scaron':'\u0161','Sc':'\u2ABC','sc':'\u227B','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','Scedil':'\u015E','scedil':'\u015F','Scirc':'\u015C','scirc':'\u015D','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','Scy':'\u0421','scy':'\u0441','sdotb':'\u22A1','sdot':'\u22C5','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','Sfr':'\uD835\uDD16','sfr':'\uD835\uDD30','sfrown':'\u2322','sharp':'\u266F','SHCHcy':'\u0429','shchcy':'\u0449','SHcy':'\u0428','shcy':'\u0448','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','Sigma':'\u03A3','sigma':'\u03C3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','SOFTcy':'\u042C','softcy':'\u044C','solbar':'\u233F','solb':'\u29C4','sol':'/','Sopf':'\uD835\uDD4A','sopf':'\uD835\uDD64','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squ':'\u25A1','squf':'\u25AA','srarr':'\u2192','Sscr':'\uD835\uDCAE','sscr':'\uD835\uDCC8','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','Star':'\u22C6','star':'\u2606','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','subE':'\u2AC5','sube':'\u2286','subedot':'\u2AC3','submult':'\u2AC1','subnE':'\u2ACB','subne':'\u228A','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succapprox':'\u2AB8','succ':'\u227B','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','sup':'\u2283','Sup':'\u22D1','supdot':'\u2ABE','supdsub':'\u2AD8','supE':'\u2AC6','supe':'\u2287','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supnE':'\u2ACC','supne':'\u228B','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','Tau':'\u03A4','tau':'\u03C4','tbrk':'\u23B4','Tcaron':'\u0164','tcaron':'\u0165','Tcedil':'\u0162','tcedil':'\u0163','Tcy':'\u0422','tcy':'\u0442','tdot':'\u20DB','telrec':'\u2315','Tfr':'\uD835\uDD17','tfr':'\uD835\uDD31','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','Theta':'\u0398','theta':'\u03B8','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','ThinSpace':'\u2009','thinsp':'\u2009','thkap':'\u2248','thksim':'\u223C','THORN':'\xDE','thorn':'\xFE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','timesbar':'\u2A31','timesb':'\u22A0','times':'\xD7','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','topbot':'\u2336','topcir':'\u2AF1','top':'\u22A4','Topf':'\uD835\uDD4B','topf':'\uD835\uDD65','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','Tscr':'\uD835\uDCAF','tscr':'\uD835\uDCC9','TScy':'\u0426','tscy':'\u0446','TSHcy':'\u040B','tshcy':'\u045B','Tstrok':'\u0166','tstrok':'\u0167','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','Uacute':'\xDA','uacute':'\xFA','uarr':'\u2191','Uarr':'\u219F','uArr':'\u21D1','Uarrocir':'\u2949','Ubrcy':'\u040E','ubrcy':'\u045E','Ubreve':'\u016C','ubreve':'\u016D','Ucirc':'\xDB','ucirc':'\xFB','Ucy':'\u0423','ucy':'\u0443','udarr':'\u21C5','Udblac':'\u0170','udblac':'\u0171','udhar':'\u296E','ufisht':'\u297E','Ufr':'\uD835\uDD18','ufr':'\uD835\uDD32','Ugrave':'\xD9','ugrave':'\xF9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','Umacr':'\u016A','umacr':'\u016B','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','Uogon':'\u0172','uogon':'\u0173','Uopf':'\uD835\uDD4C','uopf':'\uD835\uDD66','UpArrowBar':'\u2912','uparrow':'\u2191','UpArrow':'\u2191','Uparrow':'\u21D1','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','UpDownArrow':'\u2195','Updownarrow':'\u21D5','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','Upsilon':'\u03A5','upsilon':'\u03C5','UpTeeArrow':'\u21A5','UpTee':'\u22A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','Uring':'\u016E','uring':'\u016F','urtri':'\u25F9','Uscr':'\uD835\uDCB0','uscr':'\uD835\uDCCA','utdot':'\u22F0','Utilde':'\u0168','utilde':'\u0169','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','Uuml':'\xDC','uuml':'\xFC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','Vcy':'\u0412','vcy':'\u0432','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','veebar':'\u22BB','vee':'\u2228','Vee':'\u22C1','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','Vfr':'\uD835\uDD19','vfr':'\uD835\uDD33','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','Vopf':'\uD835\uDD4D','vopf':'\uD835\uDD67','vprop':'\u221D','vrtri':'\u22B3','Vscr':'\uD835\uDCB1','vscr':'\uD835\uDCCB','vsubnE':'\u2ACB\uFE00','vsubne':'\u228A\uFE00','vsupnE':'\u2ACC\uFE00','vsupne':'\u228B\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','Wcirc':'\u0174','wcirc':'\u0175','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','Wfr':'\uD835\uDD1A','wfr':'\uD835\uDD34','Wopf':'\uD835\uDD4E','wopf':'\uD835\uDD68','wp':'\u2118','wr':'\u2240','wreath':'\u2240','Wscr':'\uD835\uDCB2','wscr':'\uD835\uDCCC','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','Xfr':'\uD835\uDD1B','xfr':'\uD835\uDD35','xharr':'\u27F7','xhArr':'\u27FA','Xi':'\u039E','xi':'\u03BE','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','Xopf':'\uD835\uDD4F','xopf':'\uD835\uDD69','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','Xscr':'\uD835\uDCB3','xscr':'\uD835\uDCCD','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','Yacute':'\xDD','yacute':'\xFD','YAcy':'\u042F','yacy':'\u044F','Ycirc':'\u0176','ycirc':'\u0177','Ycy':'\u042B','ycy':'\u044B','yen':'\xA5','Yfr':'\uD835\uDD1C','yfr':'\uD835\uDD36','YIcy':'\u0407','yicy':'\u0457','Yopf':'\uD835\uDD50','yopf':'\uD835\uDD6A','Yscr':'\uD835\uDCB4','yscr':'\uD835\uDCCE','YUcy':'\u042E','yucy':'\u044E','yuml':'\xFF','Yuml':'\u0178','Zacute':'\u0179','zacute':'\u017A','Zcaron':'\u017D','zcaron':'\u017E','Zcy':'\u0417','zcy':'\u0437','Zdot':'\u017B','zdot':'\u017C','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','Zeta':'\u0396','zeta':'\u03B6','zfr':'\uD835\uDD37','Zfr':'\u2128','ZHcy':'\u0416','zhcy':'\u0436','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','Zscr':'\uD835\uDCB5','zscr':'\uD835\uDCCF','zwj':'\u200D','zwnj':'\u200C'};
|
||
var decodeMapLegacy = {'Aacute':'\xC1','aacute':'\xE1','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','AElig':'\xC6','aelig':'\xE6','Agrave':'\xC0','agrave':'\xE0','amp':'&','AMP':'&','Aring':'\xC5','aring':'\xE5','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','brvbar':'\xA6','Ccedil':'\xC7','ccedil':'\xE7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','Eacute':'\xC9','eacute':'\xE9','Ecirc':'\xCA','ecirc':'\xEA','Egrave':'\xC8','egrave':'\xE8','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','Iacute':'\xCD','iacute':'\xED','Icirc':'\xCE','icirc':'\xEE','iexcl':'\xA1','Igrave':'\xCC','igrave':'\xEC','iquest':'\xBF','Iuml':'\xCF','iuml':'\xEF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','Ntilde':'\xD1','ntilde':'\xF1','Oacute':'\xD3','oacute':'\xF3','Ocirc':'\xD4','ocirc':'\xF4','Ograve':'\xD2','ograve':'\xF2','ordf':'\xAA','ordm':'\xBA','Oslash':'\xD8','oslash':'\xF8','Otilde':'\xD5','otilde':'\xF5','Ouml':'\xD6','ouml':'\xF6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','THORN':'\xDE','thorn':'\xFE','times':'\xD7','Uacute':'\xDA','uacute':'\xFA','Ucirc':'\xDB','ucirc':'\xFB','Ugrave':'\xD9','ugrave':'\xF9','uml':'\xA8','Uuml':'\xDC','uuml':'\xFC','Yacute':'\xDD','yacute':'\xFD','yen':'\xA5','yuml':'\xFF'};
|
||
var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
|
||
var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
var stringFromCharCode = String.fromCharCode;
|
||
|
||
var object = {};
|
||
var hasOwnProperty = object.hasOwnProperty;
|
||
var has = function(object, propertyName) {
|
||
return hasOwnProperty.call(object, propertyName);
|
||
};
|
||
|
||
var contains = function(array, value) {
|
||
var index = -1;
|
||
var length = array.length;
|
||
while (++index < length) {
|
||
if (array[index] == value) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
|
||
var merge = function(options, defaults) {
|
||
if (!options) {
|
||
return defaults;
|
||
}
|
||
var result = {};
|
||
var key;
|
||
for (key in defaults) {
|
||
// A `hasOwnProperty` check is not needed here, since only recognized
|
||
// option names are used anyway. Any others are ignored.
|
||
result[key] = has(options, key) ? options[key] : defaults[key];
|
||
}
|
||
return result;
|
||
};
|
||
|
||
// Modified version of `ucs2encode`; see http://mths.be/punycode.
|
||
var codePointToSymbol = function(codePoint, strict) {
|
||
var output = '';
|
||
if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
|
||
// See issue #4:
|
||
// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
|
||
// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
|
||
// REPLACEMENT CHARACTER.”
|
||
if (strict) {
|
||
parseError('character reference outside the permissible Unicode range');
|
||
}
|
||
return '\uFFFD';
|
||
}
|
||
if (has(decodeMapNumeric, codePoint)) {
|
||
if (strict) {
|
||
parseError('disallowed character reference');
|
||
}
|
||
return decodeMapNumeric[codePoint];
|
||
}
|
||
if (strict && contains(invalidReferenceCodePoints, codePoint)) {
|
||
parseError('disallowed character reference');
|
||
}
|
||
if (codePoint > 0xFFFF) {
|
||
codePoint -= 0x10000;
|
||
output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
|
||
codePoint = 0xDC00 | codePoint & 0x3FF;
|
||
}
|
||
output += stringFromCharCode(codePoint);
|
||
return output;
|
||
};
|
||
|
||
var hexEscape = function(symbol) {
|
||
return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';';
|
||
};
|
||
|
||
var parseError = function(message) {
|
||
throw Error('Parse error: ' + message);
|
||
};
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
var encode = function(string, options) {
|
||
options = merge(options, encode.options);
|
||
var strict = options.strict;
|
||
if (strict && regexInvalidRawCodePoint.test(string)) {
|
||
parseError('forbidden code point');
|
||
}
|
||
var encodeEverything = options.encodeEverything;
|
||
var useNamedReferences = options.useNamedReferences;
|
||
var allowUnsafeSymbols = options.allowUnsafeSymbols;
|
||
if (encodeEverything) {
|
||
// Encode ASCII symbols.
|
||
string = string.replace(regexAsciiWhitelist, function(symbol) {
|
||
// Use named references if requested & possible.
|
||
if (useNamedReferences && has(encodeMap, symbol)) {
|
||
return '&' + encodeMap[symbol] + ';';
|
||
}
|
||
return hexEscape(symbol);
|
||
});
|
||
// Shorten a few escapes that represent two symbols, of which at least one
|
||
// is within the ASCII range.
|
||
if (useNamedReferences) {
|
||
string = string
|
||
.replace(/>\u20D2/g, '>⃒')
|
||
.replace(/<\u20D2/g, '<⃒')
|
||
.replace(/fj/g, 'fj');
|
||
}
|
||
// Encode non-ASCII symbols.
|
||
if (useNamedReferences) {
|
||
// Encode non-ASCII symbols that can be replaced with a named reference.
|
||
string = string.replace(regexEncodeNonAscii, function(string) {
|
||
// Note: there is no need to check `has(encodeMap, string)` here.
|
||
return '&' + encodeMap[string] + ';';
|
||
});
|
||
}
|
||
// Note: any remaining non-ASCII symbols are handled outside of the `if`.
|
||
} else if (useNamedReferences) {
|
||
// Apply named character references.
|
||
// Encode `<>"'&` using named character references.
|
||
if (!allowUnsafeSymbols) {
|
||
string = string.replace(regexEscape, function(string) {
|
||
return '&' + encodeMap[string] + ';'; // no need to check `has()` here
|
||
});
|
||
}
|
||
// Shorten escapes that represent two symbols, of which at least one is
|
||
// `<>"'&`.
|
||
string = string
|
||
.replace(/>\u20D2/g, '>⃒')
|
||
.replace(/<\u20D2/g, '<⃒');
|
||
// Encode non-ASCII symbols that can be replaced with a named reference.
|
||
string = string.replace(regexEncodeNonAscii, function(string) {
|
||
// Note: there is no need to check `has(encodeMap, string)` here.
|
||
return '&' + encodeMap[string] + ';';
|
||
});
|
||
} else if (!allowUnsafeSymbols) {
|
||
// Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
|
||
// using named character references.
|
||
string = string.replace(regexEscape, hexEscape);
|
||
}
|
||
return string
|
||
// Encode astral symbols.
|
||
.replace(regexAstralSymbols, function($0) {
|
||
// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
||
var high = $0.charCodeAt(0);
|
||
var low = $0.charCodeAt(1);
|
||
var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
|
||
return '&#x' + codePoint.toString(16).toUpperCase() + ';';
|
||
})
|
||
// Encode any remaining BMP symbols that are not printable ASCII symbols
|
||
// using a hexadecimal escape.
|
||
.replace(regexBmpWhitelist, hexEscape);
|
||
};
|
||
// Expose default options (so they can be overridden globally).
|
||
encode.options = {
|
||
'allowUnsafeSymbols': false,
|
||
'encodeEverything': false,
|
||
'strict': false,
|
||
'useNamedReferences': false
|
||
};
|
||
|
||
var decode = function(html, options) {
|
||
options = merge(options, decode.options);
|
||
var strict = options.strict;
|
||
if (strict && regexInvalidEntity.test(html)) {
|
||
parseError('malformed character reference');
|
||
}
|
||
return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
|
||
var codePoint;
|
||
var semicolon;
|
||
var hexDigits;
|
||
var reference;
|
||
var next;
|
||
if ($1) {
|
||
// Decode decimal escapes, e.g. `𝌆`.
|
||
codePoint = $1;
|
||
semicolon = $2;
|
||
if (strict && !semicolon) {
|
||
parseError('character reference was not terminated by a semicolon');
|
||
}
|
||
return codePointToSymbol(codePoint, strict);
|
||
}
|
||
if ($3) {
|
||
// Decode hexadecimal escapes, e.g. `𝌆`.
|
||
hexDigits = $3;
|
||
semicolon = $4;
|
||
if (strict && !semicolon) {
|
||
parseError('character reference was not terminated by a semicolon');
|
||
}
|
||
codePoint = parseInt(hexDigits, 16);
|
||
return codePointToSymbol(codePoint, strict);
|
||
}
|
||
if ($5) {
|
||
// Decode named character references with trailing `;`, e.g. `©`.
|
||
reference = $5;
|
||
if (has(decodeMap, reference)) {
|
||
return decodeMap[reference];
|
||
} else {
|
||
// Ambiguous ampersand; see http://mths.be/notes/ambiguous-ampersands.
|
||
if (strict) {
|
||
parseError(
|
||
'named character reference was not terminated by a semicolon'
|
||
);
|
||
}
|
||
return $0;
|
||
}
|
||
}
|
||
// If we’re still here, it’s a legacy reference for sure. No need for an
|
||
// extra `if` check.
|
||
// Decode named character references without trailing `;`, e.g. `&`
|
||
// This is only a parse error if it gets converted to `&`, or if it is
|
||
// followed by `=` in an attribute context.
|
||
reference = $6;
|
||
next = $7;
|
||
if (next && options.isAttributeValue) {
|
||
if (strict && next == '=') {
|
||
parseError('`&` did not start a character reference');
|
||
}
|
||
return $0;
|
||
} else {
|
||
if (strict) {
|
||
parseError(
|
||
'named character reference was not terminated by a semicolon'
|
||
);
|
||
}
|
||
// Note: there is no need to check `has(decodeMapLegacy, reference)`.
|
||
return decodeMapLegacy[reference] + (next || '');
|
||
}
|
||
});
|
||
};
|
||
// Expose default options (so they can be overridden globally).
|
||
decode.options = {
|
||
'isAttributeValue': false,
|
||
'strict': false
|
||
};
|
||
|
||
var escape = function(string) {
|
||
return string.replace(regexEscape, function($0) {
|
||
// Note: there is no need to check `has(escapeMap, $0)` here.
|
||
return escapeMap[$0];
|
||
});
|
||
};
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
var he = {
|
||
'version': '0.5.0',
|
||
'encode': encode,
|
||
'decode': decode,
|
||
'escape': escape,
|
||
'unescape': decode
|
||
};
|
||
|
||
// Some AMD build optimizers, like r.js, check for specific condition patterns
|
||
// like the following:
|
||
if (
|
||
typeof define == 'function' &&
|
||
typeof define.amd == 'object' &&
|
||
define.amd
|
||
) {
|
||
define(function() {
|
||
return he;
|
||
});
|
||
} else if (freeExports && !freeExports.nodeType) {
|
||
if (freeModule) { // in Node.js or RingoJS v0.8.0+
|
||
freeModule.exports = he;
|
||
} else { // in Narwhal or RingoJS v0.7.0-
|
||
for (var key in he) {
|
||
has(he, key) && (freeExports[key] = he[key]);
|
||
}
|
||
}
|
||
} else { // in Rhino or a web browser
|
||
root.he = he;
|
||
}
|
||
|
||
}(this));
|
||
|
||
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
||
},{}],5:[function(_dereq_,module,exports){
|
||
module.exports={
|
||
"name": "mermaid",
|
||
"version": "0.3.2",
|
||
"description": "Markdownish syntax for generating flowcharts",
|
||
"main": "src/main.js",
|
||
"bin": {
|
||
"mermaid": "./bin/mermaid.js"
|
||
},
|
||
"scripts": {
|
||
"test": "gulp test"
|
||
},
|
||
"repository": {
|
||
"type": "git",
|
||
"url": "https://github.com/knsv/mermaid"
|
||
},
|
||
"author": "",
|
||
"license": "MIT",
|
||
"dependencies": {
|
||
"chalk": "^0.5.1",
|
||
"dagre-d3": "~0.3.2",
|
||
"he": "^0.5.0",
|
||
"minimist": "^1.1.0",
|
||
"mkdirp": "^0.5.0",
|
||
"semver": "^4.1.1",
|
||
"which": "^1.0.8"
|
||
},
|
||
"devDependencies": {
|
||
"async": "^0.9.0",
|
||
"browserify": "~6.2.0",
|
||
"clone": "^0.2.0",
|
||
"codeclimate-test-reporter": "0.0.4",
|
||
"d3": "~3.4.13",
|
||
"dagre-d3": "~0.3.2",
|
||
"event-stream": "^3.2.0",
|
||
"foundation": "^4.2.1-1",
|
||
"front-matter": "^0.2.0",
|
||
"gulp": "~3.8.9",
|
||
"gulp-browserify": "^0.5.0",
|
||
"gulp-bump": "^0.1.11",
|
||
"gulp-concat": "~2.4.1",
|
||
"gulp-data": "^1.1.1",
|
||
"gulp-ext-replace": "~0.1.0",
|
||
"gulp-hogan": "^1.1.0",
|
||
"gulp-istanbul": "^0.4.0",
|
||
"gulp-jasmine": "~1.0.1",
|
||
"gulp-jison": "~1.0.0",
|
||
"gulp-jshint": "^1.9.0",
|
||
"gulp-less": "^1.3.6",
|
||
"gulp-rename": "~1.2.0",
|
||
"gulp-shell": "^0.2.10",
|
||
"gulp-tag-version": "^1.2.1",
|
||
"gulp-uglify": "~1.0.1",
|
||
"he": "^0.5.0",
|
||
"hogan.js": "^3.0.2",
|
||
"jasmine": "~2.0.1",
|
||
"jison": "~0.4.15",
|
||
"jshint-stylish": "^1.0.0",
|
||
"karma": "~0.12.20",
|
||
"karma-chrome-launcher": "~0.1.5",
|
||
"karma-jasmine": "~0.2.1",
|
||
"karma-requirejs": "~0.2.2",
|
||
"lodash": "^2.4.1",
|
||
"lodash._escapestringchar": "^2.4.1",
|
||
"lodash._objecttypes": "^2.4.1",
|
||
"lodash._reinterpolate": "^2.4.1",
|
||
"lodash._reunescapedhtml": "^2.4.1",
|
||
"lodash.defaults": "^2.4.1",
|
||
"lodash.templatesettings": "^2.4.1",
|
||
"lodash.values": "^2.4.1",
|
||
"marked": "^0.3.2",
|
||
"mock-browser": "^0.90.27",
|
||
"path": "^0.4.9",
|
||
"phantomjs": "^1.9.12",
|
||
"rewire": "^2.1.3",
|
||
"rimraf": "^2.2.8",
|
||
"semantic-ui": "^1.4.1",
|
||
"tape": "^3.0.3"
|
||
}
|
||
}
|
||
|
||
},{}],6:[function(_dereq_,module,exports){
|
||
/* global window */
|
||
|
||
var dagreD3;
|
||
|
||
if (_dereq_) {
|
||
try {
|
||
dagreD3 = _dereq_("dagre-d3");
|
||
} catch (e) {}
|
||
}
|
||
|
||
if (!dagreD3) {
|
||
dagreD3 = window.dagreD3;
|
||
}
|
||
|
||
module.exports = dagreD3;
|
||
|
||
},{"dagre-d3":"EIC7Pc"}],7:[function(_dereq_,module,exports){
|
||
/**
|
||
* Created by knut on 14-12-11.
|
||
*/
|
||
var graph = _dereq_('./graphDb');
|
||
var flow = _dereq_('./parser/flow');
|
||
var dot = _dereq_('./parser/dot');
|
||
var dagreD3 = _dereq_('./dagre-d3');
|
||
/**
|
||
* Function that adds the vertices found in the graph definition to the graph to be rendered.
|
||
* @param vert Object containing the vertices.
|
||
* @param g The graph that is to be drawn.
|
||
*/
|
||
exports.addVertices = function (vert, g) {
|
||
var keys = Object.keys(vert);
|
||
|
||
var styleFromStyleArr = function(styleStr,arr){
|
||
var i;
|
||
// Create a compound style definition from the style definitions found for the node in the graph definition
|
||
for (i = 0; i < arr.length; i++) {
|
||
if (typeof arr[i] !== 'undefined') {
|
||
styleStr = styleStr + arr[i] + ';';
|
||
}
|
||
}
|
||
|
||
return styleStr;
|
||
};
|
||
|
||
// Iterate through each item in the vertice object (containing all the vertices found) in the graph definition
|
||
keys.forEach(function (id) {
|
||
var vertice = vert[id];
|
||
var verticeText;
|
||
|
||
var i;
|
||
|
||
/**
|
||
* Variable for storing the classes for the vertice
|
||
* @type {string}
|
||
*/
|
||
var classStr = '';
|
||
|
||
//console.log(vertice.classes);
|
||
|
||
if(vertice.classes.length >0){
|
||
classStr = vertice.classes.join(" ");
|
||
}
|
||
|
||
/**
|
||
* Variable for storing the extracted style for the vertice
|
||
* @type {string}
|
||
*/
|
||
var style = '';
|
||
// Create a compound style definition from the style definitions found for the node in the graph definition
|
||
style = styleFromStyleArr(style, vertice.styles);
|
||
|
||
// Use vertice id as text in the box if no text is provided by the graph definition
|
||
if (typeof vertice.text === 'undefined') {
|
||
verticeText = vertice.id;
|
||
}
|
||
else {
|
||
verticeText = vertice.text;
|
||
}
|
||
|
||
var labelTypeStr = '';
|
||
if(equals('html',mermaid_config.labelType)) {
|
||
labelTypeStr = 'html';
|
||
} else {
|
||
verticeText = verticeText.replace(/<br>/g, "\n");
|
||
labelTypeStr = 'text';
|
||
}
|
||
|
||
var radious = 0;
|
||
var _shape = '';
|
||
|
||
// Set the shape based parameters
|
||
switch(vertice.type){
|
||
case 'round':
|
||
radious = 5;
|
||
_shape = 'rect';
|
||
break;
|
||
case 'square':
|
||
_shape = 'rect';
|
||
break;
|
||
case 'diamond':
|
||
_shape = 'question';
|
||
break;
|
||
case 'odd':
|
||
_shape = 'rect_left_inv_arrow';
|
||
break;
|
||
case 'circle':
|
||
_shape = 'circle';
|
||
break;
|
||
default:
|
||
_shape = 'rect';
|
||
}
|
||
// Add the node
|
||
g.setNode(vertice.id, {labelType: labelTypeStr, shape:_shape, label: verticeText, rx: radious, ry: radious, class: classStr, style: style, id:vertice.id});
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Add edges to graph based on parsed graph defninition
|
||
* @param {Object} edges The edges to add to the graph
|
||
* @param {Object} g The graph object
|
||
*/
|
||
exports.addEdges = function (edges, g) {
|
||
var cnt=0;
|
||
var aHead;
|
||
edges.forEach(function (edge) {
|
||
cnt++;
|
||
|
||
// Set link type for rendering
|
||
if(edge.type === 'arrow_open'){
|
||
aHead = 'none';
|
||
}
|
||
else{
|
||
aHead = 'normal';
|
||
}
|
||
|
||
var style = '';
|
||
|
||
|
||
|
||
if(typeof edge.style !== 'undefined'){
|
||
edge.style.forEach(function(s){
|
||
style = style + s +';';
|
||
});
|
||
}
|
||
else{
|
||
switch(edge.stroke){
|
||
case 'normal':
|
||
style = 'stroke: #333; stroke-width: 1.5px;fill:none';
|
||
break;
|
||
case 'dotted':
|
||
style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;';
|
||
break;
|
||
case 'thick':
|
||
style = 'stroke: #333; stroke-width: 3.5px;fill:none';
|
||
break;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
// Add the edge to the graph
|
||
if (typeof edge.text === 'undefined') {
|
||
if(typeof edge.style === 'undefined'){
|
||
g.setEdge(edge.start, edge.end,{ style: style, arrowhead: aHead},cnt);
|
||
}else{
|
||
g.setEdge(edge.start, edge.end, {
|
||
style: style, arrowheadStyle: "fill: #333", arrowhead: aHead
|
||
},cnt);
|
||
}
|
||
}
|
||
// Edge with text
|
||
else {
|
||
var edgeText = edge.text.replace(/<br>/g, "\n");
|
||
if(typeof edge.style === 'undefined'){
|
||
//g.setEdge(edge.start, edge.end,{labelType: "text", style: "stroke: #333; stroke-width: 1.5px;fill:none", labelpos:'c', label: edgeText, arrowheadStyle: "fill: #333", arrowhead: aHead},cnt);
|
||
g.setEdge(edge.start, edge.end,{labelType: "html",style: style, labelpos:'c', label: '<span style="background:#e8e8e8">'+edge.text+'</span>', arrowheadStyle: "fill: #333", arrowhead: aHead},cnt);
|
||
}else{
|
||
g.setEdge(edge.start, edge.end, {
|
||
labelType: "text",style: style, arrowheadStyle: "fill: #333", label: edgeText, arrowhead: aHead
|
||
},cnt);
|
||
}
|
||
}
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Returns the all the styles from classDef statements in the graph definition.
|
||
* @returns {object} classDef styles
|
||
*/
|
||
exports.getClasses = function (text, isDot) {
|
||
var parser;
|
||
graph.clear();
|
||
if(isDot){
|
||
parser = dot.parser;
|
||
|
||
}else{
|
||
parser = flow.parser;
|
||
}
|
||
parser.yy = graph;
|
||
|
||
// Parse the graph definition
|
||
parser.parse(text);
|
||
|
||
var classDefStylesObj = {};
|
||
var classDefStyleStr = '';
|
||
|
||
var classes = graph.getClasses();
|
||
|
||
// Add default class if undefined
|
||
if(typeof(classes.default) === 'undefined') {
|
||
classes.default = {id:'default'};
|
||
classes.default.styles = ['fill:#eaeaea','stroke:#666','stroke-width:1.5px'];
|
||
classes.default.nodeLabelStyles = ['fill:#000','stroke:none','font-weight:300','font-family:"Helvetica Neue",Helvetica,Arial,sans-serf','font-size:14px'];
|
||
classes.default.edgeLabelStyles = ['fill:#000','stroke:none','font-weight:300','font-family:"Helvetica Neue",Helvetica,Arial,sans-serf','font-size:14px'];
|
||
}
|
||
return classes;
|
||
};
|
||
|
||
/**
|
||
* Draws a flowchart in the tag with id: id based on the graph definition in text.
|
||
* @param text
|
||
* @param id
|
||
*/
|
||
exports.draw = function (text, id,isDot) {
|
||
var parser;
|
||
graph.clear();
|
||
if(isDot){
|
||
parser = dot.parser;
|
||
|
||
}else{
|
||
parser = flow.parser;
|
||
}
|
||
parser.yy = graph;
|
||
|
||
// Parse the graph definition
|
||
parser.parse(text);
|
||
|
||
// Fetch the default direction, use TD if none was found
|
||
var dir;
|
||
dir = graph.getDirection();
|
||
if(typeof dir === 'undefined'){
|
||
dir='TD';
|
||
}
|
||
|
||
// Create the input mermaid.graph
|
||
var g = new dagreD3.graphlib.Graph({
|
||
multigraph:true,
|
||
compound: true
|
||
})
|
||
.setGraph({
|
||
rankdir: dir,
|
||
marginx: 20,
|
||
marginy: 20
|
||
|
||
})
|
||
.setDefaultEdgeLabel(function () {
|
||
return {};
|
||
});
|
||
|
||
var subGraphs = graph.getSubGraphs();
|
||
var i = 0;
|
||
subGraphs.forEach(function(subG){
|
||
i = i + 1;
|
||
var id = 'subG'+i;
|
||
graph.addVertex(id,undefined,undefined,undefined);
|
||
});
|
||
|
||
// Fetch the verices/nodes and edges/links from the parsed graph definition
|
||
var vert = graph.getVertices();
|
||
|
||
//console.log(vert);
|
||
var edges = graph.getEdges();
|
||
//g.setParent("A", "p");
|
||
//g.setParent("B", "p");
|
||
|
||
//console.log(subGraphs);
|
||
i = 0;
|
||
subGraphs.forEach(function(subG){
|
||
i = i + 1;
|
||
var id = 'subG'+i;
|
||
|
||
d3.selectAll('cluster').append('text');
|
||
|
||
subG.nodes.forEach(function(node){
|
||
//console.log('Setting node',node,' to subgraph '+id);
|
||
g.setParent(node,id);
|
||
});
|
||
});
|
||
exports.addVertices(vert, g);
|
||
exports.addEdges(edges, g);
|
||
|
||
// Create the renderer
|
||
var render = new dagreD3.render();
|
||
|
||
// Add custom shape for rhombus type of boc (decision)
|
||
render.shapes().question = function (parent, bbox, node) {
|
||
var w = bbox.width,
|
||
h = bbox.height,
|
||
s = (w + h) * 0.8,
|
||
points = [
|
||
{x: s / 2, y: 0},
|
||
{x: s, y: -s / 2},
|
||
{x: s / 2, y: -s},
|
||
{x: 0, y: -s / 2}
|
||
];
|
||
var shapeSvg = parent.insert("polygon", ":first-child")
|
||
.attr("points", points.map(function (d) {
|
||
return d.x + "," + d.y;
|
||
}).join(" "))
|
||
.attr("rx", 5)
|
||
.attr("ry", 5)
|
||
.attr("transform", "translate(" + (-s / 2) + "," + (s * 2 / 4) + ")");
|
||
node.intersect = function (point) {
|
||
return dagreD3.intersect.polygon(node, points, point);
|
||
};
|
||
return shapeSvg;
|
||
};
|
||
|
||
// Add custom shape for box with inverted arrow on left side
|
||
render.shapes().rect_left_inv_arrow = function (parent, bbox, node) {
|
||
var w = bbox.width,
|
||
h = bbox.height,
|
||
points = [
|
||
{x: -h/2, y: 0},
|
||
{x: w, y: 0},
|
||
{x: w, y: -h},
|
||
{x: -h/2, y: -h},
|
||
{x: 0, y: -h/2},
|
||
];
|
||
var shapeSvg = parent.insert("polygon", ":first-child")
|
||
.attr("points", points.map(function (d) {
|
||
return d.x + "," + d.y;
|
||
}).join(" "))
|
||
.attr("transform", "translate(" + (-w / 2) + "," + (h * 2 / 4) + ")");
|
||
node.intersect = function (point) {
|
||
return dagreD3.intersect.polygon(node, points, point);
|
||
};
|
||
return shapeSvg;
|
||
};
|
||
|
||
// Add our custom arrow - an empty arrowhead
|
||
render.arrows().none = function normal(parent, id, edge, type) {
|
||
var marker = parent.append("marker")
|
||
.attr("id", id)
|
||
.attr("viewBox", "0 0 10 10")
|
||
.attr("refX", 9)
|
||
.attr("refY", 5)
|
||
.attr("markerUnits", "strokeWidth")
|
||
.attr("markerWidth", 8)
|
||
.attr("markerHeight", 6)
|
||
.attr("orient", "auto");
|
||
|
||
var path = marker.append("path")
|
||
.attr("d", "M 0 0 L 0 0 L 0 0 z");
|
||
dagreD3.util.applyStyle(path, edge[type + "Style"]);
|
||
};
|
||
|
||
// Set up an SVG group so that we can translate the final graph.
|
||
var svg = d3.select("#" + id);
|
||
svgGroup = d3.select("#" + id + " g");
|
||
|
||
// Run the renderer. This is what draws the final graph.
|
||
render(d3.select("#" + id + " g"), g);
|
||
var svgb = document.querySelector('#mermaidChart0');
|
||
|
||
/*
|
||
var xPos = document.querySelectorAll('.clusters rect')[0].x.baseVal.value;
|
||
var width = document.querySelectorAll('.clusters rect')[0].width.baseVal.value;
|
||
var cluster = d3.selectAll('.cluster');
|
||
var te = cluster.append('text');
|
||
te.attr('x', xPos+width/2);
|
||
te.attr('y', 12);
|
||
//te.stroke('black');
|
||
te.attr('id', 'apa12');
|
||
te.style('text-anchor', 'middle');
|
||
te.text('Title for cluster');
|
||
*/
|
||
// Center the graph
|
||
svg.attr("height", g.graph().height );
|
||
svg.attr("width", g.graph().width );
|
||
svg.attr("viewBox", svgb.getBBox().x + ' 0 '+ g.graph().width+' '+ g.graph().height);
|
||
|
||
|
||
setTimeout(function(){
|
||
console.log('Fixing titles');
|
||
var i = 0;
|
||
subGraphs.forEach(function(subG){
|
||
console.log('Setting id '+id);
|
||
|
||
|
||
var clusterRects = document.querySelectorAll('#' + id + ' .clusters rect');
|
||
var clusters = document.querySelectorAll('#' + id + ' .cluster');
|
||
|
||
|
||
if(subG.title !== 'undefined'){
|
||
console.log(clusterRects[i]);
|
||
var xPos = clusterRects[i].x.baseVal.value;
|
||
var yPos = clusterRects[i].y.baseVal.value;
|
||
var width = clusterRects[i].width.baseVal.value;
|
||
var cluster = d3.select(clusters[i]);
|
||
var te = cluster.append('text');
|
||
te.attr('x', xPos+width/2);
|
||
te.attr('y', yPos +14);
|
||
te.attr('fill', 'black');
|
||
te.attr('stroke','none');
|
||
te.attr('id', id+'Text');
|
||
te.style('text-anchor', 'middle');
|
||
console.log('Title '+subG.title);
|
||
console.log('i',i);
|
||
console.log('x'+xPos+width/2);
|
||
console.log('y'+xPos);
|
||
te.text(subG.title);
|
||
}
|
||
i = i + 1;
|
||
});
|
||
},200);
|
||
};
|
||
},{"./dagre-d3":6,"./graphDb":8,"./parser/dot":9,"./parser/flow":10}],8:[function(_dereq_,module,exports){
|
||
/**
|
||
* Created by knut on 14-11-03.
|
||
*/
|
||
|
||
var vertices = {};
|
||
var edges = [];
|
||
var classes = [];
|
||
var subGraphs = [];
|
||
var direction;
|
||
// Functions to be run after graph rendering
|
||
var funs = [];
|
||
/**
|
||
* Function called by parser when a node definition has been found
|
||
* @param id
|
||
* @param text
|
||
* @param type
|
||
* @param style
|
||
*/
|
||
exports.addVertex = function (id, text, type, style) {
|
||
|
||
if(typeof id === 'undefined'){
|
||
return;
|
||
}
|
||
if(id.trim().length === 0){
|
||
return;
|
||
}
|
||
|
||
if (typeof vertices[id] === 'undefined') {
|
||
vertices[id] = {id: id, styles: [], classes:[]};
|
||
}
|
||
if (typeof text !== 'undefined') {
|
||
vertices[id].text = text;
|
||
}
|
||
if (typeof type !== 'undefined') {
|
||
vertices[id].type = type;
|
||
}
|
||
if (typeof type !== 'undefined') {
|
||
vertices[id].type = type;
|
||
}
|
||
if (typeof style !== 'undefined') {
|
||
if (style !== null) {
|
||
style.forEach(function (s) {
|
||
vertices[id].styles.push(s);
|
||
});
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Function called by parser when a link/edge definition has been found
|
||
* @param start
|
||
* @param end
|
||
* @param type
|
||
* @param linktext
|
||
*/
|
||
exports.addLink = function (start, end, type, linktext) {
|
||
//console.log('Got edge', start, end);
|
||
var edge = {start: start, end: end, type: undefined, text: ''};
|
||
linktext = type.text;
|
||
|
||
if (typeof linktext !== 'undefined') {
|
||
edge.text = linktext;
|
||
}
|
||
|
||
if (typeof type !== 'undefined') {
|
||
edge.type = type.type;
|
||
edge.stroke = type.stroke;
|
||
}
|
||
edges.push(edge);
|
||
};
|
||
/**
|
||
* Updates a link with a style
|
||
* @param pos
|
||
* @param style
|
||
*/
|
||
exports.updateLink = function (pos, style) {
|
||
var position = pos.substr(1);
|
||
edges[pos].style = style;
|
||
};
|
||
|
||
exports.addClass = function (id, style) {
|
||
if (typeof classes[id] === 'undefined') {
|
||
classes[id] = {id: id, styles: []};
|
||
}
|
||
|
||
if (typeof style !== 'undefined') {
|
||
if (style !== null) {
|
||
style.forEach(function (s) {
|
||
classes[id].styles.push(s);
|
||
});
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called by parser when a graph definition is found, stores the direction of the chart.
|
||
* @param dir
|
||
*/
|
||
exports.setDirection = function (dir) {
|
||
direction = dir;
|
||
};
|
||
|
||
/**
|
||
* Called by parser when a graph definition is found, stores the direction of the chart.
|
||
* @param dir
|
||
*/
|
||
exports.setClass = function (id,className) {
|
||
if(id.indexOf(',')>0){
|
||
id.split(',').forEach(function(id2){
|
||
if(typeof vertices[id2] !== 'undefined'){
|
||
vertices[id2].classes.push(className);
|
||
}
|
||
});
|
||
}else{
|
||
if(typeof vertices[id] !== 'undefined'){
|
||
vertices[id].classes.push(className);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* Called by parser when a graph definition is found, stores the direction of the chart.
|
||
* @param dir
|
||
*/
|
||
exports.setClickEvent = function (id,functionName) {
|
||
|
||
|
||
if(id.indexOf(',')>0){
|
||
id.split(',').forEach(function(id2) {
|
||
if (typeof vertices[id2] !== 'undefined') {
|
||
funs.push(function () {
|
||
var elem = document.getElementById(id2);
|
||
if (elem !== null) {
|
||
elem.onclick = function () {
|
||
eval(functionName + '(\'' + id2 + '\')'); // jshint ignore:line
|
||
};
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}else{
|
||
//console.log('Checking now for ::'+id);
|
||
if(typeof vertices[id] !== 'undefined'){
|
||
funs.push(function(){
|
||
var elem = document.getElementById(id);
|
||
if(elem !== null){
|
||
//console.log('id was NOT null: '+id);
|
||
elem.onclick = function(){eval(functionName+'(\'' + id + '\')');}; // jshint ignore:line
|
||
}
|
||
else{
|
||
//console.log('id was null: '+id);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
|
||
};
|
||
|
||
exports.bindFunctions = function(){
|
||
//setTimeout(function(){
|
||
funs.forEach(function(fun){
|
||
fun();
|
||
});
|
||
//},1000);
|
||
|
||
};
|
||
exports.getDirection = function () {
|
||
return direction;
|
||
};
|
||
/**
|
||
* Retrieval function for fetching the found nodes after parsing has completed.
|
||
* @returns {{}|*|vertices}
|
||
*/
|
||
exports.getVertices = function () {
|
||
return vertices;
|
||
};
|
||
|
||
/**
|
||
* Retrieval function for fetching the found links after parsing has completed.
|
||
* @returns {{}|*|edges}
|
||
*/
|
||
exports.getEdges = function () {
|
||
return edges;
|
||
};
|
||
|
||
/**
|
||
* Retrieval function for fetching the found class definitions after parsing has completed.
|
||
* @returns {{}|*|classes}
|
||
*/
|
||
exports.getClasses = function () {
|
||
return classes;
|
||
};
|
||
|
||
/**
|
||
* Clears the internal graph db so that a new graph can be parsed.
|
||
*/
|
||
exports.clear = function () {
|
||
vertices = {};
|
||
classes = {};
|
||
edges = [];
|
||
funs = [];
|
||
subGraphs = [];
|
||
};
|
||
/**
|
||
*
|
||
* @returns {string}
|
||
*/
|
||
exports.defaultStyle = function () {
|
||
return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;";
|
||
};
|
||
|
||
/**
|
||
* Clears the internal graph db so that a new graph can be parsed.
|
||
*/
|
||
exports.addSubGraph = function (list, title) {
|
||
function uniq(a) {
|
||
var prims = {"boolean":{}, "number":{}, "string":{}}, objs = [];
|
||
|
||
return a.filter(function(item) {
|
||
var type = typeof item;
|
||
if(type in prims)
|
||
return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true);
|
||
else
|
||
return objs.indexOf(item) >= 0 ? false : objs.push(item);
|
||
});
|
||
}
|
||
|
||
var subG = [];
|
||
|
||
subG = uniq(subG.concat.apply(subG,list));
|
||
//console.log(subG);
|
||
|
||
subGraphs.push({nodes:subG,title:title});
|
||
};
|
||
exports.getSubGraphs = function (list) {
|
||
return subGraphs;
|
||
};
|
||
|
||
},{}],9:[function(_dereq_,module,exports){
|
||
(function (process){
|
||
/* parser generated by jison 0.4.15 */
|
||
/*
|
||
Returns a Parser object of the following structure:
|
||
|
||
Parser: {
|
||
yy: {}
|
||
}
|
||
|
||
Parser.prototype: {
|
||
yy: {},
|
||
trace: function(),
|
||
symbols_: {associative list: name ==> number},
|
||
terminals_: {associative list: number ==> name},
|
||
productions_: [...],
|
||
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
|
||
table: [...],
|
||
defaultActions: {...},
|
||
parseError: function(str, hash),
|
||
parse: function(input),
|
||
|
||
lexer: {
|
||
EOF: 1,
|
||
parseError: function(str, hash),
|
||
setInput: function(input),
|
||
input: function(),
|
||
unput: function(str),
|
||
more: function(),
|
||
less: function(n),
|
||
pastInput: function(),
|
||
upcomingInput: function(),
|
||
showPosition: function(),
|
||
test_match: function(regex_match_array, rule_index),
|
||
next: function(),
|
||
lex: function(),
|
||
begin: function(condition),
|
||
popState: function(),
|
||
_currentRules: function(),
|
||
topState: function(),
|
||
pushState: function(condition),
|
||
|
||
options: {
|
||
ranges: boolean (optional: true ==> token location info will include a .range[] member)
|
||
flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
|
||
backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
|
||
},
|
||
|
||
performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
|
||
rules: [...],
|
||
conditions: {associative list: name ==> set},
|
||
}
|
||
}
|
||
|
||
|
||
token location info (@$, _$, etc.): {
|
||
first_line: n,
|
||
last_line: n,
|
||
first_column: n,
|
||
last_column: n,
|
||
range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)
|
||
}
|
||
|
||
|
||
the parseError function receives a 'hash' object with these members for lexer and parser errors: {
|
||
text: (matched text)
|
||
token: (the produced terminal token, if any)
|
||
line: (yylineno)
|
||
}
|
||
while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
|
||
loc: (yylloc)
|
||
expected: (string describing the set of expected tokens)
|
||
recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
|
||
}
|
||
*/
|
||
var parser = (function(){
|
||
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,6],$V2=[1,12],$V3=[1,13],$V4=[1,14],$V5=[1,15],$V6=[1,16],$V7=[1,17],$V8=[1,18],$V9=[1,19],$Va=[1,20],$Vb=[1,21],$Vc=[1,22],$Vd=[8,16,17,18,19,20,21,22,23,24,25,26],$Ve=[1,37],$Vf=[1,33],$Vg=[1,34],$Vh=[1,35],$Vi=[1,36],$Vj=[8,10,16,17,18,19,20,21,22,23,24,25,26,28,32,37,39,40,45,57,58],$Vk=[10,28],$Vl=[10,28,37,57,58],$Vm=[2,49],$Vn=[1,45],$Vo=[1,48],$Vp=[1,49],$Vq=[1,52],$Vr=[2,65],$Vs=[1,65],$Vt=[1,66],$Vu=[1,67],$Vv=[1,68],$Vw=[1,69],$Vx=[1,70],$Vy=[1,71],$Vz=[1,72],$VA=[1,73],$VB=[8,16,17,18,19,20,21,22,23,24,25,26,47],$VC=[10,28,37];
|
||
var parser = {trace: function trace() { },
|
||
yy: {},
|
||
symbols_: {"error":2,"expressions":3,"graph":4,"EOF":5,"graphStatement":6,"idStatement":7,"{":8,"stmt_list":9,"}":10,"strict":11,"GRAPH":12,"DIGRAPH":13,"textNoTags":14,"textNoTagsToken":15,"ALPHA":16,"NUM":17,"COLON":18,"PLUS":19,"EQUALS":20,"MULT":21,"DOT":22,"BRKT":23,"SPACE":24,"MINUS":25,"keywords":26,"stmt":27,";":28,"node_stmt":29,"edge_stmt":30,"attr_stmt":31,"=":32,"subgraph":33,"attr_list":34,"NODE":35,"EDGE":36,"[":37,"a_list":38,"]":39,",":40,"edgeRHS":41,"node_id":42,"edgeop":43,"port":44,":":45,"compass_pt":46,"SUBGRAPH":47,"n":48,"ne":49,"e":50,"se":51,"s":52,"sw":53,"w":54,"nw":55,"c":56,"ARROW_POINT":57,"ARROW_OPEN":58,"$accept":0,"$end":1},
|
||
terminals_: {2:"error",5:"EOF",8:"{",10:"}",11:"strict",12:"GRAPH",13:"DIGRAPH",16:"ALPHA",17:"NUM",18:"COLON",19:"PLUS",20:"EQUALS",21:"MULT",22:"DOT",23:"BRKT",24:"SPACE",25:"MINUS",26:"keywords",28:";",32:"=",35:"NODE",36:"EDGE",37:"[",39:"]",40:",",45:":",47:"SUBGRAPH",48:"n",49:"ne",50:"e",51:"se",52:"s",53:"sw",54:"w",55:"nw",56:"c",57:"ARROW_POINT",58:"ARROW_OPEN"},
|
||
productions_: [0,[3,2],[4,5],[4,6],[4,4],[6,1],[6,1],[7,1],[14,1],[14,2],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[9,1],[9,3],[27,1],[27,1],[27,1],[27,3],[27,1],[31,2],[31,2],[31,2],[34,4],[34,3],[34,3],[34,2],[38,5],[38,5],[38,3],[30,3],[30,3],[30,2],[30,2],[41,3],[41,3],[41,2],[41,2],[29,2],[29,1],[42,2],[42,1],[44,4],[44,2],[44,2],[33,5],[33,4],[33,3],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,0],[43,1],[43,1]],
|
||
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
|
||
/* this == yyval */
|
||
|
||
var $0 = $$.length - 1;
|
||
switch (yystate) {
|
||
case 1:
|
||
this.$=$$[$0-1];
|
||
break;
|
||
case 2:
|
||
this.$=$$[$0-4];
|
||
break;
|
||
case 3:
|
||
this.$=$$[$0-5];
|
||
break;
|
||
case 4:
|
||
this.$=$$[$0-3];
|
||
break;
|
||
case 8: case 10: case 11:
|
||
this.$=$$[$0];
|
||
break;
|
||
case 9:
|
||
this.$=$$[$0-1]+''+$$[$0];
|
||
break;
|
||
case 12: case 13: case 14: case 15: case 16: case 18: case 19: case 20:
|
||
this.$ = $$[$0];
|
||
break;
|
||
case 17:
|
||
this.$ = '<br>';
|
||
break;
|
||
case 39:
|
||
this.$='oy';
|
||
break;
|
||
case 40:
|
||
|
||
yy.addLink($$[$0-1],$$[$0].id,$$[$0].op);
|
||
this.$='oy';
|
||
break;
|
||
case 42:
|
||
|
||
yy.addLink($$[$0-1],$$[$0].id,$$[$0].op);
|
||
this.$={op:$$[$0-2],id:$$[$0-1]};
|
||
|
||
break;
|
||
case 44:
|
||
|
||
this.$={op:$$[$0-1],id:$$[$0]};
|
||
|
||
break;
|
||
case 48:
|
||
yy.addVertex($$[$0-1]);this.$=$$[$0-1];
|
||
break;
|
||
case 49:
|
||
yy.addVertex($$[$0]);this.$=$$[$0];
|
||
break;
|
||
case 66:
|
||
this.$='arrow';
|
||
break;
|
||
case 67:
|
||
this.$='arrow_open';
|
||
break;
|
||
}
|
||
},
|
||
table: [{3:1,4:2,6:3,11:[1,4],12:$V0,13:$V1},{1:[3]},{5:[1,7]},{7:8,8:[1,9],14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{6:23,12:$V0,13:$V1},o($Vd,[2,5]),o($Vd,[2,6]),{1:[2,1]},{8:[1,24]},{7:30,8:$Ve,9:25,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},o([8,10,28,32,37,39,40,45,57,58],[2,7],{15:38,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc}),o($Vj,[2,8]),o($Vj,[2,10]),o($Vj,[2,11]),o($Vj,[2,12]),o($Vj,[2,13]),o($Vj,[2,14]),o($Vj,[2,15]),o($Vj,[2,16]),o($Vj,[2,17]),o($Vj,[2,18]),o($Vj,[2,19]),o($Vj,[2,20]),{7:39,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{7:30,8:$Ve,9:40,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{10:[1,41]},{10:[2,21],28:[1,42]},o($Vk,[2,23]),o($Vk,[2,24]),o($Vk,[2,25]),o($Vl,$Vm,{44:44,32:[1,43],45:$Vn}),o($Vk,[2,27],{41:46,43:47,57:$Vo,58:$Vp}),o($Vk,[2,47],{43:47,34:50,41:51,37:$Vq,57:$Vo,58:$Vp}),{34:53,37:$Vq},{34:54,37:$Vq},{34:55,37:$Vq},{7:56,8:[1,57],14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{7:30,8:$Ve,9:58,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},o($Vj,[2,9]),{8:[1,59]},{10:[1,60]},{5:[2,4]},{7:30,8:$Ve,9:61,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{7:62,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},o($Vl,[2,48]),o($Vl,$Vr,{14:10,15:11,7:63,46:64,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,48:$Vs,49:$Vt,50:$Vu,51:$Vv,52:$Vw,53:$Vx,54:$Vy,55:$Vz,56:$VA}),o($Vk,[2,41],{34:74,37:$Vq}),{7:77,8:$Ve,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,33:76,42:75,47:$Vi},o($VB,[2,66]),o($VB,[2,67]),o($Vk,[2,46]),o($Vk,[2,40],{34:78,37:$Vq}),{7:81,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,38:79,39:[1,80]},o($Vk,[2,28]),o($Vk,[2,29]),o($Vk,[2,30]),{8:[1,82]},{7:30,8:$Ve,9:83,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{10:[1,84]},{7:30,8:$Ve,9:85,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{5:[2,2]},{10:[2,22]},o($Vk,[2,26]),o($Vl,[2,51],{45:[1,86]}),o($Vl,[2,52]),o($Vl,[2,56]),o($Vl,[2,57]),o($Vl,[2,58]),o($Vl,[2,59]),o($Vl,[2,60]),o($Vl,[2,61]),o($Vl,[2,62]),o($Vl,[2,63]),o($Vl,[2,64]),o($Vk,[2,38]),o($VC,[2,44],{43:47,41:87,57:$Vo,58:$Vp}),o($VC,[2,45],{43:47,41:88,57:$Vo,58:$Vp}),o($Vl,$Vm,{44:44,45:$Vn}),o($Vk,[2,39]),{39:[1,89]},o($Vk,[2,34],{34:90,37:$Vq}),{32:[1,91]},{7:30,8:$Ve,9:92,12:$Vf,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,27:26,29:27,30:28,31:29,33:31,35:$Vg,36:$Vh,42:32,47:$Vi},{10:[1,93]},o($Vl,[2,55]),{10:[1,94]},o($Vl,$Vr,{46:95,48:$Vs,49:$Vt,50:$Vu,51:$Vv,52:$Vw,53:$Vx,54:$Vy,55:$Vz,56:$VA}),o($VC,[2,42]),o($VC,[2,43]),o($Vk,[2,33],{34:96,37:$Vq}),o($Vk,[2,32]),{7:97,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc},{10:[1,98]},o($Vl,[2,54]),{5:[2,3]},o($Vl,[2,50]),o($Vk,[2,31]),{28:[1,99],39:[2,37],40:[1,100]},o($Vl,[2,53]),{7:81,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,38:101},{7:81,14:10,15:11,16:$V2,17:$V3,18:$V4,19:$V5,20:$V6,21:$V7,22:$V8,23:$V9,24:$Va,25:$Vb,26:$Vc,38:102},{39:[2,35]},{39:[2,36]}],
|
||
defaultActions: {7:[2,1],41:[2,4],60:[2,2],61:[2,22],94:[2,3],101:[2,35],102:[2,36]},
|
||
parseError: function parseError(str, hash) {
|
||
if (hash.recoverable) {
|
||
this.trace(str);
|
||
} else {
|
||
throw new Error(str);
|
||
}
|
||
},
|
||
parse: function parse(input) {
|
||
var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
|
||
var args = lstack.slice.call(arguments, 1);
|
||
var lexer = Object.create(this.lexer);
|
||
var sharedState = { yy: {} };
|
||
for (var k in this.yy) {
|
||
if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
|
||
sharedState.yy[k] = this.yy[k];
|
||
}
|
||
}
|
||
lexer.setInput(input, sharedState.yy);
|
||
sharedState.yy.lexer = lexer;
|
||
sharedState.yy.parser = this;
|
||
if (typeof lexer.yylloc == 'undefined') {
|
||
lexer.yylloc = {};
|
||
}
|
||
var yyloc = lexer.yylloc;
|
||
lstack.push(yyloc);
|
||
var ranges = lexer.options && lexer.options.ranges;
|
||
if (typeof sharedState.yy.parseError === 'function') {
|
||
this.parseError = sharedState.yy.parseError;
|
||
} else {
|
||
this.parseError = Object.getPrototypeOf(this).parseError;
|
||
}
|
||
function popStack(n) {
|
||
stack.length = stack.length - 2 * n;
|
||
vstack.length = vstack.length - n;
|
||
lstack.length = lstack.length - n;
|
||
}
|
||
_token_stack:
|
||
function lex() {
|
||
var token;
|
||
token = lexer.lex() || EOF;
|
||
if (typeof token !== 'number') {
|
||
token = self.symbols_[token] || token;
|
||
}
|
||
return token;
|
||
}
|
||
var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
|
||
while (true) {
|
||
state = stack[stack.length - 1];
|
||
if (this.defaultActions[state]) {
|
||
action = this.defaultActions[state];
|
||
} else {
|
||
if (symbol === null || typeof symbol == 'undefined') {
|
||
symbol = lex();
|
||
}
|
||
action = table[state] && table[state][symbol];
|
||
}
|
||
if (typeof action === 'undefined' || !action.length || !action[0]) {
|
||
var errStr = '';
|
||
expected = [];
|
||
for (p in table[state]) {
|
||
if (this.terminals_[p] && p > TERROR) {
|
||
expected.push('\'' + this.terminals_[p] + '\'');
|
||
}
|
||
}
|
||
if (lexer.showPosition) {
|
||
errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
|
||
} else {
|
||
errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
|
||
}
|
||
this.parseError(errStr, {
|
||
text: lexer.match,
|
||
token: this.terminals_[symbol] || symbol,
|
||
line: lexer.yylineno,
|
||
loc: yyloc,
|
||
expected: expected
|
||
});
|
||
}
|
||
if (action[0] instanceof Array && action.length > 1) {
|
||
throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
|
||
}
|
||
switch (action[0]) {
|
||
case 1:
|
||
stack.push(symbol);
|
||
vstack.push(lexer.yytext);
|
||
lstack.push(lexer.yylloc);
|
||
stack.push(action[1]);
|
||
symbol = null;
|
||
if (!preErrorSymbol) {
|
||
yyleng = lexer.yyleng;
|
||
yytext = lexer.yytext;
|
||
yylineno = lexer.yylineno;
|
||
yyloc = lexer.yylloc;
|
||
if (recovering > 0) {
|
||
recovering--;
|
||
}
|
||
} else {
|
||
symbol = preErrorSymbol;
|
||
preErrorSymbol = null;
|
||
}
|
||
break;
|
||
case 2:
|
||
len = this.productions_[action[1]][1];
|
||
yyval.$ = vstack[vstack.length - len];
|
||
yyval._$ = {
|
||
first_line: lstack[lstack.length - (len || 1)].first_line,
|
||
last_line: lstack[lstack.length - 1].last_line,
|
||
first_column: lstack[lstack.length - (len || 1)].first_column,
|
||
last_column: lstack[lstack.length - 1].last_column
|
||
};
|
||
if (ranges) {
|
||
yyval._$.range = [
|
||
lstack[lstack.length - (len || 1)].range[0],
|
||
lstack[lstack.length - 1].range[1]
|
||
];
|
||
}
|
||
r = this.performAction.apply(yyval, [
|
||
yytext,
|
||
yyleng,
|
||
yylineno,
|
||
sharedState.yy,
|
||
action[1],
|
||
vstack,
|
||
lstack
|
||
].concat(args));
|
||
if (typeof r !== 'undefined') {
|
||
return r;
|
||
}
|
||
if (len) {
|
||
stack = stack.slice(0, -1 * len * 2);
|
||
vstack = vstack.slice(0, -1 * len);
|
||
lstack = lstack.slice(0, -1 * len);
|
||
}
|
||
stack.push(this.productions_[action[1]][0]);
|
||
vstack.push(yyval.$);
|
||
lstack.push(yyval._$);
|
||
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
|
||
stack.push(newState);
|
||
break;
|
||
case 3:
|
||
return true;
|
||
}
|
||
}
|
||
return true;
|
||
}};
|
||
|
||
/* generated by jison-lex 0.3.4 */
|
||
var lexer = (function(){
|
||
var lexer = ({
|
||
|
||
EOF:1,
|
||
|
||
parseError:function parseError(str, hash) {
|
||
if (this.yy.parser) {
|
||
this.yy.parser.parseError(str, hash);
|
||
} else {
|
||
throw new Error(str);
|
||
}
|
||
},
|
||
|
||
// resets the lexer, sets new input
|
||
setInput:function (input, yy) {
|
||
this.yy = yy || this.yy || {};
|
||
this._input = input;
|
||
this._more = this._backtrack = this.done = false;
|
||
this.yylineno = this.yyleng = 0;
|
||
this.yytext = this.matched = this.match = '';
|
||
this.conditionStack = ['INITIAL'];
|
||
this.yylloc = {
|
||
first_line: 1,
|
||
first_column: 0,
|
||
last_line: 1,
|
||
last_column: 0
|
||
};
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [0,0];
|
||
}
|
||
this.offset = 0;
|
||
return this;
|
||
},
|
||
|
||
// consumes and returns one char from the input
|
||
input:function () {
|
||
var ch = this._input[0];
|
||
this.yytext += ch;
|
||
this.yyleng++;
|
||
this.offset++;
|
||
this.match += ch;
|
||
this.matched += ch;
|
||
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
||
if (lines) {
|
||
this.yylineno++;
|
||
this.yylloc.last_line++;
|
||
} else {
|
||
this.yylloc.last_column++;
|
||
}
|
||
if (this.options.ranges) {
|
||
this.yylloc.range[1]++;
|
||
}
|
||
|
||
this._input = this._input.slice(1);
|
||
return ch;
|
||
},
|
||
|
||
// unshifts one char (or a string) into the input
|
||
unput:function (ch) {
|
||
var len = ch.length;
|
||
var lines = ch.split(/(?:\r\n?|\n)/g);
|
||
|
||
this._input = ch + this._input;
|
||
this.yytext = this.yytext.substr(0, this.yytext.length - len);
|
||
//this.yyleng -= len;
|
||
this.offset -= len;
|
||
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
|
||
this.match = this.match.substr(0, this.match.length - 1);
|
||
this.matched = this.matched.substr(0, this.matched.length - 1);
|
||
|
||
if (lines.length - 1) {
|
||
this.yylineno -= lines.length - 1;
|
||
}
|
||
var r = this.yylloc.range;
|
||
|
||
this.yylloc = {
|
||
first_line: this.yylloc.first_line,
|
||
last_line: this.yylineno + 1,
|
||
first_column: this.yylloc.first_column,
|
||
last_column: lines ?
|
||
(lines.length === oldLines.length ? this.yylloc.first_column : 0)
|
||
+ oldLines[oldLines.length - lines.length].length - lines[0].length :
|
||
this.yylloc.first_column - len
|
||
};
|
||
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [r[0], r[0] + this.yyleng - len];
|
||
}
|
||
this.yyleng = this.yytext.length;
|
||
return this;
|
||
},
|
||
|
||
// When called from action, caches matched text and appends it on next action
|
||
more:function () {
|
||
this._more = true;
|
||
return this;
|
||
},
|
||
|
||
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
|
||
reject:function () {
|
||
if (this.options.backtrack_lexer) {
|
||
this._backtrack = true;
|
||
} else {
|
||
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
|
||
text: "",
|
||
token: null,
|
||
line: this.yylineno
|
||
});
|
||
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// retain first n characters of the match
|
||
less:function (n) {
|
||
this.unput(this.match.slice(n));
|
||
},
|
||
|
||
// displays already matched input, i.e. for error messages
|
||
pastInput:function () {
|
||
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
||
return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
|
||
},
|
||
|
||
// displays upcoming input, i.e. for error messages
|
||
upcomingInput:function () {
|
||
var next = this.match;
|
||
if (next.length < 20) {
|
||
next += this._input.substr(0, 20-next.length);
|
||
}
|
||
return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
|
||
},
|
||
|
||
// displays the character position where the lexing error occurred, i.e. for error messages
|
||
showPosition:function () {
|
||
var pre = this.pastInput();
|
||
var c = new Array(pre.length + 1).join("-");
|
||
return pre + this.upcomingInput() + "\n" + c + "^";
|
||
},
|
||
|
||
// test the lexed token: return FALSE when not a match, otherwise return token
|
||
test_match:function (match, indexed_rule) {
|
||
var token,
|
||
lines,
|
||
backup;
|
||
|
||
if (this.options.backtrack_lexer) {
|
||
// save context
|
||
backup = {
|
||
yylineno: this.yylineno,
|
||
yylloc: {
|
||
first_line: this.yylloc.first_line,
|
||
last_line: this.last_line,
|
||
first_column: this.yylloc.first_column,
|
||
last_column: this.yylloc.last_column
|
||
},
|
||
yytext: this.yytext,
|
||
match: this.match,
|
||
matches: this.matches,
|
||
matched: this.matched,
|
||
yyleng: this.yyleng,
|
||
offset: this.offset,
|
||
_more: this._more,
|
||
_input: this._input,
|
||
yy: this.yy,
|
||
conditionStack: this.conditionStack.slice(0),
|
||
done: this.done
|
||
};
|
||
if (this.options.ranges) {
|
||
backup.yylloc.range = this.yylloc.range.slice(0);
|
||
}
|
||
}
|
||
|
||
lines = match[0].match(/(?:\r\n?|\n).*/g);
|
||
if (lines) {
|
||
this.yylineno += lines.length;
|
||
}
|
||
this.yylloc = {
|
||
first_line: this.yylloc.last_line,
|
||
last_line: this.yylineno + 1,
|
||
first_column: this.yylloc.last_column,
|
||
last_column: lines ?
|
||
lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length :
|
||
this.yylloc.last_column + match[0].length
|
||
};
|
||
this.yytext += match[0];
|
||
this.match += match[0];
|
||
this.matches = match;
|
||
this.yyleng = this.yytext.length;
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [this.offset, this.offset += this.yyleng];
|
||
}
|
||
this._more = false;
|
||
this._backtrack = false;
|
||
this._input = this._input.slice(match[0].length);
|
||
this.matched += match[0];
|
||
token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
|
||
if (this.done && this._input) {
|
||
this.done = false;
|
||
}
|
||
if (token) {
|
||
return token;
|
||
} else if (this._backtrack) {
|
||
// recover context
|
||
for (var k in backup) {
|
||
this[k] = backup[k];
|
||
}
|
||
return false; // rule action called reject() implying the next rule should be tested instead.
|
||
}
|
||
return false;
|
||
},
|
||
|
||
// return next match in input
|
||
next:function () {
|
||
if (this.done) {
|
||
return this.EOF;
|
||
}
|
||
if (!this._input) {
|
||
this.done = true;
|
||
}
|
||
|
||
var token,
|
||
match,
|
||
tempMatch,
|
||
index;
|
||
if (!this._more) {
|
||
this.yytext = '';
|
||
this.match = '';
|
||
}
|
||
var rules = this._currentRules();
|
||
for (var i = 0; i < rules.length; i++) {
|
||
tempMatch = this._input.match(this.rules[rules[i]]);
|
||
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
|
||
match = tempMatch;
|
||
index = i;
|
||
if (this.options.backtrack_lexer) {
|
||
token = this.test_match(tempMatch, rules[i]);
|
||
if (token !== false) {
|
||
return token;
|
||
} else if (this._backtrack) {
|
||
match = false;
|
||
continue; // rule action called reject() implying a rule MISmatch.
|
||
} else {
|
||
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
||
return false;
|
||
}
|
||
} else if (!this.options.flex) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (match) {
|
||
token = this.test_match(match, rules[index]);
|
||
if (token !== false) {
|
||
return token;
|
||
}
|
||
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
||
return false;
|
||
}
|
||
if (this._input === "") {
|
||
return this.EOF;
|
||
} else {
|
||
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
|
||
text: "",
|
||
token: null,
|
||
line: this.yylineno
|
||
});
|
||
}
|
||
},
|
||
|
||
// return next match that has a token
|
||
lex:function lex() {
|
||
var r = this.next();
|
||
if (r) {
|
||
return r;
|
||
} else {
|
||
return this.lex();
|
||
}
|
||
},
|
||
|
||
// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
|
||
begin:function begin(condition) {
|
||
this.conditionStack.push(condition);
|
||
},
|
||
|
||
// pop the previously active lexer condition state off the condition stack
|
||
popState:function popState() {
|
||
var n = this.conditionStack.length - 1;
|
||
if (n > 0) {
|
||
return this.conditionStack.pop();
|
||
} else {
|
||
return this.conditionStack[0];
|
||
}
|
||
},
|
||
|
||
// produce the lexer rule set which is active for the currently active lexer condition state
|
||
_currentRules:function _currentRules() {
|
||
if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
|
||
return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
|
||
} else {
|
||
return this.conditions["INITIAL"].rules;
|
||
}
|
||
},
|
||
|
||
// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
|
||
topState:function topState(n) {
|
||
n = this.conditionStack.length - 1 - Math.abs(n || 0);
|
||
if (n >= 0) {
|
||
return this.conditionStack[n];
|
||
} else {
|
||
return "INITIAL";
|
||
}
|
||
},
|
||
|
||
// alias for begin(condition)
|
||
pushState:function pushState(condition) {
|
||
this.begin(condition);
|
||
},
|
||
|
||
// return the number of states currently on the stack
|
||
stateStackSize:function stateStackSize() {
|
||
return this.conditionStack.length;
|
||
},
|
||
options: {},
|
||
performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
|
||
var YYSTATE=YY_START;
|
||
switch($avoiding_name_collisions) {
|
||
case 0:return 'STYLE';
|
||
break;
|
||
case 1:return 'LINKSTYLE';
|
||
break;
|
||
case 2:return 'CLASSDEF';
|
||
break;
|
||
case 3:return 'CLASS';
|
||
break;
|
||
case 4:return 'CLICK';
|
||
break;
|
||
case 5:return 12;
|
||
break;
|
||
case 6:return 13;
|
||
break;
|
||
case 7:return 47;
|
||
break;
|
||
case 8:return 35;
|
||
break;
|
||
case 9:return 36;
|
||
break;
|
||
case 10:return 'DIR';
|
||
break;
|
||
case 11:return 'DIR';
|
||
break;
|
||
case 12:return 'DIR';
|
||
break;
|
||
case 13:return 'DIR';
|
||
break;
|
||
case 14:return 'DIR';
|
||
break;
|
||
case 15:return 'DIR';
|
||
break;
|
||
case 16:return 17;
|
||
break;
|
||
case 17:return 23;
|
||
break;
|
||
case 18:return 18;
|
||
break;
|
||
case 19:return 28;
|
||
break;
|
||
case 20:return 40;
|
||
break;
|
||
case 21:return 32;
|
||
break;
|
||
case 22:return 21;
|
||
break;
|
||
case 23:return 22;
|
||
break;
|
||
case 24:return 'ARROW_CROSS';
|
||
break;
|
||
case 25:return 57;
|
||
break;
|
||
case 26:return 'ARROW_CIRCLE';
|
||
break;
|
||
case 27:return 58;
|
||
break;
|
||
case 28:return 25;
|
||
break;
|
||
case 29:return 19;
|
||
break;
|
||
case 30:return 20;
|
||
break;
|
||
case 31:return 16;
|
||
break;
|
||
case 32:return 'PIPE';
|
||
break;
|
||
case 33:return 'PS';
|
||
break;
|
||
case 34:return 'PE';
|
||
break;
|
||
case 35:return 37;
|
||
break;
|
||
case 36:return 39;
|
||
break;
|
||
case 37:return 8
|
||
break;
|
||
case 38:return 10
|
||
break;
|
||
case 39:return 'QUOTE';
|
||
break;
|
||
case 40:return 24;
|
||
break;
|
||
case 41:return 'NEWLINE';
|
||
break;
|
||
case 42:return 5;
|
||
break;
|
||
}
|
||
},
|
||
rules: [/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:digraph\b)/,/^(?:subgraph\b)/,/^(?:node\b)/,/^(?:edge\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:--[x])/,/^(?:->)/,/^(?:--[o])/,/^(?:--)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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\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-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\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\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\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\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\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]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC_])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\s)/,/^(?:\n)/,/^(?:$)/],
|
||
conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"inclusive":true}}
|
||
});
|
||
return lexer;
|
||
})();
|
||
parser.lexer = lexer;
|
||
function Parser () {
|
||
this.yy = {};
|
||
}
|
||
Parser.prototype = parser;parser.Parser = Parser;
|
||
return new Parser;
|
||
})();
|
||
|
||
|
||
if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') {
|
||
exports.parser = parser;
|
||
exports.Parser = parser.Parser;
|
||
exports.parse = function () { return parser.parse.apply(parser, arguments); };
|
||
exports.main = function commonjsMain(args) {
|
||
if (!args[1]) {
|
||
console.log('Usage: '+args[0]+' FILE');
|
||
process.exit(1);
|
||
}
|
||
var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8");
|
||
return exports.parser.parse(source);
|
||
};
|
||
if (typeof module !== 'undefined' && _dereq_.main === module) {
|
||
exports.main(process.argv.slice(1));
|
||
}
|
||
}
|
||
}).call(this,_dereq_("1YiZ5S"))
|
||
},{"1YiZ5S":3,"fs":1,"path":2}],10:[function(_dereq_,module,exports){
|
||
(function (process){
|
||
/* parser generated by jison 0.4.15 */
|
||
/*
|
||
Returns a Parser object of the following structure:
|
||
|
||
Parser: {
|
||
yy: {}
|
||
}
|
||
|
||
Parser.prototype: {
|
||
yy: {},
|
||
trace: function(),
|
||
symbols_: {associative list: name ==> number},
|
||
terminals_: {associative list: number ==> name},
|
||
productions_: [...],
|
||
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
|
||
table: [...],
|
||
defaultActions: {...},
|
||
parseError: function(str, hash),
|
||
parse: function(input),
|
||
|
||
lexer: {
|
||
EOF: 1,
|
||
parseError: function(str, hash),
|
||
setInput: function(input),
|
||
input: function(),
|
||
unput: function(str),
|
||
more: function(),
|
||
less: function(n),
|
||
pastInput: function(),
|
||
upcomingInput: function(),
|
||
showPosition: function(),
|
||
test_match: function(regex_match_array, rule_index),
|
||
next: function(),
|
||
lex: function(),
|
||
begin: function(condition),
|
||
popState: function(),
|
||
_currentRules: function(),
|
||
topState: function(),
|
||
pushState: function(condition),
|
||
|
||
options: {
|
||
ranges: boolean (optional: true ==> token location info will include a .range[] member)
|
||
flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
|
||
backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
|
||
},
|
||
|
||
performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
|
||
rules: [...],
|
||
conditions: {associative list: name ==> set},
|
||
}
|
||
}
|
||
|
||
|
||
token location info (@$, _$, etc.): {
|
||
first_line: n,
|
||
last_line: n,
|
||
first_column: n,
|
||
last_column: n,
|
||
range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)
|
||
}
|
||
|
||
|
||
the parseError function receives a 'hash' object with these members for lexer and parser errors: {
|
||
text: (matched text)
|
||
token: (the produced terminal token, if any)
|
||
line: (yylineno)
|
||
}
|
||
while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
|
||
loc: (yylloc)
|
||
expected: (string describing the set of expected tokens)
|
||
recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
|
||
}
|
||
*/
|
||
var parser = (function(){
|
||
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,9,10,12,19,29,67,68,69,70,71,76,77,79,81,82,84,85,87,88,89],$V1=[2,2],$V2=[1,9],$V3=[1,10],$V4=[1,11],$V5=[1,12],$V6=[1,20],$V7=[1,23],$V8=[1,24],$V9=[1,25],$Va=[1,26],$Vb=[1,27],$Vc=[1,32],$Vd=[1,21],$Ve=[1,34],$Vf=[1,31],$Vg=[1,33],$Vh=[1,39],$Vi=[1,38],$Vj=[1,35],$Vk=[1,36],$Vl=[1,37],$Vm=[1,9,10,12,19,29,32,67,68,69,70,71,76,77,79,81,82,84,85,87,88,89],$Vn=[29,67,68,69,70,71,76,77,79,81,82,84,85,87,88,89],$Vo=[2,19],$Vp=[1,51],$Vq=[1,52],$Vr=[1,50],$Vs=[1,75],$Vt=[1,67],$Vu=[1,76],$Vv=[1,63],$Vw=[1,62],$Vx=[1,77],$Vy=[1,78],$Vz=[1,68],$VA=[1,65],$VB=[1,64],$VC=[1,70],$VD=[1,71],$VE=[1,72],$VF=[1,73],$VG=[1,74],$VH=[9,10,19],$VI=[1,85],$VJ=[1,86],$VK=[1,87],$VL=[1,88],$VM=[1,89],$VN=[1,90],$VO=[1,91],$VP=[1,92],$VQ=[1,93],$VR=[1,94],$VS=[1,95],$VT=[1,96],$VU=[9,10,19,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61],$VV=[9,10,12,15,19,36,38,40,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,76,79,81,82,84,85,87,88,89],$VW=[9,10,11,12,13,15,16,19,29,32,36,37,38,39,40,41,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,67,68,69,70,71,76,79,81,82,84,85,87,88,89,90,91,92],$VX=[1,110],$VY=[1,113],$VZ=[1,111],$V_=[9,10,12,19,29,32,67,68,69,70,71,76,77,79,81,82,84,85,87,88,89],$V$=[9,10,11,12,13,15,16,19,29,32,37,39,41,44,47,49,62,67,68,69,70,71,76,79,81,82,84,85,87,88,89],$V01=[9,10,11,12,13,15,16,19,29,32,36,37,38,39,40,41,44,47,49,50,51,52,53,62,67,68,69,70,71,76,79,81,82,84,85,87,88,89,90,91,92],$V11=[2,122],$V21=[1,139],$V31=[1,128],$V41=[1,129],$V51=[1,126],$V61=[1,127],$V71=[1,130],$V81=[1,131],$V91=[1,135],$Va1=[1,136],$Vb1=[1,134],$Vc1=[1,137],$Vd1=[1,125],$Ve1=[1,132],$Vf1=[1,133],$Vg1=[1,138],$Vh1=[76,79,81,82,84,85,87,88,89],$Vi1=[12,62,76,79,81,82,84,85,87,88,89],$Vj1=[1,164],$Vk1=[1,163],$Vl1=[9,11,12,13,15,16,19,29,32,36,37,38,39,40,41,44,47,49,50,51,52,53,62,67,68,69,70,71,76,79,81,82,84,85,87,88,89,90,91,92],$Vm1=[1,197],$Vn1=[1,194],$Vo1=[1,201],$Vp1=[1,198],$Vq1=[1,195],$Vr1=[1,202],$Vs1=[1,192],$Vt1=[1,193],$Vu1=[1,196],$Vv1=[1,199],$Vw1=[1,200],$Vx1=[11,12,13,15,16,29,32,44,47,49,67,68,69,70,71,76,79,81,82,84,85,87,88,89],$Vy1=[1,217],$Vz1=[9,10,19,79],$VA1=[9,10,12,19,44,67,75,76,77,79,81,82,83,84,85];
|
||
var parser = {trace: function trace() { },
|
||
yy: {},
|
||
symbols_: {"error":2,"mermaidDoc":3,"graphConfig":4,"document":5,"line":6,"spaceListNewline":7,"statement":8,"SEMI":9,"EOF":10,"GRAPH":11,"SPACE":12,"DIR":13,"FirstStmtSeperator":14,"TAGEND":15,"TAGSTART":16,"UP":17,"DOWN":18,"NEWLINE":19,"spaceList":20,"commentStatement":21,"verticeStatement":22,"separator":23,"styleStatement":24,"linkStyleStatement":25,"classDefStatement":26,"classStatement":27,"clickStatement":28,"subgraph":29,"text":30,"endStatement":31,"end":32,"vertex":33,"link":34,"alphaNum":35,"SQS":36,"SQE":37,"PS":38,"PE":39,"DIAMOND_START":40,"DIAMOND_STOP":41,"alphaNumStatement":42,"alphaNumToken":43,"MINUS":44,"linkStatement":45,"arrowText":46,"--":47,"-.":48,"==":49,"ARROW_POINT":50,"ARROW_CIRCLE":51,"ARROW_CROSS":52,"ARROW_OPEN":53,"DOTTED_ARROW_POINT":54,"DOTTED_ARROW_CIRCLE":55,"DOTTED_ARROW_CROSS":56,"DOTTED_ARROW_OPEN":57,"THICK_ARROW_POINT":58,"THICK_ARROW_CIRCLE":59,"THICK_ARROW_CROSS":60,"THICK_ARROW_OPEN":61,"PIPE":62,"textToken":63,"commentText":64,"commentToken":65,"keywords":66,"STYLE":67,"LINKSTYLE":68,"CLASSDEF":69,"CLASS":70,"CLICK":71,"textNoTags":72,"textNoTagsToken":73,"stylesOpt":74,"HEX":75,"NUM":76,"PCT":77,"style":78,"COMMA":79,"styleComponent":80,"ALPHA":81,"COLON":82,"UNIT":83,"BRKT":84,"DOT":85,"graphCodeTokens":86,"PLUS":87,"EQUALS":88,"MULT":89,"TAG_START":90,"TAG_END":91,"QUOTE":92,"$accept":0,"$end":1},
|
||
terminals_: {2:"error",9:"SEMI",10:"EOF",11:"GRAPH",12:"SPACE",13:"DIR",15:"TAGEND",16:"TAGSTART",17:"UP",18:"DOWN",19:"NEWLINE",29:"subgraph",32:"end",36:"SQS",37:"SQE",38:"PS",39:"PE",40:"DIAMOND_START",41:"DIAMOND_STOP",44:"MINUS",47:"--",48:"-.",49:"==",50:"ARROW_POINT",51:"ARROW_CIRCLE",52:"ARROW_CROSS",53:"ARROW_OPEN",54:"DOTTED_ARROW_POINT",55:"DOTTED_ARROW_CIRCLE",56:"DOTTED_ARROW_CROSS",57:"DOTTED_ARROW_OPEN",58:"THICK_ARROW_POINT",59:"THICK_ARROW_CIRCLE",60:"THICK_ARROW_CROSS",61:"THICK_ARROW_OPEN",62:"PIPE",67:"STYLE",68:"LINKSTYLE",69:"CLASSDEF",70:"CLASS",71:"CLICK",75:"HEX",76:"NUM",77:"PCT",79:"COMMA",81:"ALPHA",82:"COLON",83:"UNIT",84:"BRKT",85:"DOT",87:"PLUS",88:"EQUALS",89:"MULT",90:"TAG_START",91:"TAG_END",92:"QUOTE"},
|
||
productions_: [0,[3,2],[5,0],[5,2],[6,2],[6,1],[6,1],[6,1],[4,4],[4,4],[4,4],[4,4],[4,4],[14,1],[14,1],[14,2],[7,2],[7,2],[7,1],[7,1],[20,2],[20,1],[8,2],[8,2],[8,2],[8,2],[8,2],[8,2],[8,2],[8,6],[8,5],[31,1],[31,2],[23,1],[23,1],[23,1],[22,3],[22,1],[33,4],[33,5],[33,6],[33,7],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,1],[33,2],[35,1],[35,2],[42,1],[42,3],[34,2],[34,3],[34,1],[34,2],[34,5],[34,6],[34,5],[34,6],[34,5],[34,6],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[46,3],[30,1],[30,2],[64,1],[64,2],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[72,1],[72,2],[26,5],[27,5],[28,5],[24,5],[24,5],[25,5],[21,3],[74,1],[74,3],[78,1],[78,2],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[65,1],[65,1],[63,1],[63,1],[63,1],[63,1],[63,1],[73,1],[73,1],[73,1],[73,1],[43,1],[43,1],[43,1],[43,1],[43,1],[43,1],[43,1],[43,1],[43,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1]],
|
||
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
|
||
/* this == yyval */
|
||
|
||
var $0 = $$.length - 1;
|
||
switch (yystate) {
|
||
case 2:
|
||
this.$ = [];
|
||
break;
|
||
case 3:
|
||
|
||
if($$[$0] !== []){
|
||
$$[$0-1].push($$[$0]);
|
||
}
|
||
this.$=$$[$0-1];
|
||
break;
|
||
case 4: case 5: case 50: case 52: case 77: case 79: case 90:
|
||
this.$=$$[$0];
|
||
break;
|
||
case 8:
|
||
yy.setDirection($$[$0-1]);this.$ = $$[$0-1];
|
||
break;
|
||
case 9:
|
||
yy.setDirection("LR");this.$ = $$[$0-1];
|
||
break;
|
||
case 10:
|
||
yy.setDirection("RL");this.$ = $$[$0-1];
|
||
break;
|
||
case 11:
|
||
yy.setDirection("BT");this.$ = $$[$0-1];
|
||
break;
|
||
case 12:
|
||
yy.setDirection("TB");this.$ = $$[$0-1];
|
||
break;
|
||
case 22: case 24: case 25: case 26: case 27: case 28:
|
||
this.$=[];
|
||
break;
|
||
case 23:
|
||
this.$=$$[$0-1]
|
||
break;
|
||
case 29:
|
||
yy.addSubGraph($$[$0-2],$$[$0-4]);
|
||
break;
|
||
case 30:
|
||
yy.addSubGraph($$[$0-2],undefined);
|
||
break;
|
||
case 36:
|
||
yy.addLink($$[$0-2],$$[$0],$$[$0-1]);this.$ = [$$[$0-2],$$[$0]];
|
||
break;
|
||
case 37:
|
||
this.$ = [$$[$0]];
|
||
break;
|
||
case 38:
|
||
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');
|
||
break;
|
||
case 39:
|
||
this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'square');
|
||
break;
|
||
case 40:
|
||
this.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');
|
||
break;
|
||
case 41:
|
||
this.$ = $$[$0-6];yy.addVertex($$[$0-6],$$[$0-3],'circle');
|
||
break;
|
||
case 42:
|
||
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');
|
||
break;
|
||
case 43:
|
||
this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'round');
|
||
break;
|
||
case 44:
|
||
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');
|
||
break;
|
||
case 45:
|
||
this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'diamond');
|
||
break;
|
||
case 46:
|
||
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');
|
||
break;
|
||
case 47:
|
||
this.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'odd');
|
||
break;
|
||
case 48:
|
||
this.$ = $$[$0];yy.addVertex($$[$0]);
|
||
break;
|
||
case 49:
|
||
this.$ = $$[$0-1];yy.addVertex($$[$0-1]);
|
||
break;
|
||
case 51: case 78: case 80: case 91:
|
||
this.$=$$[$0-1]+''+$$[$0];
|
||
break;
|
||
case 53:
|
||
this.$=$$[$0-2]+'-'+$$[$0];
|
||
break;
|
||
case 54:
|
||
$$[$0-1].text = $$[$0];this.$ = $$[$0-1];
|
||
break;
|
||
case 55:
|
||
$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2];
|
||
break;
|
||
case 56:
|
||
this.$ = $$[$0];
|
||
break;
|
||
case 57: case 76:
|
||
this.$ = $$[$0-1];
|
||
break;
|
||
case 58: case 60: case 62:
|
||
$$[$0].text = $$[$0-2];this.$ = $$[$0];
|
||
break;
|
||
case 59: case 61: case 63:
|
||
$$[$0-1].text = $$[$0-3];this.$ = $$[$0-1];
|
||
break;
|
||
case 64:
|
||
this.$ = {"type":"arrow","stroke":"normal"};
|
||
break;
|
||
case 65:
|
||
this.$ = {"type":"arrow_circle","stroke":"normal"};
|
||
break;
|
||
case 66:
|
||
this.$ = {"type":"arrow_cross","stroke":"normal"};
|
||
break;
|
||
case 67:
|
||
this.$ = {"type":"arrow_open","stroke":"normal"};
|
||
break;
|
||
case 68:
|
||
this.$ = {"type":"arrow","stroke":"dotted"};
|
||
break;
|
||
case 69:
|
||
this.$ = {"type":"arrow_circle","stroke":"dotted"};
|
||
break;
|
||
case 70:
|
||
this.$ = {"type":"arrow_cross","stroke":"dotted"};
|
||
break;
|
||
case 71:
|
||
this.$ = {"type":"arrow_open","stroke":"dotted"};
|
||
break;
|
||
case 72:
|
||
this.$ = {"type":"arrow","stroke":"thick"};
|
||
break;
|
||
case 73:
|
||
this.$ = {"type":"arrow_circle","stroke":"thick"};
|
||
break;
|
||
case 74:
|
||
this.$ = {"type":"arrow_cross","stroke":"thick"};
|
||
break;
|
||
case 75:
|
||
this.$ = {"type":"arrow_open","stroke":"thick"};
|
||
break;
|
||
case 92:
|
||
this.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);
|
||
break;
|
||
case 93:
|
||
this.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);
|
||
break;
|
||
case 94:
|
||
this.$ = $$[$0-4];yy.setClickEvent($$[$0-2], $$[$0]);
|
||
break;
|
||
case 95:
|
||
this.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);
|
||
break;
|
||
case 96: case 97:
|
||
this.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);
|
||
break;
|
||
case 99:
|
||
this.$ = [$$[$0]]
|
||
break;
|
||
case 100:
|
||
$$[$0-2].push($$[$0]);this.$ = $$[$0-2];
|
||
break;
|
||
case 102:
|
||
this.$ = $$[$0-1] + $$[$0];
|
||
break;
|
||
}
|
||
},
|
||
table: [{3:1,4:2,11:[1,3]},{1:[3]},o($V0,$V1,{5:4}),{12:[1,5]},{1:[2,1],6:6,7:7,8:8,9:$V2,10:$V3,12:$V4,19:$V5,21:13,22:14,24:15,25:16,26:17,27:18,28:19,29:$V6,33:22,35:28,42:29,43:30,67:$V7,68:$V8,69:$V9,70:$Va,71:$Vb,76:$Vc,77:$Vd,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{13:[1,40],15:[1,41],16:[1,42],17:[1,43],18:[1,44]},o($Vm,[2,3]),{8:45,21:13,22:14,24:15,25:16,26:17,27:18,28:19,29:$V6,33:22,35:28,42:29,43:30,67:$V7,68:$V8,69:$V9,70:$Va,71:$Vb,76:$Vc,77:$Vd,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($Vm,[2,5]),o($Vm,[2,6]),o($Vm,[2,7]),o($Vn,$Vo,{7:46,12:$V4,19:$V5}),o($Vn,[2,18],{7:47,12:$V4,19:$V5}),{19:[1,48]},{9:$Vp,10:$Vq,19:$Vr,23:49},{9:$Vp,10:$Vq,19:$Vr,23:53},{9:$Vp,10:$Vq,19:$Vr,23:54},{9:$Vp,10:$Vq,19:$Vr,23:55},{9:$Vp,10:$Vq,19:$Vr,23:56},{9:$Vp,10:$Vq,19:$Vr,23:57},{9:$Vp,10:$Vq,11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,19:$Vr,23:59,29:$Vx,30:58,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{77:[1,79]},o($VH,[2,37],{34:80,45:81,47:[1,82],48:[1,83],49:[1,84],50:$VI,51:$VJ,52:$VK,53:$VL,54:$VM,55:$VN,56:$VO,57:$VP,58:$VQ,59:$VR,60:$VS,61:$VT}),{12:[1,97]},{12:[1,98]},{12:[1,99]},{12:[1,100]},{12:[1,101]},o($VU,[2,48],{43:30,42:107,12:[1,106],15:[1,105],36:[1,102],38:[1,103],40:[1,104],76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl}),o($VV,[2,50]),o($VV,[2,52],{44:[1,108]}),o($VW,[2,125]),o($VW,[2,126]),o($VW,[2,127]),o($VW,[2,128]),o($VW,[2,129]),o($VW,[2,130]),o($VW,[2,131]),o($VW,[2,132]),o($VW,[2,133]),{9:$VX,12:$VY,14:109,19:$VZ,20:112},{9:$VX,12:$VY,14:114,19:$VZ,20:112},{9:$VX,12:$VY,14:115,19:$VZ,20:112},{9:$VX,12:$VY,14:116,19:$VZ,20:112},{9:$VX,12:$VY,14:117,19:$VZ,20:112},o($Vm,[2,4]),o($Vn,[2,16]),o($Vn,[2,17]),o($Vm,[2,22]),o($Vm,[2,23]),o($Vm,[2,33]),o($Vm,[2,34]),o($Vm,[2,35]),o($Vm,[2,24]),o($Vm,[2,25]),o($Vm,[2,26]),o($Vm,[2,27]),o($Vm,[2,28]),{9:$Vp,10:$Vq,11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,19:$Vr,23:118,29:$Vx,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($V_,$V1,{5:120}),o($V$,[2,77]),o($V01,[2,116]),o($V01,[2,117]),o($V01,[2,118]),o($V01,[2,119]),o($V01,[2,120]),o($V01,[2,121]),o($V01,$V11),o($V01,[2,123]),o($V01,[2,124]),o($V01,[2,81]),o($V01,[2,82]),o($V01,[2,83]),o($V01,[2,84]),o($V01,[2,85]),o($V01,[2,86]),o($V01,[2,87]),o($V01,[2,88]),o($V01,[2,89]),{9:$V21,11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,36:$V31,37:$V41,38:$V51,39:$V61,40:$V71,41:$V81,43:66,44:$Vz,47:$VA,49:$VB,50:$V91,51:$Va1,52:$Vb1,53:$Vc1,62:$Vd1,63:123,64:121,65:122,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,86:124,87:$Vj,88:$Vk,89:$Vl,90:$Ve1,91:$Vf1,92:$Vg1},{33:140,35:28,42:29,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($Vh1,[2,56],{46:141,12:[1,142],62:[1,143]}),{12:[1,144]},{12:[1,145]},{12:[1,146]},o($Vi1,[2,64]),o($Vi1,[2,65]),o($Vi1,[2,66]),o($Vi1,[2,67]),o($Vi1,[2,68]),o($Vi1,[2,69]),o($Vi1,[2,70]),o($Vi1,[2,71]),o($Vi1,[2,72]),o($Vi1,[2,73]),o($Vi1,[2,74]),o($Vi1,[2,75]),{35:147,42:29,43:30,75:[1,148],76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{76:[1,149]},{35:150,42:29,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{35:151,42:29,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{35:152,42:29,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:153,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:155,32:$Vy,38:[1,154],43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:156,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:157,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($VU,[2,49]),o($VV,[2,51]),{43:158,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($V0,[2,8]),o($V0,[2,13]),o($V0,[2,14]),{19:[1,159]},{12:$VY,19:[2,21],20:160},o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,11]),o($V0,[2,12]),o($V_,$V1,{5:161}),o($V$,[2,78]),{6:6,7:7,8:8,9:$V2,10:$V3,12:$Vj1,19:$V5,21:13,22:14,24:15,25:16,26:17,27:18,28:19,29:$V6,31:162,32:$Vk1,33:22,35:28,42:29,43:30,67:$V7,68:$V8,69:$V9,70:$Va,71:$Vb,76:$Vc,77:$Vd,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{9:$V21,11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,19:[2,98],29:$Vx,32:$Vy,36:$V31,37:$V41,38:$V51,39:$V61,40:$V71,41:$V81,43:66,44:$Vz,47:$VA,49:$VB,50:$V91,51:$Va1,52:$Vb1,53:$Vc1,62:$Vd1,63:123,65:165,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,86:124,87:$Vj,88:$Vk,89:$Vl,90:$Ve1,91:$Vf1,92:$Vg1},o($Vl1,[2,79]),o($Vl1,[2,114]),o($Vl1,[2,115]),o($Vl1,[2,134]),o($Vl1,[2,135]),o($Vl1,[2,136]),o($Vl1,[2,137]),o($Vl1,[2,138]),o($Vl1,[2,139]),o($Vl1,[2,140]),o($Vl1,[2,141]),o($Vl1,[2,142]),o($Vl1,[2,143]),o($Vl1,[2,144]),o($Vl1,[2,145]),o($Vl1,[2,146]),o($Vl1,[2,147]),o($Vl1,[2,148]),o($VH,[2,36]),o($Vh1,[2,54],{12:[1,166]}),o($Vh1,[2,57]),{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:167,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:168,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:169,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:170,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{12:[1,171],42:107,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{12:[1,172]},{12:[1,173]},{12:[1,174],42:107,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{12:[1,175],42:107,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{12:[1,176],42:107,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,37:[1,177],43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,30:178,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:60,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,39:[1,179],43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,41:[1,180],43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,37:[1,181],43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($VV,[2,53]),o($V0,[2,15]),{19:[2,20]},{6:6,7:7,8:8,9:$V2,10:$V3,12:$Vj1,19:$V5,21:13,22:14,24:15,25:16,26:17,27:18,28:19,29:$V6,31:182,32:$Vk1,33:22,35:28,42:29,43:30,67:$V7,68:$V8,69:$V9,70:$Va,71:$Vb,76:$Vc,77:$Vd,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{9:$Vp,10:$Vq,19:$Vr,23:183},o($VH,[2,31]),o($Vn,$Vo,{7:46,31:184,12:$Vj1,19:$V5,32:$Vk1}),o($Vl1,[2,80]),o($Vh1,[2,55]),{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,62:[1,185],63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:[1,186],13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:[1,187],13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{11:$Vs,12:[1,188],13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{12:$Vm1,44:$Vn1,67:$Vo1,74:189,75:$Vp1,76:$Vq1,77:$Vr1,78:190,80:191,81:$Vs1,82:$Vt1,83:$Vu1,84:$Vv1,85:$Vw1},{12:$Vm1,44:$Vn1,67:$Vo1,74:203,75:$Vp1,76:$Vq1,77:$Vr1,78:190,80:191,81:$Vs1,82:$Vt1,83:$Vu1,84:$Vv1,85:$Vw1},{12:$Vm1,44:$Vn1,67:$Vo1,74:204,75:$Vp1,76:$Vq1,77:$Vr1,78:190,80:191,81:$Vs1,82:$Vt1,83:$Vu1,84:$Vv1,85:$Vw1},{12:$Vm1,44:$Vn1,67:$Vo1,74:205,75:$Vp1,76:$Vq1,77:$Vr1,78:190,80:191,81:$Vs1,82:$Vt1,83:$Vu1,84:$Vv1,85:$Vw1},{35:206,42:29,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},{35:207,42:29,43:30,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($VU,[2,38],{12:[1,208]}),{11:$Vs,12:$Vt,13:$Vu,15:$Vv,16:$Vw,29:$Vx,32:$Vy,39:[1,209],43:66,44:$Vz,47:$VA,49:$VB,63:119,66:69,67:$VC,68:$VD,69:$VE,70:$VF,71:$VG,73:61,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl},o($VU,[2,42],{12:[1,210]}),o($VU,[2,44],{12:[1,211]}),o($VU,[2,46],{12:[1,212]}),{9:$Vp,10:$Vq,19:$Vr,23:213},o($Vm,[2,30]),o($VH,[2,32]),o([12,76,79,81,82,84,85,87,88,89],[2,76]),o($Vx1,$V11,{45:214,50:$VI,51:$VJ,52:$VK,53:$VL,54:$VM,55:$VN,56:$VO,57:$VP,58:$VQ,59:$VR,60:$VS,61:$VT}),o($Vx1,$V11,{45:215,50:$VI,51:$VJ,52:$VK,53:$VL,54:$VM,55:$VN,56:$VO,57:$VP,58:$VQ,59:$VR,60:$VS,61:$VT}),o($Vx1,$V11,{45:216,50:$VI,51:$VJ,52:$VK,53:$VL,54:$VM,55:$VN,56:$VO,57:$VP,58:$VQ,59:$VR,60:$VS,61:$VT}),o($VH,[2,95],{79:$Vy1}),o($Vz1,[2,99],{80:218,12:$Vm1,44:$Vn1,67:$Vo1,75:$Vp1,76:$Vq1,77:$Vr1,81:$Vs1,82:$Vt1,83:$Vu1,84:$Vv1,85:$Vw1}),o($VA1,[2,101]),o($VA1,[2,103]),o($VA1,[2,104]),o($VA1,[2,105]),o($VA1,[2,106]),o($VA1,[2,107]),o($VA1,[2,108]),o($VA1,[2,109]),o($VA1,[2,110]),o($VA1,[2,111]),o($VA1,[2,112]),o($VA1,[2,113]),o($VH,[2,96],{79:$Vy1}),o($VH,[2,97],{79:$Vy1}),o($VH,[2,92],{79:$Vy1}),o($VH,[2,93],{43:30,42:107,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl}),o($VH,[2,94],{43:30,42:107,76:$Vc,79:$Ve,81:$Vf,82:$Vg,84:$Vh,85:$Vi,87:$Vj,88:$Vk,89:$Vl}),o($VU,[2,39]),{39:[1,219]},o($VU,[2,43]),o($VU,[2,45]),o($VU,[2,47]),o($Vm,[2,29]),o($Vh1,[2,58],{12:[1,220]}),o($Vh1,[2,60],{12:[1,221]}),o($Vh1,[2,62],{12:[1,222]}),{12:$Vm1,44:$Vn1,67:$Vo1,75:$Vp1,76:$Vq1,77:$Vr1,78:223,80:191,81:$Vs1,82:$Vt1,83:$Vu1,84:$Vv1,85:$Vw1},o($VA1,[2,102]),o($VU,[2,40],{12:[1,224]}),o($Vh1,[2,59]),o($Vh1,[2,61]),o($Vh1,[2,63]),o($Vz1,[2,100],{80:218,12:$Vm1,44:$Vn1,67:$Vo1,75:$Vp1,76:$Vq1,77:$Vr1,81:$Vs1,82:$Vt1,83:$Vu1,84:$Vv1,85:$Vw1}),o($VU,[2,41])],
|
||
defaultActions: {160:[2,20]},
|
||
parseError: function parseError(str, hash) {
|
||
if (hash.recoverable) {
|
||
this.trace(str);
|
||
} else {
|
||
throw new Error(str);
|
||
}
|
||
},
|
||
parse: function parse(input) {
|
||
var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
|
||
var args = lstack.slice.call(arguments, 1);
|
||
var lexer = Object.create(this.lexer);
|
||
var sharedState = { yy: {} };
|
||
for (var k in this.yy) {
|
||
if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
|
||
sharedState.yy[k] = this.yy[k];
|
||
}
|
||
}
|
||
lexer.setInput(input, sharedState.yy);
|
||
sharedState.yy.lexer = lexer;
|
||
sharedState.yy.parser = this;
|
||
if (typeof lexer.yylloc == 'undefined') {
|
||
lexer.yylloc = {};
|
||
}
|
||
var yyloc = lexer.yylloc;
|
||
lstack.push(yyloc);
|
||
var ranges = lexer.options && lexer.options.ranges;
|
||
if (typeof sharedState.yy.parseError === 'function') {
|
||
this.parseError = sharedState.yy.parseError;
|
||
} else {
|
||
this.parseError = Object.getPrototypeOf(this).parseError;
|
||
}
|
||
function popStack(n) {
|
||
stack.length = stack.length - 2 * n;
|
||
vstack.length = vstack.length - n;
|
||
lstack.length = lstack.length - n;
|
||
}
|
||
_token_stack:
|
||
function lex() {
|
||
var token;
|
||
token = lexer.lex() || EOF;
|
||
if (typeof token !== 'number') {
|
||
token = self.symbols_[token] || token;
|
||
}
|
||
return token;
|
||
}
|
||
var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
|
||
while (true) {
|
||
state = stack[stack.length - 1];
|
||
if (this.defaultActions[state]) {
|
||
action = this.defaultActions[state];
|
||
} else {
|
||
if (symbol === null || typeof symbol == 'undefined') {
|
||
symbol = lex();
|
||
}
|
||
action = table[state] && table[state][symbol];
|
||
}
|
||
if (typeof action === 'undefined' || !action.length || !action[0]) {
|
||
var errStr = '';
|
||
expected = [];
|
||
for (p in table[state]) {
|
||
if (this.terminals_[p] && p > TERROR) {
|
||
expected.push('\'' + this.terminals_[p] + '\'');
|
||
}
|
||
}
|
||
if (lexer.showPosition) {
|
||
errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
|
||
} else {
|
||
errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
|
||
}
|
||
this.parseError(errStr, {
|
||
text: lexer.match,
|
||
token: this.terminals_[symbol] || symbol,
|
||
line: lexer.yylineno,
|
||
loc: yyloc,
|
||
expected: expected
|
||
});
|
||
}
|
||
if (action[0] instanceof Array && action.length > 1) {
|
||
throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
|
||
}
|
||
switch (action[0]) {
|
||
case 1:
|
||
stack.push(symbol);
|
||
vstack.push(lexer.yytext);
|
||
lstack.push(lexer.yylloc);
|
||
stack.push(action[1]);
|
||
symbol = null;
|
||
if (!preErrorSymbol) {
|
||
yyleng = lexer.yyleng;
|
||
yytext = lexer.yytext;
|
||
yylineno = lexer.yylineno;
|
||
yyloc = lexer.yylloc;
|
||
if (recovering > 0) {
|
||
recovering--;
|
||
}
|
||
} else {
|
||
symbol = preErrorSymbol;
|
||
preErrorSymbol = null;
|
||
}
|
||
break;
|
||
case 2:
|
||
len = this.productions_[action[1]][1];
|
||
yyval.$ = vstack[vstack.length - len];
|
||
yyval._$ = {
|
||
first_line: lstack[lstack.length - (len || 1)].first_line,
|
||
last_line: lstack[lstack.length - 1].last_line,
|
||
first_column: lstack[lstack.length - (len || 1)].first_column,
|
||
last_column: lstack[lstack.length - 1].last_column
|
||
};
|
||
if (ranges) {
|
||
yyval._$.range = [
|
||
lstack[lstack.length - (len || 1)].range[0],
|
||
lstack[lstack.length - 1].range[1]
|
||
];
|
||
}
|
||
r = this.performAction.apply(yyval, [
|
||
yytext,
|
||
yyleng,
|
||
yylineno,
|
||
sharedState.yy,
|
||
action[1],
|
||
vstack,
|
||
lstack
|
||
].concat(args));
|
||
if (typeof r !== 'undefined') {
|
||
return r;
|
||
}
|
||
if (len) {
|
||
stack = stack.slice(0, -1 * len * 2);
|
||
vstack = vstack.slice(0, -1 * len);
|
||
lstack = lstack.slice(0, -1 * len);
|
||
}
|
||
stack.push(this.productions_[action[1]][0]);
|
||
vstack.push(yyval.$);
|
||
lstack.push(yyval._$);
|
||
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
|
||
stack.push(newState);
|
||
break;
|
||
case 3:
|
||
return true;
|
||
}
|
||
}
|
||
return true;
|
||
}};
|
||
|
||
/* generated by jison-lex 0.3.4 */
|
||
var lexer = (function(){
|
||
var lexer = ({
|
||
|
||
EOF:1,
|
||
|
||
parseError:function parseError(str, hash) {
|
||
if (this.yy.parser) {
|
||
this.yy.parser.parseError(str, hash);
|
||
} else {
|
||
throw new Error(str);
|
||
}
|
||
},
|
||
|
||
// resets the lexer, sets new input
|
||
setInput:function (input, yy) {
|
||
this.yy = yy || this.yy || {};
|
||
this._input = input;
|
||
this._more = this._backtrack = this.done = false;
|
||
this.yylineno = this.yyleng = 0;
|
||
this.yytext = this.matched = this.match = '';
|
||
this.conditionStack = ['INITIAL'];
|
||
this.yylloc = {
|
||
first_line: 1,
|
||
first_column: 0,
|
||
last_line: 1,
|
||
last_column: 0
|
||
};
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [0,0];
|
||
}
|
||
this.offset = 0;
|
||
return this;
|
||
},
|
||
|
||
// consumes and returns one char from the input
|
||
input:function () {
|
||
var ch = this._input[0];
|
||
this.yytext += ch;
|
||
this.yyleng++;
|
||
this.offset++;
|
||
this.match += ch;
|
||
this.matched += ch;
|
||
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
||
if (lines) {
|
||
this.yylineno++;
|
||
this.yylloc.last_line++;
|
||
} else {
|
||
this.yylloc.last_column++;
|
||
}
|
||
if (this.options.ranges) {
|
||
this.yylloc.range[1]++;
|
||
}
|
||
|
||
this._input = this._input.slice(1);
|
||
return ch;
|
||
},
|
||
|
||
// unshifts one char (or a string) into the input
|
||
unput:function (ch) {
|
||
var len = ch.length;
|
||
var lines = ch.split(/(?:\r\n?|\n)/g);
|
||
|
||
this._input = ch + this._input;
|
||
this.yytext = this.yytext.substr(0, this.yytext.length - len);
|
||
//this.yyleng -= len;
|
||
this.offset -= len;
|
||
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
|
||
this.match = this.match.substr(0, this.match.length - 1);
|
||
this.matched = this.matched.substr(0, this.matched.length - 1);
|
||
|
||
if (lines.length - 1) {
|
||
this.yylineno -= lines.length - 1;
|
||
}
|
||
var r = this.yylloc.range;
|
||
|
||
this.yylloc = {
|
||
first_line: this.yylloc.first_line,
|
||
last_line: this.yylineno + 1,
|
||
first_column: this.yylloc.first_column,
|
||
last_column: lines ?
|
||
(lines.length === oldLines.length ? this.yylloc.first_column : 0)
|
||
+ oldLines[oldLines.length - lines.length].length - lines[0].length :
|
||
this.yylloc.first_column - len
|
||
};
|
||
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [r[0], r[0] + this.yyleng - len];
|
||
}
|
||
this.yyleng = this.yytext.length;
|
||
return this;
|
||
},
|
||
|
||
// When called from action, caches matched text and appends it on next action
|
||
more:function () {
|
||
this._more = true;
|
||
return this;
|
||
},
|
||
|
||
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
|
||
reject:function () {
|
||
if (this.options.backtrack_lexer) {
|
||
this._backtrack = true;
|
||
} else {
|
||
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
|
||
text: "",
|
||
token: null,
|
||
line: this.yylineno
|
||
});
|
||
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// retain first n characters of the match
|
||
less:function (n) {
|
||
this.unput(this.match.slice(n));
|
||
},
|
||
|
||
// displays already matched input, i.e. for error messages
|
||
pastInput:function () {
|
||
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
||
return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
|
||
},
|
||
|
||
// displays upcoming input, i.e. for error messages
|
||
upcomingInput:function () {
|
||
var next = this.match;
|
||
if (next.length < 20) {
|
||
next += this._input.substr(0, 20-next.length);
|
||
}
|
||
return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
|
||
},
|
||
|
||
// displays the character position where the lexing error occurred, i.e. for error messages
|
||
showPosition:function () {
|
||
var pre = this.pastInput();
|
||
var c = new Array(pre.length + 1).join("-");
|
||
return pre + this.upcomingInput() + "\n" + c + "^";
|
||
},
|
||
|
||
// test the lexed token: return FALSE when not a match, otherwise return token
|
||
test_match:function (match, indexed_rule) {
|
||
var token,
|
||
lines,
|
||
backup;
|
||
|
||
if (this.options.backtrack_lexer) {
|
||
// save context
|
||
backup = {
|
||
yylineno: this.yylineno,
|
||
yylloc: {
|
||
first_line: this.yylloc.first_line,
|
||
last_line: this.last_line,
|
||
first_column: this.yylloc.first_column,
|
||
last_column: this.yylloc.last_column
|
||
},
|
||
yytext: this.yytext,
|
||
match: this.match,
|
||
matches: this.matches,
|
||
matched: this.matched,
|
||
yyleng: this.yyleng,
|
||
offset: this.offset,
|
||
_more: this._more,
|
||
_input: this._input,
|
||
yy: this.yy,
|
||
conditionStack: this.conditionStack.slice(0),
|
||
done: this.done
|
||
};
|
||
if (this.options.ranges) {
|
||
backup.yylloc.range = this.yylloc.range.slice(0);
|
||
}
|
||
}
|
||
|
||
lines = match[0].match(/(?:\r\n?|\n).*/g);
|
||
if (lines) {
|
||
this.yylineno += lines.length;
|
||
}
|
||
this.yylloc = {
|
||
first_line: this.yylloc.last_line,
|
||
last_line: this.yylineno + 1,
|
||
first_column: this.yylloc.last_column,
|
||
last_column: lines ?
|
||
lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length :
|
||
this.yylloc.last_column + match[0].length
|
||
};
|
||
this.yytext += match[0];
|
||
this.match += match[0];
|
||
this.matches = match;
|
||
this.yyleng = this.yytext.length;
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [this.offset, this.offset += this.yyleng];
|
||
}
|
||
this._more = false;
|
||
this._backtrack = false;
|
||
this._input = this._input.slice(match[0].length);
|
||
this.matched += match[0];
|
||
token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
|
||
if (this.done && this._input) {
|
||
this.done = false;
|
||
}
|
||
if (token) {
|
||
return token;
|
||
} else if (this._backtrack) {
|
||
// recover context
|
||
for (var k in backup) {
|
||
this[k] = backup[k];
|
||
}
|
||
return false; // rule action called reject() implying the next rule should be tested instead.
|
||
}
|
||
return false;
|
||
},
|
||
|
||
// return next match in input
|
||
next:function () {
|
||
if (this.done) {
|
||
return this.EOF;
|
||
}
|
||
if (!this._input) {
|
||
this.done = true;
|
||
}
|
||
|
||
var token,
|
||
match,
|
||
tempMatch,
|
||
index;
|
||
if (!this._more) {
|
||
this.yytext = '';
|
||
this.match = '';
|
||
}
|
||
var rules = this._currentRules();
|
||
for (var i = 0; i < rules.length; i++) {
|
||
tempMatch = this._input.match(this.rules[rules[i]]);
|
||
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
|
||
match = tempMatch;
|
||
index = i;
|
||
if (this.options.backtrack_lexer) {
|
||
token = this.test_match(tempMatch, rules[i]);
|
||
if (token !== false) {
|
||
return token;
|
||
} else if (this._backtrack) {
|
||
match = false;
|
||
continue; // rule action called reject() implying a rule MISmatch.
|
||
} else {
|
||
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
||
return false;
|
||
}
|
||
} else if (!this.options.flex) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (match) {
|
||
token = this.test_match(match, rules[index]);
|
||
if (token !== false) {
|
||
return token;
|
||
}
|
||
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
||
return false;
|
||
}
|
||
if (this._input === "") {
|
||
return this.EOF;
|
||
} else {
|
||
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
|
||
text: "",
|
||
token: null,
|
||
line: this.yylineno
|
||
});
|
||
}
|
||
},
|
||
|
||
// return next match that has a token
|
||
lex:function lex() {
|
||
var r = this.next();
|
||
if (r) {
|
||
return r;
|
||
} else {
|
||
return this.lex();
|
||
}
|
||
},
|
||
|
||
// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
|
||
begin:function begin(condition) {
|
||
this.conditionStack.push(condition);
|
||
},
|
||
|
||
// pop the previously active lexer condition state off the condition stack
|
||
popState:function popState() {
|
||
var n = this.conditionStack.length - 1;
|
||
if (n > 0) {
|
||
return this.conditionStack.pop();
|
||
} else {
|
||
return this.conditionStack[0];
|
||
}
|
||
},
|
||
|
||
// produce the lexer rule set which is active for the currently active lexer condition state
|
||
_currentRules:function _currentRules() {
|
||
if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
|
||
return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
|
||
} else {
|
||
return this.conditions["INITIAL"].rules;
|
||
}
|
||
},
|
||
|
||
// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
|
||
topState:function topState(n) {
|
||
n = this.conditionStack.length - 1 - Math.abs(n || 0);
|
||
if (n >= 0) {
|
||
return this.conditionStack[n];
|
||
} else {
|
||
return "INITIAL";
|
||
}
|
||
},
|
||
|
||
// alias for begin(condition)
|
||
pushState:function pushState(condition) {
|
||
this.begin(condition);
|
||
},
|
||
|
||
// return the number of states currently on the stack
|
||
stateStackSize:function stateStackSize() {
|
||
return this.conditionStack.length;
|
||
},
|
||
options: {},
|
||
performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
|
||
var YYSTATE=YY_START;
|
||
switch($avoiding_name_collisions) {
|
||
case 0:return 67;
|
||
break;
|
||
case 1:return 68;
|
||
break;
|
||
case 2:return 69;
|
||
break;
|
||
case 3:return 70;
|
||
break;
|
||
case 4:return 71;
|
||
break;
|
||
case 5:return 11;
|
||
break;
|
||
case 6:return 29;
|
||
break;
|
||
case 7:return 32;
|
||
break;
|
||
case 8:return 13;
|
||
break;
|
||
case 9:return 13;
|
||
break;
|
||
case 10:return 13;
|
||
break;
|
||
case 11:return 13;
|
||
break;
|
||
case 12:return 13;
|
||
break;
|
||
case 13:return 13;
|
||
break;
|
||
case 14:return 76;
|
||
break;
|
||
case 15:return 84;
|
||
break;
|
||
case 16:return 82;
|
||
break;
|
||
case 17:return 9;
|
||
break;
|
||
case 18:return 79;
|
||
break;
|
||
case 19:return 89;
|
||
break;
|
||
case 20:return 16;
|
||
break;
|
||
case 21:return 15;
|
||
break;
|
||
case 22:return 17;
|
||
break;
|
||
case 23:return 18;
|
||
break;
|
||
case 24:return 52;
|
||
break;
|
||
case 25:return 50;
|
||
break;
|
||
case 26:return 51;
|
||
break;
|
||
case 27:return 53;
|
||
break;
|
||
case 28:return 56;
|
||
break;
|
||
case 29:return 54;
|
||
break;
|
||
case 30:return 55;
|
||
break;
|
||
case 31:return 57;
|
||
break;
|
||
case 32:return 56;
|
||
break;
|
||
case 33:return 54;
|
||
break;
|
||
case 34:return 55;
|
||
break;
|
||
case 35:return 57;
|
||
break;
|
||
case 36:return 60;
|
||
break;
|
||
case 37:return 58;
|
||
break;
|
||
case 38:return 59;
|
||
break;
|
||
case 39:return 61;
|
||
break;
|
||
case 40:return 47;
|
||
break;
|
||
case 41:return 48;
|
||
break;
|
||
case 42:return 49;
|
||
break;
|
||
case 43:return 44;
|
||
break;
|
||
case 44:return 85;
|
||
break;
|
||
case 45:return 87;
|
||
break;
|
||
case 46:return 77;
|
||
break;
|
||
case 47:return 88;
|
||
break;
|
||
case 48:return 88;
|
||
break;
|
||
case 49:return 81;
|
||
break;
|
||
case 50:return 62;
|
||
break;
|
||
case 51:return 38;
|
||
break;
|
||
case 52:return 39;
|
||
break;
|
||
case 53:return 36;
|
||
break;
|
||
case 54:return 37;
|
||
break;
|
||
case 55:return 40
|
||
break;
|
||
case 56:return 41
|
||
break;
|
||
case 57:return 92;
|
||
break;
|
||
case 58:return 19;
|
||
break;
|
||
case 59:return 12;
|
||
break;
|
||
case 60:return 10;
|
||
break;
|
||
}
|
||
},
|
||
rules: [/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:--[x])/,/^(?:-->)/,/^(?:--[o])/,/^(?:---)/,/^(?:-\.-[x])/,/^(?:-\.->)/,/^(?:-\.-[o])/,/^(?:-\.-)/,/^(?:.-[x])/,/^(?:\.->)/,/^(?:\.-[o])/,/^(?:\.-)/,/^(?:==[x])/,/^(?:==>)/,/^(?:==[o])/,/^(?:==[\=])/,/^(?:--)/,/^(?:-\.)/,/^(?:==)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u005C\u005F-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\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\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-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\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\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\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\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\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]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC_\/])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n)/,/^(?:\s)/,/^(?:$)/],
|
||
conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60],"inclusive":true}}
|
||
});
|
||
return lexer;
|
||
})();
|
||
parser.lexer = lexer;
|
||
function Parser () {
|
||
this.yy = {};
|
||
}
|
||
Parser.prototype = parser;parser.Parser = Parser;
|
||
return new Parser;
|
||
})();
|
||
|
||
|
||
if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') {
|
||
exports.parser = parser;
|
||
exports.Parser = parser.Parser;
|
||
exports.parse = function () { return parser.parse.apply(parser, arguments); };
|
||
exports.main = function commonjsMain(args) {
|
||
if (!args[1]) {
|
||
console.log('Usage: '+args[0]+' FILE');
|
||
process.exit(1);
|
||
}
|
||
var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8");
|
||
return exports.parser.parse(source);
|
||
};
|
||
if (typeof module !== 'undefined' && _dereq_.main === module) {
|
||
exports.main(process.argv.slice(1));
|
||
}
|
||
}
|
||
}).call(this,_dereq_("1YiZ5S"))
|
||
},{"1YiZ5S":3,"fs":1,"path":2}],11:[function(_dereq_,module,exports){
|
||
(function (process){
|
||
/* parser generated by jison 0.4.15 */
|
||
/*
|
||
Returns a Parser object of the following structure:
|
||
|
||
Parser: {
|
||
yy: {}
|
||
}
|
||
|
||
Parser.prototype: {
|
||
yy: {},
|
||
trace: function(),
|
||
symbols_: {associative list: name ==> number},
|
||
terminals_: {associative list: number ==> name},
|
||
productions_: [...],
|
||
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
|
||
table: [...],
|
||
defaultActions: {...},
|
||
parseError: function(str, hash),
|
||
parse: function(input),
|
||
|
||
lexer: {
|
||
EOF: 1,
|
||
parseError: function(str, hash),
|
||
setInput: function(input),
|
||
input: function(),
|
||
unput: function(str),
|
||
more: function(),
|
||
less: function(n),
|
||
pastInput: function(),
|
||
upcomingInput: function(),
|
||
showPosition: function(),
|
||
test_match: function(regex_match_array, rule_index),
|
||
next: function(),
|
||
lex: function(),
|
||
begin: function(condition),
|
||
popState: function(),
|
||
_currentRules: function(),
|
||
topState: function(),
|
||
pushState: function(condition),
|
||
|
||
options: {
|
||
ranges: boolean (optional: true ==> token location info will include a .range[] member)
|
||
flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
|
||
backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
|
||
},
|
||
|
||
performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
|
||
rules: [...],
|
||
conditions: {associative list: name ==> set},
|
||
}
|
||
}
|
||
|
||
|
||
token location info (@$, _$, etc.): {
|
||
first_line: n,
|
||
last_line: n,
|
||
first_column: n,
|
||
last_column: n,
|
||
range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)
|
||
}
|
||
|
||
|
||
the parseError function receives a 'hash' object with these members for lexer and parser errors: {
|
||
text: (matched text)
|
||
token: (the produced terminal token, if any)
|
||
line: (yylineno)
|
||
}
|
||
while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
|
||
loc: (yylloc)
|
||
expected: (string describing the set of expected tokens)
|
||
recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
|
||
}
|
||
*/
|
||
var parser = (function(){
|
||
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,15,17,19,20,22,33],$V1=[2,2],$V2=[1,6],$V3=[1,8],$V4=[1,9],$V5=[1,12],$V6=[1,13],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[2,7],$Vc=[6,8,10,11,15,17,18,19,20,21,22,33],$Vd=[6,8,10,11,15,17,18,19,20,22,33],$Ve=[1,46],$Vf=[1,49],$Vg=[1,53];
|
||
var parser = {trace: function trace() { },
|
||
yy: {},
|
||
symbols_: {"error":2,"start":3,"SD":4,"document":5,"EOF":6,"line":7,"SPACE":8,"statement":9,"NL":10,"participant":11,"actor":12,"signal":13,"note_statement":14,"title":15,"text":16,"loop":17,"end":18,"opt":19,"alt":20,"else":21,"note":22,"placement":23,"text2":24,"over":25,"spaceList":26,"actor_pair":27,",":28,"left_of":29,"right_of":30,"signaltype":31,"actors":32,"ACTOR":33,"SOLID_OPEN_ARROW":34,"DOTTED_OPEN_ARROW":35,"SOLID_ARROW":36,"DOTTED_ARROW":37,"SOLID_CROSS":38,"DOTTED_CROSS":39,"TXT":40,"$accept":0,"$end":1},
|
||
terminals_: {2:"error",4:"SD",6:"EOF",8:"SPACE",10:"NL",11:"participant",15:"title",16:"text",17:"loop",18:"end",19:"opt",20:"alt",21:"else",22:"note",25:"over",28:",",29:"left_of",30:"right_of",33:"ACTOR",34:"SOLID_OPEN_ARROW",35:"DOTTED_OPEN_ARROW",36:"SOLID_ARROW",37:"DOTTED_ARROW",38:"SOLID_CROSS",39:"DOTTED_CROSS",40:"TXT"},
|
||
productions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,3],[9,2],[9,2],[9,4],[9,4],[9,4],[9,7],[14,4],[14,5],[26,2],[26,1],[27,1],[27,3],[23,1],[23,1],[13,4],[32,2],[32,1],[12,1],[31,1],[31,1],[31,1],[31,1],[31,1],[31,1],[24,1]],
|
||
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
|
||
/* this == yyval */
|
||
|
||
var $0 = $$.length - 1;
|
||
switch (yystate) {
|
||
case 1:
|
||
yy.apply($$[$0-1]);return $$[$0-1];
|
||
break;
|
||
case 2:
|
||
this.$ = []
|
||
break;
|
||
case 3:
|
||
$$[$0-1].push($$[$0]);this.$ = $$[$0-1]
|
||
break;
|
||
case 4: case 5:
|
||
this.$ = $$[$0]
|
||
break;
|
||
case 6: case 7:
|
||
this.$=[];
|
||
break;
|
||
case 8:
|
||
this.$=$$[$0-1];
|
||
break;
|
||
case 12:
|
||
|
||
$$[$0-1].unshift({type: 'loopStart', loopText:$$[$0-2].actor, signalType: yy.LINETYPE.LOOP_START});
|
||
$$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END});
|
||
this.$=$$[$0-1];
|
||
break;
|
||
case 13:
|
||
|
||
$$[$0-1].unshift({type: 'optStart', optText:$$[$0-2].actor, signalType: yy.LINETYPE.OPT_START});
|
||
$$[$0-1].push({type: 'optEnd', optText:$$[$0-2].actor, signalType: yy.LINETYPE.OPT_END});
|
||
this.$=$$[$0-1];
|
||
break;
|
||
case 14:
|
||
|
||
// Alt start
|
||
$$[$0-4].unshift({type: 'altStart', altText:$$[$0-5].actor, signalType: yy.LINETYPE.ALT_START});
|
||
// Content in alt is already in $$[$0-4]
|
||
// Else
|
||
$$[$0-4].push({type: 'else', altText:$$[$0-2].actor, signalType: yy.LINETYPE.ALT_ELSE});
|
||
// Content in other alt
|
||
$$[$0-4] = $$[$0-4].concat($$[$0-1]);
|
||
// End
|
||
$$[$0-4].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});
|
||
|
||
this.$=$$[$0-4];
|
||
break;
|
||
case 15:
|
||
this.$=[$$[$0-1],{type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}];
|
||
break;
|
||
case 19:
|
||
this.$ = $$[$0];
|
||
break;
|
||
case 20:
|
||
this.$ = [$$[$0-2], $$[$0]];
|
||
break;
|
||
case 21:
|
||
this.$ = yy.PLACEMENT.LEFTOF;
|
||
break;
|
||
case 22:
|
||
this.$ = yy.PLACEMENT.RIGHTOF;
|
||
break;
|
||
case 23:
|
||
this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}]
|
||
break;
|
||
case 26:
|
||
this.$={type: 'addActor', actor:$$[$0]}
|
||
break;
|
||
case 27:
|
||
this.$ = yy.LINETYPE.SOLID_OPEN;
|
||
break;
|
||
case 28:
|
||
this.$ = yy.LINETYPE.DOTTED_OPEN;
|
||
break;
|
||
case 29:
|
||
this.$ = yy.LINETYPE.SOLID;
|
||
break;
|
||
case 30:
|
||
this.$ = yy.LINETYPE.DOTTED;
|
||
break;
|
||
case 31:
|
||
this.$ = yy.LINETYPE.SOLID_CROSS;
|
||
break;
|
||
case 32:
|
||
this.$ = yy.LINETYPE.DOTTED_CROSS;
|
||
break;
|
||
case 33:
|
||
this.$ = $$[$0].substring(1).trim().replace(/\\n/gm, "\n");
|
||
break;
|
||
}
|
||
},
|
||
table: [{3:1,4:[1,2]},{1:[3]},o($V0,$V1,{5:3}),{6:[1,4],7:5,8:$V2,9:7,10:$V3,11:$V4,12:16,13:10,14:11,15:$V5,17:$V6,19:$V7,20:$V8,22:$V9,33:$Va},o($V0,$Vb,{1:[2,1]}),o($Vc,[2,3]),{9:19,11:$V4,12:16,13:10,14:11,15:$V5,17:$V6,19:$V7,20:$V8,22:$V9,33:$Va},o($Vc,[2,5]),o($Vc,[2,6]),{12:20,33:$Va},{10:[1,21]},{10:[1,22]},{8:[1,23]},{12:24,33:$Va},{12:25,33:$Va},{12:26,33:$Va},{31:27,34:[1,28],35:[1,29],36:[1,30],37:[1,31],38:[1,32],39:[1,33]},{23:34,25:[1,35],29:[1,36],30:[1,37]},o([6,8,10,11,15,17,18,19,20,21,22,28,33,34,35,36,37,38,39,40],[2,26]),o($Vc,[2,4]),{10:[1,38]},o($Vc,[2,9]),o($Vc,[2,10]),{16:[1,39]},o($Vd,$V1,{5:40}),o($Vd,$V1,{5:41}),o([6,8,10,11,15,17,19,20,21,22,33],$V1,{5:42}),{12:43,33:$Va},{33:[2,27]},{33:[2,28]},{33:[2,29]},{33:[2,30]},{33:[2,31]},{33:[2,32]},{12:44,33:$Va},{8:$Ve,26:45},{33:[2,21]},{33:[2,22]},o($Vc,[2,8]),{10:[1,47]},{6:$Vf,7:5,8:$V2,9:7,10:$V3,11:$V4,12:16,13:10,14:11,15:$V5,17:$V6,18:[1,48],19:$V7,20:$V8,22:$V9,33:$Va},{6:$Vf,7:5,8:$V2,9:7,10:$V3,11:$V4,12:16,13:10,14:11,15:$V5,17:$V6,18:[1,50],19:$V7,20:$V8,22:$V9,33:$Va},{6:$Vf,7:5,8:$V2,9:7,10:$V3,11:$V4,12:16,13:10,14:11,15:$V5,17:$V6,19:$V7,20:$V8,21:[1,51],22:$V9,33:$Va},{24:52,40:$Vg},{24:54,40:$Vg},{12:56,27:55,33:$Va},{8:$Ve,26:57,33:[2,18]},o($Vc,[2,11]),o($Vc,[2,12]),o($Vc,$Vb),o($Vc,[2,13]),{12:58,33:$Va},{10:[2,23]},{10:[2,33]},{10:[2,15]},{12:59,33:$Va},{28:[1,60],33:[2,19]},{33:[2,17]},o($Vd,$V1,{5:61}),{10:[2,16]},{12:62,33:$Va},{6:$Vf,7:5,8:$V2,9:7,10:$V3,11:$V4,12:16,13:10,14:11,15:$V5,17:$V6,18:[1,63],19:$V7,20:$V8,22:$V9,33:$Va},{33:[2,20]},o($Vc,[2,14])],
|
||
defaultActions: {28:[2,27],29:[2,28],30:[2,29],31:[2,30],32:[2,31],33:[2,32],36:[2,21],37:[2,22],52:[2,23],53:[2,33],54:[2,15],57:[2,17],59:[2,16],62:[2,20]},
|
||
parseError: function parseError(str, hash) {
|
||
if (hash.recoverable) {
|
||
this.trace(str);
|
||
} else {
|
||
throw new Error(str);
|
||
}
|
||
},
|
||
parse: function parse(input) {
|
||
var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
|
||
var args = lstack.slice.call(arguments, 1);
|
||
var lexer = Object.create(this.lexer);
|
||
var sharedState = { yy: {} };
|
||
for (var k in this.yy) {
|
||
if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
|
||
sharedState.yy[k] = this.yy[k];
|
||
}
|
||
}
|
||
lexer.setInput(input, sharedState.yy);
|
||
sharedState.yy.lexer = lexer;
|
||
sharedState.yy.parser = this;
|
||
if (typeof lexer.yylloc == 'undefined') {
|
||
lexer.yylloc = {};
|
||
}
|
||
var yyloc = lexer.yylloc;
|
||
lstack.push(yyloc);
|
||
var ranges = lexer.options && lexer.options.ranges;
|
||
if (typeof sharedState.yy.parseError === 'function') {
|
||
this.parseError = sharedState.yy.parseError;
|
||
} else {
|
||
this.parseError = Object.getPrototypeOf(this).parseError;
|
||
}
|
||
function popStack(n) {
|
||
stack.length = stack.length - 2 * n;
|
||
vstack.length = vstack.length - n;
|
||
lstack.length = lstack.length - n;
|
||
}
|
||
_token_stack:
|
||
function lex() {
|
||
var token;
|
||
token = lexer.lex() || EOF;
|
||
if (typeof token !== 'number') {
|
||
token = self.symbols_[token] || token;
|
||
}
|
||
return token;
|
||
}
|
||
var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
|
||
while (true) {
|
||
state = stack[stack.length - 1];
|
||
if (this.defaultActions[state]) {
|
||
action = this.defaultActions[state];
|
||
} else {
|
||
if (symbol === null || typeof symbol == 'undefined') {
|
||
symbol = lex();
|
||
}
|
||
action = table[state] && table[state][symbol];
|
||
}
|
||
if (typeof action === 'undefined' || !action.length || !action[0]) {
|
||
var errStr = '';
|
||
expected = [];
|
||
for (p in table[state]) {
|
||
if (this.terminals_[p] && p > TERROR) {
|
||
expected.push('\'' + this.terminals_[p] + '\'');
|
||
}
|
||
}
|
||
if (lexer.showPosition) {
|
||
errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
|
||
} else {
|
||
errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
|
||
}
|
||
this.parseError(errStr, {
|
||
text: lexer.match,
|
||
token: this.terminals_[symbol] || symbol,
|
||
line: lexer.yylineno,
|
||
loc: yyloc,
|
||
expected: expected
|
||
});
|
||
}
|
||
if (action[0] instanceof Array && action.length > 1) {
|
||
throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
|
||
}
|
||
switch (action[0]) {
|
||
case 1:
|
||
stack.push(symbol);
|
||
vstack.push(lexer.yytext);
|
||
lstack.push(lexer.yylloc);
|
||
stack.push(action[1]);
|
||
symbol = null;
|
||
if (!preErrorSymbol) {
|
||
yyleng = lexer.yyleng;
|
||
yytext = lexer.yytext;
|
||
yylineno = lexer.yylineno;
|
||
yyloc = lexer.yylloc;
|
||
if (recovering > 0) {
|
||
recovering--;
|
||
}
|
||
} else {
|
||
symbol = preErrorSymbol;
|
||
preErrorSymbol = null;
|
||
}
|
||
break;
|
||
case 2:
|
||
len = this.productions_[action[1]][1];
|
||
yyval.$ = vstack[vstack.length - len];
|
||
yyval._$ = {
|
||
first_line: lstack[lstack.length - (len || 1)].first_line,
|
||
last_line: lstack[lstack.length - 1].last_line,
|
||
first_column: lstack[lstack.length - (len || 1)].first_column,
|
||
last_column: lstack[lstack.length - 1].last_column
|
||
};
|
||
if (ranges) {
|
||
yyval._$.range = [
|
||
lstack[lstack.length - (len || 1)].range[0],
|
||
lstack[lstack.length - 1].range[1]
|
||
];
|
||
}
|
||
r = this.performAction.apply(yyval, [
|
||
yytext,
|
||
yyleng,
|
||
yylineno,
|
||
sharedState.yy,
|
||
action[1],
|
||
vstack,
|
||
lstack
|
||
].concat(args));
|
||
if (typeof r !== 'undefined') {
|
||
return r;
|
||
}
|
||
if (len) {
|
||
stack = stack.slice(0, -1 * len * 2);
|
||
vstack = vstack.slice(0, -1 * len);
|
||
lstack = lstack.slice(0, -1 * len);
|
||
}
|
||
stack.push(this.productions_[action[1]][0]);
|
||
vstack.push(yyval.$);
|
||
lstack.push(yyval._$);
|
||
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
|
||
stack.push(newState);
|
||
break;
|
||
case 3:
|
||
return true;
|
||
}
|
||
}
|
||
return true;
|
||
}};
|
||
/* generated by jison-lex 0.3.4 */
|
||
var lexer = (function(){
|
||
var lexer = ({
|
||
|
||
EOF:1,
|
||
|
||
parseError:function parseError(str, hash) {
|
||
if (this.yy.parser) {
|
||
this.yy.parser.parseError(str, hash);
|
||
} else {
|
||
throw new Error(str);
|
||
}
|
||
},
|
||
|
||
// resets the lexer, sets new input
|
||
setInput:function (input, yy) {
|
||
this.yy = yy || this.yy || {};
|
||
this._input = input;
|
||
this._more = this._backtrack = this.done = false;
|
||
this.yylineno = this.yyleng = 0;
|
||
this.yytext = this.matched = this.match = '';
|
||
this.conditionStack = ['INITIAL'];
|
||
this.yylloc = {
|
||
first_line: 1,
|
||
first_column: 0,
|
||
last_line: 1,
|
||
last_column: 0
|
||
};
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [0,0];
|
||
}
|
||
this.offset = 0;
|
||
return this;
|
||
},
|
||
|
||
// consumes and returns one char from the input
|
||
input:function () {
|
||
var ch = this._input[0];
|
||
this.yytext += ch;
|
||
this.yyleng++;
|
||
this.offset++;
|
||
this.match += ch;
|
||
this.matched += ch;
|
||
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
||
if (lines) {
|
||
this.yylineno++;
|
||
this.yylloc.last_line++;
|
||
} else {
|
||
this.yylloc.last_column++;
|
||
}
|
||
if (this.options.ranges) {
|
||
this.yylloc.range[1]++;
|
||
}
|
||
|
||
this._input = this._input.slice(1);
|
||
return ch;
|
||
},
|
||
|
||
// unshifts one char (or a string) into the input
|
||
unput:function (ch) {
|
||
var len = ch.length;
|
||
var lines = ch.split(/(?:\r\n?|\n)/g);
|
||
|
||
this._input = ch + this._input;
|
||
this.yytext = this.yytext.substr(0, this.yytext.length - len);
|
||
//this.yyleng -= len;
|
||
this.offset -= len;
|
||
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
|
||
this.match = this.match.substr(0, this.match.length - 1);
|
||
this.matched = this.matched.substr(0, this.matched.length - 1);
|
||
|
||
if (lines.length - 1) {
|
||
this.yylineno -= lines.length - 1;
|
||
}
|
||
var r = this.yylloc.range;
|
||
|
||
this.yylloc = {
|
||
first_line: this.yylloc.first_line,
|
||
last_line: this.yylineno + 1,
|
||
first_column: this.yylloc.first_column,
|
||
last_column: lines ?
|
||
(lines.length === oldLines.length ? this.yylloc.first_column : 0)
|
||
+ oldLines[oldLines.length - lines.length].length - lines[0].length :
|
||
this.yylloc.first_column - len
|
||
};
|
||
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [r[0], r[0] + this.yyleng - len];
|
||
}
|
||
this.yyleng = this.yytext.length;
|
||
return this;
|
||
},
|
||
|
||
// When called from action, caches matched text and appends it on next action
|
||
more:function () {
|
||
this._more = true;
|
||
return this;
|
||
},
|
||
|
||
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
|
||
reject:function () {
|
||
if (this.options.backtrack_lexer) {
|
||
this._backtrack = true;
|
||
} else {
|
||
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
|
||
text: "",
|
||
token: null,
|
||
line: this.yylineno
|
||
});
|
||
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// retain first n characters of the match
|
||
less:function (n) {
|
||
this.unput(this.match.slice(n));
|
||
},
|
||
|
||
// displays already matched input, i.e. for error messages
|
||
pastInput:function () {
|
||
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
||
return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
|
||
},
|
||
|
||
// displays upcoming input, i.e. for error messages
|
||
upcomingInput:function () {
|
||
var next = this.match;
|
||
if (next.length < 20) {
|
||
next += this._input.substr(0, 20-next.length);
|
||
}
|
||
return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
|
||
},
|
||
|
||
// displays the character position where the lexing error occurred, i.e. for error messages
|
||
showPosition:function () {
|
||
var pre = this.pastInput();
|
||
var c = new Array(pre.length + 1).join("-");
|
||
return pre + this.upcomingInput() + "\n" + c + "^";
|
||
},
|
||
|
||
// test the lexed token: return FALSE when not a match, otherwise return token
|
||
test_match:function (match, indexed_rule) {
|
||
var token,
|
||
lines,
|
||
backup;
|
||
|
||
if (this.options.backtrack_lexer) {
|
||
// save context
|
||
backup = {
|
||
yylineno: this.yylineno,
|
||
yylloc: {
|
||
first_line: this.yylloc.first_line,
|
||
last_line: this.last_line,
|
||
first_column: this.yylloc.first_column,
|
||
last_column: this.yylloc.last_column
|
||
},
|
||
yytext: this.yytext,
|
||
match: this.match,
|
||
matches: this.matches,
|
||
matched: this.matched,
|
||
yyleng: this.yyleng,
|
||
offset: this.offset,
|
||
_more: this._more,
|
||
_input: this._input,
|
||
yy: this.yy,
|
||
conditionStack: this.conditionStack.slice(0),
|
||
done: this.done
|
||
};
|
||
if (this.options.ranges) {
|
||
backup.yylloc.range = this.yylloc.range.slice(0);
|
||
}
|
||
}
|
||
|
||
lines = match[0].match(/(?:\r\n?|\n).*/g);
|
||
if (lines) {
|
||
this.yylineno += lines.length;
|
||
}
|
||
this.yylloc = {
|
||
first_line: this.yylloc.last_line,
|
||
last_line: this.yylineno + 1,
|
||
first_column: this.yylloc.last_column,
|
||
last_column: lines ?
|
||
lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length :
|
||
this.yylloc.last_column + match[0].length
|
||
};
|
||
this.yytext += match[0];
|
||
this.match += match[0];
|
||
this.matches = match;
|
||
this.yyleng = this.yytext.length;
|
||
if (this.options.ranges) {
|
||
this.yylloc.range = [this.offset, this.offset += this.yyleng];
|
||
}
|
||
this._more = false;
|
||
this._backtrack = false;
|
||
this._input = this._input.slice(match[0].length);
|
||
this.matched += match[0];
|
||
token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
|
||
if (this.done && this._input) {
|
||
this.done = false;
|
||
}
|
||
if (token) {
|
||
return token;
|
||
} else if (this._backtrack) {
|
||
// recover context
|
||
for (var k in backup) {
|
||
this[k] = backup[k];
|
||
}
|
||
return false; // rule action called reject() implying the next rule should be tested instead.
|
||
}
|
||
return false;
|
||
},
|
||
|
||
// return next match in input
|
||
next:function () {
|
||
if (this.done) {
|
||
return this.EOF;
|
||
}
|
||
if (!this._input) {
|
||
this.done = true;
|
||
}
|
||
|
||
var token,
|
||
match,
|
||
tempMatch,
|
||
index;
|
||
if (!this._more) {
|
||
this.yytext = '';
|
||
this.match = '';
|
||
}
|
||
var rules = this._currentRules();
|
||
for (var i = 0; i < rules.length; i++) {
|
||
tempMatch = this._input.match(this.rules[rules[i]]);
|
||
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
|
||
match = tempMatch;
|
||
index = i;
|
||
if (this.options.backtrack_lexer) {
|
||
token = this.test_match(tempMatch, rules[i]);
|
||
if (token !== false) {
|
||
return token;
|
||
} else if (this._backtrack) {
|
||
match = false;
|
||
continue; // rule action called reject() implying a rule MISmatch.
|
||
} else {
|
||
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
||
return false;
|
||
}
|
||
} else if (!this.options.flex) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (match) {
|
||
token = this.test_match(match, rules[index]);
|
||
if (token !== false) {
|
||
return token;
|
||
}
|
||
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
|
||
return false;
|
||
}
|
||
if (this._input === "") {
|
||
return this.EOF;
|
||
} else {
|
||
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
|
||
text: "",
|
||
token: null,
|
||
line: this.yylineno
|
||
});
|
||
}
|
||
},
|
||
|
||
// return next match that has a token
|
||
lex:function lex() {
|
||
var r = this.next();
|
||
if (r) {
|
||
return r;
|
||
} else {
|
||
return this.lex();
|
||
}
|
||
},
|
||
|
||
// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
|
||
begin:function begin(condition) {
|
||
this.conditionStack.push(condition);
|
||
},
|
||
|
||
// pop the previously active lexer condition state off the condition stack
|
||
popState:function popState() {
|
||
var n = this.conditionStack.length - 1;
|
||
if (n > 0) {
|
||
return this.conditionStack.pop();
|
||
} else {
|
||
return this.conditionStack[0];
|
||
}
|
||
},
|
||
|
||
// produce the lexer rule set which is active for the currently active lexer condition state
|
||
_currentRules:function _currentRules() {
|
||
if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
|
||
return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
|
||
} else {
|
||
return this.conditions["INITIAL"].rules;
|
||
}
|
||
},
|
||
|
||
// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
|
||
topState:function topState(n) {
|
||
n = this.conditionStack.length - 1 - Math.abs(n || 0);
|
||
if (n >= 0) {
|
||
return this.conditionStack[n];
|
||
} else {
|
||
return "INITIAL";
|
||
}
|
||
},
|
||
|
||
// alias for begin(condition)
|
||
pushState:function pushState(condition) {
|
||
this.begin(condition);
|
||
},
|
||
|
||
// return the number of states currently on the stack
|
||
stateStackSize:function stateStackSize() {
|
||
return this.conditionStack.length;
|
||
},
|
||
options: {"case-insensitive":true},
|
||
performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
|
||
// Pre-lexer code can go here
|
||
|
||
var YYSTATE=YY_START;
|
||
switch($avoiding_name_collisions) {
|
||
case 0:return 10;
|
||
break;
|
||
case 1: return 38;
|
||
break;
|
||
case 2: return 39;
|
||
break;
|
||
case 3: return 36;
|
||
break;
|
||
case 4: return 37;
|
||
break;
|
||
case 5:/* skip whitespace */
|
||
break;
|
||
case 6:/* skip comments */
|
||
break;
|
||
case 7:/* skip comments */
|
||
break;
|
||
case 8:return 11;
|
||
break;
|
||
case 9:return 19;
|
||
break;
|
||
case 10:return 17;
|
||
break;
|
||
case 11:return 20;
|
||
break;
|
||
case 12:return 21;
|
||
break;
|
||
case 13:return 18;
|
||
break;
|
||
case 14:return 29;
|
||
break;
|
||
case 15:return 30;
|
||
break;
|
||
case 16:return 25;
|
||
break;
|
||
case 17:return 22;
|
||
break;
|
||
case 18:return 15;
|
||
break;
|
||
case 19:return 4;
|
||
break;
|
||
case 20:return 28;
|
||
break;
|
||
case 21:return 10;
|
||
break;
|
||
case 22:return 33;
|
||
break;
|
||
case 23:return 34;
|
||
break;
|
||
case 24:return 35;
|
||
break;
|
||
case 25:return 36;
|
||
break;
|
||
case 26:return 37;
|
||
break;
|
||
case 27:return 40;
|
||
break;
|
||
case 28:return 6;
|
||
break;
|
||
case 29:return 'INVALID';
|
||
break;
|
||
}
|
||
},
|
||
rules: [/^(?:[\n]+)/i,/^(?:[\-][x])/i,/^(?:[\-][\-][x])/i,/^(?:[\-][>][>])/i,/^(?:[\-][\-][>][>])/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:opt\b)/i,/^(?:loop\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\->:\n,;]+)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i],
|
||
conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"inclusive":true}}
|
||
});
|
||
return lexer;
|
||
})();
|
||
parser.lexer = lexer;
|
||
function Parser () {
|
||
this.yy = {};
|
||
}
|
||
Parser.prototype = parser;parser.Parser = Parser;
|
||
return new Parser;
|
||
})();
|
||
|
||
|
||
if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') {
|
||
exports.parser = parser;
|
||
exports.Parser = parser.Parser;
|
||
exports.parse = function () { return parser.parse.apply(parser, arguments); };
|
||
exports.main = function commonjsMain(args) {
|
||
if (!args[1]) {
|
||
console.log('Usage: '+args[0]+' FILE');
|
||
process.exit(1);
|
||
}
|
||
var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8");
|
||
return exports.parser.parse(source);
|
||
};
|
||
if (typeof module !== 'undefined' && _dereq_.main === module) {
|
||
exports.main(process.argv.slice(1));
|
||
}
|
||
}
|
||
}).call(this,_dereq_("1YiZ5S"))
|
||
},{"1YiZ5S":3,"fs":1,"path":2}],12:[function(_dereq_,module,exports){
|
||
/**
|
||
* Created by knut on 14-11-19.
|
||
*/
|
||
var actors = {};
|
||
var actorKeys = [];
|
||
var messages = [];
|
||
var notes = [];
|
||
exports.addActor = function(id,name,description){
|
||
//console.log('Adding actor: '+id);
|
||
actors[id] = {name:name, description:description};
|
||
actorKeys.push(id);
|
||
};
|
||
|
||
exports.addMessage = function(idFrom, idTo, message, answer){
|
||
//console.log('Adding message from='+idFrom+' to='+idTo+' message='+message+' answer='+answer);
|
||
messages.push({from:idFrom, to:idTo, message:message, answer:answer});
|
||
};
|
||
|
||
exports.addSignal = function(idFrom, idTo, message, messageType){
|
||
//console.log('Adding message from='+idFrom+' to='+idTo+' message='+message+' answer='+answer);
|
||
messages.push({from:idFrom, to:idTo, message:message, type:messageType});
|
||
};
|
||
|
||
exports.getMessages = function(){
|
||
return messages;
|
||
};
|
||
|
||
exports.getActors = function(){
|
||
return actors;
|
||
};
|
||
exports.getActor = function(id){
|
||
return actors[id];
|
||
};
|
||
exports.getActorKeys = function(){
|
||
return Object.keys(actors);
|
||
};
|
||
|
||
exports.clear = function(){
|
||
actors = {};
|
||
messages = [];
|
||
};
|
||
|
||
exports.LINETYPE = {
|
||
SOLID : 0,
|
||
DOTTED : 1,
|
||
NOTE : 2,
|
||
SOLID_CROSS : 3,
|
||
DOTTED_CROSS: 4,
|
||
SOLID_OPEN : 5,
|
||
DOTTED_OPEN : 6,
|
||
LOOP_START : 10,
|
||
LOOP_END : 11,
|
||
ALT_START : 12,
|
||
ALT_ELSE : 13,
|
||
ALT_END : 14,
|
||
OPT_START : 15,
|
||
OPT_END : 16
|
||
|
||
};
|
||
|
||
exports.ARROWTYPE = {
|
||
FILLED : 0,
|
||
OPEN : 1
|
||
};
|
||
|
||
exports.PLACEMENT = {
|
||
LEFTOF : 0,
|
||
RIGHTOF : 1,
|
||
OVER : 2
|
||
};
|
||
|
||
exports.addNote = function (actor, placement, message){
|
||
var note = {actor:actor, placement: placement, message:message};
|
||
|
||
notes.push(note);
|
||
messages.push({from:actor, to:actor, message:message, type:exports.LINETYPE.NOTE, placement: placement});
|
||
};
|
||
|
||
|
||
exports.parseError = function(err, hash) {
|
||
console.log('Syntax error:' + err);
|
||
};
|
||
|
||
exports.apply = function(param){
|
||
if(param instanceof Array ){
|
||
param.forEach(function(item){
|
||
exports.apply(item);
|
||
});
|
||
} else {
|
||
// console.log(param);
|
||
switch(param.type){
|
||
case 'addActor':
|
||
exports.addActor(param.actor, param.actor, param.actor);
|
||
break;
|
||
case 'addNote':
|
||
exports.addNote(param.actor,param.placement, param.text);
|
||
break;
|
||
case 'addMessage':
|
||
exports.addSignal(param.from, param.to, param.msg, param.signalType);
|
||
break;
|
||
case 'loopStart':
|
||
//console.log('Loop text: ',param.loopText);
|
||
exports.addSignal(undefined, undefined, param.loopText, param.signalType);
|
||
//yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START);
|
||
break;
|
||
case 'loopEnd':
|
||
exports.addSignal(undefined, undefined, undefined, param.signalType);
|
||
break;
|
||
case 'optStart':
|
||
//console.log('Loop text: ',param.loopText);
|
||
exports.addSignal(undefined, undefined, param.optText, param.signalType);
|
||
//yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START);
|
||
break;
|
||
case 'optEnd':
|
||
exports.addSignal(undefined, undefined, undefined, param.signalType);
|
||
break;
|
||
case 'altStart':
|
||
//console.log('Loop text: ',param.loopText);
|
||
exports.addSignal(undefined, undefined, param.altText, param.signalType);
|
||
//yy.addSignal(undefined, undefined, $2, yy.LINETYPE.LOOP_START);
|
||
break;
|
||
case 'else':
|
||
exports.addSignal(undefined, undefined, param.altText, param.signalType);
|
||
break;
|
||
case 'altEnd':
|
||
exports.addSignal(undefined, undefined, undefined, param.signalType);
|
||
break;
|
||
}
|
||
|
||
// console.log('xxx',param);
|
||
}
|
||
};
|
||
},{}],13:[function(_dereq_,module,exports){
|
||
/* globals d3 */
|
||
/**
|
||
* Created by knut on 14-11-23.
|
||
*/
|
||
|
||
var sq = _dereq_('./parser/sequenceDiagram').parser;
|
||
sq.yy = _dereq_('./sequenceDb');
|
||
var svgDraw = _dereq_('./svgDraw');
|
||
var conf = {
|
||
|
||
diagramMarginX:50,
|
||
diagramMarginY:10,
|
||
// Margin between actors
|
||
actorMargin:50,
|
||
// Width of actor moxes
|
||
width:150,
|
||
// Height of actor boxes
|
||
height:65,
|
||
// Margin around loop boxes
|
||
boxMargin:10,
|
||
boxTextMargin:5,
|
||
|
||
noteMargin:10,
|
||
// Space between messages
|
||
messageMargin:35
|
||
};
|
||
|
||
exports.bounds = {
|
||
data:{
|
||
startx:undefined,
|
||
stopx :undefined,
|
||
starty:undefined,
|
||
stopy :undefined,
|
||
},
|
||
verticalPos:0,
|
||
|
||
list: [],
|
||
init : function(){
|
||
this.list = [];
|
||
this.data = {
|
||
startx:undefined,
|
||
stopx :undefined,
|
||
starty:undefined,
|
||
stopy :undefined,
|
||
};
|
||
this.verticalPos =0;
|
||
},
|
||
updateVal : function (obj,key,val,fun){
|
||
if(typeof obj[key] === 'undefined'){
|
||
obj[key] = val;
|
||
}else{
|
||
obj[key] = fun(val,obj[key]);
|
||
}
|
||
},
|
||
updateLoops:function(startx,starty,stopx,stopy){
|
||
var _self = this;
|
||
var cnt = 0;
|
||
this.list.forEach(function(loop){
|
||
cnt++;
|
||
// The loop list is a stack so the biggest margins in the beginning of the list
|
||
var n = _self.list.length-cnt+1;
|
||
|
||
_self.updateVal(loop, 'startx',startx - n*conf.boxMargin, Math.min);
|
||
_self.updateVal(loop, 'starty',starty - n*conf.boxMargin, Math.min);
|
||
_self.updateVal(loop, 'stopx' ,stopx + n*conf.boxMargin, Math.max);
|
||
_self.updateVal(loop, 'stopy' ,stopy + n*conf.boxMargin, Math.max);
|
||
|
||
_self.updateVal(exports.bounds.data,'startx',startx - n*conf.boxMargin ,Math.min);
|
||
_self.updateVal(exports.bounds.data,'starty',starty - n*conf.boxMargin ,Math.min);
|
||
_self.updateVal(exports.bounds.data,'stopx' ,stopx + n*conf.boxMargin ,Math.max);
|
||
_self.updateVal(exports.bounds.data,'stopy' ,stopy + n*conf.boxMargin ,Math.max);
|
||
});
|
||
},
|
||
insert:function(startx,starty,stopx,stopy){
|
||
|
||
var _startx, _starty, _stopx, _stopy;
|
||
|
||
_startx = Math.min(startx,stopx);
|
||
_stopx = Math.max(startx,stopx);
|
||
_starty = Math.min(starty,stopy);
|
||
_stopy = Math.max(starty,stopy);
|
||
|
||
this.updateVal(exports.bounds.data,'startx',_startx,Math.min);
|
||
this.updateVal(exports.bounds.data,'starty',_starty,Math.min);
|
||
this.updateVal(exports.bounds.data,'stopx' ,_stopx ,Math.max);
|
||
this.updateVal(exports.bounds.data,'stopy' ,_stopy ,Math.max);
|
||
|
||
this.updateLoops(_startx,_starty,_stopx,_stopy);
|
||
|
||
},
|
||
newLoop:function(title){
|
||
this.list.push({startx:undefined,starty:this.verticalPos,stopx:undefined,stopy:undefined, title:title});
|
||
},
|
||
endLoop:function(){
|
||
var loop = this.list.pop();
|
||
//loop.stopy = exports.bounds.getVerticalPos();
|
||
return loop;
|
||
},
|
||
addElseToLoop:function(message){
|
||
var loop = this.list.pop();
|
||
loop.elsey = exports.bounds.getVerticalPos();
|
||
loop.elseText = message;
|
||
this.list.push(loop);
|
||
},
|
||
bumpVerticalPos:function(bump){
|
||
this.verticalPos = this.verticalPos + bump;
|
||
this.data.stopy = this.verticalPos;
|
||
},
|
||
getVerticalPos:function(){
|
||
return this.verticalPos;
|
||
},
|
||
getBounds:function(){
|
||
return this.data;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Draws an actor in the diagram with the attaced line
|
||
* @param center - The center of the the actor
|
||
* @param pos The position if the actor in the liost of actors
|
||
* @param description The text in the box
|
||
*/
|
||
var drawNote = function(elem, startx, verticalPos, msg){
|
||
var rect = svgDraw.getNoteRect();
|
||
rect.x = startx;
|
||
rect.y = verticalPos;
|
||
rect.width = conf.width;
|
||
rect.class = 'note';
|
||
|
||
var g = elem.append("g");
|
||
var rectElem = svgDraw.drawRect(g, rect);
|
||
|
||
var textObj = svgDraw.getTextObj();
|
||
textObj.x = startx;
|
||
textObj.y = verticalPos+conf.noteMargin;
|
||
textObj.textMargin = conf.noteMargin;
|
||
textObj.dy = '1em';
|
||
textObj.text = msg.message;
|
||
textObj.class = 'noteText';
|
||
|
||
var textElem = svgDraw.drawText(g,textObj);
|
||
|
||
var textHeight = textElem[0][0].getBBox().height;
|
||
exports.bounds.insert(startx, verticalPos, startx + conf.width, verticalPos + 2*conf.noteMargin + textHeight);
|
||
|
||
rectElem.attr('height',textHeight+ 2*conf.noteMargin);
|
||
exports.bounds.bumpVerticalPos(textHeight+ 2*conf.noteMargin);
|
||
};
|
||
|
||
|
||
/**
|
||
* Draws a message
|
||
* @param elem
|
||
* @param startx
|
||
* @param stopx
|
||
* @param verticalPos
|
||
* @param txtCenter
|
||
* @param msg
|
||
*/
|
||
var drawMessage = function(elem, startx, stopx, verticalPos, msg){
|
||
var g = elem.append("g");
|
||
var txtCenter = startx + (stopx-startx)/2;
|
||
|
||
var textElem = g.append("text") // text label for the x axis
|
||
.attr("x", txtCenter)
|
||
.attr("y", verticalPos - 7)
|
||
.style("text-anchor", "middle")
|
||
.attr("class", "messageText")
|
||
.text(msg.message);
|
||
|
||
var textWidth = textElem[0][0].getBBox().width;
|
||
|
||
var line;
|
||
|
||
if(startx===stopx){
|
||
line = g.append("path")
|
||
.attr('d', 'M ' +startx+ ','+verticalPos+' C ' +(startx+60)+ ','+(verticalPos-10)+' ' +(startx+60)+ ',' +
|
||
(verticalPos+30)+' ' +startx+ ','+(verticalPos+20));
|
||
|
||
exports.bounds.bumpVerticalPos(30);
|
||
var dx = Math.max(textWidth/2,100);
|
||
exports.bounds.insert(startx-dx, exports.bounds.getVerticalPos() -10, stopx+dx, exports.bounds.getVerticalPos());
|
||
}else{
|
||
line = g.append("line");
|
||
line.attr("x1", startx);
|
||
line.attr("y1", verticalPos);
|
||
line.attr("x2", stopx);
|
||
line.attr("y2", verticalPos);
|
||
exports.bounds.insert(startx, exports.bounds.getVerticalPos() -10, stopx, exports.bounds.getVerticalPos());
|
||
}
|
||
//Make an SVG Container
|
||
//Draw the line
|
||
if (msg.type === sq.yy.LINETYPE.DOTTED || msg.type === sq.yy.LINETYPE.DOTTED_CROSS || msg.type === sq.yy.LINETYPE.DOTTED_OPEN) {
|
||
line.style("stroke-dasharray", ("3, 3"));
|
||
line.attr("class", "messageLine1");
|
||
}
|
||
else {
|
||
line.attr("class", "messageLine0");
|
||
}
|
||
|
||
line.attr("stroke-width", 2);
|
||
line.attr("stroke", "black");
|
||
line.style("fill", "none"); // remove any fill colour
|
||
if (msg.type === sq.yy.LINETYPE.SOLID || msg.type === sq.yy.LINETYPE.DOTTED){
|
||
line.attr("marker-end", "url(#arrowhead)");
|
||
}
|
||
|
||
if (msg.type === sq.yy.LINETYPE.SOLID_CROSS || msg.type === sq.yy.LINETYPE.DOTTED_CROSS){
|
||
line.attr("marker-end", "url(#crosshead)");
|
||
}
|
||
|
||
};
|
||
|
||
module.exports.drawActors = function(diagram, actors, actorKeys){
|
||
var i;
|
||
// Draw the actors
|
||
for(i=0;i<actorKeys.length;i++){
|
||
var key = actorKeys[i];
|
||
|
||
// Add some rendering data to the object
|
||
actors[key].x = i*conf.actorMargin +i*conf.width;
|
||
actors[key].y = 0;
|
||
actors[key].width = conf.diagramMarginY;
|
||
actors[key].height = conf.diagramMarginY;
|
||
|
||
// Draw the box with the attached line
|
||
svgDraw.drawActor(diagram, actors[key].x, actors[key].description, conf);
|
||
exports.bounds.insert(actors[key].x, 0, actors[key].x + conf.width, conf.height);
|
||
|
||
}
|
||
|
||
// Add a margin between the actor boxes and the first arrow
|
||
//exports.bounds.bumpVerticalPos(conf.height+conf.messageMargin);
|
||
exports.bounds.bumpVerticalPos(conf.height);
|
||
};
|
||
|
||
|
||
module.exports.setConf = function(cnf){
|
||
conf = cnf;
|
||
};
|
||
/**
|
||
* Draws a flowchart in the tag with id: id based on the graph definition in text.
|
||
* @param text
|
||
* @param id
|
||
*/
|
||
module.exports.draw = function (text, id) {
|
||
sq.yy.clear();
|
||
//console.log(text);
|
||
sq.parse(text+'\n');
|
||
exports.bounds.init();
|
||
var diagram = d3.select('#'+id);
|
||
|
||
var startx;
|
||
var stopx;
|
||
|
||
// Fetch data from the parsing
|
||
var actors = sq.yy.getActors();
|
||
var actorKeys = sq.yy.getActorKeys();
|
||
var messages = sq.yy.getMessages();
|
||
|
||
module.exports.drawActors(diagram, actors, actorKeys);
|
||
|
||
// The arrow head definition is attached to the svg once
|
||
svgDraw.insertArrowHead(diagram);
|
||
svgDraw.insertArrowCrossHead(diagram);
|
||
|
||
// Draw the messages/signals
|
||
messages.forEach(function(msg){
|
||
var loopData;
|
||
|
||
switch(msg.type){
|
||
case sq.yy.LINETYPE.NOTE:
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
|
||
startx = actors[msg.from].x;
|
||
stopx = actors[msg.to].x;
|
||
|
||
if(msg.placement !== 0){
|
||
// Right of
|
||
drawNote(diagram, startx + (conf.width + conf.actorMargin)/2, exports.bounds.getVerticalPos(), msg);
|
||
|
||
}else{
|
||
// Left of
|
||
drawNote(diagram, startx - (conf.width + conf.actorMargin)/2, exports.bounds.getVerticalPos(), msg);
|
||
}
|
||
break;
|
||
case sq.yy.LINETYPE.LOOP_START:
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
exports.bounds.newLoop(msg.message);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin);
|
||
break;
|
||
case sq.yy.LINETYPE.LOOP_END:
|
||
loopData = exports.bounds.endLoop();
|
||
|
||
svgDraw.drawLoop(diagram, loopData,'loop', conf);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
break;
|
||
case sq.yy.LINETYPE.OPT_START:
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
exports.bounds.newLoop(msg.message);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin);
|
||
break;
|
||
case sq.yy.LINETYPE.OPT_END:
|
||
loopData = exports.bounds.endLoop();
|
||
|
||
svgDraw.drawLoop(diagram, loopData, 'opt', conf);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
break;
|
||
case sq.yy.LINETYPE.ALT_START:
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
exports.bounds.newLoop(msg.message);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin);
|
||
break;
|
||
case sq.yy.LINETYPE.ALT_ELSE:
|
||
|
||
//exports.drawLoop(diagram, loopData);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
loopData = exports.bounds.addElseToLoop(msg.message);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
break;
|
||
case sq.yy.LINETYPE.ALT_END:
|
||
loopData = exports.bounds.endLoop();
|
||
|
||
svgDraw.drawLoop(diagram, loopData,'alt', conf);
|
||
exports.bounds.bumpVerticalPos(conf.boxMargin);
|
||
break;
|
||
default:
|
||
exports.bounds.bumpVerticalPos(conf.messageMargin);
|
||
startx = actors[msg.from].x + conf.width/2;
|
||
stopx = actors[msg.to].x + conf.width/2;
|
||
|
||
drawMessage(diagram, startx, stopx, exports.bounds.getVerticalPos(), msg);
|
||
|
||
}
|
||
});
|
||
|
||
var box = exports.bounds.getBounds();
|
||
|
||
var height = box.stopy-box.starty+2*conf.diagramMarginY;
|
||
var width = box.stopx-box.startx+2*conf.diagramMarginX;
|
||
|
||
diagram.attr("height",height);
|
||
diagram.attr("width", width );
|
||
diagram.attr("viewBox", (box.startx-conf.diagramMarginX) + ' -' +conf.diagramMarginY + ' ' + width + ' ' + height);
|
||
};
|
||
|
||
},{"./parser/sequenceDiagram":11,"./sequenceDb":12,"./svgDraw":14}],14:[function(_dereq_,module,exports){
|
||
/**
|
||
* Created by knut on 14-12-20.
|
||
*/
|
||
exports.drawRect = function(elem , rectData){
|
||
var rectElem = elem.append("rect");
|
||
rectElem.attr("x", rectData.x);
|
||
rectElem.attr("y", rectData.y);
|
||
rectElem.attr("fill", rectData.fill);
|
||
rectElem.attr("stroke", rectData.stroke);
|
||
rectElem.attr("width", rectData.width);
|
||
rectElem.attr("height", rectData.height);
|
||
rectElem.attr("rx", rectData.rx);
|
||
rectElem.attr("ry", rectData.ry);
|
||
|
||
if(typeof rectData.class !== 'undefined'){
|
||
rectElem.attr("class", rectData.class);
|
||
}
|
||
|
||
return rectElem;
|
||
};
|
||
|
||
exports.drawText = function(elem , textData){
|
||
var textElem = elem.append('text');
|
||
textElem.attr('x', textData.x);
|
||
textElem.attr('y', textData.y);
|
||
textElem.style('text-anchor', textData.anchor);
|
||
textElem.attr('fill', textData.fill);
|
||
|
||
textData.text.split(/<br\/?>/ig).forEach(function(rowText){
|
||
var span = textElem.append('tspan');
|
||
span.attr('x', textData.x +textData.textMargin);
|
||
span.attr('dy', textData.dy);
|
||
span.text(rowText);
|
||
});
|
||
|
||
if(typeof textData.class !== 'undefined'){
|
||
textElem.attr("class", textData.class);
|
||
}
|
||
|
||
return textElem;
|
||
};
|
||
|
||
exports.drawLabel = function(elem , txtObject){
|
||
var rectData = exports.getNoteRect();
|
||
rectData.x = txtObject.x;
|
||
rectData.y = txtObject.y;
|
||
rectData.width = 50;
|
||
rectData.height = 20;
|
||
rectData.fill = '#526e52';
|
||
rectData.stroke = 'none';
|
||
rectData.class = 'labelBox';
|
||
//rectData.color = 'white';
|
||
|
||
exports.drawRect(elem, rectData);
|
||
|
||
txtObject.y = txtObject.y + txtObject.labelMargin;
|
||
txtObject.x = txtObject.x + 0.5*txtObject.labelMargin;
|
||
txtObject.fill = 'white';
|
||
exports.drawText(elem, txtObject);
|
||
|
||
//return textElem;
|
||
};
|
||
|
||
/**
|
||
* Draws an actor in the diagram with the attaced line
|
||
* @param center - The center of the the actor
|
||
* @param pos The position if the actor in the liost of actors
|
||
* @param description The text in the box
|
||
*/
|
||
exports.drawActor = function(elem, left,description,conf){
|
||
var center = left + (conf.width/2);
|
||
var g = elem.append("g");
|
||
g.append("line")
|
||
.attr("x1", center)
|
||
.attr("y1", 5)
|
||
.attr("x2", center)
|
||
.attr("y2", 2000)
|
||
.attr("class", 'actor-line')
|
||
.attr("stroke-width", '0.5px')
|
||
.attr("stroke", '#999');
|
||
|
||
var rect = exports.getNoteRect();
|
||
rect.x = left;
|
||
rect.fill = '#eaeaea';
|
||
rect.width = conf.width;
|
||
rect.height = conf.height;
|
||
rect.class = 'actor';
|
||
rect.rx = 3;
|
||
rect.ry = 3;
|
||
exports.drawRect(g, rect);
|
||
|
||
g.append("text") // text label for the x axis
|
||
.attr("x", center)
|
||
.attr("y", (conf.height/2)+5)
|
||
.attr('class','actor')
|
||
.style("text-anchor", "middle")
|
||
.text(description)
|
||
;
|
||
};
|
||
|
||
/**
|
||
* Draws an actor in the diagram with the attaced line
|
||
* @param center - The center of the the actor
|
||
* @param pos The position if the actor in the list of actors
|
||
* @param description The text in the box
|
||
*/
|
||
exports.drawLoop = function(elem,bounds,labelText, conf){
|
||
var g = elem.append("g");
|
||
var drawLoopLine = function(startx,starty,stopx,stopy){
|
||
g.append("line")
|
||
.attr("x1", startx)
|
||
.attr("y1", starty)
|
||
.attr("x2", stopx )
|
||
.attr("y2", stopy )
|
||
.attr("stroke-width", 2)
|
||
.attr("stroke", "#526e52")
|
||
.attr('class','loopLine');
|
||
};
|
||
drawLoopLine(bounds.startx, bounds.starty, bounds.stopx , bounds.starty);
|
||
drawLoopLine(bounds.stopx , bounds.starty, bounds.stopx , bounds.stopy );
|
||
drawLoopLine(bounds.startx, bounds.stopy , bounds.stopx , bounds.stopy );
|
||
drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy );
|
||
if(typeof bounds.elsey !== 'undefined'){
|
||
drawLoopLine(bounds.startx, bounds.elsey, bounds.stopx, bounds.elsey );
|
||
}
|
||
|
||
var txt = exports.getTextObj();
|
||
txt.text = labelText;
|
||
txt.x = bounds.startx;
|
||
txt.y = bounds.starty;
|
||
txt.labelMargin = 1.5 * conf.boxMargin;
|
||
txt.class = 'labelText';
|
||
txt.fill = 'white';
|
||
|
||
exports.drawLabel(g,txt);
|
||
|
||
txt = exports.getTextObj();
|
||
txt.text = '[ ' + bounds.title + ' ]';
|
||
txt.x = bounds.startx + (bounds.stopx - bounds.startx)/2;
|
||
txt.y = bounds.starty + 1.5 * conf.boxMargin;
|
||
txt.anchor = 'middle';
|
||
txt.class = 'loopText';
|
||
|
||
exports.drawText(g,txt);
|
||
|
||
if(typeof bounds.elseText !== 'undefined') {
|
||
txt.text = '[ ' + bounds.elseText + ' ]';
|
||
txt.y = bounds.elsey + 1.5 * conf.boxMargin;
|
||
exports.drawText(g, txt);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Setup arrow head and define the marker. The result is appended to the svg.
|
||
*/
|
||
exports.insertArrowHead = function(elem){
|
||
elem.append("defs").append("marker")
|
||
.attr("id", "arrowhead")
|
||
.attr("refX", 5)
|
||
.attr("refY", 2)
|
||
.attr("markerWidth", 6)
|
||
.attr("markerHeight", 4)
|
||
.attr("orient", "auto")
|
||
.append("path")
|
||
.attr("d", "M 0,0 V 4 L6,2 Z"); //this is actual shape for arrowhead
|
||
};
|
||
/**
|
||
* Setup arrow head and define the marker. The result is appended to the svg.
|
||
*/
|
||
exports.insertArrowCrossHead = function(elem){
|
||
var defs = elem.append("defs");
|
||
var marker = defs.append("marker")
|
||
.attr("id", "crosshead")
|
||
.attr("markerWidth", 15)
|
||
.attr("markerHeight", 8)
|
||
.attr("orient", "auto")
|
||
.attr("refX", 16)
|
||
.attr("refY", 4);
|
||
|
||
// The arrow
|
||
marker.append("path")
|
||
.attr("fill",'black')
|
||
.attr("stroke",'#000000')
|
||
.style("stroke-dasharray", ("0, 0"))
|
||
.attr("stroke-width",'1px')
|
||
.attr("d", "M 9,2 V 6 L16,4 Z");
|
||
|
||
// The cross
|
||
marker.append("path")
|
||
.attr("fill",'none')
|
||
.attr("stroke",'#000000')
|
||
.style("stroke-dasharray", ("0, 0"))
|
||
.attr("stroke-width",'1px')
|
||
.attr("d", "M 0,1 L 6,7 M 6,1 L 0,7")
|
||
; //this is actual shape for arrowhead
|
||
|
||
};
|
||
|
||
exports.getTextObj = function(){
|
||
var txt = {
|
||
x: 0,
|
||
y: 0,
|
||
'fill':'black',
|
||
'text-anchor': 'start',
|
||
style: '#666',
|
||
width: 100,
|
||
height: 100,
|
||
textMargin:0,
|
||
rx: 0,
|
||
ry: 0
|
||
};
|
||
return txt;
|
||
};
|
||
|
||
exports.getNoteRect = function(){
|
||
var rect = {
|
||
x: 0,
|
||
y: 0,
|
||
fill: '#EDF2AE',
|
||
stroke: '#666',
|
||
width: 100,
|
||
anchor:'start',
|
||
height: 100,
|
||
rx: 0,
|
||
ry: 0
|
||
};
|
||
return rect;
|
||
};
|
||
|
||
},{}],15:[function(_dereq_,module,exports){
|
||
(function (global){
|
||
var graph = _dereq_('./diagrams/flowchart/graphDb');
|
||
var flow = _dereq_('./diagrams/flowchart/parser/flow');
|
||
var utils = _dereq_('./utils');
|
||
var flowRenderer = _dereq_('./diagrams/flowchart/flowRenderer');
|
||
var seq = _dereq_('./diagrams/sequenceDiagram/sequenceRenderer');
|
||
var he = _dereq_('he');
|
||
|
||
/**
|
||
* Function that goes through the document to find the chart definitions in there and render them.
|
||
*
|
||
* The function tags the processed attributes with the attribute data-processed and ignores found elements with the
|
||
* attribute already set. This way the init function can be triggered several times.
|
||
*
|
||
* ```
|
||
* graph LR;
|
||
* a(Find elements)-->b{Processed};
|
||
* b-->|Yes|c(Leave element);
|
||
* c-->|No |d(Transform);
|
||
* ```
|
||
*/
|
||
var init = function () {
|
||
var arr = document.querySelectorAll('.mermaid');
|
||
var i;
|
||
|
||
var cnt = 0;
|
||
for (i = 0; i < arr.length; i++) {
|
||
var element = arr[i];
|
||
|
||
// Check if previously processed
|
||
if(!element.getAttribute("data-processed")) {
|
||
element.setAttribute("data-processed", true);
|
||
} else {
|
||
continue;
|
||
}
|
||
|
||
var id;
|
||
|
||
id = 'mermaidChart' + cnt;
|
||
cnt++;
|
||
|
||
var txt = element.innerHTML;
|
||
txt = txt.replace(/>/g,'>');
|
||
txt = txt.replace(/</g,'<');
|
||
txt = he.decode(txt).trim();
|
||
|
||
element.innerHTML = '<svg id="' + id + '" width="100%" xmlns="http://www.w3.org/2000/svg">' +
|
||
'<g />' +
|
||
'</svg>';
|
||
|
||
var graphType = utils.detectType(txt);
|
||
var classes = {};
|
||
|
||
switch(graphType){
|
||
case 'graph':
|
||
classes = flowRenderer.getClasses(txt, false);
|
||
flowRenderer.draw(txt, id, false);
|
||
utils.cloneCssStyles(element.firstChild, classes);
|
||
graph.bindFunctions();
|
||
break;
|
||
case 'dotGraph':
|
||
classes = flowRenderer.getClasses(txt, true);
|
||
flowRenderer.draw(txt, id, true);
|
||
utils.cloneCssStyles(element.firstChild, classes);
|
||
break;
|
||
case 'sequenceDiagram':
|
||
seq.draw(txt,id);
|
||
// TODO - Get styles for sequence diagram
|
||
utils.cloneCssStyles(element.firstChild, []);
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
};
|
||
|
||
exports.tester = function(){};
|
||
|
||
/**
|
||
* Function returning version information
|
||
* @returns {string} A string containing the version info
|
||
*/
|
||
exports.version = function(){
|
||
return _dereq_('../package.json').version;
|
||
};
|
||
|
||
var equals = function (val, variable){
|
||
if(typeof variable === 'undefined'){
|
||
return false;
|
||
}
|
||
else{
|
||
return (val === variable);
|
||
}
|
||
};
|
||
|
||
global.mermaid = {
|
||
startOnLoad:true,
|
||
init:function(){
|
||
init();
|
||
},
|
||
version:function(){
|
||
return exports.version();
|
||
},
|
||
getParser:function(){
|
||
return flow.parser;
|
||
}
|
||
};
|
||
|
||
exports.contentLoaded = function(){
|
||
// Check state of start config mermaid namespece
|
||
//console.log('global.mermaid.startOnLoad',global.mermaid.startOnLoad);
|
||
//console.log('mermaid_config',mermaid_config);
|
||
if(global.mermaid.startOnLoad) {
|
||
|
||
// For backwards compatability reasons also check mermaid_config variable
|
||
if (typeof mermaid_config !== 'undefined') {
|
||
// Check if property startOnLoad is set
|
||
if (equals(true, mermaid_config.startOnLoad)) {
|
||
global.mermaid.init();
|
||
}
|
||
}
|
||
else {
|
||
// No config found, do autostart in this simple case
|
||
global.mermaid.init();
|
||
}
|
||
}
|
||
|
||
};
|
||
|
||
if(typeof document !== 'undefined'){
|
||
/**
|
||
* Wait for coument loaded before starting the execution
|
||
*/
|
||
document.addEventListener('DOMContentLoaded', function(){
|
||
exports.contentLoaded();
|
||
}, false);
|
||
}
|
||
|
||
|
||
|
||
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
||
},{"../package.json":5,"./diagrams/flowchart/flowRenderer":7,"./diagrams/flowchart/graphDb":8,"./diagrams/flowchart/parser/flow":10,"./diagrams/sequenceDiagram/sequenceRenderer":13,"./utils":16,"he":4}],16:[function(_dereq_,module,exports){
|
||
/**
|
||
* Created by knut on 14-11-23.
|
||
*/
|
||
/**
|
||
* Detects the type of the graph text.
|
||
* @param {string} text The text defining the graph
|
||
* @param {string} text The second text defining the graph
|
||
* @returns {string} A graph definition key
|
||
*/
|
||
module.exports.detectType = function(text,a){
|
||
if(text.match(/^\s*sequenceDiagram/)){
|
||
return "sequenceDiagram";
|
||
}
|
||
|
||
if(text.match(/^\s*sequence/)){
|
||
//console.log('Detected sequence syntax');
|
||
return "sequence";
|
||
}
|
||
|
||
if(text.match(/^\s*digraph/)) {
|
||
console.log('Detected flow syntax');
|
||
return "dotGraph";
|
||
}
|
||
|
||
return "graph";
|
||
};
|
||
|
||
/**
|
||
* Copies all relevant CSS content into the graph SVG.
|
||
* This allows the SVG to be copied as is while keeping class based styling
|
||
* @param {element} svg The root element of the SVG
|
||
* @param {object} Hash table of class definitions from the graph definition
|
||
*/
|
||
module.exports.cloneCssStyles = function(svg, classes){
|
||
var usedStyles = "";
|
||
var sheets = document.styleSheets;
|
||
for (var i = 0; i < sheets.length; i++) {
|
||
// Avoid multiple inclusion on pages with multiple graphs
|
||
if (sheets[i].title !== 'mermaid-svg-internal-css') {
|
||
var rules = sheets[i].cssRules;
|
||
if(rules !== null) {
|
||
for (var j = 0; j < rules.length; j++) {
|
||
var rule = rules[j];
|
||
if (typeof(rule.style) !== 'undefined') {
|
||
var elems = svg.querySelectorAll(rule.selectorText);
|
||
if (elems.length > 0) {
|
||
usedStyles += rule.selectorText + " { " + rule.style.cssText + " }\n";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
var defaultStyles = "";
|
||
var embeddedStyles = "";
|
||
|
||
for (var className in classes) {
|
||
if (classes.hasOwnProperty(className) && typeof(className) != "undefined") {
|
||
if (className === 'default') {
|
||
if (classes.default.styles instanceof Array) {
|
||
defaultStyles += '.node' + ' { ' + classes[className].styles.join("; ") + '; }\n';
|
||
}
|
||
if (classes.default.nodeLabelStyles instanceof Array) {
|
||
defaultStyles += '.node text ' + ' { ' + classes[className].nodeLabelStyles.join("; ") + '; }\n';
|
||
}
|
||
if (classes.default.edgeLabelStyles instanceof Array) {
|
||
defaultStyles += '.edgeLabel text ' + ' { ' + classes[className].edgeLabelStyles.join("; ") + '; }\n';
|
||
}
|
||
} else {
|
||
if (classes[className].styles instanceof Array) {
|
||
embeddedStyles += '.' + className + ' { ' + classes[className].styles.join("; ") + '; }\n';
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (usedStyles !== "" || defaultStyles !== "" || embeddedStyles !== "") {
|
||
var s = document.createElement('style');
|
||
s.setAttribute('type', 'text/css');
|
||
s.setAttribute('title', 'mermaid-svg-internal-css');
|
||
s.innerHTML = "/* <![CDATA[ */\n";
|
||
// Make this CSS local to this SVG
|
||
s.innerHTML += "#" + svg.id.trim() + " {\n";
|
||
if (defaultStyles !== "") {
|
||
s.innerHTML += defaultStyles;
|
||
}
|
||
if (usedStyles !== "") {
|
||
s.innerHTML += usedStyles;
|
||
}
|
||
if (embeddedStyles !== "") {
|
||
s.innerHTML += embeddedStyles;
|
||
}
|
||
s.innerHTML += "}\n";
|
||
s.innerHTML += "/* ]]> */\n";
|
||
svg.insertBefore(s, svg.firstChild);
|
||
}
|
||
};
|
||
|
||
var equals = function (val, variable){
|
||
if(typeof variable === 'undefined'){
|
||
return false;
|
||
}
|
||
else{
|
||
return (val === variable);
|
||
}
|
||
};
|
||
|
||
var mermaid_config_exists = function() {
|
||
return (typeof mermaid_config !== 'undefined');
|
||
};
|
||
|
||
var mermaid_config_item_exists = function(item) {
|
||
return mermaid_config_exists() && (typeof mermaid_config[item] !== 'undefined');
|
||
};
|
||
|
||
module.exports.config = {};
|
||
|
||
module.exports.config.startOnLoad = function() {
|
||
if (mermaid_config_item_exists(startOnLoad)) {
|
||
return mermaid_config.startOnLoad === true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
module.exports.config.labelStyle = function() {
|
||
if (mermaid_config_item_exists(labelStyle)) {
|
||
return mermaid_config.labelStyle === 'html';
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
},{}]},{},[15])
|
||
(15)
|
||
}); |