mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-04-27 19:09:47 +03:00
Autodoc: new decl search system (#15475)
New search system is based on a Radix Tree. The Radix Tree contains a shallow list of all decl names (ie no paths), plus some suffixes, split by following the official style guide (eg "HashMapUnmanaged" also produces "MapUnmanaged" and "Unmanaged", same with snake_case and camelCase names). Additionally, the search system uses the decl graph data to recognize hierarchical relationships between decls, allowing you to zero on a target namespace for search. As an example "fs create" will score highe all things related to the creation of files and directories inside of `std.fs`, while still showing (but with lower score) matches from `std.Bulild`. As another example "fs windows" will prioritize windows-related results in `std.fs`, while "windows fs" will prioritize fs-related results in `std.windows`.
This commit is contained in:
+10255
@@ -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 = "ffi";
|
||||
var fflig = "ff";
|
||||
var ffllig = "ffl";
|
||||
var Ffr = "𝔉";
|
||||
var ffr = "𝔣";
|
||||
var filig = "fi";
|
||||
var FilledSmallSquare = "◼";
|
||||
var FilledVerySmallSquare = "▪";
|
||||
var fjlig = "fj";
|
||||
var flat = "♭";
|
||||
var fllig = "fl";
|
||||
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 = "IJ";
|
||||
var ijlig = "ij";
|
||||
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 = "ʼn";
|
||||
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 });
|
||||
|
||||
})));
|
||||
+62
-26
@@ -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>
|
||||
|
||||
+602
-83
@@ -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!
|
||||
+17
-4
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user