monaco-editor
Version:
A browser based code editor
1,925 lines (1,924 loc) • 629 kB
JavaScript
define("vs/language/html/html.worker", ["../../initialize-BJOLaCxY", "../../index-CXwHBsfm", "../../main-CLp3wP3p"], (function(initialize, index, main) {
"use strict";
var TokenType;
(function(TokenType2) {
TokenType2[TokenType2["StartCommentTag"] = 0] = "StartCommentTag";
TokenType2[TokenType2["Comment"] = 1] = "Comment";
TokenType2[TokenType2["EndCommentTag"] = 2] = "EndCommentTag";
TokenType2[TokenType2["StartTagOpen"] = 3] = "StartTagOpen";
TokenType2[TokenType2["StartTagClose"] = 4] = "StartTagClose";
TokenType2[TokenType2["StartTagSelfClose"] = 5] = "StartTagSelfClose";
TokenType2[TokenType2["StartTag"] = 6] = "StartTag";
TokenType2[TokenType2["EndTagOpen"] = 7] = "EndTagOpen";
TokenType2[TokenType2["EndTagClose"] = 8] = "EndTagClose";
TokenType2[TokenType2["EndTag"] = 9] = "EndTag";
TokenType2[TokenType2["DelimiterAssign"] = 10] = "DelimiterAssign";
TokenType2[TokenType2["AttributeName"] = 11] = "AttributeName";
TokenType2[TokenType2["AttributeValue"] = 12] = "AttributeValue";
TokenType2[TokenType2["StartDoctypeTag"] = 13] = "StartDoctypeTag";
TokenType2[TokenType2["Doctype"] = 14] = "Doctype";
TokenType2[TokenType2["EndDoctypeTag"] = 15] = "EndDoctypeTag";
TokenType2[TokenType2["Content"] = 16] = "Content";
TokenType2[TokenType2["Whitespace"] = 17] = "Whitespace";
TokenType2[TokenType2["Unknown"] = 18] = "Unknown";
TokenType2[TokenType2["Script"] = 19] = "Script";
TokenType2[TokenType2["Styles"] = 20] = "Styles";
TokenType2[TokenType2["EOS"] = 21] = "EOS";
})(TokenType || (TokenType = {}));
var ScannerState;
(function(ScannerState2) {
ScannerState2[ScannerState2["WithinContent"] = 0] = "WithinContent";
ScannerState2[ScannerState2["AfterOpeningStartTag"] = 1] = "AfterOpeningStartTag";
ScannerState2[ScannerState2["AfterOpeningEndTag"] = 2] = "AfterOpeningEndTag";
ScannerState2[ScannerState2["WithinDoctype"] = 3] = "WithinDoctype";
ScannerState2[ScannerState2["WithinTag"] = 4] = "WithinTag";
ScannerState2[ScannerState2["WithinEndTag"] = 5] = "WithinEndTag";
ScannerState2[ScannerState2["WithinComment"] = 6] = "WithinComment";
ScannerState2[ScannerState2["WithinScriptContent"] = 7] = "WithinScriptContent";
ScannerState2[ScannerState2["WithinStyleContent"] = 8] = "WithinStyleContent";
ScannerState2[ScannerState2["AfterAttributeName"] = 9] = "AfterAttributeName";
ScannerState2[ScannerState2["BeforeAttributeValue"] = 10] = "BeforeAttributeValue";
})(ScannerState || (ScannerState = {}));
var ClientCapabilities;
(function(ClientCapabilities2) {
ClientCapabilities2.LATEST = {
textDocument: {
completion: {
completionItem: {
documentationFormat: [main.MarkupKind.Markdown, main.MarkupKind.PlainText]
}
},
hover: {
contentFormat: [main.MarkupKind.Markdown, main.MarkupKind.PlainText]
}
}
};
})(ClientCapabilities || (ClientCapabilities = {}));
var FileType;
(function(FileType2) {
FileType2[FileType2["Unknown"] = 0] = "Unknown";
FileType2[FileType2["File"] = 1] = "File";
FileType2[FileType2["Directory"] = 2] = "Directory";
FileType2[FileType2["SymbolicLink"] = 64] = "SymbolicLink";
})(FileType || (FileType = {}));
class MultiLineStream {
constructor(source, position) {
this.source = source;
this.len = source.length;
this.position = position;
}
eos() {
return this.len <= this.position;
}
getSource() {
return this.source;
}
pos() {
return this.position;
}
goBackTo(pos) {
this.position = pos;
}
goBack(n) {
this.position -= n;
}
advance(n) {
this.position += n;
}
goToEnd() {
this.position = this.source.length;
}
nextChar() {
return this.source.charCodeAt(this.position++) || 0;
}
peekChar(n = 0) {
return this.source.charCodeAt(this.position + n) || 0;
}
advanceIfChar(ch) {
if (ch === this.source.charCodeAt(this.position)) {
this.position++;
return true;
}
return false;
}
advanceIfChars(ch) {
let i;
if (this.position + ch.length > this.source.length) {
return false;
}
for (i = 0; i < ch.length; i++) {
if (this.source.charCodeAt(this.position + i) !== ch[i]) {
return false;
}
}
this.advance(i);
return true;
}
advanceIfRegExp(regex) {
const str = this.source.substr(this.position);
const match = str.match(regex);
if (match) {
this.position = this.position + match.index + match[0].length;
return match[0];
}
return "";
}
advanceUntilRegExp(regex) {
const str = this.source.substr(this.position);
const match = str.match(regex);
if (match) {
this.position = this.position + match.index;
return match[0];
} else {
this.goToEnd();
}
return "";
}
advanceUntilChar(ch) {
while (this.position < this.source.length) {
if (this.source.charCodeAt(this.position) === ch) {
return true;
}
this.advance(1);
}
return false;
}
advanceUntilChars(ch) {
while (this.position + ch.length <= this.source.length) {
let i = 0;
for (; i < ch.length && this.source.charCodeAt(this.position + i) === ch[i]; i++) {
}
if (i === ch.length) {
return true;
}
this.advance(1);
}
this.goToEnd();
return false;
}
skipWhitespace() {
const n = this.advanceWhileChar((ch) => {
return ch === _WSP || ch === _TAB || ch === _NWL || ch === _LFD || ch === _CAR;
});
return n > 0;
}
advanceWhileChar(condition) {
const posNow = this.position;
while (this.position < this.len && condition(this.source.charCodeAt(this.position))) {
this.position++;
}
return this.position - posNow;
}
}
const _BNG = "!".charCodeAt(0);
const _MIN = "-".charCodeAt(0);
const _LAN = "<".charCodeAt(0);
const _RAN = ">".charCodeAt(0);
const _FSL = "/".charCodeAt(0);
const _EQS = "=".charCodeAt(0);
const _DQO = '"'.charCodeAt(0);
const _SQO = "'".charCodeAt(0);
const _NWL = "\n".charCodeAt(0);
const _CAR = "\r".charCodeAt(0);
const _LFD = "\f".charCodeAt(0);
const _WSP = " ".charCodeAt(0);
const _TAB = " ".charCodeAt(0);
const htmlScriptContents = {
"text/x-handlebars-template": true,
// Fix for https://github.com/microsoft/vscode/issues/77977
"text/html": true
};
function createScanner(input, initialOffset = 0, initialState = ScannerState.WithinContent, emitPseudoCloseTags = false) {
const stream = new MultiLineStream(input, initialOffset);
let state = initialState;
let tokenOffset = 0;
let tokenType = TokenType.Unknown;
let tokenError;
let hasSpaceAfterTag;
let lastTag;
let lastAttributeName;
let lastTypeValue;
function nextElementName() {
return stream.advanceIfRegExp(/^[_:\w][_:\w-.\d]*/).toLowerCase();
}
function nextAttributeName() {
return stream.advanceIfRegExp(/^[^\s"'></=\x00-\x0F\x7F\x80-\x9F]*/).toLowerCase();
}
function finishToken(offset, type, errorMessage) {
tokenType = type;
tokenOffset = offset;
tokenError = errorMessage;
return type;
}
function scan() {
const offset = stream.pos();
const oldState = state;
const token = internalScan();
if (token !== TokenType.EOS && offset === stream.pos() && !(emitPseudoCloseTags && (token === TokenType.StartTagClose || token === TokenType.EndTagClose))) {
console.warn("Scanner.scan has not advanced at offset " + offset + ", state before: " + oldState + " after: " + state);
stream.advance(1);
return finishToken(offset, TokenType.Unknown);
}
return token;
}
function internalScan() {
const offset = stream.pos();
if (stream.eos()) {
return finishToken(offset, TokenType.EOS);
}
let errorMessage;
switch (state) {
case ScannerState.WithinComment:
if (stream.advanceIfChars([_MIN, _MIN, _RAN])) {
state = ScannerState.WithinContent;
return finishToken(offset, TokenType.EndCommentTag);
}
stream.advanceUntilChars([_MIN, _MIN, _RAN]);
return finishToken(offset, TokenType.Comment);
case ScannerState.WithinDoctype:
if (stream.advanceIfChar(_RAN)) {
state = ScannerState.WithinContent;
return finishToken(offset, TokenType.EndDoctypeTag);
}
stream.advanceUntilChar(_RAN);
return finishToken(offset, TokenType.Doctype);
case ScannerState.WithinContent:
if (stream.advanceIfChar(_LAN)) {
if (!stream.eos() && stream.peekChar() === _BNG) {
if (stream.advanceIfChars([_BNG, _MIN, _MIN])) {
state = ScannerState.WithinComment;
return finishToken(offset, TokenType.StartCommentTag);
}
if (stream.advanceIfRegExp(/^!doctype/i)) {
state = ScannerState.WithinDoctype;
return finishToken(offset, TokenType.StartDoctypeTag);
}
}
if (stream.advanceIfChar(_FSL)) {
state = ScannerState.AfterOpeningEndTag;
return finishToken(offset, TokenType.EndTagOpen);
}
state = ScannerState.AfterOpeningStartTag;
return finishToken(offset, TokenType.StartTagOpen);
}
stream.advanceUntilChar(_LAN);
return finishToken(offset, TokenType.Content);
case ScannerState.AfterOpeningEndTag:
const tagName = nextElementName();
if (tagName.length > 0) {
state = ScannerState.WithinEndTag;
return finishToken(offset, TokenType.EndTag);
}
if (stream.skipWhitespace()) {
return finishToken(offset, TokenType.Whitespace, index.t("Tag name must directly follow the open bracket."));
}
state = ScannerState.WithinEndTag;
stream.advanceUntilChar(_RAN);
if (offset < stream.pos()) {
return finishToken(offset, TokenType.Unknown, index.t("End tag name expected."));
}
return internalScan();
case ScannerState.WithinEndTag:
if (stream.skipWhitespace()) {
return finishToken(offset, TokenType.Whitespace);
}
if (stream.advanceIfChar(_RAN)) {
state = ScannerState.WithinContent;
return finishToken(offset, TokenType.EndTagClose);
}
if (emitPseudoCloseTags && stream.peekChar() === _LAN) {
state = ScannerState.WithinContent;
return finishToken(offset, TokenType.EndTagClose, index.t("Closing bracket missing."));
}
errorMessage = index.t("Closing bracket expected.");
break;
case ScannerState.AfterOpeningStartTag:
lastTag = nextElementName();
lastTypeValue = void 0;
lastAttributeName = void 0;
if (lastTag.length > 0) {
hasSpaceAfterTag = false;
state = ScannerState.WithinTag;
return finishToken(offset, TokenType.StartTag);
}
if (stream.skipWhitespace()) {
return finishToken(offset, TokenType.Whitespace, index.t("Tag name must directly follow the open bracket."));
}
state = ScannerState.WithinTag;
stream.advanceUntilChar(_RAN);
if (offset < stream.pos()) {
return finishToken(offset, TokenType.Unknown, index.t("Start tag name expected."));
}
return internalScan();
case ScannerState.WithinTag:
if (stream.skipWhitespace()) {
hasSpaceAfterTag = true;
return finishToken(offset, TokenType.Whitespace);
}
if (hasSpaceAfterTag) {
lastAttributeName = nextAttributeName();
if (lastAttributeName.length > 0) {
state = ScannerState.AfterAttributeName;
hasSpaceAfterTag = false;
return finishToken(offset, TokenType.AttributeName);
}
}
if (stream.advanceIfChars([_FSL, _RAN])) {
state = ScannerState.WithinContent;
return finishToken(offset, TokenType.StartTagSelfClose);
}
if (stream.advanceIfChar(_RAN)) {
if (lastTag === "script") {
if (lastTypeValue && htmlScriptContents[lastTypeValue]) {
state = ScannerState.WithinContent;
} else {
state = ScannerState.WithinScriptContent;
}
} else if (lastTag === "style") {
state = ScannerState.WithinStyleContent;
} else {
state = ScannerState.WithinContent;
}
return finishToken(offset, TokenType.StartTagClose);
}
if (emitPseudoCloseTags && stream.peekChar() === _LAN) {
state = ScannerState.WithinContent;
return finishToken(offset, TokenType.StartTagClose, index.t("Closing bracket missing."));
}
stream.advance(1);
return finishToken(offset, TokenType.Unknown, index.t("Unexpected character in tag."));
case ScannerState.AfterAttributeName:
if (stream.skipWhitespace()) {
hasSpaceAfterTag = true;
return finishToken(offset, TokenType.Whitespace);
}
if (stream.advanceIfChar(_EQS)) {
state = ScannerState.BeforeAttributeValue;
return finishToken(offset, TokenType.DelimiterAssign);
}
state = ScannerState.WithinTag;
return internalScan();
// no advance yet - jump to WithinTag
case ScannerState.BeforeAttributeValue:
if (stream.skipWhitespace()) {
return finishToken(offset, TokenType.Whitespace);
}
let attributeValue = stream.advanceIfRegExp(/^[^\s"'`=<>]+/);
if (attributeValue.length > 0) {
if (stream.peekChar() === _RAN && stream.peekChar(-1) === _FSL) {
stream.goBack(1);
attributeValue = attributeValue.substring(0, attributeValue.length - 1);
}
if (lastAttributeName === "type") {
lastTypeValue = attributeValue;
}
if (attributeValue.length > 0) {
state = ScannerState.WithinTag;
hasSpaceAfterTag = false;
return finishToken(offset, TokenType.AttributeValue);
}
}
const ch = stream.peekChar();
if (ch === _SQO || ch === _DQO) {
stream.advance(1);
if (stream.advanceUntilChar(ch)) {
stream.advance(1);
}
if (lastAttributeName === "type") {
lastTypeValue = stream.getSource().substring(offset + 1, stream.pos() - 1);
}
state = ScannerState.WithinTag;
hasSpaceAfterTag = false;
return finishToken(offset, TokenType.AttributeValue);
}
state = ScannerState.WithinTag;
hasSpaceAfterTag = false;
return internalScan();
// no advance yet - jump to WithinTag
case ScannerState.WithinScriptContent:
let sciptState = 1;
while (!stream.eos()) {
const match = stream.advanceIfRegExp(/<!--|-->|<\/?script\s*\/?>?/i);
if (match.length === 0) {
stream.goToEnd();
return finishToken(offset, TokenType.Script);
} else if (match === "<!--") {
if (sciptState === 1) {
sciptState = 2;
}
} else if (match === "-->") {
sciptState = 1;
} else if (match[1] !== "/") {
if (sciptState === 2) {
sciptState = 3;
}
} else {
if (sciptState === 3) {
sciptState = 2;
} else {
stream.goBack(match.length);
break;
}
}
}
state = ScannerState.WithinContent;
if (offset < stream.pos()) {
return finishToken(offset, TokenType.Script);
}
return internalScan();
// no advance yet - jump to content
case ScannerState.WithinStyleContent:
stream.advanceUntilRegExp(/<\/style/i);
state = ScannerState.WithinContent;
if (offset < stream.pos()) {
return finishToken(offset, TokenType.Styles);
}
return internalScan();
}
stream.advance(1);
state = ScannerState.WithinContent;
return finishToken(offset, TokenType.Unknown, errorMessage);
}
return {
scan,
getTokenType: () => tokenType,
getTokenOffset: () => tokenOffset,
getTokenLength: () => stream.pos() - tokenOffset,
getTokenEnd: () => stream.pos(),
getTokenText: () => stream.getSource().substring(tokenOffset, stream.pos()),
getScannerState: () => state,
getTokenError: () => tokenError
};
}
function findFirst(array, p) {
let low = 0, high = array.length;
if (high === 0) {
return 0;
}
while (low < high) {
let mid = Math.floor((low + high) / 2);
if (p(array[mid])) {
high = mid;
} else {
low = mid + 1;
}
}
return low;
}
function binarySearch(array, key, comparator) {
let low = 0, high = array.length - 1;
while (low <= high) {
const mid = (low + high) / 2 | 0;
const comp = comparator(array[mid], key);
if (comp < 0) {
low = mid + 1;
} else if (comp > 0) {
high = mid - 1;
} else {
return mid;
}
}
return -(low + 1);
}
class Node {
get attributeNames() {
return this.attributes ? Object.keys(this.attributes) : [];
}
constructor(start, end, children, parent) {
this.start = start;
this.end = end;
this.children = children;
this.parent = parent;
this.closed = false;
}
isSameTag(tagInLowerCase) {
if (this.tag === void 0) {
return tagInLowerCase === void 0;
} else {
return tagInLowerCase !== void 0 && this.tag.length === tagInLowerCase.length && this.tag.toLowerCase() === tagInLowerCase;
}
}
get firstChild() {
return this.children[0];
}
get lastChild() {
return this.children.length ? this.children[this.children.length - 1] : void 0;
}
findNodeBefore(offset) {
const idx = findFirst(this.children, (c) => offset <= c.start) - 1;
if (idx >= 0) {
const child = this.children[idx];
if (offset > child.start) {
if (offset < child.end) {
return child.findNodeBefore(offset);
}
const lastChild = child.lastChild;
if (lastChild && lastChild.end === child.end) {
return child.findNodeBefore(offset);
}
return child;
}
}
return this;
}
findNodeAt(offset) {
const idx = findFirst(this.children, (c) => offset <= c.start) - 1;
if (idx >= 0) {
const child = this.children[idx];
if (offset > child.start && offset <= child.end) {
return child.findNodeAt(offset);
}
}
return this;
}
}
class HTMLParser {
constructor(dataManager) {
this.dataManager = dataManager;
}
parseDocument(document) {
return this.parse(document.getText(), this.dataManager.getVoidElements(document.languageId));
}
parse(text, voidElements) {
const scanner = createScanner(text, void 0, void 0, true);
const htmlDocument = new Node(0, text.length, [], void 0);
let curr = htmlDocument;
let endTagStart = -1;
let endTagName = void 0;
let pendingAttribute = null;
let token = scanner.scan();
while (token !== TokenType.EOS) {
switch (token) {
case TokenType.StartTagOpen:
const child = new Node(scanner.getTokenOffset(), text.length, [], curr);
curr.children.push(child);
curr = child;
break;
case TokenType.StartTag:
curr.tag = scanner.getTokenText();
break;
case TokenType.StartTagClose:
if (curr.parent) {
curr.end = scanner.getTokenEnd();
if (scanner.getTokenLength()) {
curr.startTagEnd = scanner.getTokenEnd();
if (curr.tag && this.dataManager.isVoidElement(curr.tag, voidElements)) {
curr.closed = true;
curr = curr.parent;
}
} else {
curr = curr.parent;
}
}
break;
case TokenType.StartTagSelfClose:
if (curr.parent) {
curr.closed = true;
curr.end = scanner.getTokenEnd();
curr.startTagEnd = scanner.getTokenEnd();
curr = curr.parent;
}
break;
case TokenType.EndTagOpen:
endTagStart = scanner.getTokenOffset();
endTagName = void 0;
break;
case TokenType.EndTag:
endTagName = scanner.getTokenText().toLowerCase();
break;
case TokenType.EndTagClose:
let node = curr;
while (!node.isSameTag(endTagName) && node.parent) {
node = node.parent;
}
if (node.parent) {
while (curr !== node) {
curr.end = endTagStart;
curr.closed = false;
curr = curr.parent;
}
curr.closed = true;
curr.endTagStart = endTagStart;
curr.end = scanner.getTokenEnd();
curr = curr.parent;
}
break;
case TokenType.AttributeName: {
pendingAttribute = scanner.getTokenText();
let attributes = curr.attributes;
if (!attributes) {
curr.attributes = attributes = {};
}
attributes[pendingAttribute] = null;
break;
}
case TokenType.AttributeValue: {
const value = scanner.getTokenText();
const attributes = curr.attributes;
if (attributes && pendingAttribute) {
attributes[pendingAttribute] = value;
pendingAttribute = null;
}
break;
}
}
token = scanner.scan();
}
while (curr.parent) {
curr.end = text.length;
curr.closed = false;
curr = curr.parent;
}
return {
roots: htmlDocument.children,
findNodeBefore: htmlDocument.findNodeBefore.bind(htmlDocument),
findNodeAt: htmlDocument.findNodeAt.bind(htmlDocument)
};
}
}
const entities = {
"Aacute;": "Á",
"Aacute": "Á",
"aacute;": "á",
"aacute": "á",
"Abreve;": "Ă",
"abreve;": "ă",
"ac;": "∾",
"acd;": "∿",
"acE;": "∾̳",
"Acirc;": "Â",
"Acirc": "Â",
"acirc;": "â",
"acirc": "â",
"acute;": "´",
"acute": "´",
"Acy;": "А",
"acy;": "а",
"AElig;": "Æ",
"AElig": "Æ",
"aelig;": "æ",
"aelig": "æ",
"af;": "",
"Afr;": "𝔄",
"afr;": "𝔞",
"Agrave;": "À",
"Agrave": "À",
"agrave;": "à",
"agrave": "à",
"alefsym;": "ℵ",
"aleph;": "ℵ",
"Alpha;": "Α",
"alpha;": "α",
"Amacr;": "Ā",
"amacr;": "ā",
"amalg;": "⨿",
"AMP;": "&",
"AMP": "&",
"amp;": "&",
"amp": "&",
"And;": "⩓",
"and;": "∧",
"andand;": "⩕",
"andd;": "⩜",
"andslope;": "⩘",
"andv;": "⩚",
"ang;": "∠",
"ange;": "⦤",
"angle;": "∠",
"angmsd;": "∡",
"angmsdaa;": "⦨",
"angmsdab;": "⦩",
"angmsdac;": "⦪",
"angmsdad;": "⦫",
"angmsdae;": "⦬",
"angmsdaf;": "⦭",
"angmsdag;": "⦮",
"angmsdah;": "⦯",
"angrt;": "∟",
"angrtvb;": "⊾",
"angrtvbd;": "⦝",
"angsph;": "∢",
"angst;": "Å",
"angzarr;": "⍼",
"Aogon;": "Ą",
"aogon;": "ą",
"Aopf;": "𝔸",
"aopf;": "𝕒",
"ap;": "≈",
"apacir;": "⩯",
"apE;": "⩰",
"ape;": "≊",
"apid;": "≋",
"apos;": "'",
"ApplyFunction;": "",
"approx;": "≈",
"approxeq;": "≊",
"Aring;": "Å",
"Aring": "Å",
"aring;": "å",
"aring": "å",
"Ascr;": "𝒜",
"ascr;": "𝒶",
"Assign;": "≔",
"ast;": "*",
"asymp;": "≈",
"asympeq;": "≍",
"Atilde;": "Ã",
"Atilde": "Ã",
"atilde;": "ã",
"atilde": "ã",
"Auml;": "Ä",
"Auml": "Ä",
"auml;": "ä",
"auml": "ä",
"awconint;": "∳",
"awint;": "⨑",
"backcong;": "≌",
"backepsilon;": "϶",
"backprime;": "‵",
"backsim;": "∽",
"backsimeq;": "⋍",
"Backslash;": "∖",
"Barv;": "⫧",
"barvee;": "⊽",
"Barwed;": "⌆",
"barwed;": "⌅",
"barwedge;": "⌅",
"bbrk;": "⎵",
"bbrktbrk;": "⎶",
"bcong;": "≌",
"Bcy;": "Б",
"bcy;": "б",
"bdquo;": "„",
"becaus;": "∵",
"Because;": "∵",
"because;": "∵",
"bemptyv;": "⦰",
"bepsi;": "϶",
"bernou;": "ℬ",
"Bernoullis;": "ℬ",
"Beta;": "Β",
"beta;": "β",
"beth;": "ℶ",
"between;": "≬",
"Bfr;": "𝔅",
"bfr;": "𝔟",
"bigcap;": "⋂",
"bigcirc;": "◯",
"bigcup;": "⋃",
"bigodot;": "⨀",
"bigoplus;": "⨁",
"bigotimes;": "⨂",
"bigsqcup;": "⨆",
"bigstar;": "★",
"bigtriangledown;": "▽",
"bigtriangleup;": "△",
"biguplus;": "⨄",
"bigvee;": "⋁",
"bigwedge;": "⋀",
"bkarow;": "⤍",
"blacklozenge;": "⧫",
"blacksquare;": "▪",
"blacktriangle;": "▴",
"blacktriangledown;": "▾",
"blacktriangleleft;": "◂",
"blacktriangleright;": "▸",
"blank;": "␣",
"blk12;": "▒",
"blk14;": "░",
"blk34;": "▓",
"block;": "█",
"bne;": "=⃥",
"bnequiv;": "≡⃥",
"bNot;": "⫭",
"bnot;": "⌐",
"Bopf;": "𝔹",
"bopf;": "𝕓",
"bot;": "⊥",
"bottom;": "⊥",
"bowtie;": "⋈",
"boxbox;": "⧉",
"boxDL;": "╗",
"boxDl;": "╖",
"boxdL;": "╕",
"boxdl;": "┐",
"boxDR;": "╔",
"boxDr;": "╓",
"boxdR;": "╒",
"boxdr;": "┌",
"boxH;": "═",
"boxh;": "─",
"boxHD;": "╦",
"boxHd;": "╤",
"boxhD;": "╥",
"boxhd;": "┬",
"boxHU;": "╩",
"boxHu;": "╧",
"boxhU;": "╨",
"boxhu;": "┴",
"boxminus;": "⊟",
"boxplus;": "⊞",
"boxtimes;": "⊠",
"boxUL;": "╝",
"boxUl;": "╜",
"boxuL;": "╛",
"boxul;": "┘",
"boxUR;": "╚",
"boxUr;": "╙",
"boxuR;": "╘",
"boxur;": "└",
"boxV;": "║",
"boxv;": "│",
"boxVH;": "╬",
"boxVh;": "╫",
"boxvH;": "╪",
"boxvh;": "┼",
"boxVL;": "╣",
"boxVl;": "╢",
"boxvL;": "╡",
"boxvl;": "┤",
"boxVR;": "╠",
"boxVr;": "╟",
"boxvR;": "╞",
"boxvr;": "├",
"bprime;": "‵",
"Breve;": "˘",
"breve;": "˘",
"brvbar;": "¦",
"brvbar": "¦",
"Bscr;": "ℬ",
"bscr;": "𝒷",
"bsemi;": "⁏",
"bsim;": "∽",
"bsime;": "⋍",
"bsol;": "\\",
"bsolb;": "⧅",
"bsolhsub;": "⟈",
"bull;": "•",
"bullet;": "•",
"bump;": "≎",
"bumpE;": "⪮",
"bumpe;": "≏",
"Bumpeq;": "≎",
"bumpeq;": "≏",
"Cacute;": "Ć",
"cacute;": "ć",
"Cap;": "⋒",
"cap;": "∩",
"capand;": "⩄",
"capbrcup;": "⩉",
"capcap;": "⩋",
"capcup;": "⩇",
"capdot;": "⩀",
"CapitalDifferentialD;": "ⅅ",
"caps;": "∩︀",
"caret;": "⁁",
"caron;": "ˇ",
"Cayleys;": "ℭ",
"ccaps;": "⩍",
"Ccaron;": "Č",
"ccaron;": "č",
"Ccedil;": "Ç",
"Ccedil": "Ç",
"ccedil;": "ç",
"ccedil": "ç",
"Ccirc;": "Ĉ",
"ccirc;": "ĉ",
"Cconint;": "∰",
"ccups;": "⩌",
"ccupssm;": "⩐",
"Cdot;": "Ċ",
"cdot;": "ċ",
"cedil;": "¸",
"cedil": "¸",
"Cedilla;": "¸",
"cemptyv;": "⦲",
"cent;": "¢",
"cent": "¢",
"CenterDot;": "·",
"centerdot;": "·",
"Cfr;": "ℭ",
"cfr;": "𝔠",
"CHcy;": "Ч",
"chcy;": "ч",
"check;": "✓",
"checkmark;": "✓",
"Chi;": "Χ",
"chi;": "χ",
"cir;": "○",
"circ;": "ˆ",
"circeq;": "≗",
"circlearrowleft;": "↺",
"circlearrowright;": "↻",
"circledast;": "⊛",
"circledcirc;": "⊚",
"circleddash;": "⊝",
"CircleDot;": "⊙",
"circledR;": "®",
"circledS;": "Ⓢ",
"CircleMinus;": "⊖",
"CirclePlus;": "⊕",
"CircleTimes;": "⊗",
"cirE;": "⧃",
"cire;": "≗",
"cirfnint;": "⨐",
"cirmid;": "⫯",
"cirscir;": "⧂",
"ClockwiseContourIntegral;": "∲",
"CloseCurlyDoubleQuote;": "”",
"CloseCurlyQuote;": "’",
"clubs;": "♣",
"clubsuit;": "♣",
"Colon;": "∷",
"colon;": ":",
"Colone;": "⩴",
"colone;": "≔",
"coloneq;": "≔",
"comma;": ",",
"commat;": "@",
"comp;": "∁",
"compfn;": "∘",
"complement;": "∁",
"complexes;": "ℂ",
"cong;": "≅",
"congdot;": "⩭",
"Congruent;": "≡",
"Conint;": "∯",
"conint;": "∮",
"ContourIntegral;": "∮",
"Copf;": "ℂ",
"copf;": "𝕔",
"coprod;": "∐",
"Coproduct;": "∐",
"COPY;": "©",
"COPY": "©",
"copy;": "©",
"copy": "©",
"copysr;": "℗",
"CounterClockwiseContourIntegral;": "∳",
"crarr;": "↵",
"Cross;": "⨯",
"cross;": "✗",
"Cscr;": "𝒞",
"cscr;": "𝒸",
"csub;": "⫏",
"csube;": "⫑",
"csup;": "⫐",
"csupe;": "⫒",
"ctdot;": "⋯",
"cudarrl;": "⤸",
"cudarrr;": "⤵",
"cuepr;": "⋞",
"cuesc;": "⋟",
"cularr;": "↶",
"cularrp;": "⤽",
"Cup;": "⋓",
"cup;": "∪",
"cupbrcap;": "⩈",
"CupCap;": "≍",
"cupcap;": "⩆",
"cupcup;": "⩊",
"cupdot;": "⊍",
"cupor;": "⩅",
"cups;": "∪︀",
"curarr;": "↷",
"curarrm;": "⤼",
"curlyeqprec;": "⋞",
"curlyeqsucc;": "⋟",
"curlyvee;": "⋎",
"curlywedge;": "⋏",
"curren;": "¤",
"curren": "¤",
"curvearrowleft;": "↶",
"curvearrowright;": "↷",
"cuvee;": "⋎",
"cuwed;": "⋏",
"cwconint;": "∲",
"cwint;": "∱",
"cylcty;": "⌭",
"Dagger;": "‡",
"dagger;": "†",
"daleth;": "ℸ",
"Darr;": "↡",
"dArr;": "⇓",
"darr;": "↓",
"dash;": "‐",
"Dashv;": "⫤",
"dashv;": "⊣",
"dbkarow;": "⤏",
"dblac;": "˝",
"Dcaron;": "Ď",
"dcaron;": "ď",
"Dcy;": "Д",
"dcy;": "д",
"DD;": "ⅅ",
"dd;": "ⅆ",
"ddagger;": "‡",
"ddarr;": "⇊",
"DDotrahd;": "⤑",
"ddotseq;": "⩷",
"deg;": "°",
"deg": "°",
"Del;": "∇",
"Delta;": "Δ",
"delta;": "δ",
"demptyv;": "⦱",
"dfisht;": "⥿",
"Dfr;": "𝔇",
"dfr;": "𝔡",
"dHar;": "⥥",
"dharl;": "⇃",
"dharr;": "⇂",
"DiacriticalAcute;": "´",
"DiacriticalDot;": "˙",
"DiacriticalDoubleAcute;": "˝",
"DiacriticalGrave;": "`",
"DiacriticalTilde;": "˜",
"diam;": "⋄",
"Diamond;": "⋄",
"diamond;": "⋄",
"diamondsuit;": "♦",
"diams;": "♦",
"die;": "¨",
"DifferentialD;": "ⅆ",
"digamma;": "ϝ",
"disin;": "⋲",
"div;": "÷",
"divide;": "÷",
"divide": "÷",
"divideontimes;": "⋇",
"divonx;": "⋇",
"DJcy;": "Ђ",
"djcy;": "ђ",
"dlcorn;": "⌞",
"dlcrop;": "⌍",
"dollar;": "$",
"Dopf;": "𝔻",
"dopf;": "𝕕",
"Dot;": "¨",
"dot;": "˙",
"DotDot;": "⃜",
"doteq;": "≐",
"doteqdot;": "≑",
"DotEqual;": "≐",
"dotminus;": "∸",
"dotplus;": "∔",
"dotsquare;": "⊡",
"doublebarwedge;": "⌆",
"DoubleContourIntegral;": "∯",
"DoubleDot;": "¨",
"DoubleDownArrow;": "⇓",
"DoubleLeftArrow;": "⇐",
"DoubleLeftRightArrow;": "⇔",
"DoubleLeftTee;": "⫤",
"DoubleLongLeftArrow;": "⟸",
"DoubleLongLeftRightArrow;": "⟺",
"DoubleLongRightArrow;": "⟹",
"DoubleRightArrow;": "⇒",
"DoubleRightTee;": "⊨",
"DoubleUpArrow;": "⇑",
"DoubleUpDownArrow;": "⇕",
"DoubleVerticalBar;": "∥",
"DownArrow;": "↓",
"Downarrow;": "⇓",
"downarrow;": "↓",
"DownArrowBar;": "⤓",
"DownArrowUpArrow;": "⇵",
"DownBreve;": "̑",
"downdownarrows;": "⇊",
"downharpoonleft;": "⇃",
"downharpoonright;": "⇂",
"DownLeftRightVector;": "⥐",
"DownLeftTeeVector;": "⥞",
"DownLeftVector;": "↽",
"DownLeftVectorBar;": "⥖",
"DownRightTeeVector;": "⥟",
"DownRightVector;": "⇁",
"DownRightVectorBar;": "⥗",
"DownTee;": "⊤",
"DownTeeArrow;": "↧",
"drbkarow;": "⤐",
"drcorn;": "⌟",
"drcrop;": "⌌",
"Dscr;": "𝒟",
"dscr;": "𝒹",
"DScy;": "Ѕ",
"dscy;": "ѕ",
"dsol;": "⧶",
"Dstrok;": "Đ",
"dstrok;": "đ",
"dtdot;": "⋱",
"dtri;": "▿",
"dtrif;": "▾",
"duarr;": "⇵",
"duhar;": "⥯",
"dwangle;": "⦦",
"DZcy;": "Џ",
"dzcy;": "џ",
"dzigrarr;": "⟿",
"Eacute;": "É",
"Eacute": "É",
"eacute;": "é",
"eacute": "é",
"easter;": "⩮",
"Ecaron;": "Ě",
"ecaron;": "ě",
"ecir;": "≖",
"Ecirc;": "Ê",
"Ecirc": "Ê",
"ecirc;": "ê",
"ecirc": "ê",
"ecolon;": "≕",
"Ecy;": "Э",
"ecy;": "э",
"eDDot;": "⩷",
"Edot;": "Ė",
"eDot;": "≑",
"edot;": "ė",
"ee;": "ⅇ",
"efDot;": "≒",
"Efr;": "𝔈",
"efr;": "𝔢",
"eg;": "⪚",
"Egrave;": "È",
"Egrave": "È",
"egrave;": "è",
"egrave": "è",
"egs;": "⪖",
"egsdot;": "⪘",
"el;": "⪙",
"Element;": "∈",
"elinters;": "⏧",
"ell;": "ℓ",
"els;": "⪕",
"elsdot;": "⪗",
"Emacr;": "Ē",
"emacr;": "ē",
"empty;": "∅",
"emptyset;": "∅",
"EmptySmallSquare;": "◻",
"emptyv;": "∅",
"EmptyVerySmallSquare;": "▫",
"emsp;": " ",
"emsp13;": " ",
"emsp14;": " ",
"ENG;": "Ŋ",
"eng;": "ŋ",
"ensp;": " ",
"Eogon;": "Ę",
"eogon;": "ę",
"Eopf;": "𝔼",
"eopf;": "𝕖",
"epar;": "⋕",
"eparsl;": "⧣",
"eplus;": "⩱",
"epsi;": "ε",
"Epsilon;": "Ε",
"epsilon;": "ε",
"epsiv;": "ϵ",
"eqcirc;": "≖",
"eqcolon;": "≕",
"eqsim;": "≂",
"eqslantgtr;": "⪖",
"eqslantless;": "⪕",
"Equal;": "⩵",
"equals;": "=",
"EqualTilde;": "≂",
"equest;": "≟",
"Equilibrium;": "⇌",
"equiv;": "≡",
"equivDD;": "⩸",
"eqvparsl;": "⧥",
"erarr;": "⥱",
"erDot;": "≓",
"Escr;": "ℰ",
"escr;": "ℯ",
"esdot;": "≐",
"Esim;": "⩳",
"esim;": "≂",
"Eta;": "Η",
"eta;": "η",
"ETH;": "Ð",
"ETH": "Ð",
"eth;": "ð",
"eth": "ð",
"Euml;": "Ë",
"Euml": "Ë",
"euml;": "ë",
"euml": "ë",
"euro;": "€",
"excl;": "!",
"exist;": "∃",
"Exists;": "∃",
"expectation;": "ℰ",
"ExponentialE;": "ⅇ",
"exponentiale;": "ⅇ",
"fallingdotseq;": "≒",
"Fcy;": "Ф",
"fcy;": "ф",
"female;": "♀",
"ffilig;": "ffi",
"fflig;": "ff",
"ffllig;": "ffl",
"Ffr;": "𝔉",
"ffr;": "𝔣",
"filig;": "fi",
"FilledSmallSquare;": "◼",
"FilledVerySmallSquare;": "▪",
"fjlig;": "fj",
"flat;": "♭",
"fllig;": "fl",
"fltns;": "▱",
"fnof;": "ƒ",
"Fopf;": "𝔽",
"fopf;": "𝕗",
"ForAll;": "∀",
"forall;": "∀",
"fork;": "⋔",
"forkv;": "⫙",
"Fouriertrf;": "ℱ",
"fpartint;": "⨍",
"frac12;": "½",
"frac12": "½",
"frac13;": "⅓",
"frac14;": "¼",
"frac14": "¼",
"frac15;": "⅕",
"frac16;": "⅙",
"frac18;": "⅛",
"frac23;": "⅔",
"frac25;": "⅖",
"frac34;": "¾",
"frac34": "¾",
"frac35;": "⅗",
"frac38;": "⅜",
"frac45;": "⅘",
"frac56;": "⅚",
"frac58;": "⅝",
"frac78;": "⅞",
"frasl;": "⁄",
"frown;": "⌢",
"Fscr;": "ℱ",
"fscr;": "𝒻",
"gacute;": "ǵ",
"Gamma;": "Γ",
"gamma;": "γ",
"Gammad;": "Ϝ",
"gammad;": "ϝ",
"gap;": "⪆",
"Gbreve;": "Ğ",
"gbreve;": "ğ",
"Gcedil;": "Ģ",
"Gcirc;": "Ĝ",
"gcirc;": "ĝ",
"Gcy;": "Г",
"gcy;": "г",
"Gdot;": "Ġ",
"gdot;": "ġ",
"gE;": "≧",
"ge;": "≥",
"gEl;": "⪌",
"gel;": "⋛",
"geq;": "≥",
"geqq;": "≧",
"geqslant;": "⩾",
"ges;": "⩾",
"gescc;": "⪩",
"gesdot;": "⪀",
"gesdoto;": "⪂",
"gesdotol;": "⪄",
"gesl;": "⋛︀",
"gesles;": "⪔",
"Gfr;": "𝔊",
"gfr;": "𝔤",
"Gg;": "⋙",
"gg;": "≫",
"ggg;": "⋙",
"gimel;": "ℷ",
"GJcy;": "Ѓ",
"gjcy;": "ѓ",
"gl;": "≷",
"gla;": "⪥",
"glE;": "⪒",
"glj;": "⪤",
"gnap;": "⪊",
"gnapprox;": "⪊",
"gnE;": "≩",
"gne;": "⪈",
"gneq;": "⪈",
"gneqq;": "≩",
"gnsim;": "⋧",
"Gopf;": "𝔾",
"gopf;": "𝕘",
"grave;": "`",
"GreaterEqual;": "≥",
"GreaterEqualLess;": "⋛",
"GreaterFullEqual;": "≧",
"GreaterGreater;": "⪢",
"GreaterLess;": "≷",
"GreaterSlantEqual;": "⩾",
"GreaterTilde;": "≳",
"Gscr;": "𝒢",
"gscr;": "ℊ",
"gsim;": "≳",
"gsime;": "⪎",
"gsiml;": "⪐",
"GT;": ">",
"GT": ">",
"Gt;": "≫",
"gt;": ">",
"gt": ">",
"gtcc;": "⪧",
"gtcir;": "⩺",
"gtdot;": "⋗",
"gtlPar;": "⦕",
"gtquest;": "⩼",
"gtrapprox;": "⪆",
"gtrarr;": "⥸",
"gtrdot;": "⋗",
"gtreqless;": "⋛",
"gtreqqless;": "⪌",
"gtrless;": "≷",
"gtrsim;": "≳",
"gvertneqq;": "≩︀",
"gvnE;": "≩︀",
"Hacek;": "ˇ",
"hairsp;": " ",
"half;": "½",
"hamilt;": "ℋ",
"HARDcy;": "Ъ",
"hardcy;": "ъ",
"hArr;": "⇔",
"harr;": "↔",
"harrcir;": "⥈",
"harrw;": "↭",
"Hat;": "^",
"hbar;": "ℏ",
"Hcirc;": "Ĥ",
"hcirc;": "ĥ",
"hearts;": "♥",
"heartsuit;": "♥",
"hellip;": "…",
"hercon;": "⊹",
"Hfr;": "ℌ",
"hfr;": "𝔥",
"HilbertSpace;": "ℋ",
"hksearow;": "⤥",
"hkswarow;": "⤦",
"hoarr;": "⇿",
"homtht;": "∻",
"hookleftarrow;": "↩",
"hookrightarrow;": "↪",
"Hopf;": "ℍ",
"hopf;": "𝕙",
"horbar;": "―",
"HorizontalLine;": "─",
"Hscr;": "ℋ",
"hscr;": "𝒽",
"hslash;": "ℏ",
"Hstrok;": "Ħ",
"hstrok;": "ħ",
"HumpDownHump;": "≎",
"HumpEqual;": "≏",
"hybull;": "⁃",
"hyphen;": "‐",
"Iacute;": "Í",
"Iacute": "Í",
"iacute;": "í",
"iacute": "í",
"ic;": "",
"Icirc;": "Î",
"Icirc": "Î",
"icirc;": "î",
"icirc": "î",
"Icy;": "И",
"icy;": "и",
"Idot;": "İ",
"IEcy;": "Е",
"iecy;": "е",
"iexcl;": "¡",
"iexcl": "¡",
"iff;": "⇔",
"Ifr;": "ℑ",
"ifr;": "𝔦",
"Igrave;": "Ì",
"Igrave": "Ì",
"igrave;": "ì",
"igrave": "ì",
"ii;": "ⅈ",
"iiiint;": "⨌",
"iiint;": "∭",
"iinfin;": "⧜",
"iiota;": "℩",
"IJlig;": "IJ",
"ijlig;": "ij",
"Im;": "ℑ",
"Imacr;": "Ī",
"imacr;": "ī",
"image;": "ℑ",
"ImaginaryI;": "ⅈ",
"imagline;": "ℐ",
"imagpart;": "ℑ",
"imath;": "ı",
"imof;": "⊷",
"imped;": "Ƶ",
"Implies;": "⇒",
"in;": "∈",
"incare;": "℅",
"infin;": "∞",
"infintie;": "⧝",
"inodot;": "ı",
"Int;": "∬",
"int;": "∫",
"intcal;": "⊺",
"integers;": "ℤ",
"Integral;": "∫",
"intercal;": "⊺",
"Intersection;": "⋂",
"intlarhk;": "⨗",
"intprod;": "⨼",
"InvisibleComma;": "",
"InvisibleTimes;": "",
"IOcy;": "Ё",
"iocy;": "ё",
"Iogon;": "Į",
"iogon;": "į",
"Iopf;": "𝕀",
"iopf;": "𝕚",
"Iota;": "Ι",
"iota;": "ι",
"iprod;": "⨼",
"iquest;": "¿",
"iquest": "¿",
"Iscr;": "ℐ",
"iscr;": "𝒾",
"isin;": "∈",
"isindot;": "⋵",
"isinE;": "⋹",
"isins;": "⋴",
"isinsv;": "⋳",
"isinv;": "∈",
"it;": "",
"Itilde;": "Ĩ",
"itilde;": "ĩ",
"Iukcy;": "І",
"iukcy;": "і",
"Iuml;": "Ï",
"Iuml": "Ï",
"iuml;": "ï",
"iuml": "ï",
"Jcirc;": "Ĵ",
"jcirc;": "ĵ",
"Jcy;": "Й",
"jcy;": "й",
"Jfr;": "𝔍",
"jfr;": "𝔧",
"jmath;": "ȷ",
"Jopf;": "𝕁",
"jopf;": "𝕛",
"Jscr;": "𝒥",
"jscr;": "𝒿",
"Jsercy;": "Ј",
"jsercy;": "ј",
"Jukcy;": "Є",
"jukcy;": "є",
"Kappa;": "Κ",
"kappa;": "κ",
"kappav;": "ϰ",
"Kcedil;": "Ķ",
"kcedil;": "ķ",
"Kcy;": "К",
"kcy;": "к",
"Kfr;": "𝔎",
"kfr;": "𝔨",
"kgreen;": "ĸ",
"KHcy;": "Х",
"khcy;": "х",
"KJcy;": "Ќ",
"kjcy;": "ќ",
"Kopf;": "𝕂",
"kopf;": "𝕜",
"Kscr;": "𝒦",
"kscr;": "𝓀",
"lAarr;": "⇚",
"Lacute;": "Ĺ",
"lacute;": "ĺ",
"laemptyv;": "⦴",
"lagran;": "ℒ",
"Lambda;": "Λ",
"lambda;": "λ",
"Lang;": "⟪",
"lang;": "⟨",
"langd;": "⦑",
"langle;": "⟨",
"lap;": "⪅",
"Laplacetrf;": "ℒ",
"laquo;": "«",
"laquo": "«",
"Larr;": "↞",
"lArr;": "⇐",
"larr;": "←",
"larrb;": "⇤",
"larrbfs;": "⤟",
"larrfs;": "⤝",
"larrhk;": "↩",
"larrlp;": "↫",
"larrpl;": "⤹",
"larrsim;": "⥳",
"larrtl;": "↢",
"lat;": "⪫",
"lAtail;": "⤛",
"latail;": "⤙",
"late;": "⪭",
"lates;": "⪭︀",
"lBarr;": "⤎",
"lbarr;": "⤌",
"lbbrk;": "❲",
"lbrace;": "{",
"lbrack;": "[",
"lbrke;": "⦋",
"lbrksld;": "⦏",
"lbrkslu;": "⦍",
"Lcaron;": "Ľ",
"lcaron;": "ľ",
"Lcedil;": "Ļ",
"lcedil;": "ļ",
"lceil;": "⌈",
"lcub;": "{",
"Lcy;": "Л",
"lcy;": "л",
"ldca;": "⤶",
"ldquo;": "“",
"ldquor;": "„",
"ldrdhar;": "⥧",
"ldrushar;": "⥋",
"ldsh;": "↲",
"lE;": "≦",
"le;": "≤",
"LeftAngleBracket;": "⟨",
"LeftArrow;": "←",
"Leftarrow;": "⇐",
"leftarrow;": "←",
"LeftArrowBar;": "⇤",
"LeftArrowRightArrow;": "⇆",
"leftarrowtail;": "↢",
"LeftCeiling;": "⌈",
"LeftDoubleBracket;": "⟦",
"LeftDownTeeVector;": "⥡",
"LeftDownVector;": "⇃",
"LeftDownVectorBar;": "⥙",
"LeftFloor;": "⌊",
"leftharpoondown;": "↽",
"leftharpoonup;": "↼",
"leftleftarrows;": "⇇",
"LeftRightArrow;": "↔",
"Leftrightarrow;": "⇔",
"leftrightarrow;": "↔",
"leftrightarrows;": "⇆",
"leftrightharpoons;": "⇋",
"leftrightsquigarrow;": "↭",
"LeftRightVector;": "⥎",
"LeftTee;": "⊣",
"LeftTeeArrow;": "↤",
"LeftTeeVector;": "⥚",
"leftthreetimes;": "⋋",
"LeftTriangle;": "⊲",
"LeftTriangleBar;": "⧏",
"LeftTriangleEqual;": "⊴",
"LeftUpDownVector;": "⥑",
"LeftUpTeeVector;": "⥠",
"LeftUpVector;": "↿",
"LeftUpVectorBar;": "⥘",
"LeftVector;": "↼",
"LeftVectorBar;": "⥒",
"lEg;": "⪋",
"leg;": "⋚",
"leq;": "≤",
"leqq;": "≦",
"leqslant;": "⩽",
"les;": "⩽",
"lescc;": "⪨",
"lesdot;": "⩿",
"lesdoto;": "⪁",
"lesdotor;": "⪃",
"lesg;": "⋚︀",
"lesges;": "⪓",
"lessapprox;": "⪅",
"lessdot;": "⋖",
"lesseqgtr;": "⋚",
"lesseqqgtr;": "⪋",
"LessEqualGreater;": "⋚",
"LessFullEqual;": "≦",
"LessGreater;": "≶",
"lessgtr;": "≶",
"LessLess;": "⪡",
"lesssim;": "≲",
"LessSlantEqual;": "⩽",
"LessTilde;": "≲",
"lfisht;": "⥼",
"lfloor;": "⌊",
"Lfr;": "𝔏",
"lfr;": "𝔩",
"lg;": "≶",
"lgE;": "⪑",
"lHar;": "⥢",
"lhard;": "↽",
"lharu;": "↼",
"lharul;": "⥪",
"lhblk;": "▄",
"LJcy;": "Љ",
"ljcy;": "љ",
"Ll;": "⋘",
"ll;": "≪",
"llarr;": "⇇",
"llcorner;": "⌞",
"Lleftarrow;": "⇚",
"llhard;": "⥫",
"lltri;": "◺",
"Lmidot;": "Ŀ",
"lmidot;": "ŀ",
"lmoust;": "⎰",
"lmoustache;": "⎰",
"lnap;": "⪉",
"lnapprox;": "⪉",
"lnE;": "≨",
"lne;": "⪇",
"lneq;": "⪇",
"lneqq;": "≨",
"lnsim;": "⋦",
"loang;": "⟬",
"loarr;": "⇽",
"lobrk;": "⟦",
"LongLeftArrow;": "⟵",
"Longleftarrow;": "⟸",
"longleftarrow;": "⟵",
"LongLeftRightArrow;": "⟷",
"Longleftrightarrow;": "⟺",
"longleftrightarrow;": "⟷",
"longmapsto;": "⟼",
"LongRightArrow;": "⟶",
"Longrightarrow;": "⟹",
"longrightarrow;": "⟶",
"looparrowleft;": "↫",
"looparrowright;": "↬",
"lopar;": "⦅",
"Lopf;": "𝕃",
"lopf;": "𝕝",
"loplus;": "⨭",
"lotimes;": "⨴",
"lowast;": "∗",
"lowbar;": "_",
"LowerLeftArrow;": "↙",
"LowerRightArrow;": "↘",
"loz;": "◊",
"lozenge;": "◊",
"lozf;": "⧫",
"lpar;": "(",
"lparlt;": "⦓",
"lrarr;": "⇆",
"lrcorner;": "⌟",
"lrhar;": "⇋",
"lrhard;": "⥭",
"lrm;": "",
"lrtri;": "⊿",
"lsaquo;": "‹",
"Lscr;": "ℒ",
"lscr;": "𝓁",
"Lsh;": "↰",
"lsh;": "↰",
"lsim;": "≲",
"lsime;": "⪍",
"lsimg;": "⪏",
"lsqb;": "[",
"lsquo;": "‘",
"lsquor;": "‚",
"Lstrok;": "Ł",
"lstrok;": "ł",
"LT;": "<",
"LT": "<",
"Lt;": "≪",
"lt;": "<",
"lt": "<",
"ltcc;": "⪦",
"ltcir;": "⩹",
"ltdot;": "⋖",
"lthree;": "⋋",
"ltimes;": "⋉",
"ltlarr;": "⥶",
"ltquest;": "⩻",
"ltri;": "◃",
"ltrie;": "⊴",
"ltrif;": "◂",
"ltrPar;": "⦖",
"lurdshar;": "⥊",
"luruhar;": "⥦",
"lvertneqq;": "≨︀",
"lvnE;": "≨︀",
"macr;": "¯",
"macr": "¯",
"male;": "♂",
"malt;": "✠",
"maltese;": "✠",
"Map;": "⤅",
"map;": "↦",
"mapsto;": "↦",
"mapstodown;": "↧",
"mapstoleft;": "↤",
"mapstoup;": "↥",
"marker;": "▮",
"mcomma;": "⨩",
"Mcy;": "М",
"mcy;": "м",
"mdash;": "—",
"mDDot;": "∺",
"measuredangle;": "∡",
"MediumSpace;": " ",
"Mellintrf;": "ℳ",
"Mfr;": "𝔐",
"mfr;": "𝔪",
"mho;": "℧",
"micro;": "µ",
"micro": "µ",
"mid;": "∣",
"midast;": "*",
"midcir;": "⫰",
"middot;": "·",
"middot": "·",
"minus;": "−",
"minusb;": "⊟",
"minusd;": "∸",
"minusdu;": "⨪",
"MinusPlus;": "∓",
"mlcp;": "⫛",
"mldr;": "…",
"mnplus;": "∓",
"models;": "⊧",
"Mopf;": "𝕄",
"mopf;": "𝕞",
"mp;": "∓",
"Mscr;": "ℳ",
"mscr;": "𝓂",
"mstpos;": "∾",
"Mu;": "Μ",
"mu;": "μ",
"multimap;": "⊸",
"mumap;": "⊸",
"nabla;": "∇",
"Nacute;": "Ń",
"nacute;": "ń",
"nang;": "∠⃒",
"nap;": "≉",
"napE;": "⩰̸",
"napid;": "≋̸",
"napos;": "ʼn",
"napprox;": "≉",
"natur;": "♮",
"natural;": "♮",
"naturals;": "ℕ",
"nbsp;": " ",
"nbsp": " ",
"nbump;": "≎̸",
"nbumpe;": "≏̸",
"ncap;": "⩃",
"Ncaron;": "Ň",
"ncaron;": "ň",
"Ncedil;": "Ņ",
"ncedil;": "ņ",
"ncong;": "≇",
"ncongdot;": "⩭̸",
"ncup;": "⩂",
"Ncy;": "Н",
"ncy;": "н",
"ndash;": "–",
"ne;": "≠",
"nearhk;": "⤤",
"neArr;": "⇗",
"nearr;": "↗",
"nearrow;": "↗",
"nedot;": "≐̸",
"NegativeMediumSpace;": "",
"NegativeThickSpace;": "",
"NegativeThinSpace;": "",
"NegativeVeryThinSpace;": "",
"nequiv;": "≢",
"nesear;": "⤨",
"nesim;": "≂̸",
"NestedGreaterGreater;": "≫",
"NestedLessLess;": "≪",
"NewLine;": "\n",
"nexist;": "∄",
"nexists;": "∄",
"Nfr;": "𝔑",
"nfr;": "𝔫",
"ngE;": "≧̸",
"nge;": "≱",
"ngeq;": "≱",
"ngeqq;": "≧̸",
"ngeqslant;": "⩾̸",
"nges;": "⩾̸",
"nGg;": "⋙̸",
"ngsim;": "≵",
"nGt;": "≫⃒",
"ngt;": "≯",
"ngtr;": "≯",
"nGtv;": "≫̸",
"nhArr;": "⇎",
"nharr;": "↮",
"nhpar;": "⫲",
"ni;": "∋",
"nis;": "⋼",
"nisd;": "⋺",
"niv;": "∋",
"NJcy;": "Њ",
"njcy;": "њ",
"nlArr;": "⇍",
"nlarr;": "↚",
"nldr;": "‥",
"nlE;": "≦̸",
"nle;": "≰",
"nLeftarrow;": "⇍",
"nleftarrow;": "↚",
"nLeftrightarrow;": "⇎",
"nleftrightarrow;": "↮",
"nleq;": "≰",
"nleqq;": "≦̸",
"nleqslant;": "⩽̸",
"nles;": "⩽̸",
"nless;": "≮",
"nLl;": "⋘̸",
"nlsim;": "≴",
"nLt;": "≪⃒",
"nlt;": "≮",
"nltri;": "⋪",
"nltrie;": "⋬",
"nLtv;": "≪̸",
"nmid;": "∤",
"NoBreak;": "",
"NonBreakingSpace;": " ",
"Nopf;": "ℕ",
"nopf;": "𝕟",
"Not;": "⫬",
"not;": "¬",
"not": "¬",
"NotCongruent;": "≢",
"NotCupCap;": "≭",
"NotDoubleVerticalBar;": "∦",
"NotElement;": "∉",
"NotEqual;": "≠",
"NotEqualTilde;": "≂̸",
"NotExists;": "∄",
"NotGreater;": "≯",
"NotGreaterEqual;": "≱",
"NotGreaterFullEqual;": "≧̸",
"NotGreaterGreater;": "≫̸",
"NotGreaterLess;": "≹",
"NotGreaterSlantEqual;": "⩾̸",
"NotGreaterTilde;": "≵",
"NotHumpDownHump;": "≎̸",
"NotHumpEqual;": "≏̸",
"notin;": "∉",
"notindot;": "⋵̸",
"notinE;": "⋹̸",
"notinva;": "∉",
"notinvb;": "⋷",
"notinvc;": "⋶",
"NotLeftTriangle;": "⋪",
"NotLeftTriangleBar;": "⧏̸",
"NotLeftTriangleEqual;": "⋬",
"NotLess;": "≮",
"NotLessEqual;": "≰",
"NotLessGreater;": "≸",
"NotLessLess;": "≪̸",
"NotLessSlantEqual;": "⩽̸",
"NotLessTilde;": "≴",
"NotNestedGreaterGreater;": "⪢̸",
"NotNestedLessLess;": "⪡̸",
"notni;": "∌",
"notniva;": "∌",
"notnivb;": "⋾",
"notnivc;": "⋽",
"NotPrecedes;": "⊀",
"NotPrecedesEqual;": "⪯̸",
"NotPrecedesSlantEqual;": "⋠",
"NotReverseElement;": "∌",
"NotRightTriangle;": "⋫",
"NotRightTriangleBar;": "⧐̸",
"NotRightTriangleEqual;": "⋭",
"NotSquareSubset;": "⊏̸",
"NotSquareSubsetEqual;": "⋢",
"NotSquareSuperset;": "⊐̸",
"NotSquareSupersetEqual;": "⋣",
"NotSubset;": "⊂⃒",
"NotSubsetEqual;": "⊈",
"NotSucceeds;": "⊁",
"NotSucceedsEqual;": "⪰̸",
"NotSucceedsSlantEqual;": "⋡",
"NotSucceedsTilde;": "≿̸",
"NotSuperset;": "⊃⃒",
"NotSupersetEqual;": "⊉",
"NotTilde;": "≁",
"NotTildeEqual;": "≄",
"NotTildeFullEqual;": "≇",
"NotTildeTilde;": "≉",
"NotVerticalBar;": "∤",
"npar;": "∦",