UNPKG

monaco-editor

Version:
1,925 lines (1,924 loc) 629 kB
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;": "∦",