Commit b294bff1a8
Changed files (4)
lib
src
lib/docs/commonmark.js
@@ -0,0 +1,10255 @@
+/* commonmark 0.30.0 https://github.com/commonmark/commonmark.js @license BSD3 */
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = global || self, factory(global.commonmark = {}));
+}(this, (function (exports) { 'use strict';
+
+ function isContainer(node) {
+ switch (node._type) {
+ case "document":
+ case "block_quote":
+ case "list":
+ case "item":
+ case "paragraph":
+ case "heading":
+ case "emph":
+ case "strong":
+ case "link":
+ case "image":
+ case "custom_inline":
+ case "custom_block":
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ var resumeAt = function(node, entering) {
+ this.current = node;
+ this.entering = entering === true;
+ };
+
+ var next = function() {
+ var cur = this.current;
+ var entering = this.entering;
+
+ if (cur === null) {
+ return null;
+ }
+
+ var container = isContainer(cur);
+
+ if (entering && container) {
+ if (cur._firstChild) {
+ this.current = cur._firstChild;
+ this.entering = true;
+ } else {
+ // stay on node but exit
+ this.entering = false;
+ }
+ } else if (cur === this.root) {
+ this.current = null;
+ } else if (cur._next === null) {
+ this.current = cur._parent;
+ this.entering = false;
+ } else {
+ this.current = cur._next;
+ this.entering = true;
+ }
+
+ return { entering: entering, node: cur };
+ };
+
+ var NodeWalker = function(root) {
+ return {
+ current: root,
+ root: root,
+ entering: true,
+ next: next,
+ resumeAt: resumeAt
+ };
+ };
+
+ var Node = function(nodeType, sourcepos) {
+ this._type = nodeType;
+ this._parent = null;
+ this._firstChild = null;
+ this._lastChild = null;
+ this._prev = null;
+ this._next = null;
+ this._sourcepos = sourcepos;
+ this._lastLineBlank = false;
+ this._lastLineChecked = false;
+ this._open = true;
+ this._string_content = null;
+ this._literal = null;
+ this._listData = {};
+ this._info = null;
+ this._destination = null;
+ this._title = null;
+ this._isFenced = false;
+ this._fenceChar = null;
+ this._fenceLength = 0;
+ this._fenceOffset = null;
+ this._level = null;
+ this._onEnter = null;
+ this._onExit = null;
+ };
+
+ var proto = Node.prototype;
+
+ Object.defineProperty(proto, "isContainer", {
+ get: function() {
+ return isContainer(this);
+ }
+ });
+
+ Object.defineProperty(proto, "type", {
+ get: function() {
+ return this._type;
+ }
+ });
+
+ Object.defineProperty(proto, "firstChild", {
+ get: function() {
+ return this._firstChild;
+ }
+ });
+
+ Object.defineProperty(proto, "lastChild", {
+ get: function() {
+ return this._lastChild;
+ }
+ });
+
+ Object.defineProperty(proto, "next", {
+ get: function() {
+ return this._next;
+ }
+ });
+
+ Object.defineProperty(proto, "prev", {
+ get: function() {
+ return this._prev;
+ }
+ });
+
+ Object.defineProperty(proto, "parent", {
+ get: function() {
+ return this._parent;
+ }
+ });
+
+ Object.defineProperty(proto, "sourcepos", {
+ get: function() {
+ return this._sourcepos;
+ }
+ });
+
+ Object.defineProperty(proto, "literal", {
+ get: function() {
+ return this._literal;
+ },
+ set: function(s) {
+ this._literal = s;
+ }
+ });
+
+ Object.defineProperty(proto, "destination", {
+ get: function() {
+ return this._destination;
+ },
+ set: function(s) {
+ this._destination = s;
+ }
+ });
+
+ Object.defineProperty(proto, "title", {
+ get: function() {
+ return this._title;
+ },
+ set: function(s) {
+ this._title = s;
+ }
+ });
+
+ Object.defineProperty(proto, "info", {
+ get: function() {
+ return this._info;
+ },
+ set: function(s) {
+ this._info = s;
+ }
+ });
+
+ Object.defineProperty(proto, "level", {
+ get: function() {
+ return this._level;
+ },
+ set: function(s) {
+ this._level = s;
+ }
+ });
+
+ Object.defineProperty(proto, "listType", {
+ get: function() {
+ return this._listData.type;
+ },
+ set: function(t) {
+ this._listData.type = t;
+ }
+ });
+
+ Object.defineProperty(proto, "listTight", {
+ get: function() {
+ return this._listData.tight;
+ },
+ set: function(t) {
+ this._listData.tight = t;
+ }
+ });
+
+ Object.defineProperty(proto, "listStart", {
+ get: function() {
+ return this._listData.start;
+ },
+ set: function(n) {
+ this._listData.start = n;
+ }
+ });
+
+ Object.defineProperty(proto, "listDelimiter", {
+ get: function() {
+ return this._listData.delimiter;
+ },
+ set: function(delim) {
+ this._listData.delimiter = delim;
+ }
+ });
+
+ Object.defineProperty(proto, "onEnter", {
+ get: function() {
+ return this._onEnter;
+ },
+ set: function(s) {
+ this._onEnter = s;
+ }
+ });
+
+ Object.defineProperty(proto, "onExit", {
+ get: function() {
+ return this._onExit;
+ },
+ set: function(s) {
+ this._onExit = s;
+ }
+ });
+
+ Node.prototype.appendChild = function(child) {
+ child.unlink();
+ child._parent = this;
+ if (this._lastChild) {
+ this._lastChild._next = child;
+ child._prev = this._lastChild;
+ this._lastChild = child;
+ } else {
+ this._firstChild = child;
+ this._lastChild = child;
+ }
+ };
+
+ Node.prototype.prependChild = function(child) {
+ child.unlink();
+ child._parent = this;
+ if (this._firstChild) {
+ this._firstChild._prev = child;
+ child._next = this._firstChild;
+ this._firstChild = child;
+ } else {
+ this._firstChild = child;
+ this._lastChild = child;
+ }
+ };
+
+ Node.prototype.unlink = function() {
+ if (this._prev) {
+ this._prev._next = this._next;
+ } else if (this._parent) {
+ this._parent._firstChild = this._next;
+ }
+ if (this._next) {
+ this._next._prev = this._prev;
+ } else if (this._parent) {
+ this._parent._lastChild = this._prev;
+ }
+ this._parent = null;
+ this._next = null;
+ this._prev = null;
+ };
+
+ Node.prototype.insertAfter = function(sibling) {
+ sibling.unlink();
+ sibling._next = this._next;
+ if (sibling._next) {
+ sibling._next._prev = sibling;
+ }
+ sibling._prev = this;
+ this._next = sibling;
+ sibling._parent = this._parent;
+ if (!sibling._next) {
+ sibling._parent._lastChild = sibling;
+ }
+ };
+
+ Node.prototype.insertBefore = function(sibling) {
+ sibling.unlink();
+ sibling._prev = this._prev;
+ if (sibling._prev) {
+ sibling._prev._next = sibling;
+ }
+ sibling._next = this;
+ this._prev = sibling;
+ sibling._parent = this._parent;
+ if (!sibling._prev) {
+ sibling._parent._firstChild = sibling;
+ }
+ };
+
+ Node.prototype.walker = function() {
+ var walker = new NodeWalker(this);
+ return walker;
+ };
+
+ /* Example of use of walker:
+
+ var walker = w.walker();
+ var event;
+
+ while (event = walker.next()) {
+ console.log(event.entering, event.node.type);
+ }
+
+ */
+
+ var encodeCache = {};
+
+
+ // Create a lookup array where anything but characters in `chars` string
+ // and alphanumeric chars is percent-encoded.
+ //
+ function getEncodeCache(exclude) {
+ var i, ch, cache = encodeCache[exclude];
+ if (cache) { return cache; }
+
+ cache = encodeCache[exclude] = [];
+
+ for (i = 0; i < 128; i++) {
+ ch = String.fromCharCode(i);
+
+ if (/^[0-9a-z]$/i.test(ch)) {
+ // always allow unencoded alphanumeric characters
+ cache.push(ch);
+ } else {
+ cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));
+ }
+ }
+
+ for (i = 0; i < exclude.length; i++) {
+ cache[exclude.charCodeAt(i)] = exclude[i];
+ }
+
+ return cache;
+ }
+
+
+ // Encode unsafe characters with percent-encoding, skipping already
+ // encoded sequences.
+ //
+ // - string - string to encode
+ // - exclude - list of characters to ignore (in addition to a-zA-Z0-9)
+ // - keepEscaped - don't encode '%' in a correct escape sequence (default: true)
+ //
+ function encode(string, exclude, keepEscaped) {
+ var i, l, code, nextCode, cache,
+ result = '';
+
+ if (typeof exclude !== 'string') {
+ // encode(string, keepEscaped)
+ keepEscaped = exclude;
+ exclude = encode.defaultChars;
+ }
+
+ if (typeof keepEscaped === 'undefined') {
+ keepEscaped = true;
+ }
+
+ cache = getEncodeCache(exclude);
+
+ for (i = 0, l = string.length; i < l; i++) {
+ code = string.charCodeAt(i);
+
+ if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {
+ if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {
+ result += string.slice(i, i + 3);
+ i += 2;
+ continue;
+ }
+ }
+
+ if (code < 128) {
+ result += cache[code];
+ continue;
+ }
+
+ if (code >= 0xD800 && code <= 0xDFFF) {
+ if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {
+ nextCode = string.charCodeAt(i + 1);
+ if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {
+ result += encodeURIComponent(string[i] + string[i + 1]);
+ i++;
+ continue;
+ }
+ }
+ result += '%EF%BF%BD';
+ continue;
+ }
+
+ result += encodeURIComponent(string[i]);
+ }
+
+ return result;
+ }
+
+ encode.defaultChars = ";/?:@&=+$,-_.!~*'()#";
+ encode.componentChars = "-_.!~*'()";
+
+
+ var encode_1 = encode;
+
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+ function unwrapExports (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+ }
+
+ function createCommonjsModule(fn, module) {
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
+ }
+
+ function getCjsExportFromNamespace (n) {
+ return n && n['default'] || n;
+ }
+
+ var Aacute = "ร";
+ var aacute = "รก";
+ var Abreve = "ฤ";
+ var abreve = "ฤ";
+ var ac = "โพ";
+ var acd = "โฟ";
+ var acE = "โพฬณ";
+ var Acirc = "ร";
+ var acirc = "รข";
+ var acute = "ยด";
+ var Acy = "ะ";
+ var acy = "ะฐ";
+ var AElig = "ร";
+ var aelig = "รฆ";
+ var af = "โก";
+ var Afr = "๐";
+ var afr = "๐";
+ var Agrave = "ร";
+ var agrave = "ร ";
+ var alefsym = "โต";
+ var aleph = "โต";
+ var Alpha = "ฮ";
+ var alpha = "ฮฑ";
+ var Amacr = "ฤ";
+ var amacr = "ฤ";
+ var amalg = "โจฟ";
+ var amp = "&";
+ var AMP = "&";
+ var andand = "โฉ";
+ var And = "โฉ";
+ var and = "โง";
+ var andd = "โฉ";
+ var andslope = "โฉ";
+ var andv = "โฉ";
+ var ang = "โ ";
+ var ange = "โฆค";
+ var angle = "โ ";
+ var angmsdaa = "โฆจ";
+ var angmsdab = "โฆฉ";
+ var angmsdac = "โฆช";
+ var angmsdad = "โฆซ";
+ var angmsdae = "โฆฌ";
+ var angmsdaf = "โฆญ";
+ var angmsdag = "โฆฎ";
+ var angmsdah = "โฆฏ";
+ var angmsd = "โก";
+ var angrt = "โ";
+ var angrtvb = "โพ";
+ var angrtvbd = "โฆ";
+ var angsph = "โข";
+ var angst = "ร
";
+ var angzarr = "โผ";
+ var Aogon = "ฤ";
+ var aogon = "ฤ
";
+ var Aopf = "๐ธ";
+ var aopf = "๐";
+ var apacir = "โฉฏ";
+ var ap = "โ";
+ var apE = "โฉฐ";
+ var ape = "โ";
+ var apid = "โ";
+ var apos = "'";
+ var ApplyFunction = "โก";
+ var approx = "โ";
+ var approxeq = "โ";
+ var Aring = "ร
";
+ var aring = "รฅ";
+ var Ascr = "๐";
+ var ascr = "๐ถ";
+ var Assign = "โ";
+ var ast = "*";
+ var asymp = "โ";
+ var asympeq = "โ";
+ var Atilde = "ร";
+ var atilde = "รฃ";
+ var Auml = "ร";
+ var auml = "รค";
+ var awconint = "โณ";
+ var awint = "โจ";
+ var backcong = "โ";
+ var backepsilon = "ฯถ";
+ var backprime = "โต";
+ var backsim = "โฝ";
+ var backsimeq = "โ";
+ var Backslash = "โ";
+ var Barv = "โซง";
+ var barvee = "โฝ";
+ var barwed = "โ
";
+ var Barwed = "โ";
+ var barwedge = "โ
";
+ var bbrk = "โต";
+ var bbrktbrk = "โถ";
+ var bcong = "โ";
+ var Bcy = "ะ";
+ var bcy = "ะฑ";
+ var bdquo = "โ";
+ var becaus = "โต";
+ var because = "โต";
+ var Because = "โต";
+ var bemptyv = "โฆฐ";
+ var bepsi = "ฯถ";
+ var bernou = "โฌ";
+ var Bernoullis = "โฌ";
+ var Beta = "ฮ";
+ var beta = "ฮฒ";
+ var beth = "โถ";
+ var between = "โฌ";
+ var Bfr = "๐
";
+ var bfr = "๐";
+ var bigcap = "โ";
+ var bigcirc = "โฏ";
+ var bigcup = "โ";
+ var bigodot = "โจ";
+ var bigoplus = "โจ";
+ var bigotimes = "โจ";
+ var bigsqcup = "โจ";
+ var bigstar = "โ
";
+ var bigtriangledown = "โฝ";
+ var bigtriangleup = "โณ";
+ var biguplus = "โจ";
+ var bigvee = "โ";
+ var bigwedge = "โ";
+ var bkarow = "โค";
+ var blacklozenge = "โงซ";
+ var blacksquare = "โช";
+ var blacktriangle = "โด";
+ var blacktriangledown = "โพ";
+ var blacktriangleleft = "โ";
+ var blacktriangleright = "โธ";
+ var blank = "โฃ";
+ var blk12 = "โ";
+ var blk14 = "โ";
+ var blk34 = "โ";
+ var block = "โ";
+ var bne = "=โฅ";
+ var bnequiv = "โกโฅ";
+ var bNot = "โซญ";
+ var bnot = "โ";
+ var Bopf = "๐น";
+ var bopf = "๐";
+ var bot = "โฅ";
+ var bottom = "โฅ";
+ var bowtie = "โ";
+ var boxbox = "โง";
+ var boxdl = "โ";
+ var boxdL = "โ";
+ var boxDl = "โ";
+ var boxDL = "โ";
+ var boxdr = "โ";
+ var boxdR = "โ";
+ var boxDr = "โ";
+ var boxDR = "โ";
+ var boxh = "โ";
+ var boxH = "โ";
+ var boxhd = "โฌ";
+ var boxHd = "โค";
+ var boxhD = "โฅ";
+ var boxHD = "โฆ";
+ var boxhu = "โด";
+ var boxHu = "โง";
+ var boxhU = "โจ";
+ var boxHU = "โฉ";
+ var boxminus = "โ";
+ var boxplus = "โ";
+ var boxtimes = "โ ";
+ var boxul = "โ";
+ var boxuL = "โ";
+ var boxUl = "โ";
+ var boxUL = "โ";
+ var boxur = "โ";
+ var boxuR = "โ";
+ var boxUr = "โ";
+ var boxUR = "โ";
+ var boxv = "โ";
+ var boxV = "โ";
+ var boxvh = "โผ";
+ var boxvH = "โช";
+ var boxVh = "โซ";
+ var boxVH = "โฌ";
+ var boxvl = "โค";
+ var boxvL = "โก";
+ var boxVl = "โข";
+ var boxVL = "โฃ";
+ var boxvr = "โ";
+ var boxvR = "โ";
+ var boxVr = "โ";
+ var boxVR = "โ ";
+ var bprime = "โต";
+ var breve = "ห";
+ var Breve = "ห";
+ var brvbar = "ยฆ";
+ var bscr = "๐ท";
+ var Bscr = "โฌ";
+ var bsemi = "โ";
+ var bsim = "โฝ";
+ var bsime = "โ";
+ var bsolb = "โง
";
+ var bsol = "\\";
+ var bsolhsub = "โ";
+ var bull = "โข";
+ var bullet = "โข";
+ var bump = "โ";
+ var bumpE = "โชฎ";
+ var bumpe = "โ";
+ var Bumpeq = "โ";
+ var bumpeq = "โ";
+ var Cacute = "ฤ";
+ var cacute = "ฤ";
+ var capand = "โฉ";
+ var capbrcup = "โฉ";
+ var capcap = "โฉ";
+ var cap = "โฉ";
+ var Cap = "โ";
+ var capcup = "โฉ";
+ var capdot = "โฉ";
+ var CapitalDifferentialD = "โ
";
+ var caps = "โฉ๏ธ";
+ var caret = "โ";
+ var caron = "ห";
+ var Cayleys = "โญ";
+ var ccaps = "โฉ";
+ var Ccaron = "ฤ";
+ var ccaron = "ฤ";
+ var Ccedil = "ร";
+ var ccedil = "รง";
+ var Ccirc = "ฤ";
+ var ccirc = "ฤ";
+ var Cconint = "โฐ";
+ var ccups = "โฉ";
+ var ccupssm = "โฉ";
+ var Cdot = "ฤ";
+ var cdot = "ฤ";
+ var cedil = "ยธ";
+ var Cedilla = "ยธ";
+ var cemptyv = "โฆฒ";
+ var cent = "ยข";
+ var centerdot = "ยท";
+ var CenterDot = "ยท";
+ var cfr = "๐ ";
+ var Cfr = "โญ";
+ var CHcy = "ะง";
+ var chcy = "ั";
+ var check = "โ";
+ var checkmark = "โ";
+ var Chi = "ฮง";
+ var chi = "ฯ";
+ var circ = "ห";
+ var circeq = "โ";
+ var circlearrowleft = "โบ";
+ var circlearrowright = "โป";
+ var circledast = "โ";
+ var circledcirc = "โ";
+ var circleddash = "โ";
+ var CircleDot = "โ";
+ var circledR = "ยฎ";
+ var circledS = "โ";
+ var CircleMinus = "โ";
+ var CirclePlus = "โ";
+ var CircleTimes = "โ";
+ var cir = "โ";
+ var cirE = "โง";
+ var cire = "โ";
+ var cirfnint = "โจ";
+ var cirmid = "โซฏ";
+ var cirscir = "โง";
+ var ClockwiseContourIntegral = "โฒ";
+ var CloseCurlyDoubleQuote = "โ";
+ var CloseCurlyQuote = "โ";
+ var clubs = "โฃ";
+ var clubsuit = "โฃ";
+ var colon = ":";
+ var Colon = "โท";
+ var Colone = "โฉด";
+ var colone = "โ";
+ var coloneq = "โ";
+ var comma = ",";
+ var commat = "@";
+ var comp = "โ";
+ var compfn = "โ";
+ var complement = "โ";
+ var complexes = "โ";
+ var cong = "โ
";
+ var congdot = "โฉญ";
+ var Congruent = "โก";
+ var conint = "โฎ";
+ var Conint = "โฏ";
+ var ContourIntegral = "โฎ";
+ var copf = "๐";
+ var Copf = "โ";
+ var coprod = "โ";
+ var Coproduct = "โ";
+ var copy = "ยฉ";
+ var COPY = "ยฉ";
+ var copysr = "โ";
+ var CounterClockwiseContourIntegral = "โณ";
+ var crarr = "โต";
+ var cross = "โ";
+ var Cross = "โจฏ";
+ var Cscr = "๐";
+ var cscr = "๐ธ";
+ var csub = "โซ";
+ var csube = "โซ";
+ var csup = "โซ";
+ var csupe = "โซ";
+ var ctdot = "โฏ";
+ var cudarrl = "โคธ";
+ var cudarrr = "โคต";
+ var cuepr = "โ";
+ var cuesc = "โ";
+ var cularr = "โถ";
+ var cularrp = "โคฝ";
+ var cupbrcap = "โฉ";
+ var cupcap = "โฉ";
+ var CupCap = "โ";
+ var cup = "โช";
+ var Cup = "โ";
+ var cupcup = "โฉ";
+ var cupdot = "โ";
+ var cupor = "โฉ
";
+ var cups = "โช๏ธ";
+ var curarr = "โท";
+ var curarrm = "โคผ";
+ var curlyeqprec = "โ";
+ var curlyeqsucc = "โ";
+ var curlyvee = "โ";
+ var curlywedge = "โ";
+ var curren = "ยค";
+ var curvearrowleft = "โถ";
+ var curvearrowright = "โท";
+ var cuvee = "โ";
+ var cuwed = "โ";
+ var cwconint = "โฒ";
+ var cwint = "โฑ";
+ var cylcty = "โญ";
+ var dagger = "โ ";
+ var Dagger = "โก";
+ var daleth = "โธ";
+ var darr = "โ";
+ var Darr = "โก";
+ var dArr = "โ";
+ var dash = "โ";
+ var Dashv = "โซค";
+ var dashv = "โฃ";
+ var dbkarow = "โค";
+ var dblac = "ห";
+ var Dcaron = "ฤ";
+ var dcaron = "ฤ";
+ var Dcy = "ะ";
+ var dcy = "ะด";
+ var ddagger = "โก";
+ var ddarr = "โ";
+ var DD = "โ
";
+ var dd = "โ
";
+ var DDotrahd = "โค";
+ var ddotseq = "โฉท";
+ var deg = "ยฐ";
+ var Del = "โ";
+ var Delta = "ฮ";
+ var delta = "ฮด";
+ var demptyv = "โฆฑ";
+ var dfisht = "โฅฟ";
+ var Dfr = "๐";
+ var dfr = "๐ก";
+ var dHar = "โฅฅ";
+ var dharl = "โ";
+ var dharr = "โ";
+ var DiacriticalAcute = "ยด";
+ var DiacriticalDot = "ห";
+ var DiacriticalDoubleAcute = "ห";
+ var DiacriticalGrave = "`";
+ var DiacriticalTilde = "ห";
+ var diam = "โ";
+ var diamond = "โ";
+ var Diamond = "โ";
+ var diamondsuit = "โฆ";
+ var diams = "โฆ";
+ var die = "ยจ";
+ var DifferentialD = "โ
";
+ var digamma = "ฯ";
+ var disin = "โฒ";
+ var div = "รท";
+ var divide = "รท";
+ var divideontimes = "โ";
+ var divonx = "โ";
+ var DJcy = "ะ";
+ var djcy = "ั";
+ var dlcorn = "โ";
+ var dlcrop = "โ";
+ var dollar = "$";
+ var Dopf = "๐ป";
+ var dopf = "๐";
+ var Dot = "ยจ";
+ var dot = "ห";
+ var DotDot = "โ";
+ var doteq = "โ";
+ var doteqdot = "โ";
+ var DotEqual = "โ";
+ var dotminus = "โธ";
+ var dotplus = "โ";
+ var dotsquare = "โก";
+ var doublebarwedge = "โ";
+ var DoubleContourIntegral = "โฏ";
+ var DoubleDot = "ยจ";
+ var DoubleDownArrow = "โ";
+ var DoubleLeftArrow = "โ";
+ var DoubleLeftRightArrow = "โ";
+ var DoubleLeftTee = "โซค";
+ var DoubleLongLeftArrow = "โธ";
+ var DoubleLongLeftRightArrow = "โบ";
+ var DoubleLongRightArrow = "โน";
+ var DoubleRightArrow = "โ";
+ var DoubleRightTee = "โจ";
+ var DoubleUpArrow = "โ";
+ var DoubleUpDownArrow = "โ";
+ var DoubleVerticalBar = "โฅ";
+ var DownArrowBar = "โค";
+ var downarrow = "โ";
+ var DownArrow = "โ";
+ var Downarrow = "โ";
+ var DownArrowUpArrow = "โต";
+ var DownBreve = "ฬ";
+ var downdownarrows = "โ";
+ var downharpoonleft = "โ";
+ var downharpoonright = "โ";
+ var DownLeftRightVector = "โฅ";
+ var DownLeftTeeVector = "โฅ";
+ var DownLeftVectorBar = "โฅ";
+ var DownLeftVector = "โฝ";
+ var DownRightTeeVector = "โฅ";
+ var DownRightVectorBar = "โฅ";
+ var DownRightVector = "โ";
+ var DownTeeArrow = "โง";
+ var DownTee = "โค";
+ var drbkarow = "โค";
+ var drcorn = "โ";
+ var drcrop = "โ";
+ var Dscr = "๐";
+ var dscr = "๐น";
+ var DScy = "ะ
";
+ var dscy = "ั";
+ var dsol = "โงถ";
+ var Dstrok = "ฤ";
+ var dstrok = "ฤ";
+ var dtdot = "โฑ";
+ var dtri = "โฟ";
+ var dtrif = "โพ";
+ var duarr = "โต";
+ var duhar = "โฅฏ";
+ var dwangle = "โฆฆ";
+ var DZcy = "ะ";
+ var dzcy = "ั";
+ var dzigrarr = "โฟ";
+ var Eacute = "ร";
+ var eacute = "รฉ";
+ var easter = "โฉฎ";
+ var Ecaron = "ฤ";
+ var ecaron = "ฤ";
+ var Ecirc = "ร";
+ var ecirc = "รช";
+ var ecir = "โ";
+ var ecolon = "โ";
+ var Ecy = "ะญ";
+ var ecy = "ั";
+ var eDDot = "โฉท";
+ var Edot = "ฤ";
+ var edot = "ฤ";
+ var eDot = "โ";
+ var ee = "โ
";
+ var efDot = "โ";
+ var Efr = "๐";
+ var efr = "๐ข";
+ var eg = "โช";
+ var Egrave = "ร";
+ var egrave = "รจ";
+ var egs = "โช";
+ var egsdot = "โช";
+ var el = "โช";
+ var Element = "โ";
+ var elinters = "โง";
+ var ell = "โ";
+ var els = "โช";
+ var elsdot = "โช";
+ var Emacr = "ฤ";
+ var emacr = "ฤ";
+ var empty = "โ
";
+ var emptyset = "โ
";
+ var EmptySmallSquare = "โป";
+ var emptyv = "โ
";
+ var EmptyVerySmallSquare = "โซ";
+ var emsp13 = "โ";
+ var emsp14 = "โ
";
+ var emsp = "โ";
+ var ENG = "ล";
+ var eng = "ล";
+ var ensp = "โ";
+ var Eogon = "ฤ";
+ var eogon = "ฤ";
+ var Eopf = "๐ผ";
+ var eopf = "๐";
+ var epar = "โ";
+ var eparsl = "โงฃ";
+ var eplus = "โฉฑ";
+ var epsi = "ฮต";
+ var Epsilon = "ฮ";
+ var epsilon = "ฮต";
+ var epsiv = "ฯต";
+ var eqcirc = "โ";
+ var eqcolon = "โ";
+ var eqsim = "โ";
+ var eqslantgtr = "โช";
+ var eqslantless = "โช";
+ var Equal = "โฉต";
+ var equals = "=";
+ var EqualTilde = "โ";
+ var equest = "โ";
+ var Equilibrium = "โ";
+ var equiv = "โก";
+ var equivDD = "โฉธ";
+ var eqvparsl = "โงฅ";
+ var erarr = "โฅฑ";
+ var erDot = "โ";
+ var escr = "โฏ";
+ var Escr = "โฐ";
+ var esdot = "โ";
+ var Esim = "โฉณ";
+ var esim = "โ";
+ var Eta = "ฮ";
+ var eta = "ฮท";
+ var ETH = "ร";
+ var eth = "รฐ";
+ var Euml = "ร";
+ var euml = "รซ";
+ var euro = "โฌ";
+ var excl = "!";
+ var exist = "โ";
+ var Exists = "โ";
+ var expectation = "โฐ";
+ var exponentiale = "โ
";
+ var ExponentialE = "โ
";
+ var fallingdotseq = "โ";
+ var Fcy = "ะค";
+ var fcy = "ั";
+ var female = "โ";
+ var ffilig = "๏ฌ";
+ var fflig = "๏ฌ";
+ var ffllig = "๏ฌ";
+ var Ffr = "๐";
+ var ffr = "๐ฃ";
+ var filig = "๏ฌ";
+ var FilledSmallSquare = "โผ";
+ var FilledVerySmallSquare = "โช";
+ var fjlig = "fj";
+ var flat = "โญ";
+ var fllig = "๏ฌ";
+ var fltns = "โฑ";
+ var fnof = "ฦ";
+ var Fopf = "๐ฝ";
+ var fopf = "๐";
+ var forall = "โ";
+ var ForAll = "โ";
+ var fork = "โ";
+ var forkv = "โซ";
+ var Fouriertrf = "โฑ";
+ var fpartint = "โจ";
+ var frac12 = "ยฝ";
+ var frac13 = "โ
";
+ var frac14 = "ยผ";
+ var frac15 = "โ
";
+ var frac16 = "โ
";
+ var frac18 = "โ
";
+ var frac23 = "โ
";
+ var frac25 = "โ
";
+ var frac34 = "ยพ";
+ var frac35 = "โ
";
+ var frac38 = "โ
";
+ var frac45 = "โ
";
+ var frac56 = "โ
";
+ var frac58 = "โ
";
+ var frac78 = "โ
";
+ var frasl = "โ";
+ var frown = "โข";
+ var fscr = "๐ป";
+ var Fscr = "โฑ";
+ var gacute = "วต";
+ var Gamma = "ฮ";
+ var gamma = "ฮณ";
+ var Gammad = "ฯ";
+ var gammad = "ฯ";
+ var gap = "โช";
+ var Gbreve = "ฤ";
+ var gbreve = "ฤ";
+ var Gcedil = "ฤข";
+ var Gcirc = "ฤ";
+ var gcirc = "ฤ";
+ var Gcy = "ะ";
+ var gcy = "ะณ";
+ var Gdot = "ฤ ";
+ var gdot = "ฤก";
+ var ge = "โฅ";
+ var gE = "โง";
+ var gEl = "โช";
+ var gel = "โ";
+ var geq = "โฅ";
+ var geqq = "โง";
+ var geqslant = "โฉพ";
+ var gescc = "โชฉ";
+ var ges = "โฉพ";
+ var gesdot = "โช";
+ var gesdoto = "โช";
+ var gesdotol = "โช";
+ var gesl = "โ๏ธ";
+ var gesles = "โช";
+ var Gfr = "๐";
+ var gfr = "๐ค";
+ var gg = "โซ";
+ var Gg = "โ";
+ var ggg = "โ";
+ var gimel = "โท";
+ var GJcy = "ะ";
+ var gjcy = "ั";
+ var gla = "โชฅ";
+ var gl = "โท";
+ var glE = "โช";
+ var glj = "โชค";
+ var gnap = "โช";
+ var gnapprox = "โช";
+ var gne = "โช";
+ var gnE = "โฉ";
+ var gneq = "โช";
+ var gneqq = "โฉ";
+ var gnsim = "โง";
+ var Gopf = "๐พ";
+ var gopf = "๐";
+ var grave = "`";
+ var GreaterEqual = "โฅ";
+ var GreaterEqualLess = "โ";
+ var GreaterFullEqual = "โง";
+ var GreaterGreater = "โชข";
+ var GreaterLess = "โท";
+ var GreaterSlantEqual = "โฉพ";
+ var GreaterTilde = "โณ";
+ var Gscr = "๐ข";
+ var gscr = "โ";
+ var gsim = "โณ";
+ var gsime = "โช";
+ var gsiml = "โช";
+ var gtcc = "โชง";
+ var gtcir = "โฉบ";
+ var gt = ">";
+ var GT = ">";
+ var Gt = "โซ";
+ var gtdot = "โ";
+ var gtlPar = "โฆ";
+ var gtquest = "โฉผ";
+ var gtrapprox = "โช";
+ var gtrarr = "โฅธ";
+ var gtrdot = "โ";
+ var gtreqless = "โ";
+ var gtreqqless = "โช";
+ var gtrless = "โท";
+ var gtrsim = "โณ";
+ var gvertneqq = "โฉ๏ธ";
+ var gvnE = "โฉ๏ธ";
+ var Hacek = "ห";
+ var hairsp = "โ";
+ var half = "ยฝ";
+ var hamilt = "โ";
+ var HARDcy = "ะช";
+ var hardcy = "ั";
+ var harrcir = "โฅ";
+ var harr = "โ";
+ var hArr = "โ";
+ var harrw = "โญ";
+ var Hat = "^";
+ var hbar = "โ";
+ var Hcirc = "ฤค";
+ var hcirc = "ฤฅ";
+ var hearts = "โฅ";
+ var heartsuit = "โฅ";
+ var hellip = "โฆ";
+ var hercon = "โน";
+ var hfr = "๐ฅ";
+ var Hfr = "โ";
+ var HilbertSpace = "โ";
+ var hksearow = "โคฅ";
+ var hkswarow = "โคฆ";
+ var hoarr = "โฟ";
+ var homtht = "โป";
+ var hookleftarrow = "โฉ";
+ var hookrightarrow = "โช";
+ var hopf = "๐";
+ var Hopf = "โ";
+ var horbar = "โ";
+ var HorizontalLine = "โ";
+ var hscr = "๐ฝ";
+ var Hscr = "โ";
+ var hslash = "โ";
+ var Hstrok = "ฤฆ";
+ var hstrok = "ฤง";
+ var HumpDownHump = "โ";
+ var HumpEqual = "โ";
+ var hybull = "โ";
+ var hyphen = "โ";
+ var Iacute = "ร";
+ var iacute = "รญ";
+ var ic = "โฃ";
+ var Icirc = "ร";
+ var icirc = "รฎ";
+ var Icy = "ะ";
+ var icy = "ะธ";
+ var Idot = "ฤฐ";
+ var IEcy = "ะ";
+ var iecy = "ะต";
+ var iexcl = "ยก";
+ var iff = "โ";
+ var ifr = "๐ฆ";
+ var Ifr = "โ";
+ var Igrave = "ร";
+ var igrave = "รฌ";
+ var ii = "โ
";
+ var iiiint = "โจ";
+ var iiint = "โญ";
+ var iinfin = "โง";
+ var iiota = "โฉ";
+ var IJlig = "ฤฒ";
+ var ijlig = "ฤณ";
+ var Imacr = "ฤช";
+ var imacr = "ฤซ";
+ var image = "โ";
+ var ImaginaryI = "โ
";
+ var imagline = "โ";
+ var imagpart = "โ";
+ var imath = "ฤฑ";
+ var Im = "โ";
+ var imof = "โท";
+ var imped = "ฦต";
+ var Implies = "โ";
+ var incare = "โ
";
+ var infin = "โ";
+ var infintie = "โง";
+ var inodot = "ฤฑ";
+ var intcal = "โบ";
+ var int = "โซ";
+ var Int = "โฌ";
+ var integers = "โค";
+ var Integral = "โซ";
+ var intercal = "โบ";
+ var Intersection = "โ";
+ var intlarhk = "โจ";
+ var intprod = "โจผ";
+ var InvisibleComma = "โฃ";
+ var InvisibleTimes = "โข";
+ var IOcy = "ะ";
+ var iocy = "ั";
+ var Iogon = "ฤฎ";
+ var iogon = "ฤฏ";
+ var Iopf = "๐";
+ var iopf = "๐";
+ var Iota = "ฮ";
+ var iota = "ฮน";
+ var iprod = "โจผ";
+ var iquest = "ยฟ";
+ var iscr = "๐พ";
+ var Iscr = "โ";
+ var isin = "โ";
+ var isindot = "โต";
+ var isinE = "โน";
+ var isins = "โด";
+ var isinsv = "โณ";
+ var isinv = "โ";
+ var it = "โข";
+ var Itilde = "ฤจ";
+ var itilde = "ฤฉ";
+ var Iukcy = "ะ";
+ var iukcy = "ั";
+ var Iuml = "ร";
+ var iuml = "รฏ";
+ var Jcirc = "ฤด";
+ var jcirc = "ฤต";
+ var Jcy = "ะ";
+ var jcy = "ะน";
+ var Jfr = "๐";
+ var jfr = "๐ง";
+ var jmath = "ศท";
+ var Jopf = "๐";
+ var jopf = "๐";
+ var Jscr = "๐ฅ";
+ var jscr = "๐ฟ";
+ var Jsercy = "ะ";
+ var jsercy = "ั";
+ var Jukcy = "ะ";
+ var jukcy = "ั";
+ var Kappa = "ฮ";
+ var kappa = "ฮบ";
+ var kappav = "ฯฐ";
+ var Kcedil = "ฤถ";
+ var kcedil = "ฤท";
+ var Kcy = "ะ";
+ var kcy = "ะบ";
+ var Kfr = "๐";
+ var kfr = "๐จ";
+ var kgreen = "ฤธ";
+ var KHcy = "ะฅ";
+ var khcy = "ั
";
+ var KJcy = "ะ";
+ var kjcy = "ั";
+ var Kopf = "๐";
+ var kopf = "๐";
+ var Kscr = "๐ฆ";
+ var kscr = "๐";
+ var lAarr = "โ";
+ var Lacute = "ฤน";
+ var lacute = "ฤบ";
+ var laemptyv = "โฆด";
+ var lagran = "โ";
+ var Lambda = "ฮ";
+ var lambda = "ฮป";
+ var lang = "โจ";
+ var Lang = "โช";
+ var langd = "โฆ";
+ var langle = "โจ";
+ var lap = "โช
";
+ var Laplacetrf = "โ";
+ var laquo = "ยซ";
+ var larrb = "โค";
+ var larrbfs = "โค";
+ var larr = "โ";
+ var Larr = "โ";
+ var lArr = "โ";
+ var larrfs = "โค";
+ var larrhk = "โฉ";
+ var larrlp = "โซ";
+ var larrpl = "โคน";
+ var larrsim = "โฅณ";
+ var larrtl = "โข";
+ var latail = "โค";
+ var lAtail = "โค";
+ var lat = "โชซ";
+ var late = "โชญ";
+ var lates = "โชญ๏ธ";
+ var lbarr = "โค";
+ var lBarr = "โค";
+ var lbbrk = "โฒ";
+ var lbrace = "{";
+ var lbrack = "[";
+ var lbrke = "โฆ";
+ var lbrksld = "โฆ";
+ var lbrkslu = "โฆ";
+ var Lcaron = "ฤฝ";
+ var lcaron = "ฤพ";
+ var Lcedil = "ฤป";
+ var lcedil = "ฤผ";
+ var lceil = "โ";
+ var lcub = "{";
+ var Lcy = "ะ";
+ var lcy = "ะป";
+ var ldca = "โคถ";
+ var ldquo = "โ";
+ var ldquor = "โ";
+ var ldrdhar = "โฅง";
+ var ldrushar = "โฅ";
+ var ldsh = "โฒ";
+ var le = "โค";
+ var lE = "โฆ";
+ var LeftAngleBracket = "โจ";
+ var LeftArrowBar = "โค";
+ var leftarrow = "โ";
+ var LeftArrow = "โ";
+ var Leftarrow = "โ";
+ var LeftArrowRightArrow = "โ";
+ var leftarrowtail = "โข";
+ var LeftCeiling = "โ";
+ var LeftDoubleBracket = "โฆ";
+ var LeftDownTeeVector = "โฅก";
+ var LeftDownVectorBar = "โฅ";
+ var LeftDownVector = "โ";
+ var LeftFloor = "โ";
+ var leftharpoondown = "โฝ";
+ var leftharpoonup = "โผ";
+ var leftleftarrows = "โ";
+ var leftrightarrow = "โ";
+ var LeftRightArrow = "โ";
+ var Leftrightarrow = "โ";
+ var leftrightarrows = "โ";
+ var leftrightharpoons = "โ";
+ var leftrightsquigarrow = "โญ";
+ var LeftRightVector = "โฅ";
+ var LeftTeeArrow = "โค";
+ var LeftTee = "โฃ";
+ var LeftTeeVector = "โฅ";
+ var leftthreetimes = "โ";
+ var LeftTriangleBar = "โง";
+ var LeftTriangle = "โฒ";
+ var LeftTriangleEqual = "โด";
+ var LeftUpDownVector = "โฅ";
+ var LeftUpTeeVector = "โฅ ";
+ var LeftUpVectorBar = "โฅ";
+ var LeftUpVector = "โฟ";
+ var LeftVectorBar = "โฅ";
+ var LeftVector = "โผ";
+ var lEg = "โช";
+ var leg = "โ";
+ var leq = "โค";
+ var leqq = "โฆ";
+ var leqslant = "โฉฝ";
+ var lescc = "โชจ";
+ var les = "โฉฝ";
+ var lesdot = "โฉฟ";
+ var lesdoto = "โช";
+ var lesdotor = "โช";
+ var lesg = "โ๏ธ";
+ var lesges = "โช";
+ var lessapprox = "โช
";
+ var lessdot = "โ";
+ var lesseqgtr = "โ";
+ var lesseqqgtr = "โช";
+ var LessEqualGreater = "โ";
+ var LessFullEqual = "โฆ";
+ var LessGreater = "โถ";
+ var lessgtr = "โถ";
+ var LessLess = "โชก";
+ var lesssim = "โฒ";
+ var LessSlantEqual = "โฉฝ";
+ var LessTilde = "โฒ";
+ var lfisht = "โฅผ";
+ var lfloor = "โ";
+ var Lfr = "๐";
+ var lfr = "๐ฉ";
+ var lg = "โถ";
+ var lgE = "โช";
+ var lHar = "โฅข";
+ var lhard = "โฝ";
+ var lharu = "โผ";
+ var lharul = "โฅช";
+ var lhblk = "โ";
+ var LJcy = "ะ";
+ var ljcy = "ั";
+ var llarr = "โ";
+ var ll = "โช";
+ var Ll = "โ";
+ var llcorner = "โ";
+ var Lleftarrow = "โ";
+ var llhard = "โฅซ";
+ var lltri = "โบ";
+ var Lmidot = "ฤฟ";
+ var lmidot = "ล";
+ var lmoustache = "โฐ";
+ var lmoust = "โฐ";
+ var lnap = "โช";
+ var lnapprox = "โช";
+ var lne = "โช";
+ var lnE = "โจ";
+ var lneq = "โช";
+ var lneqq = "โจ";
+ var lnsim = "โฆ";
+ var loang = "โฌ";
+ var loarr = "โฝ";
+ var lobrk = "โฆ";
+ var longleftarrow = "โต";
+ var LongLeftArrow = "โต";
+ var Longleftarrow = "โธ";
+ var longleftrightarrow = "โท";
+ var LongLeftRightArrow = "โท";
+ var Longleftrightarrow = "โบ";
+ var longmapsto = "โผ";
+ var longrightarrow = "โถ";
+ var LongRightArrow = "โถ";
+ var Longrightarrow = "โน";
+ var looparrowleft = "โซ";
+ var looparrowright = "โฌ";
+ var lopar = "โฆ
";
+ var Lopf = "๐";
+ var lopf = "๐";
+ var loplus = "โจญ";
+ var lotimes = "โจด";
+ var lowast = "โ";
+ var lowbar = "_";
+ var LowerLeftArrow = "โ";
+ var LowerRightArrow = "โ";
+ var loz = "โ";
+ var lozenge = "โ";
+ var lozf = "โงซ";
+ var lpar = "(";
+ var lparlt = "โฆ";
+ var lrarr = "โ";
+ var lrcorner = "โ";
+ var lrhar = "โ";
+ var lrhard = "โฅญ";
+ var lrm = "โ";
+ var lrtri = "โฟ";
+ var lsaquo = "โน";
+ var lscr = "๐";
+ var Lscr = "โ";
+ var lsh = "โฐ";
+ var Lsh = "โฐ";
+ var lsim = "โฒ";
+ var lsime = "โช";
+ var lsimg = "โช";
+ var lsqb = "[";
+ var lsquo = "โ";
+ var lsquor = "โ";
+ var Lstrok = "ล";
+ var lstrok = "ล";
+ var ltcc = "โชฆ";
+ var ltcir = "โฉน";
+ var lt = "<";
+ var LT = "<";
+ var Lt = "โช";
+ var ltdot = "โ";
+ var lthree = "โ";
+ var ltimes = "โ";
+ var ltlarr = "โฅถ";
+ var ltquest = "โฉป";
+ var ltri = "โ";
+ var ltrie = "โด";
+ var ltrif = "โ";
+ var ltrPar = "โฆ";
+ var lurdshar = "โฅ";
+ var luruhar = "โฅฆ";
+ var lvertneqq = "โจ๏ธ";
+ var lvnE = "โจ๏ธ";
+ var macr = "ยฏ";
+ var male = "โ";
+ var malt = "โ ";
+ var maltese = "โ ";
+ var map = "โฆ";
+ var mapsto = "โฆ";
+ var mapstodown = "โง";
+ var mapstoleft = "โค";
+ var mapstoup = "โฅ";
+ var marker = "โฎ";
+ var mcomma = "โจฉ";
+ var Mcy = "ะ";
+ var mcy = "ะผ";
+ var mdash = "โ";
+ var mDDot = "โบ";
+ var measuredangle = "โก";
+ var MediumSpace = "โ";
+ var Mellintrf = "โณ";
+ var Mfr = "๐";
+ var mfr = "๐ช";
+ var mho = "โง";
+ var micro = "ยต";
+ var midast = "*";
+ var midcir = "โซฐ";
+ var mid = "โฃ";
+ var middot = "ยท";
+ var minusb = "โ";
+ var minus = "โ";
+ var minusd = "โธ";
+ var minusdu = "โจช";
+ var MinusPlus = "โ";
+ var mlcp = "โซ";
+ var mldr = "โฆ";
+ var mnplus = "โ";
+ var models = "โง";
+ var Mopf = "๐";
+ var mopf = "๐";
+ var mp = "โ";
+ var mscr = "๐";
+ var Mscr = "โณ";
+ var mstpos = "โพ";
+ var Mu = "ฮ";
+ var mu = "ฮผ";
+ var multimap = "โธ";
+ var mumap = "โธ";
+ var nabla = "โ";
+ var Nacute = "ล";
+ var nacute = "ล";
+ var nang = "โ โ";
+ var nap = "โ";
+ var napE = "โฉฐฬธ";
+ var napid = "โฬธ";
+ var napos = "ล";
+ var napprox = "โ";
+ var natural = "โฎ";
+ var naturals = "โ";
+ var natur = "โฎ";
+ var nbsp = "ย ";
+ var nbump = "โฬธ";
+ var nbumpe = "โฬธ";
+ var ncap = "โฉ";
+ var Ncaron = "ล";
+ var ncaron = "ล";
+ var Ncedil = "ล
";
+ var ncedil = "ล";
+ var ncong = "โ";
+ var ncongdot = "โฉญฬธ";
+ var ncup = "โฉ";
+ var Ncy = "ะ";
+ var ncy = "ะฝ";
+ var ndash = "โ";
+ var nearhk = "โคค";
+ var nearr = "โ";
+ var neArr = "โ";
+ var nearrow = "โ";
+ var ne = "โ ";
+ var nedot = "โฬธ";
+ var NegativeMediumSpace = "โ";
+ var NegativeThickSpace = "โ";
+ var NegativeThinSpace = "โ";
+ var NegativeVeryThinSpace = "โ";
+ var nequiv = "โข";
+ var nesear = "โคจ";
+ var nesim = "โฬธ";
+ var NestedGreaterGreater = "โซ";
+ var NestedLessLess = "โช";
+ var NewLine = "\n";
+ var nexist = "โ";
+ var nexists = "โ";
+ var Nfr = "๐";
+ var nfr = "๐ซ";
+ var ngE = "โงฬธ";
+ var nge = "โฑ";
+ var ngeq = "โฑ";
+ var ngeqq = "โงฬธ";
+ var ngeqslant = "โฉพฬธ";
+ var nges = "โฉพฬธ";
+ var nGg = "โฬธ";
+ var ngsim = "โต";
+ var nGt = "โซโ";
+ var ngt = "โฏ";
+ var ngtr = "โฏ";
+ var nGtv = "โซฬธ";
+ var nharr = "โฎ";
+ var nhArr = "โ";
+ var nhpar = "โซฒ";
+ var ni = "โ";
+ var nis = "โผ";
+ var nisd = "โบ";
+ var niv = "โ";
+ var NJcy = "ะ";
+ var njcy = "ั";
+ var nlarr = "โ";
+ var nlArr = "โ";
+ var nldr = "โฅ";
+ var nlE = "โฆฬธ";
+ var nle = "โฐ";
+ var nleftarrow = "โ";
+ var nLeftarrow = "โ";
+ var nleftrightarrow = "โฎ";
+ var nLeftrightarrow = "โ";
+ var nleq = "โฐ";
+ var nleqq = "โฆฬธ";
+ var nleqslant = "โฉฝฬธ";
+ var nles = "โฉฝฬธ";
+ var nless = "โฎ";
+ var nLl = "โฬธ";
+ var nlsim = "โด";
+ var nLt = "โชโ";
+ var nlt = "โฎ";
+ var nltri = "โช";
+ var nltrie = "โฌ";
+ var nLtv = "โชฬธ";
+ var nmid = "โค";
+ var NoBreak = "โ ";
+ var NonBreakingSpace = "ย ";
+ var nopf = "๐";
+ var Nopf = "โ";
+ var Not = "โซฌ";
+ var not = "ยฌ";
+ var NotCongruent = "โข";
+ var NotCupCap = "โญ";
+ var NotDoubleVerticalBar = "โฆ";
+ var NotElement = "โ";
+ var NotEqual = "โ ";
+ var NotEqualTilde = "โฬธ";
+ var NotExists = "โ";
+ var NotGreater = "โฏ";
+ var NotGreaterEqual = "โฑ";
+ var NotGreaterFullEqual = "โงฬธ";
+ var NotGreaterGreater = "โซฬธ";
+ var NotGreaterLess = "โน";
+ var NotGreaterSlantEqual = "โฉพฬธ";
+ var NotGreaterTilde = "โต";
+ var NotHumpDownHump = "โฬธ";
+ var NotHumpEqual = "โฬธ";
+ var notin = "โ";
+ var notindot = "โตฬธ";
+ var notinE = "โนฬธ";
+ var notinva = "โ";
+ var notinvb = "โท";
+ var notinvc = "โถ";
+ var NotLeftTriangleBar = "โงฬธ";
+ var NotLeftTriangle = "โช";
+ var NotLeftTriangleEqual = "โฌ";
+ var NotLess = "โฎ";
+ var NotLessEqual = "โฐ";
+ var NotLessGreater = "โธ";
+ var NotLessLess = "โชฬธ";
+ var NotLessSlantEqual = "โฉฝฬธ";
+ var NotLessTilde = "โด";
+ var NotNestedGreaterGreater = "โชขฬธ";
+ var NotNestedLessLess = "โชกฬธ";
+ var notni = "โ";
+ var notniva = "โ";
+ var notnivb = "โพ";
+ var notnivc = "โฝ";
+ var NotPrecedes = "โ";
+ var NotPrecedesEqual = "โชฏฬธ";
+ var NotPrecedesSlantEqual = "โ ";
+ var NotReverseElement = "โ";
+ var NotRightTriangleBar = "โงฬธ";
+ var NotRightTriangle = "โซ";
+ var NotRightTriangleEqual = "โญ";
+ var NotSquareSubset = "โฬธ";
+ var NotSquareSubsetEqual = "โข";
+ var NotSquareSuperset = "โฬธ";
+ var NotSquareSupersetEqual = "โฃ";
+ var NotSubset = "โโ";
+ var NotSubsetEqual = "โ";
+ var NotSucceeds = "โ";
+ var NotSucceedsEqual = "โชฐฬธ";
+ var NotSucceedsSlantEqual = "โก";
+ var NotSucceedsTilde = "โฟฬธ";
+ var NotSuperset = "โโ";
+ var NotSupersetEqual = "โ";
+ var NotTilde = "โ";
+ var NotTildeEqual = "โ";
+ var NotTildeFullEqual = "โ";
+ var NotTildeTilde = "โ";
+ var NotVerticalBar = "โค";
+ var nparallel = "โฆ";
+ var npar = "โฆ";
+ var nparsl = "โซฝโฅ";
+ var npart = "โฬธ";
+ var npolint = "โจ";
+ var npr = "โ";
+ var nprcue = "โ ";
+ var nprec = "โ";
+ var npreceq = "โชฏฬธ";
+ var npre = "โชฏฬธ";
+ var nrarrc = "โคณฬธ";
+ var nrarr = "โ";
+ var nrArr = "โ";
+ var nrarrw = "โฬธ";
+ var nrightarrow = "โ";
+ var nRightarrow = "โ";
+ var nrtri = "โซ";
+ var nrtrie = "โญ";
+ var nsc = "โ";
+ var nsccue = "โก";
+ var nsce = "โชฐฬธ";
+ var Nscr = "๐ฉ";
+ var nscr = "๐";
+ var nshortmid = "โค";
+ var nshortparallel = "โฆ";
+ var nsim = "โ";
+ var nsime = "โ";
+ var nsimeq = "โ";
+ var nsmid = "โค";
+ var nspar = "โฆ";
+ var nsqsube = "โข";
+ var nsqsupe = "โฃ";
+ var nsub = "โ";
+ var nsubE = "โซ
ฬธ";
+ var nsube = "โ";
+ var nsubset = "โโ";
+ var nsubseteq = "โ";
+ var nsubseteqq = "โซ
ฬธ";
+ var nsucc = "โ";
+ var nsucceq = "โชฐฬธ";
+ var nsup = "โ
";
+ var nsupE = "โซฬธ";
+ var nsupe = "โ";
+ var nsupset = "โโ";
+ var nsupseteq = "โ";
+ var nsupseteqq = "โซฬธ";
+ var ntgl = "โน";
+ var Ntilde = "ร";
+ var ntilde = "รฑ";
+ var ntlg = "โธ";
+ var ntriangleleft = "โช";
+ var ntrianglelefteq = "โฌ";
+ var ntriangleright = "โซ";
+ var ntrianglerighteq = "โญ";
+ var Nu = "ฮ";
+ var nu = "ฮฝ";
+ var num = "#";
+ var numero = "โ";
+ var numsp = "โ";
+ var nvap = "โโ";
+ var nvdash = "โฌ";
+ var nvDash = "โญ";
+ var nVdash = "โฎ";
+ var nVDash = "โฏ";
+ var nvge = "โฅโ";
+ var nvgt = ">โ";
+ var nvHarr = "โค";
+ var nvinfin = "โง";
+ var nvlArr = "โค";
+ var nvle = "โคโ";
+ var nvlt = "<โ";
+ var nvltrie = "โดโ";
+ var nvrArr = "โค";
+ var nvrtrie = "โตโ";
+ var nvsim = "โผโ";
+ var nwarhk = "โคฃ";
+ var nwarr = "โ";
+ var nwArr = "โ";
+ var nwarrow = "โ";
+ var nwnear = "โคง";
+ var Oacute = "ร";
+ var oacute = "รณ";
+ var oast = "โ";
+ var Ocirc = "ร";
+ var ocirc = "รด";
+ var ocir = "โ";
+ var Ocy = "ะ";
+ var ocy = "ะพ";
+ var odash = "โ";
+ var Odblac = "ล";
+ var odblac = "ล";
+ var odiv = "โจธ";
+ var odot = "โ";
+ var odsold = "โฆผ";
+ var OElig = "ล";
+ var oelig = "ล";
+ var ofcir = "โฆฟ";
+ var Ofr = "๐";
+ var ofr = "๐ฌ";
+ var ogon = "ห";
+ var Ograve = "ร";
+ var ograve = "รฒ";
+ var ogt = "โง";
+ var ohbar = "โฆต";
+ var ohm = "ฮฉ";
+ var oint = "โฎ";
+ var olarr = "โบ";
+ var olcir = "โฆพ";
+ var olcross = "โฆป";
+ var oline = "โพ";
+ var olt = "โง";
+ var Omacr = "ล";
+ var omacr = "ล";
+ var Omega = "ฮฉ";
+ var omega = "ฯ";
+ var Omicron = "ฮ";
+ var omicron = "ฮฟ";
+ var omid = "โฆถ";
+ var ominus = "โ";
+ var Oopf = "๐";
+ var oopf = "๐ ";
+ var opar = "โฆท";
+ var OpenCurlyDoubleQuote = "โ";
+ var OpenCurlyQuote = "โ";
+ var operp = "โฆน";
+ var oplus = "โ";
+ var orarr = "โป";
+ var Or = "โฉ";
+ var or = "โจ";
+ var ord = "โฉ";
+ var order = "โด";
+ var orderof = "โด";
+ var ordf = "ยช";
+ var ordm = "ยบ";
+ var origof = "โถ";
+ var oror = "โฉ";
+ var orslope = "โฉ";
+ var orv = "โฉ";
+ var oS = "โ";
+ var Oscr = "๐ช";
+ var oscr = "โด";
+ var Oslash = "ร";
+ var oslash = "รธ";
+ var osol = "โ";
+ var Otilde = "ร";
+ var otilde = "รต";
+ var otimesas = "โจถ";
+ var Otimes = "โจท";
+ var otimes = "โ";
+ var Ouml = "ร";
+ var ouml = "รถ";
+ var ovbar = "โฝ";
+ var OverBar = "โพ";
+ var OverBrace = "โ";
+ var OverBracket = "โด";
+ var OverParenthesis = "โ";
+ var para = "ยถ";
+ var parallel = "โฅ";
+ var par = "โฅ";
+ var parsim = "โซณ";
+ var parsl = "โซฝ";
+ var part = "โ";
+ var PartialD = "โ";
+ var Pcy = "ะ";
+ var pcy = "ะฟ";
+ var percnt = "%";
+ var period = ".";
+ var permil = "โฐ";
+ var perp = "โฅ";
+ var pertenk = "โฑ";
+ var Pfr = "๐";
+ var pfr = "๐ญ";
+ var Phi = "ฮฆ";
+ var phi = "ฯ";
+ var phiv = "ฯ";
+ var phmmat = "โณ";
+ var phone = "โ";
+ var Pi = "ฮ ";
+ var pi = "ฯ";
+ var pitchfork = "โ";
+ var piv = "ฯ";
+ var planck = "โ";
+ var planckh = "โ";
+ var plankv = "โ";
+ var plusacir = "โจฃ";
+ var plusb = "โ";
+ var pluscir = "โจข";
+ var plus = "+";
+ var plusdo = "โ";
+ var plusdu = "โจฅ";
+ var pluse = "โฉฒ";
+ var PlusMinus = "ยฑ";
+ var plusmn = "ยฑ";
+ var plussim = "โจฆ";
+ var plustwo = "โจง";
+ var pm = "ยฑ";
+ var Poincareplane = "โ";
+ var pointint = "โจ";
+ var popf = "๐ก";
+ var Popf = "โ";
+ var pound = "ยฃ";
+ var prap = "โชท";
+ var Pr = "โชป";
+ var pr = "โบ";
+ var prcue = "โผ";
+ var precapprox = "โชท";
+ var prec = "โบ";
+ var preccurlyeq = "โผ";
+ var Precedes = "โบ";
+ var PrecedesEqual = "โชฏ";
+ var PrecedesSlantEqual = "โผ";
+ var PrecedesTilde = "โพ";
+ var preceq = "โชฏ";
+ var precnapprox = "โชน";
+ var precneqq = "โชต";
+ var precnsim = "โจ";
+ var pre = "โชฏ";
+ var prE = "โชณ";
+ var precsim = "โพ";
+ var prime = "โฒ";
+ var Prime = "โณ";
+ var primes = "โ";
+ var prnap = "โชน";
+ var prnE = "โชต";
+ var prnsim = "โจ";
+ var prod = "โ";
+ var Product = "โ";
+ var profalar = "โฎ";
+ var profline = "โ";
+ var profsurf = "โ";
+ var prop = "โ";
+ var Proportional = "โ";
+ var Proportion = "โท";
+ var propto = "โ";
+ var prsim = "โพ";
+ var prurel = "โฐ";
+ var Pscr = "๐ซ";
+ var pscr = "๐
";
+ var Psi = "ฮจ";
+ var psi = "ฯ";
+ var puncsp = "โ";
+ var Qfr = "๐";
+ var qfr = "๐ฎ";
+ var qint = "โจ";
+ var qopf = "๐ข";
+ var Qopf = "โ";
+ var qprime = "โ";
+ var Qscr = "๐ฌ";
+ var qscr = "๐";
+ var quaternions = "โ";
+ var quatint = "โจ";
+ var quest = "?";
+ var questeq = "โ";
+ var quot = "\"";
+ var QUOT = "\"";
+ var rAarr = "โ";
+ var race = "โฝฬฑ";
+ var Racute = "ล";
+ var racute = "ล";
+ var radic = "โ";
+ var raemptyv = "โฆณ";
+ var rang = "โฉ";
+ var Rang = "โซ";
+ var rangd = "โฆ";
+ var range = "โฆฅ";
+ var rangle = "โฉ";
+ var raquo = "ยป";
+ var rarrap = "โฅต";
+ var rarrb = "โฅ";
+ var rarrbfs = "โค ";
+ var rarrc = "โคณ";
+ var rarr = "โ";
+ var Rarr = "โ ";
+ var rArr = "โ";
+ var rarrfs = "โค";
+ var rarrhk = "โช";
+ var rarrlp = "โฌ";
+ var rarrpl = "โฅ
";
+ var rarrsim = "โฅด";
+ var Rarrtl = "โค";
+ var rarrtl = "โฃ";
+ var rarrw = "โ";
+ var ratail = "โค";
+ var rAtail = "โค";
+ var ratio = "โถ";
+ var rationals = "โ";
+ var rbarr = "โค";
+ var rBarr = "โค";
+ var RBarr = "โค";
+ var rbbrk = "โณ";
+ var rbrace = "}";
+ var rbrack = "]";
+ var rbrke = "โฆ";
+ var rbrksld = "โฆ";
+ var rbrkslu = "โฆ";
+ var Rcaron = "ล";
+ var rcaron = "ล";
+ var Rcedil = "ล";
+ var rcedil = "ล";
+ var rceil = "โ";
+ var rcub = "}";
+ var Rcy = "ะ ";
+ var rcy = "ั";
+ var rdca = "โคท";
+ var rdldhar = "โฅฉ";
+ var rdquo = "โ";
+ var rdquor = "โ";
+ var rdsh = "โณ";
+ var real = "โ";
+ var realine = "โ";
+ var realpart = "โ";
+ var reals = "โ";
+ var Re = "โ";
+ var rect = "โญ";
+ var reg = "ยฎ";
+ var REG = "ยฎ";
+ var ReverseElement = "โ";
+ var ReverseEquilibrium = "โ";
+ var ReverseUpEquilibrium = "โฅฏ";
+ var rfisht = "โฅฝ";
+ var rfloor = "โ";
+ var rfr = "๐ฏ";
+ var Rfr = "โ";
+ var rHar = "โฅค";
+ var rhard = "โ";
+ var rharu = "โ";
+ var rharul = "โฅฌ";
+ var Rho = "ฮก";
+ var rho = "ฯ";
+ var rhov = "ฯฑ";
+ var RightAngleBracket = "โฉ";
+ var RightArrowBar = "โฅ";
+ var rightarrow = "โ";
+ var RightArrow = "โ";
+ var Rightarrow = "โ";
+ var RightArrowLeftArrow = "โ";
+ var rightarrowtail = "โฃ";
+ var RightCeiling = "โ";
+ var RightDoubleBracket = "โง";
+ var RightDownTeeVector = "โฅ";
+ var RightDownVectorBar = "โฅ";
+ var RightDownVector = "โ";
+ var RightFloor = "โ";
+ var rightharpoondown = "โ";
+ var rightharpoonup = "โ";
+ var rightleftarrows = "โ";
+ var rightleftharpoons = "โ";
+ var rightrightarrows = "โ";
+ var rightsquigarrow = "โ";
+ var RightTeeArrow = "โฆ";
+ var RightTee = "โข";
+ var RightTeeVector = "โฅ";
+ var rightthreetimes = "โ";
+ var RightTriangleBar = "โง";
+ var RightTriangle = "โณ";
+ var RightTriangleEqual = "โต";
+ var RightUpDownVector = "โฅ";
+ var RightUpTeeVector = "โฅ";
+ var RightUpVectorBar = "โฅ";
+ var RightUpVector = "โพ";
+ var RightVectorBar = "โฅ";
+ var RightVector = "โ";
+ var ring = "ห";
+ var risingdotseq = "โ";
+ var rlarr = "โ";
+ var rlhar = "โ";
+ var rlm = "โ";
+ var rmoustache = "โฑ";
+ var rmoust = "โฑ";
+ var rnmid = "โซฎ";
+ var roang = "โญ";
+ var roarr = "โพ";
+ var robrk = "โง";
+ var ropar = "โฆ";
+ var ropf = "๐ฃ";
+ var Ropf = "โ";
+ var roplus = "โจฎ";
+ var rotimes = "โจต";
+ var RoundImplies = "โฅฐ";
+ var rpar = ")";
+ var rpargt = "โฆ";
+ var rppolint = "โจ";
+ var rrarr = "โ";
+ var Rrightarrow = "โ";
+ var rsaquo = "โบ";
+ var rscr = "๐";
+ var Rscr = "โ";
+ var rsh = "โฑ";
+ var Rsh = "โฑ";
+ var rsqb = "]";
+ var rsquo = "โ";
+ var rsquor = "โ";
+ var rthree = "โ";
+ var rtimes = "โ";
+ var rtri = "โน";
+ var rtrie = "โต";
+ var rtrif = "โธ";
+ var rtriltri = "โง";
+ var RuleDelayed = "โงด";
+ var ruluhar = "โฅจ";
+ var rx = "โ";
+ var Sacute = "ล";
+ var sacute = "ล";
+ var sbquo = "โ";
+ var scap = "โชธ";
+ var Scaron = "ล ";
+ var scaron = "ลก";
+ var Sc = "โชผ";
+ var sc = "โป";
+ var sccue = "โฝ";
+ var sce = "โชฐ";
+ var scE = "โชด";
+ var Scedil = "ล";
+ var scedil = "ล";
+ var Scirc = "ล";
+ var scirc = "ล";
+ var scnap = "โชบ";
+ var scnE = "โชถ";
+ var scnsim = "โฉ";
+ var scpolint = "โจ";
+ var scsim = "โฟ";
+ var Scy = "ะก";
+ var scy = "ั";
+ var sdotb = "โก";
+ var sdot = "โ
";
+ var sdote = "โฉฆ";
+ var searhk = "โคฅ";
+ var searr = "โ";
+ var seArr = "โ";
+ var searrow = "โ";
+ var sect = "ยง";
+ var semi = ";";
+ var seswar = "โคฉ";
+ var setminus = "โ";
+ var setmn = "โ";
+ var sext = "โถ";
+ var Sfr = "๐";
+ var sfr = "๐ฐ";
+ var sfrown = "โข";
+ var sharp = "โฏ";
+ var SHCHcy = "ะฉ";
+ var shchcy = "ั";
+ var SHcy = "ะจ";
+ var shcy = "ั";
+ var ShortDownArrow = "โ";
+ var ShortLeftArrow = "โ";
+ var shortmid = "โฃ";
+ var shortparallel = "โฅ";
+ var ShortRightArrow = "โ";
+ var ShortUpArrow = "โ";
+ var shy = "ยญ";
+ var Sigma = "ฮฃ";
+ var sigma = "ฯ";
+ var sigmaf = "ฯ";
+ var sigmav = "ฯ";
+ var sim = "โผ";
+ var simdot = "โฉช";
+ var sime = "โ";
+ var simeq = "โ";
+ var simg = "โช";
+ var simgE = "โช ";
+ var siml = "โช";
+ var simlE = "โช";
+ var simne = "โ";
+ var simplus = "โจค";
+ var simrarr = "โฅฒ";
+ var slarr = "โ";
+ var SmallCircle = "โ";
+ var smallsetminus = "โ";
+ var smashp = "โจณ";
+ var smeparsl = "โงค";
+ var smid = "โฃ";
+ var smile = "โฃ";
+ var smt = "โชช";
+ var smte = "โชฌ";
+ var smtes = "โชฌ๏ธ";
+ var SOFTcy = "ะฌ";
+ var softcy = "ั";
+ var solbar = "โฟ";
+ var solb = "โง";
+ var sol = "/";
+ var Sopf = "๐";
+ var sopf = "๐ค";
+ var spades = "โ ";
+ var spadesuit = "โ ";
+ var spar = "โฅ";
+ var sqcap = "โ";
+ var sqcaps = "โ๏ธ";
+ var sqcup = "โ";
+ var sqcups = "โ๏ธ";
+ var Sqrt = "โ";
+ var sqsub = "โ";
+ var sqsube = "โ";
+ var sqsubset = "โ";
+ var sqsubseteq = "โ";
+ var sqsup = "โ";
+ var sqsupe = "โ";
+ var sqsupset = "โ";
+ var sqsupseteq = "โ";
+ var square = "โก";
+ var Square = "โก";
+ var SquareIntersection = "โ";
+ var SquareSubset = "โ";
+ var SquareSubsetEqual = "โ";
+ var SquareSuperset = "โ";
+ var SquareSupersetEqual = "โ";
+ var SquareUnion = "โ";
+ var squarf = "โช";
+ var squ = "โก";
+ var squf = "โช";
+ var srarr = "โ";
+ var Sscr = "๐ฎ";
+ var sscr = "๐";
+ var ssetmn = "โ";
+ var ssmile = "โฃ";
+ var sstarf = "โ";
+ var Star = "โ";
+ var star = "โ";
+ var starf = "โ
";
+ var straightepsilon = "ฯต";
+ var straightphi = "ฯ";
+ var strns = "ยฏ";
+ var sub = "โ";
+ var Sub = "โ";
+ var subdot = "โชฝ";
+ var subE = "โซ
";
+ var sube = "โ";
+ var subedot = "โซ";
+ var submult = "โซ";
+ var subnE = "โซ";
+ var subne = "โ";
+ var subplus = "โชฟ";
+ var subrarr = "โฅน";
+ var subset = "โ";
+ var Subset = "โ";
+ var subseteq = "โ";
+ var subseteqq = "โซ
";
+ var SubsetEqual = "โ";
+ var subsetneq = "โ";
+ var subsetneqq = "โซ";
+ var subsim = "โซ";
+ var subsub = "โซ";
+ var subsup = "โซ";
+ var succapprox = "โชธ";
+ var succ = "โป";
+ var succcurlyeq = "โฝ";
+ var Succeeds = "โป";
+ var SucceedsEqual = "โชฐ";
+ var SucceedsSlantEqual = "โฝ";
+ var SucceedsTilde = "โฟ";
+ var succeq = "โชฐ";
+ var succnapprox = "โชบ";
+ var succneqq = "โชถ";
+ var succnsim = "โฉ";
+ var succsim = "โฟ";
+ var SuchThat = "โ";
+ var sum = "โ";
+ var Sum = "โ";
+ var sung = "โช";
+ var sup1 = "ยน";
+ var sup2 = "ยฒ";
+ var sup3 = "ยณ";
+ var sup = "โ";
+ var Sup = "โ";
+ var supdot = "โชพ";
+ var supdsub = "โซ";
+ var supE = "โซ";
+ var supe = "โ";
+ var supedot = "โซ";
+ var Superset = "โ";
+ var SupersetEqual = "โ";
+ var suphsol = "โ";
+ var suphsub = "โซ";
+ var suplarr = "โฅป";
+ var supmult = "โซ";
+ var supnE = "โซ";
+ var supne = "โ";
+ var supplus = "โซ";
+ var supset = "โ";
+ var Supset = "โ";
+ var supseteq = "โ";
+ var supseteqq = "โซ";
+ var supsetneq = "โ";
+ var supsetneqq = "โซ";
+ var supsim = "โซ";
+ var supsub = "โซ";
+ var supsup = "โซ";
+ var swarhk = "โคฆ";
+ var swarr = "โ";
+ var swArr = "โ";
+ var swarrow = "โ";
+ var swnwar = "โคช";
+ var szlig = "ร";
+ var Tab = "\t";
+ var target = "โ";
+ var Tau = "ฮค";
+ var tau = "ฯ";
+ var tbrk = "โด";
+ var Tcaron = "ลค";
+ var tcaron = "ลฅ";
+ var Tcedil = "ลข";
+ var tcedil = "ลฃ";
+ var Tcy = "ะข";
+ var tcy = "ั";
+ var tdot = "โ";
+ var telrec = "โ";
+ var Tfr = "๐";
+ var tfr = "๐ฑ";
+ var there4 = "โด";
+ var therefore = "โด";
+ var Therefore = "โด";
+ var Theta = "ฮ";
+ var theta = "ฮธ";
+ var thetasym = "ฯ";
+ var thetav = "ฯ";
+ var thickapprox = "โ";
+ var thicksim = "โผ";
+ var ThickSpace = "โโ";
+ var ThinSpace = "โ";
+ var thinsp = "โ";
+ var thkap = "โ";
+ var thksim = "โผ";
+ var THORN = "ร";
+ var thorn = "รพ";
+ var tilde = "ห";
+ var Tilde = "โผ";
+ var TildeEqual = "โ";
+ var TildeFullEqual = "โ
";
+ var TildeTilde = "โ";
+ var timesbar = "โจฑ";
+ var timesb = "โ ";
+ var times = "ร";
+ var timesd = "โจฐ";
+ var tint = "โญ";
+ var toea = "โคจ";
+ var topbot = "โถ";
+ var topcir = "โซฑ";
+ var top = "โค";
+ var Topf = "๐";
+ var topf = "๐ฅ";
+ var topfork = "โซ";
+ var tosa = "โคฉ";
+ var tprime = "โด";
+ var trade = "โข";
+ var TRADE = "โข";
+ var triangle = "โต";
+ var triangledown = "โฟ";
+ var triangleleft = "โ";
+ var trianglelefteq = "โด";
+ var triangleq = "โ";
+ var triangleright = "โน";
+ var trianglerighteq = "โต";
+ var tridot = "โฌ";
+ var trie = "โ";
+ var triminus = "โจบ";
+ var TripleDot = "โ";
+ var triplus = "โจน";
+ var trisb = "โง";
+ var tritime = "โจป";
+ var trpezium = "โข";
+ var Tscr = "๐ฏ";
+ var tscr = "๐";
+ var TScy = "ะฆ";
+ var tscy = "ั";
+ var TSHcy = "ะ";
+ var tshcy = "ั";
+ var Tstrok = "ลฆ";
+ var tstrok = "ลง";
+ var twixt = "โฌ";
+ var twoheadleftarrow = "โ";
+ var twoheadrightarrow = "โ ";
+ var Uacute = "ร";
+ var uacute = "รบ";
+ var uarr = "โ";
+ var Uarr = "โ";
+ var uArr = "โ";
+ var Uarrocir = "โฅ";
+ var Ubrcy = "ะ";
+ var ubrcy = "ั";
+ var Ubreve = "ลฌ";
+ var ubreve = "ลญ";
+ var Ucirc = "ร";
+ var ucirc = "รป";
+ var Ucy = "ะฃ";
+ var ucy = "ั";
+ var udarr = "โ
";
+ var Udblac = "ลฐ";
+ var udblac = "ลฑ";
+ var udhar = "โฅฎ";
+ var ufisht = "โฅพ";
+ var Ufr = "๐";
+ var ufr = "๐ฒ";
+ var Ugrave = "ร";
+ var ugrave = "รน";
+ var uHar = "โฅฃ";
+ var uharl = "โฟ";
+ var uharr = "โพ";
+ var uhblk = "โ";
+ var ulcorn = "โ";
+ var ulcorner = "โ";
+ var ulcrop = "โ";
+ var ultri = "โธ";
+ var Umacr = "ลช";
+ var umacr = "ลซ";
+ var uml = "ยจ";
+ var UnderBar = "_";
+ var UnderBrace = "โ";
+ var UnderBracket = "โต";
+ var UnderParenthesis = "โ";
+ var Union = "โ";
+ var UnionPlus = "โ";
+ var Uogon = "ลฒ";
+ var uogon = "ลณ";
+ var Uopf = "๐";
+ var uopf = "๐ฆ";
+ var UpArrowBar = "โค";
+ var uparrow = "โ";
+ var UpArrow = "โ";
+ var Uparrow = "โ";
+ var UpArrowDownArrow = "โ
";
+ var updownarrow = "โ";
+ var UpDownArrow = "โ";
+ var Updownarrow = "โ";
+ var UpEquilibrium = "โฅฎ";
+ var upharpoonleft = "โฟ";
+ var upharpoonright = "โพ";
+ var uplus = "โ";
+ var UpperLeftArrow = "โ";
+ var UpperRightArrow = "โ";
+ var upsi = "ฯ
";
+ var Upsi = "ฯ";
+ var upsih = "ฯ";
+ var Upsilon = "ฮฅ";
+ var upsilon = "ฯ
";
+ var UpTeeArrow = "โฅ";
+ var UpTee = "โฅ";
+ var upuparrows = "โ";
+ var urcorn = "โ";
+ var urcorner = "โ";
+ var urcrop = "โ";
+ var Uring = "ลฎ";
+ var uring = "ลฏ";
+ var urtri = "โน";
+ var Uscr = "๐ฐ";
+ var uscr = "๐";
+ var utdot = "โฐ";
+ var Utilde = "ลจ";
+ var utilde = "ลฉ";
+ var utri = "โต";
+ var utrif = "โด";
+ var uuarr = "โ";
+ var Uuml = "ร";
+ var uuml = "รผ";
+ var uwangle = "โฆง";
+ var vangrt = "โฆ";
+ var varepsilon = "ฯต";
+ var varkappa = "ฯฐ";
+ var varnothing = "โ
";
+ var varphi = "ฯ";
+ var varpi = "ฯ";
+ var varpropto = "โ";
+ var varr = "โ";
+ var vArr = "โ";
+ var varrho = "ฯฑ";
+ var varsigma = "ฯ";
+ var varsubsetneq = "โ๏ธ";
+ var varsubsetneqq = "โซ๏ธ";
+ var varsupsetneq = "โ๏ธ";
+ var varsupsetneqq = "โซ๏ธ";
+ var vartheta = "ฯ";
+ var vartriangleleft = "โฒ";
+ var vartriangleright = "โณ";
+ var vBar = "โซจ";
+ var Vbar = "โซซ";
+ var vBarv = "โซฉ";
+ var Vcy = "ะ";
+ var vcy = "ะฒ";
+ var vdash = "โข";
+ var vDash = "โจ";
+ var Vdash = "โฉ";
+ var VDash = "โซ";
+ var Vdashl = "โซฆ";
+ var veebar = "โป";
+ var vee = "โจ";
+ var Vee = "โ";
+ var veeeq = "โ";
+ var vellip = "โฎ";
+ var verbar = "|";
+ var Verbar = "โ";
+ var vert = "|";
+ var Vert = "โ";
+ var VerticalBar = "โฃ";
+ var VerticalLine = "|";
+ var VerticalSeparator = "โ";
+ var VerticalTilde = "โ";
+ var VeryThinSpace = "โ";
+ var Vfr = "๐";
+ var vfr = "๐ณ";
+ var vltri = "โฒ";
+ var vnsub = "โโ";
+ var vnsup = "โโ";
+ var Vopf = "๐";
+ var vopf = "๐ง";
+ var vprop = "โ";
+ var vrtri = "โณ";
+ var Vscr = "๐ฑ";
+ var vscr = "๐";
+ var vsubnE = "โซ๏ธ";
+ var vsubne = "โ๏ธ";
+ var vsupnE = "โซ๏ธ";
+ var vsupne = "โ๏ธ";
+ var Vvdash = "โช";
+ var vzigzag = "โฆ";
+ var Wcirc = "ลด";
+ var wcirc = "ลต";
+ var wedbar = "โฉ";
+ var wedge = "โง";
+ var Wedge = "โ";
+ var wedgeq = "โ";
+ var weierp = "โ";
+ var Wfr = "๐";
+ var wfr = "๐ด";
+ var Wopf = "๐";
+ var wopf = "๐จ";
+ var wp = "โ";
+ var wr = "โ";
+ var wreath = "โ";
+ var Wscr = "๐ฒ";
+ var wscr = "๐";
+ var xcap = "โ";
+ var xcirc = "โฏ";
+ var xcup = "โ";
+ var xdtri = "โฝ";
+ var Xfr = "๐";
+ var xfr = "๐ต";
+ var xharr = "โท";
+ var xhArr = "โบ";
+ var Xi = "ฮ";
+ var xi = "ฮพ";
+ var xlarr = "โต";
+ var xlArr = "โธ";
+ var xmap = "โผ";
+ var xnis = "โป";
+ var xodot = "โจ";
+ var Xopf = "๐";
+ var xopf = "๐ฉ";
+ var xoplus = "โจ";
+ var xotime = "โจ";
+ var xrarr = "โถ";
+ var xrArr = "โน";
+ var Xscr = "๐ณ";
+ var xscr = "๐";
+ var xsqcup = "โจ";
+ var xuplus = "โจ";
+ var xutri = "โณ";
+ var xvee = "โ";
+ var xwedge = "โ";
+ var Yacute = "ร";
+ var yacute = "รฝ";
+ var YAcy = "ะฏ";
+ var yacy = "ั";
+ var Ycirc = "ลถ";
+ var ycirc = "ลท";
+ var Ycy = "ะซ";
+ var ycy = "ั";
+ var yen = "ยฅ";
+ var Yfr = "๐";
+ var yfr = "๐ถ";
+ var YIcy = "ะ";
+ var yicy = "ั";
+ var Yopf = "๐";
+ var yopf = "๐ช";
+ var Yscr = "๐ด";
+ var yscr = "๐";
+ var YUcy = "ะฎ";
+ var yucy = "ั";
+ var yuml = "รฟ";
+ var Yuml = "ลธ";
+ var Zacute = "ลน";
+ var zacute = "ลบ";
+ var Zcaron = "ลฝ";
+ var zcaron = "ลพ";
+ var Zcy = "ะ";
+ var zcy = "ะท";
+ var Zdot = "ลป";
+ var zdot = "ลผ";
+ var zeetrf = "โจ";
+ var ZeroWidthSpace = "โ";
+ var Zeta = "ฮ";
+ var zeta = "ฮถ";
+ var zfr = "๐ท";
+ var Zfr = "โจ";
+ var ZHcy = "ะ";
+ var zhcy = "ะถ";
+ var zigrarr = "โ";
+ var zopf = "๐ซ";
+ var Zopf = "โค";
+ var Zscr = "๐ต";
+ var zscr = "๐";
+ var zwj = "โ";
+ var zwnj = "โ";
+ var entities = {
+ Aacute: Aacute,
+ aacute: aacute,
+ Abreve: Abreve,
+ abreve: abreve,
+ ac: ac,
+ acd: acd,
+ acE: acE,
+ Acirc: Acirc,
+ acirc: acirc,
+ acute: acute,
+ Acy: Acy,
+ acy: acy,
+ AElig: AElig,
+ aelig: aelig,
+ af: af,
+ Afr: Afr,
+ afr: afr,
+ Agrave: Agrave,
+ agrave: agrave,
+ alefsym: alefsym,
+ aleph: aleph,
+ Alpha: Alpha,
+ alpha: alpha,
+ Amacr: Amacr,
+ amacr: amacr,
+ amalg: amalg,
+ amp: amp,
+ AMP: AMP,
+ andand: andand,
+ And: And,
+ and: and,
+ andd: andd,
+ andslope: andslope,
+ andv: andv,
+ ang: ang,
+ ange: ange,
+ angle: angle,
+ angmsdaa: angmsdaa,
+ angmsdab: angmsdab,
+ angmsdac: angmsdac,
+ angmsdad: angmsdad,
+ angmsdae: angmsdae,
+ angmsdaf: angmsdaf,
+ angmsdag: angmsdag,
+ angmsdah: angmsdah,
+ angmsd: angmsd,
+ angrt: angrt,
+ angrtvb: angrtvb,
+ angrtvbd: angrtvbd,
+ angsph: angsph,
+ angst: angst,
+ angzarr: angzarr,
+ Aogon: Aogon,
+ aogon: aogon,
+ Aopf: Aopf,
+ aopf: aopf,
+ apacir: apacir,
+ ap: ap,
+ apE: apE,
+ ape: ape,
+ apid: apid,
+ apos: apos,
+ ApplyFunction: ApplyFunction,
+ approx: approx,
+ approxeq: approxeq,
+ Aring: Aring,
+ aring: aring,
+ Ascr: Ascr,
+ ascr: ascr,
+ Assign: Assign,
+ ast: ast,
+ asymp: asymp,
+ asympeq: asympeq,
+ Atilde: Atilde,
+ atilde: atilde,
+ Auml: Auml,
+ auml: auml,
+ awconint: awconint,
+ awint: awint,
+ backcong: backcong,
+ backepsilon: backepsilon,
+ backprime: backprime,
+ backsim: backsim,
+ backsimeq: backsimeq,
+ Backslash: Backslash,
+ Barv: Barv,
+ barvee: barvee,
+ barwed: barwed,
+ Barwed: Barwed,
+ barwedge: barwedge,
+ bbrk: bbrk,
+ bbrktbrk: bbrktbrk,
+ bcong: bcong,
+ Bcy: Bcy,
+ bcy: bcy,
+ bdquo: bdquo,
+ becaus: becaus,
+ because: because,
+ Because: Because,
+ bemptyv: bemptyv,
+ bepsi: bepsi,
+ bernou: bernou,
+ Bernoullis: Bernoullis,
+ Beta: Beta,
+ beta: beta,
+ beth: beth,
+ between: between,
+ Bfr: Bfr,
+ bfr: bfr,
+ bigcap: bigcap,
+ bigcirc: bigcirc,
+ bigcup: bigcup,
+ bigodot: bigodot,
+ bigoplus: bigoplus,
+ bigotimes: bigotimes,
+ bigsqcup: bigsqcup,
+ bigstar: bigstar,
+ bigtriangledown: bigtriangledown,
+ bigtriangleup: bigtriangleup,
+ biguplus: biguplus,
+ bigvee: bigvee,
+ bigwedge: bigwedge,
+ bkarow: bkarow,
+ blacklozenge: blacklozenge,
+ blacksquare: blacksquare,
+ blacktriangle: blacktriangle,
+ blacktriangledown: blacktriangledown,
+ blacktriangleleft: blacktriangleleft,
+ blacktriangleright: blacktriangleright,
+ blank: blank,
+ blk12: blk12,
+ blk14: blk14,
+ blk34: blk34,
+ block: block,
+ bne: bne,
+ bnequiv: bnequiv,
+ bNot: bNot,
+ bnot: bnot,
+ Bopf: Bopf,
+ bopf: bopf,
+ bot: bot,
+ bottom: bottom,
+ bowtie: bowtie,
+ boxbox: boxbox,
+ boxdl: boxdl,
+ boxdL: boxdL,
+ boxDl: boxDl,
+ boxDL: boxDL,
+ boxdr: boxdr,
+ boxdR: boxdR,
+ boxDr: boxDr,
+ boxDR: boxDR,
+ boxh: boxh,
+ boxH: boxH,
+ boxhd: boxhd,
+ boxHd: boxHd,
+ boxhD: boxhD,
+ boxHD: boxHD,
+ boxhu: boxhu,
+ boxHu: boxHu,
+ boxhU: boxhU,
+ boxHU: boxHU,
+ boxminus: boxminus,
+ boxplus: boxplus,
+ boxtimes: boxtimes,
+ boxul: boxul,
+ boxuL: boxuL,
+ boxUl: boxUl,
+ boxUL: boxUL,
+ boxur: boxur,
+ boxuR: boxuR,
+ boxUr: boxUr,
+ boxUR: boxUR,
+ boxv: boxv,
+ boxV: boxV,
+ boxvh: boxvh,
+ boxvH: boxvH,
+ boxVh: boxVh,
+ boxVH: boxVH,
+ boxvl: boxvl,
+ boxvL: boxvL,
+ boxVl: boxVl,
+ boxVL: boxVL,
+ boxvr: boxvr,
+ boxvR: boxvR,
+ boxVr: boxVr,
+ boxVR: boxVR,
+ bprime: bprime,
+ breve: breve,
+ Breve: Breve,
+ brvbar: brvbar,
+ bscr: bscr,
+ Bscr: Bscr,
+ bsemi: bsemi,
+ bsim: bsim,
+ bsime: bsime,
+ bsolb: bsolb,
+ bsol: bsol,
+ bsolhsub: bsolhsub,
+ bull: bull,
+ bullet: bullet,
+ bump: bump,
+ bumpE: bumpE,
+ bumpe: bumpe,
+ Bumpeq: Bumpeq,
+ bumpeq: bumpeq,
+ Cacute: Cacute,
+ cacute: cacute,
+ capand: capand,
+ capbrcup: capbrcup,
+ capcap: capcap,
+ cap: cap,
+ Cap: Cap,
+ capcup: capcup,
+ capdot: capdot,
+ CapitalDifferentialD: CapitalDifferentialD,
+ caps: caps,
+ caret: caret,
+ caron: caron,
+ Cayleys: Cayleys,
+ ccaps: ccaps,
+ Ccaron: Ccaron,
+ ccaron: ccaron,
+ Ccedil: Ccedil,
+ ccedil: ccedil,
+ Ccirc: Ccirc,
+ ccirc: ccirc,
+ Cconint: Cconint,
+ ccups: ccups,
+ ccupssm: ccupssm,
+ Cdot: Cdot,
+ cdot: cdot,
+ cedil: cedil,
+ Cedilla: Cedilla,
+ cemptyv: cemptyv,
+ cent: cent,
+ centerdot: centerdot,
+ CenterDot: CenterDot,
+ cfr: cfr,
+ Cfr: Cfr,
+ CHcy: CHcy,
+ chcy: chcy,
+ check: check,
+ checkmark: checkmark,
+ Chi: Chi,
+ chi: chi,
+ circ: circ,
+ circeq: circeq,
+ circlearrowleft: circlearrowleft,
+ circlearrowright: circlearrowright,
+ circledast: circledast,
+ circledcirc: circledcirc,
+ circleddash: circleddash,
+ CircleDot: CircleDot,
+ circledR: circledR,
+ circledS: circledS,
+ CircleMinus: CircleMinus,
+ CirclePlus: CirclePlus,
+ CircleTimes: CircleTimes,
+ cir: cir,
+ cirE: cirE,
+ cire: cire,
+ cirfnint: cirfnint,
+ cirmid: cirmid,
+ cirscir: cirscir,
+ ClockwiseContourIntegral: ClockwiseContourIntegral,
+ CloseCurlyDoubleQuote: CloseCurlyDoubleQuote,
+ CloseCurlyQuote: CloseCurlyQuote,
+ clubs: clubs,
+ clubsuit: clubsuit,
+ colon: colon,
+ Colon: Colon,
+ Colone: Colone,
+ colone: colone,
+ coloneq: coloneq,
+ comma: comma,
+ commat: commat,
+ comp: comp,
+ compfn: compfn,
+ complement: complement,
+ complexes: complexes,
+ cong: cong,
+ congdot: congdot,
+ Congruent: Congruent,
+ conint: conint,
+ Conint: Conint,
+ ContourIntegral: ContourIntegral,
+ copf: copf,
+ Copf: Copf,
+ coprod: coprod,
+ Coproduct: Coproduct,
+ copy: copy,
+ COPY: COPY,
+ copysr: copysr,
+ CounterClockwiseContourIntegral: CounterClockwiseContourIntegral,
+ crarr: crarr,
+ cross: cross,
+ Cross: Cross,
+ Cscr: Cscr,
+ cscr: cscr,
+ csub: csub,
+ csube: csube,
+ csup: csup,
+ csupe: csupe,
+ ctdot: ctdot,
+ cudarrl: cudarrl,
+ cudarrr: cudarrr,
+ cuepr: cuepr,
+ cuesc: cuesc,
+ cularr: cularr,
+ cularrp: cularrp,
+ cupbrcap: cupbrcap,
+ cupcap: cupcap,
+ CupCap: CupCap,
+ cup: cup,
+ Cup: Cup,
+ cupcup: cupcup,
+ cupdot: cupdot,
+ cupor: cupor,
+ cups: cups,
+ curarr: curarr,
+ curarrm: curarrm,
+ curlyeqprec: curlyeqprec,
+ curlyeqsucc: curlyeqsucc,
+ curlyvee: curlyvee,
+ curlywedge: curlywedge,
+ curren: curren,
+ curvearrowleft: curvearrowleft,
+ curvearrowright: curvearrowright,
+ cuvee: cuvee,
+ cuwed: cuwed,
+ cwconint: cwconint,
+ cwint: cwint,
+ cylcty: cylcty,
+ dagger: dagger,
+ Dagger: Dagger,
+ daleth: daleth,
+ darr: darr,
+ Darr: Darr,
+ dArr: dArr,
+ dash: dash,
+ Dashv: Dashv,
+ dashv: dashv,
+ dbkarow: dbkarow,
+ dblac: dblac,
+ Dcaron: Dcaron,
+ dcaron: dcaron,
+ Dcy: Dcy,
+ dcy: dcy,
+ ddagger: ddagger,
+ ddarr: ddarr,
+ DD: DD,
+ dd: dd,
+ DDotrahd: DDotrahd,
+ ddotseq: ddotseq,
+ deg: deg,
+ Del: Del,
+ Delta: Delta,
+ delta: delta,
+ demptyv: demptyv,
+ dfisht: dfisht,
+ Dfr: Dfr,
+ dfr: dfr,
+ dHar: dHar,
+ dharl: dharl,
+ dharr: dharr,
+ DiacriticalAcute: DiacriticalAcute,
+ DiacriticalDot: DiacriticalDot,
+ DiacriticalDoubleAcute: DiacriticalDoubleAcute,
+ DiacriticalGrave: DiacriticalGrave,
+ DiacriticalTilde: DiacriticalTilde,
+ diam: diam,
+ diamond: diamond,
+ Diamond: Diamond,
+ diamondsuit: diamondsuit,
+ diams: diams,
+ die: die,
+ DifferentialD: DifferentialD,
+ digamma: digamma,
+ disin: disin,
+ div: div,
+ divide: divide,
+ divideontimes: divideontimes,
+ divonx: divonx,
+ DJcy: DJcy,
+ djcy: djcy,
+ dlcorn: dlcorn,
+ dlcrop: dlcrop,
+ dollar: dollar,
+ Dopf: Dopf,
+ dopf: dopf,
+ Dot: Dot,
+ dot: dot,
+ DotDot: DotDot,
+ doteq: doteq,
+ doteqdot: doteqdot,
+ DotEqual: DotEqual,
+ dotminus: dotminus,
+ dotplus: dotplus,
+ dotsquare: dotsquare,
+ doublebarwedge: doublebarwedge,
+ DoubleContourIntegral: DoubleContourIntegral,
+ DoubleDot: DoubleDot,
+ DoubleDownArrow: DoubleDownArrow,
+ DoubleLeftArrow: DoubleLeftArrow,
+ DoubleLeftRightArrow: DoubleLeftRightArrow,
+ DoubleLeftTee: DoubleLeftTee,
+ DoubleLongLeftArrow: DoubleLongLeftArrow,
+ DoubleLongLeftRightArrow: DoubleLongLeftRightArrow,
+ DoubleLongRightArrow: DoubleLongRightArrow,
+ DoubleRightArrow: DoubleRightArrow,
+ DoubleRightTee: DoubleRightTee,
+ DoubleUpArrow: DoubleUpArrow,
+ DoubleUpDownArrow: DoubleUpDownArrow,
+ DoubleVerticalBar: DoubleVerticalBar,
+ DownArrowBar: DownArrowBar,
+ downarrow: downarrow,
+ DownArrow: DownArrow,
+ Downarrow: Downarrow,
+ DownArrowUpArrow: DownArrowUpArrow,
+ DownBreve: DownBreve,
+ downdownarrows: downdownarrows,
+ downharpoonleft: downharpoonleft,
+ downharpoonright: downharpoonright,
+ DownLeftRightVector: DownLeftRightVector,
+ DownLeftTeeVector: DownLeftTeeVector,
+ DownLeftVectorBar: DownLeftVectorBar,
+ DownLeftVector: DownLeftVector,
+ DownRightTeeVector: DownRightTeeVector,
+ DownRightVectorBar: DownRightVectorBar,
+ DownRightVector: DownRightVector,
+ DownTeeArrow: DownTeeArrow,
+ DownTee: DownTee,
+ drbkarow: drbkarow,
+ drcorn: drcorn,
+ drcrop: drcrop,
+ Dscr: Dscr,
+ dscr: dscr,
+ DScy: DScy,
+ dscy: dscy,
+ dsol: dsol,
+ Dstrok: Dstrok,
+ dstrok: dstrok,
+ dtdot: dtdot,
+ dtri: dtri,
+ dtrif: dtrif,
+ duarr: duarr,
+ duhar: duhar,
+ dwangle: dwangle,
+ DZcy: DZcy,
+ dzcy: dzcy,
+ dzigrarr: dzigrarr,
+ Eacute: Eacute,
+ eacute: eacute,
+ easter: easter,
+ Ecaron: Ecaron,
+ ecaron: ecaron,
+ Ecirc: Ecirc,
+ ecirc: ecirc,
+ ecir: ecir,
+ ecolon: ecolon,
+ Ecy: Ecy,
+ ecy: ecy,
+ eDDot: eDDot,
+ Edot: Edot,
+ edot: edot,
+ eDot: eDot,
+ ee: ee,
+ efDot: efDot,
+ Efr: Efr,
+ efr: efr,
+ eg: eg,
+ Egrave: Egrave,
+ egrave: egrave,
+ egs: egs,
+ egsdot: egsdot,
+ el: el,
+ Element: Element,
+ elinters: elinters,
+ ell: ell,
+ els: els,
+ elsdot: elsdot,
+ Emacr: Emacr,
+ emacr: emacr,
+ empty: empty,
+ emptyset: emptyset,
+ EmptySmallSquare: EmptySmallSquare,
+ emptyv: emptyv,
+ EmptyVerySmallSquare: EmptyVerySmallSquare,
+ emsp13: emsp13,
+ emsp14: emsp14,
+ emsp: emsp,
+ ENG: ENG,
+ eng: eng,
+ ensp: ensp,
+ Eogon: Eogon,
+ eogon: eogon,
+ Eopf: Eopf,
+ eopf: eopf,
+ epar: epar,
+ eparsl: eparsl,
+ eplus: eplus,
+ epsi: epsi,
+ Epsilon: Epsilon,
+ epsilon: epsilon,
+ epsiv: epsiv,
+ eqcirc: eqcirc,
+ eqcolon: eqcolon,
+ eqsim: eqsim,
+ eqslantgtr: eqslantgtr,
+ eqslantless: eqslantless,
+ Equal: Equal,
+ equals: equals,
+ EqualTilde: EqualTilde,
+ equest: equest,
+ Equilibrium: Equilibrium,
+ equiv: equiv,
+ equivDD: equivDD,
+ eqvparsl: eqvparsl,
+ erarr: erarr,
+ erDot: erDot,
+ escr: escr,
+ Escr: Escr,
+ esdot: esdot,
+ Esim: Esim,
+ esim: esim,
+ Eta: Eta,
+ eta: eta,
+ ETH: ETH,
+ eth: eth,
+ Euml: Euml,
+ euml: euml,
+ euro: euro,
+ excl: excl,
+ exist: exist,
+ Exists: Exists,
+ expectation: expectation,
+ exponentiale: exponentiale,
+ ExponentialE: ExponentialE,
+ fallingdotseq: fallingdotseq,
+ Fcy: Fcy,
+ fcy: fcy,
+ female: female,
+ ffilig: ffilig,
+ fflig: fflig,
+ ffllig: ffllig,
+ Ffr: Ffr,
+ ffr: ffr,
+ filig: filig,
+ FilledSmallSquare: FilledSmallSquare,
+ FilledVerySmallSquare: FilledVerySmallSquare,
+ fjlig: fjlig,
+ flat: flat,
+ fllig: fllig,
+ fltns: fltns,
+ fnof: fnof,
+ Fopf: Fopf,
+ fopf: fopf,
+ forall: forall,
+ ForAll: ForAll,
+ fork: fork,
+ forkv: forkv,
+ Fouriertrf: Fouriertrf,
+ fpartint: fpartint,
+ frac12: frac12,
+ frac13: frac13,
+ frac14: frac14,
+ frac15: frac15,
+ frac16: frac16,
+ frac18: frac18,
+ frac23: frac23,
+ frac25: frac25,
+ frac34: frac34,
+ frac35: frac35,
+ frac38: frac38,
+ frac45: frac45,
+ frac56: frac56,
+ frac58: frac58,
+ frac78: frac78,
+ frasl: frasl,
+ frown: frown,
+ fscr: fscr,
+ Fscr: Fscr,
+ gacute: gacute,
+ Gamma: Gamma,
+ gamma: gamma,
+ Gammad: Gammad,
+ gammad: gammad,
+ gap: gap,
+ Gbreve: Gbreve,
+ gbreve: gbreve,
+ Gcedil: Gcedil,
+ Gcirc: Gcirc,
+ gcirc: gcirc,
+ Gcy: Gcy,
+ gcy: gcy,
+ Gdot: Gdot,
+ gdot: gdot,
+ ge: ge,
+ gE: gE,
+ gEl: gEl,
+ gel: gel,
+ geq: geq,
+ geqq: geqq,
+ geqslant: geqslant,
+ gescc: gescc,
+ ges: ges,
+ gesdot: gesdot,
+ gesdoto: gesdoto,
+ gesdotol: gesdotol,
+ gesl: gesl,
+ gesles: gesles,
+ Gfr: Gfr,
+ gfr: gfr,
+ gg: gg,
+ Gg: Gg,
+ ggg: ggg,
+ gimel: gimel,
+ GJcy: GJcy,
+ gjcy: gjcy,
+ gla: gla,
+ gl: gl,
+ glE: glE,
+ glj: glj,
+ gnap: gnap,
+ gnapprox: gnapprox,
+ gne: gne,
+ gnE: gnE,
+ gneq: gneq,
+ gneqq: gneqq,
+ gnsim: gnsim,
+ Gopf: Gopf,
+ gopf: gopf,
+ grave: grave,
+ GreaterEqual: GreaterEqual,
+ GreaterEqualLess: GreaterEqualLess,
+ GreaterFullEqual: GreaterFullEqual,
+ GreaterGreater: GreaterGreater,
+ GreaterLess: GreaterLess,
+ GreaterSlantEqual: GreaterSlantEqual,
+ GreaterTilde: GreaterTilde,
+ Gscr: Gscr,
+ gscr: gscr,
+ gsim: gsim,
+ gsime: gsime,
+ gsiml: gsiml,
+ gtcc: gtcc,
+ gtcir: gtcir,
+ gt: gt,
+ GT: GT,
+ Gt: Gt,
+ gtdot: gtdot,
+ gtlPar: gtlPar,
+ gtquest: gtquest,
+ gtrapprox: gtrapprox,
+ gtrarr: gtrarr,
+ gtrdot: gtrdot,
+ gtreqless: gtreqless,
+ gtreqqless: gtreqqless,
+ gtrless: gtrless,
+ gtrsim: gtrsim,
+ gvertneqq: gvertneqq,
+ gvnE: gvnE,
+ Hacek: Hacek,
+ hairsp: hairsp,
+ half: half,
+ hamilt: hamilt,
+ HARDcy: HARDcy,
+ hardcy: hardcy,
+ harrcir: harrcir,
+ harr: harr,
+ hArr: hArr,
+ harrw: harrw,
+ Hat: Hat,
+ hbar: hbar,
+ Hcirc: Hcirc,
+ hcirc: hcirc,
+ hearts: hearts,
+ heartsuit: heartsuit,
+ hellip: hellip,
+ hercon: hercon,
+ hfr: hfr,
+ Hfr: Hfr,
+ HilbertSpace: HilbertSpace,
+ hksearow: hksearow,
+ hkswarow: hkswarow,
+ hoarr: hoarr,
+ homtht: homtht,
+ hookleftarrow: hookleftarrow,
+ hookrightarrow: hookrightarrow,
+ hopf: hopf,
+ Hopf: Hopf,
+ horbar: horbar,
+ HorizontalLine: HorizontalLine,
+ hscr: hscr,
+ Hscr: Hscr,
+ hslash: hslash,
+ Hstrok: Hstrok,
+ hstrok: hstrok,
+ HumpDownHump: HumpDownHump,
+ HumpEqual: HumpEqual,
+ hybull: hybull,
+ hyphen: hyphen,
+ Iacute: Iacute,
+ iacute: iacute,
+ ic: ic,
+ Icirc: Icirc,
+ icirc: icirc,
+ Icy: Icy,
+ icy: icy,
+ Idot: Idot,
+ IEcy: IEcy,
+ iecy: iecy,
+ iexcl: iexcl,
+ iff: iff,
+ ifr: ifr,
+ Ifr: Ifr,
+ Igrave: Igrave,
+ igrave: igrave,
+ ii: ii,
+ iiiint: iiiint,
+ iiint: iiint,
+ iinfin: iinfin,
+ iiota: iiota,
+ IJlig: IJlig,
+ ijlig: ijlig,
+ Imacr: Imacr,
+ imacr: imacr,
+ image: image,
+ ImaginaryI: ImaginaryI,
+ imagline: imagline,
+ imagpart: imagpart,
+ imath: imath,
+ Im: Im,
+ imof: imof,
+ imped: imped,
+ Implies: Implies,
+ incare: incare,
+ "in": "โ",
+ infin: infin,
+ infintie: infintie,
+ inodot: inodot,
+ intcal: intcal,
+ int: int,
+ Int: Int,
+ integers: integers,
+ Integral: Integral,
+ intercal: intercal,
+ Intersection: Intersection,
+ intlarhk: intlarhk,
+ intprod: intprod,
+ InvisibleComma: InvisibleComma,
+ InvisibleTimes: InvisibleTimes,
+ IOcy: IOcy,
+ iocy: iocy,
+ Iogon: Iogon,
+ iogon: iogon,
+ Iopf: Iopf,
+ iopf: iopf,
+ Iota: Iota,
+ iota: iota,
+ iprod: iprod,
+ iquest: iquest,
+ iscr: iscr,
+ Iscr: Iscr,
+ isin: isin,
+ isindot: isindot,
+ isinE: isinE,
+ isins: isins,
+ isinsv: isinsv,
+ isinv: isinv,
+ it: it,
+ Itilde: Itilde,
+ itilde: itilde,
+ Iukcy: Iukcy,
+ iukcy: iukcy,
+ Iuml: Iuml,
+ iuml: iuml,
+ Jcirc: Jcirc,
+ jcirc: jcirc,
+ Jcy: Jcy,
+ jcy: jcy,
+ Jfr: Jfr,
+ jfr: jfr,
+ jmath: jmath,
+ Jopf: Jopf,
+ jopf: jopf,
+ Jscr: Jscr,
+ jscr: jscr,
+ Jsercy: Jsercy,
+ jsercy: jsercy,
+ Jukcy: Jukcy,
+ jukcy: jukcy,
+ Kappa: Kappa,
+ kappa: kappa,
+ kappav: kappav,
+ Kcedil: Kcedil,
+ kcedil: kcedil,
+ Kcy: Kcy,
+ kcy: kcy,
+ Kfr: Kfr,
+ kfr: kfr,
+ kgreen: kgreen,
+ KHcy: KHcy,
+ khcy: khcy,
+ KJcy: KJcy,
+ kjcy: kjcy,
+ Kopf: Kopf,
+ kopf: kopf,
+ Kscr: Kscr,
+ kscr: kscr,
+ lAarr: lAarr,
+ Lacute: Lacute,
+ lacute: lacute,
+ laemptyv: laemptyv,
+ lagran: lagran,
+ Lambda: Lambda,
+ lambda: lambda,
+ lang: lang,
+ Lang: Lang,
+ langd: langd,
+ langle: langle,
+ lap: lap,
+ Laplacetrf: Laplacetrf,
+ laquo: laquo,
+ larrb: larrb,
+ larrbfs: larrbfs,
+ larr: larr,
+ Larr: Larr,
+ lArr: lArr,
+ larrfs: larrfs,
+ larrhk: larrhk,
+ larrlp: larrlp,
+ larrpl: larrpl,
+ larrsim: larrsim,
+ larrtl: larrtl,
+ latail: latail,
+ lAtail: lAtail,
+ lat: lat,
+ late: late,
+ lates: lates,
+ lbarr: lbarr,
+ lBarr: lBarr,
+ lbbrk: lbbrk,
+ lbrace: lbrace,
+ lbrack: lbrack,
+ lbrke: lbrke,
+ lbrksld: lbrksld,
+ lbrkslu: lbrkslu,
+ Lcaron: Lcaron,
+ lcaron: lcaron,
+ Lcedil: Lcedil,
+ lcedil: lcedil,
+ lceil: lceil,
+ lcub: lcub,
+ Lcy: Lcy,
+ lcy: lcy,
+ ldca: ldca,
+ ldquo: ldquo,
+ ldquor: ldquor,
+ ldrdhar: ldrdhar,
+ ldrushar: ldrushar,
+ ldsh: ldsh,
+ le: le,
+ lE: lE,
+ LeftAngleBracket: LeftAngleBracket,
+ LeftArrowBar: LeftArrowBar,
+ leftarrow: leftarrow,
+ LeftArrow: LeftArrow,
+ Leftarrow: Leftarrow,
+ LeftArrowRightArrow: LeftArrowRightArrow,
+ leftarrowtail: leftarrowtail,
+ LeftCeiling: LeftCeiling,
+ LeftDoubleBracket: LeftDoubleBracket,
+ LeftDownTeeVector: LeftDownTeeVector,
+ LeftDownVectorBar: LeftDownVectorBar,
+ LeftDownVector: LeftDownVector,
+ LeftFloor: LeftFloor,
+ leftharpoondown: leftharpoondown,
+ leftharpoonup: leftharpoonup,
+ leftleftarrows: leftleftarrows,
+ leftrightarrow: leftrightarrow,
+ LeftRightArrow: LeftRightArrow,
+ Leftrightarrow: Leftrightarrow,
+ leftrightarrows: leftrightarrows,
+ leftrightharpoons: leftrightharpoons,
+ leftrightsquigarrow: leftrightsquigarrow,
+ LeftRightVector: LeftRightVector,
+ LeftTeeArrow: LeftTeeArrow,
+ LeftTee: LeftTee,
+ LeftTeeVector: LeftTeeVector,
+ leftthreetimes: leftthreetimes,
+ LeftTriangleBar: LeftTriangleBar,
+ LeftTriangle: LeftTriangle,
+ LeftTriangleEqual: LeftTriangleEqual,
+ LeftUpDownVector: LeftUpDownVector,
+ LeftUpTeeVector: LeftUpTeeVector,
+ LeftUpVectorBar: LeftUpVectorBar,
+ LeftUpVector: LeftUpVector,
+ LeftVectorBar: LeftVectorBar,
+ LeftVector: LeftVector,
+ lEg: lEg,
+ leg: leg,
+ leq: leq,
+ leqq: leqq,
+ leqslant: leqslant,
+ lescc: lescc,
+ les: les,
+ lesdot: lesdot,
+ lesdoto: lesdoto,
+ lesdotor: lesdotor,
+ lesg: lesg,
+ lesges: lesges,
+ lessapprox: lessapprox,
+ lessdot: lessdot,
+ lesseqgtr: lesseqgtr,
+ lesseqqgtr: lesseqqgtr,
+ LessEqualGreater: LessEqualGreater,
+ LessFullEqual: LessFullEqual,
+ LessGreater: LessGreater,
+ lessgtr: lessgtr,
+ LessLess: LessLess,
+ lesssim: lesssim,
+ LessSlantEqual: LessSlantEqual,
+ LessTilde: LessTilde,
+ lfisht: lfisht,
+ lfloor: lfloor,
+ Lfr: Lfr,
+ lfr: lfr,
+ lg: lg,
+ lgE: lgE,
+ lHar: lHar,
+ lhard: lhard,
+ lharu: lharu,
+ lharul: lharul,
+ lhblk: lhblk,
+ LJcy: LJcy,
+ ljcy: ljcy,
+ llarr: llarr,
+ ll: ll,
+ Ll: Ll,
+ llcorner: llcorner,
+ Lleftarrow: Lleftarrow,
+ llhard: llhard,
+ lltri: lltri,
+ Lmidot: Lmidot,
+ lmidot: lmidot,
+ lmoustache: lmoustache,
+ lmoust: lmoust,
+ lnap: lnap,
+ lnapprox: lnapprox,
+ lne: lne,
+ lnE: lnE,
+ lneq: lneq,
+ lneqq: lneqq,
+ lnsim: lnsim,
+ loang: loang,
+ loarr: loarr,
+ lobrk: lobrk,
+ longleftarrow: longleftarrow,
+ LongLeftArrow: LongLeftArrow,
+ Longleftarrow: Longleftarrow,
+ longleftrightarrow: longleftrightarrow,
+ LongLeftRightArrow: LongLeftRightArrow,
+ Longleftrightarrow: Longleftrightarrow,
+ longmapsto: longmapsto,
+ longrightarrow: longrightarrow,
+ LongRightArrow: LongRightArrow,
+ Longrightarrow: Longrightarrow,
+ looparrowleft: looparrowleft,
+ looparrowright: looparrowright,
+ lopar: lopar,
+ Lopf: Lopf,
+ lopf: lopf,
+ loplus: loplus,
+ lotimes: lotimes,
+ lowast: lowast,
+ lowbar: lowbar,
+ LowerLeftArrow: LowerLeftArrow,
+ LowerRightArrow: LowerRightArrow,
+ loz: loz,
+ lozenge: lozenge,
+ lozf: lozf,
+ lpar: lpar,
+ lparlt: lparlt,
+ lrarr: lrarr,
+ lrcorner: lrcorner,
+ lrhar: lrhar,
+ lrhard: lrhard,
+ lrm: lrm,
+ lrtri: lrtri,
+ lsaquo: lsaquo,
+ lscr: lscr,
+ Lscr: Lscr,
+ lsh: lsh,
+ Lsh: Lsh,
+ lsim: lsim,
+ lsime: lsime,
+ lsimg: lsimg,
+ lsqb: lsqb,
+ lsquo: lsquo,
+ lsquor: lsquor,
+ Lstrok: Lstrok,
+ lstrok: lstrok,
+ ltcc: ltcc,
+ ltcir: ltcir,
+ lt: lt,
+ LT: LT,
+ Lt: Lt,
+ ltdot: ltdot,
+ lthree: lthree,
+ ltimes: ltimes,
+ ltlarr: ltlarr,
+ ltquest: ltquest,
+ ltri: ltri,
+ ltrie: ltrie,
+ ltrif: ltrif,
+ ltrPar: ltrPar,
+ lurdshar: lurdshar,
+ luruhar: luruhar,
+ lvertneqq: lvertneqq,
+ lvnE: lvnE,
+ macr: macr,
+ male: male,
+ malt: malt,
+ maltese: maltese,
+ "Map": "โค
",
+ map: map,
+ mapsto: mapsto,
+ mapstodown: mapstodown,
+ mapstoleft: mapstoleft,
+ mapstoup: mapstoup,
+ marker: marker,
+ mcomma: mcomma,
+ Mcy: Mcy,
+ mcy: mcy,
+ mdash: mdash,
+ mDDot: mDDot,
+ measuredangle: measuredangle,
+ MediumSpace: MediumSpace,
+ Mellintrf: Mellintrf,
+ Mfr: Mfr,
+ mfr: mfr,
+ mho: mho,
+ micro: micro,
+ midast: midast,
+ midcir: midcir,
+ mid: mid,
+ middot: middot,
+ minusb: minusb,
+ minus: minus,
+ minusd: minusd,
+ minusdu: minusdu,
+ MinusPlus: MinusPlus,
+ mlcp: mlcp,
+ mldr: mldr,
+ mnplus: mnplus,
+ models: models,
+ Mopf: Mopf,
+ mopf: mopf,
+ mp: mp,
+ mscr: mscr,
+ Mscr: Mscr,
+ mstpos: mstpos,
+ Mu: Mu,
+ mu: mu,
+ multimap: multimap,
+ mumap: mumap,
+ nabla: nabla,
+ Nacute: Nacute,
+ nacute: nacute,
+ nang: nang,
+ nap: nap,
+ napE: napE,
+ napid: napid,
+ napos: napos,
+ napprox: napprox,
+ natural: natural,
+ naturals: naturals,
+ natur: natur,
+ nbsp: nbsp,
+ nbump: nbump,
+ nbumpe: nbumpe,
+ ncap: ncap,
+ Ncaron: Ncaron,
+ ncaron: ncaron,
+ Ncedil: Ncedil,
+ ncedil: ncedil,
+ ncong: ncong,
+ ncongdot: ncongdot,
+ ncup: ncup,
+ Ncy: Ncy,
+ ncy: ncy,
+ ndash: ndash,
+ nearhk: nearhk,
+ nearr: nearr,
+ neArr: neArr,
+ nearrow: nearrow,
+ ne: ne,
+ nedot: nedot,
+ NegativeMediumSpace: NegativeMediumSpace,
+ NegativeThickSpace: NegativeThickSpace,
+ NegativeThinSpace: NegativeThinSpace,
+ NegativeVeryThinSpace: NegativeVeryThinSpace,
+ nequiv: nequiv,
+ nesear: nesear,
+ nesim: nesim,
+ NestedGreaterGreater: NestedGreaterGreater,
+ NestedLessLess: NestedLessLess,
+ NewLine: NewLine,
+ nexist: nexist,
+ nexists: nexists,
+ Nfr: Nfr,
+ nfr: nfr,
+ ngE: ngE,
+ nge: nge,
+ ngeq: ngeq,
+ ngeqq: ngeqq,
+ ngeqslant: ngeqslant,
+ nges: nges,
+ nGg: nGg,
+ ngsim: ngsim,
+ nGt: nGt,
+ ngt: ngt,
+ ngtr: ngtr,
+ nGtv: nGtv,
+ nharr: nharr,
+ nhArr: nhArr,
+ nhpar: nhpar,
+ ni: ni,
+ nis: nis,
+ nisd: nisd,
+ niv: niv,
+ NJcy: NJcy,
+ njcy: njcy,
+ nlarr: nlarr,
+ nlArr: nlArr,
+ nldr: nldr,
+ nlE: nlE,
+ nle: nle,
+ nleftarrow: nleftarrow,
+ nLeftarrow: nLeftarrow,
+ nleftrightarrow: nleftrightarrow,
+ nLeftrightarrow: nLeftrightarrow,
+ nleq: nleq,
+ nleqq: nleqq,
+ nleqslant: nleqslant,
+ nles: nles,
+ nless: nless,
+ nLl: nLl,
+ nlsim: nlsim,
+ nLt: nLt,
+ nlt: nlt,
+ nltri: nltri,
+ nltrie: nltrie,
+ nLtv: nLtv,
+ nmid: nmid,
+ NoBreak: NoBreak,
+ NonBreakingSpace: NonBreakingSpace,
+ nopf: nopf,
+ Nopf: Nopf,
+ Not: Not,
+ not: not,
+ NotCongruent: NotCongruent,
+ NotCupCap: NotCupCap,
+ NotDoubleVerticalBar: NotDoubleVerticalBar,
+ NotElement: NotElement,
+ NotEqual: NotEqual,
+ NotEqualTilde: NotEqualTilde,
+ NotExists: NotExists,
+ NotGreater: NotGreater,
+ NotGreaterEqual: NotGreaterEqual,
+ NotGreaterFullEqual: NotGreaterFullEqual,
+ NotGreaterGreater: NotGreaterGreater,
+ NotGreaterLess: NotGreaterLess,
+ NotGreaterSlantEqual: NotGreaterSlantEqual,
+ NotGreaterTilde: NotGreaterTilde,
+ NotHumpDownHump: NotHumpDownHump,
+ NotHumpEqual: NotHumpEqual,
+ notin: notin,
+ notindot: notindot,
+ notinE: notinE,
+ notinva: notinva,
+ notinvb: notinvb,
+ notinvc: notinvc,
+ NotLeftTriangleBar: NotLeftTriangleBar,
+ NotLeftTriangle: NotLeftTriangle,
+ NotLeftTriangleEqual: NotLeftTriangleEqual,
+ NotLess: NotLess,
+ NotLessEqual: NotLessEqual,
+ NotLessGreater: NotLessGreater,
+ NotLessLess: NotLessLess,
+ NotLessSlantEqual: NotLessSlantEqual,
+ NotLessTilde: NotLessTilde,
+ NotNestedGreaterGreater: NotNestedGreaterGreater,
+ NotNestedLessLess: NotNestedLessLess,
+ notni: notni,
+ notniva: notniva,
+ notnivb: notnivb,
+ notnivc: notnivc,
+ NotPrecedes: NotPrecedes,
+ NotPrecedesEqual: NotPrecedesEqual,
+ NotPrecedesSlantEqual: NotPrecedesSlantEqual,
+ NotReverseElement: NotReverseElement,
+ NotRightTriangleBar: NotRightTriangleBar,
+ NotRightTriangle: NotRightTriangle,
+ NotRightTriangleEqual: NotRightTriangleEqual,
+ NotSquareSubset: NotSquareSubset,
+ NotSquareSubsetEqual: NotSquareSubsetEqual,
+ NotSquareSuperset: NotSquareSuperset,
+ NotSquareSupersetEqual: NotSquareSupersetEqual,
+ NotSubset: NotSubset,
+ NotSubsetEqual: NotSubsetEqual,
+ NotSucceeds: NotSucceeds,
+ NotSucceedsEqual: NotSucceedsEqual,
+ NotSucceedsSlantEqual: NotSucceedsSlantEqual,
+ NotSucceedsTilde: NotSucceedsTilde,
+ NotSuperset: NotSuperset,
+ NotSupersetEqual: NotSupersetEqual,
+ NotTilde: NotTilde,
+ NotTildeEqual: NotTildeEqual,
+ NotTildeFullEqual: NotTildeFullEqual,
+ NotTildeTilde: NotTildeTilde,
+ NotVerticalBar: NotVerticalBar,
+ nparallel: nparallel,
+ npar: npar,
+ nparsl: nparsl,
+ npart: npart,
+ npolint: npolint,
+ npr: npr,
+ nprcue: nprcue,
+ nprec: nprec,
+ npreceq: npreceq,
+ npre: npre,
+ nrarrc: nrarrc,
+ nrarr: nrarr,
+ nrArr: nrArr,
+ nrarrw: nrarrw,
+ nrightarrow: nrightarrow,
+ nRightarrow: nRightarrow,
+ nrtri: nrtri,
+ nrtrie: nrtrie,
+ nsc: nsc,
+ nsccue: nsccue,
+ nsce: nsce,
+ Nscr: Nscr,
+ nscr: nscr,
+ nshortmid: nshortmid,
+ nshortparallel: nshortparallel,
+ nsim: nsim,
+ nsime: nsime,
+ nsimeq: nsimeq,
+ nsmid: nsmid,
+ nspar: nspar,
+ nsqsube: nsqsube,
+ nsqsupe: nsqsupe,
+ nsub: nsub,
+ nsubE: nsubE,
+ nsube: nsube,
+ nsubset: nsubset,
+ nsubseteq: nsubseteq,
+ nsubseteqq: nsubseteqq,
+ nsucc: nsucc,
+ nsucceq: nsucceq,
+ nsup: nsup,
+ nsupE: nsupE,
+ nsupe: nsupe,
+ nsupset: nsupset,
+ nsupseteq: nsupseteq,
+ nsupseteqq: nsupseteqq,
+ ntgl: ntgl,
+ Ntilde: Ntilde,
+ ntilde: ntilde,
+ ntlg: ntlg,
+ ntriangleleft: ntriangleleft,
+ ntrianglelefteq: ntrianglelefteq,
+ ntriangleright: ntriangleright,
+ ntrianglerighteq: ntrianglerighteq,
+ Nu: Nu,
+ nu: nu,
+ num: num,
+ numero: numero,
+ numsp: numsp,
+ nvap: nvap,
+ nvdash: nvdash,
+ nvDash: nvDash,
+ nVdash: nVdash,
+ nVDash: nVDash,
+ nvge: nvge,
+ nvgt: nvgt,
+ nvHarr: nvHarr,
+ nvinfin: nvinfin,
+ nvlArr: nvlArr,
+ nvle: nvle,
+ nvlt: nvlt,
+ nvltrie: nvltrie,
+ nvrArr: nvrArr,
+ nvrtrie: nvrtrie,
+ nvsim: nvsim,
+ nwarhk: nwarhk,
+ nwarr: nwarr,
+ nwArr: nwArr,
+ nwarrow: nwarrow,
+ nwnear: nwnear,
+ Oacute: Oacute,
+ oacute: oacute,
+ oast: oast,
+ Ocirc: Ocirc,
+ ocirc: ocirc,
+ ocir: ocir,
+ Ocy: Ocy,
+ ocy: ocy,
+ odash: odash,
+ Odblac: Odblac,
+ odblac: odblac,
+ odiv: odiv,
+ odot: odot,
+ odsold: odsold,
+ OElig: OElig,
+ oelig: oelig,
+ ofcir: ofcir,
+ Ofr: Ofr,
+ ofr: ofr,
+ ogon: ogon,
+ Ograve: Ograve,
+ ograve: ograve,
+ ogt: ogt,
+ ohbar: ohbar,
+ ohm: ohm,
+ oint: oint,
+ olarr: olarr,
+ olcir: olcir,
+ olcross: olcross,
+ oline: oline,
+ olt: olt,
+ Omacr: Omacr,
+ omacr: omacr,
+ Omega: Omega,
+ omega: omega,
+ Omicron: Omicron,
+ omicron: omicron,
+ omid: omid,
+ ominus: ominus,
+ Oopf: Oopf,
+ oopf: oopf,
+ opar: opar,
+ OpenCurlyDoubleQuote: OpenCurlyDoubleQuote,
+ OpenCurlyQuote: OpenCurlyQuote,
+ operp: operp,
+ oplus: oplus,
+ orarr: orarr,
+ Or: Or,
+ or: or,
+ ord: ord,
+ order: order,
+ orderof: orderof,
+ ordf: ordf,
+ ordm: ordm,
+ origof: origof,
+ oror: oror,
+ orslope: orslope,
+ orv: orv,
+ oS: oS,
+ Oscr: Oscr,
+ oscr: oscr,
+ Oslash: Oslash,
+ oslash: oslash,
+ osol: osol,
+ Otilde: Otilde,
+ otilde: otilde,
+ otimesas: otimesas,
+ Otimes: Otimes,
+ otimes: otimes,
+ Ouml: Ouml,
+ ouml: ouml,
+ ovbar: ovbar,
+ OverBar: OverBar,
+ OverBrace: OverBrace,
+ OverBracket: OverBracket,
+ OverParenthesis: OverParenthesis,
+ para: para,
+ parallel: parallel,
+ par: par,
+ parsim: parsim,
+ parsl: parsl,
+ part: part,
+ PartialD: PartialD,
+ Pcy: Pcy,
+ pcy: pcy,
+ percnt: percnt,
+ period: period,
+ permil: permil,
+ perp: perp,
+ pertenk: pertenk,
+ Pfr: Pfr,
+ pfr: pfr,
+ Phi: Phi,
+ phi: phi,
+ phiv: phiv,
+ phmmat: phmmat,
+ phone: phone,
+ Pi: Pi,
+ pi: pi,
+ pitchfork: pitchfork,
+ piv: piv,
+ planck: planck,
+ planckh: planckh,
+ plankv: plankv,
+ plusacir: plusacir,
+ plusb: plusb,
+ pluscir: pluscir,
+ plus: plus,
+ plusdo: plusdo,
+ plusdu: plusdu,
+ pluse: pluse,
+ PlusMinus: PlusMinus,
+ plusmn: plusmn,
+ plussim: plussim,
+ plustwo: plustwo,
+ pm: pm,
+ Poincareplane: Poincareplane,
+ pointint: pointint,
+ popf: popf,
+ Popf: Popf,
+ pound: pound,
+ prap: prap,
+ Pr: Pr,
+ pr: pr,
+ prcue: prcue,
+ precapprox: precapprox,
+ prec: prec,
+ preccurlyeq: preccurlyeq,
+ Precedes: Precedes,
+ PrecedesEqual: PrecedesEqual,
+ PrecedesSlantEqual: PrecedesSlantEqual,
+ PrecedesTilde: PrecedesTilde,
+ preceq: preceq,
+ precnapprox: precnapprox,
+ precneqq: precneqq,
+ precnsim: precnsim,
+ pre: pre,
+ prE: prE,
+ precsim: precsim,
+ prime: prime,
+ Prime: Prime,
+ primes: primes,
+ prnap: prnap,
+ prnE: prnE,
+ prnsim: prnsim,
+ prod: prod,
+ Product: Product,
+ profalar: profalar,
+ profline: profline,
+ profsurf: profsurf,
+ prop: prop,
+ Proportional: Proportional,
+ Proportion: Proportion,
+ propto: propto,
+ prsim: prsim,
+ prurel: prurel,
+ Pscr: Pscr,
+ pscr: pscr,
+ Psi: Psi,
+ psi: psi,
+ puncsp: puncsp,
+ Qfr: Qfr,
+ qfr: qfr,
+ qint: qint,
+ qopf: qopf,
+ Qopf: Qopf,
+ qprime: qprime,
+ Qscr: Qscr,
+ qscr: qscr,
+ quaternions: quaternions,
+ quatint: quatint,
+ quest: quest,
+ questeq: questeq,
+ quot: quot,
+ QUOT: QUOT,
+ rAarr: rAarr,
+ race: race,
+ Racute: Racute,
+ racute: racute,
+ radic: radic,
+ raemptyv: raemptyv,
+ rang: rang,
+ Rang: Rang,
+ rangd: rangd,
+ range: range,
+ rangle: rangle,
+ raquo: raquo,
+ rarrap: rarrap,
+ rarrb: rarrb,
+ rarrbfs: rarrbfs,
+ rarrc: rarrc,
+ rarr: rarr,
+ Rarr: Rarr,
+ rArr: rArr,
+ rarrfs: rarrfs,
+ rarrhk: rarrhk,
+ rarrlp: rarrlp,
+ rarrpl: rarrpl,
+ rarrsim: rarrsim,
+ Rarrtl: Rarrtl,
+ rarrtl: rarrtl,
+ rarrw: rarrw,
+ ratail: ratail,
+ rAtail: rAtail,
+ ratio: ratio,
+ rationals: rationals,
+ rbarr: rbarr,
+ rBarr: rBarr,
+ RBarr: RBarr,
+ rbbrk: rbbrk,
+ rbrace: rbrace,
+ rbrack: rbrack,
+ rbrke: rbrke,
+ rbrksld: rbrksld,
+ rbrkslu: rbrkslu,
+ Rcaron: Rcaron,
+ rcaron: rcaron,
+ Rcedil: Rcedil,
+ rcedil: rcedil,
+ rceil: rceil,
+ rcub: rcub,
+ Rcy: Rcy,
+ rcy: rcy,
+ rdca: rdca,
+ rdldhar: rdldhar,
+ rdquo: rdquo,
+ rdquor: rdquor,
+ rdsh: rdsh,
+ real: real,
+ realine: realine,
+ realpart: realpart,
+ reals: reals,
+ Re: Re,
+ rect: rect,
+ reg: reg,
+ REG: REG,
+ ReverseElement: ReverseElement,
+ ReverseEquilibrium: ReverseEquilibrium,
+ ReverseUpEquilibrium: ReverseUpEquilibrium,
+ rfisht: rfisht,
+ rfloor: rfloor,
+ rfr: rfr,
+ Rfr: Rfr,
+ rHar: rHar,
+ rhard: rhard,
+ rharu: rharu,
+ rharul: rharul,
+ Rho: Rho,
+ rho: rho,
+ rhov: rhov,
+ RightAngleBracket: RightAngleBracket,
+ RightArrowBar: RightArrowBar,
+ rightarrow: rightarrow,
+ RightArrow: RightArrow,
+ Rightarrow: Rightarrow,
+ RightArrowLeftArrow: RightArrowLeftArrow,
+ rightarrowtail: rightarrowtail,
+ RightCeiling: RightCeiling,
+ RightDoubleBracket: RightDoubleBracket,
+ RightDownTeeVector: RightDownTeeVector,
+ RightDownVectorBar: RightDownVectorBar,
+ RightDownVector: RightDownVector,
+ RightFloor: RightFloor,
+ rightharpoondown: rightharpoondown,
+ rightharpoonup: rightharpoonup,
+ rightleftarrows: rightleftarrows,
+ rightleftharpoons: rightleftharpoons,
+ rightrightarrows: rightrightarrows,
+ rightsquigarrow: rightsquigarrow,
+ RightTeeArrow: RightTeeArrow,
+ RightTee: RightTee,
+ RightTeeVector: RightTeeVector,
+ rightthreetimes: rightthreetimes,
+ RightTriangleBar: RightTriangleBar,
+ RightTriangle: RightTriangle,
+ RightTriangleEqual: RightTriangleEqual,
+ RightUpDownVector: RightUpDownVector,
+ RightUpTeeVector: RightUpTeeVector,
+ RightUpVectorBar: RightUpVectorBar,
+ RightUpVector: RightUpVector,
+ RightVectorBar: RightVectorBar,
+ RightVector: RightVector,
+ ring: ring,
+ risingdotseq: risingdotseq,
+ rlarr: rlarr,
+ rlhar: rlhar,
+ rlm: rlm,
+ rmoustache: rmoustache,
+ rmoust: rmoust,
+ rnmid: rnmid,
+ roang: roang,
+ roarr: roarr,
+ robrk: robrk,
+ ropar: ropar,
+ ropf: ropf,
+ Ropf: Ropf,
+ roplus: roplus,
+ rotimes: rotimes,
+ RoundImplies: RoundImplies,
+ rpar: rpar,
+ rpargt: rpargt,
+ rppolint: rppolint,
+ rrarr: rrarr,
+ Rrightarrow: Rrightarrow,
+ rsaquo: rsaquo,
+ rscr: rscr,
+ Rscr: Rscr,
+ rsh: rsh,
+ Rsh: Rsh,
+ rsqb: rsqb,
+ rsquo: rsquo,
+ rsquor: rsquor,
+ rthree: rthree,
+ rtimes: rtimes,
+ rtri: rtri,
+ rtrie: rtrie,
+ rtrif: rtrif,
+ rtriltri: rtriltri,
+ RuleDelayed: RuleDelayed,
+ ruluhar: ruluhar,
+ rx: rx,
+ Sacute: Sacute,
+ sacute: sacute,
+ sbquo: sbquo,
+ scap: scap,
+ Scaron: Scaron,
+ scaron: scaron,
+ Sc: Sc,
+ sc: sc,
+ sccue: sccue,
+ sce: sce,
+ scE: scE,
+ Scedil: Scedil,
+ scedil: scedil,
+ Scirc: Scirc,
+ scirc: scirc,
+ scnap: scnap,
+ scnE: scnE,
+ scnsim: scnsim,
+ scpolint: scpolint,
+ scsim: scsim,
+ Scy: Scy,
+ scy: scy,
+ sdotb: sdotb,
+ sdot: sdot,
+ sdote: sdote,
+ searhk: searhk,
+ searr: searr,
+ seArr: seArr,
+ searrow: searrow,
+ sect: sect,
+ semi: semi,
+ seswar: seswar,
+ setminus: setminus,
+ setmn: setmn,
+ sext: sext,
+ Sfr: Sfr,
+ sfr: sfr,
+ sfrown: sfrown,
+ sharp: sharp,
+ SHCHcy: SHCHcy,
+ shchcy: shchcy,
+ SHcy: SHcy,
+ shcy: shcy,
+ ShortDownArrow: ShortDownArrow,
+ ShortLeftArrow: ShortLeftArrow,
+ shortmid: shortmid,
+ shortparallel: shortparallel,
+ ShortRightArrow: ShortRightArrow,
+ ShortUpArrow: ShortUpArrow,
+ shy: shy,
+ Sigma: Sigma,
+ sigma: sigma,
+ sigmaf: sigmaf,
+ sigmav: sigmav,
+ sim: sim,
+ simdot: simdot,
+ sime: sime,
+ simeq: simeq,
+ simg: simg,
+ simgE: simgE,
+ siml: siml,
+ simlE: simlE,
+ simne: simne,
+ simplus: simplus,
+ simrarr: simrarr,
+ slarr: slarr,
+ SmallCircle: SmallCircle,
+ smallsetminus: smallsetminus,
+ smashp: smashp,
+ smeparsl: smeparsl,
+ smid: smid,
+ smile: smile,
+ smt: smt,
+ smte: smte,
+ smtes: smtes,
+ SOFTcy: SOFTcy,
+ softcy: softcy,
+ solbar: solbar,
+ solb: solb,
+ sol: sol,
+ Sopf: Sopf,
+ sopf: sopf,
+ spades: spades,
+ spadesuit: spadesuit,
+ spar: spar,
+ sqcap: sqcap,
+ sqcaps: sqcaps,
+ sqcup: sqcup,
+ sqcups: sqcups,
+ Sqrt: Sqrt,
+ sqsub: sqsub,
+ sqsube: sqsube,
+ sqsubset: sqsubset,
+ sqsubseteq: sqsubseteq,
+ sqsup: sqsup,
+ sqsupe: sqsupe,
+ sqsupset: sqsupset,
+ sqsupseteq: sqsupseteq,
+ square: square,
+ Square: Square,
+ SquareIntersection: SquareIntersection,
+ SquareSubset: SquareSubset,
+ SquareSubsetEqual: SquareSubsetEqual,
+ SquareSuperset: SquareSuperset,
+ SquareSupersetEqual: SquareSupersetEqual,
+ SquareUnion: SquareUnion,
+ squarf: squarf,
+ squ: squ,
+ squf: squf,
+ srarr: srarr,
+ Sscr: Sscr,
+ sscr: sscr,
+ ssetmn: ssetmn,
+ ssmile: ssmile,
+ sstarf: sstarf,
+ Star: Star,
+ star: star,
+ starf: starf,
+ straightepsilon: straightepsilon,
+ straightphi: straightphi,
+ strns: strns,
+ sub: sub,
+ Sub: Sub,
+ subdot: subdot,
+ subE: subE,
+ sube: sube,
+ subedot: subedot,
+ submult: submult,
+ subnE: subnE,
+ subne: subne,
+ subplus: subplus,
+ subrarr: subrarr,
+ subset: subset,
+ Subset: Subset,
+ subseteq: subseteq,
+ subseteqq: subseteqq,
+ SubsetEqual: SubsetEqual,
+ subsetneq: subsetneq,
+ subsetneqq: subsetneqq,
+ subsim: subsim,
+ subsub: subsub,
+ subsup: subsup,
+ succapprox: succapprox,
+ succ: succ,
+ succcurlyeq: succcurlyeq,
+ Succeeds: Succeeds,
+ SucceedsEqual: SucceedsEqual,
+ SucceedsSlantEqual: SucceedsSlantEqual,
+ SucceedsTilde: SucceedsTilde,
+ succeq: succeq,
+ succnapprox: succnapprox,
+ succneqq: succneqq,
+ succnsim: succnsim,
+ succsim: succsim,
+ SuchThat: SuchThat,
+ sum: sum,
+ Sum: Sum,
+ sung: sung,
+ sup1: sup1,
+ sup2: sup2,
+ sup3: sup3,
+ sup: sup,
+ Sup: Sup,
+ supdot: supdot,
+ supdsub: supdsub,
+ supE: supE,
+ supe: supe,
+ supedot: supedot,
+ Superset: Superset,
+ SupersetEqual: SupersetEqual,
+ suphsol: suphsol,
+ suphsub: suphsub,
+ suplarr: suplarr,
+ supmult: supmult,
+ supnE: supnE,
+ supne: supne,
+ supplus: supplus,
+ supset: supset,
+ Supset: Supset,
+ supseteq: supseteq,
+ supseteqq: supseteqq,
+ supsetneq: supsetneq,
+ supsetneqq: supsetneqq,
+ supsim: supsim,
+ supsub: supsub,
+ supsup: supsup,
+ swarhk: swarhk,
+ swarr: swarr,
+ swArr: swArr,
+ swarrow: swarrow,
+ swnwar: swnwar,
+ szlig: szlig,
+ Tab: Tab,
+ target: target,
+ Tau: Tau,
+ tau: tau,
+ tbrk: tbrk,
+ Tcaron: Tcaron,
+ tcaron: tcaron,
+ Tcedil: Tcedil,
+ tcedil: tcedil,
+ Tcy: Tcy,
+ tcy: tcy,
+ tdot: tdot,
+ telrec: telrec,
+ Tfr: Tfr,
+ tfr: tfr,
+ there4: there4,
+ therefore: therefore,
+ Therefore: Therefore,
+ Theta: Theta,
+ theta: theta,
+ thetasym: thetasym,
+ thetav: thetav,
+ thickapprox: thickapprox,
+ thicksim: thicksim,
+ ThickSpace: ThickSpace,
+ ThinSpace: ThinSpace,
+ thinsp: thinsp,
+ thkap: thkap,
+ thksim: thksim,
+ THORN: THORN,
+ thorn: thorn,
+ tilde: tilde,
+ Tilde: Tilde,
+ TildeEqual: TildeEqual,
+ TildeFullEqual: TildeFullEqual,
+ TildeTilde: TildeTilde,
+ timesbar: timesbar,
+ timesb: timesb,
+ times: times,
+ timesd: timesd,
+ tint: tint,
+ toea: toea,
+ topbot: topbot,
+ topcir: topcir,
+ top: top,
+ Topf: Topf,
+ topf: topf,
+ topfork: topfork,
+ tosa: tosa,
+ tprime: tprime,
+ trade: trade,
+ TRADE: TRADE,
+ triangle: triangle,
+ triangledown: triangledown,
+ triangleleft: triangleleft,
+ trianglelefteq: trianglelefteq,
+ triangleq: triangleq,
+ triangleright: triangleright,
+ trianglerighteq: trianglerighteq,
+ tridot: tridot,
+ trie: trie,
+ triminus: triminus,
+ TripleDot: TripleDot,
+ triplus: triplus,
+ trisb: trisb,
+ tritime: tritime,
+ trpezium: trpezium,
+ Tscr: Tscr,
+ tscr: tscr,
+ TScy: TScy,
+ tscy: tscy,
+ TSHcy: TSHcy,
+ tshcy: tshcy,
+ Tstrok: Tstrok,
+ tstrok: tstrok,
+ twixt: twixt,
+ twoheadleftarrow: twoheadleftarrow,
+ twoheadrightarrow: twoheadrightarrow,
+ Uacute: Uacute,
+ uacute: uacute,
+ uarr: uarr,
+ Uarr: Uarr,
+ uArr: uArr,
+ Uarrocir: Uarrocir,
+ Ubrcy: Ubrcy,
+ ubrcy: ubrcy,
+ Ubreve: Ubreve,
+ ubreve: ubreve,
+ Ucirc: Ucirc,
+ ucirc: ucirc,
+ Ucy: Ucy,
+ ucy: ucy,
+ udarr: udarr,
+ Udblac: Udblac,
+ udblac: udblac,
+ udhar: udhar,
+ ufisht: ufisht,
+ Ufr: Ufr,
+ ufr: ufr,
+ Ugrave: Ugrave,
+ ugrave: ugrave,
+ uHar: uHar,
+ uharl: uharl,
+ uharr: uharr,
+ uhblk: uhblk,
+ ulcorn: ulcorn,
+ ulcorner: ulcorner,
+ ulcrop: ulcrop,
+ ultri: ultri,
+ Umacr: Umacr,
+ umacr: umacr,
+ uml: uml,
+ UnderBar: UnderBar,
+ UnderBrace: UnderBrace,
+ UnderBracket: UnderBracket,
+ UnderParenthesis: UnderParenthesis,
+ Union: Union,
+ UnionPlus: UnionPlus,
+ Uogon: Uogon,
+ uogon: uogon,
+ Uopf: Uopf,
+ uopf: uopf,
+ UpArrowBar: UpArrowBar,
+ uparrow: uparrow,
+ UpArrow: UpArrow,
+ Uparrow: Uparrow,
+ UpArrowDownArrow: UpArrowDownArrow,
+ updownarrow: updownarrow,
+ UpDownArrow: UpDownArrow,
+ Updownarrow: Updownarrow,
+ UpEquilibrium: UpEquilibrium,
+ upharpoonleft: upharpoonleft,
+ upharpoonright: upharpoonright,
+ uplus: uplus,
+ UpperLeftArrow: UpperLeftArrow,
+ UpperRightArrow: UpperRightArrow,
+ upsi: upsi,
+ Upsi: Upsi,
+ upsih: upsih,
+ Upsilon: Upsilon,
+ upsilon: upsilon,
+ UpTeeArrow: UpTeeArrow,
+ UpTee: UpTee,
+ upuparrows: upuparrows,
+ urcorn: urcorn,
+ urcorner: urcorner,
+ urcrop: urcrop,
+ Uring: Uring,
+ uring: uring,
+ urtri: urtri,
+ Uscr: Uscr,
+ uscr: uscr,
+ utdot: utdot,
+ Utilde: Utilde,
+ utilde: utilde,
+ utri: utri,
+ utrif: utrif,
+ uuarr: uuarr,
+ Uuml: Uuml,
+ uuml: uuml,
+ uwangle: uwangle,
+ vangrt: vangrt,
+ varepsilon: varepsilon,
+ varkappa: varkappa,
+ varnothing: varnothing,
+ varphi: varphi,
+ varpi: varpi,
+ varpropto: varpropto,
+ varr: varr,
+ vArr: vArr,
+ varrho: varrho,
+ varsigma: varsigma,
+ varsubsetneq: varsubsetneq,
+ varsubsetneqq: varsubsetneqq,
+ varsupsetneq: varsupsetneq,
+ varsupsetneqq: varsupsetneqq,
+ vartheta: vartheta,
+ vartriangleleft: vartriangleleft,
+ vartriangleright: vartriangleright,
+ vBar: vBar,
+ Vbar: Vbar,
+ vBarv: vBarv,
+ Vcy: Vcy,
+ vcy: vcy,
+ vdash: vdash,
+ vDash: vDash,
+ Vdash: Vdash,
+ VDash: VDash,
+ Vdashl: Vdashl,
+ veebar: veebar,
+ vee: vee,
+ Vee: Vee,
+ veeeq: veeeq,
+ vellip: vellip,
+ verbar: verbar,
+ Verbar: Verbar,
+ vert: vert,
+ Vert: Vert,
+ VerticalBar: VerticalBar,
+ VerticalLine: VerticalLine,
+ VerticalSeparator: VerticalSeparator,
+ VerticalTilde: VerticalTilde,
+ VeryThinSpace: VeryThinSpace,
+ Vfr: Vfr,
+ vfr: vfr,
+ vltri: vltri,
+ vnsub: vnsub,
+ vnsup: vnsup,
+ Vopf: Vopf,
+ vopf: vopf,
+ vprop: vprop,
+ vrtri: vrtri,
+ Vscr: Vscr,
+ vscr: vscr,
+ vsubnE: vsubnE,
+ vsubne: vsubne,
+ vsupnE: vsupnE,
+ vsupne: vsupne,
+ Vvdash: Vvdash,
+ vzigzag: vzigzag,
+ Wcirc: Wcirc,
+ wcirc: wcirc,
+ wedbar: wedbar,
+ wedge: wedge,
+ Wedge: Wedge,
+ wedgeq: wedgeq,
+ weierp: weierp,
+ Wfr: Wfr,
+ wfr: wfr,
+ Wopf: Wopf,
+ wopf: wopf,
+ wp: wp,
+ wr: wr,
+ wreath: wreath,
+ Wscr: Wscr,
+ wscr: wscr,
+ xcap: xcap,
+ xcirc: xcirc,
+ xcup: xcup,
+ xdtri: xdtri,
+ Xfr: Xfr,
+ xfr: xfr,
+ xharr: xharr,
+ xhArr: xhArr,
+ Xi: Xi,
+ xi: xi,
+ xlarr: xlarr,
+ xlArr: xlArr,
+ xmap: xmap,
+ xnis: xnis,
+ xodot: xodot,
+ Xopf: Xopf,
+ xopf: xopf,
+ xoplus: xoplus,
+ xotime: xotime,
+ xrarr: xrarr,
+ xrArr: xrArr,
+ Xscr: Xscr,
+ xscr: xscr,
+ xsqcup: xsqcup,
+ xuplus: xuplus,
+ xutri: xutri,
+ xvee: xvee,
+ xwedge: xwedge,
+ Yacute: Yacute,
+ yacute: yacute,
+ YAcy: YAcy,
+ yacy: yacy,
+ Ycirc: Ycirc,
+ ycirc: ycirc,
+ Ycy: Ycy,
+ ycy: ycy,
+ yen: yen,
+ Yfr: Yfr,
+ yfr: yfr,
+ YIcy: YIcy,
+ yicy: yicy,
+ Yopf: Yopf,
+ yopf: yopf,
+ Yscr: Yscr,
+ yscr: yscr,
+ YUcy: YUcy,
+ yucy: yucy,
+ yuml: yuml,
+ Yuml: Yuml,
+ Zacute: Zacute,
+ zacute: zacute,
+ Zcaron: Zcaron,
+ zcaron: zcaron,
+ Zcy: Zcy,
+ zcy: zcy,
+ Zdot: Zdot,
+ zdot: zdot,
+ zeetrf: zeetrf,
+ ZeroWidthSpace: ZeroWidthSpace,
+ Zeta: Zeta,
+ zeta: zeta,
+ zfr: zfr,
+ Zfr: Zfr,
+ ZHcy: ZHcy,
+ zhcy: zhcy,
+ zigrarr: zigrarr,
+ zopf: zopf,
+ Zopf: Zopf,
+ Zscr: Zscr,
+ zscr: zscr,
+ zwj: zwj,
+ zwnj: zwnj
+ };
+
+ var entities$1 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ Aacute: Aacute,
+ aacute: aacute,
+ Abreve: Abreve,
+ abreve: abreve,
+ ac: ac,
+ acd: acd,
+ acE: acE,
+ Acirc: Acirc,
+ acirc: acirc,
+ acute: acute,
+ Acy: Acy,
+ acy: acy,
+ AElig: AElig,
+ aelig: aelig,
+ af: af,
+ Afr: Afr,
+ afr: afr,
+ Agrave: Agrave,
+ agrave: agrave,
+ alefsym: alefsym,
+ aleph: aleph,
+ Alpha: Alpha,
+ alpha: alpha,
+ Amacr: Amacr,
+ amacr: amacr,
+ amalg: amalg,
+ amp: amp,
+ AMP: AMP,
+ andand: andand,
+ And: And,
+ and: and,
+ andd: andd,
+ andslope: andslope,
+ andv: andv,
+ ang: ang,
+ ange: ange,
+ angle: angle,
+ angmsdaa: angmsdaa,
+ angmsdab: angmsdab,
+ angmsdac: angmsdac,
+ angmsdad: angmsdad,
+ angmsdae: angmsdae,
+ angmsdaf: angmsdaf,
+ angmsdag: angmsdag,
+ angmsdah: angmsdah,
+ angmsd: angmsd,
+ angrt: angrt,
+ angrtvb: angrtvb,
+ angrtvbd: angrtvbd,
+ angsph: angsph,
+ angst: angst,
+ angzarr: angzarr,
+ Aogon: Aogon,
+ aogon: aogon,
+ Aopf: Aopf,
+ aopf: aopf,
+ apacir: apacir,
+ ap: ap,
+ apE: apE,
+ ape: ape,
+ apid: apid,
+ apos: apos,
+ ApplyFunction: ApplyFunction,
+ approx: approx,
+ approxeq: approxeq,
+ Aring: Aring,
+ aring: aring,
+ Ascr: Ascr,
+ ascr: ascr,
+ Assign: Assign,
+ ast: ast,
+ asymp: asymp,
+ asympeq: asympeq,
+ Atilde: Atilde,
+ atilde: atilde,
+ Auml: Auml,
+ auml: auml,
+ awconint: awconint,
+ awint: awint,
+ backcong: backcong,
+ backepsilon: backepsilon,
+ backprime: backprime,
+ backsim: backsim,
+ backsimeq: backsimeq,
+ Backslash: Backslash,
+ Barv: Barv,
+ barvee: barvee,
+ barwed: barwed,
+ Barwed: Barwed,
+ barwedge: barwedge,
+ bbrk: bbrk,
+ bbrktbrk: bbrktbrk,
+ bcong: bcong,
+ Bcy: Bcy,
+ bcy: bcy,
+ bdquo: bdquo,
+ becaus: becaus,
+ because: because,
+ Because: Because,
+ bemptyv: bemptyv,
+ bepsi: bepsi,
+ bernou: bernou,
+ Bernoullis: Bernoullis,
+ Beta: Beta,
+ beta: beta,
+ beth: beth,
+ between: between,
+ Bfr: Bfr,
+ bfr: bfr,
+ bigcap: bigcap,
+ bigcirc: bigcirc,
+ bigcup: bigcup,
+ bigodot: bigodot,
+ bigoplus: bigoplus,
+ bigotimes: bigotimes,
+ bigsqcup: bigsqcup,
+ bigstar: bigstar,
+ bigtriangledown: bigtriangledown,
+ bigtriangleup: bigtriangleup,
+ biguplus: biguplus,
+ bigvee: bigvee,
+ bigwedge: bigwedge,
+ bkarow: bkarow,
+ blacklozenge: blacklozenge,
+ blacksquare: blacksquare,
+ blacktriangle: blacktriangle,
+ blacktriangledown: blacktriangledown,
+ blacktriangleleft: blacktriangleleft,
+ blacktriangleright: blacktriangleright,
+ blank: blank,
+ blk12: blk12,
+ blk14: blk14,
+ blk34: blk34,
+ block: block,
+ bne: bne,
+ bnequiv: bnequiv,
+ bNot: bNot,
+ bnot: bnot,
+ Bopf: Bopf,
+ bopf: bopf,
+ bot: bot,
+ bottom: bottom,
+ bowtie: bowtie,
+ boxbox: boxbox,
+ boxdl: boxdl,
+ boxdL: boxdL,
+ boxDl: boxDl,
+ boxDL: boxDL,
+ boxdr: boxdr,
+ boxdR: boxdR,
+ boxDr: boxDr,
+ boxDR: boxDR,
+ boxh: boxh,
+ boxH: boxH,
+ boxhd: boxhd,
+ boxHd: boxHd,
+ boxhD: boxhD,
+ boxHD: boxHD,
+ boxhu: boxhu,
+ boxHu: boxHu,
+ boxhU: boxhU,
+ boxHU: boxHU,
+ boxminus: boxminus,
+ boxplus: boxplus,
+ boxtimes: boxtimes,
+ boxul: boxul,
+ boxuL: boxuL,
+ boxUl: boxUl,
+ boxUL: boxUL,
+ boxur: boxur,
+ boxuR: boxuR,
+ boxUr: boxUr,
+ boxUR: boxUR,
+ boxv: boxv,
+ boxV: boxV,
+ boxvh: boxvh,
+ boxvH: boxvH,
+ boxVh: boxVh,
+ boxVH: boxVH,
+ boxvl: boxvl,
+ boxvL: boxvL,
+ boxVl: boxVl,
+ boxVL: boxVL,
+ boxvr: boxvr,
+ boxvR: boxvR,
+ boxVr: boxVr,
+ boxVR: boxVR,
+ bprime: bprime,
+ breve: breve,
+ Breve: Breve,
+ brvbar: brvbar,
+ bscr: bscr,
+ Bscr: Bscr,
+ bsemi: bsemi,
+ bsim: bsim,
+ bsime: bsime,
+ bsolb: bsolb,
+ bsol: bsol,
+ bsolhsub: bsolhsub,
+ bull: bull,
+ bullet: bullet,
+ bump: bump,
+ bumpE: bumpE,
+ bumpe: bumpe,
+ Bumpeq: Bumpeq,
+ bumpeq: bumpeq,
+ Cacute: Cacute,
+ cacute: cacute,
+ capand: capand,
+ capbrcup: capbrcup,
+ capcap: capcap,
+ cap: cap,
+ Cap: Cap,
+ capcup: capcup,
+ capdot: capdot,
+ CapitalDifferentialD: CapitalDifferentialD,
+ caps: caps,
+ caret: caret,
+ caron: caron,
+ Cayleys: Cayleys,
+ ccaps: ccaps,
+ Ccaron: Ccaron,
+ ccaron: ccaron,
+ Ccedil: Ccedil,
+ ccedil: ccedil,
+ Ccirc: Ccirc,
+ ccirc: ccirc,
+ Cconint: Cconint,
+ ccups: ccups,
+ ccupssm: ccupssm,
+ Cdot: Cdot,
+ cdot: cdot,
+ cedil: cedil,
+ Cedilla: Cedilla,
+ cemptyv: cemptyv,
+ cent: cent,
+ centerdot: centerdot,
+ CenterDot: CenterDot,
+ cfr: cfr,
+ Cfr: Cfr,
+ CHcy: CHcy,
+ chcy: chcy,
+ check: check,
+ checkmark: checkmark,
+ Chi: Chi,
+ chi: chi,
+ circ: circ,
+ circeq: circeq,
+ circlearrowleft: circlearrowleft,
+ circlearrowright: circlearrowright,
+ circledast: circledast,
+ circledcirc: circledcirc,
+ circleddash: circleddash,
+ CircleDot: CircleDot,
+ circledR: circledR,
+ circledS: circledS,
+ CircleMinus: CircleMinus,
+ CirclePlus: CirclePlus,
+ CircleTimes: CircleTimes,
+ cir: cir,
+ cirE: cirE,
+ cire: cire,
+ cirfnint: cirfnint,
+ cirmid: cirmid,
+ cirscir: cirscir,
+ ClockwiseContourIntegral: ClockwiseContourIntegral,
+ CloseCurlyDoubleQuote: CloseCurlyDoubleQuote,
+ CloseCurlyQuote: CloseCurlyQuote,
+ clubs: clubs,
+ clubsuit: clubsuit,
+ colon: colon,
+ Colon: Colon,
+ Colone: Colone,
+ colone: colone,
+ coloneq: coloneq,
+ comma: comma,
+ commat: commat,
+ comp: comp,
+ compfn: compfn,
+ complement: complement,
+ complexes: complexes,
+ cong: cong,
+ congdot: congdot,
+ Congruent: Congruent,
+ conint: conint,
+ Conint: Conint,
+ ContourIntegral: ContourIntegral,
+ copf: copf,
+ Copf: Copf,
+ coprod: coprod,
+ Coproduct: Coproduct,
+ copy: copy,
+ COPY: COPY,
+ copysr: copysr,
+ CounterClockwiseContourIntegral: CounterClockwiseContourIntegral,
+ crarr: crarr,
+ cross: cross,
+ Cross: Cross,
+ Cscr: Cscr,
+ cscr: cscr,
+ csub: csub,
+ csube: csube,
+ csup: csup,
+ csupe: csupe,
+ ctdot: ctdot,
+ cudarrl: cudarrl,
+ cudarrr: cudarrr,
+ cuepr: cuepr,
+ cuesc: cuesc,
+ cularr: cularr,
+ cularrp: cularrp,
+ cupbrcap: cupbrcap,
+ cupcap: cupcap,
+ CupCap: CupCap,
+ cup: cup,
+ Cup: Cup,
+ cupcup: cupcup,
+ cupdot: cupdot,
+ cupor: cupor,
+ cups: cups,
+ curarr: curarr,
+ curarrm: curarrm,
+ curlyeqprec: curlyeqprec,
+ curlyeqsucc: curlyeqsucc,
+ curlyvee: curlyvee,
+ curlywedge: curlywedge,
+ curren: curren,
+ curvearrowleft: curvearrowleft,
+ curvearrowright: curvearrowright,
+ cuvee: cuvee,
+ cuwed: cuwed,
+ cwconint: cwconint,
+ cwint: cwint,
+ cylcty: cylcty,
+ dagger: dagger,
+ Dagger: Dagger,
+ daleth: daleth,
+ darr: darr,
+ Darr: Darr,
+ dArr: dArr,
+ dash: dash,
+ Dashv: Dashv,
+ dashv: dashv,
+ dbkarow: dbkarow,
+ dblac: dblac,
+ Dcaron: Dcaron,
+ dcaron: dcaron,
+ Dcy: Dcy,
+ dcy: dcy,
+ ddagger: ddagger,
+ ddarr: ddarr,
+ DD: DD,
+ dd: dd,
+ DDotrahd: DDotrahd,
+ ddotseq: ddotseq,
+ deg: deg,
+ Del: Del,
+ Delta: Delta,
+ delta: delta,
+ demptyv: demptyv,
+ dfisht: dfisht,
+ Dfr: Dfr,
+ dfr: dfr,
+ dHar: dHar,
+ dharl: dharl,
+ dharr: dharr,
+ DiacriticalAcute: DiacriticalAcute,
+ DiacriticalDot: DiacriticalDot,
+ DiacriticalDoubleAcute: DiacriticalDoubleAcute,
+ DiacriticalGrave: DiacriticalGrave,
+ DiacriticalTilde: DiacriticalTilde,
+ diam: diam,
+ diamond: diamond,
+ Diamond: Diamond,
+ diamondsuit: diamondsuit,
+ diams: diams,
+ die: die,
+ DifferentialD: DifferentialD,
+ digamma: digamma,
+ disin: disin,
+ div: div,
+ divide: divide,
+ divideontimes: divideontimes,
+ divonx: divonx,
+ DJcy: DJcy,
+ djcy: djcy,
+ dlcorn: dlcorn,
+ dlcrop: dlcrop,
+ dollar: dollar,
+ Dopf: Dopf,
+ dopf: dopf,
+ Dot: Dot,
+ dot: dot,
+ DotDot: DotDot,
+ doteq: doteq,
+ doteqdot: doteqdot,
+ DotEqual: DotEqual,
+ dotminus: dotminus,
+ dotplus: dotplus,
+ dotsquare: dotsquare,
+ doublebarwedge: doublebarwedge,
+ DoubleContourIntegral: DoubleContourIntegral,
+ DoubleDot: DoubleDot,
+ DoubleDownArrow: DoubleDownArrow,
+ DoubleLeftArrow: DoubleLeftArrow,
+ DoubleLeftRightArrow: DoubleLeftRightArrow,
+ DoubleLeftTee: DoubleLeftTee,
+ DoubleLongLeftArrow: DoubleLongLeftArrow,
+ DoubleLongLeftRightArrow: DoubleLongLeftRightArrow,
+ DoubleLongRightArrow: DoubleLongRightArrow,
+ DoubleRightArrow: DoubleRightArrow,
+ DoubleRightTee: DoubleRightTee,
+ DoubleUpArrow: DoubleUpArrow,
+ DoubleUpDownArrow: DoubleUpDownArrow,
+ DoubleVerticalBar: DoubleVerticalBar,
+ DownArrowBar: DownArrowBar,
+ downarrow: downarrow,
+ DownArrow: DownArrow,
+ Downarrow: Downarrow,
+ DownArrowUpArrow: DownArrowUpArrow,
+ DownBreve: DownBreve,
+ downdownarrows: downdownarrows,
+ downharpoonleft: downharpoonleft,
+ downharpoonright: downharpoonright,
+ DownLeftRightVector: DownLeftRightVector,
+ DownLeftTeeVector: DownLeftTeeVector,
+ DownLeftVectorBar: DownLeftVectorBar,
+ DownLeftVector: DownLeftVector,
+ DownRightTeeVector: DownRightTeeVector,
+ DownRightVectorBar: DownRightVectorBar,
+ DownRightVector: DownRightVector,
+ DownTeeArrow: DownTeeArrow,
+ DownTee: DownTee,
+ drbkarow: drbkarow,
+ drcorn: drcorn,
+ drcrop: drcrop,
+ Dscr: Dscr,
+ dscr: dscr,
+ DScy: DScy,
+ dscy: dscy,
+ dsol: dsol,
+ Dstrok: Dstrok,
+ dstrok: dstrok,
+ dtdot: dtdot,
+ dtri: dtri,
+ dtrif: dtrif,
+ duarr: duarr,
+ duhar: duhar,
+ dwangle: dwangle,
+ DZcy: DZcy,
+ dzcy: dzcy,
+ dzigrarr: dzigrarr,
+ Eacute: Eacute,
+ eacute: eacute,
+ easter: easter,
+ Ecaron: Ecaron,
+ ecaron: ecaron,
+ Ecirc: Ecirc,
+ ecirc: ecirc,
+ ecir: ecir,
+ ecolon: ecolon,
+ Ecy: Ecy,
+ ecy: ecy,
+ eDDot: eDDot,
+ Edot: Edot,
+ edot: edot,
+ eDot: eDot,
+ ee: ee,
+ efDot: efDot,
+ Efr: Efr,
+ efr: efr,
+ eg: eg,
+ Egrave: Egrave,
+ egrave: egrave,
+ egs: egs,
+ egsdot: egsdot,
+ el: el,
+ Element: Element,
+ elinters: elinters,
+ ell: ell,
+ els: els,
+ elsdot: elsdot,
+ Emacr: Emacr,
+ emacr: emacr,
+ empty: empty,
+ emptyset: emptyset,
+ EmptySmallSquare: EmptySmallSquare,
+ emptyv: emptyv,
+ EmptyVerySmallSquare: EmptyVerySmallSquare,
+ emsp13: emsp13,
+ emsp14: emsp14,
+ emsp: emsp,
+ ENG: ENG,
+ eng: eng,
+ ensp: ensp,
+ Eogon: Eogon,
+ eogon: eogon,
+ Eopf: Eopf,
+ eopf: eopf,
+ epar: epar,
+ eparsl: eparsl,
+ eplus: eplus,
+ epsi: epsi,
+ Epsilon: Epsilon,
+ epsilon: epsilon,
+ epsiv: epsiv,
+ eqcirc: eqcirc,
+ eqcolon: eqcolon,
+ eqsim: eqsim,
+ eqslantgtr: eqslantgtr,
+ eqslantless: eqslantless,
+ Equal: Equal,
+ equals: equals,
+ EqualTilde: EqualTilde,
+ equest: equest,
+ Equilibrium: Equilibrium,
+ equiv: equiv,
+ equivDD: equivDD,
+ eqvparsl: eqvparsl,
+ erarr: erarr,
+ erDot: erDot,
+ escr: escr,
+ Escr: Escr,
+ esdot: esdot,
+ Esim: Esim,
+ esim: esim,
+ Eta: Eta,
+ eta: eta,
+ ETH: ETH,
+ eth: eth,
+ Euml: Euml,
+ euml: euml,
+ euro: euro,
+ excl: excl,
+ exist: exist,
+ Exists: Exists,
+ expectation: expectation,
+ exponentiale: exponentiale,
+ ExponentialE: ExponentialE,
+ fallingdotseq: fallingdotseq,
+ Fcy: Fcy,
+ fcy: fcy,
+ female: female,
+ ffilig: ffilig,
+ fflig: fflig,
+ ffllig: ffllig,
+ Ffr: Ffr,
+ ffr: ffr,
+ filig: filig,
+ FilledSmallSquare: FilledSmallSquare,
+ FilledVerySmallSquare: FilledVerySmallSquare,
+ fjlig: fjlig,
+ flat: flat,
+ fllig: fllig,
+ fltns: fltns,
+ fnof: fnof,
+ Fopf: Fopf,
+ fopf: fopf,
+ forall: forall,
+ ForAll: ForAll,
+ fork: fork,
+ forkv: forkv,
+ Fouriertrf: Fouriertrf,
+ fpartint: fpartint,
+ frac12: frac12,
+ frac13: frac13,
+ frac14: frac14,
+ frac15: frac15,
+ frac16: frac16,
+ frac18: frac18,
+ frac23: frac23,
+ frac25: frac25,
+ frac34: frac34,
+ frac35: frac35,
+ frac38: frac38,
+ frac45: frac45,
+ frac56: frac56,
+ frac58: frac58,
+ frac78: frac78,
+ frasl: frasl,
+ frown: frown,
+ fscr: fscr,
+ Fscr: Fscr,
+ gacute: gacute,
+ Gamma: Gamma,
+ gamma: gamma,
+ Gammad: Gammad,
+ gammad: gammad,
+ gap: gap,
+ Gbreve: Gbreve,
+ gbreve: gbreve,
+ Gcedil: Gcedil,
+ Gcirc: Gcirc,
+ gcirc: gcirc,
+ Gcy: Gcy,
+ gcy: gcy,
+ Gdot: Gdot,
+ gdot: gdot,
+ ge: ge,
+ gE: gE,
+ gEl: gEl,
+ gel: gel,
+ geq: geq,
+ geqq: geqq,
+ geqslant: geqslant,
+ gescc: gescc,
+ ges: ges,
+ gesdot: gesdot,
+ gesdoto: gesdoto,
+ gesdotol: gesdotol,
+ gesl: gesl,
+ gesles: gesles,
+ Gfr: Gfr,
+ gfr: gfr,
+ gg: gg,
+ Gg: Gg,
+ ggg: ggg,
+ gimel: gimel,
+ GJcy: GJcy,
+ gjcy: gjcy,
+ gla: gla,
+ gl: gl,
+ glE: glE,
+ glj: glj,
+ gnap: gnap,
+ gnapprox: gnapprox,
+ gne: gne,
+ gnE: gnE,
+ gneq: gneq,
+ gneqq: gneqq,
+ gnsim: gnsim,
+ Gopf: Gopf,
+ gopf: gopf,
+ grave: grave,
+ GreaterEqual: GreaterEqual,
+ GreaterEqualLess: GreaterEqualLess,
+ GreaterFullEqual: GreaterFullEqual,
+ GreaterGreater: GreaterGreater,
+ GreaterLess: GreaterLess,
+ GreaterSlantEqual: GreaterSlantEqual,
+ GreaterTilde: GreaterTilde,
+ Gscr: Gscr,
+ gscr: gscr,
+ gsim: gsim,
+ gsime: gsime,
+ gsiml: gsiml,
+ gtcc: gtcc,
+ gtcir: gtcir,
+ gt: gt,
+ GT: GT,
+ Gt: Gt,
+ gtdot: gtdot,
+ gtlPar: gtlPar,
+ gtquest: gtquest,
+ gtrapprox: gtrapprox,
+ gtrarr: gtrarr,
+ gtrdot: gtrdot,
+ gtreqless: gtreqless,
+ gtreqqless: gtreqqless,
+ gtrless: gtrless,
+ gtrsim: gtrsim,
+ gvertneqq: gvertneqq,
+ gvnE: gvnE,
+ Hacek: Hacek,
+ hairsp: hairsp,
+ half: half,
+ hamilt: hamilt,
+ HARDcy: HARDcy,
+ hardcy: hardcy,
+ harrcir: harrcir,
+ harr: harr,
+ hArr: hArr,
+ harrw: harrw,
+ Hat: Hat,
+ hbar: hbar,
+ Hcirc: Hcirc,
+ hcirc: hcirc,
+ hearts: hearts,
+ heartsuit: heartsuit,
+ hellip: hellip,
+ hercon: hercon,
+ hfr: hfr,
+ Hfr: Hfr,
+ HilbertSpace: HilbertSpace,
+ hksearow: hksearow,
+ hkswarow: hkswarow,
+ hoarr: hoarr,
+ homtht: homtht,
+ hookleftarrow: hookleftarrow,
+ hookrightarrow: hookrightarrow,
+ hopf: hopf,
+ Hopf: Hopf,
+ horbar: horbar,
+ HorizontalLine: HorizontalLine,
+ hscr: hscr,
+ Hscr: Hscr,
+ hslash: hslash,
+ Hstrok: Hstrok,
+ hstrok: hstrok,
+ HumpDownHump: HumpDownHump,
+ HumpEqual: HumpEqual,
+ hybull: hybull,
+ hyphen: hyphen,
+ Iacute: Iacute,
+ iacute: iacute,
+ ic: ic,
+ Icirc: Icirc,
+ icirc: icirc,
+ Icy: Icy,
+ icy: icy,
+ Idot: Idot,
+ IEcy: IEcy,
+ iecy: iecy,
+ iexcl: iexcl,
+ iff: iff,
+ ifr: ifr,
+ Ifr: Ifr,
+ Igrave: Igrave,
+ igrave: igrave,
+ ii: ii,
+ iiiint: iiiint,
+ iiint: iiint,
+ iinfin: iinfin,
+ iiota: iiota,
+ IJlig: IJlig,
+ ijlig: ijlig,
+ Imacr: Imacr,
+ imacr: imacr,
+ image: image,
+ ImaginaryI: ImaginaryI,
+ imagline: imagline,
+ imagpart: imagpart,
+ imath: imath,
+ Im: Im,
+ imof: imof,
+ imped: imped,
+ Implies: Implies,
+ incare: incare,
+ infin: infin,
+ infintie: infintie,
+ inodot: inodot,
+ intcal: intcal,
+ int: int,
+ Int: Int,
+ integers: integers,
+ Integral: Integral,
+ intercal: intercal,
+ Intersection: Intersection,
+ intlarhk: intlarhk,
+ intprod: intprod,
+ InvisibleComma: InvisibleComma,
+ InvisibleTimes: InvisibleTimes,
+ IOcy: IOcy,
+ iocy: iocy,
+ Iogon: Iogon,
+ iogon: iogon,
+ Iopf: Iopf,
+ iopf: iopf,
+ Iota: Iota,
+ iota: iota,
+ iprod: iprod,
+ iquest: iquest,
+ iscr: iscr,
+ Iscr: Iscr,
+ isin: isin,
+ isindot: isindot,
+ isinE: isinE,
+ isins: isins,
+ isinsv: isinsv,
+ isinv: isinv,
+ it: it,
+ Itilde: Itilde,
+ itilde: itilde,
+ Iukcy: Iukcy,
+ iukcy: iukcy,
+ Iuml: Iuml,
+ iuml: iuml,
+ Jcirc: Jcirc,
+ jcirc: jcirc,
+ Jcy: Jcy,
+ jcy: jcy,
+ Jfr: Jfr,
+ jfr: jfr,
+ jmath: jmath,
+ Jopf: Jopf,
+ jopf: jopf,
+ Jscr: Jscr,
+ jscr: jscr,
+ Jsercy: Jsercy,
+ jsercy: jsercy,
+ Jukcy: Jukcy,
+ jukcy: jukcy,
+ Kappa: Kappa,
+ kappa: kappa,
+ kappav: kappav,
+ Kcedil: Kcedil,
+ kcedil: kcedil,
+ Kcy: Kcy,
+ kcy: kcy,
+ Kfr: Kfr,
+ kfr: kfr,
+ kgreen: kgreen,
+ KHcy: KHcy,
+ khcy: khcy,
+ KJcy: KJcy,
+ kjcy: kjcy,
+ Kopf: Kopf,
+ kopf: kopf,
+ Kscr: Kscr,
+ kscr: kscr,
+ lAarr: lAarr,
+ Lacute: Lacute,
+ lacute: lacute,
+ laemptyv: laemptyv,
+ lagran: lagran,
+ Lambda: Lambda,
+ lambda: lambda,
+ lang: lang,
+ Lang: Lang,
+ langd: langd,
+ langle: langle,
+ lap: lap,
+ Laplacetrf: Laplacetrf,
+ laquo: laquo,
+ larrb: larrb,
+ larrbfs: larrbfs,
+ larr: larr,
+ Larr: Larr,
+ lArr: lArr,
+ larrfs: larrfs,
+ larrhk: larrhk,
+ larrlp: larrlp,
+ larrpl: larrpl,
+ larrsim: larrsim,
+ larrtl: larrtl,
+ latail: latail,
+ lAtail: lAtail,
+ lat: lat,
+ late: late,
+ lates: lates,
+ lbarr: lbarr,
+ lBarr: lBarr,
+ lbbrk: lbbrk,
+ lbrace: lbrace,
+ lbrack: lbrack,
+ lbrke: lbrke,
+ lbrksld: lbrksld,
+ lbrkslu: lbrkslu,
+ Lcaron: Lcaron,
+ lcaron: lcaron,
+ Lcedil: Lcedil,
+ lcedil: lcedil,
+ lceil: lceil,
+ lcub: lcub,
+ Lcy: Lcy,
+ lcy: lcy,
+ ldca: ldca,
+ ldquo: ldquo,
+ ldquor: ldquor,
+ ldrdhar: ldrdhar,
+ ldrushar: ldrushar,
+ ldsh: ldsh,
+ le: le,
+ lE: lE,
+ LeftAngleBracket: LeftAngleBracket,
+ LeftArrowBar: LeftArrowBar,
+ leftarrow: leftarrow,
+ LeftArrow: LeftArrow,
+ Leftarrow: Leftarrow,
+ LeftArrowRightArrow: LeftArrowRightArrow,
+ leftarrowtail: leftarrowtail,
+ LeftCeiling: LeftCeiling,
+ LeftDoubleBracket: LeftDoubleBracket,
+ LeftDownTeeVector: LeftDownTeeVector,
+ LeftDownVectorBar: LeftDownVectorBar,
+ LeftDownVector: LeftDownVector,
+ LeftFloor: LeftFloor,
+ leftharpoondown: leftharpoondown,
+ leftharpoonup: leftharpoonup,
+ leftleftarrows: leftleftarrows,
+ leftrightarrow: leftrightarrow,
+ LeftRightArrow: LeftRightArrow,
+ Leftrightarrow: Leftrightarrow,
+ leftrightarrows: leftrightarrows,
+ leftrightharpoons: leftrightharpoons,
+ leftrightsquigarrow: leftrightsquigarrow,
+ LeftRightVector: LeftRightVector,
+ LeftTeeArrow: LeftTeeArrow,
+ LeftTee: LeftTee,
+ LeftTeeVector: LeftTeeVector,
+ leftthreetimes: leftthreetimes,
+ LeftTriangleBar: LeftTriangleBar,
+ LeftTriangle: LeftTriangle,
+ LeftTriangleEqual: LeftTriangleEqual,
+ LeftUpDownVector: LeftUpDownVector,
+ LeftUpTeeVector: LeftUpTeeVector,
+ LeftUpVectorBar: LeftUpVectorBar,
+ LeftUpVector: LeftUpVector,
+ LeftVectorBar: LeftVectorBar,
+ LeftVector: LeftVector,
+ lEg: lEg,
+ leg: leg,
+ leq: leq,
+ leqq: leqq,
+ leqslant: leqslant,
+ lescc: lescc,
+ les: les,
+ lesdot: lesdot,
+ lesdoto: lesdoto,
+ lesdotor: lesdotor,
+ lesg: lesg,
+ lesges: lesges,
+ lessapprox: lessapprox,
+ lessdot: lessdot,
+ lesseqgtr: lesseqgtr,
+ lesseqqgtr: lesseqqgtr,
+ LessEqualGreater: LessEqualGreater,
+ LessFullEqual: LessFullEqual,
+ LessGreater: LessGreater,
+ lessgtr: lessgtr,
+ LessLess: LessLess,
+ lesssim: lesssim,
+ LessSlantEqual: LessSlantEqual,
+ LessTilde: LessTilde,
+ lfisht: lfisht,
+ lfloor: lfloor,
+ Lfr: Lfr,
+ lfr: lfr,
+ lg: lg,
+ lgE: lgE,
+ lHar: lHar,
+ lhard: lhard,
+ lharu: lharu,
+ lharul: lharul,
+ lhblk: lhblk,
+ LJcy: LJcy,
+ ljcy: ljcy,
+ llarr: llarr,
+ ll: ll,
+ Ll: Ll,
+ llcorner: llcorner,
+ Lleftarrow: Lleftarrow,
+ llhard: llhard,
+ lltri: lltri,
+ Lmidot: Lmidot,
+ lmidot: lmidot,
+ lmoustache: lmoustache,
+ lmoust: lmoust,
+ lnap: lnap,
+ lnapprox: lnapprox,
+ lne: lne,
+ lnE: lnE,
+ lneq: lneq,
+ lneqq: lneqq,
+ lnsim: lnsim,
+ loang: loang,
+ loarr: loarr,
+ lobrk: lobrk,
+ longleftarrow: longleftarrow,
+ LongLeftArrow: LongLeftArrow,
+ Longleftarrow: Longleftarrow,
+ longleftrightarrow: longleftrightarrow,
+ LongLeftRightArrow: LongLeftRightArrow,
+ Longleftrightarrow: Longleftrightarrow,
+ longmapsto: longmapsto,
+ longrightarrow: longrightarrow,
+ LongRightArrow: LongRightArrow,
+ Longrightarrow: Longrightarrow,
+ looparrowleft: looparrowleft,
+ looparrowright: looparrowright,
+ lopar: lopar,
+ Lopf: Lopf,
+ lopf: lopf,
+ loplus: loplus,
+ lotimes: lotimes,
+ lowast: lowast,
+ lowbar: lowbar,
+ LowerLeftArrow: LowerLeftArrow,
+ LowerRightArrow: LowerRightArrow,
+ loz: loz,
+ lozenge: lozenge,
+ lozf: lozf,
+ lpar: lpar,
+ lparlt: lparlt,
+ lrarr: lrarr,
+ lrcorner: lrcorner,
+ lrhar: lrhar,
+ lrhard: lrhard,
+ lrm: lrm,
+ lrtri: lrtri,
+ lsaquo: lsaquo,
+ lscr: lscr,
+ Lscr: Lscr,
+ lsh: lsh,
+ Lsh: Lsh,
+ lsim: lsim,
+ lsime: lsime,
+ lsimg: lsimg,
+ lsqb: lsqb,
+ lsquo: lsquo,
+ lsquor: lsquor,
+ Lstrok: Lstrok,
+ lstrok: lstrok,
+ ltcc: ltcc,
+ ltcir: ltcir,
+ lt: lt,
+ LT: LT,
+ Lt: Lt,
+ ltdot: ltdot,
+ lthree: lthree,
+ ltimes: ltimes,
+ ltlarr: ltlarr,
+ ltquest: ltquest,
+ ltri: ltri,
+ ltrie: ltrie,
+ ltrif: ltrif,
+ ltrPar: ltrPar,
+ lurdshar: lurdshar,
+ luruhar: luruhar,
+ lvertneqq: lvertneqq,
+ lvnE: lvnE,
+ macr: macr,
+ male: male,
+ malt: malt,
+ maltese: maltese,
+ map: map,
+ mapsto: mapsto,
+ mapstodown: mapstodown,
+ mapstoleft: mapstoleft,
+ mapstoup: mapstoup,
+ marker: marker,
+ mcomma: mcomma,
+ Mcy: Mcy,
+ mcy: mcy,
+ mdash: mdash,
+ mDDot: mDDot,
+ measuredangle: measuredangle,
+ MediumSpace: MediumSpace,
+ Mellintrf: Mellintrf,
+ Mfr: Mfr,
+ mfr: mfr,
+ mho: mho,
+ micro: micro,
+ midast: midast,
+ midcir: midcir,
+ mid: mid,
+ middot: middot,
+ minusb: minusb,
+ minus: minus,
+ minusd: minusd,
+ minusdu: minusdu,
+ MinusPlus: MinusPlus,
+ mlcp: mlcp,
+ mldr: mldr,
+ mnplus: mnplus,
+ models: models,
+ Mopf: Mopf,
+ mopf: mopf,
+ mp: mp,
+ mscr: mscr,
+ Mscr: Mscr,
+ mstpos: mstpos,
+ Mu: Mu,
+ mu: mu,
+ multimap: multimap,
+ mumap: mumap,
+ nabla: nabla,
+ Nacute: Nacute,
+ nacute: nacute,
+ nang: nang,
+ nap: nap,
+ napE: napE,
+ napid: napid,
+ napos: napos,
+ napprox: napprox,
+ natural: natural,
+ naturals: naturals,
+ natur: natur,
+ nbsp: nbsp,
+ nbump: nbump,
+ nbumpe: nbumpe,
+ ncap: ncap,
+ Ncaron: Ncaron,
+ ncaron: ncaron,
+ Ncedil: Ncedil,
+ ncedil: ncedil,
+ ncong: ncong,
+ ncongdot: ncongdot,
+ ncup: ncup,
+ Ncy: Ncy,
+ ncy: ncy,
+ ndash: ndash,
+ nearhk: nearhk,
+ nearr: nearr,
+ neArr: neArr,
+ nearrow: nearrow,
+ ne: ne,
+ nedot: nedot,
+ NegativeMediumSpace: NegativeMediumSpace,
+ NegativeThickSpace: NegativeThickSpace,
+ NegativeThinSpace: NegativeThinSpace,
+ NegativeVeryThinSpace: NegativeVeryThinSpace,
+ nequiv: nequiv,
+ nesear: nesear,
+ nesim: nesim,
+ NestedGreaterGreater: NestedGreaterGreater,
+ NestedLessLess: NestedLessLess,
+ NewLine: NewLine,
+ nexist: nexist,
+ nexists: nexists,
+ Nfr: Nfr,
+ nfr: nfr,
+ ngE: ngE,
+ nge: nge,
+ ngeq: ngeq,
+ ngeqq: ngeqq,
+ ngeqslant: ngeqslant,
+ nges: nges,
+ nGg: nGg,
+ ngsim: ngsim,
+ nGt: nGt,
+ ngt: ngt,
+ ngtr: ngtr,
+ nGtv: nGtv,
+ nharr: nharr,
+ nhArr: nhArr,
+ nhpar: nhpar,
+ ni: ni,
+ nis: nis,
+ nisd: nisd,
+ niv: niv,
+ NJcy: NJcy,
+ njcy: njcy,
+ nlarr: nlarr,
+ nlArr: nlArr,
+ nldr: nldr,
+ nlE: nlE,
+ nle: nle,
+ nleftarrow: nleftarrow,
+ nLeftarrow: nLeftarrow,
+ nleftrightarrow: nleftrightarrow,
+ nLeftrightarrow: nLeftrightarrow,
+ nleq: nleq,
+ nleqq: nleqq,
+ nleqslant: nleqslant,
+ nles: nles,
+ nless: nless,
+ nLl: nLl,
+ nlsim: nlsim,
+ nLt: nLt,
+ nlt: nlt,
+ nltri: nltri,
+ nltrie: nltrie,
+ nLtv: nLtv,
+ nmid: nmid,
+ NoBreak: NoBreak,
+ NonBreakingSpace: NonBreakingSpace,
+ nopf: nopf,
+ Nopf: Nopf,
+ Not: Not,
+ not: not,
+ NotCongruent: NotCongruent,
+ NotCupCap: NotCupCap,
+ NotDoubleVerticalBar: NotDoubleVerticalBar,
+ NotElement: NotElement,
+ NotEqual: NotEqual,
+ NotEqualTilde: NotEqualTilde,
+ NotExists: NotExists,
+ NotGreater: NotGreater,
+ NotGreaterEqual: NotGreaterEqual,
+ NotGreaterFullEqual: NotGreaterFullEqual,
+ NotGreaterGreater: NotGreaterGreater,
+ NotGreaterLess: NotGreaterLess,
+ NotGreaterSlantEqual: NotGreaterSlantEqual,
+ NotGreaterTilde: NotGreaterTilde,
+ NotHumpDownHump: NotHumpDownHump,
+ NotHumpEqual: NotHumpEqual,
+ notin: notin,
+ notindot: notindot,
+ notinE: notinE,
+ notinva: notinva,
+ notinvb: notinvb,
+ notinvc: notinvc,
+ NotLeftTriangleBar: NotLeftTriangleBar,
+ NotLeftTriangle: NotLeftTriangle,
+ NotLeftTriangleEqual: NotLeftTriangleEqual,
+ NotLess: NotLess,
+ NotLessEqual: NotLessEqual,
+ NotLessGreater: NotLessGreater,
+ NotLessLess: NotLessLess,
+ NotLessSlantEqual: NotLessSlantEqual,
+ NotLessTilde: NotLessTilde,
+ NotNestedGreaterGreater: NotNestedGreaterGreater,
+ NotNestedLessLess: NotNestedLessLess,
+ notni: notni,
+ notniva: notniva,
+ notnivb: notnivb,
+ notnivc: notnivc,
+ NotPrecedes: NotPrecedes,
+ NotPrecedesEqual: NotPrecedesEqual,
+ NotPrecedesSlantEqual: NotPrecedesSlantEqual,
+ NotReverseElement: NotReverseElement,
+ NotRightTriangleBar: NotRightTriangleBar,
+ NotRightTriangle: NotRightTriangle,
+ NotRightTriangleEqual: NotRightTriangleEqual,
+ NotSquareSubset: NotSquareSubset,
+ NotSquareSubsetEqual: NotSquareSubsetEqual,
+ NotSquareSuperset: NotSquareSuperset,
+ NotSquareSupersetEqual: NotSquareSupersetEqual,
+ NotSubset: NotSubset,
+ NotSubsetEqual: NotSubsetEqual,
+ NotSucceeds: NotSucceeds,
+ NotSucceedsEqual: NotSucceedsEqual,
+ NotSucceedsSlantEqual: NotSucceedsSlantEqual,
+ NotSucceedsTilde: NotSucceedsTilde,
+ NotSuperset: NotSuperset,
+ NotSupersetEqual: NotSupersetEqual,
+ NotTilde: NotTilde,
+ NotTildeEqual: NotTildeEqual,
+ NotTildeFullEqual: NotTildeFullEqual,
+ NotTildeTilde: NotTildeTilde,
+ NotVerticalBar: NotVerticalBar,
+ nparallel: nparallel,
+ npar: npar,
+ nparsl: nparsl,
+ npart: npart,
+ npolint: npolint,
+ npr: npr,
+ nprcue: nprcue,
+ nprec: nprec,
+ npreceq: npreceq,
+ npre: npre,
+ nrarrc: nrarrc,
+ nrarr: nrarr,
+ nrArr: nrArr,
+ nrarrw: nrarrw,
+ nrightarrow: nrightarrow,
+ nRightarrow: nRightarrow,
+ nrtri: nrtri,
+ nrtrie: nrtrie,
+ nsc: nsc,
+ nsccue: nsccue,
+ nsce: nsce,
+ Nscr: Nscr,
+ nscr: nscr,
+ nshortmid: nshortmid,
+ nshortparallel: nshortparallel,
+ nsim: nsim,
+ nsime: nsime,
+ nsimeq: nsimeq,
+ nsmid: nsmid,
+ nspar: nspar,
+ nsqsube: nsqsube,
+ nsqsupe: nsqsupe,
+ nsub: nsub,
+ nsubE: nsubE,
+ nsube: nsube,
+ nsubset: nsubset,
+ nsubseteq: nsubseteq,
+ nsubseteqq: nsubseteqq,
+ nsucc: nsucc,
+ nsucceq: nsucceq,
+ nsup: nsup,
+ nsupE: nsupE,
+ nsupe: nsupe,
+ nsupset: nsupset,
+ nsupseteq: nsupseteq,
+ nsupseteqq: nsupseteqq,
+ ntgl: ntgl,
+ Ntilde: Ntilde,
+ ntilde: ntilde,
+ ntlg: ntlg,
+ ntriangleleft: ntriangleleft,
+ ntrianglelefteq: ntrianglelefteq,
+ ntriangleright: ntriangleright,
+ ntrianglerighteq: ntrianglerighteq,
+ Nu: Nu,
+ nu: nu,
+ num: num,
+ numero: numero,
+ numsp: numsp,
+ nvap: nvap,
+ nvdash: nvdash,
+ nvDash: nvDash,
+ nVdash: nVdash,
+ nVDash: nVDash,
+ nvge: nvge,
+ nvgt: nvgt,
+ nvHarr: nvHarr,
+ nvinfin: nvinfin,
+ nvlArr: nvlArr,
+ nvle: nvle,
+ nvlt: nvlt,
+ nvltrie: nvltrie,
+ nvrArr: nvrArr,
+ nvrtrie: nvrtrie,
+ nvsim: nvsim,
+ nwarhk: nwarhk,
+ nwarr: nwarr,
+ nwArr: nwArr,
+ nwarrow: nwarrow,
+ nwnear: nwnear,
+ Oacute: Oacute,
+ oacute: oacute,
+ oast: oast,
+ Ocirc: Ocirc,
+ ocirc: ocirc,
+ ocir: ocir,
+ Ocy: Ocy,
+ ocy: ocy,
+ odash: odash,
+ Odblac: Odblac,
+ odblac: odblac,
+ odiv: odiv,
+ odot: odot,
+ odsold: odsold,
+ OElig: OElig,
+ oelig: oelig,
+ ofcir: ofcir,
+ Ofr: Ofr,
+ ofr: ofr,
+ ogon: ogon,
+ Ograve: Ograve,
+ ograve: ograve,
+ ogt: ogt,
+ ohbar: ohbar,
+ ohm: ohm,
+ oint: oint,
+ olarr: olarr,
+ olcir: olcir,
+ olcross: olcross,
+ oline: oline,
+ olt: olt,
+ Omacr: Omacr,
+ omacr: omacr,
+ Omega: Omega,
+ omega: omega,
+ Omicron: Omicron,
+ omicron: omicron,
+ omid: omid,
+ ominus: ominus,
+ Oopf: Oopf,
+ oopf: oopf,
+ opar: opar,
+ OpenCurlyDoubleQuote: OpenCurlyDoubleQuote,
+ OpenCurlyQuote: OpenCurlyQuote,
+ operp: operp,
+ oplus: oplus,
+ orarr: orarr,
+ Or: Or,
+ or: or,
+ ord: ord,
+ order: order,
+ orderof: orderof,
+ ordf: ordf,
+ ordm: ordm,
+ origof: origof,
+ oror: oror,
+ orslope: orslope,
+ orv: orv,
+ oS: oS,
+ Oscr: Oscr,
+ oscr: oscr,
+ Oslash: Oslash,
+ oslash: oslash,
+ osol: osol,
+ Otilde: Otilde,
+ otilde: otilde,
+ otimesas: otimesas,
+ Otimes: Otimes,
+ otimes: otimes,
+ Ouml: Ouml,
+ ouml: ouml,
+ ovbar: ovbar,
+ OverBar: OverBar,
+ OverBrace: OverBrace,
+ OverBracket: OverBracket,
+ OverParenthesis: OverParenthesis,
+ para: para,
+ parallel: parallel,
+ par: par,
+ parsim: parsim,
+ parsl: parsl,
+ part: part,
+ PartialD: PartialD,
+ Pcy: Pcy,
+ pcy: pcy,
+ percnt: percnt,
+ period: period,
+ permil: permil,
+ perp: perp,
+ pertenk: pertenk,
+ Pfr: Pfr,
+ pfr: pfr,
+ Phi: Phi,
+ phi: phi,
+ phiv: phiv,
+ phmmat: phmmat,
+ phone: phone,
+ Pi: Pi,
+ pi: pi,
+ pitchfork: pitchfork,
+ piv: piv,
+ planck: planck,
+ planckh: planckh,
+ plankv: plankv,
+ plusacir: plusacir,
+ plusb: plusb,
+ pluscir: pluscir,
+ plus: plus,
+ plusdo: plusdo,
+ plusdu: plusdu,
+ pluse: pluse,
+ PlusMinus: PlusMinus,
+ plusmn: plusmn,
+ plussim: plussim,
+ plustwo: plustwo,
+ pm: pm,
+ Poincareplane: Poincareplane,
+ pointint: pointint,
+ popf: popf,
+ Popf: Popf,
+ pound: pound,
+ prap: prap,
+ Pr: Pr,
+ pr: pr,
+ prcue: prcue,
+ precapprox: precapprox,
+ prec: prec,
+ preccurlyeq: preccurlyeq,
+ Precedes: Precedes,
+ PrecedesEqual: PrecedesEqual,
+ PrecedesSlantEqual: PrecedesSlantEqual,
+ PrecedesTilde: PrecedesTilde,
+ preceq: preceq,
+ precnapprox: precnapprox,
+ precneqq: precneqq,
+ precnsim: precnsim,
+ pre: pre,
+ prE: prE,
+ precsim: precsim,
+ prime: prime,
+ Prime: Prime,
+ primes: primes,
+ prnap: prnap,
+ prnE: prnE,
+ prnsim: prnsim,
+ prod: prod,
+ Product: Product,
+ profalar: profalar,
+ profline: profline,
+ profsurf: profsurf,
+ prop: prop,
+ Proportional: Proportional,
+ Proportion: Proportion,
+ propto: propto,
+ prsim: prsim,
+ prurel: prurel,
+ Pscr: Pscr,
+ pscr: pscr,
+ Psi: Psi,
+ psi: psi,
+ puncsp: puncsp,
+ Qfr: Qfr,
+ qfr: qfr,
+ qint: qint,
+ qopf: qopf,
+ Qopf: Qopf,
+ qprime: qprime,
+ Qscr: Qscr,
+ qscr: qscr,
+ quaternions: quaternions,
+ quatint: quatint,
+ quest: quest,
+ questeq: questeq,
+ quot: quot,
+ QUOT: QUOT,
+ rAarr: rAarr,
+ race: race,
+ Racute: Racute,
+ racute: racute,
+ radic: radic,
+ raemptyv: raemptyv,
+ rang: rang,
+ Rang: Rang,
+ rangd: rangd,
+ range: range,
+ rangle: rangle,
+ raquo: raquo,
+ rarrap: rarrap,
+ rarrb: rarrb,
+ rarrbfs: rarrbfs,
+ rarrc: rarrc,
+ rarr: rarr,
+ Rarr: Rarr,
+ rArr: rArr,
+ rarrfs: rarrfs,
+ rarrhk: rarrhk,
+ rarrlp: rarrlp,
+ rarrpl: rarrpl,
+ rarrsim: rarrsim,
+ Rarrtl: Rarrtl,
+ rarrtl: rarrtl,
+ rarrw: rarrw,
+ ratail: ratail,
+ rAtail: rAtail,
+ ratio: ratio,
+ rationals: rationals,
+ rbarr: rbarr,
+ rBarr: rBarr,
+ RBarr: RBarr,
+ rbbrk: rbbrk,
+ rbrace: rbrace,
+ rbrack: rbrack,
+ rbrke: rbrke,
+ rbrksld: rbrksld,
+ rbrkslu: rbrkslu,
+ Rcaron: Rcaron,
+ rcaron: rcaron,
+ Rcedil: Rcedil,
+ rcedil: rcedil,
+ rceil: rceil,
+ rcub: rcub,
+ Rcy: Rcy,
+ rcy: rcy,
+ rdca: rdca,
+ rdldhar: rdldhar,
+ rdquo: rdquo,
+ rdquor: rdquor,
+ rdsh: rdsh,
+ real: real,
+ realine: realine,
+ realpart: realpart,
+ reals: reals,
+ Re: Re,
+ rect: rect,
+ reg: reg,
+ REG: REG,
+ ReverseElement: ReverseElement,
+ ReverseEquilibrium: ReverseEquilibrium,
+ ReverseUpEquilibrium: ReverseUpEquilibrium,
+ rfisht: rfisht,
+ rfloor: rfloor,
+ rfr: rfr,
+ Rfr: Rfr,
+ rHar: rHar,
+ rhard: rhard,
+ rharu: rharu,
+ rharul: rharul,
+ Rho: Rho,
+ rho: rho,
+ rhov: rhov,
+ RightAngleBracket: RightAngleBracket,
+ RightArrowBar: RightArrowBar,
+ rightarrow: rightarrow,
+ RightArrow: RightArrow,
+ Rightarrow: Rightarrow,
+ RightArrowLeftArrow: RightArrowLeftArrow,
+ rightarrowtail: rightarrowtail,
+ RightCeiling: RightCeiling,
+ RightDoubleBracket: RightDoubleBracket,
+ RightDownTeeVector: RightDownTeeVector,
+ RightDownVectorBar: RightDownVectorBar,
+ RightDownVector: RightDownVector,
+ RightFloor: RightFloor,
+ rightharpoondown: rightharpoondown,
+ rightharpoonup: rightharpoonup,
+ rightleftarrows: rightleftarrows,
+ rightleftharpoons: rightleftharpoons,
+ rightrightarrows: rightrightarrows,
+ rightsquigarrow: rightsquigarrow,
+ RightTeeArrow: RightTeeArrow,
+ RightTee: RightTee,
+ RightTeeVector: RightTeeVector,
+ rightthreetimes: rightthreetimes,
+ RightTriangleBar: RightTriangleBar,
+ RightTriangle: RightTriangle,
+ RightTriangleEqual: RightTriangleEqual,
+ RightUpDownVector: RightUpDownVector,
+ RightUpTeeVector: RightUpTeeVector,
+ RightUpVectorBar: RightUpVectorBar,
+ RightUpVector: RightUpVector,
+ RightVectorBar: RightVectorBar,
+ RightVector: RightVector,
+ ring: ring,
+ risingdotseq: risingdotseq,
+ rlarr: rlarr,
+ rlhar: rlhar,
+ rlm: rlm,
+ rmoustache: rmoustache,
+ rmoust: rmoust,
+ rnmid: rnmid,
+ roang: roang,
+ roarr: roarr,
+ robrk: robrk,
+ ropar: ropar,
+ ropf: ropf,
+ Ropf: Ropf,
+ roplus: roplus,
+ rotimes: rotimes,
+ RoundImplies: RoundImplies,
+ rpar: rpar,
+ rpargt: rpargt,
+ rppolint: rppolint,
+ rrarr: rrarr,
+ Rrightarrow: Rrightarrow,
+ rsaquo: rsaquo,
+ rscr: rscr,
+ Rscr: Rscr,
+ rsh: rsh,
+ Rsh: Rsh,
+ rsqb: rsqb,
+ rsquo: rsquo,
+ rsquor: rsquor,
+ rthree: rthree,
+ rtimes: rtimes,
+ rtri: rtri,
+ rtrie: rtrie,
+ rtrif: rtrif,
+ rtriltri: rtriltri,
+ RuleDelayed: RuleDelayed,
+ ruluhar: ruluhar,
+ rx: rx,
+ Sacute: Sacute,
+ sacute: sacute,
+ sbquo: sbquo,
+ scap: scap,
+ Scaron: Scaron,
+ scaron: scaron,
+ Sc: Sc,
+ sc: sc,
+ sccue: sccue,
+ sce: sce,
+ scE: scE,
+ Scedil: Scedil,
+ scedil: scedil,
+ Scirc: Scirc,
+ scirc: scirc,
+ scnap: scnap,
+ scnE: scnE,
+ scnsim: scnsim,
+ scpolint: scpolint,
+ scsim: scsim,
+ Scy: Scy,
+ scy: scy,
+ sdotb: sdotb,
+ sdot: sdot,
+ sdote: sdote,
+ searhk: searhk,
+ searr: searr,
+ seArr: seArr,
+ searrow: searrow,
+ sect: sect,
+ semi: semi,
+ seswar: seswar,
+ setminus: setminus,
+ setmn: setmn,
+ sext: sext,
+ Sfr: Sfr,
+ sfr: sfr,
+ sfrown: sfrown,
+ sharp: sharp,
+ SHCHcy: SHCHcy,
+ shchcy: shchcy,
+ SHcy: SHcy,
+ shcy: shcy,
+ ShortDownArrow: ShortDownArrow,
+ ShortLeftArrow: ShortLeftArrow,
+ shortmid: shortmid,
+ shortparallel: shortparallel,
+ ShortRightArrow: ShortRightArrow,
+ ShortUpArrow: ShortUpArrow,
+ shy: shy,
+ Sigma: Sigma,
+ sigma: sigma,
+ sigmaf: sigmaf,
+ sigmav: sigmav,
+ sim: sim,
+ simdot: simdot,
+ sime: sime,
+ simeq: simeq,
+ simg: simg,
+ simgE: simgE,
+ siml: siml,
+ simlE: simlE,
+ simne: simne,
+ simplus: simplus,
+ simrarr: simrarr,
+ slarr: slarr,
+ SmallCircle: SmallCircle,
+ smallsetminus: smallsetminus,
+ smashp: smashp,
+ smeparsl: smeparsl,
+ smid: smid,
+ smile: smile,
+ smt: smt,
+ smte: smte,
+ smtes: smtes,
+ SOFTcy: SOFTcy,
+ softcy: softcy,
+ solbar: solbar,
+ solb: solb,
+ sol: sol,
+ Sopf: Sopf,
+ sopf: sopf,
+ spades: spades,
+ spadesuit: spadesuit,
+ spar: spar,
+ sqcap: sqcap,
+ sqcaps: sqcaps,
+ sqcup: sqcup,
+ sqcups: sqcups,
+ Sqrt: Sqrt,
+ sqsub: sqsub,
+ sqsube: sqsube,
+ sqsubset: sqsubset,
+ sqsubseteq: sqsubseteq,
+ sqsup: sqsup,
+ sqsupe: sqsupe,
+ sqsupset: sqsupset,
+ sqsupseteq: sqsupseteq,
+ square: square,
+ Square: Square,
+ SquareIntersection: SquareIntersection,
+ SquareSubset: SquareSubset,
+ SquareSubsetEqual: SquareSubsetEqual,
+ SquareSuperset: SquareSuperset,
+ SquareSupersetEqual: SquareSupersetEqual,
+ SquareUnion: SquareUnion,
+ squarf: squarf,
+ squ: squ,
+ squf: squf,
+ srarr: srarr,
+ Sscr: Sscr,
+ sscr: sscr,
+ ssetmn: ssetmn,
+ ssmile: ssmile,
+ sstarf: sstarf,
+ Star: Star,
+ star: star,
+ starf: starf,
+ straightepsilon: straightepsilon,
+ straightphi: straightphi,
+ strns: strns,
+ sub: sub,
+ Sub: Sub,
+ subdot: subdot,
+ subE: subE,
+ sube: sube,
+ subedot: subedot,
+ submult: submult,
+ subnE: subnE,
+ subne: subne,
+ subplus: subplus,
+ subrarr: subrarr,
+ subset: subset,
+ Subset: Subset,
+ subseteq: subseteq,
+ subseteqq: subseteqq,
+ SubsetEqual: SubsetEqual,
+ subsetneq: subsetneq,
+ subsetneqq: subsetneqq,
+ subsim: subsim,
+ subsub: subsub,
+ subsup: subsup,
+ succapprox: succapprox,
+ succ: succ,
+ succcurlyeq: succcurlyeq,
+ Succeeds: Succeeds,
+ SucceedsEqual: SucceedsEqual,
+ SucceedsSlantEqual: SucceedsSlantEqual,
+ SucceedsTilde: SucceedsTilde,
+ succeq: succeq,
+ succnapprox: succnapprox,
+ succneqq: succneqq,
+ succnsim: succnsim,
+ succsim: succsim,
+ SuchThat: SuchThat,
+ sum: sum,
+ Sum: Sum,
+ sung: sung,
+ sup1: sup1,
+ sup2: sup2,
+ sup3: sup3,
+ sup: sup,
+ Sup: Sup,
+ supdot: supdot,
+ supdsub: supdsub,
+ supE: supE,
+ supe: supe,
+ supedot: supedot,
+ Superset: Superset,
+ SupersetEqual: SupersetEqual,
+ suphsol: suphsol,
+ suphsub: suphsub,
+ suplarr: suplarr,
+ supmult: supmult,
+ supnE: supnE,
+ supne: supne,
+ supplus: supplus,
+ supset: supset,
+ Supset: Supset,
+ supseteq: supseteq,
+ supseteqq: supseteqq,
+ supsetneq: supsetneq,
+ supsetneqq: supsetneqq,
+ supsim: supsim,
+ supsub: supsub,
+ supsup: supsup,
+ swarhk: swarhk,
+ swarr: swarr,
+ swArr: swArr,
+ swarrow: swarrow,
+ swnwar: swnwar,
+ szlig: szlig,
+ Tab: Tab,
+ target: target,
+ Tau: Tau,
+ tau: tau,
+ tbrk: tbrk,
+ Tcaron: Tcaron,
+ tcaron: tcaron,
+ Tcedil: Tcedil,
+ tcedil: tcedil,
+ Tcy: Tcy,
+ tcy: tcy,
+ tdot: tdot,
+ telrec: telrec,
+ Tfr: Tfr,
+ tfr: tfr,
+ there4: there4,
+ therefore: therefore,
+ Therefore: Therefore,
+ Theta: Theta,
+ theta: theta,
+ thetasym: thetasym,
+ thetav: thetav,
+ thickapprox: thickapprox,
+ thicksim: thicksim,
+ ThickSpace: ThickSpace,
+ ThinSpace: ThinSpace,
+ thinsp: thinsp,
+ thkap: thkap,
+ thksim: thksim,
+ THORN: THORN,
+ thorn: thorn,
+ tilde: tilde,
+ Tilde: Tilde,
+ TildeEqual: TildeEqual,
+ TildeFullEqual: TildeFullEqual,
+ TildeTilde: TildeTilde,
+ timesbar: timesbar,
+ timesb: timesb,
+ times: times,
+ timesd: timesd,
+ tint: tint,
+ toea: toea,
+ topbot: topbot,
+ topcir: topcir,
+ top: top,
+ Topf: Topf,
+ topf: topf,
+ topfork: topfork,
+ tosa: tosa,
+ tprime: tprime,
+ trade: trade,
+ TRADE: TRADE,
+ triangle: triangle,
+ triangledown: triangledown,
+ triangleleft: triangleleft,
+ trianglelefteq: trianglelefteq,
+ triangleq: triangleq,
+ triangleright: triangleright,
+ trianglerighteq: trianglerighteq,
+ tridot: tridot,
+ trie: trie,
+ triminus: triminus,
+ TripleDot: TripleDot,
+ triplus: triplus,
+ trisb: trisb,
+ tritime: tritime,
+ trpezium: trpezium,
+ Tscr: Tscr,
+ tscr: tscr,
+ TScy: TScy,
+ tscy: tscy,
+ TSHcy: TSHcy,
+ tshcy: tshcy,
+ Tstrok: Tstrok,
+ tstrok: tstrok,
+ twixt: twixt,
+ twoheadleftarrow: twoheadleftarrow,
+ twoheadrightarrow: twoheadrightarrow,
+ Uacute: Uacute,
+ uacute: uacute,
+ uarr: uarr,
+ Uarr: Uarr,
+ uArr: uArr,
+ Uarrocir: Uarrocir,
+ Ubrcy: Ubrcy,
+ ubrcy: ubrcy,
+ Ubreve: Ubreve,
+ ubreve: ubreve,
+ Ucirc: Ucirc,
+ ucirc: ucirc,
+ Ucy: Ucy,
+ ucy: ucy,
+ udarr: udarr,
+ Udblac: Udblac,
+ udblac: udblac,
+ udhar: udhar,
+ ufisht: ufisht,
+ Ufr: Ufr,
+ ufr: ufr,
+ Ugrave: Ugrave,
+ ugrave: ugrave,
+ uHar: uHar,
+ uharl: uharl,
+ uharr: uharr,
+ uhblk: uhblk,
+ ulcorn: ulcorn,
+ ulcorner: ulcorner,
+ ulcrop: ulcrop,
+ ultri: ultri,
+ Umacr: Umacr,
+ umacr: umacr,
+ uml: uml,
+ UnderBar: UnderBar,
+ UnderBrace: UnderBrace,
+ UnderBracket: UnderBracket,
+ UnderParenthesis: UnderParenthesis,
+ Union: Union,
+ UnionPlus: UnionPlus,
+ Uogon: Uogon,
+ uogon: uogon,
+ Uopf: Uopf,
+ uopf: uopf,
+ UpArrowBar: UpArrowBar,
+ uparrow: uparrow,
+ UpArrow: UpArrow,
+ Uparrow: Uparrow,
+ UpArrowDownArrow: UpArrowDownArrow,
+ updownarrow: updownarrow,
+ UpDownArrow: UpDownArrow,
+ Updownarrow: Updownarrow,
+ UpEquilibrium: UpEquilibrium,
+ upharpoonleft: upharpoonleft,
+ upharpoonright: upharpoonright,
+ uplus: uplus,
+ UpperLeftArrow: UpperLeftArrow,
+ UpperRightArrow: UpperRightArrow,
+ upsi: upsi,
+ Upsi: Upsi,
+ upsih: upsih,
+ Upsilon: Upsilon,
+ upsilon: upsilon,
+ UpTeeArrow: UpTeeArrow,
+ UpTee: UpTee,
+ upuparrows: upuparrows,
+ urcorn: urcorn,
+ urcorner: urcorner,
+ urcrop: urcrop,
+ Uring: Uring,
+ uring: uring,
+ urtri: urtri,
+ Uscr: Uscr,
+ uscr: uscr,
+ utdot: utdot,
+ Utilde: Utilde,
+ utilde: utilde,
+ utri: utri,
+ utrif: utrif,
+ uuarr: uuarr,
+ Uuml: Uuml,
+ uuml: uuml,
+ uwangle: uwangle,
+ vangrt: vangrt,
+ varepsilon: varepsilon,
+ varkappa: varkappa,
+ varnothing: varnothing,
+ varphi: varphi,
+ varpi: varpi,
+ varpropto: varpropto,
+ varr: varr,
+ vArr: vArr,
+ varrho: varrho,
+ varsigma: varsigma,
+ varsubsetneq: varsubsetneq,
+ varsubsetneqq: varsubsetneqq,
+ varsupsetneq: varsupsetneq,
+ varsupsetneqq: varsupsetneqq,
+ vartheta: vartheta,
+ vartriangleleft: vartriangleleft,
+ vartriangleright: vartriangleright,
+ vBar: vBar,
+ Vbar: Vbar,
+ vBarv: vBarv,
+ Vcy: Vcy,
+ vcy: vcy,
+ vdash: vdash,
+ vDash: vDash,
+ Vdash: Vdash,
+ VDash: VDash,
+ Vdashl: Vdashl,
+ veebar: veebar,
+ vee: vee,
+ Vee: Vee,
+ veeeq: veeeq,
+ vellip: vellip,
+ verbar: verbar,
+ Verbar: Verbar,
+ vert: vert,
+ Vert: Vert,
+ VerticalBar: VerticalBar,
+ VerticalLine: VerticalLine,
+ VerticalSeparator: VerticalSeparator,
+ VerticalTilde: VerticalTilde,
+ VeryThinSpace: VeryThinSpace,
+ Vfr: Vfr,
+ vfr: vfr,
+ vltri: vltri,
+ vnsub: vnsub,
+ vnsup: vnsup,
+ Vopf: Vopf,
+ vopf: vopf,
+ vprop: vprop,
+ vrtri: vrtri,
+ Vscr: Vscr,
+ vscr: vscr,
+ vsubnE: vsubnE,
+ vsubne: vsubne,
+ vsupnE: vsupnE,
+ vsupne: vsupne,
+ Vvdash: Vvdash,
+ vzigzag: vzigzag,
+ Wcirc: Wcirc,
+ wcirc: wcirc,
+ wedbar: wedbar,
+ wedge: wedge,
+ Wedge: Wedge,
+ wedgeq: wedgeq,
+ weierp: weierp,
+ Wfr: Wfr,
+ wfr: wfr,
+ Wopf: Wopf,
+ wopf: wopf,
+ wp: wp,
+ wr: wr,
+ wreath: wreath,
+ Wscr: Wscr,
+ wscr: wscr,
+ xcap: xcap,
+ xcirc: xcirc,
+ xcup: xcup,
+ xdtri: xdtri,
+ Xfr: Xfr,
+ xfr: xfr,
+ xharr: xharr,
+ xhArr: xhArr,
+ Xi: Xi,
+ xi: xi,
+ xlarr: xlarr,
+ xlArr: xlArr,
+ xmap: xmap,
+ xnis: xnis,
+ xodot: xodot,
+ Xopf: Xopf,
+ xopf: xopf,
+ xoplus: xoplus,
+ xotime: xotime,
+ xrarr: xrarr,
+ xrArr: xrArr,
+ Xscr: Xscr,
+ xscr: xscr,
+ xsqcup: xsqcup,
+ xuplus: xuplus,
+ xutri: xutri,
+ xvee: xvee,
+ xwedge: xwedge,
+ Yacute: Yacute,
+ yacute: yacute,
+ YAcy: YAcy,
+ yacy: yacy,
+ Ycirc: Ycirc,
+ ycirc: ycirc,
+ Ycy: Ycy,
+ ycy: ycy,
+ yen: yen,
+ Yfr: Yfr,
+ yfr: yfr,
+ YIcy: YIcy,
+ yicy: yicy,
+ Yopf: Yopf,
+ yopf: yopf,
+ Yscr: Yscr,
+ yscr: yscr,
+ YUcy: YUcy,
+ yucy: yucy,
+ yuml: yuml,
+ Yuml: Yuml,
+ Zacute: Zacute,
+ zacute: zacute,
+ Zcaron: Zcaron,
+ zcaron: zcaron,
+ Zcy: Zcy,
+ zcy: zcy,
+ Zdot: Zdot,
+ zdot: zdot,
+ zeetrf: zeetrf,
+ ZeroWidthSpace: ZeroWidthSpace,
+ Zeta: Zeta,
+ zeta: zeta,
+ zfr: zfr,
+ Zfr: Zfr,
+ ZHcy: ZHcy,
+ zhcy: zhcy,
+ zigrarr: zigrarr,
+ zopf: zopf,
+ Zopf: Zopf,
+ Zscr: Zscr,
+ zscr: zscr,
+ zwj: zwj,
+ zwnj: zwnj,
+ 'default': entities
+ });
+
+ var Aacute$1 = "ร";
+ var aacute$1 = "รก";
+ var Acirc$1 = "ร";
+ var acirc$1 = "รข";
+ var acute$1 = "ยด";
+ var AElig$1 = "ร";
+ var aelig$1 = "รฆ";
+ var Agrave$1 = "ร";
+ var agrave$1 = "ร ";
+ var amp$1 = "&";
+ var AMP$1 = "&";
+ var Aring$1 = "ร
";
+ var aring$1 = "รฅ";
+ var Atilde$1 = "ร";
+ var atilde$1 = "รฃ";
+ var Auml$1 = "ร";
+ var auml$1 = "รค";
+ var brvbar$1 = "ยฆ";
+ var Ccedil$1 = "ร";
+ var ccedil$1 = "รง";
+ var cedil$1 = "ยธ";
+ var cent$1 = "ยข";
+ var copy$1 = "ยฉ";
+ var COPY$1 = "ยฉ";
+ var curren$1 = "ยค";
+ var deg$1 = "ยฐ";
+ var divide$1 = "รท";
+ var Eacute$1 = "ร";
+ var eacute$1 = "รฉ";
+ var Ecirc$1 = "ร";
+ var ecirc$1 = "รช";
+ var Egrave$1 = "ร";
+ var egrave$1 = "รจ";
+ var ETH$1 = "ร";
+ var eth$1 = "รฐ";
+ var Euml$1 = "ร";
+ var euml$1 = "รซ";
+ var frac12$1 = "ยฝ";
+ var frac14$1 = "ยผ";
+ var frac34$1 = "ยพ";
+ var gt$1 = ">";
+ var GT$1 = ">";
+ var Iacute$1 = "ร";
+ var iacute$1 = "รญ";
+ var Icirc$1 = "ร";
+ var icirc$1 = "รฎ";
+ var iexcl$1 = "ยก";
+ var Igrave$1 = "ร";
+ var igrave$1 = "รฌ";
+ var iquest$1 = "ยฟ";
+ var Iuml$1 = "ร";
+ var iuml$1 = "รฏ";
+ var laquo$1 = "ยซ";
+ var lt$1 = "<";
+ var LT$1 = "<";
+ var macr$1 = "ยฏ";
+ var micro$1 = "ยต";
+ var middot$1 = "ยท";
+ var nbsp$1 = "ย ";
+ var not$1 = "ยฌ";
+ var Ntilde$1 = "ร";
+ var ntilde$1 = "รฑ";
+ var Oacute$1 = "ร";
+ var oacute$1 = "รณ";
+ var Ocirc$1 = "ร";
+ var ocirc$1 = "รด";
+ var Ograve$1 = "ร";
+ var ograve$1 = "รฒ";
+ var ordf$1 = "ยช";
+ var ordm$1 = "ยบ";
+ var Oslash$1 = "ร";
+ var oslash$1 = "รธ";
+ var Otilde$1 = "ร";
+ var otilde$1 = "รต";
+ var Ouml$1 = "ร";
+ var ouml$1 = "รถ";
+ var para$1 = "ยถ";
+ var plusmn$1 = "ยฑ";
+ var pound$1 = "ยฃ";
+ var quot$1 = "\"";
+ var QUOT$1 = "\"";
+ var raquo$1 = "ยป";
+ var reg$1 = "ยฎ";
+ var REG$1 = "ยฎ";
+ var sect$1 = "ยง";
+ var shy$1 = "ยญ";
+ var sup1$1 = "ยน";
+ var sup2$1 = "ยฒ";
+ var sup3$1 = "ยณ";
+ var szlig$1 = "ร";
+ var THORN$1 = "ร";
+ var thorn$1 = "รพ";
+ var times$1 = "ร";
+ var Uacute$1 = "ร";
+ var uacute$1 = "รบ";
+ var Ucirc$1 = "ร";
+ var ucirc$1 = "รป";
+ var Ugrave$1 = "ร";
+ var ugrave$1 = "รน";
+ var uml$1 = "ยจ";
+ var Uuml$1 = "ร";
+ var uuml$1 = "รผ";
+ var Yacute$1 = "ร";
+ var yacute$1 = "รฝ";
+ var yen$1 = "ยฅ";
+ var yuml$1 = "รฟ";
+ var legacy = {
+ Aacute: Aacute$1,
+ aacute: aacute$1,
+ Acirc: Acirc$1,
+ acirc: acirc$1,
+ acute: acute$1,
+ AElig: AElig$1,
+ aelig: aelig$1,
+ Agrave: Agrave$1,
+ agrave: agrave$1,
+ amp: amp$1,
+ AMP: AMP$1,
+ Aring: Aring$1,
+ aring: aring$1,
+ Atilde: Atilde$1,
+ atilde: atilde$1,
+ Auml: Auml$1,
+ auml: auml$1,
+ brvbar: brvbar$1,
+ Ccedil: Ccedil$1,
+ ccedil: ccedil$1,
+ cedil: cedil$1,
+ cent: cent$1,
+ copy: copy$1,
+ COPY: COPY$1,
+ curren: curren$1,
+ deg: deg$1,
+ divide: divide$1,
+ Eacute: Eacute$1,
+ eacute: eacute$1,
+ Ecirc: Ecirc$1,
+ ecirc: ecirc$1,
+ Egrave: Egrave$1,
+ egrave: egrave$1,
+ ETH: ETH$1,
+ eth: eth$1,
+ Euml: Euml$1,
+ euml: euml$1,
+ frac12: frac12$1,
+ frac14: frac14$1,
+ frac34: frac34$1,
+ gt: gt$1,
+ GT: GT$1,
+ Iacute: Iacute$1,
+ iacute: iacute$1,
+ Icirc: Icirc$1,
+ icirc: icirc$1,
+ iexcl: iexcl$1,
+ Igrave: Igrave$1,
+ igrave: igrave$1,
+ iquest: iquest$1,
+ Iuml: Iuml$1,
+ iuml: iuml$1,
+ laquo: laquo$1,
+ lt: lt$1,
+ LT: LT$1,
+ macr: macr$1,
+ micro: micro$1,
+ middot: middot$1,
+ nbsp: nbsp$1,
+ not: not$1,
+ Ntilde: Ntilde$1,
+ ntilde: ntilde$1,
+ Oacute: Oacute$1,
+ oacute: oacute$1,
+ Ocirc: Ocirc$1,
+ ocirc: ocirc$1,
+ Ograve: Ograve$1,
+ ograve: ograve$1,
+ ordf: ordf$1,
+ ordm: ordm$1,
+ Oslash: Oslash$1,
+ oslash: oslash$1,
+ Otilde: Otilde$1,
+ otilde: otilde$1,
+ Ouml: Ouml$1,
+ ouml: ouml$1,
+ para: para$1,
+ plusmn: plusmn$1,
+ pound: pound$1,
+ quot: quot$1,
+ QUOT: QUOT$1,
+ raquo: raquo$1,
+ reg: reg$1,
+ REG: REG$1,
+ sect: sect$1,
+ shy: shy$1,
+ sup1: sup1$1,
+ sup2: sup2$1,
+ sup3: sup3$1,
+ szlig: szlig$1,
+ THORN: THORN$1,
+ thorn: thorn$1,
+ times: times$1,
+ Uacute: Uacute$1,
+ uacute: uacute$1,
+ Ucirc: Ucirc$1,
+ ucirc: ucirc$1,
+ Ugrave: Ugrave$1,
+ ugrave: ugrave$1,
+ uml: uml$1,
+ Uuml: Uuml$1,
+ uuml: uuml$1,
+ Yacute: Yacute$1,
+ yacute: yacute$1,
+ yen: yen$1,
+ yuml: yuml$1
+ };
+
+ var legacy$1 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ Aacute: Aacute$1,
+ aacute: aacute$1,
+ Acirc: Acirc$1,
+ acirc: acirc$1,
+ acute: acute$1,
+ AElig: AElig$1,
+ aelig: aelig$1,
+ Agrave: Agrave$1,
+ agrave: agrave$1,
+ amp: amp$1,
+ AMP: AMP$1,
+ Aring: Aring$1,
+ aring: aring$1,
+ Atilde: Atilde$1,
+ atilde: atilde$1,
+ Auml: Auml$1,
+ auml: auml$1,
+ brvbar: brvbar$1,
+ Ccedil: Ccedil$1,
+ ccedil: ccedil$1,
+ cedil: cedil$1,
+ cent: cent$1,
+ copy: copy$1,
+ COPY: COPY$1,
+ curren: curren$1,
+ deg: deg$1,
+ divide: divide$1,
+ Eacute: Eacute$1,
+ eacute: eacute$1,
+ Ecirc: Ecirc$1,
+ ecirc: ecirc$1,
+ Egrave: Egrave$1,
+ egrave: egrave$1,
+ ETH: ETH$1,
+ eth: eth$1,
+ Euml: Euml$1,
+ euml: euml$1,
+ frac12: frac12$1,
+ frac14: frac14$1,
+ frac34: frac34$1,
+ gt: gt$1,
+ GT: GT$1,
+ Iacute: Iacute$1,
+ iacute: iacute$1,
+ Icirc: Icirc$1,
+ icirc: icirc$1,
+ iexcl: iexcl$1,
+ Igrave: Igrave$1,
+ igrave: igrave$1,
+ iquest: iquest$1,
+ Iuml: Iuml$1,
+ iuml: iuml$1,
+ laquo: laquo$1,
+ lt: lt$1,
+ LT: LT$1,
+ macr: macr$1,
+ micro: micro$1,
+ middot: middot$1,
+ nbsp: nbsp$1,
+ not: not$1,
+ Ntilde: Ntilde$1,
+ ntilde: ntilde$1,
+ Oacute: Oacute$1,
+ oacute: oacute$1,
+ Ocirc: Ocirc$1,
+ ocirc: ocirc$1,
+ Ograve: Ograve$1,
+ ograve: ograve$1,
+ ordf: ordf$1,
+ ordm: ordm$1,
+ Oslash: Oslash$1,
+ oslash: oslash$1,
+ Otilde: Otilde$1,
+ otilde: otilde$1,
+ Ouml: Ouml$1,
+ ouml: ouml$1,
+ para: para$1,
+ plusmn: plusmn$1,
+ pound: pound$1,
+ quot: quot$1,
+ QUOT: QUOT$1,
+ raquo: raquo$1,
+ reg: reg$1,
+ REG: REG$1,
+ sect: sect$1,
+ shy: shy$1,
+ sup1: sup1$1,
+ sup2: sup2$1,
+ sup3: sup3$1,
+ szlig: szlig$1,
+ THORN: THORN$1,
+ thorn: thorn$1,
+ times: times$1,
+ Uacute: Uacute$1,
+ uacute: uacute$1,
+ Ucirc: Ucirc$1,
+ ucirc: ucirc$1,
+ Ugrave: Ugrave$1,
+ ugrave: ugrave$1,
+ uml: uml$1,
+ Uuml: Uuml$1,
+ uuml: uuml$1,
+ Yacute: Yacute$1,
+ yacute: yacute$1,
+ yen: yen$1,
+ yuml: yuml$1,
+ 'default': legacy
+ });
+
+ var amp$2 = "&";
+ var apos$1 = "'";
+ var gt$2 = ">";
+ var lt$2 = "<";
+ var quot$2 = "\"";
+ var xml = {
+ amp: amp$2,
+ apos: apos$1,
+ gt: gt$2,
+ lt: lt$2,
+ quot: quot$2
+ };
+
+ var xml$1 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ amp: amp$2,
+ apos: apos$1,
+ gt: gt$2,
+ lt: lt$2,
+ quot: quot$2,
+ 'default': xml
+ });
+
+ var decode = {
+ "0": 65533,
+ "128": 8364,
+ "130": 8218,
+ "131": 402,
+ "132": 8222,
+ "133": 8230,
+ "134": 8224,
+ "135": 8225,
+ "136": 710,
+ "137": 8240,
+ "138": 352,
+ "139": 8249,
+ "140": 338,
+ "142": 381,
+ "145": 8216,
+ "146": 8217,
+ "147": 8220,
+ "148": 8221,
+ "149": 8226,
+ "150": 8211,
+ "151": 8212,
+ "152": 732,
+ "153": 8482,
+ "154": 353,
+ "155": 8250,
+ "156": 339,
+ "158": 382,
+ "159": 376
+ };
+
+ var decode$1 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ 'default': decode
+ });
+
+ var require$$0 = getCjsExportFromNamespace(decode$1);
+
+ var decode_codepoint = createCommonjsModule(function (module, exports) {
+ var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var decode_json_1 = __importDefault(require$$0);
+ // modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
+ function decodeCodePoint(codePoint) {
+ if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
+ return "\uFFFD";
+ }
+ if (codePoint in decode_json_1.default) {
+ codePoint = decode_json_1.default[codePoint];
+ }
+ var output = "";
+ if (codePoint > 0xffff) {
+ codePoint -= 0x10000;
+ output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
+ codePoint = 0xdc00 | (codePoint & 0x3ff);
+ }
+ output += String.fromCharCode(codePoint);
+ return output;
+ }
+ exports.default = decodeCodePoint;
+ });
+
+ unwrapExports(decode_codepoint);
+
+ var require$$1 = getCjsExportFromNamespace(entities$1);
+
+ var require$$1$1 = getCjsExportFromNamespace(legacy$1);
+
+ var require$$0$1 = getCjsExportFromNamespace(xml$1);
+
+ var decode$2 = createCommonjsModule(function (module, exports) {
+ var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;
+ var entities_json_1 = __importDefault(require$$1);
+ var legacy_json_1 = __importDefault(require$$1$1);
+ var xml_json_1 = __importDefault(require$$0$1);
+ var decode_codepoint_1 = __importDefault(decode_codepoint);
+ exports.decodeXML = getStrictDecoder(xml_json_1.default);
+ exports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);
+ function getStrictDecoder(map) {
+ var keys = Object.keys(map).join("|");
+ var replace = getReplacer(map);
+ keys += "|#[xX][\\da-fA-F]+|#\\d+";
+ var re = new RegExp("&(?:" + keys + ");", "g");
+ return function (str) { return String(str).replace(re, replace); };
+ }
+ var sorter = function (a, b) { return (a < b ? 1 : -1); };
+ exports.decodeHTML = (function () {
+ var legacy = Object.keys(legacy_json_1.default).sort(sorter);
+ var keys = Object.keys(entities_json_1.default).sort(sorter);
+ for (var i = 0, j = 0; i < keys.length; i++) {
+ if (legacy[j] === keys[i]) {
+ keys[i] += ";?";
+ j++;
+ }
+ else {
+ keys[i] += ";";
+ }
+ }
+ var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g");
+ var replace = getReplacer(entities_json_1.default);
+ function replacer(str) {
+ if (str.substr(-1) !== ";")
+ str += ";";
+ return replace(str);
+ }
+ //TODO consider creating a merged map
+ return function (str) { return String(str).replace(re, replacer); };
+ })();
+ function getReplacer(map) {
+ return function replace(str) {
+ if (str.charAt(1) === "#") {
+ var secondChar = str.charAt(2);
+ if (secondChar === "X" || secondChar === "x") {
+ return decode_codepoint_1.default(parseInt(str.substr(3), 16));
+ }
+ return decode_codepoint_1.default(parseInt(str.substr(2), 10));
+ }
+ return map[str.slice(1, -1)];
+ };
+ }
+ });
+
+ unwrapExports(decode$2);
+ var decode_1 = decode$2.decodeHTML;
+ var decode_2 = decode$2.decodeHTMLStrict;
+ var decode_3 = decode$2.decodeXML;
+
+ var encode$1 = createCommonjsModule(function (module, exports) {
+ var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.escape = exports.encodeHTML = exports.encodeXML = void 0;
+ var xml_json_1 = __importDefault(require$$0$1);
+ var inverseXML = getInverseObj(xml_json_1.default);
+ var xmlReplacer = getInverseReplacer(inverseXML);
+ exports.encodeXML = getInverse(inverseXML, xmlReplacer);
+ var entities_json_1 = __importDefault(require$$1);
+ var inverseHTML = getInverseObj(entities_json_1.default);
+ var htmlReplacer = getInverseReplacer(inverseHTML);
+ exports.encodeHTML = getInverse(inverseHTML, htmlReplacer);
+ function getInverseObj(obj) {
+ return Object.keys(obj)
+ .sort()
+ .reduce(function (inverse, name) {
+ inverse[obj[name]] = "&" + name + ";";
+ return inverse;
+ }, {});
+ }
+ function getInverseReplacer(inverse) {
+ var single = [];
+ var multiple = [];
+ for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {
+ var k = _a[_i];
+ if (k.length === 1) {
+ // Add value to single array
+ single.push("\\" + k);
+ }
+ else {
+ // Add value to multiple array
+ multiple.push(k);
+ }
+ }
+ // Add ranges to single characters.
+ single.sort();
+ for (var start = 0; start < single.length - 1; start++) {
+ // Find the end of a run of characters
+ var end = start;
+ while (end < single.length - 1 &&
+ single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {
+ end += 1;
+ }
+ var count = 1 + end - start;
+ // We want to replace at least three characters
+ if (count < 3)
+ continue;
+ single.splice(start, count, single[start] + "-" + single[end]);
+ }
+ multiple.unshift("[" + single.join("") + "]");
+ return new RegExp(multiple.join("|"), "g");
+ }
+ var reNonASCII = /(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g;
+ function singleCharReplacer(c) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ return "&#x" + c.codePointAt(0).toString(16).toUpperCase() + ";";
+ }
+ function getInverse(inverse, re) {
+ return function (data) {
+ return data
+ .replace(re, function (name) { return inverse[name]; })
+ .replace(reNonASCII, singleCharReplacer);
+ };
+ }
+ var reXmlChars = getInverseReplacer(inverseXML);
+ function escape(data) {
+ return data
+ .replace(reXmlChars, singleCharReplacer)
+ .replace(reNonASCII, singleCharReplacer);
+ }
+ exports.escape = escape;
+ });
+
+ unwrapExports(encode$1);
+ var encode_1$1 = encode$1.escape;
+ var encode_2 = encode$1.encodeHTML;
+ var encode_3 = encode$1.encodeXML;
+
+ var lib = createCommonjsModule(function (module, exports) {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.encode = exports.decodeStrict = exports.decode = void 0;
+
+
+ /**
+ * Decodes a string with entities.
+ *
+ * @param data String to decode.
+ * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
+ */
+ function decode(data, level) {
+ return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTML)(data);
+ }
+ exports.decode = decode;
+ /**
+ * Decodes a string with entities. Does not allow missing trailing semicolons for entities.
+ *
+ * @param data String to decode.
+ * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
+ */
+ function decodeStrict(data, level) {
+ return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTMLStrict)(data);
+ }
+ exports.decodeStrict = decodeStrict;
+ /**
+ * Encodes a string with entities.
+ *
+ * @param data String to encode.
+ * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.
+ */
+ function encode(data, level) {
+ return (!level || level <= 0 ? encode$1.encodeXML : encode$1.encodeHTML)(data);
+ }
+ exports.encode = encode;
+ var encode_2 = encode$1;
+ Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return encode_2.encodeXML; } });
+ Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
+ Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return encode_2.escape; } });
+ // Legacy aliases
+ Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
+ Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_2.encodeHTML; } });
+ var decode_2 = decode$2;
+ Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_2.decodeXML; } });
+ Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
+ Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
+ // Legacy aliases
+ Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
+ Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_2.decodeHTML; } });
+ Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
+ Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });
+ Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_2.decodeXML; } });
+ });
+
+ unwrapExports(lib);
+ var lib_1 = lib.encode;
+ var lib_2 = lib.decodeStrict;
+ var lib_3 = lib.decode;
+ var lib_4 = lib.encodeXML;
+ var lib_5 = lib.encodeHTML;
+ var lib_6 = lib.encodeHTML4;
+ var lib_7 = lib.encodeHTML5;
+ var lib_8 = lib.decodeXML;
+ var lib_9 = lib.decodeHTML;
+ var lib_10 = lib.decodeHTMLStrict;
+ var lib_11 = lib.decodeHTML4;
+ var lib_12 = lib.decodeHTML5;
+ var lib_13 = lib.decodeHTML4Strict;
+ var lib_14 = lib.decodeHTML5Strict;
+ var lib_15 = lib.decodeXMLStrict;
+
+ var C_BACKSLASH = 92;
+
+ var ENTITY = "&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});";
+
+ var TAGNAME = "[A-Za-z][A-Za-z0-9-]*";
+ var ATTRIBUTENAME = "[a-zA-Z_:][a-zA-Z0-9:._-]*";
+ var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+";
+ var SINGLEQUOTEDVALUE = "'[^']*'";
+ var DOUBLEQUOTEDVALUE = '"[^"]*"';
+ var ATTRIBUTEVALUE =
+ "(?:" +
+ UNQUOTEDVALUE +
+ "|" +
+ SINGLEQUOTEDVALUE +
+ "|" +
+ DOUBLEQUOTEDVALUE +
+ ")";
+ var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")";
+ var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)";
+ var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>";
+ var CLOSETAG = "</" + TAGNAME + "\\s*[>]";
+ var HTMLCOMMENT = "<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->";
+ var PROCESSINGINSTRUCTION = "[<][?][\\s\\S]*?[?][>]";
+ var DECLARATION = "<![A-Z]+" + "\\s+[^>]*>";
+ var CDATA = "<!\\[CDATA\\[[\\s\\S]*?\\]\\]>";
+ var HTMLTAG =
+ "(?:" +
+ OPENTAG +
+ "|" +
+ CLOSETAG +
+ "|" +
+ HTMLCOMMENT +
+ "|" +
+ PROCESSINGINSTRUCTION +
+ "|" +
+ DECLARATION +
+ "|" +
+ CDATA +
+ ")";
+ var reHtmlTag = new RegExp("^" + HTMLTAG);
+
+ var reBackslashOrAmp = /[\\&]/;
+
+ var ESCAPABLE = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]";
+
+ var reEntityOrEscapedChar = new RegExp("\\\\" + ESCAPABLE + "|" + ENTITY, "gi");
+
+ var XMLSPECIAL = '[&<>"]';
+
+ var reXmlSpecial = new RegExp(XMLSPECIAL, "g");
+
+ var unescapeChar = function(s) {
+ if (s.charCodeAt(0) === C_BACKSLASH) {
+ return s.charAt(1);
+ } else {
+ return lib_9(s);
+ }
+ };
+
+ // Replace entities and backslash escapes with literal characters.
+ var unescapeString = function(s) {
+ if (reBackslashOrAmp.test(s)) {
+ return s.replace(reEntityOrEscapedChar, unescapeChar);
+ } else {
+ return s;
+ }
+ };
+
+ var normalizeURI = function(uri) {
+ try {
+ return encode_1(uri);
+ } catch (err) {
+ return uri;
+ }
+ };
+
+ var replaceUnsafeChar = function(s) {
+ switch (s) {
+ case "&":
+ return "&";
+ case "<":
+ return "<";
+ case ">":
+ return ">";
+ case '"':
+ return """;
+ default:
+ return s;
+ }
+ };
+
+ var escapeXml = function(s) {
+ if (reXmlSpecial.test(s)) {
+ return s.replace(reXmlSpecial, replaceUnsafeChar);
+ } else {
+ return s;
+ }
+ };
+
+ // derived from https://github.com/mathiasbynens/String.fromCodePoint
+ /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */
+
+ var _fromCodePoint;
+
+ function fromCodePoint(_) {
+ return _fromCodePoint(_);
+ }
+
+ if (String.fromCodePoint) {
+ _fromCodePoint = function(_) {
+ try {
+ return String.fromCodePoint(_);
+ } catch (e) {
+ if (e instanceof RangeError) {
+ return String.fromCharCode(0xfffd);
+ }
+ throw e;
+ }
+ };
+ } else {
+ var stringFromCharCode = String.fromCharCode;
+ var floor = Math.floor;
+ _fromCodePoint = function() {
+ var MAX_SIZE = 0x4000;
+ var codeUnits = [];
+ var highSurrogate;
+ var lowSurrogate;
+ var index = -1;
+ var length = arguments.length;
+ if (!length) {
+ return "";
+ }
+ var result = "";
+ while (++index < length) {
+ var codePoint = Number(arguments[index]);
+ if (
+ !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
+ codePoint < 0 || // not a valid Unicode code point
+ codePoint > 0x10ffff || // not a valid Unicode code point
+ floor(codePoint) !== codePoint // not an integer
+ ) {
+ return String.fromCharCode(0xfffd);
+ }
+ if (codePoint <= 0xffff) {
+ // BMP code point
+ codeUnits.push(codePoint);
+ } else {
+ // Astral code point; split in surrogate halves
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ codePoint -= 0x10000;
+ highSurrogate = (codePoint >> 10) + 0xd800;
+ lowSurrogate = (codePoint % 0x400) + 0xdc00;
+ codeUnits.push(highSurrogate, lowSurrogate);
+ }
+ if (index + 1 === length || codeUnits.length > MAX_SIZE) {
+ result += stringFromCharCode.apply(null, codeUnits);
+ codeUnits.length = 0;
+ }
+ }
+ return result;
+ };
+ }
+
+ /*! http://mths.be/repeat v0.2.0 by @mathias */
+ if (!String.prototype.repeat) {
+ (function() {
+ var defineProperty = (function() {
+ // IE 8 only supports `Object.defineProperty` on DOM elements
+ try {
+ var object = {};
+ var $defineProperty = Object.defineProperty;
+ var result = $defineProperty(object, object, object) && $defineProperty;
+ } catch(error) {}
+ return result;
+ }());
+ var repeat = function(count) {
+ if (this == null) {
+ throw TypeError();
+ }
+ var string = String(this);
+ // `ToInteger`
+ var n = count ? Number(count) : 0;
+ if (n != n) { // better `isNaN`
+ n = 0;
+ }
+ // Account for out-of-bounds indices
+ if (n < 0 || n == Infinity) {
+ throw RangeError();
+ }
+ var result = '';
+ while (n) {
+ if (n % 2 == 1) {
+ result += string;
+ }
+ if (n > 1) {
+ string += string;
+ }
+ n >>= 1;
+ }
+ return result;
+ };
+ if (defineProperty) {
+ defineProperty(String.prototype, 'repeat', {
+ 'value': repeat,
+ 'configurable': true,
+ 'writable': true
+ });
+ } else {
+ String.prototype.repeat = repeat;
+ }
+ }());
+ }
+
+ var normalizeURI$1 = normalizeURI;
+ var unescapeString$1 = unescapeString;
+
+ // Constants for character codes:
+
+ var C_NEWLINE = 10;
+ var C_ASTERISK = 42;
+ var C_UNDERSCORE = 95;
+ var C_BACKTICK = 96;
+ var C_OPEN_BRACKET = 91;
+ var C_CLOSE_BRACKET = 93;
+ var C_LESSTHAN = 60;
+ var C_BANG = 33;
+ var C_BACKSLASH$1 = 92;
+ var C_AMPERSAND = 38;
+ var C_OPEN_PAREN = 40;
+ var C_CLOSE_PAREN = 41;
+ var C_COLON = 58;
+ var C_SINGLEQUOTE = 39;
+ var C_DOUBLEQUOTE = 34;
+
+ // Some regexps used in inline parser:
+
+ var ESCAPABLE$1 = ESCAPABLE;
+ var ESCAPED_CHAR = "\\\\" + ESCAPABLE$1;
+
+ var ENTITY$1 = ENTITY;
+ var reHtmlTag$1 = reHtmlTag;
+
+ var rePunctuation = new RegExp(
+ /^[!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/
+ );
+
+ var reLinkTitle = new RegExp(
+ '^(?:"(' +
+ ESCAPED_CHAR +
+ '|[^"\\x00])*"' +
+ "|" +
+ "'(" +
+ ESCAPED_CHAR +
+ "|[^'\\x00])*'" +
+ "|" +
+ "\\((" +
+ ESCAPED_CHAR +
+ "|[^()\\x00])*\\))"
+ );
+
+ var reLinkDestinationBraces = /^(?:<(?:[^<>\n\\\x00]|\\.)*>)/;
+
+ var reEscapable = new RegExp("^" + ESCAPABLE$1);
+
+ var reEntityHere = new RegExp("^" + ENTITY$1, "i");
+
+ var reTicks = /`+/;
+
+ var reTicksHere = /^`+/;
+
+ var reEllipses = /\.\.\./g;
+
+ var reDash = /--+/g;
+
+ var reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;
+
+ var reAutolink = /^<[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\x00-\x20]*>/i;
+
+ var reSpnl = /^ *(?:\n *)?/;
+
+ var reWhitespaceChar = /^[ \t\n\x0b\x0c\x0d]/;
+
+ var reUnicodeWhitespaceChar = /^\s/;
+
+ var reFinalSpace = / *$/;
+
+ var reInitialSpace = /^ */;
+
+ var reSpaceAtEndOfLine = /^ *(?:\n|$)/;
+
+ var reLinkLabel = /^\[(?:[^\\\[\]]|\\.){0,1000}\]/s;
+
+ // Matches a string of non-special characters.
+ var reMain = /^[^\n`\[\]\\!<&*_'"]+/m;
+
+ var text = function(s) {
+ var node = new Node("text");
+ node._literal = s;
+ return node;
+ };
+
+ // normalize a reference in reference link (remove []s, trim,
+ // collapse internal space, unicode case fold.
+ // See commonmark/commonmark.js#168.
+ var normalizeReference = function(string) {
+ return string
+ .slice(1, string.length - 1)
+ .trim()
+ .replace(/[ \t\r\n]+/, " ")
+ .toLowerCase()
+ .toUpperCase();
+ };
+
+ // INLINE PARSER
+
+ // These are methods of an InlineParser object, defined below.
+ // An InlineParser keeps track of a subject (a string to be
+ // parsed) and a position in that subject.
+
+ // If re matches at current position in the subject, advance
+ // position in subject and return the match; otherwise return null.
+ var match = function(re) {
+ var m = re.exec(this.subject.slice(this.pos));
+ if (m === null) {
+ return null;
+ } else {
+ this.pos += m.index + m[0].length;
+ return m[0];
+ }
+ };
+
+ // Returns the code for the character at the current subject position, or -1
+ // there are no more characters.
+ var peek = function() {
+ if (this.pos < this.subject.length) {
+ return this.subject.charCodeAt(this.pos);
+ } else {
+ return -1;
+ }
+ };
+
+ // Parse zero or more space characters, including at most one newline
+ var spnl = function() {
+ this.match(reSpnl);
+ return true;
+ };
+
+ // All of the parsers below try to match something at the current position
+ // in the subject. If they succeed in matching anything, they
+ // return the inline matched, advancing the subject.
+
+ // Attempt to parse backticks, adding either a backtick code span or a
+ // literal sequence of backticks.
+ var parseBackticks = function(block) {
+ var ticks = this.match(reTicksHere);
+ if (ticks === null) {
+ return false;
+ }
+ var afterOpenTicks = this.pos;
+ var matched;
+ var node;
+ var contents;
+ while ((matched = this.match(reTicks)) !== null) {
+ if (matched === ticks) {
+ node = new Node("code");
+ contents = this.subject
+ .slice(afterOpenTicks, this.pos - ticks.length)
+ .replace(/\n/gm, " ");
+ if (
+ contents.length > 0 &&
+ contents.match(/[^ ]/) !== null &&
+ contents[0] == " " &&
+ contents[contents.length - 1] == " "
+ ) {
+ node._literal = contents.slice(1, contents.length - 1);
+ } else {
+ node._literal = contents;
+ }
+ block.appendChild(node);
+ return true;
+ }
+ }
+ // If we got here, we didn't match a closing backtick sequence.
+ this.pos = afterOpenTicks;
+ block.appendChild(text(ticks));
+ return true;
+ };
+
+ // Parse a backslash-escaped special character, adding either the escaped
+ // character, a hard line break (if the backslash is followed by a newline),
+ // or a literal backslash to the block's children. Assumes current character
+ // is a backslash.
+ var parseBackslash = function(block) {
+ var subj = this.subject;
+ var node;
+ this.pos += 1;
+ if (this.peek() === C_NEWLINE) {
+ this.pos += 1;
+ node = new Node("linebreak");
+ block.appendChild(node);
+ } else if (reEscapable.test(subj.charAt(this.pos))) {
+ block.appendChild(text(subj.charAt(this.pos)));
+ this.pos += 1;
+ } else {
+ block.appendChild(text("\\"));
+ }
+ return true;
+ };
+
+ // Attempt to parse an autolink (URL or email in pointy brackets).
+ var parseAutolink = function(block) {
+ var m;
+ var dest;
+ var node;
+ if ((m = this.match(reEmailAutolink))) {
+ dest = m.slice(1, m.length - 1);
+ node = new Node("link");
+ node._destination = normalizeURI$1("mailto:" + dest);
+ node._title = "";
+ node.appendChild(text(dest));
+ block.appendChild(node);
+ return true;
+ } else if ((m = this.match(reAutolink))) {
+ dest = m.slice(1, m.length - 1);
+ node = new Node("link");
+ node._destination = normalizeURI$1(dest);
+ node._title = "";
+ node.appendChild(text(dest));
+ block.appendChild(node);
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ // Attempt to parse a raw HTML tag.
+ var parseHtmlTag = function(block) {
+ var m = this.match(reHtmlTag$1);
+ if (m === null) {
+ return false;
+ } else {
+ var node = new Node("html_inline");
+ node._literal = m;
+ block.appendChild(node);
+ return true;
+ }
+ };
+
+ // Scan a sequence of characters with code cc, and return information about
+ // the number of delimiters and whether they are positioned such that
+ // they can open and/or close emphasis or strong emphasis. A utility
+ // function for strong/emph parsing.
+ var scanDelims = function(cc) {
+ var numdelims = 0;
+ var char_before, char_after, cc_after;
+ var startpos = this.pos;
+ var left_flanking, right_flanking, can_open, can_close;
+ var after_is_whitespace,
+ after_is_punctuation,
+ before_is_whitespace,
+ before_is_punctuation;
+
+ if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) {
+ numdelims++;
+ this.pos++;
+ } else {
+ while (this.peek() === cc) {
+ numdelims++;
+ this.pos++;
+ }
+ }
+
+ if (numdelims === 0) {
+ return null;
+ }
+
+ char_before = startpos === 0 ? "\n" : this.subject.charAt(startpos - 1);
+
+ cc_after = this.peek();
+ if (cc_after === -1) {
+ char_after = "\n";
+ } else {
+ char_after = fromCodePoint(cc_after);
+ }
+
+ after_is_whitespace = reUnicodeWhitespaceChar.test(char_after);
+ after_is_punctuation = rePunctuation.test(char_after);
+ before_is_whitespace = reUnicodeWhitespaceChar.test(char_before);
+ before_is_punctuation = rePunctuation.test(char_before);
+
+ left_flanking =
+ !after_is_whitespace &&
+ (!after_is_punctuation ||
+ before_is_whitespace ||
+ before_is_punctuation);
+ right_flanking =
+ !before_is_whitespace &&
+ (!before_is_punctuation || after_is_whitespace || after_is_punctuation);
+ if (cc === C_UNDERSCORE) {
+ can_open = left_flanking && (!right_flanking || before_is_punctuation);
+ can_close = right_flanking && (!left_flanking || after_is_punctuation);
+ } else if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) {
+ can_open = left_flanking && !right_flanking;
+ can_close = right_flanking;
+ } else {
+ can_open = left_flanking;
+ can_close = right_flanking;
+ }
+ this.pos = startpos;
+ return { numdelims: numdelims, can_open: can_open, can_close: can_close };
+ };
+
+ // Handle a delimiter marker for emphasis or a quote.
+ var handleDelim = function(cc, block) {
+ var res = this.scanDelims(cc);
+ if (!res) {
+ return false;
+ }
+ var numdelims = res.numdelims;
+ var startpos = this.pos;
+ var contents;
+
+ this.pos += numdelims;
+ if (cc === C_SINGLEQUOTE) {
+ contents = "\u2019";
+ } else if (cc === C_DOUBLEQUOTE) {
+ contents = "\u201C";
+ } else {
+ contents = this.subject.slice(startpos, this.pos);
+ }
+ var node = text(contents);
+ block.appendChild(node);
+
+ // Add entry to stack for this opener
+ if (
+ (res.can_open || res.can_close) &&
+ (this.options.smart || (cc !== C_SINGLEQUOTE && cc !== C_DOUBLEQUOTE))
+ ) {
+ this.delimiters = {
+ cc: cc,
+ numdelims: numdelims,
+ origdelims: numdelims,
+ node: node,
+ previous: this.delimiters,
+ next: null,
+ can_open: res.can_open,
+ can_close: res.can_close
+ };
+ if (this.delimiters.previous !== null) {
+ this.delimiters.previous.next = this.delimiters;
+ }
+ }
+
+ return true;
+ };
+
+ var removeDelimiter = function(delim) {
+ if (delim.previous !== null) {
+ delim.previous.next = delim.next;
+ }
+ if (delim.next === null) {
+ // top of stack
+ this.delimiters = delim.previous;
+ } else {
+ delim.next.previous = delim.previous;
+ }
+ };
+
+ var removeDelimitersBetween = function(bottom, top) {
+ if (bottom.next !== top) {
+ bottom.next = top;
+ top.previous = bottom;
+ }
+ };
+
+ var processEmphasis = function(stack_bottom) {
+ var opener, closer, old_closer;
+ var opener_inl, closer_inl;
+ var tempstack;
+ var use_delims;
+ var tmp, next;
+ var opener_found;
+ var openers_bottom = [];
+ var openers_bottom_index;
+ var odd_match = false;
+
+ for (var i = 0; i < 8; i++) {
+ openers_bottom[i] = stack_bottom;
+ }
+ // find first closer above stack_bottom:
+ closer = this.delimiters;
+ while (closer !== null && closer.previous !== stack_bottom) {
+ closer = closer.previous;
+ }
+ // move forward, looking for closers, and handling each
+ while (closer !== null) {
+ var closercc = closer.cc;
+ if (!closer.can_close) {
+ closer = closer.next;
+ } else {
+ // found emphasis closer. now look back for first matching opener:
+ opener = closer.previous;
+ opener_found = false;
+ switch (closercc) {
+ case C_SINGLEQUOTE:
+ openers_bottom_index = 0;
+ break;
+ case C_DOUBLEQUOTE:
+ openers_bottom_index = 1;
+ break;
+ case C_UNDERSCORE:
+ openers_bottom_index = 2;
+ break;
+ case C_ASTERISK:
+ openers_bottom_index = 3 + (closer.can_open ? 3 : 0)
+ + (closer.origdelims % 3);
+ break;
+ }
+ while (
+ opener !== null &&
+ opener !== stack_bottom &&
+ opener !== openers_bottom[openers_bottom_index]
+ ) {
+ odd_match =
+ (closer.can_open || opener.can_close) &&
+ closer.origdelims % 3 !== 0 &&
+ (opener.origdelims + closer.origdelims) % 3 === 0;
+ if (opener.cc === closer.cc && opener.can_open && !odd_match) {
+ opener_found = true;
+ break;
+ }
+ opener = opener.previous;
+ }
+ old_closer = closer;
+
+ if (closercc === C_ASTERISK || closercc === C_UNDERSCORE) {
+ if (!opener_found) {
+ closer = closer.next;
+ } else {
+ // calculate actual number of delimiters used from closer
+ use_delims =
+ closer.numdelims >= 2 && opener.numdelims >= 2 ? 2 : 1;
+
+ opener_inl = opener.node;
+ closer_inl = closer.node;
+
+ // remove used delimiters from stack elts and inlines
+ opener.numdelims -= use_delims;
+ closer.numdelims -= use_delims;
+ opener_inl._literal = opener_inl._literal.slice(
+ 0,
+ opener_inl._literal.length - use_delims
+ );
+ closer_inl._literal = closer_inl._literal.slice(
+ 0,
+ closer_inl._literal.length - use_delims
+ );
+
+ // build contents for new emph element
+ var emph = new Node(use_delims === 1 ? "emph" : "strong");
+
+ tmp = opener_inl._next;
+ while (tmp && tmp !== closer_inl) {
+ next = tmp._next;
+ tmp.unlink();
+ emph.appendChild(tmp);
+ tmp = next;
+ }
+
+ opener_inl.insertAfter(emph);
+
+ // remove elts between opener and closer in delimiters stack
+ removeDelimitersBetween(opener, closer);
+
+ // if opener has 0 delims, remove it and the inline
+ if (opener.numdelims === 0) {
+ opener_inl.unlink();
+ this.removeDelimiter(opener);
+ }
+
+ if (closer.numdelims === 0) {
+ closer_inl.unlink();
+ tempstack = closer.next;
+ this.removeDelimiter(closer);
+ closer = tempstack;
+ }
+ }
+ } else if (closercc === C_SINGLEQUOTE) {
+ closer.node._literal = "\u2019";
+ if (opener_found) {
+ opener.node._literal = "\u2018";
+ }
+ closer = closer.next;
+ } else if (closercc === C_DOUBLEQUOTE) {
+ closer.node._literal = "\u201D";
+ if (opener_found) {
+ opener.node.literal = "\u201C";
+ }
+ closer = closer.next;
+ }
+ if (!opener_found) {
+ // Set lower bound for future searches for openers:
+ openers_bottom[openers_bottom_index] =
+ old_closer.previous;
+ if (!old_closer.can_open) {
+ // We can remove a closer that can't be an opener,
+ // once we've seen there's no matching opener:
+ this.removeDelimiter(old_closer);
+ }
+ }
+ }
+ }
+
+ // remove all delimiters
+ while (this.delimiters !== null && this.delimiters !== stack_bottom) {
+ this.removeDelimiter(this.delimiters);
+ }
+ };
+
+ // Attempt to parse link title (sans quotes), returning the string
+ // or null if no match.
+ var parseLinkTitle = function() {
+ var title = this.match(reLinkTitle);
+ if (title === null) {
+ return null;
+ } else {
+ // chop off quotes from title and unescape:
+ return unescapeString$1(title.substr(1, title.length - 2));
+ }
+ };
+
+ // Attempt to parse link destination, returning the string or
+ // null if no match.
+ var parseLinkDestination = function() {
+ var res = this.match(reLinkDestinationBraces);
+ if (res === null) {
+ if (this.peek() === C_LESSTHAN) {
+ return null;
+ }
+ // TODO handrolled parser; res should be null or the string
+ var savepos = this.pos;
+ var openparens = 0;
+ var c;
+ while ((c = this.peek()) !== -1) {
+ if (
+ c === C_BACKSLASH$1 &&
+ reEscapable.test(this.subject.charAt(this.pos + 1))
+ ) {
+ this.pos += 1;
+ if (this.peek() !== -1) {
+ this.pos += 1;
+ }
+ } else if (c === C_OPEN_PAREN) {
+ this.pos += 1;
+ openparens += 1;
+ } else if (c === C_CLOSE_PAREN) {
+ if (openparens < 1) {
+ break;
+ } else {
+ this.pos += 1;
+ openparens -= 1;
+ }
+ } else if (reWhitespaceChar.exec(fromCodePoint(c)) !== null) {
+ break;
+ } else {
+ this.pos += 1;
+ }
+ }
+ if (this.pos === savepos && c !== C_CLOSE_PAREN) {
+ return null;
+ }
+ if (openparens !== 0) {
+ return null;
+ }
+ res = this.subject.substr(savepos, this.pos - savepos);
+ return normalizeURI$1(unescapeString$1(res));
+ } else {
+ // chop off surrounding <..>:
+ return normalizeURI$1(unescapeString$1(res.substr(1, res.length - 2)));
+ }
+ };
+
+ // Attempt to parse a link label, returning number of characters parsed.
+ var parseLinkLabel = function() {
+ var m = this.match(reLinkLabel);
+ if (m === null || m.length > 1001) {
+ return 0;
+ } else {
+ return m.length;
+ }
+ };
+
+ // Add open bracket to delimiter stack and add a text node to block's children.
+ var parseOpenBracket = function(block) {
+ var startpos = this.pos;
+ this.pos += 1;
+
+ var node = text("[");
+ block.appendChild(node);
+
+ // Add entry to stack for this opener
+ this.addBracket(node, startpos, false);
+ return true;
+ };
+
+ // IF next character is [, and ! delimiter to delimiter stack and
+ // add a text node to block's children. Otherwise just add a text node.
+ var parseBang = function(block) {
+ var startpos = this.pos;
+ this.pos += 1;
+ if (this.peek() === C_OPEN_BRACKET) {
+ this.pos += 1;
+
+ var node = text("![");
+ block.appendChild(node);
+
+ // Add entry to stack for this opener
+ this.addBracket(node, startpos + 1, true);
+ } else {
+ block.appendChild(text("!"));
+ }
+ return true;
+ };
+
+ // Try to match close bracket against an opening in the delimiter
+ // stack. Add either a link or image, or a plain [ character,
+ // to block's children. If there is a matching delimiter,
+ // remove it from the delimiter stack.
+ var parseCloseBracket = function(block) {
+ var startpos;
+ var is_image;
+ var dest;
+ var title;
+ var matched = false;
+ var reflabel;
+ var opener;
+
+ this.pos += 1;
+ startpos = this.pos;
+
+ // get last [ or ![
+ opener = this.brackets;
+
+ if (opener === null) {
+ // no matched opener, just return a literal
+ block.appendChild(text("]"));
+ return true;
+ }
+
+ if (!opener.active) {
+ // no matched opener, just return a literal
+ block.appendChild(text("]"));
+ // take opener off brackets stack
+ this.removeBracket();
+ return true;
+ }
+
+ // If we got here, open is a potential opener
+ is_image = opener.image;
+
+ // Check to see if we have a link/image
+
+ var savepos = this.pos;
+
+ // Inline link?
+ if (this.peek() === C_OPEN_PAREN) {
+ this.pos++;
+ if (
+ this.spnl() &&
+ (dest = this.parseLinkDestination()) !== null &&
+ this.spnl() &&
+ // make sure there's a space before the title:
+ ((reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) &&
+ (title = this.parseLinkTitle())) ||
+ true) &&
+ this.spnl() &&
+ this.peek() === C_CLOSE_PAREN
+ ) {
+ this.pos += 1;
+ matched = true;
+ } else {
+ this.pos = savepos;
+ }
+ }
+
+ if (!matched) {
+ // Next, see if there's a link label
+ var beforelabel = this.pos;
+ var n = this.parseLinkLabel();
+ if (n > 2) {
+ reflabel = this.subject.slice(beforelabel, beforelabel + n);
+ } else if (!opener.bracketAfter) {
+ // Empty or missing second label means to use the first label as the reference.
+ // The reference must not contain a bracket. If we know there's a bracket, we don't even bother checking it.
+ reflabel = this.subject.slice(opener.index, startpos);
+ }
+ if (n === 0) {
+ // If shortcut reference link, rewind before spaces we skipped.
+ this.pos = savepos;
+ }
+
+ if (reflabel) {
+ // lookup rawlabel in refmap
+ var link = this.refmap[normalizeReference(reflabel)];
+ if (link) {
+ dest = link.destination;
+ title = link.title;
+ matched = true;
+ }
+ }
+ }
+
+ if (matched) {
+ var node = new Node(is_image ? "image" : "link");
+ node._destination = dest;
+ node._title = title || "";
+
+ var tmp, next;
+ tmp = opener.node._next;
+ while (tmp) {
+ next = tmp._next;
+ tmp.unlink();
+ node.appendChild(tmp);
+ tmp = next;
+ }
+ block.appendChild(node);
+ this.processEmphasis(opener.previousDelimiter);
+ this.removeBracket();
+ opener.node.unlink();
+
+ // We remove this bracket and processEmphasis will remove later delimiters.
+ // Now, for a link, we also deactivate earlier link openers.
+ // (no links in links)
+ if (!is_image) {
+ opener = this.brackets;
+ while (opener !== null) {
+ if (!opener.image) {
+ opener.active = false; // deactivate this opener
+ }
+ opener = opener.previous;
+ }
+ }
+
+ return true;
+ } else {
+ // no match
+
+ this.removeBracket(); // remove this opener from stack
+ this.pos = startpos;
+ block.appendChild(text("]"));
+ return true;
+ }
+ };
+
+ var addBracket = function(node, index, image) {
+ if (this.brackets !== null) {
+ this.brackets.bracketAfter = true;
+ }
+ this.brackets = {
+ node: node,
+ previous: this.brackets,
+ previousDelimiter: this.delimiters,
+ index: index,
+ image: image,
+ active: true
+ };
+ };
+
+ var removeBracket = function() {
+ this.brackets = this.brackets.previous;
+ };
+
+ // Attempt to parse an entity.
+ var parseEntity = function(block) {
+ var m;
+ if ((m = this.match(reEntityHere))) {
+ block.appendChild(text(lib_9(m)));
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ // Parse a run of ordinary characters, or a single character with
+ // a special meaning in markdown, as a plain string.
+ var parseString = function(block) {
+ var m;
+ if ((m = this.match(reMain))) {
+ if (this.options.smart) {
+ block.appendChild(
+ text(
+ m
+ .replace(reEllipses, "\u2026")
+ .replace(reDash, function(chars) {
+ var enCount = 0;
+ var emCount = 0;
+ if (chars.length % 3 === 0) {
+ // If divisible by 3, use all em dashes
+ emCount = chars.length / 3;
+ } else if (chars.length % 2 === 0) {
+ // If divisible by 2, use all en dashes
+ enCount = chars.length / 2;
+ } else if (chars.length % 3 === 2) {
+ // If 2 extra dashes, use en dash for last 2; em dashes for rest
+ enCount = 1;
+ emCount = (chars.length - 2) / 3;
+ } else {
+ // Use en dashes for last 4 hyphens; em dashes for rest
+ enCount = 2;
+ emCount = (chars.length - 4) / 3;
+ }
+ return (
+ "\u2014".repeat(emCount) +
+ "\u2013".repeat(enCount)
+ );
+ })
+ )
+ );
+ } else {
+ block.appendChild(text(m));
+ }
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ // Parse a newline. If it was preceded by two spaces, return a hard
+ // line break; otherwise a soft line break.
+ var parseNewline = function(block) {
+ this.pos += 1; // assume we're at a \n
+ // check previous node for trailing spaces
+ var lastc = block._lastChild;
+ if (
+ lastc &&
+ lastc.type === "text" &&
+ lastc._literal[lastc._literal.length - 1] === " "
+ ) {
+ var hardbreak = lastc._literal[lastc._literal.length - 2] === " ";
+ lastc._literal = lastc._literal.replace(reFinalSpace, "");
+ block.appendChild(new Node(hardbreak ? "linebreak" : "softbreak"));
+ } else {
+ block.appendChild(new Node("softbreak"));
+ }
+ this.match(reInitialSpace); // gobble leading spaces in next line
+ return true;
+ };
+
+ // Attempt to parse a link reference, modifying refmap.
+ var parseReference = function(s, refmap) {
+ this.subject = s;
+ this.pos = 0;
+ var rawlabel;
+ var dest;
+ var title;
+ var matchChars;
+ var startpos = this.pos;
+
+ // label:
+ matchChars = this.parseLinkLabel();
+ if (matchChars === 0) {
+ return 0;
+ } else {
+ rawlabel = this.subject.substr(0, matchChars);
+ }
+
+ // colon:
+ if (this.peek() === C_COLON) {
+ this.pos++;
+ } else {
+ this.pos = startpos;
+ return 0;
+ }
+
+ // link url
+ this.spnl();
+
+ dest = this.parseLinkDestination();
+ if (dest === null) {
+ this.pos = startpos;
+ return 0;
+ }
+
+ var beforetitle = this.pos;
+ this.spnl();
+ if (this.pos !== beforetitle) {
+ title = this.parseLinkTitle();
+ }
+ if (title === null) {
+ title = "";
+ // rewind before spaces
+ this.pos = beforetitle;
+ }
+
+ // make sure we're at line end:
+ var atLineEnd = true;
+ if (this.match(reSpaceAtEndOfLine) === null) {
+ if (title === "") {
+ atLineEnd = false;
+ } else {
+ // the potential title we found is not at the line end,
+ // but it could still be a legal link reference if we
+ // discard the title
+ title = "";
+ // rewind before spaces
+ this.pos = beforetitle;
+ // and instead check if the link URL is at the line end
+ atLineEnd = this.match(reSpaceAtEndOfLine) !== null;
+ }
+ }
+
+ if (!atLineEnd) {
+ this.pos = startpos;
+ return 0;
+ }
+
+ var normlabel = normalizeReference(rawlabel);
+ if (normlabel === "") {
+ // label must contain non-whitespace characters
+ this.pos = startpos;
+ return 0;
+ }
+
+ if (!refmap[normlabel]) {
+ refmap[normlabel] = { destination: dest, title: title };
+ }
+ return this.pos - startpos;
+ };
+
+ // Parse the next inline element in subject, advancing subject position.
+ // On success, add the result to block's children and return true.
+ // On failure, return false.
+ var parseInline = function(block) {
+ var res = false;
+ var c = this.peek();
+ if (c === -1) {
+ return false;
+ }
+ switch (c) {
+ case C_NEWLINE:
+ res = this.parseNewline(block);
+ break;
+ case C_BACKSLASH$1:
+ res = this.parseBackslash(block);
+ break;
+ case C_BACKTICK:
+ res = this.parseBackticks(block);
+ break;
+ case C_ASTERISK:
+ case C_UNDERSCORE:
+ res = this.handleDelim(c, block);
+ break;
+ case C_SINGLEQUOTE:
+ case C_DOUBLEQUOTE:
+ res = this.options.smart && this.handleDelim(c, block);
+ break;
+ case C_OPEN_BRACKET:
+ res = this.parseOpenBracket(block);
+ break;
+ case C_BANG:
+ res = this.parseBang(block);
+ break;
+ case C_CLOSE_BRACKET:
+ res = this.parseCloseBracket(block);
+ break;
+ case C_LESSTHAN:
+ res = this.parseAutolink(block) || this.parseHtmlTag(block);
+ break;
+ case C_AMPERSAND:
+ res = this.parseEntity(block);
+ break;
+ default:
+ res = this.parseString(block);
+ break;
+ }
+ if (!res) {
+ this.pos += 1;
+ block.appendChild(text(fromCodePoint(c)));
+ }
+
+ return true;
+ };
+
+ // Parse string content in block into inline children,
+ // using refmap to resolve references.
+ var parseInlines = function(block) {
+ this.subject = block._string_content.trim();
+ this.pos = 0;
+ this.delimiters = null;
+ this.brackets = null;
+ while (this.parseInline(block)) {}
+ block._string_content = null; // allow raw string to be garbage collected
+ this.processEmphasis(null);
+ };
+
+ // The InlineParser object.
+ function InlineParser(options) {
+ return {
+ subject: "",
+ delimiters: null, // used by handleDelim method
+ brackets: null,
+ pos: 0,
+ refmap: {},
+ match: match,
+ peek: peek,
+ spnl: spnl,
+ parseBackticks: parseBackticks,
+ parseBackslash: parseBackslash,
+ parseAutolink: parseAutolink,
+ parseHtmlTag: parseHtmlTag,
+ scanDelims: scanDelims,
+ handleDelim: handleDelim,
+ parseLinkTitle: parseLinkTitle,
+ parseLinkDestination: parseLinkDestination,
+ parseLinkLabel: parseLinkLabel,
+ parseOpenBracket: parseOpenBracket,
+ parseBang: parseBang,
+ parseCloseBracket: parseCloseBracket,
+ addBracket: addBracket,
+ removeBracket: removeBracket,
+ parseEntity: parseEntity,
+ parseString: parseString,
+ parseNewline: parseNewline,
+ parseReference: parseReference,
+ parseInline: parseInline,
+ processEmphasis: processEmphasis,
+ removeDelimiter: removeDelimiter,
+ options: options || {},
+ parse: parseInlines
+ };
+ }
+
+ var CODE_INDENT = 4;
+
+ var C_TAB = 9;
+ var C_NEWLINE$1 = 10;
+ var C_GREATERTHAN = 62;
+ var C_LESSTHAN$1 = 60;
+ var C_SPACE = 32;
+ var C_OPEN_BRACKET$1 = 91;
+
+ var reHtmlBlockOpen = [
+ /./, // dummy for 0
+ /^<(?:script|pre|textarea|style)(?:\s|>|$)/i,
+ /^<!--/,
+ /^<[?]/,
+ /^<![A-Z]/,
+ /^<!\[CDATA\[/,
+ /^<[/]?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[123456]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|[/]?[>]|$)/i,
+ new RegExp("^(?:" + OPENTAG + "|" + CLOSETAG + ")\\s*$", "i")
+ ];
+
+ var reHtmlBlockClose = [
+ /./, // dummy for 0
+ /<\/(?:script|pre|textarea|style)>/i,
+ /-->/,
+ /\?>/,
+ />/,
+ /\]\]>/
+ ];
+
+ var reThematicBreak = /^(?:\*[ \t]*){3,}$|^(?:_[ \t]*){3,}$|^(?:-[ \t]*){3,}$/;
+
+ var reMaybeSpecial = /^[#`~*+_=<>0-9-]/;
+
+ var reNonSpace = /[^ \t\f\v\r\n]/;
+
+ var reBulletListMarker = /^[*+-]/;
+
+ var reOrderedListMarker = /^(\d{1,9})([.)])/;
+
+ var reATXHeadingMarker = /^#{1,6}(?:[ \t]+|$)/;
+
+ var reCodeFence = /^`{3,}(?!.*`)|^~{3,}/;
+
+ var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/;
+
+ var reSetextHeadingLine = /^(?:=+|-+)[ \t]*$/;
+
+ var reLineEnding = /\r\n|\n|\r/;
+
+ // Returns true if string contains only space characters.
+ var isBlank = function(s) {
+ return !reNonSpace.test(s);
+ };
+
+ var isSpaceOrTab = function(c) {
+ return c === C_SPACE || c === C_TAB;
+ };
+
+ var peek$1 = function(ln, pos) {
+ if (pos < ln.length) {
+ return ln.charCodeAt(pos);
+ } else {
+ return -1;
+ }
+ };
+
+ // DOC PARSER
+
+ // These are methods of a Parser object, defined below.
+
+ // Returns true if block ends with a blank line, descending if needed
+ // into lists and sublists.
+ var endsWithBlankLine = function(block) {
+ while (block) {
+ if (block._lastLineBlank) {
+ return true;
+ }
+ var t = block.type;
+ if (!block._lastLineChecked && (t === "list" || t === "item")) {
+ block._lastLineChecked = true;
+ block = block._lastChild;
+ } else {
+ block._lastLineChecked = true;
+ break;
+ }
+ }
+ return false;
+ };
+
+ // Add a line to the block at the tip. We assume the tip
+ // can accept lines -- that check should be done before calling this.
+ var addLine = function() {
+ if (this.partiallyConsumedTab) {
+ this.offset += 1; // skip over tab
+ // add space characters:
+ var charsToTab = 4 - (this.column % 4);
+ this.tip._string_content += " ".repeat(charsToTab);
+ }
+ this.tip._string_content += this.currentLine.slice(this.offset) + "\n";
+ };
+
+ // Add block of type tag as a child of the tip. If the tip can't
+ // accept children, close and finalize it and try its parent,
+ // and so on til we find a block that can accept children.
+ var addChild = function(tag, offset) {
+ while (!this.blocks[this.tip.type].canContain(tag)) {
+ this.finalize(this.tip, this.lineNumber - 1);
+ }
+
+ var column_number = offset + 1; // offset 0 = column 1
+ var newBlock = new Node(tag, [
+ [this.lineNumber, column_number],
+ [0, 0]
+ ]);
+ newBlock._string_content = "";
+ this.tip.appendChild(newBlock);
+ this.tip = newBlock;
+ return newBlock;
+ };
+
+ // Parse a list marker and return data on the marker (type,
+ // start, delimiter, bullet character, padding) or null.
+ var parseListMarker = function(parser, container) {
+ var rest = parser.currentLine.slice(parser.nextNonspace);
+ var match;
+ var nextc;
+ var spacesStartCol;
+ var spacesStartOffset;
+ var data = {
+ type: null,
+ tight: true, // lists are tight by default
+ bulletChar: null,
+ start: null,
+ delimiter: null,
+ padding: null,
+ markerOffset: parser.indent
+ };
+ if (parser.indent >= 4) {
+ return null;
+ }
+ if ((match = rest.match(reBulletListMarker))) {
+ data.type = "bullet";
+ data.bulletChar = match[0][0];
+ } else if (
+ (match = rest.match(reOrderedListMarker)) &&
+ (container.type !== "paragraph" || match[1] == 1)
+ ) {
+ data.type = "ordered";
+ data.start = parseInt(match[1]);
+ data.delimiter = match[2];
+ } else {
+ return null;
+ }
+ // make sure we have spaces after
+ nextc = peek$1(parser.currentLine, parser.nextNonspace + match[0].length);
+ if (!(nextc === -1 || nextc === C_TAB || nextc === C_SPACE)) {
+ return null;
+ }
+
+ // if it interrupts paragraph, make sure first line isn't blank
+ if (
+ container.type === "paragraph" &&
+ !parser.currentLine
+ .slice(parser.nextNonspace + match[0].length)
+ .match(reNonSpace)
+ ) {
+ return null;
+ }
+
+ // we've got a match! advance offset and calculate padding
+ parser.advanceNextNonspace(); // to start of marker
+ parser.advanceOffset(match[0].length, true); // to end of marker
+ spacesStartCol = parser.column;
+ spacesStartOffset = parser.offset;
+ do {
+ parser.advanceOffset(1, true);
+ nextc = peek$1(parser.currentLine, parser.offset);
+ } while (parser.column - spacesStartCol < 5 && isSpaceOrTab(nextc));
+ var blank_item = peek$1(parser.currentLine, parser.offset) === -1;
+ var spaces_after_marker = parser.column - spacesStartCol;
+ if (spaces_after_marker >= 5 || spaces_after_marker < 1 || blank_item) {
+ data.padding = match[0].length + 1;
+ parser.column = spacesStartCol;
+ parser.offset = spacesStartOffset;
+ if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) {
+ parser.advanceOffset(1, true);
+ }
+ } else {
+ data.padding = match[0].length + spaces_after_marker;
+ }
+ return data;
+ };
+
+ // Returns true if the two list items are of the same type,
+ // with the same delimiter and bullet character. This is used
+ // in agglomerating list items into lists.
+ var listsMatch = function(list_data, item_data) {
+ return (
+ list_data.type === item_data.type &&
+ list_data.delimiter === item_data.delimiter &&
+ list_data.bulletChar === item_data.bulletChar
+ );
+ };
+
+ // Finalize and close any unmatched blocks.
+ var closeUnmatchedBlocks = function() {
+ if (!this.allClosed) {
+ // finalize any blocks not matched
+ while (this.oldtip !== this.lastMatchedContainer) {
+ var parent = this.oldtip._parent;
+ this.finalize(this.oldtip, this.lineNumber - 1);
+ this.oldtip = parent;
+ }
+ this.allClosed = true;
+ }
+ };
+
+ // 'finalize' is run when the block is closed.
+ // 'continue' is run to check whether the block is continuing
+ // at a certain line and offset (e.g. whether a block quote
+ // contains a `>`. It returns 0 for matched, 1 for not matched,
+ // and 2 for "we've dealt with this line completely, go to next."
+ var blocks = {
+ document: {
+ continue: function() {
+ return 0;
+ },
+ finalize: function() {
+ return;
+ },
+ canContain: function(t) {
+ return t !== "item";
+ },
+ acceptsLines: false
+ },
+ list: {
+ continue: function() {
+ return 0;
+ },
+ finalize: function(parser, block) {
+ var item = block._firstChild;
+ while (item) {
+ // check for non-final list item ending with blank line:
+ if (endsWithBlankLine(item) && item._next) {
+ block._listData.tight = false;
+ break;
+ }
+ // recurse into children of list item, to see if there are
+ // spaces between any of them:
+ var subitem = item._firstChild;
+ while (subitem) {
+ if (
+ endsWithBlankLine(subitem) &&
+ (item._next || subitem._next)
+ ) {
+ block._listData.tight = false;
+ break;
+ }
+ subitem = subitem._next;
+ }
+ item = item._next;
+ }
+ },
+ canContain: function(t) {
+ return t === "item";
+ },
+ acceptsLines: false
+ },
+ block_quote: {
+ continue: function(parser) {
+ var ln = parser.currentLine;
+ if (
+ !parser.indented &&
+ peek$1(ln, parser.nextNonspace) === C_GREATERTHAN
+ ) {
+ parser.advanceNextNonspace();
+ parser.advanceOffset(1, false);
+ if (isSpaceOrTab(peek$1(ln, parser.offset))) {
+ parser.advanceOffset(1, true);
+ }
+ } else {
+ return 1;
+ }
+ return 0;
+ },
+ finalize: function() {
+ return;
+ },
+ canContain: function(t) {
+ return t !== "item";
+ },
+ acceptsLines: false
+ },
+ item: {
+ continue: function(parser, container) {
+ if (parser.blank) {
+ if (container._firstChild == null) {
+ // Blank line after empty list item
+ return 1;
+ } else {
+ parser.advanceNextNonspace();
+ }
+ } else if (
+ parser.indent >=
+ container._listData.markerOffset + container._listData.padding
+ ) {
+ parser.advanceOffset(
+ container._listData.markerOffset +
+ container._listData.padding,
+ true
+ );
+ } else {
+ return 1;
+ }
+ return 0;
+ },
+ finalize: function() {
+ return;
+ },
+ canContain: function(t) {
+ return t !== "item";
+ },
+ acceptsLines: false
+ },
+ heading: {
+ continue: function() {
+ // a heading can never container > 1 line, so fail to match:
+ return 1;
+ },
+ finalize: function() {
+ return;
+ },
+ canContain: function() {
+ return false;
+ },
+ acceptsLines: false
+ },
+ thematic_break: {
+ continue: function() {
+ // a thematic break can never container > 1 line, so fail to match:
+ return 1;
+ },
+ finalize: function() {
+ return;
+ },
+ canContain: function() {
+ return false;
+ },
+ acceptsLines: false
+ },
+ code_block: {
+ continue: function(parser, container) {
+ var ln = parser.currentLine;
+ var indent = parser.indent;
+ if (container._isFenced) {
+ // fenced
+ var match =
+ indent <= 3 &&
+ ln.charAt(parser.nextNonspace) === container._fenceChar &&
+ ln.slice(parser.nextNonspace).match(reClosingCodeFence);
+ if (match && match[0].length >= container._fenceLength) {
+ // closing fence - we're at end of line, so we can return
+ parser.lastLineLength =
+ parser.offset + indent + match[0].length;
+ parser.finalize(container, parser.lineNumber);
+ return 2;
+ } else {
+ // skip optional spaces of fence offset
+ var i = container._fenceOffset;
+ while (i > 0 && isSpaceOrTab(peek$1(ln, parser.offset))) {
+ parser.advanceOffset(1, true);
+ i--;
+ }
+ }
+ } else {
+ // indented
+ if (indent >= CODE_INDENT) {
+ parser.advanceOffset(CODE_INDENT, true);
+ } else if (parser.blank) {
+ parser.advanceNextNonspace();
+ } else {
+ return 1;
+ }
+ }
+ return 0;
+ },
+ finalize: function(parser, block) {
+ if (block._isFenced) {
+ // fenced
+ // first line becomes info string
+ var content = block._string_content;
+ var newlinePos = content.indexOf("\n");
+ var firstLine = content.slice(0, newlinePos);
+ var rest = content.slice(newlinePos + 1);
+ block.info = unescapeString(firstLine.trim());
+ block._literal = rest;
+ } else {
+ // indented
+ block._literal = block._string_content.replace(
+ /(\n *)+$/,
+ "\n"
+ );
+ }
+ block._string_content = null; // allow GC
+ },
+ canContain: function() {
+ return false;
+ },
+ acceptsLines: true
+ },
+ html_block: {
+ continue: function(parser, container) {
+ return parser.blank &&
+ (container._htmlBlockType === 6 ||
+ container._htmlBlockType === 7)
+ ? 1
+ : 0;
+ },
+ finalize: function(parser, block) {
+ block._literal = block._string_content.replace(/(\n *)+$/, "");
+ block._string_content = null; // allow GC
+ },
+ canContain: function() {
+ return false;
+ },
+ acceptsLines: true
+ },
+ paragraph: {
+ continue: function(parser) {
+ return parser.blank ? 1 : 0;
+ },
+ finalize: function(parser, block) {
+ var pos;
+ var hasReferenceDefs = false;
+
+ // try parsing the beginning as link reference definitions:
+ while (
+ peek$1(block._string_content, 0) === C_OPEN_BRACKET$1 &&
+ (pos = parser.inlineParser.parseReference(
+ block._string_content,
+ parser.refmap
+ ))
+ ) {
+ block._string_content = block._string_content.slice(pos);
+ hasReferenceDefs = true;
+ }
+ if (hasReferenceDefs && isBlank(block._string_content)) {
+ block.unlink();
+ }
+ },
+ canContain: function() {
+ return false;
+ },
+ acceptsLines: true
+ }
+ };
+
+ // block start functions. Return values:
+ // 0 = no match
+ // 1 = matched container, keep going
+ // 2 = matched leaf, no more block starts
+ var blockStarts = [
+ // block quote
+ function(parser) {
+ if (
+ !parser.indented &&
+ peek$1(parser.currentLine, parser.nextNonspace) === C_GREATERTHAN
+ ) {
+ parser.advanceNextNonspace();
+ parser.advanceOffset(1, false);
+ // optional following space
+ if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) {
+ parser.advanceOffset(1, true);
+ }
+ parser.closeUnmatchedBlocks();
+ parser.addChild("block_quote", parser.nextNonspace);
+ return 1;
+ } else {
+ return 0;
+ }
+ },
+
+ // ATX heading
+ function(parser) {
+ var match;
+ if (
+ !parser.indented &&
+ (match = parser.currentLine
+ .slice(parser.nextNonspace)
+ .match(reATXHeadingMarker))
+ ) {
+ parser.advanceNextNonspace();
+ parser.advanceOffset(match[0].length, false);
+ parser.closeUnmatchedBlocks();
+ var container = parser.addChild("heading", parser.nextNonspace);
+ container.level = match[0].trim().length; // number of #s
+ // remove trailing ###s:
+ container._string_content = parser.currentLine
+ .slice(parser.offset)
+ .replace(/^[ \t]*#+[ \t]*$/, "")
+ .replace(/[ \t]+#+[ \t]*$/, "");
+ parser.advanceOffset(parser.currentLine.length - parser.offset);
+ return 2;
+ } else {
+ return 0;
+ }
+ },
+
+ // Fenced code block
+ function(parser) {
+ var match;
+ if (
+ !parser.indented &&
+ (match = parser.currentLine
+ .slice(parser.nextNonspace)
+ .match(reCodeFence))
+ ) {
+ var fenceLength = match[0].length;
+ parser.closeUnmatchedBlocks();
+ var container = parser.addChild("code_block", parser.nextNonspace);
+ container._isFenced = true;
+ container._fenceLength = fenceLength;
+ container._fenceChar = match[0][0];
+ container._fenceOffset = parser.indent;
+ parser.advanceNextNonspace();
+ parser.advanceOffset(fenceLength, false);
+ return 2;
+ } else {
+ return 0;
+ }
+ },
+
+ // HTML block
+ function(parser, container) {
+ if (
+ !parser.indented &&
+ peek$1(parser.currentLine, parser.nextNonspace) === C_LESSTHAN$1
+ ) {
+ var s = parser.currentLine.slice(parser.nextNonspace);
+ var blockType;
+
+ for (blockType = 1; blockType <= 7; blockType++) {
+ if (
+ reHtmlBlockOpen[blockType].test(s) &&
+ (blockType < 7 || (container.type !== "paragraph" &&
+ !(!parser.allClosed && !parser.blank &&
+ parser.tip.type === "paragraph") // maybe lazy
+ ))
+ ) {
+ parser.closeUnmatchedBlocks();
+ // We don't adjust parser.offset;
+ // spaces are part of the HTML block:
+ var b = parser.addChild("html_block", parser.offset);
+ b._htmlBlockType = blockType;
+ return 2;
+ }
+ }
+ }
+
+ return 0;
+ },
+
+ // Setext heading
+ function(parser, container) {
+ var match;
+ if (
+ !parser.indented &&
+ container.type === "paragraph" &&
+ (match = parser.currentLine
+ .slice(parser.nextNonspace)
+ .match(reSetextHeadingLine))
+ ) {
+ parser.closeUnmatchedBlocks();
+ // resolve reference link definitiosn
+ var pos;
+ while (
+ peek$1(container._string_content, 0) === C_OPEN_BRACKET$1 &&
+ (pos = parser.inlineParser.parseReference(
+ container._string_content,
+ parser.refmap
+ ))
+ ) {
+ container._string_content = container._string_content.slice(
+ pos
+ );
+ }
+ if (container._string_content.length > 0) {
+ var heading = new Node("heading", container.sourcepos);
+ heading.level = match[0][0] === "=" ? 1 : 2;
+ heading._string_content = container._string_content;
+ container.insertAfter(heading);
+ container.unlink();
+ parser.tip = heading;
+ parser.advanceOffset(
+ parser.currentLine.length - parser.offset,
+ false
+ );
+ return 2;
+ } else {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ },
+
+ // thematic break
+ function(parser) {
+ if (
+ !parser.indented &&
+ reThematicBreak.test(parser.currentLine.slice(parser.nextNonspace))
+ ) {
+ parser.closeUnmatchedBlocks();
+ parser.addChild("thematic_break", parser.nextNonspace);
+ parser.advanceOffset(
+ parser.currentLine.length - parser.offset,
+ false
+ );
+ return 2;
+ } else {
+ return 0;
+ }
+ },
+
+ // list item
+ function(parser, container) {
+ var data;
+
+ if (
+ (!parser.indented || container.type === "list") &&
+ (data = parseListMarker(parser, container))
+ ) {
+ parser.closeUnmatchedBlocks();
+
+ // add the list if needed
+ if (
+ parser.tip.type !== "list" ||
+ !listsMatch(container._listData, data)
+ ) {
+ container = parser.addChild("list", parser.nextNonspace);
+ container._listData = data;
+ }
+
+ // add the list item
+ container = parser.addChild("item", parser.nextNonspace);
+ container._listData = data;
+ return 1;
+ } else {
+ return 0;
+ }
+ },
+
+ // indented code block
+ function(parser) {
+ if (
+ parser.indented &&
+ parser.tip.type !== "paragraph" &&
+ !parser.blank
+ ) {
+ // indented code
+ parser.advanceOffset(CODE_INDENT, true);
+ parser.closeUnmatchedBlocks();
+ parser.addChild("code_block", parser.offset);
+ return 2;
+ } else {
+ return 0;
+ }
+ }
+ ];
+
+ var advanceOffset = function(count, columns) {
+ var currentLine = this.currentLine;
+ var charsToTab, charsToAdvance;
+ var c;
+ while (count > 0 && (c = currentLine[this.offset])) {
+ if (c === "\t") {
+ charsToTab = 4 - (this.column % 4);
+ if (columns) {
+ this.partiallyConsumedTab = charsToTab > count;
+ charsToAdvance = charsToTab > count ? count : charsToTab;
+ this.column += charsToAdvance;
+ this.offset += this.partiallyConsumedTab ? 0 : 1;
+ count -= charsToAdvance;
+ } else {
+ this.partiallyConsumedTab = false;
+ this.column += charsToTab;
+ this.offset += 1;
+ count -= 1;
+ }
+ } else {
+ this.partiallyConsumedTab = false;
+ this.offset += 1;
+ this.column += 1; // assume ascii; block starts are ascii
+ count -= 1;
+ }
+ }
+ };
+
+ var advanceNextNonspace = function() {
+ this.offset = this.nextNonspace;
+ this.column = this.nextNonspaceColumn;
+ this.partiallyConsumedTab = false;
+ };
+
+ var findNextNonspace = function() {
+ var currentLine = this.currentLine;
+ var i = this.offset;
+ var cols = this.column;
+ var c;
+
+ while ((c = currentLine.charAt(i)) !== "") {
+ if (c === " ") {
+ i++;
+ cols++;
+ } else if (c === "\t") {
+ i++;
+ cols += 4 - (cols % 4);
+ } else {
+ break;
+ }
+ }
+ this.blank = c === "\n" || c === "\r" || c === "";
+ this.nextNonspace = i;
+ this.nextNonspaceColumn = cols;
+ this.indent = this.nextNonspaceColumn - this.column;
+ this.indented = this.indent >= CODE_INDENT;
+ };
+
+ // Analyze a line of text and update the document appropriately.
+ // We parse markdown text by calling this on each line of input,
+ // then finalizing the document.
+ var incorporateLine = function(ln) {
+ var all_matched = true;
+ var t;
+
+ var container = this.doc;
+ this.oldtip = this.tip;
+ this.offset = 0;
+ this.column = 0;
+ this.blank = false;
+ this.partiallyConsumedTab = false;
+ this.lineNumber += 1;
+
+ // replace NUL characters for security
+ if (ln.indexOf("\u0000") !== -1) {
+ ln = ln.replace(/\0/g, "\uFFFD");
+ }
+
+ this.currentLine = ln;
+
+ // For each containing block, try to parse the associated line start.
+ // Bail out on failure: container will point to the last matching block.
+ // Set all_matched to false if not all containers match.
+ var lastChild;
+ while ((lastChild = container._lastChild) && lastChild._open) {
+ container = lastChild;
+
+ this.findNextNonspace();
+
+ switch (this.blocks[container.type].continue(this, container)) {
+ case 0: // we've matched, keep going
+ break;
+ case 1: // we've failed to match a block
+ all_matched = false;
+ break;
+ case 2: // we've hit end of line for fenced code close and can return
+ return;
+ default:
+ throw "continue returned illegal value, must be 0, 1, or 2";
+ }
+ if (!all_matched) {
+ container = container._parent; // back up to last matching block
+ break;
+ }
+ }
+
+ this.allClosed = container === this.oldtip;
+ this.lastMatchedContainer = container;
+
+ var matchedLeaf =
+ container.type !== "paragraph" && blocks[container.type].acceptsLines;
+ var starts = this.blockStarts;
+ var startsLen = starts.length;
+ // Unless last matched container is a code block, try new container starts,
+ // adding children to the last matched container:
+ while (!matchedLeaf) {
+ this.findNextNonspace();
+
+ // this is a little performance optimization:
+ if (
+ !this.indented &&
+ !reMaybeSpecial.test(ln.slice(this.nextNonspace))
+ ) {
+ this.advanceNextNonspace();
+ break;
+ }
+
+ var i = 0;
+ while (i < startsLen) {
+ var res = starts[i](this, container);
+ if (res === 1) {
+ container = this.tip;
+ break;
+ } else if (res === 2) {
+ container = this.tip;
+ matchedLeaf = true;
+ break;
+ } else {
+ i++;
+ }
+ }
+
+ if (i === startsLen) {
+ // nothing matched
+ this.advanceNextNonspace();
+ break;
+ }
+ }
+
+ // What remains at the offset is a text line. Add the text to the
+ // appropriate container.
+
+ // First check for a lazy paragraph continuation:
+ if (!this.allClosed && !this.blank && this.tip.type === "paragraph") {
+ // lazy paragraph continuation
+ this.addLine();
+ } else {
+ // not a lazy continuation
+
+ // finalize any blocks not matched
+ this.closeUnmatchedBlocks();
+ if (this.blank && container.lastChild) {
+ container.lastChild._lastLineBlank = true;
+ }
+
+ t = container.type;
+
+ // Block quote lines are never blank as they start with >
+ // and we don't count blanks in fenced code for purposes of tight/loose
+ // lists or breaking out of lists. We also don't set _lastLineBlank
+ // on an empty list item, or if we just closed a fenced block.
+ var lastLineBlank =
+ this.blank &&
+ !(
+ t === "block_quote" ||
+ (t === "code_block" && container._isFenced) ||
+ (t === "item" &&
+ !container._firstChild &&
+ container.sourcepos[0][0] === this.lineNumber)
+ );
+
+ // propagate lastLineBlank up through parents:
+ var cont = container;
+ while (cont) {
+ cont._lastLineBlank = lastLineBlank;
+ cont = cont._parent;
+ }
+
+ if (this.blocks[t].acceptsLines) {
+ this.addLine();
+ // if HtmlBlock, check for end condition
+ if (
+ t === "html_block" &&
+ container._htmlBlockType >= 1 &&
+ container._htmlBlockType <= 5 &&
+ reHtmlBlockClose[container._htmlBlockType].test(
+ this.currentLine.slice(this.offset)
+ )
+ ) {
+ this.lastLineLength = ln.length;
+ this.finalize(container, this.lineNumber);
+ }
+ } else if (this.offset < ln.length && !this.blank) {
+ // create paragraph container for line
+ container = this.addChild("paragraph", this.offset);
+ this.advanceNextNonspace();
+ this.addLine();
+ }
+ }
+ this.lastLineLength = ln.length;
+ };
+
+ // Finalize a block. Close it and do any necessary postprocessing,
+ // e.g. creating string_content from strings, setting the 'tight'
+ // or 'loose' status of a list, and parsing the beginnings
+ // of paragraphs for reference definitions. Reset the tip to the
+ // parent of the closed block.
+ var finalize = function(block, lineNumber) {
+ var above = block._parent;
+ block._open = false;
+ block.sourcepos[1] = [lineNumber, this.lastLineLength];
+
+ this.blocks[block.type].finalize(this, block);
+
+ this.tip = above;
+ };
+
+ // Walk through a block & children recursively, parsing string content
+ // into inline content where appropriate.
+ var processInlines = function(block) {
+ var node, event, t;
+ var walker = block.walker();
+ this.inlineParser.refmap = this.refmap;
+ this.inlineParser.options = this.options;
+ while ((event = walker.next())) {
+ node = event.node;
+ t = node.type;
+ if (!event.entering && (t === "paragraph" || t === "heading")) {
+ this.inlineParser.parse(node);
+ }
+ }
+ };
+
+ var Document = function() {
+ var doc = new Node("document", [
+ [1, 1],
+ [0, 0]
+ ]);
+ return doc;
+ };
+
+ // The main parsing function. Returns a parsed document AST.
+ var parse = function(input) {
+ this.doc = new Document();
+ this.tip = this.doc;
+ this.refmap = {};
+ this.lineNumber = 0;
+ this.lastLineLength = 0;
+ this.offset = 0;
+ this.column = 0;
+ this.lastMatchedContainer = this.doc;
+ this.currentLine = "";
+ if (this.options.time) {
+ console.time("preparing input");
+ }
+ var lines = input.split(reLineEnding);
+ var len = lines.length;
+ if (input.charCodeAt(input.length - 1) === C_NEWLINE$1) {
+ // ignore last blank line created by final newline
+ len -= 1;
+ }
+ if (this.options.time) {
+ console.timeEnd("preparing input");
+ }
+ if (this.options.time) {
+ console.time("block parsing");
+ }
+ for (var i = 0; i < len; i++) {
+ this.incorporateLine(lines[i]);
+ }
+ while (this.tip) {
+ this.finalize(this.tip, len);
+ }
+ if (this.options.time) {
+ console.timeEnd("block parsing");
+ }
+ if (this.options.time) {
+ console.time("inline parsing");
+ }
+ this.processInlines(this.doc);
+ if (this.options.time) {
+ console.timeEnd("inline parsing");
+ }
+ return this.doc;
+ };
+
+ // The Parser object.
+ function Parser(options) {
+ return {
+ doc: new Document(),
+ blocks: blocks,
+ blockStarts: blockStarts,
+ tip: this.doc,
+ oldtip: this.doc,
+ currentLine: "",
+ lineNumber: 0,
+ offset: 0,
+ column: 0,
+ nextNonspace: 0,
+ nextNonspaceColumn: 0,
+ indent: 0,
+ indented: false,
+ blank: false,
+ partiallyConsumedTab: false,
+ allClosed: true,
+ lastMatchedContainer: this.doc,
+ refmap: {},
+ lastLineLength: 0,
+ inlineParser: new InlineParser(options),
+ findNextNonspace: findNextNonspace,
+ advanceOffset: advanceOffset,
+ advanceNextNonspace: advanceNextNonspace,
+ addLine: addLine,
+ addChild: addChild,
+ incorporateLine: incorporateLine,
+ finalize: finalize,
+ processInlines: processInlines,
+ closeUnmatchedBlocks: closeUnmatchedBlocks,
+ parse: parse,
+ options: options || {}
+ };
+ }
+
+ function Renderer() {}
+
+ /**
+ * Walks the AST and calls member methods for each Node type.
+ *
+ * @param ast {Node} The root of the abstract syntax tree.
+ */
+ function render(ast) {
+ var walker = ast.walker(),
+ event,
+ type;
+
+ this.buffer = "";
+ this.lastOut = "\n";
+
+ while ((event = walker.next())) {
+ type = event.node.type;
+ if (this[type]) {
+ this[type](event.node, event.entering);
+ }
+ }
+ return this.buffer;
+ }
+
+ /**
+ * Concatenate a literal string to the buffer.
+ *
+ * @param str {String} The string to concatenate.
+ */
+ function lit(str) {
+ this.buffer += str;
+ this.lastOut = str;
+ }
+
+ /**
+ * Output a newline to the buffer.
+ */
+ function cr() {
+ if (this.lastOut !== "\n") {
+ this.lit("\n");
+ }
+ }
+
+ /**
+ * Concatenate a string to the buffer possibly escaping the content.
+ *
+ * Concrete renderer implementations should override this method.
+ *
+ * @param str {String} The string to concatenate.
+ */
+ function out(str) {
+ this.lit(str);
+ }
+
+ /**
+ * Escape a string for the target renderer.
+ *
+ * Abstract function that should be implemented by concrete
+ * renderer implementations.
+ *
+ * @param str {String} The string to escape.
+ */
+ function esc(str) {
+ return str;
+ }
+
+ Renderer.prototype.render = render;
+ Renderer.prototype.out = out;
+ Renderer.prototype.lit = lit;
+ Renderer.prototype.cr = cr;
+ Renderer.prototype.esc = esc;
+
+ var reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i;
+ var reSafeDataProtocol = /^data:image\/(?:png|gif|jpeg|webp)/i;
+
+ var potentiallyUnsafe = function(url) {
+ return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url);
+ };
+
+ // Helper function to produce an HTML tag.
+ function tag(name, attrs, selfclosing) {
+ if (this.disableTags > 0) {
+ return;
+ }
+ this.buffer += "<" + name;
+ if (attrs && attrs.length > 0) {
+ var i = 0;
+ var attrib;
+ while ((attrib = attrs[i]) !== undefined) {
+ this.buffer += " " + attrib[0] + '="' + attrib[1] + '"';
+ i++;
+ }
+ }
+ if (selfclosing) {
+ this.buffer += " /";
+ }
+ this.buffer += ">";
+ this.lastOut = ">";
+ }
+
+ function HtmlRenderer(options) {
+ options = options || {};
+ // by default, soft breaks are rendered as newlines in HTML
+ options.softbreak = options.softbreak || "\n";
+ // set to "<br />" to make them hard breaks
+ // set to " " if you want to ignore line wrapping in source
+ this.esc = options.esc || escapeXml;
+ // escape html with a custom function
+ // else use escapeXml
+
+ this.disableTags = 0;
+ this.lastOut = "\n";
+ this.options = options;
+ }
+
+ /* Node methods */
+
+ function text$1(node) {
+ this.out(node.literal);
+ }
+
+ function softbreak() {
+ this.lit(this.options.softbreak);
+ }
+
+ function linebreak() {
+ this.tag("br", [], true);
+ this.cr();
+ }
+
+ function link(node, entering) {
+ var attrs = this.attrs(node);
+ if (entering) {
+ if (!(this.options.safe && potentiallyUnsafe(node.destination))) {
+ attrs.push(["href", this.esc(node.destination)]);
+ }
+ if (node.title) {
+ attrs.push(["title", this.esc(node.title)]);
+ }
+ this.tag("a", attrs);
+ } else {
+ this.tag("/a");
+ }
+ }
+
+ function image$1(node, entering) {
+ if (entering) {
+ if (this.disableTags === 0) {
+ if (this.options.safe && potentiallyUnsafe(node.destination)) {
+ this.lit('<img src="" alt="');
+ } else {
+ this.lit('<img src="' + this.esc(node.destination) + '" alt="');
+ }
+ }
+ this.disableTags += 1;
+ } else {
+ this.disableTags -= 1;
+ if (this.disableTags === 0) {
+ if (node.title) {
+ this.lit('" title="' + this.esc(node.title));
+ }
+ this.lit('" />');
+ }
+ }
+ }
+
+ function emph(node, entering) {
+ this.tag(entering ? "em" : "/em");
+ }
+
+ function strong(node, entering) {
+ this.tag(entering ? "strong" : "/strong");
+ }
+
+ function paragraph(node, entering) {
+ var grandparent = node.parent.parent,
+ attrs = this.attrs(node);
+ if (grandparent !== null && grandparent.type === "list") {
+ if (grandparent.listTight) {
+ return;
+ }
+ }
+ if (entering) {
+ this.cr();
+ this.tag("p", attrs);
+ } else {
+ this.tag("/p");
+ this.cr();
+ }
+ }
+
+ function heading(node, entering) {
+ var tagname = "h" + node.level,
+ attrs = this.attrs(node);
+ if (entering) {
+ this.cr();
+ this.tag(tagname, attrs);
+ } else {
+ this.tag("/" + tagname);
+ this.cr();
+ }
+ }
+
+ function code(node) {
+ this.tag("code");
+ this.out(node.literal);
+ this.tag("/code");
+ }
+
+ function code_block(node) {
+ var info_words = node.info ? node.info.split(/\s+/) : [],
+ attrs = this.attrs(node);
+ if (info_words.length > 0 && info_words[0].length > 0) {
+ attrs.push(["class", "language-" + this.esc(info_words[0])]);
+ }
+ this.cr();
+ this.tag("pre");
+ this.tag("code", attrs);
+ this.out(node.literal);
+ this.tag("/code");
+ this.tag("/pre");
+ this.cr();
+ }
+
+ function thematic_break(node) {
+ var attrs = this.attrs(node);
+ this.cr();
+ this.tag("hr", attrs, true);
+ this.cr();
+ }
+
+ function block_quote(node, entering) {
+ var attrs = this.attrs(node);
+ if (entering) {
+ this.cr();
+ this.tag("blockquote", attrs);
+ this.cr();
+ } else {
+ this.cr();
+ this.tag("/blockquote");
+ this.cr();
+ }
+ }
+
+ function list(node, entering) {
+ var tagname = node.listType === "bullet" ? "ul" : "ol",
+ attrs = this.attrs(node);
+
+ if (entering) {
+ var start = node.listStart;
+ if (start !== null && start !== 1) {
+ attrs.push(["start", start.toString()]);
+ }
+ this.cr();
+ this.tag(tagname, attrs);
+ this.cr();
+ } else {
+ this.cr();
+ this.tag("/" + tagname);
+ this.cr();
+ }
+ }
+
+ function item(node, entering) {
+ var attrs = this.attrs(node);
+ if (entering) {
+ this.tag("li", attrs);
+ } else {
+ this.tag("/li");
+ this.cr();
+ }
+ }
+
+ function html_inline(node) {
+ if (this.options.safe) {
+ this.lit("<!-- raw HTML omitted -->");
+ } else {
+ this.lit(node.literal);
+ }
+ }
+
+ function html_block(node) {
+ this.cr();
+ if (this.options.safe) {
+ this.lit("<!-- raw HTML omitted -->");
+ } else {
+ this.lit(node.literal);
+ }
+ this.cr();
+ }
+
+ function custom_inline(node, entering) {
+ if (entering && node.onEnter) {
+ this.lit(node.onEnter);
+ } else if (!entering && node.onExit) {
+ this.lit(node.onExit);
+ }
+ }
+
+ function custom_block(node, entering) {
+ this.cr();
+ if (entering && node.onEnter) {
+ this.lit(node.onEnter);
+ } else if (!entering && node.onExit) {
+ this.lit(node.onExit);
+ }
+ this.cr();
+ }
+
+ /* Helper methods */
+
+ function out$1(s) {
+ this.lit(this.esc(s));
+ }
+
+ function attrs(node) {
+ var att = [];
+ if (this.options.sourcepos) {
+ var pos = node.sourcepos;
+ if (pos) {
+ att.push([
+ "data-sourcepos",
+ String(pos[0][0]) +
+ ":" +
+ String(pos[0][1]) +
+ "-" +
+ String(pos[1][0]) +
+ ":" +
+ String(pos[1][1])
+ ]);
+ }
+ }
+ return att;
+ }
+
+ // quick browser-compatible inheritance
+ HtmlRenderer.prototype = Object.create(Renderer.prototype);
+
+ HtmlRenderer.prototype.text = text$1;
+ HtmlRenderer.prototype.html_inline = html_inline;
+ HtmlRenderer.prototype.html_block = html_block;
+ HtmlRenderer.prototype.softbreak = softbreak;
+ HtmlRenderer.prototype.linebreak = linebreak;
+ HtmlRenderer.prototype.link = link;
+ HtmlRenderer.prototype.image = image$1;
+ HtmlRenderer.prototype.emph = emph;
+ HtmlRenderer.prototype.strong = strong;
+ HtmlRenderer.prototype.paragraph = paragraph;
+ HtmlRenderer.prototype.heading = heading;
+ HtmlRenderer.prototype.code = code;
+ HtmlRenderer.prototype.code_block = code_block;
+ HtmlRenderer.prototype.thematic_break = thematic_break;
+ HtmlRenderer.prototype.block_quote = block_quote;
+ HtmlRenderer.prototype.list = list;
+ HtmlRenderer.prototype.item = item;
+ HtmlRenderer.prototype.custom_inline = custom_inline;
+ HtmlRenderer.prototype.custom_block = custom_block;
+
+ HtmlRenderer.prototype.esc = escapeXml;
+
+ HtmlRenderer.prototype.out = out$1;
+ HtmlRenderer.prototype.tag = tag;
+ HtmlRenderer.prototype.attrs = attrs;
+
+ var reXMLTag = /\<[^>]*\>/;
+
+ function toTagName(s) {
+ return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
+ }
+
+ function XmlRenderer(options) {
+ options = options || {};
+
+ this.disableTags = 0;
+ this.lastOut = "\n";
+
+ this.indentLevel = 0;
+ this.indent = " ";
+
+ this.esc = options.esc || escapeXml;
+ // escape html with a custom function
+ // else use escapeXml
+
+ this.options = options;
+ }
+
+ function render$1(ast) {
+ this.buffer = "";
+
+ var attrs;
+ var tagname;
+ var walker = ast.walker();
+ var event, node, entering;
+ var container;
+ var selfClosing;
+ var nodetype;
+
+ var options = this.options;
+
+ if (options.time) {
+ console.time("rendering");
+ }
+
+ this.buffer += '<?xml version="1.0" encoding="UTF-8"?>\n';
+ this.buffer += '<!DOCTYPE document SYSTEM "CommonMark.dtd">\n';
+
+ while ((event = walker.next())) {
+ entering = event.entering;
+ node = event.node;
+ nodetype = node.type;
+
+ container = node.isContainer;
+
+ selfClosing =
+ nodetype === "thematic_break" ||
+ nodetype === "linebreak" ||
+ nodetype === "softbreak";
+
+ tagname = toTagName(nodetype);
+
+ if (entering) {
+ attrs = [];
+
+ switch (nodetype) {
+ case "document":
+ attrs.push(["xmlns", "http://commonmark.org/xml/1.0"]);
+ break;
+ case "list":
+ if (node.listType !== null) {
+ attrs.push(["type", node.listType.toLowerCase()]);
+ }
+ if (node.listStart !== null) {
+ attrs.push(["start", String(node.listStart)]);
+ }
+ if (node.listTight !== null) {
+ attrs.push([
+ "tight",
+ node.listTight ? "true" : "false"
+ ]);
+ }
+ var delim = node.listDelimiter;
+ if (delim !== null) {
+ var delimword = "";
+ if (delim === ".") {
+ delimword = "period";
+ } else {
+ delimword = "paren";
+ }
+ attrs.push(["delimiter", delimword]);
+ }
+ break;
+ case "code_block":
+ if (node.info) {
+ attrs.push(["info", node.info]);
+ }
+ break;
+ case "heading":
+ attrs.push(["level", String(node.level)]);
+ break;
+ case "link":
+ case "image":
+ attrs.push(["destination", node.destination]);
+ attrs.push(["title", node.title]);
+ break;
+ case "custom_inline":
+ case "custom_block":
+ attrs.push(["on_enter", node.onEnter]);
+ attrs.push(["on_exit", node.onExit]);
+ break;
+ }
+ if (options.sourcepos) {
+ var pos = node.sourcepos;
+ if (pos) {
+ attrs.push([
+ "sourcepos",
+ String(pos[0][0]) +
+ ":" +
+ String(pos[0][1]) +
+ "-" +
+ String(pos[1][0]) +
+ ":" +
+ String(pos[1][1])
+ ]);
+ }
+ }
+
+ this.cr();
+ this.out(this.tag(tagname, attrs, selfClosing));
+ if (container) {
+ this.indentLevel += 1;
+ } else if (!container && !selfClosing) {
+ var lit = node.literal;
+ if (lit) {
+ this.out(this.esc(lit));
+ }
+ this.out(this.tag("/" + tagname));
+ }
+ } else {
+ this.indentLevel -= 1;
+ this.cr();
+ this.out(this.tag("/" + tagname));
+ }
+ }
+ if (options.time) {
+ console.timeEnd("rendering");
+ }
+ this.buffer += "\n";
+ return this.buffer;
+ }
+
+ function out$2(s) {
+ if (this.disableTags > 0) {
+ this.buffer += s.replace(reXMLTag, "");
+ } else {
+ this.buffer += s;
+ }
+ this.lastOut = s;
+ }
+
+ function cr$1() {
+ if (this.lastOut !== "\n") {
+ this.buffer += "\n";
+ this.lastOut = "\n";
+ for (var i = this.indentLevel; i > 0; i--) {
+ this.buffer += this.indent;
+ }
+ }
+ }
+
+ // Helper function to produce an XML tag.
+ function tag$1(name, attrs, selfclosing) {
+ var result = "<" + name;
+ if (attrs && attrs.length > 0) {
+ var i = 0;
+ var attrib;
+ while ((attrib = attrs[i]) !== undefined) {
+ result += " " + attrib[0] + '="' + this.esc(attrib[1]) + '"';
+ i++;
+ }
+ }
+ if (selfclosing) {
+ result += " /";
+ }
+ result += ">";
+ return result;
+ }
+
+ // quick browser-compatible inheritance
+ XmlRenderer.prototype = Object.create(Renderer.prototype);
+
+ XmlRenderer.prototype.render = render$1;
+ XmlRenderer.prototype.out = out$2;
+ XmlRenderer.prototype.cr = cr$1;
+ XmlRenderer.prototype.tag = tag$1;
+ XmlRenderer.prototype.esc = escapeXml;
+
+ exports.HtmlRenderer = HtmlRenderer;
+ exports.Node = Node;
+ exports.Parser = Parser;
+ exports.Renderer = Renderer;
+ exports.XmlRenderer = XmlRenderer;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
lib/docs/index.html
@@ -24,6 +24,7 @@
--search-bg-color: #f3f3f3;
--search-bg-color-focus: #ffffff;
--search-sh-color: rgba(0, 0, 0, 0.18);
+ --search-other-results-color: rgb(100, 100, 100);
--help-sh-color: rgba(0, 0, 0, 0.75);
--help-bg-color: #aaa;
}
@@ -83,6 +84,7 @@
.flex-right {
display: flex;
+ flex-direction: column;
overflow: auto;
-webkit-overflow-scrolling: touch;
flex-grow: 1;
@@ -200,7 +202,7 @@
}
#guides {
- padding: 1rem 0.7rem 2.4rem 1.4rem;
+ padding: 0rem 0.7rem 2.4rem 1.4rem;
box-sizing: border-box;
font-size: 1rem;
background-color: var(--bg-color);
@@ -209,7 +211,7 @@
/* docs section */
.docs {
- padding: 1rem 0.7rem 2.4rem 1.4rem;
+ padding: 0rem 0.7rem 2.4rem 1.4rem;
font-size: 1rem;
background-color: var(--bg-color);
overflow-wrap: break-word;
@@ -247,7 +249,38 @@
top: 5px;
left: 5px;
}
-
+
+ .other-results {
+ line-height: 1em;
+ position: relative;
+ outline: 0;
+ border: 0;
+ color: var(--search-other-results-color);
+ text-align: center;
+ height: 1.5em;
+ opacity: .5;
+ }
+ .other-results:before {
+ content: '';
+ background: var(--search-other-results-color);
+ position: absolute;
+ left: 0;
+ top: 50%;
+ width: 100%;
+ height: 1px;
+ }
+
+ .other-results:after {
+ content: "other results";
+ position: relative;
+ display: inline-block;
+ padding: 0 .5em;
+ line-height: 1.5em;
+ color: var(--search-other-results-color);
+ background-color: var(--bg-color);
+ }
+
+
.docs a {
color: var(--link-color);
}
@@ -505,6 +538,7 @@
--search-bg-color: #3c3c3c;
--search-bg-color-focus: #000;
--search-sh-color: rgba(255, 255, 255, 0.28);
+ --search-other-results-color: rgba(255, 255, 255, 0.28);
--help-sh-color: rgba(142, 142, 142, 0.5);
--help-bg-color: #333;
}
@@ -717,22 +751,38 @@
<h2><span>Zig Version</span></h2>
<p class="str" id="tdZigVer"></p>
</div>
- <div>
- <input id="privDeclsBox" type="checkbox"/>
- <label for="privDeclsBox">Internal Doc Mode</label>
- </div>
</div>
</nav>
</div>
<div class="flex-right">
+ <div class="wrap">
+ <section class="docs" style="padding-top: 1.5rem; padding-bottom:0;">
+ <div style="position: relative">
+ <span id="searchPlaceholder"><kbd>s</kbd> to search, <kbd>?</kbd> for more options</span>
+ <input type="search" class="search" id="search" autocomplete="off" spellcheck="false" disabled>
+ </div>
+ </section>
+ </div>
+ <div id="sectSearchResults" class="docs hidden">
+ <h2>Search Results</h2>
+ <ul id="listSearchResults"></ul>
+ <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
+ </div>
+ <div id="sectSearchNoResults" class="docs hidden">
+ <h2>No Results Found</h2>
+ <p>Here are some things you can try:</p>
+ <ul>
+ <li>Check out the <a id="langRefLink">Language Reference</a> for the language itself.</li>
+ <li>Check out the <a href="https://ziglang.org/learn/">Learn page</a> for other helpful resources for learning Zig.</li>
+ <li>Use your search engine.</li>
+ </ul>
+ <p>Press <kbd>?</kbd> to see keyboard shortcuts and <kbd>Esc</kbd> to return.</p>
+ </div>
<div id="guides" class="wrap hidden">
+ <div id="activeGuide" class="hidden"></div>
</div>
<div id="docs" class="wrap hidden">
<section class="docs">
- <div style="position: relative">
- <span id="searchPlaceholder"><kbd>s</kbd> to search, <kbd>?</kbd> for more options</span>
- <input type="search" class="search" id="search" autocomplete="off" spellcheck="false" disabled>
- </div>
<p id="status">Loading...</p>
<div id="sectNav" class="hidden"><ul id="listNav"></ul></div>
<div id="fnProto" class="hidden">
@@ -762,21 +812,6 @@
</div>
<div id="tableFnErrors"><dl id="listFnErrors"></dl></div>
</div>
- <div id="sectSearchResults" class="hidden">
- <h2>Search Results</h2>
- <ul id="listSearchResults"></ul>
- <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
- </div>
- <div id="sectSearchNoResults" class="hidden">
- <h2>No Results Found</h2>
- <p>Here are some things you can try:</p>
- <ul>
- <li>Check out the <a id="langRefLink">Language Reference</a> for the language itself.</li>
- <li>Check out the <a href="https://ziglang.org/learn/">Learn page</a> for other helpful resources for learning Zig.</li>
- <li>Use your search engine.</li>
- </ul>
- <p>Press <kbd>?</kbd> to see keyboard shortcuts and <kbd>Esc</kbd> to return.</p>
- </div>
<div id="sectFields" class="hidden">
<h2>Fields</h2>
<div id="listFields"></div>
@@ -852,6 +887,7 @@
</div>
</div>
<script src="data.js"></script>
+ <script src="commonmark.js"></script>
<script src="main.js"></script>
</body>
</html>
lib/docs/main.js
@@ -4,7 +4,6 @@ var zigAnalysis;
const NAV_MODES = {
API: "#A;",
- API_INTERNAL: "#a;",
GUIDES: "#G;",
};
@@ -56,12 +55,13 @@ const NAV_MODES = {
const domSectSearchResults = document.getElementById("sectSearchResults");
const domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
const domDocs = document.getElementById("docs");
- const domGuides = document.getElementById("guides");
+ const domGuidesSection = document.getElementById("guides");
+ const domActiveGuide = document.getElementById("activeGuide");
+
const domListSearchResults = document.getElementById("listSearchResults");
const domSectSearchNoResults = document.getElementById("sectSearchNoResults");
const domSectInfo = document.getElementById("sectInfo");
// const domTdTarget = (document.getElementById("tdTarget"));
- const domPrivDeclsBox = document.getElementById("privDeclsBox");
const domTdZigVer = document.getElementById("tdZigVer");
const domHdrName = document.getElementById("hdrName");
const domHelpModal = document.getElementById("helpModal");
@@ -83,15 +83,16 @@ const NAV_MODES = {
let typeTypeId = findTypeTypeId();
let pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 };
+ let declSearchIndex = new RadixTree();
+ window.search = declSearchIndex;
+
// for each module, is an array with modules to get to this one
let canonModPaths = computeCanonicalModulePaths();
// for each decl, is an array with {declNames, modNames} to get to this one
-
let canonDeclPaths = null; // lazy; use getCanonDeclPath
// for each type, is an array with {declNames, modNames} to get to this one
-
let canonTypeDecls = null; // lazy; use getCanonTypeDecl
let curNav = {
@@ -122,6 +123,12 @@ const NAV_MODES = {
// map of decl index to list of comptime fn calls
// let nodesToCallsMap = indexNodesToCalls();
+ let guidesSearchIndex = {};
+ window.guideSearch = guidesSearchIndex;
+ parseGuides();
+
+
+
domSearch.disabled = false;
domSearch.addEventListener("keydown", onSearchKeyDown, false);
domSearch.addEventListener("focus", ev => {
@@ -139,31 +146,6 @@ const NAV_MODES = {
onHashChange();
}
- domPrivDeclsBox.addEventListener(
- "change",
- function () {
- if (this.checked != curNav.showPrivDecls) {
- if (
- this.checked &&
- location.hash.length > 1 &&
- location.hash[1] != "*"
- ) {
- location.hash = "#*" + location.hash.substring(1);
- return;
- }
- if (
- !this.checked &&
- location.hash.length > 1 &&
- location.hash[1] == "*"
- ) {
- location.hash = "#" + location.hash.substring(2);
- return;
- }
- }
- },
- false
- );
-
if (location.hash == "") {
location.hash = "#A;";
}
@@ -189,7 +171,6 @@ const NAV_MODES = {
let suffix = " - Zig";
switch (curNav.mode) {
case NAV_MODES.API:
- case NAV_MODES.API_INTERNAL:
let list = curNav.modNames.concat(curNav.declNames);
if (list.length === 0) {
document.title = zigAnalysis.modules[zigAnalysis.rootMod].name + suffix;
@@ -284,8 +265,11 @@ const NAV_MODES = {
function resolveValue(value) {
let i = 0;
- while (i < 1000) {
+ while (true) {
i += 1;
+ if (i >= 10000) {
+ throw "resolveValue quota exceeded"
+ }
if ("refPath" in value.expr) {
value = { expr: value.expr.refPath[value.expr.refPath.length - 1] };
@@ -307,8 +291,31 @@ const NAV_MODES = {
return value;
}
- console.assert(false);
- return {};
+ }
+
+ function resolveGenericRet(genericFunc) {
+ if (genericFunc.generic_ret == null) return null;
+ let result = resolveValue({expr: genericFunc.generic_ret});
+
+ let i = 0;
+ while (true) {
+ i += 1;
+ if (i >= 10000) {
+ throw "resolveGenericRet quota exceeded"
+ }
+
+ if ("call" in result.expr) {
+ let call = zigAnalysis.calls[result.expr.call];
+ let resolvedFunc = resolveValue({ expr: call.func });
+ if (!("type" in resolvedFunc.expr)) return null;
+ let callee = getType(resolvedFunc.expr.type);
+ if (!callee.generic_ret) return null;
+ result = resolveValue({ expr: callee.generic_ret });
+ continue;
+ }
+
+ return result;
+ }
}
// function typeOfDecl(decl){
@@ -401,8 +408,12 @@ const NAV_MODES = {
domGuideSwitch.classList.add("active");
domApiSwitch.classList.remove("active");
domDocs.classList.add("hidden");
- domGuides.classList.remove("hidden");
+ domGuidesSection.classList.remove("hidden");
+ domActiveGuide.classList.add("hidden");
domApiMenu.classList.add("hidden");
+ domSectSearchResults.classList.add("hidden");
+ domSectSearchAllResultsLink.classList.add("hidden");
+ domSectSearchNoResults.classList.add("hidden");
// sidebar guides list
const section_list = zigAnalysis.guide_sections;
@@ -417,7 +428,7 @@ const NAV_MODES = {
const guide = section.guides[i];
let liDom = domGuides.children[i];
let aDom = liDom.children[0];
- aDom.textContent = guide.name;
+ aDom.textContent = guide.title;
aDom.setAttribute("href", NAV_MODES.GUIDES + guide.name);
if (guide.name === curNav.activeGuide) {
aDom.classList.add("active");
@@ -431,6 +442,11 @@ const NAV_MODES = {
domGuidesMenu.classList.remove("hidden");
}
+
+ if (curNavSearch !== "") {
+ return renderSearchGuides();
+ }
+
// main content
let activeGuide = undefined;
outer: for (let i = 0; i < zigAnalysis.guide_sections.length; i += 1) {
@@ -447,7 +463,7 @@ const NAV_MODES = {
if (activeGuide == undefined) {
const root_file_idx = zigAnalysis.modules[zigAnalysis.rootMod].file;
const root_file_name = getFile(root_file_idx).name;
- domGuides.innerHTML = markdown(`
+ domActiveGuide.innerHTML = markdown(`
# Zig Guides
These autodocs don't contain any guide.
@@ -461,13 +477,21 @@ const NAV_MODES = {
You can add guides by specifying which markdown files to include
in the top level doc comment of your root file, like so:
- (At the top of \`${root_file_name}\`)
+ (At the top of *${root_file_name}*)
\`\`\`
//!zig-autodoc-guide: intro.md
//!zig-autodoc-guide: quickstart.md
- //!zig-autodoc-section: Advanced topics
- //!zig-autodoc-guide: ../advanced-docs/advanced-stuff.md
+ //!zig-autodoc-guide: advanced-docs/advanced-stuff.md
+ \`\`\`
+
+ You can also create sections to group guides together:
+
\`\`\`
+ //!zig-autodoc-section: CLI Usage
+ //!zig-autodoc-guide: cli-basics.md
+ //!zig-autodoc-guide: cli-advanced.md
+ \`\`\`
+
**Note that this feature is still under heavy development so expect bugs**
**and missing features!**
@@ -475,15 +499,16 @@ const NAV_MODES = {
Happy writing!
`);
} else {
- domGuides.innerHTML = markdown(activeGuide.body);
+ domActiveGuide.innerHTML = markdown(activeGuide.body);
}
+ domActiveGuide.classList.remove("hidden");
}
function renderApi() {
// set Api mode
domApiSwitch.classList.add("active");
domGuideSwitch.classList.remove("active");
- domGuides.classList.add("hidden");
+ domGuidesSection.classList.add("hidden");
domDocs.classList.remove("hidden");
domApiMenu.classList.remove("hidden");
domGuidesMenu.classList.add("hidden");
@@ -520,10 +545,8 @@ const NAV_MODES = {
renderInfo();
renderModList();
- domPrivDeclsBox.checked = curNav.mode == NAV_MODES.API_INTERNAL;
-
if (curNavSearch !== "") {
- return renderSearch();
+ return renderSearchAPI();
}
let rootMod = zigAnalysis.modules[zigAnalysis.rootMod];
@@ -542,6 +565,7 @@ const NAV_MODES = {
curNav.declObjs = [currentType];
for (let i = 0; i < curNav.declNames.length; i += 1) {
let childDecl = findSubDecl(currentType, curNav.declNames[i]);
+ window.last_decl = childDecl;
if (childDecl == null) {
return render404();
}
@@ -605,7 +629,6 @@ const NAV_MODES = {
function render() {
switch (curNav.mode) {
case NAV_MODES.API:
- case NAV_MODES.API_INTERNAL:
return renderApi();
case NAV_MODES.GUIDES:
return renderGuides();
@@ -3123,22 +3146,21 @@ const NAV_MODES = {
const mode = location.hash.substring(0, 3);
let query = location.hash.substring(3);
+ let qpos = query.indexOf("?");
+ let nonSearchPart;
+ if (qpos === -1) {
+ nonSearchPart = query;
+ } else {
+ nonSearchPart = query.substring(0, qpos);
+ curNavSearch = decodeURIComponent(query.substring(qpos + 1));
+ }
+
const DEFAULT_HASH = NAV_MODES.API + zigAnalysis.modules[zigAnalysis.rootMod].name;
switch (mode) {
case NAV_MODES.API:
- case NAV_MODES.API_INTERNAL:
- // #A;MODULE:decl.decl.decl?search-term
+ // #A;MODULE:decl.decl.decl?search-term
curNav.mode = mode;
- let qpos = query.indexOf("?");
- let nonSearchPart;
- if (qpos === -1) {
- nonSearchPart = query;
- } else {
- nonSearchPart = query.substring(0, qpos);
- curNavSearch = decodeURIComponent(query.substring(qpos + 1));
- }
-
let parts = nonSearchPart.split(":");
if (parts[0] == "") {
location.hash = DEFAULT_HASH;
@@ -3152,14 +3174,18 @@ const NAV_MODES = {
return;
case NAV_MODES.GUIDES:
+
const sections = zigAnalysis.guide_sections;
- if (sections.length != 0 && sections[0].guides.length != 0 && query == "") {
+ if (sections.length != 0 && sections[0].guides.length != 0 && nonSearchPart == "") {
location.hash = NAV_MODES.GUIDES + sections[0].guides[0].name;
+ if (qpos != -1) {
+ location.hash += query.substring(qpos);
+ }
return;
}
curNav.mode = mode;
- curNav.activeGuide = query;
+ curNav.activeGuide = nonSearchPart;
return;
default:
@@ -3230,22 +3256,6 @@ const NAV_MODES = {
}
}
- if (parentType.privDecls) {
- for (let i = 0; i < parentType.privDecls.length; i += 1) {
- let declIndex = parentType.privDecls[i];
- let childDecl = getDecl(declIndex);
- if (childDecl.name === childName) {
- childDecl.find_subdecl_idx = declIndex;
- return childDecl;
- } else if (childDecl.is_uns) {
- let declValue = resolveValue(childDecl.value);
- if (!("type" in declValue.expr)) continue;
- let uns_container = getType(declValue.expr.type);
- let uns_res = findSubDecl(uns_container, childName);
- if (uns_res !== null) return uns_res;
- }
- }
- }
return null;
}
@@ -3276,6 +3286,12 @@ const NAV_MODES = {
});
}
}
+
+ for (let i = 0; i < zigAnalysis.modules.length; i += 1) {
+ const p = zigAnalysis.modules[i];
+ // TODO
+ // declSearchIndex.add(p.name, {moduleId: i});
+ }
return list;
}
@@ -3291,6 +3307,7 @@ const NAV_MODES = {
let stack = [
{
declNames: [],
+ declIndexes: [],
type: getType(mod.main),
},
];
@@ -3334,18 +3351,27 @@ const NAV_MODES = {
}
}
}
+ window.cdp = list;
return list;
}
function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
let declVal = resolveValue(decl.value);
let declNames = item.declNames.concat([decl.name]);
+ let declIndexes = item.declIndexes.concat([declIndex]);
if (list[declIndex] != null) return;
list[declIndex] = {
modNames: modNames,
declNames: declNames,
+ declIndexes: declIndexes,
};
+
+ // add to search index
+ {
+ declSearchIndex.add(decl.name, {declIndex});
+ }
+
if ("type" in declVal.expr) {
let value = getType(declVal.expr.type);
@@ -3356,18 +3382,20 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
if (isContainerType(value)) {
stack.push({
declNames: declNames,
+ declIndexes: declIndexes,
type: value,
});
}
// Generic function
- if (value.kind == typeKinds.Fn && value.generic_ret != null) {
- let resolvedVal = resolveValue({ expr: value.generic_ret });
- if ("type" in resolvedVal.expr) {
- let generic_type = getType(resolvedVal.expr.type);
+ if (typeIsGenericFn(declVal.expr.type)) {
+ let ret = resolveGenericRet(value);
+ if (ret != null && "type" in ret.expr) {
+ let generic_type = getType(ret.expr.type);
if (isContainerType(generic_type)) {
stack.push({
declNames: declNames,
+ declIndexes: declIndexes,
type: generic_type,
});
}
@@ -3419,6 +3447,53 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
return markdown(shortDesc(docs));
}
+ function parseGuides() {
+ for (let j = 0; j < zigAnalysis.guide_sections.length; j+=1){
+ const section = zigAnalysis.guide_sections[j];
+ for (let i = 0; i < section.guides.length; i+=1){
+ let reader = new commonmark.Parser({smart: true});
+ const guide = section.guides[i];
+ const ast = reader.parse(guide.body);
+
+ // Find the first text thing to use as a sidebar title
+ guide.title = "[empty guide]";
+ {
+ let walker = ast.walker();
+ let event, node;
+ while ((event = walker.next())) {
+ node = event.node;
+ if (node.type === 'text') {
+ guide.title = node.literal;
+ break;
+ }
+ }
+ }
+ // Index this guide
+ {
+ let walker = ast.walker();
+ let event, node;
+ while ((event = walker.next())) {
+ node = event.node;
+ if (event.entering == true && node.type === 'text') {
+ indexTextForGuide(j, i, node);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function indexTextForGuide(section_idx, guide_idx, node){
+ const terms = node.literal.split(" ");
+ for (let i = 0; i < terms.length; i += 1){
+ const t = terms[i];
+ if (!guidesSearchIndex[t]) guidesSearchIndex[t] = new Set();
+ node.guide = {section_idx, guide_idx};
+ guidesSearchIndex[t].add(node);
+ }
+ }
+
+
function markdown(input, contextType) {
const raw_lines = input.split("\n"); // zig allows no '\r', so we don't need to split on CR
@@ -3841,6 +3916,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
startSearch();
}
}
+
function onSearchKeyDown(ev) {
switch (getKeyString(ev)) {
@@ -3982,16 +4058,207 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
clearAsyncSearch();
let oldHash = location.hash;
let parts = oldHash.split("?");
- let newPart2 = domSearch.value === "" ? "" : "?" + domSearch.value;
+ // TODO: make a tooltip that shows the user that we've replaced their dots
+ let box_text = domSearch.value.replaceAll(".", " ");
+ let newPart2 = box_text === "" ? "" : "?" + box_text;
location.replace(parts.length === 1 ? oldHash + newPart2 : parts[0] + newPart2);
}
function getSearchTerms() {
let list = curNavSearch.trim().split(/[ \r\n\t]+/);
- list.sort();
return list;
}
- function renderSearch() {
+ function renderSearchGuides() {
+ const searchTrimmed = false;
+ let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
+
+ let terms = getSearchTerms();
+ let matchedItems = new Set();
+
+ for (let i = 0; i < terms.length; i += 1) {
+ const nodes = guidesSearchIndex[terms[i]];
+ if (nodes) {
+ for (const n of nodes) {
+ matchedItems.add(n);
+ }
+ }
+ }
+
+
+
+ if (matchedItems.size !== 0) {
+ // Build up the list of search results
+ let matchedItemsHTML = "";
+
+ for (const node of matchedItems) {
+ const text = node.literal;
+ const href = "";
+
+ matchedItemsHTML += "<li><a href=\"" + href + "\">" + text + "</a></li>";
+ }
+
+ // Replace the search results using our newly constructed HTML string
+ domListSearchResults.innerHTML = matchedItemsHTML;
+ if (searchTrimmed) {
+ domSectSearchAllResultsLink.classList.remove("hidden");
+ }
+ renderSearchCursor();
+
+ domSectSearchResults.classList.remove("hidden");
+ } else {
+ domSectSearchNoResults.classList.remove("hidden");
+ }
+ }
+
+ function renderSearchAPI(){
+ if (canonDeclPaths == null) {
+ canonDeclPaths = computeCanonDeclPaths();
+ }
+ let declSet = new Set();
+ let otherDeclSet = new Set(); // for low quality results
+ let declScores = {};
+
+ let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
+ let term_list = getSearchTerms();
+ for (let i = 0; i < term_list.length; i += 1) {
+ let term = term_list[i];
+ let result = declSearchIndex.search(term.toLowerCase());
+ if (result == null) {
+ domSectSearchNoResults.classList.remove("hidden");
+ domSectSearchResults.classList.add("hidden");
+ return;
+ }
+
+ let termSet = new Set();
+ let termOtherSet = new Set();
+
+ for (let list of [result.full, result.partial]) {
+ for (let r of list) {
+ const d = r.declIndex;
+ const decl = getDecl(d);
+ const canonPath = getCanonDeclPath(d);
+
+ // collect unconditionally for the first term
+ if (i == 0) {
+ declSet.add(d);
+ } else {
+ // path intersection for subsequent terms
+ let found = false;
+ for (let p of canonPath.declIndexes) {
+ if (declSet.has(p)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ otherDeclSet.add(d);
+ } else {
+ termSet.add(d);
+ }
+ }
+
+ if (declScores[d] == undefined) declScores[d] = 0;
+
+ // scores (lower is better)
+ let decl_name = decl.name;
+ if (ignoreCase) decl_name = decl_name.toLowerCase();
+
+ // shallow path are preferable
+ const path_depth = canonPath.declNames.length * 50;
+ // matching the start of a decl name is good
+ const match_from_start = decl_name.startsWith(term) ? -term.length * (1 -ignoreCase) : (decl_name.length - term.length) + 1;
+ // being a perfect match is good
+ const is_full_match = (list == result.full) ? -decl_name.length * (2 - ignoreCase) : decl_name.length - term.length;
+ // matching the end of a decl name is good
+ const matches_the_end = decl_name.endsWith(term) ? -term.length * (1 - ignoreCase) : (decl_name.length - term.length) + 1;
+ // explicitly penalizing scream case decls
+ const decl_is_scream_case = decl.name.toUpperCase() != decl.name ? 0 : decl.name.length;
+
+ const score = path_depth
+ + match_from_start
+ + is_full_match
+ + matches_the_end
+ + decl_is_scream_case;
+
+ declScores[d] += score;
+ }
+ }
+ if (i != 0) {
+ for (let d of declSet) {
+ if (termSet.has(d)) continue;
+ let found = false;
+ for (let p of getCanonDeclPath(d).declIndexes) {
+ if (termSet.has(p) || otherDeclSet.has(p)) {
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ declScores[d] = declScores[d] / term_list.length;
+ }
+
+ termOtherSet.add(d);
+ }
+ declSet = termSet;
+ for (let d of termOtherSet) {
+ otherDeclSet.add(d);
+ }
+
+ }
+ }
+
+ let matchedItems = {
+ high_quality: [],
+ low_quality: [],
+ };
+ for (let idx of declSet) {
+ matchedItems.high_quality.push({points: declScores[idx], declIndex: idx})
+ }
+ for (let idx of otherDeclSet) {
+ matchedItems.low_quality.push({points: declScores[idx], declIndex: idx})
+ }
+
+ matchedItems.high_quality.sort(function (a, b) {
+ let cmp = operatorCompare(a.points, b.points);
+ return cmp;
+ });
+ matchedItems.low_quality.sort(function (a, b) {
+ let cmp = operatorCompare(a.points, b.points);
+ return cmp;
+ });
+
+ // Build up the list of search results
+ let matchedItemsHTML = "";
+
+ for (let list of [matchedItems.high_quality, matchedItems.low_quality]) {
+ if (list == matchedItems.low_quality && list.length > 0) {
+ matchedItemsHTML += "<hr class='other-results'>"
+ }
+ for (let result of list) {
+ const points = result.points;
+ const match = result.declIndex;
+
+ let canonPath = getCanonDeclPath(match);
+ if (canonPath == null) continue;
+
+ let lastModName = canonPath.modNames[canonPath.modNames.length - 1];
+ let text = lastModName + "." + canonPath.declNames.join(".");
+
+
+ const href = navLink(canonPath.modNames, canonPath.declNames);
+
+ matchedItemsHTML += "<li><a href=\"" + href + "\">" + text + "</a></li>";
+ }
+ }
+
+ // Replace the search results using our newly constructed HTML string
+ domListSearchResults.innerHTML = matchedItemsHTML;
+ renderSearchCursor();
+
+ domSectSearchResults.classList.remove("hidden");
+ }
+
+ function renderSearchAPIOld() {
let matchedItems = [];
let ignoreCase = curNavSearch.toLowerCase() === curNavSearch;
let terms = getSearchTerms();
@@ -4063,7 +4330,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
});
let searchTrimmed = false;
- const searchTrimResultsMaxItems = 200;
+ const searchTrimResultsMaxItems = 60;
if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {
matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems);
searchTrimmed = true;
@@ -4314,3 +4581,255 @@ function toggleExpand(event) {
parent.parentElement.parentElement.scrollIntoView(true);
}
}
+
+function RadixTree() {
+ this.root = null;
+
+ RadixTree.prototype.search = function (query) {
+ return this.root.search(query);
+
+ }
+
+ RadixTree.prototype.add = function (declName, value) {
+ if (this.root == null) {
+ this.root = new Node(declName.toLowerCase(), null, [value]);
+ } else {
+ this.root.add(declName.toLowerCase(), value);
+ }
+
+ const not_scream_case = declName.toUpperCase() != declName;
+ let found_separator = false;
+ for (let i = 1; i < declName.length; i +=1) {
+ if (declName[i] == '_' || declName[i] == '.') {
+ found_separator = true;
+ continue;
+ }
+
+
+ if (found_separator || (declName[i].toLowerCase() !== declName[i])) {
+ if (declName.length > i+1
+ && declName[i+1].toLowerCase() != declName[i+1]) continue;
+ let suffix = declName.slice(i);
+ this.root.add(suffix.toLowerCase(), value);
+ found_separator = false;
+ }
+ }
+ }
+
+ function Node(labels, next, values) {
+ this.labels = labels;
+ this.next = next;
+ this.values = values;
+ }
+
+ Node.prototype.isCompressed = function () {
+ return !Array.isArray(this.next);
+ }
+
+ Node.prototype.search = function (word) {
+ let full_matches = [];
+ let partial_matches = [];
+ let subtree_root = null;
+
+ let cn = this;
+ char_loop: for (let i = 0; i < word.length;) {
+ if (cn.isCompressed()) {
+ for (let j = 0; j < cn.labels.length; j += 1) {
+ let current_idx = i+j;
+
+ if (current_idx == word.length) {
+ partial_matches = cn.values;
+ subtree_root = cn.next;
+ break char_loop;
+ }
+
+ if (word[current_idx] != cn.labels[j]) return null;
+ }
+
+ // the full label matched
+ let new_idx = i + cn.labels.length;
+ if (new_idx == word.length) {
+ full_matches = cn.values;
+ subtree_root = cn.next;
+ break char_loop;
+ }
+
+
+ i = new_idx;
+ cn = cn.next;
+ continue;
+ } else {
+ for (let j = 0; j < cn.labels.length; j += 1) {
+ if (word[i] == cn.labels[j]) {
+ if (i == word.length - 1) {
+ full_matches = cn.values[j];
+ subtree_root = cn.next[j];
+ break char_loop;
+ }
+
+ let next = cn.next[j];
+ if (next == null) return null;
+ cn = next;
+ i += 1;
+ continue char_loop;
+ }
+ }
+
+ // didn't find a match
+ return null;
+ }
+ }
+
+ // Match was found, let's collect all other
+ // partial matches from the subtree
+ let stack = [subtree_root];
+ let node;
+ while (node = stack.pop()) {
+ if (node.isCompressed()) {
+ partial_matches = partial_matches.concat(node.values);
+ if (node.next != null) {
+ stack.push(node.next);
+ }
+ } else {
+ for (let v of node.values) {
+ partial_matches = partial_matches.concat(v);
+ }
+
+ for (let n of node.next) {
+ if (n != null) stack.push(n);
+ }
+ }
+ }
+
+ return {full: full_matches, partial: partial_matches};
+ }
+
+ Node.prototype.add = function (word, value) {
+ let cn = this;
+ char_loop: for (let i = 0; i < word.length;) {
+ if (cn.isCompressed()) {
+ for(let j = 0; j < cn.labels.length; j += 1) {
+ let current_idx = i+j;
+
+ if (current_idx == word.length) {
+ if (j < cn.labels.length - 1) {
+ let node = new Node(cn.labels.slice(j), cn.next, cn.values);
+ cn.labels = cn.labels.slice(0, j);
+ cn.next = node;
+ cn.values = [];
+ }
+ cn.values.push(value);
+ return;
+ }
+
+ if (word[current_idx] == cn.labels[j]) continue;
+
+ // if we're here, a mismatch was found
+ if (j != cn.labels.length - 1) {
+ // create a suffix node
+ const label_suffix = cn.labels.slice(j+1);
+ let node = new Node(label_suffix, cn.next, [...cn.values]);
+ cn.next = node;
+ cn.values = [];
+ }
+
+ // turn current node into a split node
+ let node = null;
+ let word_values = [];
+ if (current_idx == word.length - 1) {
+ // mismatch happened in the last character of word
+ // meaning that the current node should hold its value
+ word_values.push(value);
+ } else {
+ node = new Node(word.slice(current_idx+1), null, [value]);
+ }
+
+ cn.labels = cn.labels[j] + word[current_idx];
+ cn.next = [cn.next, node];
+ cn.values = [cn.values, word_values];
+
+ if (j != 0) {
+ // current node must be turned into a prefix node
+ let splitNode = new Node(cn.labels, cn.next, cn.values);
+ cn.labels = word.slice(i, current_idx);
+ cn.next = splitNode;
+ cn.values = [];
+ }
+
+ return;
+ }
+ // label matched fully with word, are there any more chars?
+ const new_idx = i + cn.labels.length;
+ if (new_idx == word.length) {
+ cn.values.push(value);
+ return;
+ } else {
+ if (cn.next == null) {
+ let node = new Node(word.slice(new_idx), null, [value]);
+ cn.next = node;
+ return;
+ } else {
+ cn = cn.next;
+ i = new_idx;
+ continue;
+ }
+ }
+ } else { // node is not compressed
+ let letter = word[i];
+ for (let j = 0; j < cn.labels.length; j += 1) {
+ if (letter == cn.labels[j]) {
+ if (i == word.length - 1) {
+ cn.values[j].push(value);
+ return;
+ }
+ if (cn.next[j] == null) {
+ let node = new Node(word.slice(i+1), null, [value]);
+ cn.next[j] = node;
+ return;
+ } else {
+ cn = cn.next[j];
+ i += 1;
+ continue char_loop;
+ }
+ }
+ }
+
+ // if we're here we didn't find a match
+ cn.labels += letter;
+ if (i == word.length - 1) {
+ cn.next.push(null);
+ cn.values.push([value]);
+ } else {
+ let node = new Node(word.slice(i+1), null, [value]);
+ cn.next.push(node);
+ cn.values.push([]);
+ }
+ return;
+ }
+ }
+ }
+}
+
+// RADIX TREE:
+
+// apple
+// appliance
+
+// "appl" => [
+// 'e', => $
+// 'i' => "ance" => $
+// ]
+
+// OUR STUFF:
+
+// AutoHashMap
+// AutoArrayHashMap
+
+// "Auto" => [
+// 'A', => "rrayHashMap" => $
+// 'H' => "ashMap" => $
+// ]
+
+// BUT!
+
+// We want to be able to search "Hash", for example!
\ No newline at end of file
src/Autodoc.zig
@@ -234,12 +234,13 @@ pub fn generateZirData(self: *Autodoc) !void {
};
const tldoc_comment = try self.getTLDocComment(file);
+ const cleaned_tldoc_comment = try self.findGuidePaths(file, tldoc_comment);
+ defer self.arena.free(cleaned_tldoc_comment);
try self.ast_nodes.append(self.arena, .{
.name = "(root)",
- .docs = tldoc_comment,
+ .docs = cleaned_tldoc_comment,
});
try self.files.put(self.arena, file, main_type_index);
- try self.findGuidePaths(file, tldoc_comment);
_ = try self.walkInstruction(file, &root_scope, .{}, Zir.main_struct_inst, false);
@@ -349,6 +350,7 @@ pub fn generateZirData(self: *Autodoc) !void {
var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{});
defer docs_dir.close();
try docs_dir.copyFile("main.js", output_dir, "main.js", .{});
+ try docs_dir.copyFile("commonmark.js", output_dir, "commonmark.js", .{});
try docs_dir.copyFile("index.html", output_dir, "index.html", .{});
}
@@ -4754,14 +4756,20 @@ fn getTLDocComment(self: *Autodoc, file: *File) ![]const u8 {
return comment.items;
}
-fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) !void {
+/// Returns the doc comment cleared of autodoc directives.
+fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) ![]const u8 {
const guide_prefix = "zig-autodoc-guide:";
const section_prefix = "zig-autodoc-section:";
try self.guide_sections.append(self.arena, .{}); // add a default section
var current_section = &self.guide_sections.items[self.guide_sections.items.len - 1];
- var it = std.mem.tokenize(u8, str, "\n");
+ var clean_docs: std.ArrayListUnmanaged(u8) = .{};
+ errdefer clean_docs.deinit(self.arena);
+
+ // TODO: this algo is kinda inefficient
+
+ var it = std.mem.split(u8, str, "\n");
while (it.next()) |line| {
const trimmed_line = std.mem.trim(u8, line, " ");
if (std.mem.startsWith(u8, trimmed_line, guide_prefix)) {
@@ -4775,8 +4783,13 @@ fn findGuidePaths(self: *Autodoc, file: *File, str: []const u8) !void {
.name = trimmed_section_name,
});
current_section = &self.guide_sections.items[self.guide_sections.items.len - 1];
+ } else {
+ try clean_docs.appendSlice(self.arena, line);
+ try clean_docs.append(self.arena, '\n');
}
}
+
+ return clean_docs.toOwnedSlice(self.arena);
}
fn addGuide(self: *Autodoc, file: *File, guide_path: []const u8, section: *Section) !void {