UNPKG

bookracy-convertor

Version:

A tool to convert EPUB files to PDF using jsPDF

1,901 lines 369 kB
import { jsPDF as $s } from "jspdf"; import Rs from "jszip"; import { convert as Ms } from "html-to-text"; typeof globalThis.Node > "u" && (globalThis.Node = { ELEMENT_NODE: 1, TEXT_NODE: 3 }); const qs = async (e) => { const t = await fetch(e); if (!t.ok) throw console.error(`FETCHFILE_ERROR - Fetch failed for URL: ${e}, Status: ${t.status} ${t.statusText}`), new Error(`Failed to fetch file: ${t.statusText}`); const r = await t.blob(), n = r.type; return console.log(`FETCHFILE_DEBUG - URL: ${e}, Detected MIME Type: '${n}'`), { buffer: await r.arrayBuffer(), mimeType: n }; }; var Qe = {}, je = {}; function js(e, t, r) { if (r === void 0 && (r = Array.prototype), e && typeof r.find == "function") return r.find.call(e, t); for (var n = 0; n < e.length; n++) if (Object.prototype.hasOwnProperty.call(e, n)) { var i = e[n]; if (t.call(void 0, i, n, e)) return i; } } function xn(e, t) { return t === void 0 && (t = Object), t && typeof t.freeze == "function" ? t.freeze(e) : e; } function Us(e, t) { if (e === null || typeof e != "object") throw new TypeError("target is not an object"); for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (e[r] = t[r]); return e; } var xo = xn({ /** * `text/html`, the only mime type that triggers treating an XML document as HTML. * * @see DOMParser.SupportedType.isHTML * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration * @see https://en.wikipedia.org/wiki/HTML Wikipedia * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec */ HTML: "text/html", /** * Helper method to check a mime type if it indicates an HTML document * * @param {string} [value] * @returns {boolean} * * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration * @see https://en.wikipedia.org/wiki/HTML Wikipedia * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring */ isHTML: function(e) { return e === xo.HTML; }, /** * `application/xml`, the standard mime type for XML documents. * * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303 * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia */ XML_APPLICATION: "application/xml", /** * `text/html`, an alias for `application/xml`. * * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303 * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia */ XML_TEXT: "text/xml", /** * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace, * but is parsed as an XML document. * * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec * @see https://en.wikipedia.org/wiki/XHTML Wikipedia */ XML_XHTML_APPLICATION: "application/xhtml+xml", /** * `image/svg+xml`, * * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1 * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia */ XML_SVG_IMAGE: "image/svg+xml" }), Ao = xn({ /** * The XHTML namespace. * * @see http://www.w3.org/1999/xhtml */ HTML: "http://www.w3.org/1999/xhtml", /** * Checks if `uri` equals `NAMESPACE.HTML`. * * @param {string} [uri] * * @see NAMESPACE.HTML */ isHTML: function(e) { return e === Ao.HTML; }, /** * The SVG namespace. * * @see http://www.w3.org/2000/svg */ SVG: "http://www.w3.org/2000/svg", /** * The `xml:` namespace. * * @see http://www.w3.org/XML/1998/namespace */ XML: "http://www.w3.org/XML/1998/namespace", /** * The `xmlns:` namespace * * @see https://www.w3.org/2000/xmlns/ */ XMLNS: "http://www.w3.org/2000/xmlns/" }); je.assign = Us; je.find = js; je.freeze = xn; je.MIME_TYPE = xo; je.NAMESPACE = Ao; var Co = je, Be = Co.find, $t = Co.NAMESPACE; function Hs(e) { return e !== ""; } function Ws(e) { return e ? e.split(/[\t\n\f\r ]+/).filter(Hs) : []; } function Gs(e, t) { return e.hasOwnProperty(t) || (e[t] = !0), e; } function Zn(e) { if (!e) return []; var t = Ws(e); return Object.keys(t.reduce(Gs, {})); } function Vs(e) { return function(t) { return e && e.indexOf(t) !== -1; }; } function Wt(e, t) { for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]); } function fe(e, t) { var r = e.prototype; if (!(r instanceof t)) { let n = function() { }; n.prototype = t.prototype, n = new n(), Wt(r, n), e.prototype = r = n; } r.constructor != e && (typeof e != "function" && console.error("unknown Class:" + e), r.constructor = e); } var de = {}, Ce = de.ELEMENT_NODE = 1, vt = de.ATTRIBUTE_NODE = 2, hr = de.TEXT_NODE = 3, Do = de.CDATA_SECTION_NODE = 4, So = de.ENTITY_REFERENCE_NODE = 5, Xs = de.ENTITY_NODE = 6, Eo = de.PROCESSING_INSTRUCTION_NODE = 7, To = de.COMMENT_NODE = 8, No = de.DOCUMENT_NODE = 9, Lo = de.DOCUMENT_TYPE_NODE = 10, Re = de.DOCUMENT_FRAGMENT_NODE = 11, Ys = de.NOTATION_NODE = 12, ue = {}, Z = {}; ue.INDEX_SIZE_ERR = (Z[1] = "Index size error", 1); ue.DOMSTRING_SIZE_ERR = (Z[2] = "DOMString size error", 2); var pe = ue.HIERARCHY_REQUEST_ERR = (Z[3] = "Hierarchy request error", 3); ue.WRONG_DOCUMENT_ERR = (Z[4] = "Wrong document", 4); ue.INVALID_CHARACTER_ERR = (Z[5] = "Invalid character", 5); ue.NO_DATA_ALLOWED_ERR = (Z[6] = "No data allowed", 6); ue.NO_MODIFICATION_ALLOWED_ERR = (Z[7] = "No modification allowed", 7); var Oo = ue.NOT_FOUND_ERR = (Z[8] = "Not found", 8); ue.NOT_SUPPORTED_ERR = (Z[9] = "Not supported", 9); var ei = ue.INUSE_ATTRIBUTE_ERR = (Z[10] = "Attribute in use", 10); ue.INVALID_STATE_ERR = (Z[11] = "Invalid state", 11); ue.SYNTAX_ERR = (Z[12] = "Syntax error", 12); ue.INVALID_MODIFICATION_ERR = (Z[13] = "Invalid modification", 13); ue.NAMESPACE_ERR = (Z[14] = "Invalid namespace", 14); ue.INVALID_ACCESS_ERR = (Z[15] = "Invalid access", 15); function V(e, t) { if (t instanceof Error) var r = t; else r = this, Error.call(this, Z[e]), this.message = Z[e], Error.captureStackTrace && Error.captureStackTrace(this, V); return r.code = e, t && (this.message = this.message + ": " + t), r; } V.prototype = Error.prototype; Wt(ue, V); function $e() { } $e.prototype = { /** * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. * @standard level1 */ length: 0, /** * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. * @standard level1 * @param index unsigned long * Index into the collection. * @return Node * The node at the indexth position in the NodeList, or null if that is not a valid index. */ item: function(e) { return e >= 0 && e < this.length ? this[e] : null; }, toString: function(e, t) { for (var r = [], n = 0; n < this.length; n++) dt(this[n], r, e, t); return r.join(""); }, /** * @private * @param {function (Node):boolean} predicate * @returns {Node[]} */ filter: function(e) { return Array.prototype.filter.call(this, e); }, /** * @private * @param {Node} item * @returns {number} */ indexOf: function(e) { return Array.prototype.indexOf.call(this, e); } }; function wt(e, t) { this._node = e, this._refresh = t, An(this); } function An(e) { var t = e._node._inc || e._node.ownerDocument._inc; if (e._inc !== t) { var r = e._refresh(e._node); if (Uo(e, "length", r.length), !e.$$length || r.length < e.$$length) for (var n = r.length; n in e; n++) Object.prototype.hasOwnProperty.call(e, n) && delete e[n]; Wt(r, e), e._inc = t; } } wt.prototype.item = function(e) { return An(this), this[e] || null; }; fe(wt, $e); function pr() { } function _o(e, t) { for (var r = e.length; r--; ) if (e[r] === t) return r; } function ti(e, t, r, n) { if (n ? t[_o(t, n)] = r : t[t.length++] = r, e) { r.ownerElement = e; var i = e.ownerDocument; i && (n && Po(i, e, n), Ks(i, e, r)); } } function ri(e, t, r) { var n = _o(t, r); if (n >= 0) { for (var i = t.length - 1; n < i; ) t[n] = t[++n]; if (t.length = i, e) { var o = e.ownerDocument; o && (Po(o, e, r), r.ownerElement = null); } } else throw new V(Oo, new Error(e.tagName + "@" + r)); } pr.prototype = { length: 0, item: $e.prototype.item, getNamedItem: function(e) { for (var t = this.length; t--; ) { var r = this[t]; if (r.nodeName == e) return r; } }, setNamedItem: function(e) { var t = e.ownerElement; if (t && t != this._ownerElement) throw new V(ei); var r = this.getNamedItem(e.nodeName); return ti(this._ownerElement, this, e, r), r; }, /* returns Node */ setNamedItemNS: function(e) { var t = e.ownerElement, r; if (t && t != this._ownerElement) throw new V(ei); return r = this.getNamedItemNS(e.namespaceURI, e.localName), ti(this._ownerElement, this, e, r), r; }, /* returns Node */ removeNamedItem: function(e) { var t = this.getNamedItem(e); return ri(this._ownerElement, this, t), t; }, // raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR //for level2 removeNamedItemNS: function(e, t) { var r = this.getNamedItemNS(e, t); return ri(this._ownerElement, this, r), r; }, getNamedItemNS: function(e, t) { for (var r = this.length; r--; ) { var n = this[r]; if (n.localName == t && n.namespaceURI == e) return n; } return null; } }; function Bo() { } Bo.prototype = { /** * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported. * The different implementations fairly diverged in what kind of features were reported. * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use. * * @deprecated It is deprecated and modern browsers return true in all cases. * * @param {string} feature * @param {string} [version] * @returns {boolean} always true * * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard */ hasFeature: function(e, t) { return !0; }, /** * Creates an XML Document object of the specified type with its document element. * * __It behaves slightly different from the description in the living standard__: * - There is no interface/class `XMLDocument`, it returns a `Document` instance. * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared. * - this implementation is not validating names or qualified names * (when parsing XML strings, the SAX parser takes care of that) * * @param {string|null} namespaceURI * @param {string} qualifiedName * @param {DocumentType=null} doctype * @returns {Document} * * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial) * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core * * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names */ createDocument: function(e, t, r) { var n = new Gt(); if (n.implementation = this, n.childNodes = new $e(), n.doctype = r || null, r && n.appendChild(r), t) { var i = n.createElementNS(e, t); n.appendChild(i); } return n; }, /** * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`. * * __This behavior is slightly different from the in the specs__: * - this implementation is not validating names or qualified names * (when parsing XML strings, the SAX parser takes care of that) * * @param {string} qualifiedName * @param {string} [publicId] * @param {string} [systemId] * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation * or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()` * * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard * * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names */ createDocumentType: function(e, t, r) { var n = new Cr(); return n.name = e, n.nodeName = e, n.publicId = t || "", n.systemId = r || "", n; } }; function $() { } $.prototype = { firstChild: null, lastChild: null, previousSibling: null, nextSibling: null, attributes: null, parentNode: null, childNodes: null, ownerDocument: null, nodeValue: null, namespaceURI: null, prefix: null, localName: null, // Modified in DOM Level 2: insertBefore: function(e, t) { return fr(this, e, t); }, replaceChild: function(e, t) { fr(this, e, t, zo), t && this.removeChild(t); }, removeChild: function(e) { return Io(this, e); }, appendChild: function(e) { return this.insertBefore(e, null); }, hasChildNodes: function() { return this.firstChild != null; }, cloneNode: function(e) { return on(this.ownerDocument || this, this, e); }, // Modified in DOM Level 2: normalize: function() { for (var e = this.firstChild; e; ) { var t = e.nextSibling; t && t.nodeType == hr && e.nodeType == hr ? (this.removeChild(t), e.appendData(t.data)) : (e.normalize(), e = t); } }, // Introduced in DOM Level 2: isSupported: function(e, t) { return this.ownerDocument.implementation.hasFeature(e, t); }, // Introduced in DOM Level 2: hasAttributes: function() { return this.attributes.length > 0; }, /** * Look up the prefix associated to the given namespace URI, starting from this node. * **The default namespace declarations are ignored by this method.** * See Namespace Prefix Lookup for details on the algorithm used by this method. * * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._ * * @param {string | null} namespaceURI * @returns {string | null} * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix * @see https://github.com/xmldom/xmldom/issues/322 */ lookupPrefix: function(e) { for (var t = this; t; ) { var r = t._nsMap; if (r) { for (var n in r) if (Object.prototype.hasOwnProperty.call(r, n) && r[n] === e) return n; } t = t.nodeType == vt ? t.ownerDocument : t.parentNode; } return null; }, // Introduced in DOM Level 3: lookupNamespaceURI: function(e) { for (var t = this; t; ) { var r = t._nsMap; if (r && Object.prototype.hasOwnProperty.call(r, e)) return r[e]; t = t.nodeType == vt ? t.ownerDocument : t.parentNode; } return null; }, // Introduced in DOM Level 3: isDefaultNamespace: function(e) { var t = this.lookupPrefix(e); return t == null; } }; function Fo(e) { return e == "<" && "&lt;" || e == ">" && "&gt;" || e == "&" && "&amp;" || e == '"' && "&quot;" || "&#" + e.charCodeAt() + ";"; } Wt(de, $); Wt(de, $.prototype); function Rt(e, t) { if (t(e)) return !0; if (e = e.firstChild) do if (Rt(e, t)) return !0; while (e = e.nextSibling); } function Gt() { this.ownerDocument = this; } function Ks(e, t, r) { e && e._inc++; var n = r.namespaceURI; n === $t.XMLNS && (t._nsMap[r.prefix ? r.localName : ""] = r.value); } function Po(e, t, r, n) { e && e._inc++; var i = r.namespaceURI; i === $t.XMLNS && delete t._nsMap[r.prefix ? r.localName : ""]; } function Cn(e, t, r) { if (e && e._inc) { e._inc++; var n = t.childNodes; if (r) n[n.length++] = r; else { for (var i = t.firstChild, o = 0; i; ) n[o++] = i, i = i.nextSibling; n.length = o, delete n[n.length]; } } } function Io(e, t) { var r = t.previousSibling, n = t.nextSibling; return r ? r.nextSibling = n : e.firstChild = n, n ? n.previousSibling = r : e.lastChild = r, t.parentNode = null, t.previousSibling = null, t.nextSibling = null, Cn(e.ownerDocument, e), t; } function Qs(e) { return e && (e.nodeType === $.DOCUMENT_NODE || e.nodeType === $.DOCUMENT_FRAGMENT_NODE || e.nodeType === $.ELEMENT_NODE); } function Js(e) { return e && (Fe(e) || Dn(e) || Me(e) || e.nodeType === $.DOCUMENT_FRAGMENT_NODE || e.nodeType === $.COMMENT_NODE || e.nodeType === $.PROCESSING_INSTRUCTION_NODE); } function Me(e) { return e && e.nodeType === $.DOCUMENT_TYPE_NODE; } function Fe(e) { return e && e.nodeType === $.ELEMENT_NODE; } function Dn(e) { return e && e.nodeType === $.TEXT_NODE; } function ni(e, t) { var r = e.childNodes || []; if (Be(r, Fe) || Me(t)) return !1; var n = Be(r, Me); return !(t && n && r.indexOf(n) > r.indexOf(t)); } function ii(e, t) { var r = e.childNodes || []; function n(o) { return Fe(o) && o !== t; } if (Be(r, n)) return !1; var i = Be(r, Me); return !(t && i && r.indexOf(i) > r.indexOf(t)); } function Zs(e, t, r) { if (!Qs(e)) throw new V(pe, "Unexpected parent node type " + e.nodeType); if (r && r.parentNode !== e) throw new V(Oo, "child not in parent"); if ( // 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a "HierarchyRequestError" DOMException. !Js(t) || // 5. If either `node` is a Text node and `parent` is a document, // the sax parser currently adds top level text nodes, this will be fixed in 0.9.0 // || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE) // or `node` is a doctype and `parent` is not a document, then throw a "HierarchyRequestError" DOMException. Me(t) && e.nodeType !== $.DOCUMENT_NODE ) throw new V( pe, "Unexpected node type " + t.nodeType + " for parent node type " + e.nodeType ); } function el(e, t, r) { var n = e.childNodes || [], i = t.childNodes || []; if (t.nodeType === $.DOCUMENT_FRAGMENT_NODE) { var o = i.filter(Fe); if (o.length > 1 || Be(i, Dn)) throw new V(pe, "More than one element or text in fragment"); if (o.length === 1 && !ni(e, r)) throw new V(pe, "Element in fragment can not be inserted before doctype"); } if (Fe(t) && !ni(e, r)) throw new V(pe, "Only one element can be added and only after doctype"); if (Me(t)) { if (Be(n, Me)) throw new V(pe, "Only one doctype is allowed"); var s = Be(n, Fe); if (r && n.indexOf(s) < n.indexOf(r)) throw new V(pe, "Doctype can only be inserted before an element"); if (!r && s) throw new V(pe, "Doctype can not be appended since element is present"); } } function zo(e, t, r) { var n = e.childNodes || [], i = t.childNodes || []; if (t.nodeType === $.DOCUMENT_FRAGMENT_NODE) { var o = i.filter(Fe); if (o.length > 1 || Be(i, Dn)) throw new V(pe, "More than one element or text in fragment"); if (o.length === 1 && !ii(e, r)) throw new V(pe, "Element in fragment can not be inserted before doctype"); } if (Fe(t) && !ii(e, r)) throw new V(pe, "Only one element can be added and only after doctype"); if (Me(t)) { if (Be(n, function(l) { return Me(l) && l !== r; })) throw new V(pe, "Only one doctype is allowed"); var s = Be(n, Fe); if (r && n.indexOf(s) < n.indexOf(r)) throw new V(pe, "Doctype can only be inserted before an element"); } } function fr(e, t, r, n) { Zs(e, t, r), e.nodeType === $.DOCUMENT_NODE && (n || el)(e, t, r); var i = t.parentNode; if (i && i.removeChild(t), t.nodeType === Re) { var o = t.firstChild; if (o == null) return t; var s = t.lastChild; } else o = s = t; var c = r ? r.previousSibling : e.lastChild; o.previousSibling = c, s.nextSibling = r, c ? c.nextSibling = o : e.firstChild = o, r == null ? e.lastChild = s : r.previousSibling = s; do o.parentNode = e; while (o !== s && (o = o.nextSibling)); return Cn(e.ownerDocument || e, e), t.nodeType == Re && (t.firstChild = t.lastChild = null), t; } function tl(e, t) { return t.parentNode && t.parentNode.removeChild(t), t.parentNode = e, t.previousSibling = e.lastChild, t.nextSibling = null, t.previousSibling ? t.previousSibling.nextSibling = t : e.firstChild = t, e.lastChild = t, Cn(e.ownerDocument, e, t), t; } Gt.prototype = { //implementation : null, nodeName: "#document", nodeType: No, /** * The DocumentType node of the document. * * @readonly * @type DocumentType */ doctype: null, documentElement: null, _inc: 1, insertBefore: function(e, t) { if (e.nodeType == Re) { for (var r = e.firstChild; r; ) { var n = r.nextSibling; this.insertBefore(r, t), r = n; } return e; } return fr(this, e, t), e.ownerDocument = this, this.documentElement === null && e.nodeType === Ce && (this.documentElement = e), e; }, removeChild: function(e) { return this.documentElement == e && (this.documentElement = null), Io(this, e); }, replaceChild: function(e, t) { fr(this, e, t, zo), e.ownerDocument = this, t && this.removeChild(t), Fe(e) && (this.documentElement = e); }, // Introduced in DOM Level 2: importNode: function(e, t) { return jo(this, e, t); }, // Introduced in DOM Level 2: getElementById: function(e) { var t = null; return Rt(this.documentElement, function(r) { if (r.nodeType == Ce && r.getAttribute("id") == e) return t = r, !0; }), t; }, /** * The `getElementsByClassName` method of `Document` interface returns an array-like object * of all child elements which have **all** of the given class name(s). * * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters. * * * Warning: This is a live LiveNodeList. * Changes in the DOM will reflect in the array as the changes occur. * If an element selected by this array no longer qualifies for the selector, * it will automatically be removed. Be aware of this for iteration purposes. * * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace * * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname */ getElementsByClassName: function(e) { var t = Zn(e); return new wt(this, function(r) { var n = []; return t.length > 0 && Rt(r.documentElement, function(i) { if (i !== r && i.nodeType === Ce) { var o = i.getAttribute("class"); if (o) { var s = e === o; if (!s) { var c = Zn(o); s = t.every(Vs(c)); } s && n.push(i); } } }), n; }); }, //document factory method: createElement: function(e) { var t = new rt(); t.ownerDocument = this, t.nodeName = e, t.tagName = e, t.localName = e, t.childNodes = new $e(); var r = t.attributes = new pr(); return r._ownerElement = t, t; }, createDocumentFragment: function() { var e = new Dr(); return e.ownerDocument = this, e.childNodes = new $e(), e; }, createTextNode: function(e) { var t = new Sn(); return t.ownerDocument = this, t.appendData(e), t; }, createComment: function(e) { var t = new En(); return t.ownerDocument = this, t.appendData(e), t; }, createCDATASection: function(e) { var t = new Tn(); return t.ownerDocument = this, t.appendData(e), t; }, createProcessingInstruction: function(e, t) { var r = new Ln(); return r.ownerDocument = this, r.tagName = r.nodeName = r.target = e, r.nodeValue = r.data = t, r; }, createAttribute: function(e) { var t = new dr(); return t.ownerDocument = this, t.name = e, t.nodeName = e, t.localName = e, t.specified = !0, t; }, createEntityReference: function(e) { var t = new Nn(); return t.ownerDocument = this, t.nodeName = e, t; }, // Introduced in DOM Level 2: createElementNS: function(e, t) { var r = new rt(), n = t.split(":"), i = r.attributes = new pr(); return r.childNodes = new $e(), r.ownerDocument = this, r.nodeName = t, r.tagName = t, r.namespaceURI = e, n.length == 2 ? (r.prefix = n[0], r.localName = n[1]) : r.localName = t, i._ownerElement = r, r; }, // Introduced in DOM Level 2: createAttributeNS: function(e, t) { var r = new dr(), n = t.split(":"); return r.ownerDocument = this, r.nodeName = t, r.name = t, r.namespaceURI = e, r.specified = !0, n.length == 2 ? (r.prefix = n[0], r.localName = n[1]) : r.localName = t, r; } }; fe(Gt, $); function rt() { this._nsMap = {}; } rt.prototype = { nodeType: Ce, hasAttribute: function(e) { return this.getAttributeNode(e) != null; }, getAttribute: function(e) { var t = this.getAttributeNode(e); return t && t.value || ""; }, getAttributeNode: function(e) { return this.attributes.getNamedItem(e); }, setAttribute: function(e, t) { var r = this.ownerDocument.createAttribute(e); r.value = r.nodeValue = "" + t, this.setAttributeNode(r); }, removeAttribute: function(e) { var t = this.getAttributeNode(e); t && this.removeAttributeNode(t); }, //four real opeartion method appendChild: function(e) { return e.nodeType === Re ? this.insertBefore(e, null) : tl(this, e); }, setAttributeNode: function(e) { return this.attributes.setNamedItem(e); }, setAttributeNodeNS: function(e) { return this.attributes.setNamedItemNS(e); }, removeAttributeNode: function(e) { return this.attributes.removeNamedItem(e.nodeName); }, //get real attribute name,and remove it by removeAttributeNode removeAttributeNS: function(e, t) { var r = this.getAttributeNodeNS(e, t); r && this.removeAttributeNode(r); }, hasAttributeNS: function(e, t) { return this.getAttributeNodeNS(e, t) != null; }, getAttributeNS: function(e, t) { var r = this.getAttributeNodeNS(e, t); return r && r.value || ""; }, setAttributeNS: function(e, t, r) { var n = this.ownerDocument.createAttributeNS(e, t); n.value = n.nodeValue = "" + r, this.setAttributeNode(n); }, getAttributeNodeNS: function(e, t) { return this.attributes.getNamedItemNS(e, t); }, getElementsByTagName: function(e) { return new wt(this, function(t) { var r = []; return Rt(t, function(n) { n !== t && n.nodeType == Ce && (e === "*" || n.tagName == e) && r.push(n); }), r; }); }, getElementsByTagNameNS: function(e, t) { return new wt(this, function(r) { var n = []; return Rt(r, function(i) { i !== r && i.nodeType === Ce && (e === "*" || i.namespaceURI === e) && (t === "*" || i.localName == t) && n.push(i); }), n; }); } }; Gt.prototype.getElementsByTagName = rt.prototype.getElementsByTagName; Gt.prototype.getElementsByTagNameNS = rt.prototype.getElementsByTagNameNS; fe(rt, $); function dr() { } dr.prototype.nodeType = vt; fe(dr, $); function Vt() { } Vt.prototype = { data: "", substringData: function(e, t) { return this.data.substring(e, e + t); }, appendData: function(e) { e = this.data + e, this.nodeValue = this.data = e, this.length = e.length; }, insertData: function(e, t) { this.replaceData(e, 0, t); }, appendChild: function(e) { throw new Error(Z[pe]); }, deleteData: function(e, t) { this.replaceData(e, t, ""); }, replaceData: function(e, t, r) { var n = this.data.substring(0, e), i = this.data.substring(e + t); r = n + r + i, this.nodeValue = this.data = r, this.length = r.length; } }; fe(Vt, $); function Sn() { } Sn.prototype = { nodeName: "#text", nodeType: hr, splitText: function(e) { var t = this.data, r = t.substring(e); t = t.substring(0, e), this.data = this.nodeValue = t, this.length = t.length; var n = this.ownerDocument.createTextNode(r); return this.parentNode && this.parentNode.insertBefore(n, this.nextSibling), n; } }; fe(Sn, Vt); function En() { } En.prototype = { nodeName: "#comment", nodeType: To }; fe(En, Vt); function Tn() { } Tn.prototype = { nodeName: "#cdata-section", nodeType: Do }; fe(Tn, Vt); function Cr() { } Cr.prototype.nodeType = Lo; fe(Cr, $); function $o() { } $o.prototype.nodeType = Ys; fe($o, $); function Ro() { } Ro.prototype.nodeType = Xs; fe(Ro, $); function Nn() { } Nn.prototype.nodeType = So; fe(Nn, $); function Dr() { } Dr.prototype.nodeName = "#document-fragment"; Dr.prototype.nodeType = Re; fe(Dr, $); function Ln() { } Ln.prototype.nodeType = Eo; fe(Ln, $); function Mo() { } Mo.prototype.serializeToString = function(e, t, r) { return qo.call(e, t, r); }; $.prototype.toString = qo; function qo(e, t) { var r = [], n = this.nodeType == 9 && this.documentElement || this, i = n.prefix, o = n.namespaceURI; if (o && i == null) { var i = n.lookupPrefix(o); if (i == null) var s = [ { namespace: o, prefix: null } //{namespace:uri,prefix:''} ]; } return dt(this, r, e, t, s), r.join(""); } function oi(e, t, r) { var n = e.prefix || "", i = e.namespaceURI; if (!i || n === "xml" && i === $t.XML || i === $t.XMLNS) return !1; for (var o = r.length; o--; ) { var s = r[o]; if (s.prefix === n) return s.namespace !== i; } return !0; } function Fr(e, t, r) { e.push(" ", t, '="', r.replace(/[<>&"\t\n\r]/g, Fo), '"'); } function dt(e, t, r, n, i) { if (i || (i = []), n) if (e = n(e), e) { if (typeof e == "string") { t.push(e); return; } } else return; switch (e.nodeType) { case Ce: var o = e.attributes, s = o.length, v = e.firstChild, c = e.tagName; r = $t.isHTML(e.namespaceURI) || r; var l = c; if (!r && !e.prefix && e.namespaceURI) { for (var a, u = 0; u < o.length; u++) if (o.item(u).name === "xmlns") { a = o.item(u).value; break; } if (!a) for (var h = i.length - 1; h >= 0; h--) { var p = i[h]; if (p.prefix === "" && p.namespace === e.namespaceURI) { a = p.namespace; break; } } if (a !== e.namespaceURI) for (var h = i.length - 1; h >= 0; h--) { var p = i[h]; if (p.namespace === e.namespaceURI) { p.prefix && (l = p.prefix + ":" + c); break; } } } t.push("<", l); for (var m = 0; m < s; m++) { var y = o.item(m); y.prefix == "xmlns" ? i.push({ prefix: y.localName, namespace: y.value }) : y.nodeName == "xmlns" && i.push({ prefix: "", namespace: y.value }); } for (var m = 0; m < s; m++) { var y = o.item(m); if (oi(y, r, i)) { var b = y.prefix || "", A = y.namespaceURI; Fr(t, b ? "xmlns:" + b : "xmlns", A), i.push({ prefix: b, namespace: A }); } dt(y, t, r, n, i); } if (c === l && oi(e, r, i)) { var b = e.prefix || "", A = e.namespaceURI; Fr(t, b ? "xmlns:" + b : "xmlns", A), i.push({ prefix: b, namespace: A }); } if (v || r && !/^(?:meta|link|img|br|hr|input)$/i.test(c)) { if (t.push(">"), r && /^script$/i.test(c)) for (; v; ) v.data ? t.push(v.data) : dt(v, t, r, n, i.slice()), v = v.nextSibling; else for (; v; ) dt(v, t, r, n, i.slice()), v = v.nextSibling; t.push("</", l, ">"); } else t.push("/>"); return; case No: case Re: for (var v = e.firstChild; v; ) dt(v, t, r, n, i.slice()), v = v.nextSibling; return; case vt: return Fr(t, e.name, e.value); case hr: return t.push( e.data.replace(/[<&>]/g, Fo) ); case Do: return t.push("<![CDATA[", e.data, "]]>"); case To: return t.push("<!--", e.data, "-->"); case Lo: var T = e.publicId, D = e.systemId; if (t.push("<!DOCTYPE ", e.name), T) t.push(" PUBLIC ", T), D && D != "." && t.push(" ", D), t.push(">"); else if (D && D != ".") t.push(" SYSTEM ", D, ">"); else { var w = e.internalSubset; w && t.push(" [", w, "]"), t.push(">"); } return; case Eo: return t.push("<?", e.target, " ", e.data, "?>"); case So: return t.push("&", e.nodeName, ";"); default: t.push("??", e.nodeName); } } function jo(e, t, r) { var n; switch (t.nodeType) { case Ce: n = t.cloneNode(!1), n.ownerDocument = e; case Re: break; case vt: r = !0; break; } if (n || (n = t.cloneNode(!1)), n.ownerDocument = e, n.parentNode = null, r) for (var i = t.firstChild; i; ) n.appendChild(jo(e, i, r)), i = i.nextSibling; return n; } function on(e, t, r) { var n = new t.constructor(); for (var i in t) if (Object.prototype.hasOwnProperty.call(t, i)) { var o = t[i]; typeof o != "object" && o != n[i] && (n[i] = o); } switch (t.childNodes && (n.childNodes = new $e()), n.ownerDocument = e, n.nodeType) { case Ce: var s = t.attributes, c = n.attributes = new pr(), l = s.length; c._ownerElement = n; for (var a = 0; a < l; a++) n.setAttributeNode(on(e, s.item(a), !0)); break; case vt: r = !0; } if (r) for (var u = t.firstChild; u; ) n.appendChild(on(e, u, r)), u = u.nextSibling; return n; } function Uo(e, t, r) { e[t] = r; } try { if (Object.defineProperty) { let e = function(t) { switch (t.nodeType) { case Ce: case Re: var r = []; for (t = t.firstChild; t; ) t.nodeType !== 7 && t.nodeType !== 8 && r.push(e(t)), t = t.nextSibling; return r.join(""); default: return t.nodeValue; } }; Object.defineProperty(wt.prototype, "length", { get: function() { return An(this), this.$$length; } }), Object.defineProperty($.prototype, "textContent", { get: function() { return e(this); }, set: function(t) { switch (this.nodeType) { case Ce: case Re: for (; this.firstChild; ) this.removeChild(this.firstChild); (t || String(t)) && this.appendChild(this.ownerDocument.createTextNode(t)); break; default: this.data = t, this.value = t, this.nodeValue = t; } } }), Uo = function(t, r, n) { t["$$" + r] = n; }; } } catch { } Qe.DocumentType = Cr; Qe.DOMException = V; Qe.DOMImplementation = Bo; Qe.Element = rt; Qe.Node = $; Qe.NodeList = $e; Qe.XMLSerializer = Mo; var Sr = {}, Ho = {}; (function(e) { var t = je.freeze; e.XML_ENTITIES = t({ amp: "&", apos: "'", gt: ">", lt: "<", quot: '"' }), e.HTML_ENTITIES = t({ Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾̳", Acirc: "Â", acirc: "â", acute: "´", Acy: "А", acy: "а", AElig: "Æ", aelig: "æ", af: "⁡", Afr: "𝔄", afr: "𝔞", Agrave: "À", agrave: "à", alefsym: "ℵ", aleph: "ℵ", Alpha: "Α", alpha: "α", Amacr: "Ā", amacr: "ā", amalg: "⨿", 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: "å", Ascr: "𝒜", ascr: "𝒶", Assign: "≔", ast: "*", asymp: "≈", asympeq: "≍", Atilde: "Ã", atilde: "ã", 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: "¦", 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: "ç", Ccirc: "Ĉ", ccirc: "ĉ", Cconint: "∰", ccups: "⩌", ccupssm: "⩐", Cdot: "Ċ", cdot: "ċ", cedil: "¸", Cedilla: "¸", cemptyv: "⦲", 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: "©", 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: "¤", 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: "°", 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: "÷", 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: "é", easter: "⩮", Ecaron: "Ě", ecaron: "ě", ecir: "≖", Ecirc: "Ê", ecirc: "ê", ecolon: "≕", Ecy: "Э", ecy: "э", eDDot: "⩷", Edot: "Ė", eDot: "≑", edot: "ė", ee: "ⅇ", efDot: "≒", Efr: "𝔈", efr: "𝔢", eg: "⪚", 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: "ð", 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: "½", frac13: "⅓", frac14: "¼", frac15: "⅕", frac16: "⅙", frac18: "⅛", frac23: "⅔", frac25: "⅖", 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: ">", 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: "í", ic: "⁣", Icirc: "Î", icirc: "î", Icy: "И", icy: "и", Idot: "İ", IEcy: "Е", iecy: "е", iexcl: "¡", iff: "⇔", Ifr: "ℑ", ifr: "𝔦", 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: "⁣"