001package org.hl7.fhir.utilities.xhtml; 002 003/* 004 Copyright (c) 2011+, HL7, Inc. 005 All rights reserved. 006 007 Redistribution and use in source and binary forms, with or without modification, 008 are permitted provided that the following conditions are met: 009 010 * Redistributions of source code must retain the above copyright notice, this 011 list of conditions and the following disclaimer. 012 * Redistributions in binary form must reproduce the above copyright notice, 013 this list of conditions and the following disclaimer in the documentation 014 and/or other materials provided with the distribution. 015 * Neither the name of HL7 nor the names of its contributors may be used to 016 endorse or promote products derived from this software without specific 017 prior written permission. 018 019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 020 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 021 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 022 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 023 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 024 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 025 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 026 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 027 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 028 POSSIBILITY OF SUCH DAMAGE. 029 030 */ 031 032 033 034import java.io.IOException; 035import java.io.InputStream; 036import java.io.InputStreamReader; 037import java.io.Reader; 038import java.io.StringReader; 039import java.nio.charset.StandardCharsets; 040import java.util.ArrayList; 041import java.util.HashMap; 042import java.util.HashSet; 043import java.util.List; 044import java.util.Map; 045import java.util.Set; 046 047import org.hl7.fhir.exceptions.FHIRException; 048import org.hl7.fhir.exceptions.FHIRFormatError; 049import org.hl7.fhir.utilities.StringPair; 050import org.hl7.fhir.utilities.Utilities; 051import org.hl7.fhir.utilities.i18n.I18nConstants; 052import org.hl7.fhir.utilities.xhtml.XhtmlNode.Location; 053import org.w3c.dom.Attr; 054import org.w3c.dom.Element; 055import org.w3c.dom.Node; 056import org.xmlpull.v1.XmlPullParser; 057import org.xmlpull.v1.XmlPullParserException; 058 059public class XhtmlParser { 060 public static final String XHTML_NS = "http://www.w3.org/1999/xhtml"; 061 private static final char END_OF_CHARS = (char) -1; 062 063 public class NamespaceNormalizationMap { 064 065 private String defaultNamespace; 066 067 private String originalNamespacePrefix; 068 private Map<String, String> map = new HashMap<String, String>(); 069 070 public NamespaceNormalizationMap(NamespaceNormalizationMap namespaceMap) { 071 if (namespaceMap != null) { 072 map.putAll(namespaceMap.map); 073 this.defaultNamespace = namespaceMap.defaultNamespace; 074 this.originalNamespacePrefix = namespaceMap.originalNamespacePrefix; 075 } 076 } 077 078 public void setDefaultNamespace(String defaultNamespace) { 079 this.defaultNamespace = defaultNamespace; 080 } 081 082 /** 083 * Keeps track of the original namespace this element had before it was normalized 084 * 085 * This way, child elements using that prefix will be able recognize that they 086 * should use the default namespace. 087 * 088 * <namespaceA:parentElement xmlns:namespaceA="http://www.somewhere.org/namespaceA"> 089 * <namespaceA: childElement/> 090 * </namespaceA:parentElement> 091 * 092 * parentElement's namespaceA would become the default namespace. 093 * 094 * When normalizing childElement originalNamespacePrefix would be namespaceA, 095 * so we would know that childElement should use the default namespace. 096 * 097 * <parentElement xmlns="http://www.somewhere.org/namespaceA"> 098 * <childElement/> 099 * </parentElement> 100 * 101 * @param originalNamespacePrefix 102 */ 103 public void setOriginalNamespacePrefix(String originalNamespacePrefix) { 104 this.originalNamespacePrefix = originalNamespacePrefix; 105 } 106 107 public void putNamespacePrefix(String prefix, String namespace) { 108 map.put(prefix, namespace); 109 } 110 111 public String getDefaultNamespace() { 112 return defaultNamespace; 113 } 114 115 public boolean hasDefaultNamespace() { 116 return defaultNamespace != null; 117 } 118 119 public String getNamespaceForPrefix(String prefix) { 120 if (originalNamespacePrefix != null && originalNamespacePrefix.equals(prefix)) { 121 return defaultNamespace; 122 } 123 return map.containsKey(prefix) ? map.get(prefix) : "http://error/undefined-namespace"; 124 } 125 126 public Set<Map.Entry<String, String>> getPrefixNamespaceEntrySet() { 127 return map.entrySet(); 128 } 129 } 130 131 public class ElementName { 132 private String namespace; 133 private String name; 134 135 public ElementName(String src) { 136 if (src.contains(":")) { 137 namespace = src.substring(0, src.indexOf(":")); 138 name = src.substring(src.indexOf(":")+1); 139 } else { 140 namespace = null; 141 name = src; 142 } 143 } 144 145 public String getName() { 146 return name; 147 } 148 149 public boolean hasNamespace() { 150 return namespace != null; 151 } 152 153 public String getNamespace() { 154 return namespace; 155 } 156 157 @Override 158 public String toString() { 159 return namespace +"::"+name; 160 } 161 162 } 163 164 private Set<String> elements = new HashSet<String>(); 165 private Set<String> attributes = new HashSet<String>(); 166 private Map<String, String> definedEntities = new HashMap<>(); 167 private Map<String, String> declaredEntities = new HashMap<>(); 168 169 170 public XhtmlParser() { 171 super(); 172 policy = ParserSecurityPolicy.Accept; // for general parsing 173 174 // set up sets 175 elements.add("p"); 176 elements.add("br"); 177 elements.add("div"); 178 elements.add("h1"); 179 elements.add("h2"); 180 elements.add("h3"); 181 elements.add("h4"); 182 elements.add("h5"); 183 elements.add("h6"); 184 elements.add("a"); 185 elements.add("span"); 186 elements.add("b"); 187 elements.add("em"); 188 elements.add("i"); 189 elements.add("strong"); 190 elements.add("small"); 191 elements.add("big"); 192 elements.add("tt"); 193 elements.add("small"); 194 elements.add("dfn"); 195 elements.add("q"); 196 elements.add("var"); 197 elements.add("abbr"); 198 elements.add("acronym"); 199 elements.add("cite"); 200 elements.add("blockquote"); 201 elements.add("hr"); 202 elements.add("address"); 203 elements.add("bdo"); 204 elements.add("kbd"); 205 elements.add("q"); 206 elements.add("sub"); 207 elements.add("sup"); 208 elements.add("ul"); 209 elements.add("ol"); 210 elements.add("li"); 211 elements.add("dl"); 212 elements.add("dt"); 213 elements.add("dd"); 214 elements.add("pre"); 215 elements.add("table"); 216 elements.add("caption"); 217 elements.add("colgroup"); 218 elements.add("col"); 219 elements.add("thead"); 220 elements.add("tr"); 221 elements.add("tfoot"); 222 elements.add("tbody"); 223 elements.add("th"); 224 elements.add("td"); 225 elements.add("code"); 226 elements.add("samp"); 227 elements.add("img"); 228 elements.add("map"); 229 elements.add("area"); 230 231 attributes.add("title"); 232 attributes.add("style"); 233 attributes.add("class"); 234 attributes.add("id"); 235 attributes.add("lang"); 236 attributes.add("xml:lang"); 237 attributes.add("dir"); 238 attributes.add("accesskey"); 239 attributes.add("tabindex"); 240 // tables: 241 attributes.add("span"); 242 attributes.add("width"); 243 attributes.add("align"); 244 attributes.add("valign"); 245 attributes.add("char"); 246 attributes.add("charoff"); 247 attributes.add("abbr"); 248 attributes.add("axis"); 249 attributes.add("headers"); 250 attributes.add("scope"); 251 attributes.add("rowspan"); 252 attributes.add("colspan"); 253 254 attributes.add("a.href"); 255 attributes.add("a.name"); 256 attributes.add("img.src"); 257 attributes.add("img.border"); 258 attributes.add("div.xmlns"); 259 attributes.add("blockquote.cite"); 260 attributes.add("q.cite"); 261 attributes.add("a.charset"); 262 attributes.add("a.type"); 263 attributes.add("a.name"); 264 attributes.add("a.href"); 265 attributes.add("a.hreflang"); 266 attributes.add("a.rel"); 267 attributes.add("a.rev"); 268 attributes.add("a.shape"); 269 attributes.add("a.coords"); 270 attributes.add("img.src"); 271 attributes.add("img.alt"); 272 attributes.add("img.longdesc"); 273 attributes.add("img.height"); 274 attributes.add("img.width"); 275 attributes.add("img.usemap"); 276 attributes.add("img.ismap"); 277 attributes.add("map.name"); 278 attributes.add("area.shape"); 279 attributes.add("area.coords"); 280 attributes.add("area.href"); 281 attributes.add("area.nohref"); 282 attributes.add("area.alt"); 283 attributes.add("table.summary"); 284 attributes.add("table.width"); 285 attributes.add("table.border"); 286 attributes.add("table.frame"); 287 attributes.add("table.rules"); 288 attributes.add("table.cellspacing"); 289 attributes.add("table.cellpadding"); 290 291 defineEntities(); 292 } 293 294 public enum ParserSecurityPolicy { 295 Accept, 296 Drop, 297 Reject 298 } 299 300 private ParserSecurityPolicy policy; 301 302 private boolean trimWhitespace; 303 private boolean mustBeWellFormed = true; 304 private List<StringPair> validationIssues = new ArrayList<>(); 305 306 public boolean isTrimWhitespace() { 307 return trimWhitespace; 308 } 309 310 public void setTrimWhitespace(boolean trimWhitespace) { 311 this.trimWhitespace = trimWhitespace; 312 } 313 314 public boolean isMustBeWellFormed() { 315 return mustBeWellFormed; 316 } 317 318 public XhtmlParser setMustBeWellFormed(boolean mustBeWellFormed) { 319 this.mustBeWellFormed = mustBeWellFormed; 320 return this; 321 } 322 323 public boolean isXmlMode() { 324 return xmlMode; 325 } 326 327 public XhtmlParser setXmlMode(boolean xmlMode) { 328 this.xmlMode = xmlMode; 329 return this; 330 } 331 332 public ParserSecurityPolicy getPolicy() { 333 return policy; 334 } 335 336 public void setPolicy(ParserSecurityPolicy policy) { 337 this.policy = policy; 338 } 339 340 public List<StringPair> getValidationIssues() { 341 return validationIssues; 342 } 343 344 public XhtmlNode parseHtmlNode(Element node) throws FHIRFormatError { 345 return parseHtmlNode(node, null); 346 } 347 348 public XhtmlNode parseHtmlNode(Element node, String defaultNS) throws FHIRFormatError { 349 XhtmlNode res = parseNode(node, defaultNS); 350 if (res.getNsDecl() == null) 351 res.getAttributes().put("xmlns", XHTML_NS); 352 return res; 353 } 354 355 private XhtmlNode parseNode(Element node, String defaultNS) throws FHIRFormatError { 356 XhtmlNode res = new XhtmlNode(NodeType.Element); 357 res.setName(node.getLocalName()); 358 defaultNS = checkNS(res, node, defaultNS); 359 for (int i = 0; i < node.getAttributes().getLength(); i++) { 360 Attr attr = (Attr) node.getAttributes().item(i); 361 if (attributeIsOk(res.getName(), attr.getName(), attr.getValue()) && !attr.getLocalName().startsWith("xmlns")) 362 res.getAttributes().put(attr.getName(), attr.getValue()); 363 } 364 Node child = node.getFirstChild(); 365 while (child != null) { 366 if (child.getNodeType() == Node.TEXT_NODE) { 367 res.addText(child.getTextContent()); 368 } else if (child.getNodeType() == Node.COMMENT_NODE) { 369 res.addComment(child.getTextContent()); 370 } else if (child.getNodeType() == Node.ELEMENT_NODE) { 371 if (elementIsOk(child.getLocalName())) 372 res.getChildNodes().add(parseNode((Element) child, defaultNS)); 373 } else 374 throw new FHIRFormatError("Unhandled XHTML feature: "+Integer.toString(child.getNodeType())+descLoc()); 375 child = child.getNextSibling(); 376 } 377 return res; 378 } 379 380 private String checkNS(XhtmlNode res, Element node, String defaultNS) { 381 String ns = node.getNamespaceURI(); 382 if (ns == null) 383 return null; 384 if (!ns.equals(defaultNS)) { 385 res.getAttributes().put("xmlns", ns); 386 return ns; 387 } 388 return defaultNS; 389 } 390 391 public XhtmlNode parseHtmlNode(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError { 392 XhtmlNode res = parseNode(xpp); 393 if (res.getNsDecl() == null) 394 res.getAttributes().put("xmlns", XHTML_NS); 395 return res; 396 397 } 398 private XhtmlNode parseNode(XmlPullParser xpp) throws XmlPullParserException, IOException, FHIRFormatError { 399 XhtmlNode res = new XhtmlNode(NodeType.Element); 400 res.setName(xpp.getName()); 401 402 for (int i = 0; i < xpp.getAttributeCount(); i++) { 403 String an = "xml".equals(xpp.getAttributePrefix(i)) ? "xml:"+xpp.getAttributeName(i) : xpp.getAttributeName(i); 404 String av = xpp.getAttributeValue(i); 405 if (attributeIsOk(xpp.getName(), an, av)) { 406 res.getAttributes().put(an, av); 407 } 408 } 409 int eventType = xpp.next(); 410 while (eventType != XmlPullParser.END_TAG) { 411 if (eventType == XmlPullParser.TEXT) { 412 res.addText(xpp.getText()); 413 xpp.next(); 414 } else if (eventType == XmlPullParser.COMMENT) { 415 res.addComment(xpp.getText()); 416 xpp.next(); 417 } else if (eventType == XmlPullParser.START_TAG) { 418 if (elementIsOk(xpp.getName())) 419 res.getChildNodes().add(parseNode(xpp)); 420 } else 421 throw new FHIRFormatError("Unhandled XHTML feature: "+Integer.toString(eventType)+descLoc()); 422 eventType = xpp.getEventType(); 423 } 424 xpp.next(); 425 return res; 426 } 427 428 private boolean attributeIsOk(String elem, String attr, String value) throws FHIRFormatError { 429 boolean ok = attributes.contains(attr) || attributes.contains(elem+"."+attr); 430 if (ok) 431 return true; 432 else switch (policy) { 433 case Accept: return true; 434 case Drop: return false; 435 case Reject: return error(I18nConstants.XHTML_XHTML_ATTRIBUTE_ILLEGAL, elem+"."+attr); 436 } 437 438 if ((elem+"."+attr).equals("img.src") && !(value.startsWith("#") || value.startsWith("http:") || value.startsWith("https:"))) { 439 switch (policy) { 440 case Accept: return true; 441 case Drop: return false; 442 case Reject: return error(I18nConstants.XHTML_XHTML_Image_Reference_Illegal, value); 443 } 444 } 445 return false; 446 } 447 448 private boolean error(String msg, String param) { 449 validationIssues.add(new StringPair(msg, param)); 450 return false; 451 } 452 453 private boolean elementIsOk(String name) throws FHIRFormatError { 454 boolean ok = elements.contains(name); 455 if (ok) 456 return true; 457 else switch (policy) { 458 case Accept: return true; 459 case Drop: return false; 460 case Reject: return error(I18nConstants.XHTML_XHTML_ELEMENT_ILLEGAL, name); 461 } 462 return false; 463 } 464 465 private String descLoc() { 466 return " at line "+Integer.toString(line)+" column "+Integer.toString(col); 467 } 468 469 private Reader rdr; 470 private String cache = ""; 471 private XhtmlNode unwindPoint; 472 private String lastText = ""; 473 private int line = 1; 474 private int col = 0; 475 private char lastChar; 476 private Location lastLoc; 477 private boolean xmlMode; 478 479 public XhtmlDocument parse(String source, String entryName) throws FHIRFormatError, IOException { 480 rdr = new StringReader(source); 481 return parse(entryName); 482 } 483 484 public XhtmlDocument parse(InputStream input, String entryName) throws FHIRFormatError, IOException { 485 rdr = new InputStreamReader(input, StandardCharsets.UTF_8); 486 return parse(entryName); 487 } 488 489 private XhtmlDocument parse(String entryName) throws FHIRFormatError, IOException 490 { 491 XhtmlDocument result = new XhtmlDocument(); 492 skipWhiteSpaceAndComments(result); 493 if (peekChar() != '<') 494 throw new FHIRFormatError("Unable to Parse HTML - does not start with tag. Found "+peekChar()+descLoc()); 495 readChar(); 496 markLocation(); 497 ElementName n = new ElementName(readName().toLowerCase()); 498 if ((entryName != null) && !n.getName().equals(entryName)) 499 throw new FHIRFormatError("Unable to Parse HTML - starts with '"+n+"' not '"+entryName+"'"+descLoc()); 500 XhtmlNode root = result.addTag(n.getName()); 501 root.setLocation(markLocation()); 502 parseAttributes(root); 503 markLocation(); 504 NamespaceNormalizationMap nsm = normalizeNamespaces(n, root, null, true); 505 if (readChar() == '/') { 506 if (peekChar() != '>') 507 throw new FHIRFormatError("unexpected non-end of element "+n+" "+descLoc()); 508 readChar(); 509 root.setEmptyExpanded(false); 510 } else { 511 unwindPoint = null; 512 List<XhtmlNode> p = new ArrayList<>(); 513 parseElementInner(root, p, nsm, true); 514 root.setEmptyExpanded(true); 515 } 516 return result; 517 } 518 519 private Location markLocation() { 520 Location res = lastLoc; 521 lastLoc = new Location(line, col); 522 return res; 523 } 524 525 private NamespaceNormalizationMap normalizeNamespaces(ElementName elementName, XhtmlNode node, NamespaceNormalizationMap parentNamespaceMap, boolean nodeIsRoot) { 526 // what we do here is strip out any stated namespace attributes, putting them in the namespace map 527 // then we figure out what the namespace of this element is, and state it explicitly if it's not the default 528 529 NamespaceNormalizationMap nodeNamespaceMap = new NamespaceNormalizationMap(parentNamespaceMap); 530 List<String> namespaceAttributes = new ArrayList<String>(); 531 for (String an : node.getAttributes().keySet()) { 532 if (an.equals("xmlns")) { 533 nodeNamespaceMap.setDefaultNamespace(node.getAttribute(an)); 534 namespaceAttributes.add(an); 535 } 536 if (an.startsWith("xmlns:")) { 537 nodeNamespaceMap.putNamespacePrefix(an.substring(6), node.getAttribute(an)); 538 namespaceAttributes.add(an); 539 } 540 } 541 542 for (String s : namespaceAttributes) 543 node.getAttributes().remove(s); 544 if (elementName.hasNamespace()) { 545 String elementNamespace = nodeNamespaceMap.getNamespaceForPrefix(elementName.getNamespace()); 546 if (!elementNamespace.equals(nodeNamespaceMap.getDefaultNamespace())) { 547 node.getAttributes().put("xmlns", elementNamespace); 548 nodeNamespaceMap.setDefaultNamespace(elementNamespace); 549 nodeNamespaceMap.setOriginalNamespacePrefix(elementName.getNamespace()); 550 nodeNamespaceMap.map.remove(elementName.getNamespace()); 551 } 552 } 553 // Add namespaces back if not defined in parentNamespaceMap (we haven't seen it before, so we need to define it here) 554 if (shouldAddXmlnsNamespaceAttribute(parentNamespaceMap, nodeIsRoot, nodeNamespaceMap)) { 555 node.getAttributes().put("xmlns", nodeNamespaceMap.getDefaultNamespace()); 556 } 557 for (Map.Entry<String, String> entry : nodeNamespaceMap.getPrefixNamespaceEntrySet() ) { 558 if (shouldAddXmlnsNamespacePrefixAttribute(parentNamespaceMap, nodeIsRoot, entry.getKey())) { 559 node.getAttributes().put("xmlns:" + entry.getKey(), entry.getValue()); 560 } 561 } 562 563 return nodeNamespaceMap; 564 } 565 566 private static boolean shouldAddXmlnsNamespacePrefixAttribute(NamespaceNormalizationMap parentNamespaceMap, boolean nodeIsRoot, String attributeKey) { 567 if (nodeIsRoot) { 568 return true; 569 } 570 return (!parentNamespaceMap.map.containsKey(attributeKey)); 571 } 572 573 private static boolean shouldAddXmlnsNamespaceAttribute(NamespaceNormalizationMap parentNamespaceMap, boolean nodeIsRoot, NamespaceNormalizationMap nodeNamespaceMap) { 574 if (nodeIsRoot) { 575 return nodeNamespaceMap.hasDefaultNamespace(); 576 } 577 return nodeNamespaceMap.hasDefaultNamespace() && (parentNamespaceMap == null || !nodeNamespaceMap.getDefaultNamespace().equals(parentNamespaceMap.getDefaultNamespace())); 578 } 579 580 private void addTextNode(XhtmlNode node, StringBuilder s) 581 { 582 String t = isTrimWhitespace() ? s.toString().trim() : s.toString(); 583 if (t.length() > 0) 584 { 585 lastText = t; 586 // System.out.println(t); 587 node.addText(t).setLocation(markLocation()); 588 s.setLength(0); 589 } 590 } 591 private void parseElementInner(XhtmlNode node, List<XhtmlNode> parents, NamespaceNormalizationMap nsm, boolean escaping) throws FHIRFormatError, IOException 592 { 593 StringBuilder s = new StringBuilder(); 594 while (peekChar() != END_OF_CHARS && !parents.contains(unwindPoint) && !(node == unwindPoint)) 595 { 596 if (peekChar() == '<') 597 { 598 addTextNode(node, s); 599 readChar(); 600 if (peekChar() == '!') { 601 String sc = readToCommentEnd(); 602 // moved the validator 603 // if (sc.startsWith("DOCTYPE")) 604 // throw new FHIRFormatError("Malformed XHTML: Found a DocType declaration, and these are not allowed (XXE security vulnerability protection)"); 605 node.addComment(sc).setLocation(markLocation()); 606 } else if (peekChar() == '?') 607 node.addComment(readToTagEnd()).setLocation(markLocation()); 608 else if (peekChar() == '/') { 609 readChar(); 610 ElementName n = new ElementName(readToTagEnd()); 611 if (node.getName().equals(n.getName())) 612 return; 613 else 614 { 615 if (mustBeWellFormed) { 616 throw new FHIRFormatError("Malformed XHTML: Found \"</"+n.getName()+">\" expecting \"</"+node.getName()+">\""+descLoc()); 617 } 618 for (int i = parents.size() - 1; i >= 0; i--) 619 { 620 if (parents.get(i).getName().equals(n)) 621 unwindPoint = parents.get(i); 622 } 623 if (unwindPoint != null) 624 { 625 for (int i = parents.size(); i > 0; i--) 626 { 627 if (i < parents.size() && parents.get(i) == unwindPoint) 628 return; 629 if (i == parents.size()) 630 { 631 parents.get(i - 1).getChildNodes().addAll(node.getChildNodes()); 632 node.getChildNodes().clear(); 633 } 634 else 635 { 636 parents.get(i - 1).getChildNodes().addAll(parents.get(i).getChildNodes()); 637 parents.get(i).getChildNodes().clear(); 638 } 639 } 640 } 641 } 642 } 643 else if (Character.isLetterOrDigit(peekChar())) 644 { 645 parseElement(node, parents, nsm); 646 } 647 else 648 throw new FHIRFormatError("Unable to Parse HTML - node '" + node.getName() + "' has unexpected content '"+peekChar()+"' (last text = '"+lastText+"'"+descLoc()); 649 } 650 else if (peekChar() == '&') // escaping && 651 { 652 parseLiteral(s); 653 } 654 else 655 s.append(readChar()); 656 } 657 addTextNode(node, s); 658 } 659 660 private void parseElement(XhtmlNode parent, List<XhtmlNode> parents, NamespaceNormalizationMap namespaceMap) throws IOException, FHIRFormatError 661 { 662 markLocation(); 663 ElementName name = new ElementName(readName()); 664 XhtmlNode node = parent.addTag(name.getName()); 665 node.setLocation(markLocation()); 666 List<XhtmlNode> newParents = new ArrayList<XhtmlNode>(); 667 newParents.addAll(parents); 668 newParents.add(parent); 669 parseAttributes(node); 670 markLocation(); 671 namespaceMap = normalizeNamespaces(name, node, namespaceMap, false); 672 if (readChar() == '/') { 673 if (peekChar() != '>') 674 throw new FHIRFormatError("unexpected non-end of element "+name+" "+descLoc()); 675 readChar(); 676 node.setEmptyExpanded(false); 677 } else { 678 node.setEmptyExpanded(true); 679 parseElementInner(node, newParents, namespaceMap, "script".equals(name.getName())); 680 } 681 } 682 683 private void parseAttributes(XhtmlNode node) throws FHIRFormatError, IOException 684 { 685 while (Character.isWhitespace(peekChar())) 686 readChar(); 687 while (peekChar() != '>' && peekChar() != '/' && peekChar() != END_OF_CHARS) 688 { 689 String name = readName(); 690 if (name.length() == 0) 691 { 692 throw new FHIRFormatError("Unable to read attribute on <"+node.getName()+">"+descLoc()); 693 } 694 while (Character.isWhitespace(peekChar())) 695 readChar(); 696 697 if (isNameChar(peekChar()) || peekChar() == '>' || peekChar() == '/') 698 node.getAttributes().put(name, null); 699 else if (peekChar() != '=') 700 { 701 throw new FHIRFormatError("Unable to read attribute '"+name+"' value on <"+node.getName()+">"+descLoc()); 702 } 703 else 704 { 705 readChar(); 706 while (Character.isWhitespace(peekChar())) 707 readChar(); 708 if (peekChar() == '"' || peekChar() == '\'') 709 node.getAttributes().put(name, parseAttributeValue(readChar())); 710 else 711 node.getAttributes().put(name, parseAttributeValue(END_OF_CHARS)); 712 } 713 while (Character.isWhitespace(peekChar())) 714 readChar(); 715 } 716 } 717 718 private String parseAttributeValue(char term) throws IOException, FHIRFormatError 719 { 720 StringBuilder b = new StringBuilder(); 721 while (peekChar() != END_OF_CHARS && peekChar() != '>' && (term != END_OF_CHARS || peekChar() != '/') && peekChar() != term) 722 { 723 if (peekChar() == '&') 724 { 725 parseLiteral(b); 726 } 727 else 728 b.append(readChar()); 729 } 730 if (peekChar() == term) 731 readChar(); 732 return b.toString(); 733 } 734 735 736 private void skipWhiteSpaceAndComments(XhtmlNode focus) throws IOException, FHIRFormatError { 737 while (Character.isWhitespace(peekChar()) || (peekChar() == 0xfeff)) 738 readChar(); 739 if (peekChar() == '<') 740 { 741 char ch = readChar(); 742 if (peekChar() == '!') { 743 readChar(); 744 if (peekChar() == '-') { 745 readChar(); 746 if (peekChar() == '-') { 747 readChar(); 748 if (peekChar() == ' ') 749 readChar(); 750 focus.addComment(readToCommentEnd()); 751 } else 752 throw new FHIRFormatError("unrecognised element type <!"+peekChar()+descLoc()); 753 } else 754 focus.addDocType(readToDocTypeEnd()); 755 skipWhiteSpaceAndComments(focus); 756 } else if (peekChar() == '?') { 757 String r = readToTagEnd(); 758 focus.addInstruction(r.substring(1, r.length()-1)); 759 skipWhiteSpaceAndComments(focus); 760 } else 761 pushChar(ch); 762 } 763 } 764 765 private void skipWhiteSpace() throws IOException { 766 if (trimWhitespace) 767 while (Character.isWhitespace(peekChar()) || (peekChar() == 0xfeff)) 768 readChar(); 769 } 770 771 private void skipWhiteSpaceInternal() throws IOException { 772 while (Character.isWhitespace(peekChar()) || (peekChar() == 0xfeff)) 773 readChar(); 774 } 775 776 private void pushChar(char ch) { 777 cache = Character.toString(ch)+cache; 778 } 779 780 private char peekChar() throws IOException 781 { 782 if (cache.length() > 0) 783 return cache.charAt(0); 784 else if (!rdr.ready()) 785 return END_OF_CHARS; 786 else 787 { 788 int i = rdr.read(); 789 if (i == -1) { 790 cache = ""; 791 return END_OF_CHARS; 792 } 793 char c = (char) i; 794 cache = Character.toString(c); 795 return c; 796 } 797 } 798 799 private char readChar() throws IOException 800 { 801 char c; 802 if (cache.length() > 0) 803 { 804 c = cache.charAt(0); 805 cache = cache.length() == 1 ? "" : cache.substring(1); 806 } 807 else if (!rdr.ready()) 808 c = END_OF_CHARS; 809 else 810 c = (char)rdr.read(); 811 if (c == '\r' || c == '\n') { 812 if (c == '\r' || lastChar != '\r') { 813 line++; 814 col = 0; 815 } 816 lastChar = c; 817 } 818 col++; 819 return c; 820 } 821 822 private String readToTagEnd() throws IOException, FHIRFormatError 823 { 824 StringBuilder s = new StringBuilder(); 825 while (peekChar() != '>' && peekChar() != END_OF_CHARS) 826 s.append(readChar()); 827 if (peekChar() != END_OF_CHARS) 828 { 829 readChar(); 830 skipWhiteSpace(); 831 } else if (mustBeWellFormed) 832 throw new FHIRFormatError("Unexpected termination of html source"+descLoc()); 833 return s.toString(); 834 } 835 836 private String readToDocTypeEnd() throws IOException, FHIRFormatError 837 { 838 StringBuilder s = new StringBuilder(); 839 840 boolean done = false; 841 while (!done) { 842 char c = peekChar(); 843 if (c == '>') { 844 done = true; 845 readChar(); 846 } else if (c != END_OF_CHARS) 847 s.append(readChar()); 848 else if (mustBeWellFormed) 849 throw new FHIRFormatError("Unexpected termination of html source"+descLoc()); 850 } 851 return s.toString(); 852 } 853 854 private String readToCommentEnd() throws IOException, FHIRFormatError 855 { 856 if (peekChar() == '!') 857 readChar(); 858 StringBuilder s = new StringBuilder(); 859 860 boolean simple = true; 861 if (peekChar() == '-') { 862 readChar(); 863 simple = peekChar() != '-'; 864 if (simple) 865 s.append('-'); 866 else 867 readChar(); 868 } 869 870 boolean doctypeEntities = false; 871 872 boolean done = false; 873 while (!done) { 874 char c = peekChar(); 875 if (c == '-') { 876 readChar(); 877 if (peekChar() == '-') { 878 readChar(); 879 if (peekChar() == '>') { 880 done = true; 881 } else { 882 pushChar('-'); 883 s.append("-"); 884 } 885 } else 886 s.append('-'); 887 } else if (doctypeEntities && c == ']') { 888 s.append(readChar()); 889 if (peekChar() == '>') { 890 done = true; 891 } 892 } else if (simple && peekChar() == '>' && !doctypeEntities) { 893 done = true; 894 } else if (c == '[' && s.toString().startsWith("DOCTYPE ")) { 895 doctypeEntities = true; 896 s.append(readChar()); 897 } else if (c != END_OF_CHARS) 898 s.append(readChar()); 899 else if (mustBeWellFormed) 900 throw new FHIRFormatError("Unexpected termination of html source"+descLoc()); 901 } 902 if (peekChar() != END_OF_CHARS) 903 { 904 readChar(); 905 skipWhiteSpace(); 906 } 907 if (doctypeEntities) { 908 parseDoctypeEntities(s.toString()); 909 } 910 return s.toString(); 911 } 912 913 private void parseDoctypeEntities(String s) { 914 while (s.contains("<!ENTITY")) { 915 s = s.substring(s.indexOf("<!ENTITY")); 916 int e = s.indexOf(">"); 917 String ed = s.substring(0, e+1); 918 s = s.substring(e+1); 919 ed = ed.substring(8).trim(); 920 e = ed.indexOf(" "); 921 String n = ed.substring(0, e).trim(); 922 ed = ed.substring(e).trim(); 923 e = ed.indexOf(" "); // SYSTEM 924 ed = ed.substring(e).trim(); 925 String v = ed.substring(0, ed.length()-1); 926 declaredEntities.put(n, v); 927 } 928 929 } 930 931 private boolean isNameChar(char ch) 932 { 933 return Character.isLetterOrDigit(ch) || ch == '_' || ch == '-' || ch == ':'; 934 } 935 936 private String readName() throws IOException 937 { 938 StringBuilder s = new StringBuilder(); 939 while (isNameChar(peekChar())) 940 s.append(readChar()); 941 return s.toString(); 942 } 943 944 private String readUntil(char ch) throws IOException 945 { 946 StringBuilder s = new StringBuilder(); 947 while (peekChar() != 0 && peekChar() != ch) 948 s.append(readChar()); 949 readChar(); 950 return s.toString(); 951 } 952 953 954 private String readUntil(String sc) throws IOException 955 { 956 StringBuilder s = new StringBuilder(); 957 while (peekChar() != 0 && sc.indexOf(peekChar()) == -1) 958 s.append(readChar()); 959 readChar(); 960 return s.toString(); 961 } 962 963 private void parseLiteral(StringBuilder s) throws IOException, FHIRFormatError { 964 // UInt16 w; 965 readChar(); 966 String c = readUntil(";&'\"><"); 967 if (c.isEmpty()) 968 throw new FHIRFormatError("Invalid literal declaration following text: " + s); 969 else if (c.charAt(0) == '#') { 970 if (isInteger(c.substring(1), 10)) 971 s.append((char) Integer.parseInt(c.substring(1))); 972 else if (c.charAt(1) == 'x' && isInteger(c.substring(2), 16)) 973 s.append((char) Integer.parseInt(c.substring(2), 16)); 974 } else if (declaredEntities.containsKey(c)) { 975 s.append(declaredEntities.get(c)); 976 } else { 977 if (xmlMode) { 978 if (!Utilities.existsInList(c, "quot", "amp", "apos", "lt", "gt")) { 979 error(I18nConstants.XHTML_XHTML_Entity_Illegal, "&"+c+";"); 980 } 981 } 982 if (definedEntities.containsKey(c)) { 983 s.append(definedEntities.get(c)); 984 // what's going on here? 985 // the contents that follow already existed, and then I added the routine to populate the entities 986 // which was generated from other code. The code that follows is probably redundant, but I haven't 987 // cross checked it. some is welcome to do so... (GG 8-Nov 2021) 988 } else if (c.equals("apos")) 989 s.append('\''); 990 else if (c.equals("quot")) 991 s.append('"'); 992 else if (c.equals("nbsp")) 993 s.append(XhtmlNode.NBSP); 994 else if (c.equals("amp")) 995 s.append('&'); 996 else if (c.equals("lsquo")) 997 s.append((char) 8216); // right single quotation, U+2019 ISOnum 998 else if (c.equals("rsquo")) 999 s.append((char) 8217); // right single quotation, U+2019 ISOnum 1000 else if (c.equals("gt")) 1001 s.append('>'); 1002 else if (c.equals("lt")) 1003 s.append('<'); 1004 else if (c.equals("copy")) 1005 s.append((char) 169); 1006 else if (c.equals("reg")) 1007 s.append((char) 174); 1008 else if (c.equals("sect")) 1009 s.append((char) 0xA7); 1010 else if (c.equals("fnof")) 1011 s.append((char) 402); // latin small f with hook = function = florin, U+0192 ISOtech --> 1012 else if (c.equals("Alpha")) 1013 s.append((char) 913); // greek capital letter alpha, U+0391 1014 else if (c.equals("Beta")) 1015 s.append((char) 914); // greek capital letter beta, U+0392 1016 else if (c.equals("Gamma")) 1017 s.append((char) 915); // greek capital letter gamma, U+0393 ISOgrk3 1018 else if (c.equals("Delta")) 1019 s.append((char) 916); // greek capital letter delta, U+0394 ISOgrk3 1020 else if (c.equals("Epsilon")) 1021 s.append((char) 917); // greek capital letter epsilon, U+0395 1022 else if (c.equals("Zeta")) 1023 s.append((char) 918); // greek capital letter zeta, U+0396 1024 else if (c.equals("Eta")) 1025 s.append((char) 919); // greek capital letter eta, U+0397 1026 else if (c.equals("Theta")) 1027 s.append((char) 920); // greek capital letter theta, U+0398 ISOgrk3 1028 else if (c.equals("Iota")) 1029 s.append((char) 921); // greek capital letter iota, U+0399 1030 else if (c.equals("Kappa")) 1031 s.append((char) 922); // greek capital letter kappa, U+039A 1032 else if (c.equals("Lambda")) 1033 s.append((char) 923); // greek capital letter lambda, U+039B ISOgrk3 1034 else if (c.equals("Mu")) 1035 s.append((char) 924); // greek capital letter mu, U+039C 1036 else if (c.equals("Nu")) 1037 s.append((char) 925); // greek capital letter nu, U+039D 1038 else if (c.equals("Xi")) 1039 s.append((char) 926); // greek capital letter xi, U+039E ISOgrk3 1040 else if (c.equals("Omicron")) 1041 s.append((char) 927); // greek capital letter omicron, U+039F 1042 else if (c.equals("Pi")) 1043 s.append((char) 928); // greek capital letter pi, U+03A0 ISOgrk3 1044 else if (c.equals("Rho")) 1045 s.append((char) 929); // greek capital letter rho, U+03A1 1046 else if (c.equals("Sigma")) 1047 s.append((char) 931); // greek capital letter sigma, U+03A3 ISOgrk3 1048 else if (c.equals("Tau")) 1049 s.append((char) 932); // greek capital letter tau, U+03A4 1050 else if (c.equals("Upsilon")) 1051 s.append((char) 933); // greek capital letter upsilon, U+03A5 ISOgrk3 1052 else if (c.equals("Phi")) 1053 s.append((char) 934); // greek capital letter phi, U+03A6 ISOgrk3 1054 else if (c.equals("Chi")) 1055 s.append((char) 935); // greek capital letter chi, U+03A7 1056 else if (c.equals("Psi")) 1057 s.append((char) 936); // greek capital letter psi, U+03A8 ISOgrk3 1058 else if (c.equals("Omega")) 1059 s.append((char) 937); // greek capital letter omega, U+03A9 ISOgrk3 1060 else if (c.equals("alpha")) 1061 s.append((char) 945); // greek small letter alpha, U+03B1 ISOgrk3 1062 else if (c.equals("beta")) 1063 s.append((char) 946); // greek small letter beta, U+03B2 ISOgrk3 1064 else if (c.equals("gamma")) 1065 s.append((char) 947); // greek small letter gamma, U+03B3 ISOgrk3 1066 else if (c.equals("delta")) 1067 s.append((char) 948); // greek small letter delta, U+03B4 ISOgrk3 1068 else if (c.equals("epsilon")) 1069 s.append((char) 949); // greek small letter epsilon, U+03B5 ISOgrk3 1070 else if (c.equals("zeta")) 1071 s.append((char) 950); // greek small letter zeta, U+03B6 ISOgrk3 1072 else if (c.equals("eta")) 1073 s.append((char) 951); // greek small letter eta, U+03B7 ISOgrk3 1074 else if (c.equals("theta")) 1075 s.append((char) 952); // greek small letter theta, U+03B8 ISOgrk3 1076 else if (c.equals("iota")) 1077 s.append((char) 953); // greek small letter iota, U+03B9 ISOgrk3 1078 else if (c.equals("kappa")) 1079 s.append((char) 954); // greek small letter kappa, U+03BA ISOgrk3 1080 else if (c.equals("lambda")) 1081 s.append((char) 955); // greek small letter lambda, U+03BB ISOgrk3 1082 else if (c.equals("mu")) 1083 s.append((char) 956); // greek small letter mu, U+03BC ISOgrk3 1084 else if (c.equals("nu")) 1085 s.append((char) 957); // greek small letter nu, U+03BD ISOgrk3 1086 else if (c.equals("xi")) 1087 s.append((char) 958); // greek small letter xi, U+03BE ISOgrk3 1088 else if (c.equals("omicron")) 1089 s.append((char) 959); // greek small letter omicron, U+03BF NEW 1090 else if (c.equals("pi")) 1091 s.append((char) 960); // greek small letter pi, U+03C0 ISOgrk3 1092 else if (c.equals("rho")) 1093 s.append((char) 961); // greek small letter rho, U+03C1 ISOgrk3 1094 else if (c.equals("sigmaf")) 1095 s.append((char) 962); // greek small letter final sigma, U+03C2 ISOgrk3 1096 else if (c.equals("sigma")) 1097 s.append((char) 963); // greek small letter sigma, U+03C3 ISOgrk3 1098 else if (c.equals("tau")) 1099 s.append((char) 964); // greek small letter tau, U+03C4 ISOgrk3 1100 else if (c.equals("upsilon")) 1101 s.append((char) 965); // greek small letter upsilon, U+03C5 ISOgrk3 1102 else if (c.equals("phi")) 1103 s.append((char) 966); // greek small letter phi, U+03C6 ISOgrk3 1104 else if (c.equals("chi")) 1105 s.append((char) 967); // greek small letter chi, U+03C7 ISOgrk3 1106 else if (c.equals("psi")) 1107 s.append((char) 968); // greek small letter psi, U+03C8 ISOgrk3 1108 else if (c.equals("omega")) 1109 s.append((char) 969); // greek small letter omega, U+03C9 ISOgrk3 1110 else if (c.equals("thetasym")) 1111 s.append((char) 977); // greek small letter theta symbol, U+03D1 NEW 1112 else if (c.equals("upsih")) 1113 s.append((char) 978); // greek upsilon with hook symbol, U+03D2 NEW 1114 else if (c.equals("piv")) 1115 s.append((char) 982); // greek pi symbol, U+03D6 ISOgrk3 1116 else if (c.equals("bull")) 1117 s.append((char) 8226); // bullet = black small circle, U+2022 ISOpub 1118 else if (c.equals("hellip")) 1119 s.append((char) 8230); // horizontal ellipsis = three dot leader, U+2026 ISOpub 1120 else if (c.equals("prime")) 1121 s.append((char) 8242); // prime = minutes = feet, U+2032 ISOtech 1122 else if (c.equals("Prime")) 1123 s.append((char) 8243); // double prime = seconds = inches, U+2033 ISOtech 1124 else if (c.equals("oline")) 1125 s.append((char) 8254); // overline = spacing overscore, U+203E NEW 1126 else if (c.equals("frasl")) 1127 s.append((char) 8260); // fraction slash, U+2044 NEW 1128 else if (c.equals("weierp")) 1129 s.append((char) 8472); // script capital P = power set = Weierstrass p, U+2118 ISOamso 1130 else if (c.equals("image")) 1131 s.append((char) 8465); // blackletter capital I = imaginary part, U+2111 ISOamso 1132 else if (c.equals("real")) 1133 s.append((char) 8476); // blackletter capital R = real part symbol, U+211C ISOamso 1134 else if (c.equals("trade")) 1135 s.append((char) 8482); // trade mark sign, U+2122 ISOnum 1136 else if (c.equals("alefsym")) 1137 s.append((char) 8501); // alef symbol = first transfinite cardinal, U+2135 NEW 1138 else if (c.equals("larr")) 1139 s.append((char) 8592); // leftwards arrow, U+2190 ISOnum 1140 else if (c.equals("uarr")) 1141 s.append((char) 8593); // upwards arrow, U+2191 ISOnum 1142 else if (c.equals("rarr")) 1143 s.append((char) 8594); // rightwards arrow, U+2192 ISOnum 1144 else if (c.equals("darr")) 1145 s.append((char) 8595); // downwards arrow, U+2193 ISOnum 1146 else if (c.equals("harr")) 1147 s.append((char) 8596); // left right arrow, U+2194 ISOamsa 1148 else if (c.equals("crarr")) 1149 s.append((char) 8629); // downwards arrow with corner leftwards = carriage return, U+21B5 NEW 1150 else if (c.equals("lArr")) 1151 s.append((char) 8656); // leftwards double arrow, U+21D0 ISOtech 1152 else if (c.equals("uArr")) 1153 s.append((char) 8657); // upwards double arrow, U+21D1 ISOamsa 1154 else if (c.equals("rArr")) 1155 s.append((char) 8658); // rightwards double arrow, U+21D2 ISOtech 1156 else if (c.equals("dArr")) 1157 s.append((char) 8659); // downwards double arrow, U+21D3 ISOamsa 1158 else if (c.equals("hArr")) 1159 s.append((char) 8660); // left right double arrow, U+21D4 ISOamsa 1160 else if (c.equals("forall")) 1161 s.append((char) 8704); // for all, U+2200 ISOtech 1162 else if (c.equals("part")) 1163 s.append((char) 8706); // partial differential, U+2202 ISOtech 1164 else if (c.equals("exist")) 1165 s.append((char) 8707); // there exists, U+2203 ISOtech 1166 else if (c.equals("empty")) 1167 s.append((char) 8709); // empty set = null set = diameter, U+2205 ISOamso 1168 else if (c.equals("nabla")) 1169 s.append((char) 8711); // nabla = backward difference, U+2207 ISOtech 1170 else if (c.equals("isin")) 1171 s.append((char) 8712); // element of, U+2208 ISOtech 1172 else if (c.equals("notin")) 1173 s.append((char) 8713); // not an element of, U+2209 ISOtech 1174 else if (c.equals("ni")) 1175 s.append((char) 8715); // contains as member, U+220B ISOtech 1176 else if (c.equals("prod")) 1177 s.append((char) 8719); // n-ary product = product sign, U+220F ISOamsb 1178 else if (c.equals("sum")) 1179 s.append((char) 8721); // n-ary sumation, U+2211 ISOamsb 1180 else if (c.equals("minus")) 1181 s.append((char) 8722); // minus sign, U+2212 ISOtech 1182 else if (c.equals("lowast")) 1183 s.append((char) 8727); // asterisk operator, U+2217 ISOtech 1184 else if (c.equals("radic")) 1185 s.append((char) 8730); // square root = radical sign, U+221A ISOtech 1186 else if (c.equals("prop")) 1187 s.append((char) 8733); // proportional to, U+221D ISOtech 1188 else if (c.equals("infin")) 1189 s.append((char) 8734); // infinity, U+221E ISOtech --> 1190 else if (c.equals("ang")) 1191 s.append((char) 8736); // angle, U+2220 ISOamso 1192 else if (c.equals("and")) 1193 s.append((char) 8743); // logical and = wedge, U+2227 ISOtech 1194 else if (c.equals("or")) 1195 s.append((char) 8744); // logical or = vee, U+2228 ISOtech 1196 else if (c.equals("cap")) 1197 s.append((char) 8745); // intersection = cap, U+2229 ISOtech 1198 else if (c.equals("cup")) 1199 s.append((char) 8746); // union = cup, U+222A ISOtech 1200 else if (c.equals("int")) 1201 s.append((char) 8747); // integral, U+222B ISOtech 1202 else if (c.equals("there4")) 1203 s.append((char) 8756); // therefore, U+2234 ISOtech 1204 else if (c.equals("sim")) 1205 s.append((char) 8764); // tilde operator = varies with = similar t U+223C ISOtech 1206 else if (c.equals("cong")) 1207 s.append((char) 8773); // approximately equal to, U+2245 ISOtec 1208 else if (c.equals("asymp")) 1209 s.append((char) 8776); // almost equal to = asymptotic to, U+2248 ISOamsr 1210 else if (c.equals("ne")) 1211 s.append((char) 8800); // not equal to, U+2260 ISOtech 1212 else if (c.equals("equiv")) 1213 s.append((char) 8801); // identical to, U+2261 ISOtech 1214 else if (c.equals("le")) 1215 s.append((char) 8804); // less-than or equal to, U+2264 ISOtech 1216 else if (c.equals("ge")) 1217 s.append((char) 8805); // greater-than or equal to, U+2265 ISOtech 1218 else if (c.equals("sub")) 1219 s.append((char) 8834); // subset of, U+2282 ISOtech 1220 else if (c.equals("sup")) 1221 s.append((char) 8835); // superset of, U+2283 ISOtech 1222 else if (c.equals("nsub")) 1223 s.append((char) 8836); // not a subset of, U+2284 ISOamsn 1224 else if (c.equals("sube")) 1225 s.append((char) 8838); // subset of or equal to, U+2286 ISOtech 1226 else if (c.equals("supe")) 1227 s.append((char) 8839); // superset of or equal to, U+2287 ISOtech 1228 else if (c.equals("oplus")) 1229 s.append((char) 8853); // circled plus = direct sum, U+2295 ISOamsb 1230 else if (c.equals("otimes")) 1231 s.append((char) 8855); // circled times = vector product, U+2297 ISOamsb --> 1232 else if (c.equals("perp")) 1233 s.append((char) 8869); // up tack = orthogonal to = perpendicular, U+22A5 ISOtech 1234 else if (c.equals("sdot")) 1235 s.append((char) 8901); // dot operator, U+22C5 ISOamsb 1236 else if (c.equals("lceil")) 1237 s.append((char) 8968); // left ceiling = apl upstile, U+2308 ISOamsc 1238 else if (c.equals("rceil")) 1239 s.append((char) 8969); // right ceiling, U+2309 ISOamsc 1240 else if (c.equals("lfloor")) 1241 s.append((char) 8970); // left floor = apl downstile, U+230A ISOamsc 1242 else if (c.equals("rfloor")) 1243 s.append((char) 8971); // right floor, U+230B ISOamsc 1244 else if (c.equals("lang")) 1245 s.append((char) 9001); // left-pointing angle bracket = bra, U+2329 ISOtech 1246 else if (c.equals("rang")) 1247 s.append((char) 9002); // right-pointing angle bracket = ket, U+232A ISOtech 1248 else if (c.equals("loz")) 1249 s.append((char) 9674); // lozenge, U+25CA ISOpub 1250 else if (c.equals("spades")) 1251 s.append((char) 9824); // black spade suit, U+2660 ISOpub 1252 else if (c.equals("clubs")) 1253 s.append((char) 9827); // black club suit = shamrock, U+2663 ISOpub 1254 else if (c.equals("hearts")) 1255 s.append((char) 9829); // black heart suit = valentine, U+2665 ISOpub 1256 else if (c.equals("diams")) 1257 s.append((char) 9830); // black diamond suit, U+2666 ISOpub -- 1258 else if (c.equals("ndash")) 1259 s.append((char) 8211); 1260 else if (c.equals("mdash")) 1261 s.append((char) 8212); 1262 else if (c.equals("ldquo")) 1263 s.append((char) 8221); 1264 else if (c.equals("rdquo")) 1265 s.append((char) 201D); 1266 else if (c.equals("frac14")) 1267 s.append((char) 188); 1268 else if (!mustBeWellFormed) { 1269 // we guess that this is an accidentally unescaped & 1270 s.append("&"+c); 1271 } else { 1272 throw new FHIRFormatError("unable to parse character reference '" + c + "'' (last text = '" + lastText + "'" + descLoc()); 1273 } 1274 } 1275 } 1276 1277 private boolean isInteger(String s, int base) { 1278 try { 1279 Integer.parseInt(s, base); 1280 return true; 1281 } catch (Exception e) { 1282 return false; 1283 } 1284 } 1285 1286 public XhtmlNode parseFragment(String source) throws IOException, FHIRException { 1287 rdr = new StringReader(source); 1288 return parseFragment(); 1289 } 1290 1291 public XhtmlNode parseFragment(InputStream input) throws IOException, FHIRException { 1292 rdr = new InputStreamReader(input); 1293 return parseFragment(); 1294 } 1295 1296 private XhtmlNode parseFragment() throws IOException, FHIRException 1297 { 1298 skipWhiteSpace(); 1299 if (peekChar() != '<') 1300 throw new FHIRException("Unable to Parse HTML - does not start with tag. Found "+peekChar()+descLoc()); 1301 readChar(); 1302 if (peekChar() == '?') { 1303 readToTagEnd(); 1304 skipWhiteSpaceInternal(); 1305 if (peekChar() != '<') 1306 throw new FHIRException("Unable to Parse HTML - does not start with tag after processing instruction. Found "+peekChar()+descLoc()); 1307 readChar(); 1308 } 1309 String n = readName().toLowerCase(); 1310 readToTagEnd(); 1311 XhtmlNode result = new XhtmlNode(NodeType.Element); 1312 1313 int colonIndex = n.indexOf(':'); 1314 if (colonIndex != -1) { 1315 n = n.substring(colonIndex + 1); 1316 } 1317 1318 result.setName(n); 1319 unwindPoint = null; 1320 List<XhtmlNode> p = new ArrayList<>(); 1321 parseElementInner(result, p, null, true); 1322 1323 return result; 1324 } 1325 1326 private void defineEntities() { 1327 definedEntities.put("Æ", "\u00C6"); 1328 definedEntities.put("&", "\u0026"); 1329 definedEntities.put("Á", "\u00C1"); 1330 definedEntities.put("Ă", "\u0102"); 1331 definedEntities.put("Â", "\u00C2"); 1332 definedEntities.put("А", "\u0410"); 1333 definedEntities.put("𝔄", "\uD835\uDD04"); 1334 definedEntities.put("À", "\u00C0"); 1335 definedEntities.put("Α", "\u0391"); 1336 definedEntities.put("Ā", "\u0100"); 1337 definedEntities.put("⩓", "\u2A53"); 1338 definedEntities.put("Ą", "\u0104"); 1339 definedEntities.put("𝔸", "\uD835\uDD38"); 1340 definedEntities.put("⁡", "\u2061"); 1341 definedEntities.put("Å", "\u00C5"); 1342 definedEntities.put("𝒜", "\uD835\uDC9C"); 1343 definedEntities.put("≔", "\u2254"); 1344 definedEntities.put("Ã", "\u00C3"); 1345 definedEntities.put("Ä", "\u00C4"); 1346 definedEntities.put("∖", "\u2216"); 1347 definedEntities.put("⫧", "\u2AE7"); 1348 definedEntities.put("⌆", "\u2306"); 1349 definedEntities.put("Б", "\u0411"); 1350 definedEntities.put("∵", "\u2235"); 1351 definedEntities.put("ℬ", "\u212C"); 1352 definedEntities.put("Β", "\u0392"); 1353 definedEntities.put("𝔅", "\uD835\uDD05"); 1354 definedEntities.put("𝔹", "\uD835\uDD39"); 1355 definedEntities.put("˘", "\u02D8"); 1356 definedEntities.put("ℬ", "\u212C"); 1357 definedEntities.put("≎", "\u224E"); 1358 definedEntities.put("Ч", "\u0427"); 1359 definedEntities.put("©", "\u00A9"); 1360 definedEntities.put("Ć", "\u0106"); 1361 definedEntities.put("⋒", "\u22D2"); 1362 definedEntities.put("ⅅ", "\u2145"); 1363 definedEntities.put("ℭ", "\u212D"); 1364 definedEntities.put("Č", "\u010C"); 1365 definedEntities.put("Ç", "\u00C7"); 1366 definedEntities.put("Ĉ", "\u0108"); 1367 definedEntities.put("∰", "\u2230"); 1368 definedEntities.put("Ċ", "\u010A"); 1369 definedEntities.put("¸", "\u00B8"); 1370 definedEntities.put("·", "\u00B7"); 1371 definedEntities.put("ℭ", "\u212D"); 1372 definedEntities.put("Χ", "\u03A7"); 1373 definedEntities.put("⊙", "\u2299"); 1374 definedEntities.put("⊖", "\u2296"); 1375 definedEntities.put("⊕", "\u2295"); 1376 definedEntities.put("⊗", "\u2297"); 1377 definedEntities.put("∲", "\u2232"); 1378 definedEntities.put("”", "\u201D"); 1379 definedEntities.put("’", "\u2019"); 1380 definedEntities.put("∷", "\u2237"); 1381 definedEntities.put("⩴", "\u2A74"); 1382 definedEntities.put("≡", "\u2261"); 1383 definedEntities.put("∯", "\u222F"); 1384 definedEntities.put("∮", "\u222E"); 1385 definedEntities.put("ℂ", "\u2102"); 1386 definedEntities.put("∐", "\u2210"); 1387 definedEntities.put("∳", "\u2233"); 1388 definedEntities.put("⨯", "\u2A2F"); 1389 definedEntities.put("𝒞", "\uD835\uDC9E"); 1390 definedEntities.put("⋓", "\u22D3"); 1391 definedEntities.put("≍", "\u224D"); 1392 definedEntities.put("ⅅ", "\u2145"); 1393 definedEntities.put("⤑", "\u2911"); 1394 definedEntities.put("Ђ", "\u0402"); 1395 definedEntities.put("Ѕ", "\u0405"); 1396 definedEntities.put("Џ", "\u040F"); 1397 definedEntities.put("‡", "\u2021"); 1398 definedEntities.put("↡", "\u21A1"); 1399 definedEntities.put("⫤", "\u2AE4"); 1400 definedEntities.put("Ď", "\u010E"); 1401 definedEntities.put("Д", "\u0414"); 1402 definedEntities.put("∇", "\u2207"); 1403 definedEntities.put("Δ", "\u0394"); 1404 definedEntities.put("𝔇", "\uD835\uDD07"); 1405 definedEntities.put("´", "\u00B4"); 1406 definedEntities.put("˙", "\u02D9"); 1407 definedEntities.put("˝", "\u02DD"); 1408 definedEntities.put("`", "\u0060"); 1409 definedEntities.put("˜", "\u02DC"); 1410 definedEntities.put("⋄", "\u22C4"); 1411 definedEntities.put("ⅆ", "\u2146"); 1412 definedEntities.put("𝔻", "\uD835\uDD3B"); 1413 definedEntities.put("¨", "\u00A8"); 1414 definedEntities.put("⃜", "\u20DC"); 1415 definedEntities.put("≐", "\u2250"); 1416 definedEntities.put("∯", "\u222F"); 1417 definedEntities.put("¨", "\u00A8"); 1418 definedEntities.put("⇓", "\u21D3"); 1419 definedEntities.put("⇐", "\u21D0"); 1420 definedEntities.put("⇔", "\u21D4"); 1421 definedEntities.put("⫤", "\u2AE4"); 1422 definedEntities.put("⟸", "\u27F8"); 1423 definedEntities.put("⟺", "\u27FA"); 1424 definedEntities.put("⟹", "\u27F9"); 1425 definedEntities.put("⇒", "\u21D2"); 1426 definedEntities.put("⊨", "\u22A8"); 1427 definedEntities.put("⇑", "\u21D1"); 1428 definedEntities.put("⇕", "\u21D5"); 1429 definedEntities.put("∥", "\u2225"); 1430 definedEntities.put("↓", "\u2193"); 1431 definedEntities.put("⤓", "\u2913"); 1432 definedEntities.put("⇵", "\u21F5"); 1433 definedEntities.put("̑", "\u0311"); 1434 definedEntities.put("⥐", "\u2950"); 1435 definedEntities.put("⥞", "\u295E"); 1436 definedEntities.put("↽", "\u21BD"); 1437 definedEntities.put("⥖", "\u2956"); 1438 definedEntities.put("⥟", "\u295F"); 1439 definedEntities.put("⇁", "\u21C1"); 1440 definedEntities.put("⥗", "\u2957"); 1441 definedEntities.put("⊤", "\u22A4"); 1442 definedEntities.put("↧", "\u21A7"); 1443 definedEntities.put("⇓", "\u21D3"); 1444 definedEntities.put("𝒟", "\uD835\uDC9F"); 1445 definedEntities.put("Đ", "\u0110"); 1446 definedEntities.put("Ŋ", "\u014A"); 1447 definedEntities.put("Ð", "\u00D0"); 1448 definedEntities.put("É", "\u00C9"); 1449 definedEntities.put("Ě", "\u011A"); 1450 definedEntities.put("Ê", "\u00CA"); 1451 definedEntities.put("Э", "\u042D"); 1452 definedEntities.put("Ė", "\u0116"); 1453 definedEntities.put("𝔈", "\uD835\uDD08"); 1454 definedEntities.put("È", "\u00C8"); 1455 definedEntities.put("∈", "\u2208"); 1456 definedEntities.put("Ē", "\u0112"); 1457 definedEntities.put("◻", "\u25FB"); 1458 definedEntities.put("▫", "\u25AB"); 1459 definedEntities.put("Ę", "\u0118"); 1460 definedEntities.put("𝔼", "\uD835\uDD3C"); 1461 definedEntities.put("Ε", "\u0395"); 1462 definedEntities.put("⩵", "\u2A75"); 1463 definedEntities.put("≂", "\u2242"); 1464 definedEntities.put("⇌", "\u21CC"); 1465 definedEntities.put("ℰ", "\u2130"); 1466 definedEntities.put("⩳", "\u2A73"); 1467 definedEntities.put("Η", "\u0397"); 1468 definedEntities.put("Ë", "\u00CB"); 1469 definedEntities.put("∃", "\u2203"); 1470 definedEntities.put("ⅇ", "\u2147"); 1471 definedEntities.put("Ф", "\u0424"); 1472 definedEntities.put("𝔉", "\uD835\uDD09"); 1473 definedEntities.put("◼", "\u25FC"); 1474 definedEntities.put("▪", "\u25AA"); 1475 definedEntities.put("𝔽", "\uD835\uDD3D"); 1476 definedEntities.put("∀", "\u2200"); 1477 definedEntities.put("ℱ", "\u2131"); 1478 definedEntities.put("ℱ", "\u2131"); 1479 definedEntities.put("Ѓ", "\u0403"); 1480 definedEntities.put(">", "\u003E"); 1481 definedEntities.put("Γ", "\u0393"); 1482 definedEntities.put("Ϝ", "\u03DC"); 1483 definedEntities.put("Ğ", "\u011E"); 1484 definedEntities.put("Ģ", "\u0122"); 1485 definedEntities.put("Ĝ", "\u011C"); 1486 definedEntities.put("Г", "\u0413"); 1487 definedEntities.put("Ġ", "\u0120"); 1488 definedEntities.put("𝔊", "\uD835\uDD0A"); 1489 definedEntities.put("⋙", "\u22D9"); 1490 definedEntities.put("𝔾", "\uD835\uDD3E"); 1491 definedEntities.put("≥", "\u2265"); 1492 definedEntities.put("⋛", "\u22DB"); 1493 definedEntities.put("≧", "\u2267"); 1494 definedEntities.put("⪢", "\u2AA2"); 1495 definedEntities.put("≷", "\u2277"); 1496 definedEntities.put("⩾", "\u2A7E"); 1497 definedEntities.put("≳", "\u2273"); 1498 definedEntities.put("𝒢", "\uD835\uDCA2"); 1499 definedEntities.put("≫", "\u226B"); 1500 definedEntities.put("Ъ", "\u042A"); 1501 definedEntities.put("ˇ", "\u02C7"); 1502 definedEntities.put("^", "\u005E"); 1503 definedEntities.put("Ĥ", "\u0124"); 1504 definedEntities.put("ℌ", "\u210C"); 1505 definedEntities.put("ℋ", "\u210B"); 1506 definedEntities.put("ℍ", "\u210D"); 1507 definedEntities.put("─", "\u2500"); 1508 definedEntities.put("ℋ", "\u210B"); 1509 definedEntities.put("Ħ", "\u0126"); 1510 definedEntities.put("≎", "\u224E"); 1511 definedEntities.put("≏", "\u224F"); 1512 definedEntities.put("Е", "\u0415"); 1513 definedEntities.put("IJ", "\u0132"); 1514 definedEntities.put("Ё", "\u0401"); 1515 definedEntities.put("Í", "\u00CD"); 1516 definedEntities.put("Î", "\u00CE"); 1517 definedEntities.put("И", "\u0418"); 1518 definedEntities.put("İ", "\u0130"); 1519 definedEntities.put("ℑ", "\u2111"); 1520 definedEntities.put("Ì", "\u00CC"); 1521 definedEntities.put("ℑ", "\u2111"); 1522 definedEntities.put("Ī", "\u012A"); 1523 definedEntities.put("ⅈ", "\u2148"); 1524 definedEntities.put("⇒", "\u21D2"); 1525 definedEntities.put("∬", "\u222C"); 1526 definedEntities.put("∫", "\u222B"); 1527 definedEntities.put("⋂", "\u22C2"); 1528 definedEntities.put("⁣", "\u2063"); 1529 definedEntities.put("⁢", "\u2062"); 1530 definedEntities.put("Į", "\u012E"); 1531 definedEntities.put("𝕀", "\uD835\uDD40"); 1532 definedEntities.put("Ι", "\u0399"); 1533 definedEntities.put("ℐ", "\u2110"); 1534 definedEntities.put("Ĩ", "\u0128"); 1535 definedEntities.put("І", "\u0406"); 1536 definedEntities.put("Ï", "\u00CF"); 1537 definedEntities.put("Ĵ", "\u0134"); 1538 definedEntities.put("Й", "\u0419"); 1539 definedEntities.put("𝔍", "\uD835\uDD0D"); 1540 definedEntities.put("𝕁", "\uD835\uDD41"); 1541 definedEntities.put("𝒥", "\uD835\uDCA5"); 1542 definedEntities.put("Ј", "\u0408"); 1543 definedEntities.put("Є", "\u0404"); 1544 definedEntities.put("Х", "\u0425"); 1545 definedEntities.put("Ќ", "\u040C"); 1546 definedEntities.put("Κ", "\u039A"); 1547 definedEntities.put("Ķ", "\u0136"); 1548 definedEntities.put("К", "\u041A"); 1549 definedEntities.put("𝔎", "\uD835\uDD0E"); 1550 definedEntities.put("𝕂", "\uD835\uDD42"); 1551 definedEntities.put("𝒦", "\uD835\uDCA6"); 1552 definedEntities.put("Љ", "\u0409"); 1553 definedEntities.put("<", "\u003C"); 1554 definedEntities.put("Ĺ", "\u0139"); 1555 definedEntities.put("Λ", "\u039B"); 1556 definedEntities.put("⟪", "\u27EA"); 1557 definedEntities.put("ℒ", "\u2112"); 1558 definedEntities.put("↞", "\u219E"); 1559 definedEntities.put("Ľ", "\u013D"); 1560 definedEntities.put("Ļ", "\u013B"); 1561 definedEntities.put("Л", "\u041B"); 1562 definedEntities.put("⟨", "\u27E8"); 1563 definedEntities.put("←", "\u2190"); 1564 definedEntities.put("⇤", "\u21E4"); 1565 definedEntities.put("⇆", "\u21C6"); 1566 definedEntities.put("⌈", "\u2308"); 1567 definedEntities.put("⟦", "\u27E6"); 1568 definedEntities.put("⥡", "\u2961"); 1569 definedEntities.put("⇃", "\u21C3"); 1570 definedEntities.put("⥙", "\u2959"); 1571 definedEntities.put("⌊", "\u230A"); 1572 definedEntities.put("↔", "\u2194"); 1573 definedEntities.put("⥎", "\u294E"); 1574 definedEntities.put("⊣", "\u22A3"); 1575 definedEntities.put("↤", "\u21A4"); 1576 definedEntities.put("⥚", "\u295A"); 1577 definedEntities.put("⊲", "\u22B2"); 1578 definedEntities.put("⧏", "\u29CF"); 1579 definedEntities.put("⊴", "\u22B4"); 1580 definedEntities.put("⥑", "\u2951"); 1581 definedEntities.put("⥠", "\u2960"); 1582 definedEntities.put("↿", "\u21BF"); 1583 definedEntities.put("⥘", "\u2958"); 1584 definedEntities.put("↼", "\u21BC"); 1585 definedEntities.put("⥒", "\u2952"); 1586 definedEntities.put("⇐", "\u21D0"); 1587 definedEntities.put("⇔", "\u21D4"); 1588 definedEntities.put("⋚", "\u22DA"); 1589 definedEntities.put("≦", "\u2266"); 1590 definedEntities.put("≶", "\u2276"); 1591 definedEntities.put("⪡", "\u2AA1"); 1592 definedEntities.put("⩽", "\u2A7D"); 1593 definedEntities.put("≲", "\u2272"); 1594 definedEntities.put("𝔏", "\uD835\uDD0F"); 1595 definedEntities.put("⋘", "\u22D8"); 1596 definedEntities.put("⇚", "\u21DA"); 1597 definedEntities.put("Ŀ", "\u013F"); 1598 definedEntities.put("⟵", "\u27F5"); 1599 definedEntities.put("⟷", "\u27F7"); 1600 definedEntities.put("⟶", "\u27F6"); 1601 definedEntities.put("⟸", "\u27F8"); 1602 definedEntities.put("⟺", "\u27FA"); 1603 definedEntities.put("⟹", "\u27F9"); 1604 definedEntities.put("𝕃", "\uD835\uDD43"); 1605 definedEntities.put("↙", "\u2199"); 1606 definedEntities.put("↘", "\u2198"); 1607 definedEntities.put("ℒ", "\u2112"); 1608 definedEntities.put("↰", "\u21B0"); 1609 definedEntities.put("Ł", "\u0141"); 1610 definedEntities.put("≪", "\u226A"); 1611 definedEntities.put("⤅", "\u2905"); 1612 definedEntities.put("М", "\u041C"); 1613 definedEntities.put(" ", "\u205F"); 1614 definedEntities.put("ℳ", "\u2133"); 1615 definedEntities.put("𝔐", "\uD835\uDD10"); 1616 definedEntities.put("∓", "\u2213"); 1617 definedEntities.put("𝕄", "\uD835\uDD44"); 1618 definedEntities.put("ℳ", "\u2133"); 1619 definedEntities.put("Μ", "\u039C"); 1620 definedEntities.put("Њ", "\u040A"); 1621 definedEntities.put("Ń", "\u0143"); 1622 definedEntities.put("Ň", "\u0147"); 1623 definedEntities.put("Ņ", "\u0145"); 1624 definedEntities.put("Н", "\u041D"); 1625 definedEntities.put("​", "\u200B"); 1626 definedEntities.put("​", "\u200B"); 1627 definedEntities.put("​", "\u200B"); 1628 definedEntities.put("​", "\u200B"); 1629 definedEntities.put("≫", "\u226B"); 1630 definedEntities.put("≪", "\u226A"); 1631 definedEntities.put("
", "\n"); 1632 definedEntities.put("𝔑", "\uD835\uDD11"); 1633 definedEntities.put("⁠", "\u2060"); 1634 definedEntities.put(" ", "\u00A0"); 1635 definedEntities.put("ℕ", "\u2115"); 1636 definedEntities.put("⫬", "\u2AEC"); 1637 definedEntities.put("≢", "\u2262"); 1638 definedEntities.put("≭", "\u226D"); 1639 definedEntities.put("∦", "\u2226"); 1640 definedEntities.put("∉", "\u2209"); 1641 definedEntities.put("≠", "\u2260"); 1642 definedEntities.put("≂̸", "\u2242\u0338"); 1643 definedEntities.put("∄", "\u2204"); 1644 definedEntities.put("≯", "\u226F"); 1645 definedEntities.put("≱", "\u2271"); 1646 definedEntities.put("≧̸", "\u2267\u0033"); 1647 definedEntities.put("≫̸", "\u226B\u0033"); 1648 definedEntities.put("≹", "\u2279"); 1649 definedEntities.put("⩾̸", "\u2A7E\u0338"); 1650 definedEntities.put("≵", "\u2275"); 1651 definedEntities.put("≎̸", "\u224E\u0338"); 1652 definedEntities.put("≏̸", "\u224F\u0338"); 1653 definedEntities.put("⋪", "\u22EA"); 1654 definedEntities.put("⧏̸", "\u29CF\u0338"); 1655 definedEntities.put("⋬", "\u22EC"); 1656 definedEntities.put("≮", "\u226E"); 1657 definedEntities.put("≰", "\u2270"); 1658 definedEntities.put("≸", "\u2278"); 1659 definedEntities.put("≪̸", "\u226A\u0338"); 1660 definedEntities.put("⩽̸", "\u2A7D\u0338"); 1661 definedEntities.put("≴", "\u2274"); 1662 definedEntities.put("⪢̸", "\u2AA2\u0338"); 1663 definedEntities.put("⪡̸", "\u2AA1\u0338"); 1664 definedEntities.put("⊀", "\u2280"); 1665 definedEntities.put("⪯̸", "\u2AAF\u0338"); 1666 definedEntities.put("⋠", "\u22E0"); 1667 definedEntities.put("∌", "\u220C"); 1668 definedEntities.put("⋫", "\u22EB"); 1669 definedEntities.put("⧐̸", "\u29D0\u0338"); 1670 definedEntities.put("⋭", "\u22ED"); 1671 definedEntities.put("⊏̸", "\u228F\u0338"); 1672 definedEntities.put("⋢", "\u22E2"); 1673 definedEntities.put("⊐̸", "\u2290\u0338"); 1674 definedEntities.put("⋣", "\u22E3"); 1675 definedEntities.put("⊂⃒", "\u2282\u20D2"); 1676 definedEntities.put("⊈", "\u2288"); 1677 definedEntities.put("⊁", "\u2281"); 1678 definedEntities.put("⪰̸", "\u2AB0\u0338"); 1679 definedEntities.put("⋡", "\u22E1"); 1680 definedEntities.put("≿̸", "\u227F\u0338"); 1681 definedEntities.put("⊃⃒", "\u2283\u20D2"); 1682 definedEntities.put("⊉", "\u2289"); 1683 definedEntities.put("≁", "\u2241"); 1684 definedEntities.put("≄", "\u2244"); 1685 definedEntities.put("≇", "\u2247"); 1686 definedEntities.put("≉", "\u2249"); 1687 definedEntities.put("∤", "\u2224"); 1688 definedEntities.put("𝒩", "\uD835\uDCA9"); 1689 definedEntities.put("Ñ", "\u00D1"); 1690 definedEntities.put("Ν", "\u039D"); 1691 definedEntities.put("Œ", "\u0152"); 1692 definedEntities.put("Ó", "\u00D3"); 1693 definedEntities.put("Ô", "\u00D4"); 1694 definedEntities.put("О", "\u041E"); 1695 definedEntities.put("Ő", "\u0150"); 1696 definedEntities.put("𝔒", "\uD835\uDD12"); 1697 definedEntities.put("Ò", "\u00D2"); 1698 definedEntities.put("Ō", "\u014C"); 1699 definedEntities.put("Ω", "\u03A9"); 1700 definedEntities.put("Ο", "\u039F"); 1701 definedEntities.put("𝕆", "\uD835\uDD46"); 1702 definedEntities.put("“", "\u201C"); 1703 definedEntities.put("‘", "\u2018"); 1704 definedEntities.put("⩔", "\u2A54"); 1705 definedEntities.put("𝒪", "\uD835\uDCAA"); 1706 definedEntities.put("Ø", "\u00D8"); 1707 definedEntities.put("Õ", "\u00D5"); 1708 definedEntities.put("⨷", "\u2A37"); 1709 definedEntities.put("Ö", "\u00D6"); 1710 definedEntities.put("‾", "\u203E"); 1711 definedEntities.put("⏞", "\u23DE"); 1712 definedEntities.put("⎴", "\u23B4"); 1713 definedEntities.put("⏜", "\u23DC"); 1714 definedEntities.put("∂", "\u2202"); 1715 definedEntities.put("П", "\u041F"); 1716 definedEntities.put("𝔓", "\uD835\uDD13"); 1717 definedEntities.put("Φ", "\u03A6"); 1718 definedEntities.put("Π", "\u03A0"); 1719 definedEntities.put("±", "\u00B1"); 1720 definedEntities.put("ℌ", "\u210C"); 1721 definedEntities.put("ℙ", "\u2119"); 1722 definedEntities.put("⪻", "\u2ABB"); 1723 definedEntities.put("≺", "\u227A"); 1724 definedEntities.put("⪯", "\u2AAF"); 1725 definedEntities.put("≼", "\u227C"); 1726 definedEntities.put("≾", "\u227E"); 1727 definedEntities.put("″", "\u2033"); 1728 definedEntities.put("∏", "\u220F"); 1729 definedEntities.put("∷", "\u2237"); 1730 definedEntities.put("∝", "\u221D"); 1731 definedEntities.put("𝒫", "\uD835\uDCAB"); 1732 definedEntities.put("Ψ", "\u03A8"); 1733 definedEntities.put(""", "\\u0022"); 1734 definedEntities.put("𝔔", "\uD835\uDD14"); 1735 definedEntities.put("ℚ", "\u211A"); 1736 definedEntities.put("𝒬", "\uD835\uDCAC"); 1737 definedEntities.put("⤐", "\u2910"); 1738 definedEntities.put("®", "\u00AE"); 1739 definedEntities.put("Ŕ", "\u0154"); 1740 definedEntities.put("⟫", "\u27EB"); 1741 definedEntities.put("↠", "\u21A0"); 1742 definedEntities.put("⤖", "\u2916"); 1743 definedEntities.put("Ř", "\u0158"); 1744 definedEntities.put("Ŗ", "\u0156"); 1745 definedEntities.put("Р", "\u0420"); 1746 definedEntities.put("ℜ", "\u211C"); 1747 definedEntities.put("∋", "\u220B"); 1748 definedEntities.put("⇋", "\u21CB"); 1749 definedEntities.put("⥯", "\u296F"); 1750 definedEntities.put("ℜ", "\u211C"); 1751 definedEntities.put("Ρ", "\u03A1"); 1752 definedEntities.put("⟩", "\u27E9"); 1753 definedEntities.put("→", "\u2192"); 1754 definedEntities.put("⇥", "\u21E5"); 1755 definedEntities.put("⇄", "\u21C4"); 1756 definedEntities.put("⌉", "\u2309"); 1757 definedEntities.put("⟧", "\u27E7"); 1758 definedEntities.put("⥝", "\u295D"); 1759 definedEntities.put("⇂", "\u21C2"); 1760 definedEntities.put("⥕", "\u2955"); 1761 definedEntities.put("⌋", "\u230B"); 1762 definedEntities.put("⊢", "\u22A2"); 1763 definedEntities.put("↦", "\u21A6"); 1764 definedEntities.put("⥛", "\u295B"); 1765 definedEntities.put("⊳", "\u22B3"); 1766 definedEntities.put("⧐", "\u29D0"); 1767 definedEntities.put("⊵", "\u22B5"); 1768 definedEntities.put("⥏", "\u294F"); 1769 definedEntities.put("⥜", "\u295C"); 1770 definedEntities.put("↾", "\u21BE"); 1771 definedEntities.put("⥔", "\u2954"); 1772 definedEntities.put("⇀", "\u21C0"); 1773 definedEntities.put("⥓", "\u2953"); 1774 definedEntities.put("⇒", "\u21D2"); 1775 definedEntities.put("ℝ", "\u211D"); 1776 definedEntities.put("⥰", "\u2970"); 1777 definedEntities.put("⇛", "\u21DB"); 1778 definedEntities.put("ℛ", "\u211B"); 1779 definedEntities.put("↱", "\u21B1"); 1780 definedEntities.put("⧴", "\u29F4"); 1781 definedEntities.put("Щ", "\u0429"); 1782 definedEntities.put("Ш", "\u0428"); 1783 definedEntities.put("Ь", "\u042C"); 1784 definedEntities.put("Ś", "\u015A"); 1785 definedEntities.put("⪼", "\u2ABC"); 1786 definedEntities.put("Š", "\u0160"); 1787 definedEntities.put("Ş", "\u015E"); 1788 definedEntities.put("Ŝ", "\u015C"); 1789 definedEntities.put("С", "\u0421"); 1790 definedEntities.put("𝔖", "\uD835\uDD16"); 1791 definedEntities.put("↓", "\u2193"); 1792 definedEntities.put("←", "\u2190"); 1793 definedEntities.put("→", "\u2192"); 1794 definedEntities.put("↑", "\u2191"); 1795 definedEntities.put("Σ", "\u03A3"); 1796 definedEntities.put("∘", "\u2218"); 1797 definedEntities.put("𝕊", "\uD835\uDD4A"); 1798 definedEntities.put("√", "\u221A"); 1799 definedEntities.put("□", "\u25A1"); 1800 definedEntities.put("⊓", "\u2293"); 1801 definedEntities.put("⊏", "\u228F"); 1802 definedEntities.put("⊑", "\u2291"); 1803 definedEntities.put("⊐", "\u2290"); 1804 definedEntities.put("⊒", "\u2292"); 1805 definedEntities.put("⊔", "\u2294"); 1806 definedEntities.put("𝒮", "\uD835\uDCAE"); 1807 definedEntities.put("⋆", "\u22C6"); 1808 definedEntities.put("⋐", "\u22D0"); 1809 definedEntities.put("⋐", "\u22D0"); 1810 definedEntities.put("⊆", "\u2286"); 1811 definedEntities.put("≻", "\u227B"); 1812 definedEntities.put("⪰", "\u2AB0"); 1813 definedEntities.put("≽", "\u227D"); 1814 definedEntities.put("≿", "\u227F"); 1815 definedEntities.put("∋", "\u220B"); 1816 definedEntities.put("∑", "\u2211"); 1817 definedEntities.put("⋑", "\u22D1"); 1818 definedEntities.put("⊃", "\u2283"); 1819 definedEntities.put("⊇", "\u2287"); 1820 definedEntities.put("⋑", "\u22D1"); 1821 definedEntities.put("Þ", "\u00DE"); 1822 definedEntities.put("™", "\u2122"); 1823 definedEntities.put("Ћ", "\u040B"); 1824 definedEntities.put("Ц", "\u0426"); 1825 definedEntities.put("	", "\u0009"); 1826 definedEntities.put("Τ", "\u03A4"); 1827 definedEntities.put("Ť", "\u0164"); 1828 definedEntities.put("Ţ", "\u0162"); 1829 definedEntities.put("Т", "\u0422"); 1830 definedEntities.put("𝔗", "\uD835\uDD17"); 1831 definedEntities.put("∴", "\u2234"); 1832 definedEntities.put("Θ", "\u0398"); 1833 definedEntities.put("  ", "\u205F\u200A"); 1834 definedEntities.put(" ", "\u2009"); 1835 definedEntities.put("∼", "\u223C"); 1836 definedEntities.put("≃", "\u2243"); 1837 definedEntities.put("≅", "\u2245"); 1838 definedEntities.put("≈", "\u2248"); 1839 definedEntities.put("𝕋", "\uD835\uDD4B"); 1840 definedEntities.put("⃛", "\u20DB"); 1841 definedEntities.put("𝒯", "\uD835\uDCAF"); 1842 definedEntities.put("Ŧ", "\u0166"); 1843 definedEntities.put("Ú", "\u00DA"); 1844 definedEntities.put("↟", "\u219F"); 1845 definedEntities.put("⥉", "\u2949"); 1846 definedEntities.put("Ў", "\u040E"); 1847 definedEntities.put("Ŭ", "\u016C"); 1848 definedEntities.put("Û", "\u00DB"); 1849 definedEntities.put("У", "\u0423"); 1850 definedEntities.put("Ű", "\u0170"); 1851 definedEntities.put("𝔘", "\uD835\uDD18"); 1852 definedEntities.put("Ù", "\u00D9"); 1853 definedEntities.put("Ū", "\u016A"); 1854 definedEntities.put("_", "\u005F"); 1855 definedEntities.put("⏟", "\u23DF"); 1856 definedEntities.put("⎵", "\u23B5"); 1857 definedEntities.put("⏝", "\u23DD"); 1858 definedEntities.put("⋃", "\u22C3"); 1859 definedEntities.put("⊎", "\u228E"); 1860 definedEntities.put("Ų", "\u0172"); 1861 definedEntities.put("𝕌", "\uD835\uDD4C"); 1862 definedEntities.put("↑", "\u2191"); 1863 definedEntities.put("⤒", "\u2912"); 1864 definedEntities.put("⇅", "\u21C5"); 1865 definedEntities.put("↕", "\u2195"); 1866 definedEntities.put("⥮", "\u296E"); 1867 definedEntities.put("⊥", "\u22A5"); 1868 definedEntities.put("↥", "\u21A5"); 1869 definedEntities.put("⇑", "\u21D1"); 1870 definedEntities.put("⇕", "\u21D5"); 1871 definedEntities.put("↖", "\u2196"); 1872 definedEntities.put("↗", "\u2197"); 1873 definedEntities.put("ϒ", "\u03D2"); 1874 definedEntities.put("Υ", "\u03A5"); 1875 definedEntities.put("Ů", "\u016E"); 1876 definedEntities.put("𝒰", "\uD835\uDCB0"); 1877 definedEntities.put("Ũ", "\u0168"); 1878 definedEntities.put("Ü", "\u00DC"); 1879 definedEntities.put("⊫", "\u22AB"); 1880 definedEntities.put("⫫", "\u2AEB"); 1881 definedEntities.put("В", "\u0412"); 1882 definedEntities.put("⊩", "\u22A9"); 1883 definedEntities.put("⫦", "\u2AE6"); 1884 definedEntities.put("⋁", "\u22C1"); 1885 definedEntities.put("‖", "\u2016"); 1886 definedEntities.put("‖", "\u2016"); 1887 definedEntities.put("∣", "\u2223"); 1888 definedEntities.put("|", "\u007C"); 1889 definedEntities.put("❘", "\u2758"); 1890 definedEntities.put("≀", "\u2240"); 1891 definedEntities.put(" ", "\u200A"); 1892 definedEntities.put("𝔙", "\uD835\uDD19"); 1893 definedEntities.put("𝕍", "\uD835\uDD4D"); 1894 definedEntities.put("𝒱", "\uD835\uDCB1"); 1895 definedEntities.put("⊪", "\u22AA"); 1896 definedEntities.put("Ŵ", "\u0174"); 1897 definedEntities.put("⋀", "\u22C0"); 1898 definedEntities.put("𝔚", "\uD835\uDD1A"); 1899 definedEntities.put("𝕎", "\uD835\uDD4E"); 1900 definedEntities.put("𝒲", "\uD835\uDCB2"); 1901 definedEntities.put("𝔛", "\uD835\uDD1B"); 1902 definedEntities.put("Ξ", "\u039E"); 1903 definedEntities.put("𝕏", "\uD835\uDD4F"); 1904 definedEntities.put("𝒳", "\uD835\uDCB3"); 1905 definedEntities.put("Я", "\u042F"); 1906 definedEntities.put("Ї", "\u0407"); 1907 definedEntities.put("Ю", "\u042E"); 1908 definedEntities.put("Ý", "\u00DD"); 1909 definedEntities.put("Ŷ", "\u0176"); 1910 definedEntities.put("Ы", "\u042B"); 1911 definedEntities.put("𝔜", "\uD835\uDD1C"); 1912 definedEntities.put("𝕐", "\uD835\uDD50"); 1913 definedEntities.put("𝒴", "\uD835\uDCB4"); 1914 definedEntities.put("Ÿ", "\u0178"); 1915 definedEntities.put("Ж", "\u0416"); 1916 definedEntities.put("Ź", "\u0179"); 1917 definedEntities.put("Ž", "\u017D"); 1918 definedEntities.put("З", "\u0417"); 1919 definedEntities.put("Ż", "\u017B"); 1920 definedEntities.put("​", "\u200B"); 1921 definedEntities.put("Ζ", "\u0396"); 1922 definedEntities.put("ℨ", "\u2128"); 1923 definedEntities.put("ℤ", "\u2124"); 1924 definedEntities.put("𝒵", "\uD835\uDCB5"); 1925 definedEntities.put("á", "\u00E1"); 1926 definedEntities.put("ă", "\u0103"); 1927 definedEntities.put("∾", "\u223E"); 1928 definedEntities.put("∾̳", "\u223E\u0333"); 1929 definedEntities.put("∿", "\u223F"); 1930 definedEntities.put("â", "\u00E2"); 1931 definedEntities.put("´", "\u00B4"); 1932 definedEntities.put("а", "\u0430"); 1933 definedEntities.put("æ", "\u00E6"); 1934 definedEntities.put("⁡", "\u2061"); 1935 definedEntities.put("𝔞", "\uD835\uDD1E"); 1936 definedEntities.put("à", "\u00E0"); 1937 definedEntities.put("ℵ", "\u2135"); 1938 definedEntities.put("ℵ", "\u2135"); 1939 definedEntities.put("α", "\u03B1"); 1940 definedEntities.put("ā", "\u0101"); 1941 definedEntities.put("⨿", "\u2A3F"); 1942 definedEntities.put("&", "\u0026"); 1943 definedEntities.put("∧", "\u2227"); 1944 definedEntities.put("⩕", "\u2A55"); 1945 definedEntities.put("⩜", "\u2A5C"); 1946 definedEntities.put("⩘", "\u2A58"); 1947 definedEntities.put("⩚", "\u2A5A"); 1948 definedEntities.put("∠", "\u2220"); 1949 definedEntities.put("⦤", "\u29A4"); 1950 definedEntities.put("∠", "\u2220"); 1951 definedEntities.put("∡", "\u2221"); 1952 definedEntities.put("⦨", "\u29A8"); 1953 definedEntities.put("⦩", "\u29A9"); 1954 definedEntities.put("⦪", "\u29AA"); 1955 definedEntities.put("⦫", "\u29AB"); 1956 definedEntities.put("⦬", "\u29AC"); 1957 definedEntities.put("⦭", "\u29AD"); 1958 definedEntities.put("⦮", "\u29AE"); 1959 definedEntities.put("⦯", "\u29AF"); 1960 definedEntities.put("∟", "\u221F"); 1961 definedEntities.put("⊾", "\u22BE"); 1962 definedEntities.put("⦝", "\u299D"); 1963 definedEntities.put("∢", "\u2222"); 1964 definedEntities.put("Å", "\u00C5"); 1965 definedEntities.put("⍼", "\u237C"); 1966 definedEntities.put("ą", "\u0105"); 1967 definedEntities.put("𝕒", "\uD835\uDD52"); 1968 definedEntities.put("≈", "\u2248"); 1969 definedEntities.put("⩰", "\u2A70"); 1970 definedEntities.put("⩯", "\u2A6F"); 1971 definedEntities.put("≊", "\u224A"); 1972 definedEntities.put("≋", "\u224B"); 1973 definedEntities.put("'", "\u0027"); 1974 definedEntities.put("≈", "\u2248"); 1975 definedEntities.put("≊", "\u224A"); 1976 definedEntities.put("å", "\u00E5"); 1977 definedEntities.put("𝒶", "\uD835\uDCB6"); 1978 definedEntities.put("*", "\u002A"); 1979 definedEntities.put("≈", "\u2248"); 1980 definedEntities.put("≍", "\u224D"); 1981 definedEntities.put("ã", "\u00E3"); 1982 definedEntities.put("ä", "\u00E4"); 1983 definedEntities.put("∳", "\u2233"); 1984 definedEntities.put("⨑", "\u2A11"); 1985 definedEntities.put("⫭", "\u2AED"); 1986 definedEntities.put("≌", "\u224C"); 1987 definedEntities.put("϶", "\u03F6"); 1988 definedEntities.put("‵", "\u2035"); 1989 definedEntities.put("∽", "\u223D"); 1990 definedEntities.put("⋍", "\u22CD"); 1991 definedEntities.put("⊽", "\u22BD"); 1992 definedEntities.put("⌅", "\u2305"); 1993 definedEntities.put("⌅", "\u2305"); 1994 definedEntities.put("⎵", "\u23B5"); 1995 definedEntities.put("⎶", "\u23B6"); 1996 definedEntities.put("≌", "\u224C"); 1997 definedEntities.put("б", "\u0431"); 1998 definedEntities.put("„", "\u201E"); 1999 definedEntities.put("∵", "\u2235"); 2000 definedEntities.put("∵", "\u2235"); 2001 definedEntities.put("⦰", "\u29B0"); 2002 definedEntities.put("϶", "\u03F6"); 2003 definedEntities.put("ℬ", "\u212C"); 2004 definedEntities.put("β", "\u03B2"); 2005 definedEntities.put("ℶ", "\u2136"); 2006 definedEntities.put("≬", "\u226C"); 2007 definedEntities.put("𝔟", "\uD835\uDD1F"); 2008 definedEntities.put("⋂", "\u22C2"); 2009 definedEntities.put("◯", "\u25EF"); 2010 definedEntities.put("⋃", "\u22C3"); 2011 definedEntities.put("⨀", "\u2A00"); 2012 definedEntities.put("⨁", "\u2A01"); 2013 definedEntities.put("⨂", "\u2A02"); 2014 definedEntities.put("⨆", "\u2A06"); 2015 definedEntities.put("★", "\u2605"); 2016 definedEntities.put("▽", "\u25BD"); 2017 definedEntities.put("△", "\u25B3"); 2018 definedEntities.put("⨄", "\u2A04"); 2019 definedEntities.put("⋁", "\u22C1"); 2020 definedEntities.put("⋀", "\u22C0"); 2021 definedEntities.put("⤍", "\u290D"); 2022 definedEntities.put("⧫", "\u29EB"); 2023 definedEntities.put("▪", "\u25AA"); 2024 definedEntities.put("▴", "\u25B4"); 2025 definedEntities.put("▾", "\u25BE"); 2026 definedEntities.put("◂", "\u25C2"); 2027 definedEntities.put("▸", "\u25B8"); 2028 definedEntities.put("␣", "\u2423"); 2029 definedEntities.put("▒", "\u2592"); 2030 definedEntities.put("░", "\u2591"); 2031 definedEntities.put("▓", "\u2593"); 2032 definedEntities.put("█", "\u2588"); 2033 definedEntities.put("=⃥", "\u003D\u20E5"); 2034 definedEntities.put("≡⃥", "\u2261\u20E5"); 2035 definedEntities.put("⌐", "\u2310"); 2036 definedEntities.put("𝕓", "\uD835\uDD53"); 2037 definedEntities.put("⊥", "\u22A5"); 2038 definedEntities.put("⊥", "\u22A5"); 2039 definedEntities.put("⋈", "\u22C8"); 2040 definedEntities.put("╗", "\u2557"); 2041 definedEntities.put("╔", "\u2554"); 2042 definedEntities.put("╖", "\u2556"); 2043 definedEntities.put("╓", "\u2553"); 2044 definedEntities.put("═", "\u2550"); 2045 definedEntities.put("╦", "\u2566"); 2046 definedEntities.put("╩", "\u2569"); 2047 definedEntities.put("╤", "\u2564"); 2048 definedEntities.put("╧", "\u2567"); 2049 definedEntities.put("╝", "\u255D"); 2050 definedEntities.put("╚", "\u255A"); 2051 definedEntities.put("╜", "\u255C"); 2052 definedEntities.put("╙", "\u2559"); 2053 definedEntities.put("║", "\u2551"); 2054 definedEntities.put("╬", "\u256C"); 2055 definedEntities.put("╣", "\u2563"); 2056 definedEntities.put("╠", "\u2560"); 2057 definedEntities.put("╫", "\u256B"); 2058 definedEntities.put("╢", "\u2562"); 2059 definedEntities.put("╟", "\u255F"); 2060 definedEntities.put("⧉", "\u29C9"); 2061 definedEntities.put("╕", "\u2555"); 2062 definedEntities.put("╒", "\u2552"); 2063 definedEntities.put("┐", "\u2510"); 2064 definedEntities.put("┌", "\u250C"); 2065 definedEntities.put("─", "\u2500"); 2066 definedEntities.put("╥", "\u2565"); 2067 definedEntities.put("╨", "\u2568"); 2068 definedEntities.put("┬", "\u252C"); 2069 definedEntities.put("┴", "\u2534"); 2070 definedEntities.put("⊟", "\u229F"); 2071 definedEntities.put("⊞", "\u229E"); 2072 definedEntities.put("⊠", "\u22A0"); 2073 definedEntities.put("╛", "\u255B"); 2074 definedEntities.put("╘", "\u2558"); 2075 definedEntities.put("┘", "\u2518"); 2076 definedEntities.put("└", "\u2514"); 2077 definedEntities.put("│", "\u2502"); 2078 definedEntities.put("╪", "\u256A"); 2079 definedEntities.put("╡", "\u2561"); 2080 definedEntities.put("╞", "\u255E"); 2081 definedEntities.put("┼", "\u253C"); 2082 definedEntities.put("┤", "\u2524"); 2083 definedEntities.put("├", "\u251C"); 2084 definedEntities.put("‵", "\u2035"); 2085 definedEntities.put("˘", "\u02D8"); 2086 definedEntities.put("¦", "\u00A6"); 2087 definedEntities.put("𝒷", "\uD835\uDCB7"); 2088 definedEntities.put("⁏", "\u204F"); 2089 definedEntities.put("∽", "\u223D"); 2090 definedEntities.put("⋍", "\u22CD"); 2091 definedEntities.put("\", "\\u005C"); 2092 definedEntities.put("⧅", "\u29C5"); 2093 definedEntities.put("⟈", "\u27C8"); 2094 definedEntities.put("•", "\u2022"); 2095 definedEntities.put("•", "\u2022"); 2096 definedEntities.put("≎", "\u224E"); 2097 definedEntities.put("⪮", "\u2AAE"); 2098 definedEntities.put("≏", "\u224F"); 2099 definedEntities.put("≏", "\u224F"); 2100 definedEntities.put("ć", "\u0107"); 2101 definedEntities.put("∩", "\u2229"); 2102 definedEntities.put("⩄", "\u2A44"); 2103 definedEntities.put("⩉", "\u2A49"); 2104 definedEntities.put("⩋", "\u2A4B"); 2105 definedEntities.put("⩇", "\u2A47"); 2106 definedEntities.put("⩀", "\u2A40"); 2107 definedEntities.put("∩︀", "\u2229\uFE00"); 2108 definedEntities.put("⁁", "\u2041"); 2109 definedEntities.put("ˇ", "\u02C7"); 2110 definedEntities.put("⩍", "\u2A4D"); 2111 definedEntities.put("č", "\u010D"); 2112 definedEntities.put("ç", "\u00E7"); 2113 definedEntities.put("ĉ", "\u0109"); 2114 definedEntities.put("⩌", "\u2A4C"); 2115 definedEntities.put("⩐", "\u2A50"); 2116 definedEntities.put("ċ", "\u010B"); 2117 definedEntities.put("¸", "\u00B8"); 2118 definedEntities.put("⦲", "\u29B2"); 2119 definedEntities.put("¢", "\u00A2"); 2120 definedEntities.put("·", "\u00B7"); 2121 definedEntities.put("𝔠", "\uD835\uDD20"); 2122 definedEntities.put("ч", "\u0447"); 2123 definedEntities.put("✓", "\u2713"); 2124 definedEntities.put("✓", "\u2713"); 2125 definedEntities.put("χ", "\u03C7"); 2126 definedEntities.put("○", "\u25CB"); 2127 definedEntities.put("⧃", "\u29C3"); 2128 definedEntities.put("ˆ", "\u02C6"); 2129 definedEntities.put("≗", "\u2257"); 2130 definedEntities.put("↺", "\u21BA"); 2131 definedEntities.put("↻", "\u21BB"); 2132 definedEntities.put("®", "\u00AE"); 2133 definedEntities.put("Ⓢ", "\u24C8"); 2134 definedEntities.put("⊛", "\u229B"); 2135 definedEntities.put("⊚", "\u229A"); 2136 definedEntities.put("⊝", "\u229D"); 2137 definedEntities.put("≗", "\u2257"); 2138 definedEntities.put("⨐", "\u2A10"); 2139 definedEntities.put("⫯", "\u2AEF"); 2140 definedEntities.put("⧂", "\u29C2"); 2141 definedEntities.put("♣", "\u2663"); 2142 definedEntities.put("♣", "\u2663"); 2143 definedEntities.put(":", "\u003A"); 2144 definedEntities.put("≔", "\u2254"); 2145 definedEntities.put("≔", "\u2254"); 2146 definedEntities.put(",", "\u002C"); 2147 definedEntities.put("@", "\u0040"); 2148 definedEntities.put("∁", "\u2201"); 2149 definedEntities.put("∘", "\u2218"); 2150 definedEntities.put("∁", "\u2201"); 2151 definedEntities.put("ℂ", "\u2102"); 2152 definedEntities.put("≅", "\u2245"); 2153 definedEntities.put("⩭", "\u2A6D"); 2154 definedEntities.put("∮", "\u222E"); 2155 definedEntities.put("𝕔", "\uD835\uDD54"); 2156 definedEntities.put("∐", "\u2210"); 2157 definedEntities.put("©", "\u00A9"); 2158 definedEntities.put("℗", "\u2117"); 2159 definedEntities.put("↵", "\u21B5"); 2160 definedEntities.put("✗", "\u2717"); 2161 definedEntities.put("𝒸", "\uD835\uDCB8"); 2162 definedEntities.put("⫏", "\u2ACF"); 2163 definedEntities.put("⫑", "\u2AD1"); 2164 definedEntities.put("⫐", "\u2AD0"); 2165 definedEntities.put("⫒", "\u2AD2"); 2166 definedEntities.put("⋯", "\u22EF"); 2167 definedEntities.put("⤸", "\u2938"); 2168 definedEntities.put("⤵", "\u2935"); 2169 definedEntities.put("⋞", "\u22DE"); 2170 definedEntities.put("⋟", "\u22DF"); 2171 definedEntities.put("↶", "\u21B6"); 2172 definedEntities.put("⤽", "\u293D"); 2173 definedEntities.put("∪", "\u222A"); 2174 definedEntities.put("⩈", "\u2A48"); 2175 definedEntities.put("⩆", "\u2A46"); 2176 definedEntities.put("⩊", "\u2A4A"); 2177 definedEntities.put("⊍", "\u228D"); 2178 definedEntities.put("⩅", "\u2A45"); 2179 definedEntities.put("∪︀", "\u222A\uFE00"); 2180 definedEntities.put("↷", "\u21B7"); 2181 definedEntities.put("⤼", "\u293C"); 2182 definedEntities.put("⋞", "\u22DE"); 2183 definedEntities.put("⋟", "\u22DF"); 2184 definedEntities.put("⋎", "\u22CE"); 2185 definedEntities.put("⋏", "\u22CF"); 2186 definedEntities.put("¤", "\u00A4"); 2187 definedEntities.put("↶", "\u21B6"); 2188 definedEntities.put("↷", "\u21B7"); 2189 definedEntities.put("⋎", "\u22CE"); 2190 definedEntities.put("⋏", "\u22CF"); 2191 definedEntities.put("∲", "\u2232"); 2192 definedEntities.put("∱", "\u2231"); 2193 definedEntities.put("⌭", "\u232D"); 2194 definedEntities.put("⇓", "\u21D3"); 2195 definedEntities.put("⥥", "\u2965"); 2196 definedEntities.put("†", "\u2020"); 2197 definedEntities.put("ℸ", "\u2138"); 2198 definedEntities.put("↓", "\u2193"); 2199 definedEntities.put("‐", "\u2010"); 2200 definedEntities.put("⊣", "\u22A3"); 2201 definedEntities.put("⤏", "\u290F"); 2202 definedEntities.put("˝", "\u02DD"); 2203 definedEntities.put("ď", "\u010F"); 2204 definedEntities.put("д", "\u0434"); 2205 definedEntities.put("ⅆ", "\u2146"); 2206 definedEntities.put("‡", "\u2021"); 2207 definedEntities.put("⇊", "\u21CA"); 2208 definedEntities.put("⩷", "\u2A77"); 2209 definedEntities.put("°", "\u00B0"); 2210 definedEntities.put("δ", "\u03B4"); 2211 definedEntities.put("⦱", "\u29B1"); 2212 definedEntities.put("⥿", "\u297F"); 2213 definedEntities.put("𝔡", "\uD835\uDD21"); 2214 definedEntities.put("⇃", "\u21C3"); 2215 definedEntities.put("⇂", "\u21C2"); 2216 definedEntities.put("⋄", "\u22C4"); 2217 definedEntities.put("⋄", "\u22C4"); 2218 definedEntities.put("♦", "\u2666"); 2219 definedEntities.put("♦", "\u2666"); 2220 definedEntities.put("¨", "\u00A8"); 2221 definedEntities.put("ϝ", "\u03DD"); 2222 definedEntities.put("⋲", "\u22F2"); 2223 definedEntities.put("÷", "\u00F7"); 2224 definedEntities.put("÷", "\u00F7"); 2225 definedEntities.put("⋇", "\u22C7"); 2226 definedEntities.put("⋇", "\u22C7"); 2227 definedEntities.put("ђ", "\u0452"); 2228 definedEntities.put("⌞", "\u231E"); 2229 definedEntities.put("⌍", "\u230D"); 2230 definedEntities.put("$", "\u0024"); 2231 definedEntities.put("𝕕", "\uD835\uDD55"); 2232 definedEntities.put("˙", "\u02D9"); 2233 definedEntities.put("≐", "\u2250"); 2234 definedEntities.put("≑", "\u2251"); 2235 definedEntities.put("∸", "\u2238"); 2236 definedEntities.put("∔", "\u2214"); 2237 definedEntities.put("⊡", "\u22A1"); 2238 definedEntities.put("⌆", "\u2306"); 2239 definedEntities.put("↓", "\u2193"); 2240 definedEntities.put("⇊", "\u21CA"); 2241 definedEntities.put("⇃", "\u21C3"); 2242 definedEntities.put("⇂", "\u21C2"); 2243 definedEntities.put("⤐", "\u2910"); 2244 definedEntities.put("⌟", "\u231F"); 2245 definedEntities.put("⌌", "\u230C"); 2246 definedEntities.put("𝒹", "\uD835\uDCB9"); 2247 definedEntities.put("ѕ", "\u0455"); 2248 definedEntities.put("⧶", "\u29F6"); 2249 definedEntities.put("đ", "\u0111"); 2250 definedEntities.put("⋱", "\u22F1"); 2251 definedEntities.put("▿", "\u25BF"); 2252 definedEntities.put("▾", "\u25BE"); 2253 definedEntities.put("⇵", "\u21F5"); 2254 definedEntities.put("⥯", "\u296F"); 2255 definedEntities.put("⦦", "\u29A6"); 2256 definedEntities.put("џ", "\u045F"); 2257 definedEntities.put("⟿", "\u27FF"); 2258 definedEntities.put("⩷", "\u2A77"); 2259 definedEntities.put("≑", "\u2251"); 2260 definedEntities.put("é", "\u00E9"); 2261 definedEntities.put("⩮", "\u2A6E"); 2262 definedEntities.put("ě", "\u011B"); 2263 definedEntities.put("≖", "\u2256"); 2264 definedEntities.put("ê", "\u00EA"); 2265 definedEntities.put("≕", "\u2255"); 2266 definedEntities.put("э", "\u044D"); 2267 definedEntities.put("ė", "\u0117"); 2268 definedEntities.put("ⅇ", "\u2147"); 2269 definedEntities.put("≒", "\u2252"); 2270 definedEntities.put("𝔢", "\uD835\uDD22"); 2271 definedEntities.put("⪚", "\u2A9A"); 2272 definedEntities.put("è", "\u00E8"); 2273 definedEntities.put("⪖", "\u2A96"); 2274 definedEntities.put("⪘", "\u2A98"); 2275 definedEntities.put("⪙", "\u2A99"); 2276 definedEntities.put("⏧", "\u23E7"); 2277 definedEntities.put("ℓ", "\u2113"); 2278 definedEntities.put("⪕", "\u2A95"); 2279 definedEntities.put("⪗", "\u2A97"); 2280 definedEntities.put("ē", "\u0113"); 2281 definedEntities.put("∅", "\u2205"); 2282 definedEntities.put("∅", "\u2205"); 2283 definedEntities.put("∅", "\u2205"); 2284 definedEntities.put(" ", "\u2004"); 2285 definedEntities.put(" ", "\u2005"); 2286 definedEntities.put(" ", "\u2003"); 2287 definedEntities.put("ŋ", "\u014B"); 2288 definedEntities.put(" ", "\u2002"); 2289 definedEntities.put("ę", "\u0119"); 2290 definedEntities.put("𝕖", "\uD835\uDD56"); 2291 definedEntities.put("⋕", "\u22D5"); 2292 definedEntities.put("⧣", "\u29E3"); 2293 definedEntities.put("⩱", "\u2A71"); 2294 definedEntities.put("ε", "\u03B5"); 2295 definedEntities.put("ε", "\u03B5"); 2296 definedEntities.put("ϵ", "\u03F5"); 2297 definedEntities.put("≖", "\u2256"); 2298 definedEntities.put("≕", "\u2255"); 2299 definedEntities.put("≂", "\u2242"); 2300 definedEntities.put("⪖", "\u2A96"); 2301 definedEntities.put("⪕", "\u2A95"); 2302 definedEntities.put("=", "\u003D"); 2303 definedEntities.put("≟", "\u225F"); 2304 definedEntities.put("≡", "\u2261"); 2305 definedEntities.put("⩸", "\u2A78"); 2306 definedEntities.put("⧥", "\u29E5"); 2307 definedEntities.put("≓", "\u2253"); 2308 definedEntities.put("⥱", "\u2971"); 2309 definedEntities.put("ℯ", "\u212F"); 2310 definedEntities.put("≐", "\u2250"); 2311 definedEntities.put("≂", "\u2242"); 2312 definedEntities.put("η", "\u03B7"); 2313 definedEntities.put("ð", "\u00F0"); 2314 definedEntities.put("ë", "\u00EB"); 2315 definedEntities.put("€", "\u20AC"); 2316 definedEntities.put("!", "\u0021"); 2317 definedEntities.put("∃", "\u2203"); 2318 definedEntities.put("ℰ", "\u2130"); 2319 definedEntities.put("ⅇ", "\u2147"); 2320 definedEntities.put("≒", "\u2252"); 2321 definedEntities.put("ф", "\u0444"); 2322 definedEntities.put("♀", "\u2640"); 2323 definedEntities.put("ffi", "\uFB03"); 2324 definedEntities.put("ff", "\uFB00"); 2325 definedEntities.put("ffl", "\uFB04"); 2326 definedEntities.put("𝔣", "\uD835\uDD23"); 2327 definedEntities.put("fi", "\uFB01"); 2328 definedEntities.put("fj", "\u0066\u006A"); 2329 definedEntities.put("♭", "\u266D"); 2330 definedEntities.put("fl", "\uFB02"); 2331 definedEntities.put("▱", "\u25B1"); 2332 definedEntities.put("ƒ", "\u0192"); 2333 definedEntities.put("𝕗", "\uD835\uDD57"); 2334 definedEntities.put("∀", "\u2200"); 2335 definedEntities.put("⋔", "\u22D4"); 2336 definedEntities.put("⫙", "\u2AD9"); 2337 definedEntities.put("⨍", "\u2A0D"); 2338 definedEntities.put("½", "\u00BD"); 2339 definedEntities.put("⅓", "\u2153"); 2340 definedEntities.put("¼", "\u00BC"); 2341 definedEntities.put("⅕", "\u2155"); 2342 definedEntities.put("⅙", "\u2159"); 2343 definedEntities.put("⅛", "\u215B"); 2344 definedEntities.put("⅔", "\u2154"); 2345 definedEntities.put("⅖", "\u2156"); 2346 definedEntities.put("¾", "\u00BE"); 2347 definedEntities.put("⅗", "\u2157"); 2348 definedEntities.put("⅜", "\u215C"); 2349 definedEntities.put("⅘", "\u2158"); 2350 definedEntities.put("⅚", "\u215A"); 2351 definedEntities.put("⅝", "\u215D"); 2352 definedEntities.put("⅞", "\u215E"); 2353 definedEntities.put("⁄", "\u2044"); 2354 definedEntities.put("⌢", "\u2322"); 2355 definedEntities.put("𝒻", "\uD835\uDCBB"); 2356 definedEntities.put("≧", "\u2267"); 2357 definedEntities.put("⪌", "\u2A8C"); 2358 definedEntities.put("ǵ", "\u01F5"); 2359 definedEntities.put("γ", "\u03B3"); 2360 definedEntities.put("ϝ", "\u03DD"); 2361 definedEntities.put("⪆", "\u2A86"); 2362 definedEntities.put("ğ", "\u011F"); 2363 definedEntities.put("ĝ", "\u011D"); 2364 definedEntities.put("г", "\u0433"); 2365 definedEntities.put("ġ", "\u0121"); 2366 definedEntities.put("≥", "\u2265"); 2367 definedEntities.put("⋛", "\u22DB"); 2368 definedEntities.put("≥", "\u2265"); 2369 definedEntities.put("≧", "\u2267"); 2370 definedEntities.put("⩾", "\u2A7E"); 2371 definedEntities.put("⩾", "\u2A7E"); 2372 definedEntities.put("⪩", "\u2AA9"); 2373 definedEntities.put("⪀", "\u2A80"); 2374 definedEntities.put("⪂", "\u2A82"); 2375 definedEntities.put("⪄", "\u2A84"); 2376 definedEntities.put("⋛︀", "\u22DB\uFE00"); 2377 definedEntities.put("⪔", "\u2A94"); 2378 definedEntities.put("𝔤", "\uD835\uDD24"); 2379 definedEntities.put("≫", "\u226B"); 2380 definedEntities.put("⋙", "\u22D9"); 2381 definedEntities.put("ℷ", "\u2137"); 2382 definedEntities.put("ѓ", "\u0453"); 2383 definedEntities.put("≷", "\u2277"); 2384 definedEntities.put("⪒", "\u2A92"); 2385 definedEntities.put("⪥", "\u2AA5"); 2386 definedEntities.put("⪤", "\u2AA4"); 2387 definedEntities.put("≩", "\u2269"); 2388 definedEntities.put("⪊", "\u2A8A"); 2389 definedEntities.put("⪊", "\u2A8A"); 2390 definedEntities.put("⪈", "\u2A88"); 2391 definedEntities.put("⪈", "\u2A88"); 2392 definedEntities.put("≩", "\u2269"); 2393 definedEntities.put("⋧", "\u22E7"); 2394 definedEntities.put("𝕘", "\uD835\uDD58"); 2395 definedEntities.put("`", "\u0060"); 2396 definedEntities.put("ℊ", "\u210A"); 2397 definedEntities.put("≳", "\u2273"); 2398 definedEntities.put("⪎", "\u2A8E"); 2399 definedEntities.put("⪐", "\u2A90"); 2400 definedEntities.put(">", "\u003E"); 2401 definedEntities.put("⪧", "\u2AA7"); 2402 definedEntities.put("⩺", "\u2A7A"); 2403 definedEntities.put("⋗", "\u22D7"); 2404 definedEntities.put("⦕", "\u2995"); 2405 definedEntities.put("⩼", "\u2A7C"); 2406 definedEntities.put("⪆", "\u2A86"); 2407 definedEntities.put("⥸", "\u2978"); 2408 definedEntities.put("⋗", "\u22D7"); 2409 definedEntities.put("⋛", "\u22DB"); 2410 definedEntities.put("⪌", "\u2A8C"); 2411 definedEntities.put("≷", "\u2277"); 2412 definedEntities.put("≳", "\u2273"); 2413 definedEntities.put("≩︀", "\u2269\uFE00"); 2414 definedEntities.put("≩︀", "\u2269\uFE00"); 2415 definedEntities.put("⇔", "\u21D4"); 2416 definedEntities.put(" ", "\u200A"); 2417 definedEntities.put("½", "\u00BD"); 2418 definedEntities.put("ℋ", "\u210B"); 2419 definedEntities.put("ъ", "\u044A"); 2420 definedEntities.put("↔", "\u2194"); 2421 definedEntities.put("⥈", "\u2948"); 2422 definedEntities.put("↭", "\u21AD"); 2423 definedEntities.put("ℏ", "\u210F"); 2424 definedEntities.put("ĥ", "\u0125"); 2425 definedEntities.put("♥", "\u2665"); 2426 definedEntities.put("♥", "\u2665"); 2427 definedEntities.put("…", "\u2026"); 2428 definedEntities.put("⊹", "\u22B9"); 2429 definedEntities.put("𝔥", "\uD835\uDD25"); 2430 definedEntities.put("⤥", "\u2925"); 2431 definedEntities.put("⤦", "\u2926"); 2432 definedEntities.put("⇿", "\u21FF"); 2433 definedEntities.put("∻", "\u223B"); 2434 definedEntities.put("↩", "\u21A9"); 2435 definedEntities.put("↪", "\u21AA"); 2436 definedEntities.put("𝕙", "\uD835\uDD59"); 2437 definedEntities.put("―", "\u2015"); 2438 definedEntities.put("𝒽", "\uD835\uDCBD"); 2439 definedEntities.put("ℏ", "\u210F"); 2440 definedEntities.put("ħ", "\u0127"); 2441 definedEntities.put("⁃", "\u2043"); 2442 definedEntities.put("‐", "\u2010"); 2443 definedEntities.put("í", "\u00ED"); 2444 definedEntities.put("⁣", "\u2063"); 2445 definedEntities.put("î", "\u00EE"); 2446 definedEntities.put("и", "\u0438"); 2447 definedEntities.put("е", "\u0435"); 2448 definedEntities.put("¡", "\u00A1"); 2449 definedEntities.put("⇔", "\u21D4"); 2450 definedEntities.put("𝔦", "\uD835\uDD26"); 2451 definedEntities.put("ì", "\u00EC"); 2452 definedEntities.put("ⅈ", "\u2148"); 2453 definedEntities.put("⨌", "\u2A0C"); 2454 definedEntities.put("∭", "\u222D"); 2455 definedEntities.put("⧜", "\u29DC"); 2456 definedEntities.put("℩", "\u2129"); 2457 definedEntities.put("ij", "\u0133"); 2458 definedEntities.put("ī", "\u012B"); 2459 definedEntities.put("ℑ", "\u2111"); 2460 definedEntities.put("ℐ", "\u2110"); 2461 definedEntities.put("ℑ", "\u2111"); 2462 definedEntities.put("ı", "\u0131"); 2463 definedEntities.put("⊷", "\u22B7"); 2464 definedEntities.put("Ƶ", "\u01B5"); 2465 definedEntities.put("∈", "\u2208"); 2466 definedEntities.put("℅", "\u2105"); 2467 definedEntities.put("∞", "\u221E"); 2468 definedEntities.put("⧝", "\u29DD"); 2469 definedEntities.put("ı", "\u0131"); 2470 definedEntities.put("∫", "\u222B"); 2471 definedEntities.put("⊺", "\u22BA"); 2472 definedEntities.put("ℤ", "\u2124"); 2473 definedEntities.put("⊺", "\u22BA"); 2474 definedEntities.put("⨗", "\u2A17"); 2475 definedEntities.put("⨼", "\u2A3C"); 2476 definedEntities.put("ё", "\u0451"); 2477 definedEntities.put("į", "\u012F"); 2478 definedEntities.put("𝕚", "\uD835\uDD5A"); 2479 definedEntities.put("ι", "\u03B9"); 2480 definedEntities.put("⨼", "\u2A3C"); 2481 definedEntities.put("¿", "\u00BF"); 2482 definedEntities.put("𝒾", "\uD835\uDCBE"); 2483 definedEntities.put("∈", "\u2208"); 2484 definedEntities.put("⋹", "\u22F9"); 2485 definedEntities.put("⋵", "\u22F5"); 2486 definedEntities.put("⋴", "\u22F4"); 2487 definedEntities.put("⋳", "\u22F3"); 2488 definedEntities.put("∈", "\u2208"); 2489 definedEntities.put("⁢", "\u2062"); 2490 definedEntities.put("ĩ", "\u0129"); 2491 definedEntities.put("і", "\u0456"); 2492 definedEntities.put("ï", "\u00EF"); 2493 definedEntities.put("ĵ", "\u0135"); 2494 definedEntities.put("й", "\u0439"); 2495 definedEntities.put("𝔧", "\uD835\uDD27"); 2496 definedEntities.put("ȷ", "\u0237"); 2497 definedEntities.put("𝕛", "\uD835\uDD5B"); 2498 definedEntities.put("𝒿", "\uD835\uDCBF"); 2499 definedEntities.put("ј", "\u0458"); 2500 definedEntities.put("є", "\u0454"); 2501 definedEntities.put("κ", "\u03BA"); 2502 definedEntities.put("ϰ", "\u03F0"); 2503 definedEntities.put("ķ", "\u0137"); 2504 definedEntities.put("к", "\u043A"); 2505 definedEntities.put("𝔨", "\uD835\uDD28"); 2506 definedEntities.put("ĸ", "\u0138"); 2507 definedEntities.put("х", "\u0445"); 2508 definedEntities.put("ќ", "\u045C"); 2509 definedEntities.put("𝕜", "\uD835\uDD5C"); 2510 definedEntities.put("𝓀", "\uD835\uDCC0"); 2511 definedEntities.put("⇚", "\u21DA"); 2512 definedEntities.put("⇐", "\u21D0"); 2513 definedEntities.put("⤛", "\u291B"); 2514 definedEntities.put("⤎", "\u290E"); 2515 definedEntities.put("≦", "\u2266"); 2516 definedEntities.put("⪋", "\u2A8B"); 2517 definedEntities.put("⥢", "\u2962"); 2518 definedEntities.put("ĺ", "\u013A"); 2519 definedEntities.put("⦴", "\u29B4"); 2520 definedEntities.put("ℒ", "\u2112"); 2521 definedEntities.put("λ", "\u03BB"); 2522 definedEntities.put("⟨", "\u27E8"); 2523 definedEntities.put("⦑", "\u2991"); 2524 definedEntities.put("⟨", "\u27E8"); 2525 definedEntities.put("⪅", "\u2A85"); 2526 definedEntities.put("«", "\u00AB"); 2527 definedEntities.put("←", "\u2190"); 2528 definedEntities.put("⇤", "\u21E4"); 2529 definedEntities.put("⤟", "\u291F"); 2530 definedEntities.put("⤝", "\u291D"); 2531 definedEntities.put("↩", "\u21A9"); 2532 definedEntities.put("↫", "\u21AB"); 2533 definedEntities.put("⤹", "\u2939"); 2534 definedEntities.put("⥳", "\u2973"); 2535 definedEntities.put("↢", "\u21A2"); 2536 definedEntities.put("⪫", "\u2AAB"); 2537 definedEntities.put("⤙", "\u2919"); 2538 definedEntities.put("⪭", "\u2AAD"); 2539 definedEntities.put("⪭︀", "\u2AAD\uFE00"); 2540 definedEntities.put("⤌", "\u290C"); 2541 definedEntities.put("❲", "\u2772"); 2542 definedEntities.put("{", "\u007B"); 2543 definedEntities.put("[", "\u005B"); 2544 definedEntities.put("⦋", "\u298B"); 2545 definedEntities.put("⦏", "\u298F"); 2546 definedEntities.put("⦍", "\u298D"); 2547 definedEntities.put("ľ", "\u013E"); 2548 definedEntities.put("ļ", "\u013C"); 2549 definedEntities.put("⌈", "\u2308"); 2550 definedEntities.put("{", "\u007B"); 2551 definedEntities.put("л", "\u043B"); 2552 definedEntities.put("⤶", "\u2936"); 2553 definedEntities.put("“", "\u201C"); 2554 definedEntities.put("„", "\u201E"); 2555 definedEntities.put("⥧", "\u2967"); 2556 definedEntities.put("⥋", "\u294B"); 2557 definedEntities.put("↲", "\u21B2"); 2558 definedEntities.put("≤", "\u2264"); 2559 definedEntities.put("←", "\u2190"); 2560 definedEntities.put("↢", "\u21A2"); 2561 definedEntities.put("↽", "\u21BD"); 2562 definedEntities.put("↼", "\u21BC"); 2563 definedEntities.put("⇇", "\u21C7"); 2564 definedEntities.put("↔", "\u2194"); 2565 definedEntities.put("⇆", "\u21C6"); 2566 definedEntities.put("⇋", "\u21CB"); 2567 definedEntities.put("↭", "\u21AD"); 2568 definedEntities.put("⋋", "\u22CB"); 2569 definedEntities.put("⋚", "\u22DA"); 2570 definedEntities.put("≤", "\u2264"); 2571 definedEntities.put("≦", "\u2266"); 2572 definedEntities.put("⩽", "\u2A7D"); 2573 definedEntities.put("⩽", "\u2A7D"); 2574 definedEntities.put("⪨", "\u2AA8"); 2575 definedEntities.put("⩿", "\u2A7F"); 2576 definedEntities.put("⪁", "\u2A81"); 2577 definedEntities.put("⪃", "\u2A83"); 2578 definedEntities.put("⋚︀", "\u22DA\uFE00"); 2579 definedEntities.put("⪓", "\u2A93"); 2580 definedEntities.put("⪅", "\u2A85"); 2581 definedEntities.put("⋖", "\u22D6"); 2582 definedEntities.put("⋚", "\u22DA"); 2583 definedEntities.put("⪋", "\u2A8B"); 2584 definedEntities.put("≶", "\u2276"); 2585 definedEntities.put("≲", "\u2272"); 2586 definedEntities.put("⥼", "\u297C"); 2587 definedEntities.put("⌊", "\u230A"); 2588 definedEntities.put("𝔩", "\uD835\uDD29"); 2589 definedEntities.put("≶", "\u2276"); 2590 definedEntities.put("⪑", "\u2A91"); 2591 definedEntities.put("↽", "\u21BD"); 2592 definedEntities.put("↼", "\u21BC"); 2593 definedEntities.put("⥪", "\u296A"); 2594 definedEntities.put("▄", "\u2584"); 2595 definedEntities.put("љ", "\u0459"); 2596 definedEntities.put("≪", "\u226A"); 2597 definedEntities.put("⇇", "\u21C7"); 2598 definedEntities.put("⌞", "\u231E"); 2599 definedEntities.put("⥫", "\u296B"); 2600 definedEntities.put("◺", "\u25FA"); 2601 definedEntities.put("ŀ", "\u0140"); 2602 definedEntities.put("⎰", "\u23B0"); 2603 definedEntities.put("⎰", "\u23B0"); 2604 definedEntities.put("≨", "\u2268"); 2605 definedEntities.put("⪉", "\u2A89"); 2606 definedEntities.put("⪉", "\u2A89"); 2607 definedEntities.put("⪇", "\u2A87"); 2608 definedEntities.put("⪇", "\u2A87"); 2609 definedEntities.put("≨", "\u2268"); 2610 definedEntities.put("⋦", "\u22E6"); 2611 definedEntities.put("⟬", "\u27EC"); 2612 definedEntities.put("⇽", "\u21FD"); 2613 definedEntities.put("⟦", "\u27E6"); 2614 definedEntities.put("⟵", "\u27F5"); 2615 definedEntities.put("⟷", "\u27F7"); 2616 definedEntities.put("⟼", "\u27FC"); 2617 definedEntities.put("⟶", "\u27F6"); 2618 definedEntities.put("↫", "\u21AB"); 2619 definedEntities.put("↬", "\u21AC"); 2620 definedEntities.put("⦅", "\u2985"); 2621 definedEntities.put("𝕝", "\uD835\uDD5D"); 2622 definedEntities.put("⨭", "\u2A2D"); 2623 definedEntities.put("⨴", "\u2A34"); 2624 definedEntities.put("∗", "\u2217"); 2625 definedEntities.put("_", "\u005F"); 2626 definedEntities.put("◊", "\u25CA"); 2627 definedEntities.put("◊", "\u25CA"); 2628 definedEntities.put("⧫", "\u29EB"); 2629 definedEntities.put("(", "\u0028"); 2630 definedEntities.put("⦓", "\u2993"); 2631 definedEntities.put("⇆", "\u21C6"); 2632 definedEntities.put("⌟", "\u231F"); 2633 definedEntities.put("⇋", "\u21CB"); 2634 definedEntities.put("⥭", "\u296D"); 2635 definedEntities.put("‎", "\u200E"); 2636 definedEntities.put("⊿", "\u22BF"); 2637 definedEntities.put("‹", "\u2039"); 2638 definedEntities.put("𝓁", "\uD835\uDCC1"); 2639 definedEntities.put("↰", "\u21B0"); 2640 definedEntities.put("≲", "\u2272"); 2641 definedEntities.put("⪍", "\u2A8D"); 2642 definedEntities.put("⪏", "\u2A8F"); 2643 definedEntities.put("[", "\u005B"); 2644 definedEntities.put("‘", "\u2018"); 2645 definedEntities.put("‚", "\u201A"); 2646 definedEntities.put("ł", "\u0142"); 2647 definedEntities.put("<", "\u003C"); 2648 definedEntities.put("⪦", "\u2AA6"); 2649 definedEntities.put("⩹", "\u2A79"); 2650 definedEntities.put("⋖", "\u22D6"); 2651 definedEntities.put("⋋", "\u22CB"); 2652 definedEntities.put("⋉", "\u22C9"); 2653 definedEntities.put("⥶", "\u2976"); 2654 definedEntities.put("⩻", "\u2A7B"); 2655 definedEntities.put("⦖", "\u2996"); 2656 definedEntities.put("◃", "\u25C3"); 2657 definedEntities.put("⊴", "\u22B4"); 2658 definedEntities.put("◂", "\u25C2"); 2659 definedEntities.put("⥊", "\u294A"); 2660 definedEntities.put("⥦", "\u2966"); 2661 definedEntities.put("≨︀", "\u2268\uFE00"); 2662 definedEntities.put("≨︀", "\u2268\uFE00"); 2663 definedEntities.put("∺", "\u223A"); 2664 definedEntities.put("¯", "\u00AF"); 2665 definedEntities.put("♂", "\u2642"); 2666 definedEntities.put("✠", "\u2720"); 2667 definedEntities.put("✠", "\u2720"); 2668 definedEntities.put("↦", "\u21A6"); 2669 definedEntities.put("↦", "\u21A6"); 2670 definedEntities.put("↧", "\u21A7"); 2671 definedEntities.put("↤", "\u21A4"); 2672 definedEntities.put("↥", "\u21A5"); 2673 definedEntities.put("▮", "\u25AE"); 2674 definedEntities.put("⨩", "\u2A29"); 2675 definedEntities.put("м", "\u043C"); 2676 definedEntities.put("—", "\u2014"); 2677 definedEntities.put("∡", "\u2221"); 2678 definedEntities.put("𝔪", "\uD835\uDD2A"); 2679 definedEntities.put("℧", "\u2127"); 2680 definedEntities.put("µ", "\u00B5"); 2681 definedEntities.put("∣", "\u2223"); 2682 definedEntities.put("*", "\u002A"); 2683 definedEntities.put("⫰", "\u2AF0"); 2684 definedEntities.put("·", "\u00B7"); 2685 definedEntities.put("−", "\u2212"); 2686 definedEntities.put("⊟", "\u229F"); 2687 definedEntities.put("∸", "\u2238"); 2688 definedEntities.put("⨪", "\u2A2A"); 2689 definedEntities.put("⫛", "\u2ADB"); 2690 definedEntities.put("…", "\u2026"); 2691 definedEntities.put("∓", "\u2213"); 2692 definedEntities.put("⊧", "\u22A7"); 2693 definedEntities.put("𝕞", "\uD835\uDD5E"); 2694 definedEntities.put("∓", "\u2213"); 2695 definedEntities.put("𝓂", "\uD835\uDCC2"); 2696 definedEntities.put("∾", "\u223E"); 2697 definedEntities.put("μ", "\u03BC"); 2698 definedEntities.put("⊸", "\u22B8"); 2699 definedEntities.put("⊸", "\u22B8"); 2700 definedEntities.put("⋙̸", "\u22D9\u0338"); 2701 definedEntities.put("≫⃒", "\u226B\u20D2"); 2702 definedEntities.put("≫̸", "\u226B\u0338"); 2703 definedEntities.put("⇍", "\u21CD"); 2704 definedEntities.put("⇎", "\u21CE"); 2705 definedEntities.put("⋘̸", "\u22D8\u0338"); 2706 definedEntities.put("≪⃒", "\u226A\u20D2"); 2707 definedEntities.put("≪̸", "\u226A\u0338"); 2708 definedEntities.put("⇏", "\u21CF"); 2709 definedEntities.put("⊯", "\u22AF"); 2710 definedEntities.put("⊮", "\u22AE"); 2711 definedEntities.put("∇", "\u2207"); 2712 definedEntities.put("ń", "\u0144"); 2713 definedEntities.put("∠⃒", "\u2220\u20D2"); 2714 definedEntities.put("≉", "\u2249"); 2715 definedEntities.put("⩰̸", "\u2A70\u0338"); 2716 definedEntities.put("≋̸", "\u224B\u0338"); 2717 definedEntities.put("ʼn", "\u0149"); 2718 definedEntities.put("≉", "\u2249"); 2719 definedEntities.put("♮", "\u266E"); 2720 definedEntities.put("♮", "\u266E"); 2721 definedEntities.put("ℕ", "\u2115"); 2722 definedEntities.put(" ", "\u00A0"); 2723 definedEntities.put("≎̸", "\u224E\u0338"); 2724 definedEntities.put("≏̸", "\u224F\u0338"); 2725 definedEntities.put("⩃", "\u2A43"); 2726 definedEntities.put("ň", "\u0148"); 2727 definedEntities.put("ņ", "\u0146"); 2728 definedEntities.put("≇", "\u2247"); 2729 definedEntities.put("⩭̸", "\u2A6D\u0338"); 2730 definedEntities.put("⩂", "\u2A42"); 2731 definedEntities.put("н", "\u043D"); 2732 definedEntities.put("–", "\u2013"); 2733 definedEntities.put("≠", "\u2260"); 2734 definedEntities.put("⇗", "\u21D7"); 2735 definedEntities.put("⤤", "\u2924"); 2736 definedEntities.put("↗", "\u2197"); 2737 definedEntities.put("↗", "\u2197"); 2738 definedEntities.put("≐̸", "\u2250\u0338"); 2739 definedEntities.put("≢", "\u2262"); 2740 definedEntities.put("⤨", "\u2928"); 2741 definedEntities.put("≂̸", "\u2242\u0338"); 2742 definedEntities.put("∄", "\u2204"); 2743 definedEntities.put("∄", "\u2204"); 2744 definedEntities.put("𝔫", "\uD835\uDD2B"); 2745 definedEntities.put("≧̸", "\u2267\u0338"); 2746 definedEntities.put("≱", "\u2271"); 2747 definedEntities.put("≱", "\u2271"); 2748 definedEntities.put("≧̸", "\u2267\u0338"); 2749 definedEntities.put("⩾̸", "\u2A7E\u0338"); 2750 definedEntities.put("⩾̸", "\u2A7E\u0338"); 2751 definedEntities.put("≵", "\u2275"); 2752 definedEntities.put("≯", "\u226F"); 2753 definedEntities.put("≯", "\u226F"); 2754 definedEntities.put("⇎", "\u21CE"); 2755 definedEntities.put("↮", "\u21AE"); 2756 definedEntities.put("⫲", "\u2AF2"); 2757 definedEntities.put("∋", "\u220B"); 2758 definedEntities.put("⋼", "\u22FC"); 2759 definedEntities.put("⋺", "\u22FA"); 2760 definedEntities.put("∋", "\u220B"); 2761 definedEntities.put("њ", "\u045A"); 2762 definedEntities.put("⇍", "\u21CD"); 2763 definedEntities.put("≦̸", "\u2266\u0338"); 2764 definedEntities.put("↚", "\u219A"); 2765 definedEntities.put("‥", "\u2025"); 2766 definedEntities.put("≰", "\u2270"); 2767 definedEntities.put("↚", "\u219A"); 2768 definedEntities.put("↮", "\u21AE"); 2769 definedEntities.put("≰", "\u2270"); 2770 definedEntities.put("≦̸", "\u2266\u0338"); 2771 definedEntities.put("⩽̸", "\u2A7D\u0338"); 2772 definedEntities.put("⩽̸", "\u2A7D\u0338"); 2773 definedEntities.put("≮", "\u226E"); 2774 definedEntities.put("≴", "\u2274"); 2775 definedEntities.put("≮", "\u226E"); 2776 definedEntities.put("⋪", "\u22EA"); 2777 definedEntities.put("⋬", "\u22EC"); 2778 definedEntities.put("∤", "\u2224"); 2779 definedEntities.put("𝕟", "\uD835\uDD5F"); 2780 definedEntities.put("¬", "\u00AC"); 2781 definedEntities.put("∉", "\u2209"); 2782 definedEntities.put("⋹̸", "\u22F9\u0338"); 2783 definedEntities.put("⋵̸", "\u22F5\u0338"); 2784 definedEntities.put("∉", "\u2209"); 2785 definedEntities.put("⋷", "\u22F7"); 2786 definedEntities.put("⋶", "\u22F6"); 2787 definedEntities.put("∌", "\u220C"); 2788 definedEntities.put("∌", "\u220C"); 2789 definedEntities.put("⋾", "\u22FE"); 2790 definedEntities.put("⋽", "\u22FD"); 2791 definedEntities.put("∦", "\u2226"); 2792 definedEntities.put("∦", "\u2226"); 2793 definedEntities.put("⫽⃥", "\u2AFD\u20E5"); 2794 definedEntities.put("∂̸", "\u2202\u0338"); 2795 definedEntities.put("⨔", "\u2A14"); 2796 definedEntities.put("⊀", "\u2280"); 2797 definedEntities.put("⋠", "\u22E0"); 2798 definedEntities.put("⪯̸", "\u2AAF\u0338"); 2799 definedEntities.put("⊀", "\u2280"); 2800 definedEntities.put("⪯̸", "\u2AAF\u0338"); 2801 definedEntities.put("⇏", "\u21CF"); 2802 definedEntities.put("↛", "\u219B"); 2803 definedEntities.put("⤳̸", "\u2933\u0338"); 2804 definedEntities.put("↝̸", "\u219D\u0338"); 2805 definedEntities.put("↛", "\u219B"); 2806 definedEntities.put("⋫", "\u22EB"); 2807 definedEntities.put("⋭", "\u22ED"); 2808 definedEntities.put("⊁", "\u2281"); 2809 definedEntities.put("⋡", "\u22E1"); 2810 definedEntities.put("⪰̸", "\u2AB0\u0338"); 2811 definedEntities.put("𝓃", "\uD835\uDCC3"); 2812 definedEntities.put("∤", "\u2224"); 2813 definedEntities.put("∦", "\u2226"); 2814 definedEntities.put("≁", "\u2241"); 2815 definedEntities.put("≄", "\u2244"); 2816 definedEntities.put("≄", "\u2244"); 2817 definedEntities.put("∤", "\u2224"); 2818 definedEntities.put("∦", "\u2226"); 2819 definedEntities.put("⋢", "\u22E2"); 2820 definedEntities.put("⋣", "\u22E3"); 2821 definedEntities.put("⊄", "\u2284"); 2822 definedEntities.put("⫅̸", "\u2AC5\u0338"); 2823 definedEntities.put("⊈", "\u2288"); 2824 definedEntities.put("⊂⃒", "\u2282\u20D2"); 2825 definedEntities.put("⊈", "\u2288"); 2826 definedEntities.put("⫅̸", "\u2AC5\u0338"); 2827 definedEntities.put("⊁", "\u2281"); 2828 definedEntities.put("⪰̸", "\u2AB0\u0338"); 2829 definedEntities.put("⊅", "\u2285"); 2830 definedEntities.put("⫆̸", "\u2AC6\u0338"); 2831 definedEntities.put("⊉", "\u2289"); 2832 definedEntities.put("⊃⃒", "\u2283\u20D2"); 2833 definedEntities.put("⊉", "\u2289"); 2834 definedEntities.put("⫆̸", "\u2AC6\u0338"); 2835 definedEntities.put("≹", "\u2279"); 2836 definedEntities.put("ñ", "\u00F1"); 2837 definedEntities.put("≸", "\u2278"); 2838 definedEntities.put("⋪", "\u22EA"); 2839 definedEntities.put("⋬", "\u22EC"); 2840 definedEntities.put("⋫", "\u22EB"); 2841 definedEntities.put("⋭", "\u22ED"); 2842 definedEntities.put("ν", "\u03BD"); 2843 definedEntities.put("#", "\u0023"); 2844 definedEntities.put("№", "\u2116"); 2845 definedEntities.put(" ", "\u2007"); 2846 definedEntities.put("⊭", "\u22AD"); 2847 definedEntities.put("⤄", "\u2904"); 2848 definedEntities.put("≍⃒", "\u224D\u20D2"); 2849 definedEntities.put("⊬", "\u22AC"); 2850 definedEntities.put("≥⃒", "\u2265\u20D2"); 2851 definedEntities.put(">⃒", "\u003E\u20D2"); 2852 definedEntities.put("⧞", "\u29DE"); 2853 definedEntities.put("⤂", "\u2902"); 2854 definedEntities.put("≤⃒", "\u2264\u20D2"); 2855 definedEntities.put("<⃒", "\u003C\u20D2"); 2856 definedEntities.put("⊴⃒", "\u22B4\u20D2"); 2857 definedEntities.put("⤃", "\u2903"); 2858 definedEntities.put("⊵⃒", "\u22B5\u20D2"); 2859 definedEntities.put("∼⃒", "\u223C\u20D2"); 2860 definedEntities.put("⇖", "\u21D6"); 2861 definedEntities.put("⤣", "\u2923"); 2862 definedEntities.put("↖", "\u2196"); 2863 definedEntities.put("↖", "\u2196"); 2864 definedEntities.put("⤧", "\u2927"); 2865 definedEntities.put("Ⓢ", "\u24C8"); 2866 definedEntities.put("ó", "\u00F3"); 2867 definedEntities.put("⊛", "\u229B"); 2868 definedEntities.put("⊚", "\u229A"); 2869 definedEntities.put("ô", "\u00F4"); 2870 definedEntities.put("о", "\u043E"); 2871 definedEntities.put("⊝", "\u229D"); 2872 definedEntities.put("ő", "\u0151"); 2873 definedEntities.put("⨸", "\u2A38"); 2874 definedEntities.put("⊙", "\u2299"); 2875 definedEntities.put("⦼", "\u29BC"); 2876 definedEntities.put("œ", "\u0153"); 2877 definedEntities.put("⦿", "\u29BF"); 2878 definedEntities.put("𝔬", "\uD835\uDD2C"); 2879 definedEntities.put("˛", "\u02DB"); 2880 definedEntities.put("ò", "\u00F2"); 2881 definedEntities.put("⧁", "\u29C1"); 2882 definedEntities.put("⦵", "\u29B5"); 2883 definedEntities.put("Ω", "\u03A9"); 2884 definedEntities.put("∮", "\u222E"); 2885 definedEntities.put("↺", "\u21BA"); 2886 definedEntities.put("⦾", "\u29BE"); 2887 definedEntities.put("⦻", "\u29BB"); 2888 definedEntities.put("‾", "\u203E"); 2889 definedEntities.put("⧀", "\u29C0"); 2890 definedEntities.put("ō", "\u014D"); 2891 definedEntities.put("ω", "\u03C9"); 2892 definedEntities.put("ο", "\u03BF"); 2893 definedEntities.put("⦶", "\u29B6"); 2894 definedEntities.put("⊖", "\u2296"); 2895 definedEntities.put("𝕠", "\uD835\uDD60"); 2896 definedEntities.put("⦷", "\u29B7"); 2897 definedEntities.put("⦹", "\u29B9"); 2898 definedEntities.put("⊕", "\u2295"); 2899 definedEntities.put("∨", "\u2228"); 2900 definedEntities.put("↻", "\u21BB"); 2901 definedEntities.put("⩝", "\u2A5D"); 2902 definedEntities.put("ℴ", "\u2134"); 2903 definedEntities.put("ℴ", "\u2134"); 2904 definedEntities.put("ª", "\u00AA"); 2905 definedEntities.put("º", "\u00BA"); 2906 definedEntities.put("⊶", "\u22B6"); 2907 definedEntities.put("⩖", "\u2A56"); 2908 definedEntities.put("⩗", "\u2A57"); 2909 definedEntities.put("⩛", "\u2A5B"); 2910 definedEntities.put("ℴ", "\u2134"); 2911 definedEntities.put("ø", "\u00F8"); 2912 definedEntities.put("⊘", "\u2298"); 2913 definedEntities.put("õ", "\u00F5"); 2914 definedEntities.put("⊗", "\u2297"); 2915 definedEntities.put("⨶", "\u2A36"); 2916 definedEntities.put("ö", "\u00F6"); 2917 definedEntities.put("⌽", "\u233D"); 2918 definedEntities.put("∥", "\u2225"); 2919 definedEntities.put("¶", "\u00B6"); 2920 definedEntities.put("∥", "\u2225"); 2921 definedEntities.put("⫳", "\u2AF3"); 2922 definedEntities.put("⫽", "\u2AFD"); 2923 definedEntities.put("∂", "\u2202"); 2924 definedEntities.put("п", "\u043F"); 2925 definedEntities.put("%", "\u0025"); 2926 definedEntities.put(".", "\u002E"); 2927 definedEntities.put("‰", "\u2030"); 2928 definedEntities.put("⊥", "\u22A5"); 2929 definedEntities.put("‱", "\u2031"); 2930 definedEntities.put("𝔭", "\uD835\uDD2D"); 2931 definedEntities.put("φ", "\u03C6"); 2932 definedEntities.put("ϕ", "\u03D5"); 2933 definedEntities.put("ℳ", "\u2133"); 2934 definedEntities.put("☎", "\u260E"); 2935 definedEntities.put("π", "\u03C0"); 2936 definedEntities.put("⋔", "\u22D4"); 2937 definedEntities.put("ϖ", "\u03D6"); 2938 definedEntities.put("ℏ", "\u210F"); 2939 definedEntities.put("ℎ", "\u210E"); 2940 definedEntities.put("ℏ", "\u210F"); 2941 definedEntities.put("+", "\u002B"); 2942 definedEntities.put("⨣", "\u2A23"); 2943 definedEntities.put("⊞", "\u229E"); 2944 definedEntities.put("⨢", "\u2A22"); 2945 definedEntities.put("∔", "\u2214"); 2946 definedEntities.put("⨥", "\u2A25"); 2947 definedEntities.put("⩲", "\u2A72"); 2948 definedEntities.put("±", "\u00B1"); 2949 definedEntities.put("⨦", "\u2A26"); 2950 definedEntities.put("⨧", "\u2A27"); 2951 definedEntities.put("±", "\u00B1"); 2952 definedEntities.put("⨕", "\u2A15"); 2953 definedEntities.put("𝕡", "\uD835\uDD61"); 2954 definedEntities.put("£", "\u00A3"); 2955 definedEntities.put("≺", "\u227A"); 2956 definedEntities.put("⪳", "\u2AB3"); 2957 definedEntities.put("⪷", "\u2AB7"); 2958 definedEntities.put("≼", "\u227C"); 2959 definedEntities.put("⪯", "\u2AAF"); 2960 definedEntities.put("≺", "\u227A"); 2961 definedEntities.put("⪷", "\u2AB7"); 2962 definedEntities.put("≼", "\u227C"); 2963 definedEntities.put("⪯", "\u2AAF"); 2964 definedEntities.put("⪹", "\u2AB9"); 2965 definedEntities.put("⪵", "\u2AB5"); 2966 definedEntities.put("⋨", "\u22E8"); 2967 definedEntities.put("≾", "\u227E"); 2968 definedEntities.put("′", "\u2032"); 2969 definedEntities.put("ℙ", "\u2119"); 2970 definedEntities.put("⪵", "\u2AB5"); 2971 definedEntities.put("⪹", "\u2AB9"); 2972 definedEntities.put("⋨", "\u22E8"); 2973 definedEntities.put("∏", "\u220F"); 2974 definedEntities.put("⌮", "\u232E"); 2975 definedEntities.put("⌒", "\u2312"); 2976 definedEntities.put("⌓", "\u2313"); 2977 definedEntities.put("∝", "\u221D"); 2978 definedEntities.put("∝", "\u221D"); 2979 definedEntities.put("≾", "\u227E"); 2980 definedEntities.put("⊰", "\u22B0"); 2981 definedEntities.put("𝓅", "\uD835\uDCC5"); 2982 definedEntities.put("ψ", "\u03C8"); 2983 definedEntities.put(" ", "\u2008"); 2984 definedEntities.put("𝔮", "\uD835\uDD2E"); 2985 definedEntities.put("⨌", "\u2A0C"); 2986 definedEntities.put("𝕢", "\uD835\uDD62"); 2987 definedEntities.put("⁗", "\u2057"); 2988 definedEntities.put("𝓆", "\uD835\uDCC6"); 2989 definedEntities.put("ℍ", "\u210D"); 2990 definedEntities.put("⨖", "\u2A16"); 2991 definedEntities.put("?", "\u003F"); 2992 definedEntities.put("≟", "\u225F"); 2993 definedEntities.put(""", "\\u0022"); 2994 definedEntities.put("⇛", "\u21DB"); 2995 definedEntities.put("⇒", "\u21D2"); 2996 definedEntities.put("⤜", "\u291C"); 2997 definedEntities.put("⤏", "\u290F"); 2998 definedEntities.put("⥤", "\u2964"); 2999 definedEntities.put("∽̱", "\u223D\u0331"); 3000 definedEntities.put("ŕ", "\u0155"); 3001 definedEntities.put("√", "\u221A"); 3002 definedEntities.put("⦳", "\u29B3"); 3003 definedEntities.put("⟩", "\u27E9"); 3004 definedEntities.put("⦒", "\u2992"); 3005 definedEntities.put("⦥", "\u29A5"); 3006 definedEntities.put("⟩", "\u27E9"); 3007 definedEntities.put("»", "\u00BB"); 3008 definedEntities.put("→", "\u2192"); 3009 definedEntities.put("⥵", "\u2975"); 3010 definedEntities.put("⇥", "\u21E5"); 3011 definedEntities.put("⤠", "\u2920"); 3012 definedEntities.put("⤳", "\u2933"); 3013 definedEntities.put("⤞", "\u291E"); 3014 definedEntities.put("↪", "\u21AA"); 3015 definedEntities.put("↬", "\u21AC"); 3016 definedEntities.put("⥅", "\u2945"); 3017 definedEntities.put("⥴", "\u2974"); 3018 definedEntities.put("↣", "\u21A3"); 3019 definedEntities.put("↝", "\u219D"); 3020 definedEntities.put("⤚", "\u291A"); 3021 definedEntities.put("∶", "\u2236"); 3022 definedEntities.put("ℚ", "\u211A"); 3023 definedEntities.put("⤍", "\u290D"); 3024 definedEntities.put("❳", "\u2773"); 3025 definedEntities.put("}", "\u007D"); 3026 definedEntities.put("]", "\u005D"); 3027 definedEntities.put("⦌", "\u298C"); 3028 definedEntities.put("⦎", "\u298E"); 3029 definedEntities.put("⦐", "\u2990"); 3030 definedEntities.put("ř", "\u0159"); 3031 definedEntities.put("ŗ", "\u0157"); 3032 definedEntities.put("⌉", "\u2309"); 3033 definedEntities.put("}", "\u007D"); 3034 definedEntities.put("р", "\u0440"); 3035 definedEntities.put("⤷", "\u2937"); 3036 definedEntities.put("⥩", "\u2969"); 3037 definedEntities.put("”", "\u201D"); 3038 definedEntities.put("”", "\u201D"); 3039 definedEntities.put("↳", "\u21B3"); 3040 definedEntities.put("ℜ", "\u211C"); 3041 definedEntities.put("ℛ", "\u211B"); 3042 definedEntities.put("ℜ", "\u211C"); 3043 definedEntities.put("ℝ", "\u211D"); 3044 definedEntities.put("▭", "\u25AD"); 3045 definedEntities.put("®", "\u00AE"); 3046 definedEntities.put("⥽", "\u297D"); 3047 definedEntities.put("⌋", "\u230B"); 3048 definedEntities.put("𝔯", "\uD835\uDD2F"); 3049 definedEntities.put("⇁", "\u21C1"); 3050 definedEntities.put("⇀", "\u21C0"); 3051 definedEntities.put("⥬", "\u296C"); 3052 definedEntities.put("ρ", "\u03C1"); 3053 definedEntities.put("ϱ", "\u03F1"); 3054 definedEntities.put("→", "\u2192"); 3055 definedEntities.put("↣", "\u21A3"); 3056 definedEntities.put("⇁", "\u21C1"); 3057 definedEntities.put("⇀", "\u21C0"); 3058 definedEntities.put("⇄", "\u21C4"); 3059 definedEntities.put("⇌", "\u21CC"); 3060 definedEntities.put("⇉", "\u21C9"); 3061 definedEntities.put("↝", "\u219D"); 3062 definedEntities.put("⋌", "\u22CC"); 3063 definedEntities.put("˚", "\u02DA"); 3064 definedEntities.put("≓", "\u2253"); 3065 definedEntities.put("⇄", "\u21C4"); 3066 definedEntities.put("⇌", "\u21CC"); 3067 definedEntities.put("‏", "\u200F"); 3068 definedEntities.put("⎱", "\u23B1"); 3069 definedEntities.put("⎱", "\u23B1"); 3070 definedEntities.put("⫮", "\u2AEE"); 3071 definedEntities.put("⟭", "\u27ED"); 3072 definedEntities.put("⇾", "\u21FE"); 3073 definedEntities.put("⟧", "\u27E7"); 3074 definedEntities.put("⦆", "\u2986"); 3075 definedEntities.put("𝕣", "\uD835\uDD63"); 3076 definedEntities.put("⨮", "\u2A2E"); 3077 definedEntities.put("⨵", "\u2A35"); 3078 definedEntities.put(")", "\u0029"); 3079 definedEntities.put("⦔", "\u2994"); 3080 definedEntities.put("⨒", "\u2A12"); 3081 definedEntities.put("⇉", "\u21C9"); 3082 definedEntities.put("›", "\u203A"); 3083 definedEntities.put("𝓇", "\uD835\uDCC7"); 3084 definedEntities.put("↱", "\u21B1"); 3085 definedEntities.put("]", "\u005D"); 3086 definedEntities.put("’", "\u2019"); 3087 definedEntities.put("’", "\u2019"); 3088 definedEntities.put("⋌", "\u22CC"); 3089 definedEntities.put("⋊", "\u22CA"); 3090 definedEntities.put("▹", "\u25B9"); 3091 definedEntities.put("⊵", "\u22B5"); 3092 definedEntities.put("▸", "\u25B8"); 3093 definedEntities.put("⧎", "\u29CE"); 3094 definedEntities.put("⥨", "\u2968"); 3095 definedEntities.put("℞", "\u211E"); 3096 definedEntities.put("ś", "\u015B"); 3097 definedEntities.put("‚", "\u201A"); 3098 definedEntities.put("≻", "\u227B"); 3099 definedEntities.put("⪴", "\u2AB4"); 3100 definedEntities.put("⪸", "\u2AB8"); 3101 definedEntities.put("š", "\u0161"); 3102 definedEntities.put("≽", "\u227D"); 3103 definedEntities.put("⪰", "\u2AB0"); 3104 definedEntities.put("ş", "\u015F"); 3105 definedEntities.put("ŝ", "\u015D"); 3106 definedEntities.put("⪶", "\u2AB6"); 3107 definedEntities.put("⪺", "\u2ABA"); 3108 definedEntities.put("⋩", "\u22E9"); 3109 definedEntities.put("⨓", "\u2A13"); 3110 definedEntities.put("≿", "\u227F"); 3111 definedEntities.put("с", "\u0441"); 3112 definedEntities.put("⋅", "\u22C5"); 3113 definedEntities.put("⊡", "\u22A1"); 3114 definedEntities.put("⩦", "\u2A66"); 3115 definedEntities.put("⇘", "\u21D8"); 3116 definedEntities.put("⤥", "\u2925"); 3117 definedEntities.put("↘", "\u2198"); 3118 definedEntities.put("↘", "\u2198"); 3119 definedEntities.put("§", "\u00A7"); 3120 definedEntities.put(";", "\u003B"); 3121 definedEntities.put("⤩", "\u2929"); 3122 definedEntities.put("∖", "\u2216"); 3123 definedEntities.put("∖", "\u2216"); 3124 definedEntities.put("✶", "\u2736"); 3125 definedEntities.put("𝔰", "\uD835\uDD30"); 3126 definedEntities.put("⌢", "\u2322"); 3127 definedEntities.put("♯", "\u266F"); 3128 definedEntities.put("щ", "\u0449"); 3129 definedEntities.put("ш", "\u0448"); 3130 definedEntities.put("∣", "\u2223"); 3131 definedEntities.put("∥", "\u2225"); 3132 definedEntities.put("­", "\u00AD"); 3133 definedEntities.put("σ", "\u03C3"); 3134 definedEntities.put("ς", "\u03C2"); 3135 definedEntities.put("ς", "\u03C2"); 3136 definedEntities.put("∼", "\u223C"); 3137 definedEntities.put("⩪", "\u2A6A"); 3138 definedEntities.put("≃", "\u2243"); 3139 definedEntities.put("≃", "\u2243"); 3140 definedEntities.put("⪞", "\u2A9E"); 3141 definedEntities.put("⪠", "\u2AA0"); 3142 definedEntities.put("⪝", "\u2A9D"); 3143 definedEntities.put("⪟", "\u2A9F"); 3144 definedEntities.put("≆", "\u2246"); 3145 definedEntities.put("⨤", "\u2A24"); 3146 definedEntities.put("⥲", "\u2972"); 3147 definedEntities.put("←", "\u2190"); 3148 definedEntities.put("∖", "\u2216"); 3149 definedEntities.put("⨳", "\u2A33"); 3150 definedEntities.put("⧤", "\u29E4"); 3151 definedEntities.put("∣", "\u2223"); 3152 definedEntities.put("⌣", "\u2323"); 3153 definedEntities.put("⪪", "\u2AAA"); 3154 definedEntities.put("⪬", "\u2AAC"); 3155 definedEntities.put("⪬︀", "\u2AAC\uFE00"); 3156 definedEntities.put("ь", "\u044C"); 3157 definedEntities.put("/", "\u002F"); 3158 definedEntities.put("⧄", "\u29C4"); 3159 definedEntities.put("⌿", "\u233F"); 3160 definedEntities.put("𝕤", "\uD835\uDD64"); 3161 definedEntities.put("♠", "\u2660"); 3162 definedEntities.put("♠", "\u2660"); 3163 definedEntities.put("∥", "\u2225"); 3164 definedEntities.put("⊓", "\u2293"); 3165 definedEntities.put("⊓︀", "\u2293\uFE00"); 3166 definedEntities.put("⊔", "\u2294"); 3167 definedEntities.put("⊔︀", "\u2294\uFE00"); 3168 definedEntities.put("⊏", "\u228F"); 3169 definedEntities.put("⊑", "\u2291"); 3170 definedEntities.put("⊏", "\u228F"); 3171 definedEntities.put("⊑", "\u2291"); 3172 definedEntities.put("⊐", "\u2290"); 3173 definedEntities.put("⊒", "\u2292"); 3174 definedEntities.put("⊐", "\u2290"); 3175 definedEntities.put("⊒", "\u2292"); 3176 definedEntities.put("□", "\u25A1"); 3177 definedEntities.put("□", "\u25A1"); 3178 definedEntities.put("▪", "\u25AA"); 3179 definedEntities.put("▪", "\u25AA"); 3180 definedEntities.put("→", "\u2192"); 3181 definedEntities.put("𝓈", "\uD835\uDCC8"); 3182 definedEntities.put("∖", "\u2216"); 3183 definedEntities.put("⌣", "\u2323"); 3184 definedEntities.put("⋆", "\u22C6"); 3185 definedEntities.put("☆", "\u2606"); 3186 definedEntities.put("★", "\u2605"); 3187 definedEntities.put("ϵ", "\u03F5"); 3188 definedEntities.put("ϕ", "\u03D5"); 3189 definedEntities.put("¯", "\u00AF"); 3190 definedEntities.put("⊂", "\u2282"); 3191 definedEntities.put("⫅", "\u2AC5"); 3192 definedEntities.put("⪽", "\u2ABD"); 3193 definedEntities.put("⊆", "\u2286"); 3194 definedEntities.put("⫃", "\u2AC3"); 3195 definedEntities.put("⫁", "\u2AC1"); 3196 definedEntities.put("⫋", "\u2ACB"); 3197 definedEntities.put("⊊", "\u228A"); 3198 definedEntities.put("⪿", "\u2ABF"); 3199 definedEntities.put("⥹", "\u2979"); 3200 definedEntities.put("⊂", "\u2282"); 3201 definedEntities.put("⊆", "\u2286"); 3202 definedEntities.put("⫅", "\u2AC5"); 3203 definedEntities.put("⊊", "\u228A"); 3204 definedEntities.put("⫋", "\u2ACB"); 3205 definedEntities.put("⫇", "\u2AC7"); 3206 definedEntities.put("⫕", "\u2AD5"); 3207 definedEntities.put("⫓", "\u2AD3"); 3208 definedEntities.put("≻", "\u227B"); 3209 definedEntities.put("⪸", "\u2AB8"); 3210 definedEntities.put("≽", "\u227D"); 3211 definedEntities.put("⪰", "\u2AB0"); 3212 definedEntities.put("⪺", "\u2ABA"); 3213 definedEntities.put("⪶", "\u2AB6"); 3214 definedEntities.put("⋩", "\u22E9"); 3215 definedEntities.put("≿", "\u227F"); 3216 definedEntities.put("∑", "\u2211"); 3217 definedEntities.put("♪", "\u266A"); 3218 definedEntities.put("¹", "\u00B9"); 3219 definedEntities.put("²", "\u00B2"); 3220 definedEntities.put("³", "\u00B3"); 3221 definedEntities.put("⊃", "\u2283"); 3222 definedEntities.put("⫆", "\u2AC6"); 3223 definedEntities.put("⪾", "\u2ABE"); 3224 definedEntities.put("⫘", "\u2AD8"); 3225 definedEntities.put("⊇", "\u2287"); 3226 definedEntities.put("⫄", "\u2AC4"); 3227 definedEntities.put("⟉", "\u27C9"); 3228 definedEntities.put("⫗", "\u2AD7"); 3229 definedEntities.put("⥻", "\u297B"); 3230 definedEntities.put("⫂", "\u2AC2"); 3231 definedEntities.put("⫌", "\u2ACC"); 3232 definedEntities.put("⊋", "\u228B"); 3233 definedEntities.put("⫀", "\u2AC0"); 3234 definedEntities.put("⊃", "\u2283"); 3235 definedEntities.put("⊇", "\u2287"); 3236 definedEntities.put("⫆", "\u2AC6"); 3237 definedEntities.put("⊋", "\u228B"); 3238 definedEntities.put("⫌", "\u2ACC"); 3239 definedEntities.put("⫈", "\u2AC8"); 3240 definedEntities.put("⫔", "\u2AD4"); 3241 definedEntities.put("⫖", "\u2AD6"); 3242 definedEntities.put("⇙", "\u21D9"); 3243 definedEntities.put("⤦", "\u2926"); 3244 definedEntities.put("↙", "\u2199"); 3245 definedEntities.put("↙", "\u2199"); 3246 definedEntities.put("⤪", "\u292A"); 3247 definedEntities.put("ß", "\u00DF"); 3248 definedEntities.put("⌖", "\u2316"); 3249 definedEntities.put("τ", "\u03C4"); 3250 definedEntities.put("⎴", "\u23B4"); 3251 definedEntities.put("ť", "\u0165"); 3252 definedEntities.put("ţ", "\u0163"); 3253 definedEntities.put("т", "\u0442"); 3254 definedEntities.put("⃛", "\u20DB"); 3255 definedEntities.put("⌕", "\u2315"); 3256 definedEntities.put("𝔱", "\uD835\uDD31"); 3257 definedEntities.put("∴", "\u2234"); 3258 definedEntities.put("∴", "\u2234"); 3259 definedEntities.put("θ", "\u03B8"); 3260 definedEntities.put("ϑ", "\u03D1"); 3261 definedEntities.put("ϑ", "\u03D1"); 3262 definedEntities.put("≈", "\u2248"); 3263 definedEntities.put("∼", "\u223C"); 3264 definedEntities.put(" ", "\u2009"); 3265 definedEntities.put("≈", "\u2248"); 3266 definedEntities.put("∼", "\u223C"); 3267 definedEntities.put("þ", "\u00FE"); 3268 definedEntities.put("˜", "\u02DC"); 3269 definedEntities.put("×", "\u00D7"); 3270 definedEntities.put("⊠", "\u22A0"); 3271 definedEntities.put("⨱", "\u2A31"); 3272 definedEntities.put("⨰", "\u2A30"); 3273 definedEntities.put("∭", "\u222D"); 3274 definedEntities.put("⤨", "\u2928"); 3275 definedEntities.put("⊤", "\u22A4"); 3276 definedEntities.put("⌶", "\u2336"); 3277 definedEntities.put("⫱", "\u2AF1"); 3278 definedEntities.put("𝕥", "\uD835\uDD65"); 3279 definedEntities.put("⫚", "\u2ADA"); 3280 definedEntities.put("⤩", "\u2929"); 3281 definedEntities.put("‴", "\u2034"); 3282 definedEntities.put("™", "\u2122"); 3283 definedEntities.put("▵", "\u25B5"); 3284 definedEntities.put("▿", "\u25BF"); 3285 definedEntities.put("◃", "\u25C3"); 3286 definedEntities.put("⊴", "\u22B4"); 3287 definedEntities.put("≜", "\u225C"); 3288 definedEntities.put("▹", "\u25B9"); 3289 definedEntities.put("⊵", "\u22B5"); 3290 definedEntities.put("◬", "\u25EC"); 3291 definedEntities.put("≜", "\u225C"); 3292 definedEntities.put("⨺", "\u2A3A"); 3293 definedEntities.put("⨹", "\u2A39"); 3294 definedEntities.put("⧍", "\u29CD"); 3295 definedEntities.put("⨻", "\u2A3B"); 3296 definedEntities.put("⏢", "\u23E2"); 3297 definedEntities.put("𝓉", "\uD835\uDCC9"); 3298 definedEntities.put("ц", "\u0446"); 3299 definedEntities.put("ћ", "\u045B"); 3300 definedEntities.put("ŧ", "\u0167"); 3301 definedEntities.put("≬", "\u226C"); 3302 definedEntities.put("↞", "\u219E"); 3303 definedEntities.put("↠", "\u21A0"); 3304 definedEntities.put("⇑", "\u21D1"); 3305 definedEntities.put("⥣", "\u2963"); 3306 definedEntities.put("ú", "\u00FA"); 3307 definedEntities.put("↑", "\u2191"); 3308 definedEntities.put("ў", "\u045E"); 3309 definedEntities.put("ŭ", "\u016D"); 3310 definedEntities.put("û", "\u00FB"); 3311 definedEntities.put("у", "\u0443"); 3312 definedEntities.put("⇅", "\u21C5"); 3313 definedEntities.put("ű", "\u0171"); 3314 definedEntities.put("⥮", "\u296E"); 3315 definedEntities.put("⥾", "\u297E"); 3316 definedEntities.put("𝔲", "\uD835\uDD32"); 3317 definedEntities.put("ù", "\u00F9"); 3318 definedEntities.put("↿", "\u21BF"); 3319 definedEntities.put("↾", "\u21BE"); 3320 definedEntities.put("▀", "\u2580"); 3321 definedEntities.put("⌜", "\u231C"); 3322 definedEntities.put("⌜", "\u231C"); 3323 definedEntities.put("⌏", "\u230F"); 3324 definedEntities.put("◸", "\u25F8"); 3325 definedEntities.put("ū", "\u016B"); 3326 definedEntities.put("¨", "\u00A8"); 3327 definedEntities.put("ų", "\u0173"); 3328 definedEntities.put("𝕦", "\uD835\uDD66"); 3329 definedEntities.put("↑", "\u2191"); 3330 definedEntities.put("↕", "\u2195"); 3331 definedEntities.put("↿", "\u21BF"); 3332 definedEntities.put("↾", "\u21BE"); 3333 definedEntities.put("⊎", "\u228E"); 3334 definedEntities.put("υ", "\u03C5"); 3335 definedEntities.put("ϒ", "\u03D2"); 3336 definedEntities.put("υ", "\u03C5"); 3337 definedEntities.put("⇈", "\u21C8"); 3338 definedEntities.put("⌝", "\u231D"); 3339 definedEntities.put("⌝", "\u231D"); 3340 definedEntities.put("⌎", "\u230E"); 3341 definedEntities.put("ů", "\u016F"); 3342 definedEntities.put("◹", "\u25F9"); 3343 definedEntities.put("𝓊", "\uD835\uDCCA"); 3344 definedEntities.put("⋰", "\u22F0"); 3345 definedEntities.put("ũ", "\u0169"); 3346 definedEntities.put("▵", "\u25B5"); 3347 definedEntities.put("▴", "\u25B4"); 3348 definedEntities.put("⇈", "\u21C8"); 3349 definedEntities.put("ü", "\u00FC"); 3350 definedEntities.put("⦧", "\u29A7"); 3351 definedEntities.put("⇕", "\u21D5"); 3352 definedEntities.put("⫨", "\u2AE8"); 3353 definedEntities.put("⫩", "\u2AE9"); 3354 definedEntities.put("⊨", "\u22A8"); 3355 definedEntities.put("⦜", "\u299C"); 3356 definedEntities.put("ϵ", "\u03F5"); 3357 definedEntities.put("ϰ", "\u03F0"); 3358 definedEntities.put("∅", "\u2205"); 3359 definedEntities.put("ϕ", "\u03D5"); 3360 definedEntities.put("ϖ", "\u03D6"); 3361 definedEntities.put("∝", "\u221D"); 3362 definedEntities.put("↕", "\u2195"); 3363 definedEntities.put("ϱ", "\u03F1"); 3364 definedEntities.put("ς", "\u03C2"); 3365 definedEntities.put("⊊︀", "\u228A\uFE00"); 3366 definedEntities.put("⫋︀", "\u2ACB\uFE00"); 3367 definedEntities.put("⊋︀", "\u228B\uFE00"); 3368 definedEntities.put("⫌︀", "\u2ACC\uFE00"); 3369 definedEntities.put("ϑ", "\u03D1"); 3370 definedEntities.put("⊲", "\u22B2"); 3371 definedEntities.put("⊳", "\u22B3"); 3372 definedEntities.put("в", "\u0432"); 3373 definedEntities.put("⊢", "\u22A2"); 3374 definedEntities.put("∨", "\u2228"); 3375 definedEntities.put("⊻", "\u22BB"); 3376 definedEntities.put("≚", "\u225A"); 3377 definedEntities.put("⋮", "\u22EE"); 3378 definedEntities.put("|", "\u007C"); 3379 definedEntities.put("|", "\u007C"); 3380 definedEntities.put("𝔳", "\uD835\uDD33"); 3381 definedEntities.put("⊲", "\u22B2"); 3382 definedEntities.put("⊂⃒", "\u2282\u20D2"); 3383 definedEntities.put("⊃⃒", "\u2283\u20D2"); 3384 definedEntities.put("𝕧", "\uD835\uDD67"); 3385 definedEntities.put("∝", "\u221D"); 3386 definedEntities.put("⊳", "\u22B3"); 3387 definedEntities.put("𝓋", "\uD835\uDCCB"); 3388 definedEntities.put("⫋︀", "\u2ACB\uFE00"); 3389 definedEntities.put("⊊︀", "\u228A\uFE00"); 3390 definedEntities.put("⫌︀", "\u2ACC\uFE00"); 3391 definedEntities.put("⊋︀", "\u228B\uFE00"); 3392 definedEntities.put("⦚", "\u299A"); 3393 definedEntities.put("ŵ", "\u0175"); 3394 definedEntities.put("⩟", "\u2A5F"); 3395 definedEntities.put("∧", "\u2227"); 3396 definedEntities.put("≙", "\u2259"); 3397 definedEntities.put("℘", "\u2118"); 3398 definedEntities.put("𝔴", "\uD835\uDD34"); 3399 definedEntities.put("𝕨", "\uD835\uDD68"); 3400 definedEntities.put("℘", "\u2118"); 3401 definedEntities.put("≀", "\u2240"); 3402 definedEntities.put("≀", "\u2240"); 3403 definedEntities.put("𝓌", "\uD835\uDCCC"); 3404 definedEntities.put("⋂", "\u22C2"); 3405 definedEntities.put("◯", "\u25EF"); 3406 definedEntities.put("⋃", "\u22C3"); 3407 definedEntities.put("▽", "\u25BD"); 3408 definedEntities.put("𝔵", "\uD835\uDD35"); 3409 definedEntities.put("⟺", "\u27FA"); 3410 definedEntities.put("⟷", "\u27F7"); 3411 definedEntities.put("ξ", "\u03BE"); 3412 definedEntities.put("⟸", "\u27F8"); 3413 definedEntities.put("⟵", "\u27F5"); 3414 definedEntities.put("⟼", "\u27FC"); 3415 definedEntities.put("⋻", "\u22FB"); 3416 definedEntities.put("⨀", "\u2A00"); 3417 definedEntities.put("𝕩", "\uD835\uDD69"); 3418 definedEntities.put("⨁", "\u2A01"); 3419 definedEntities.put("⨂", "\u2A02"); 3420 definedEntities.put("⟹", "\u27F9"); 3421 definedEntities.put("⟶", "\u27F6"); 3422 definedEntities.put("𝓍", "\uD835\uDCCD"); 3423 definedEntities.put("⨆", "\u2A06"); 3424 definedEntities.put("⨄", "\u2A04"); 3425 definedEntities.put("△", "\u25B3"); 3426 definedEntities.put("⋁", "\u22C1"); 3427 definedEntities.put("⋀", "\u22C0"); 3428 definedEntities.put("ý", "\u00FD"); 3429 definedEntities.put("я", "\u044F"); 3430 definedEntities.put("ŷ", "\u0177"); 3431 definedEntities.put("ы", "\u044B"); 3432 definedEntities.put("¥", "\u00A5"); 3433 definedEntities.put("𝔶", "\uD835\uDD36"); 3434 definedEntities.put("ї", "\u0457"); 3435 definedEntities.put("𝕪", "\uD835\uDD6A"); 3436 definedEntities.put("𝓎", "\uD835\uDCCE"); 3437 definedEntities.put("ю", "\u044E"); 3438 definedEntities.put("ÿ", "\u00FF"); 3439 definedEntities.put("ź", "\u017A"); 3440 definedEntities.put("ž", "\u017E"); 3441 definedEntities.put("з", "\u0437"); 3442 definedEntities.put("ż", "\u017C"); 3443 definedEntities.put("ℨ", "\u2128"); 3444 definedEntities.put("ζ", "\u03B6"); 3445 definedEntities.put("𝔷", "\uD835\uDD37"); 3446 definedEntities.put("ж", "\u0436"); 3447 definedEntities.put("⇝", "\u21DD"); 3448 definedEntities.put("𝕫", "\uD835\uDD6B"); 3449 definedEntities.put("𝓏", "\uD835\uDCCF"); 3450 definedEntities.put("‍", "\u200D"); 3451 definedEntities.put("‌", "\u200C"); 3452 } 3453 3454}